@cline/core 0.0.42-nightly.1780514867 → 0.0.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,23 +1,23 @@
1
- import{createRequire as fK}from"node:module";var{defineProperty:ZQ,getOwnPropertyNames:ZK}=Object;var O3=Object.prototype.hasOwnProperty;function _3($){return this[$]}var M=($,J,Z)=>{var Q=ZK(J);for(let W of Q)if(!O3.call($,W)&&W!=="default")ZQ($,W,{get:_3.bind(J,W),enumerable:!0});if(Z){for(let W of Q)if(!O3.call(Z,W)&&W!=="default")ZQ(Z,W,{get:_3.bind(J,W),enumerable:!0});return Z}};var QK=($)=>$;function WK($,J){this[$]=QK.bind(null,J)}var w=($,J)=>{for(var Z in J)ZQ($,Z,{get:J[Z],enumerable:!0,configurable:!0,set:WK.bind(J,Z)})};var P1=($,J)=>()=>($&&(J=$($=0)),J);var T3=fK(import.meta.url);import{SDK_ERROR_TELEMETRY_EVENT as jK}from"@cline/shared";function d($,J,Z){$?.capture({event:J,properties:Z})}function e4($){if(!$)return;return $.substring(0,XK)}function HK($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function YK($){return typeof $==="string"?$:$.message}function N3($,J){return $.some((Z)=>J.has(Z.trim().toLowerCase()))}function M3($){d($,x.CLIENT.EXTENSION_ACTIVATED)}function $6($,J){let Z=[...J.vcs_types],Q={root_count:J.root_count,vcs_types:Z,is_multi_root:J.root_count>1,has_git:N3(Z,new Set(["git"])),has_mercurial:N3(Z,new Set(["mercurial","hg"]))};if(J.init_duration_ms!==void 0)Q.init_duration_ms=J.init_duration_ms;if(J.feature_flag_enabled!==void 0)Q.feature_flag_enabled=J.feature_flag_enabled;if(J.is_remote_workspace!==void 0)Q.is_remote_workspace=J.is_remote_workspace;d($,x.WORKSPACE.INITIALIZED,Q)}function J6($,J,Z){d($,x.WORKSPACE.INIT_ERROR,{error_type:HK(J),error_message:e4(YK(J)),fallback_to_single_root:Z.fallback_to_single_root,workspace_count:Z.workspace_count??0})}function q3($,J){d($,x.WORKSPACE.PATH_RESOLVED,{...J})}function R$($,J){d($,x.USER.AUTH_STARTED,{provider:J})}function D$($,J){d($,x.USER.AUTH_SUCCEEDED,{provider:J})}function P$($,J,Z){d($,x.USER.AUTH_FAILED,{provider:J,errorMessage:e4(Z)})}function g$($,J,Z){d($,x.USER.AUTH_LOGGED_OUT,{provider:J,reason:Z})}function y3($,J){d($,x.USER.PROVIDER_CONFIGURED,{provider:J})}function w3($,J){$?.captureRequired(x.USER.TELEMETRY_OPT_OUT,J)}function L$($,J){let Z=J.id?.trim();if(Z)$?.setDistinctId(Z);$?.updateCommonProperties({account_id:J.id,account_email:J.email,provider:J.provider,organization_id:J.organizationId,organization_name:J.organizationName,member_id:J.memberId})}function Z6($,J){d($,x.TASK.CREATED,J)}function Q6($,J){d($,x.TASK.RESTARTED,J)}function k8($,J){d($,x.TASK.COMPLETED,J)}function R2($,J){d($,x.TASK.CONVERSATION_TURN,{...J,timestamp:new Date().toISOString()})}function W6($,J){d($,x.TASK.TOKEN_USAGE,J)}function f6($,J,Z){d($,x.TASK.MODE_SWITCH,{ulid:J,mode:Z})}function j6($,J){d($,x.TASK.TOOL_USED,J)}function X6($,J){d($,x.TASK.SKILL_USED,J)}function H6($,J){d($,x.TASK.DIFF_EDIT_FAILED,J)}function I8($,J){d($,x.TASK.PROVIDER_API_ERROR,{...J,errorMessage:e4(J.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function S3($,J){d($,x.SDK.TOOL_TIMEOUT,AK(J))}function AK($){let J={};for(let[Z,Q]of Object.entries($))if(Q!==void 0)J[Z]=Q;return J}function Y6($,J,Z){d($,x.TASK.MENTION_USED,{mentionType:J,contentLength:Z,timestamp:new Date().toISOString()})}function A6($,J,Z,Q){d($,x.TASK.MENTION_FAILED,{mentionType:J,errorType:Z,errorMessage:e4(Q),timestamp:new Date().toISOString()})}function V6($,J,Z,Q,W){d($,x.TASK.MENTION_SEARCH_RESULTS,{queryLength:J.length,resultCount:Z,searchType:Q,isEmpty:W,timestamp:new Date().toISOString()})}function v$($,J){d($,x.TASK.AGENT_CREATED,{...J,timestamp:new Date().toISOString()})}function B6($,J){d($,x.TASK.AGENT_TEAM_CREATED,{...J,timestamp:new Date().toISOString()})}function x8($,J){d($,J.event==="ended"?x.TASK.SUBAGENT_COMPLETED:x.TASK.SUBAGENT_STARTED,{...J,timestamp:new Date().toISOString()})}function K6($,J,Z,Q){d($,x.HOOKS.DISCOVERY_COMPLETED,{hookName:J,globalCount:Z,workspaceCount:Q,totalCount:Z+Q,timestamp:new Date().toISOString()})}function G6($,J){d($,x.TASK.COMPACTION_EXECUTED,{...J,timestamp:new Date().toISOString()})}function F6($,J){d($,x.TASK.COMPACTION_SKIPPED,{...J,timestamp:new Date().toISOString()})}var XK=500,x;var L0=P1(()=>{x={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",PROVIDER_CONFIGURED:"user.provider_configured",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed",COMPACTION_EXECUTED:"task.compaction_executed",COMPACTION_SKIPPED:"task.compaction_skipped"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:jK,TOOL_TIMEOUT:"sdk.tool_timeout"}}});var uf={};w(uf,{normalizeUserMessage:()=>UF,buildInitialUserContent:()=>FF});async function FF($,J,Z,Q){let W=RF(J),f=await PF(Z,Q);if(W.length===0&&!f)return $;let j=[{type:"text",text:$},...W];if(f)j.push(...f);return j}function UF($){if($==null)return"";if(typeof $==="string")return $;let J=$.content;if(typeof J==="string")return J;if(!Array.isArray(J))return"";let Z=[];for(let Q of J)if(Q&&typeof Q==="object"&&Q.type==="text"){let W=Q.text;if(typeof W==="string")Z.push(W)}return Z.join(`
2
- `)}function RF($){if(!$||$.length===0)return[];let J=[];for(let Z of $){let Q=DF(Z);if(Q)J.push(Q)}return J}function DF($){let J=$.trim();if(!J)return;let Z=J.match(/^data:([^;,]+);base64,(.+)$/);if(Z){let Q=Z[1],W=Z[2];if(!Q||!W)return;return{type:"image",mediaType:Q,data:W}}return{type:"image",mediaType:"image/png",data:J}}async function PF($,J){if(!$||$.length===0)return;let Z=J??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),Q=await Promise.all($.map(async(W)=>{let f=W.replace(/\\/g,"/");try{let j=await Z(W);return{type:"file",path:f,content:j}}catch(j){let X=j instanceof Error?j.message:String(j);return{type:"file",path:f,content:`Error fetching content: ${X}`}}}));if(Q.length===0)return;return Q}import{mkdirSync as FU,readFileSync as UU,statSync as RU,writeFileSync as DU}from"node:fs";import{dirname as PU}from"node:path";import{resolveGlobalSettingsPath as Cj}from"@cline/shared/storage";import{z as UJ}from"zod";function k6(){return RJ.parse({})}function LU(){I6=void 0}function zU($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function OU($){let J;try{J=UU($,"utf8")}catch{return k6()}try{let Z=RJ.safeParse(JSON.parse(J));return Z.success?Z.data:k6()}catch{return k6()}}function _U(){let $=Cj(),J=RU($,{throwIfNoEntry:!1}),Z=J?.mtimeMs??0,Q=J?.size??0,W=I6;if(W&&W.path===$&&W.mtimeMs===Z&&W.size===Q)return W;let f=zU(J?OU($):k6());return I6={path:$,mtimeMs:Z,size:Q,value:f},I6}function Q$(){return _U().value}function I2($,J={}){let Z=Cj(),Q=Q$();FU(PU(Z),{recursive:!0});let W=RJ.parse($);if(!Q.telemetryOptOut&&W.telemetryOptOut)w3(J.telemetry);DU(Z,`${JSON.stringify(W,null,2)}
3
- `,"utf8"),LU()}function x6(){return Q$().telemetryOptOut}function Ej($,J={}){I2({...Q$(),telemetryOptOut:$},J)}function W$($){return new Set($??Q$().disabledTools??[])}function DJ($){return new Set($??Q$().disabledPlugins??[])}function hj($){return W$().has($)}function m6($){let J=Q$(),Z=new Set(J.disabledTools??[]),Q=Z.has($);if(Q)Z.delete($);else Z.add($);return I2({...J,disabledTools:[...Z]}),!Q}function rQ($,J){let Z=[...new Set($.map((f)=>f.trim()).filter(Boolean))];if(Z.length===0)return;let Q=Q$(),W=W$(Q.disabledTools);for(let f of Z)if(J)W.add(f);else W.delete(f);I2({...Q,disabledTools:[...W]})}function bj($,J){return rQ([$],J),J}function kj($){return DJ().has($)}function Ij($,J){let Z=$.trim();if(!Z)return;let Q=Q$(),W=DJ(Q.disabledPlugins);if(J)W.add(Z);else W.delete(Z);I2({...Q,disabledPlugins:[...W]})}function g6($,J){let Z=DJ(J);if(Z.size===0)return[...$];return $.filter((Q)=>!Z.has(Q))}function k1($,J){let Z=W$(J);if(Z.size===0)return[...$];return $.filter((Q)=>!Z.has(Q.name))}function v6($,J){if(!$||$.length===0)return $;let Z=W$(J);if(Z.size===0)return $;return $.map((Q)=>{if(!Q.setup)return Q;return{...Q,setup:(W,f)=>Q.setup?.({...W,registerTool:(j)=>{if(!Z.has(j.name))W.registerTool(j)}},f)}})}var Sj,RJ,I6;var y$=P1(()=>{L0();Sj=UJ.preprocess(($)=>Array.isArray($)?$.filter((J)=>typeof J==="string").map((J)=>J.trim()).filter(Boolean):void 0,UJ.array(UJ.string()).optional()).transform(($)=>{if(!$)return;let J=[...new Set($)].sort((Z,Q)=>Z.localeCompare(Q));return J.length>0?J:void 0}),RJ=UJ.object({telemetryOptOut:UJ.boolean().default(!1).catch(!1),disabledTools:Sj.optional(),disabledPlugins:Sj.optional()}).strip().transform(($)=>{let J={telemetryOptOut:$.telemetryOptOut};if($.disabledTools?.length)J.disabledTools=$.disabledTools;if($.disabledPlugins?.length)J.disabledPlugins=$.disabledPlugins;return J})});var dH={};w(dH,{updateMcpServerOAuthState:()=>a1,setMcpServerDisabled:()=>i1,resolveMcpServerRegistrations:()=>f$,resolveDefaultMcpSettingsPath:()=>O0,registerMcpServersFromSettingsFile:()=>t1,normalizeMcpServerOAuthState:()=>f8,loadMcpSettingsFile:()=>r1,listMcpServerOAuthStatuses:()=>Y4,hasMcpSettingsFile:()=>C$,getMcpServerOAuthState:()=>n1});import{existsSync as eP,mkdirSync as xH,readFileSync as n9,writeFileSync as mH}from"node:fs";import{dirname as gH}from"node:path";import{resolveMcpSettingsPath as $L}from"@cline/shared/storage";import{z as S}from"zod";function i9($){if(!$)return;if($==="http")return"streamableHttp";return $}function O0(){return $L()}function VL($){let J=n9($,"utf8"),Z;try{Z=JSON.parse(J)}catch(Q){let W=Q instanceof Error?Q.message:String(Q);throw Error(`Failed to parse MCP settings JSON at "${$}": ${W}`)}if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Z}function cH($,J){if(!Object.hasOwn($,J))return;let Z=$[J];if(!Z||typeof Z!=="object"||Array.isArray(Z))return;return Z}function BL($,J,Z){Object.defineProperty($,J,{value:Z,enumerable:!0,configurable:!0,writable:!0})}function r1($={}){let J=$.filePath??O0(),Z=n9(J,"utf8"),Q;try{Q=JSON.parse(Z)}catch(f){let j=f instanceof Error?f.message:String(f);throw Error(`Failed to parse MCP settings JSON at "${J}": ${j}`)}let W=AL.safeParse(Q);if(!W.success){let f=W.error.issues.map((j)=>{let X=j.path.join(".");return X?`${X}: ${j.message}`:j.message}).join("; ");throw Error(`Invalid MCP settings at "${J}": ${f}`)}return W.data}function KL($){let J=n9($,"utf8"),Z;try{Z=JSON.parse(J)}catch(f){let j=f instanceof Error?f.message:String(f);throw Error(`Failed to parse MCP settings JSON at "${$}": ${j}`)}if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error(`Invalid MCP settings at "${$}": expected object`);let Q=Z,W=Q.mcpServers;if(!W||typeof W!=="object"||Array.isArray(W))throw Error(`Invalid MCP settings at "${$}": mcpServers must be an object`);return Q}function f8($){if(!$)return;let J={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(J).length>0?J:void 0}function GL($){if($===void 0)return;let J=a9.safeParse($);if(!J.success)return;return f8(J.data)}function C$($={}){let J=$.filePath??O0();return eP(J)}function f$($={}){let J=r1($);return Object.entries(J.mcpServers).map(([Z,Q])=>({name:Z,transport:Q.transport,disabled:Q.disabled,metadata:Q.metadata,oauth:Q.oauth}))}function i1($){let J=$.filePath??O0(),Z=$.name.trim();if(!Z)throw Error("MCP server settings toggle requires a server name.");let Q=VL(J),W=Q.mcpServers;if(!W||typeof W!=="object"||Array.isArray(W))throw Error(`Invalid MCP settings at "${J}": mcpServers must be an object.`);let f={...W},j=cH(f,Z);if(!j)throw Error(`Unknown MCP server: ${Z}`);let X={...j};if($.disabled)X.disabled=!0;else delete X.disabled;BL(f,Z,X),xH(gH(J),{recursive:!0}),mH(J,`${JSON.stringify({...Q,mcpServers:f},null,2)}
4
- `)}function n1($,J={}){let Z=r1(J);if(!Object.hasOwn(Z.mcpServers,$))return;return f8(Z.mcpServers[$]?.oauth)}function a1($,J,Z={}){let Q=Z.filePath??O0(),W=KL(Q),f=W.mcpServers,j=cH(f,$);if(!j)throw Error(`Unknown MCP server: ${$}`);let X=GL(j.oauth)??{},H=f8(J(X));if(H)j.oauth=H;else delete j.oauth;return xH(gH(Q),{recursive:!0}),mH(Q,`${JSON.stringify(W,null,2)}
5
- `,"utf8"),H??{}}function Y4($={}){return f$($).map((Z)=>{let Q=Z.transport.type!=="stdio",W=Z.oauth?.tokens?.access_token;return{serverName:Z.name,oauthSupported:Q,oauthConfigured:Q&&typeof W==="string"&&W.trim().length>0,lastError:Z.oauth?.lastError,lastAuthenticatedAt:Z.oauth?.lastAuthenticatedAt}}).sort((Z,Q)=>Z.serverName.localeCompare(Q.serverName))}async function t1($,J={}){let Z=f$(J);for(let Q of Z)await $.registerServer(Q);return Z}var H4,vH,a9,JL,ZL,QL,WL,fL,jL,uH,XL,HL,YL,AL;var u5=P1(()=>{H4=S.record(S.string(),S.string()),vH=S.record(S.string(),S.unknown()),a9=S.object({clientInformation:S.record(S.string(),S.unknown()).optional(),tokens:S.record(S.string(),S.unknown()).optional(),codeVerifier:S.string().optional(),discoveryState:S.record(S.string(),S.unknown()).optional(),redirectUrl:S.string().url().optional(),lastError:S.string().optional(),lastAuthenticatedAt:S.number().int().positive().optional()}).strip(),JL=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:H4.optional()}),ZL=S.object({type:S.literal("sse"),url:S.string().url(),headers:H4.optional()}),QL=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:H4.optional()}),WL=S.discriminatedUnion("type",[JL,ZL,QL]),fL=S.object({transport:WL,disabled:S.boolean().optional(),metadata:vH.optional(),oauth:a9.optional()}),jL=S.enum(["stdio","sse","http","streamableHttp"]).optional(),uH=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:jL,disabled:S.boolean().optional(),metadata:vH.optional(),oauth:a9.optional()});XL=uH.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:H4.optional()}).superRefine(($,J)=>{let Z=$.type??i9($.transportType);if(Z&&Z!=="stdio")J.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth})),HL=uH.extend({url:S.string().url(),headers:H4.optional()}).superRefine(($,J)=>{let Z=$.type??i9($.transportType)??"sse";if(Z!=="sse"&&Z!=="streamableHttp")J.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??i9($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth}}),YL=S.union([fL,XL,HL]),AL=S.object({mcpServers:S.record(S.string(),YL)}).passthrough()});import{existsSync as HT,mkdirSync as YT,readFileSync as AT,writeFileSync as VT}from"node:fs";import{resolve as BT}from"node:path";import{resolveSessionDataDir as KT}from"@cline/shared/storage";import{nanoid as GT}from"nanoid";import*as FT from"node-machine-id";function f2($){let J=$?.trim();if(J)return J;let Z=DT();if(Z)return Z;return PT()}function RT(){let $=FT;return $.machineIdSync??$.default?.machineIdSync}function DT(){try{let $=RT();if(!$)return;return $().trim()||void 0}catch{return}}function PT(){let $=KT(),J=BT($,UT);try{if(HT(J)){let Q=AT(J,"utf8").trim();if(Q.length>0)return Q}}catch{}let Z=`cl-${GT()}`;try{YT($,{recursive:!0}),VT(J,Z,"utf8")}catch{}return Z}var UT="machine-id";var VZ=()=>{};class m4{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,J){if(!this.isEnabled())return;this.emitLog($,J,!1)}emitRequired($,J){this.emitLog($,J,!0)}recordCounter($,J,Z,Q,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let f=this.counters.get($);if(!f)f=this.meter.createCounter($,Q?{description:Q}:void 0),this.counters.set($,f);f.add(J,this.flattenProperties(this.buildAttributes(Z)))}recordHistogram($,J,Z,Q,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let f=this.histograms.get($);if(!f)f=this.meter.createHistogram($,Q?{description:Q}:void 0),this.histograms.set($,f);f.record(J,this.flattenProperties(this.buildAttributes(Z)))}recordGauge($,J,Z,Q,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let f=this.buildAttributes(Z),j=JSON.stringify(f),X=this.gaugeValues.get($);if(J===null){if(X){if(X.delete(j),X.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let H=X;if(!H)H=new Map,this.gaugeValues.set($,H);if(!this.gauges.has($)){let Y=this.meter.createObservableGauge($,Q?{description:Q}:void 0);Y.addCallback((A)=>{for(let V of this.snapshotGaugeSeries($))A.observe(V.value,this.flattenProperties(V.attributes))}),this.gauges.set($,Y)}H.set(j,{value:J,attributes:f})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,J,Z){if(!this.logger)return;let Q=this.flattenProperties(this.buildAttributes(J,Z));this.logger.emit({severityText:"INFO",body:$,attributes:Q})}buildAttributes($,J=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...J?{_required:!0}:{}}}snapshotGaugeSeries($){let J=this.gaugeValues.get($);if(!J)return[];return Array.from(J.values(),(Z)=>({value:Z.value,attributes:Z.attributes?{...Z.attributes}:void 0}))}flattenProperties($,J="",Z=new WeakSet,Q=0){if(!$)return{};let W={},f=100,j=10;for(let[X,H]of Object.entries($)){if(X==="__proto__"||X==="constructor"||X==="prototype")continue;let Y=J?`${J}.${X}`:X;if(H===null||H===void 0){W[Y]=String(H);continue}if(Array.isArray(H)){let A=H.length>f?H.slice(0,f):H;try{W[Y]=JSON.stringify(A)}catch{W[Y]="[UnserializableArray]"}if(H.length>f)W[`${Y}_truncated`]=!0,W[`${Y}_original_length`]=H.length;continue}if(typeof H==="object"){if(H instanceof Date){W[Y]=H.toISOString();continue}if(H instanceof Error){W[Y]=H.message;continue}if(Z.has(H)){W[Y]="[Circular]";continue}if(Q>=j){W[Y]="[MaxDepthExceeded]";continue}Z.add(H),Object.assign(W,this.flattenProperties(H,Y,Z,Q+1));continue}if(KN(H)){W[Y]=H;continue}try{W[Y]=JSON.stringify(H)}catch{W[Y]=String(H)}}return W}}function KN($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class g4{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,J){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:J})}emitRequired($,J){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:J})}recordCounter($,J,Z,Q,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:J,attributes:Z,description:Q,required:W===!0})}recordHistogram($,J,Z,Q,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:J,attributes:Z,description:Q,required:W===!0})}recordGauge($,J,Z,Q,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:J,attributes:Z,description:Q,required:W===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class T8{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new g4({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let J=this.buildAttributes($.properties);for(let Z of this.adapters)Z.emit($.event,J)}captureRequired($,J){let Z=this.buildAttributes(J);for(let Q of this.adapters)Q.emitRequired($,Z)}recordCounter($,J,Z,Q,W=!1){let f=this.buildAttributes(Z);for(let j of this.adapters)j.recordCounter($,J,f,Q,W)}recordHistogram($,J,Z,Q,W=!1){let f=this.buildAttributes(Z);for(let j of this.adapters)j.recordHistogram($,J,f,Q,W)}recordGauge($,J,Z,Q,W=!1){let f=this.buildAttributes(Z);for(let j of this.adapters)j.recordGauge($,J,f,Q,W)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var Q7=()=>{};import{metrics as GN,trace as FN}from"@opentelemetry/api";import{logs as UN}from"@opentelemetry/api-logs";import{OTLPLogExporter as RN}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as DN}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as PN}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as LN}from"@opentelemetry/resources";import{BatchLogRecordProcessor as zN,ConsoleLogRecordExporter as ON,LoggerProvider as _N}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as TN,MeterProvider as NN,PeriodicExportingMetricReader as aA}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as MN,ConsoleSpanExporter as qN,SimpleSpanProcessor as yN}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as wN}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as SN,ATTR_SERVICE_VERSION as CN}from"@opentelemetry/semantic-conventions";class tA{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,J){this.resolveProperties(J)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class N8{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let J=LN({[SN]:$.serviceName??"cline",...$.serviceVersion?{[CN]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(J),this.loggerProvider=this.createLoggerProvider(J),this.tracerProvider=this.createTracerProvider(J),this.meterProvider)GN.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)UN.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",J){return FN.getTracer($,J??this.options.serviceVersion)}createAdapter($){return new m4({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let J=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new T8({...$,adapters:[J],distinctId:f2($.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider($){let J=W7(this.options.metricsExporter);if(J.length===0)return null;let Z=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),Q=Math.min(30000,Math.floor(Z*0.8)),W=J.map((f)=>bN(f,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Z,timeout:Q})).filter((f)=>f!==null);if(W.length===0)return null;return new NN({resource:$,readers:W})}createTracerProvider($){let J=W7(this.options.tracesExporter);if(J.length===0)return null;let Z=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,Q=this.options.otlpTracesHeaders??this.options.otlpHeaders,W=[];for(let f of J){let j=hN(f,{endpoint:Z,headers:Q,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(j)W.push(j)}if(W.length===0)return null;return new wN({resource:$,spanProcessors:W})}createLoggerProvider($){let J=W7(this.options.logsExporter);if(J.length===0)return null;let Z=J.map((Q)=>{let W=EN(Q,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!W)return null;return new zN(W,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((Q)=>Q!==null);if(Z.length===0)return null;return new _N({resource:$,processors:Z})}}function v4($){let J=new N8($),Z=J.createTelemetryService($);return Z.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion}),{provider:J,telemetry:Z}}function x$($){if(x6())return{telemetry:new tA($)};if($.enabled!==!0)return{telemetry:new T8({...$,distinctId:f2($.distinctId)})};return v4($)}function M8($){let{telemetry:J,provider:Z}=x$($);return{telemetry:J,provider:Z,flush:async()=>{let f=Z;if(f&&typeof f.forceFlush==="function")try{await f.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([J.dispose(),Z?.dispose()])}}}function W7($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Z)=>Z.trim()).filter((Z)=>Z==="console"||Z==="otlp")}function EN($,J){if($==="console")return new ON;if(!J.endpoint)return null;let Z=f7(J.endpoint,"/v1/logs");return new RN({url:Z,headers:J.headers})}function hN($,J){if($==="console")return new yN(new qN);if(!J.endpoint)return null;let Z=f7(J.endpoint,"/v1/traces");return new MN(new PN({url:Z,headers:J.headers}))}function bN($,J){if($==="console")return new aA({exporter:new TN,exportIntervalMillis:J.interval,exportTimeoutMillis:J.timeout});if(!J.endpoint)return null;let Z=f7(J.endpoint,"/v1/metrics");return new aA({exporter:new DN({url:Z,headers:J.headers}),exportIntervalMillis:J.interval,exportTimeoutMillis:J.timeout})}function f7($,J){let Z=new URL($),Q=Z.pathname.endsWith("/")?Z.pathname.slice(0,-1):Z.pathname;return Z.pathname=Q.endsWith(J)?Q:`${Q}${J}`,Z.toString()}var PZ=P1(()=>{y$();VZ();Q7()});var tV={};w(tV,{createOpenTelemetryTelemetryService:()=>v4,createConfiguredTelemetryService:()=>x$,createConfiguredTelemetryHandle:()=>M8,OpenTelemetryProvider:()=>N8,OpenTelemetryAdapter:()=>m4});var N7=P1(()=>{PZ()});import{initVcr as nw}from"@cline/shared";import{normalizeProviderId as pw}from"@cline/llms";var rB={};w(rB,{LocalRuntimeHost:()=>G$});import{readdirSync as Iw}from"node:fs";import{homedir as xw}from"node:os";import{isAbsolute as mw,join as D3,resolve as P3}from"node:path";import{captureSdkError as G2,createSessionId as gw,isLikelyAuthError as vw,normalizeUserInput as uw}from"@cline/shared";import{setHomeDirIfUnset as cw}from"@cline/shared/storage";L0();var Zf={};w(Zf,{createContextCompactionPrepareTurn:()=>d8});import{createHandlerAsync as FK}from"@cline/llms";import{estimateTokens as QQ}from"@cline/shared";var h3=200000,WQ=0.9,b3=16384,fQ=20000,C3=1024,E3=2000,k3=2000,I3=8;function u$($,J){if($.length<=J)return $;return`${$.slice(0,J)}
6
- ...[truncated ${$.length-J} chars]`}function VK($){let J=jQ($);if(typeof J==="string")return J;return J.map((Z)=>{switch(Z.type){case"text":return Z.text;case"file":return`<file path="${Z.path}">
7
- ${Z.content}
8
- </file>`;case"image":return`[image:${Z.mediaType}]`;default:return""}}).join(`
9
- `)}function jQ($){if(typeof $==="string")return u$($,E3);return $.map((J)=>{switch(J.type){case"text":return{...J,text:u$(J.text,E3)};case"file":return{...J,content:u$(J.content,k3)};case"image":return J;default:return J}})}function BK($){return Object.entries($).map(([J,Z])=>`${J}=${JSON.stringify(Z)}`).join(", ")}function x3($){if(typeof $.content==="string")return`[${$.role==="user"?"User":"Bot"}]: ${$.content}`;let J=[];for(let Z of $.content)switch(Z.type){case"text":J.push(`[${$.role==="user"?"User":"Bot"}]: ${Z.text}`);break;case"thinking":J.push(`[Bot thinking]: ${u$(Z.thinking,2000)}`);break;case"redacted_thinking":J.push("[Bot thinking]: [redacted]");break;case"tool_use":J.push(`[Bot tool calls]: ${Z.name}(${BK(Z.input)})`);break;case"tool_result":J.push(`[Tool result]: ${VK(Z.content)}`);break;case"file":J.push(`[${$.role==="user"?"User":"Bot"} file ${Z.path}]: ${u$(Z.content,k3)}`);break;case"image":J.push(`[${$.role==="user"?"User":"Bot"} image]: ${Z.mediaType}`);break}return J.join(`
10
- `)}function m3($){return $.map(x3).join(`
11
-
12
- `).trim()}function g3(){let $=new WeakMap;return(J)=>{let Z=J,Q=$.get(Z);if(typeof Q==="number")return Q;let W;try{W=JSON.stringify(J)}catch{W=x3(J)}let f=QQ(W.length);return $.set(Z,f),f}}function v8($){return $.metadata?.kind==="compaction_summary"}function XQ($){if(!v8($))return;let J=$.metadata;if(!J)return;let Z=J.details;return{kind:"compaction_summary",summary:String(J.summary??""),details:{readFiles:Array.isArray(Z?.readFiles)?Z.readFiles.filter((Q)=>typeof Q==="string").map((Q)=>Q.trim()).filter((Q)=>Q.length>0):[],modifiedFiles:Array.isArray(Z?.modifiedFiles)?Z.modifiedFiles.filter((Q)=>typeof Q==="string").map((Q)=>Q.trim()).filter((Q)=>Q.length>0):[]},tokensBefore:Number(J.tokensBefore??0),generatedAt:Number(J.generatedAt??0)}}function KK($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((J)=>J.type==="tool_result")}function u8($){return $.role==="user"&&!KK($)&&!v8($)}function v3($){for(let J=0;J<$.length;J+=1)if(u8($[J]))return J;return-1}function U6($){for(let J=$.length-1;J>=0;J-=1)if(u8($[J]))return J;return 0}function u3($){for(let J=$.length-1;J>=0;J-=1)if($[J].role==="assistant")return J;return-1}function c3($){for(let J=$.length-1;J>=0;J-=1)if(v8($[J]))return J;return-1}function d3($,J,Z){let Q=U6($);if(Q<=0)return 0;let W=0,f=$.length;for(let X=$.length-1;X>=0;X-=1)if(W+=Z($[X]),f=X,W>=J)break;if(f<=0)return 0;let j=Math.min(f,Q);while(j>0&&!u8($[j]))j-=1;return j}function g8($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((J)=>g8(J));if($&&typeof $==="object"){let J=$,Z=[];for(let Q of["path","file_path","target_file","new_file_path","old_file_path"])Z.push(...g8(J[Q]));if(Array.isArray(J.files)){for(let Q of J.files)if(Q&&typeof Q==="object")Z.push(...g8(Q.path))}if(Array.isArray(J.file_paths))Z.push(...g8(J.file_paths));return Z}return[]}function m8($,J){let Z=new Set($);for(let Q of J){let W=Q.trim();if(!W)continue;Z.add(W)}return[...Z].sort((Q,W)=>Q.localeCompare(W))}function l3($){let J=[],Z=[];for(let Q of $){let W=XQ(Q);if(W){J=m8(J,W.details.readFiles),Z=m8(Z,W.details.modifiedFiles);continue}if(!Array.isArray(Q.content))continue;for(let f of Q.content){if(f.type==="file"){J=m8(J,[f.path]);continue}if(f.type!=="tool_use")continue;let j=g8(f.input);if(f.name==="read_files"){J=m8(J,j);continue}if(f.name==="editor"||f.name==="apply_patch")Z=m8(Z,j)}}return{readFiles:J,modifiedFiles:Z}}function GK($){let J=$.readFiles.length>0?$.readFiles.map((Q)=>`- ${Q}`).join(`
13
- `):"- none",Z=$.modifiedFiles.length>0?$.modifiedFiles.map((Q)=>`- ${Q}`).join(`
1
+ import{createRequire as yK}from"node:module";var{defineProperty:KZ,getOwnPropertyNames:TK}=Object;var u7=Object.prototype.hasOwnProperty;function c7($){return this[$]}var M=($,f,J)=>{var Z=TK(f);for(let Q of Z)if(!u7.call($,Q)&&Q!=="default")KZ($,Q,{get:c7.bind(f,Q),enumerable:!0});if(J){for(let Q of Z)if(!u7.call(J,Q)&&Q!=="default")KZ(J,Q,{get:c7.bind(f,Q),enumerable:!0});return J}};var NK=($)=>$;function MK($,f){this[$]=NK.bind(null,f)}var w=($,f)=>{for(var J in f)KZ($,J,{get:f[J],enumerable:!0,configurable:!0,set:MK.bind(f,J)})};var M1=($,f)=>()=>($&&(f=$($=0)),f);var d7=yK(import.meta.url);import{SDK_ERROR_TELEMETRY_EVENT as qK}from"@cline/shared";function d($,f,J){$?.capture({event:f,properties:J})}function Y4($){if(!$)return;return $.substring(0,wK)}function SK($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function hK($){return typeof $==="string"?$:$.message}function l7($,f){return $.some((J)=>f.has(J.trim().toLowerCase()))}function p7($){d($,x.CLIENT.EXTENSION_ACTIVATED)}function A4($,f){let J=[...f.vcs_types],Z={root_count:f.root_count,vcs_types:J,is_multi_root:f.root_count>1,has_git:l7(J,new Set(["git"])),has_mercurial:l7(J,new Set(["mercurial","hg"]))};if(f.init_duration_ms!==void 0)Z.init_duration_ms=f.init_duration_ms;if(f.feature_flag_enabled!==void 0)Z.feature_flag_enabled=f.feature_flag_enabled;if(f.is_remote_workspace!==void 0)Z.is_remote_workspace=f.is_remote_workspace;d($,x.WORKSPACE.INITIALIZED,Z)}function V4($,f,J){d($,x.WORKSPACE.INIT_ERROR,{error_type:SK(f),error_message:Y4(hK(f)),fallback_to_single_root:J.fallback_to_single_root,workspace_count:J.workspace_count??0})}function r7($,f){d($,x.WORKSPACE.PATH_RESOLVED,{...f})}function L$($,f){d($,x.USER.AUTH_STARTED,{provider:f})}function _$($,f){d($,x.USER.AUTH_SUCCEEDED,{provider:f})}function z$($,f,J){d($,x.USER.AUTH_FAILED,{provider:f,errorMessage:Y4(J)})}function l$($,f,J){d($,x.USER.AUTH_LOGGED_OUT,{provider:f,reason:J})}function i7($,f){d($,x.USER.PROVIDER_CONFIGURED,{provider:f})}function n7($,f){$?.captureRequired(x.USER.TELEMETRY_OPT_OUT,f)}function O$($,f){let J=f.id?.trim();if(J)$?.setDistinctId(J);$?.updateCommonProperties({account_id:f.id,account_email:f.email,provider:f.provider,organization_id:f.organizationId,organization_name:f.organizationName,member_id:f.memberId})}function B4($,f){d($,x.TASK.CREATED,f)}function K4($,f){d($,x.TASK.RESTARTED,f)}function p2($,f){d($,x.TASK.COMPLETED,f)}function Nf($,f){d($,x.TASK.CONVERSATION_TURN,{...f,timestamp:new Date().toISOString()})}function G4($,f){d($,x.TASK.TOKEN_USAGE,f)}function P4($,f,J){d($,x.TASK.MODE_SWITCH,{ulid:f,mode:J})}function F4($,f){d($,x.TASK.TOOL_USED,f)}function U4($,f){d($,x.TASK.SKILL_USED,f)}function R4($,f){d($,x.TASK.DIFF_EDIT_FAILED,f)}function r2($,f){d($,x.TASK.PROVIDER_API_ERROR,{...f,errorMessage:Y4(f.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function a7($,f){d($,x.SDK.TOOL_TIMEOUT,CK(f))}function CK($){let f={};for(let[J,Z]of Object.entries($))if(Z!==void 0)f[J]=Z;return f}function D4($,f,J){d($,x.TASK.MENTION_USED,{mentionType:f,contentLength:J,timestamp:new Date().toISOString()})}function L4($,f,J,Z){d($,x.TASK.MENTION_FAILED,{mentionType:f,errorType:J,errorMessage:Y4(Z),timestamp:new Date().toISOString()})}function _4($,f,J,Z,Q){d($,x.TASK.MENTION_SEARCH_RESULTS,{queryLength:f.length,resultCount:J,searchType:Z,isEmpty:Q,timestamp:new Date().toISOString()})}function p$($,f){d($,x.TASK.AGENT_CREATED,{...f,timestamp:new Date().toISOString()})}function z4($,f){d($,x.TASK.AGENT_TEAM_CREATED,{...f,timestamp:new Date().toISOString()})}function i2($,f){d($,f.event==="ended"?x.TASK.SUBAGENT_COMPLETED:x.TASK.SUBAGENT_STARTED,{...f,timestamp:new Date().toISOString()})}function O4($,f,J,Z){d($,x.HOOKS.DISCOVERY_COMPLETED,{hookName:f,globalCount:J,workspaceCount:Z,totalCount:J+Z,timestamp:new Date().toISOString()})}function T4($,f){d($,x.TASK.COMPACTION_EXECUTED,{...f,timestamp:new Date().toISOString()})}function N4($,f){d($,x.TASK.COMPACTION_SKIPPED,{...f,timestamp:new Date().toISOString()})}var wK=500,x;var L0=M1(()=>{x={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",PROVIDER_CONFIGURED:"user.provider_configured",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed",COMPACTION_EXECUTED:"task.compaction_executed",COMPACTION_SKIPPED:"task.compaction_skipped"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:qK,TOOL_TIMEOUT:"sdk.tool_timeout"}}});var jj={};w(jj,{normalizeUserMessage:()=>mP,buildInitialUserContent:()=>xP});async function xP($,f,J,Z){let Q=gP(f),W=await uP(J,Z);if(Q.length===0&&!W)return $;let j=[{type:"text",text:$},...Q];if(W)j.push(...W);return j}function mP($){if($==null)return"";if(typeof $==="string")return $;let f=$.content;if(typeof f==="string")return f;if(!Array.isArray(f))return"";let J=[];for(let Z of f)if(Z&&typeof Z==="object"&&Z.type==="text"){let Q=Z.text;if(typeof Q==="string")J.push(Q)}return J.join(`
2
+ `)}function gP($){if(!$||$.length===0)return[];let f=[];for(let J of $){let Z=vP(J);if(Z)f.push(Z)}return f}function vP($){let f=$.trim();if(!f)return;let J=f.match(/^data:([^;,]+);base64,(.+)$/);if(J){let Z=J[1],Q=J[2];if(!Z||!Q)return;return{type:"image",mediaType:Z,data:Q}}return{type:"image",mediaType:"image/png",data:f}}async function uP($,f){if(!$||$.length===0)return;let J=f??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),Z=await Promise.all($.map(async(Q)=>{let W=Q.replace(/\\/g,"/");try{let j=await J(Q);return{type:"file",path:W,content:j}}catch(j){let X=j instanceof Error?j.message:String(j);return{type:"file",path:W,content:`Error fetching content: ${X}`}}}));if(Z.length===0)return;return Z}import{mkdirSync as xF,readFileSync as mF,statSync as gF,writeFileSync as vF}from"node:fs";import{dirname as uF}from"node:path";import{resolveGlobalSettingsPath as aj}from"@cline/shared/storage";import{z as M8}from"zod";function p4(){return y8.parse({})}function cF(){r4=void 0}function dF($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function lF($){let f;try{f=mF($,"utf8")}catch{return p4()}try{let J=y8.safeParse(JSON.parse(f));return J.success?J.data:p4()}catch{return p4()}}function pF(){let $=aj(),f=gF($,{throwIfNoEntry:!1}),J=f?.mtimeMs??0,Z=f?.size??0,Q=r4;if(Q&&Q.path===$&&Q.mtimeMs===J&&Q.size===Z)return Q;let W=dF(f?lF($):p4());return r4={path:$,mtimeMs:J,size:Z,value:W},r4}function I0(){return pF().value}function J1($,f={}){let J=aj(),Z=I0();xF(uF(J),{recursive:!0});let Q=y8.parse($);if(!Z.telemetryOptOut&&Q.telemetryOptOut)n7(f.telemetry);vF(J,`${JSON.stringify(Q,null,2)}
3
+ `,"utf8"),cF()}function i4(){return I0().telemetryOptOut}function tj($,f={}){J1({...I0(),telemetryOptOut:$},f)}function j$($){return new Set($??I0().disabledTools??[])}function q8($){return new Set($??I0().disabledPlugins??[])}function sj($){return j$().has($)}function n4($){let f=I0(),J=new Set(f.disabledTools??[]),Z=J.has($);if(Z)J.delete($);else J.add($);return J1({...f,disabledTools:[...J]}),!Z}function Z9($,f){let J=[...new Set($.map((W)=>W.trim()).filter(Boolean))];if(J.length===0)return;let Z=I0(),Q=j$(Z.disabledTools);for(let W of J)if(f)Q.add(W);else Q.delete(W);J1({...Z,disabledTools:[...Q]})}function oj($,f){return Z9([$],f),f}function ej($){return q8().has($)}function $X($,f){let J=$.trim();if(!J)return;let Z=I0(),Q=q8(Z.disabledPlugins);if(f)Q.add(J);else Q.delete(J);J1({...Z,disabledPlugins:[...Q]})}function a4($,f){let J=q8(f);if(J.size===0)return[...$];return $.filter((Z)=>!J.has(Z))}function c1($,f){let J=j$(f);if(J.size===0)return[...$];return $.filter((Z)=>!J.has(Z.name))}function t4($,f){if(!$||$.length===0)return $;let J=j$(f);if(J.size===0)return $;return $.map((Z)=>{if(!Z.setup)return Z;return{...Z,setup:(Q,W)=>Z.setup?.({...Q,registerTool:(j)=>{if(!J.has(j.name))Q.registerTool(j)}},W)}})}var nj,y8,r4;var X$=M1(()=>{L0();nj=M8.preprocess(($)=>Array.isArray($)?$.filter((f)=>typeof f==="string").map((f)=>f.trim()).filter(Boolean):void 0,M8.array(M8.string()).optional()).transform(($)=>{if(!$)return;let f=[...new Set($)].sort((J,Z)=>J.localeCompare(Z));return f.length>0?f:void 0}),y8=M8.object({telemetryOptOut:M8.boolean().default(!1).catch(!1),disabledTools:nj.optional(),disabledPlugins:nj.optional()}).strip().transform(($)=>{let f={telemetryOptOut:$.telemetryOptOut};if($.disabledTools?.length)f.disabledTools=$.disabledTools;if($.disabledPlugins?.length)f.disabledPlugins=$.disabledPlugins;return f})});var XY={};w(XY,{updateMcpServerOAuthState:()=>Jf,setMcpServerDisabled:()=>$f,resolveMcpServerRegistrations:()=>H$,resolveDefaultMcpSettingsPath:()=>z0,registerMcpServersFromSettingsFile:()=>Zf,normalizeMcpServerOAuthState:()=>K2,loadMcpSettingsFile:()=>e1,listMcpServerOAuthStatuses:()=>DJ,hasMcpSettingsFile:()=>E$,getMcpServerOAuthState:()=>ff});import{existsSync as _L,mkdirSync as fY,readFileSync as WQ,writeFileSync as JY}from"node:fs";import{dirname as ZY}from"node:path";import{resolveMcpSettingsPath as zL}from"@cline/shared/storage";import{z as S}from"zod";function QQ($){if(!$)return;if($==="http")return"streamableHttp";return $}function z0(){return zL()}function EL($){let f=WQ($,"utf8"),J;try{J=JSON.parse(f)}catch(Z){let Q=Z instanceof Error?Z.message:String(Z);throw Error(`Failed to parse MCP settings JSON at "${$}": ${Q}`)}if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${$}": expected object.`);return J}function jY($,f){if(!Object.hasOwn($,f))return;let J=$[f];if(!J||typeof J!=="object"||Array.isArray(J))return;return J}function bL($,f,J){Object.defineProperty($,f,{value:J,enumerable:!0,configurable:!0,writable:!0})}function e1($={}){let f=$.filePath??z0(),J=WQ(f,"utf8"),Z;try{Z=JSON.parse(J)}catch(W){let j=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${f}": ${j}`)}let Q=CL.safeParse(Z);if(!Q.success){let W=Q.error.issues.map((j)=>{let X=j.path.join(".");return X?`${X}: ${j.message}`:j.message}).join("; ");throw Error(`Invalid MCP settings at "${f}": ${W}`)}return Q.data}function kL($){let f=WQ($,"utf8"),J;try{J=JSON.parse(f)}catch(W){let j=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${$}": ${j}`)}if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${$}": expected object`);let Z=J,Q=Z.mcpServers;if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": mcpServers must be an object`);return Z}function K2($){if(!$)return;let f={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(f).length>0?f:void 0}function IL($){if($===void 0)return;let f=jQ.safeParse($);if(!f.success)return;return K2(f.data)}function E$($={}){let f=$.filePath??z0();return _L(f)}function H$($={}){let f=e1($);return Object.entries(f.mcpServers).map(([J,Z])=>({name:J,transport:Z.transport,disabled:Z.disabled,metadata:Z.metadata,oauth:Z.oauth}))}function $f($){let f=$.filePath??z0(),J=$.name.trim();if(!J)throw Error("MCP server settings toggle requires a server name.");let Z=EL(f),Q=Z.mcpServers;if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${f}": mcpServers must be an object.`);let W={...Q},j=jY(W,J);if(!j)throw Error(`Unknown MCP server: ${J}`);let X={...j};if($.disabled)X.disabled=!0;else delete X.disabled;bL(W,J,X),fY(ZY(f),{recursive:!0}),JY(f,`${JSON.stringify({...Z,mcpServers:W},null,2)}
4
+ `)}function ff($,f={}){let J=e1(f);if(!Object.hasOwn(J.mcpServers,$))return;return K2(J.mcpServers[$]?.oauth)}function Jf($,f,J={}){let Z=J.filePath??z0(),Q=kL(Z),W=Q.mcpServers,j=jY(W,$);if(!j)throw Error(`Unknown MCP server: ${$}`);let X=IL(j.oauth)??{},H=K2(f(X));if(H)j.oauth=H;else delete j.oauth;return fY(ZY(Z),{recursive:!0}),JY(Z,`${JSON.stringify(Q,null,2)}
5
+ `,"utf8"),H??{}}function DJ($={}){return H$($).map((J)=>{let Z=J.transport.type!=="stdio",Q=J.oauth?.tokens?.access_token;return{serverName:J.name,oauthSupported:Z,oauthConfigured:Z&&typeof Q==="string"&&Q.trim().length>0,lastError:J.oauth?.lastError,lastAuthenticatedAt:J.oauth?.lastAuthenticatedAt}}).sort((J,Z)=>J.serverName.localeCompare(Z.serverName))}async function Zf($,f={}){let J=H$(f);for(let Z of J)await $.registerServer(Z);return J}var RJ,QY,jQ,OL,TL,NL,ML,yL,qL,WY,wL,SL,hL,CL;var s6=M1(()=>{RJ=S.record(S.string(),S.string()),QY=S.record(S.string(),S.unknown()),jQ=S.object({clientInformation:S.record(S.string(),S.unknown()).optional(),tokens:S.record(S.string(),S.unknown()).optional(),codeVerifier:S.string().optional(),discoveryState:S.record(S.string(),S.unknown()).optional(),redirectUrl:S.string().url().optional(),lastError:S.string().optional(),lastAuthenticatedAt:S.number().int().positive().optional()}).strip(),OL=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:RJ.optional()}),TL=S.object({type:S.literal("sse"),url:S.string().url(),headers:RJ.optional()}),NL=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:RJ.optional()}),ML=S.discriminatedUnion("type",[OL,TL,NL]),yL=S.object({transport:ML,disabled:S.boolean().optional(),metadata:QY.optional(),oauth:jQ.optional()}),qL=S.enum(["stdio","sse","http","streamableHttp"]).optional(),WY=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:qL,disabled:S.boolean().optional(),metadata:QY.optional(),oauth:jQ.optional()});wL=WY.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:RJ.optional()}).superRefine(($,f)=>{let J=$.type??QQ($.transportType);if(J&&J!=="stdio")f.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth})),SL=WY.extend({url:S.string().url(),headers:RJ.optional()}).superRefine(($,f)=>{let J=$.type??QQ($.transportType)??"sse";if(J!=="sse"&&J!=="streamableHttp")f.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??QQ($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth}}),hL=S.union([yL,wL,SL]),CL=S.object({mcpServers:S.record(S.string(),hL)}).passthrough()});import{existsSync as ST,mkdirSync as hT,readFileSync as CT,writeFileSync as ET}from"node:fs";import{resolve as bT}from"node:path";import{resolveSessionDataDir as kT}from"@cline/shared/storage";import{nanoid as IT}from"nanoid";import*as xT from"node-machine-id";function Kf($){let f=$?.trim();if(f)return f;let J=vT();if(J)return J;return uT()}function gT(){let $=xT;return $.machineIdSync??$.default?.machineIdSync}function vT(){try{let $=gT();if(!$)return;return $().trim()||void 0}catch{return}}function uT(){let $=kT(),f=bT($,mT);try{if(ST(f)){let Z=CT(f,"utf8").trim();if(Z.length>0)return Z}}catch{}let J=`cl-${IT()}`;try{hT($,{recursive:!0}),ET(f,J,"utf8")}catch{}return J}var mT="machine-id";var _5=()=>{};class nJ{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,f){if(!this.isEnabled())return;this.emitLog($,f,!1)}emitRequired($,f){this.emitLog($,f,!0)}recordCounter($,f,J,Z,Q=!1){if(!this.meter||!Q&&!this.isEnabled())return;let W=this.counters.get($);if(!W)W=this.meter.createCounter($,Z?{description:Z}:void 0),this.counters.set($,W);W.add(f,this.flattenProperties(this.buildAttributes(J)))}recordHistogram($,f,J,Z,Q=!1){if(!this.meter||!Q&&!this.isEnabled())return;let W=this.histograms.get($);if(!W)W=this.meter.createHistogram($,Z?{description:Z}:void 0),this.histograms.set($,W);W.record(f,this.flattenProperties(this.buildAttributes(J)))}recordGauge($,f,J,Z,Q=!1){if(!this.meter||!Q&&!this.isEnabled())return;let W=this.buildAttributes(J),j=JSON.stringify(W),X=this.gaugeValues.get($);if(f===null){if(X){if(X.delete(j),X.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let H=X;if(!H)H=new Map,this.gaugeValues.set($,H);if(!this.gauges.has($)){let Y=this.meter.createObservableGauge($,Z?{description:Z}:void 0);Y.addCallback((A)=>{for(let V of this.snapshotGaugeSeries($))A.observe(V.value,this.flattenProperties(V.attributes))}),this.gauges.set($,Y)}H.set(j,{value:f,attributes:W})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,f,J){if(!this.logger)return;let Z=this.flattenProperties(this.buildAttributes(f,J));this.logger.emit({severityText:"INFO",body:$,attributes:Z})}buildAttributes($,f=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...f?{_required:!0}:{}}}snapshotGaugeSeries($){let f=this.gaugeValues.get($);if(!f)return[];return Array.from(f.values(),(J)=>({value:J.value,attributes:J.attributes?{...J.attributes}:void 0}))}flattenProperties($,f="",J=new WeakSet,Z=0){if(!$)return{};let Q={},W=100,j=10;for(let[X,H]of Object.entries($)){if(X==="__proto__"||X==="constructor"||X==="prototype")continue;let Y=f?`${f}.${X}`:X;if(H===null||H===void 0){Q[Y]=String(H);continue}if(Array.isArray(H)){let A=H.length>W?H.slice(0,W):H;try{Q[Y]=JSON.stringify(A)}catch{Q[Y]="[UnserializableArray]"}if(H.length>W)Q[`${Y}_truncated`]=!0,Q[`${Y}_original_length`]=H.length;continue}if(typeof H==="object"){if(H instanceof Date){Q[Y]=H.toISOString();continue}if(H instanceof Error){Q[Y]=H.message;continue}if(J.has(H)){Q[Y]="[Circular]";continue}if(Z>=j){Q[Y]="[MaxDepthExceeded]";continue}J.add(H),Object.assign(Q,this.flattenProperties(H,Y,J,Z+1));continue}if(kN(H)){Q[Y]=H;continue}try{Q[Y]=JSON.stringify(H)}catch{Q[Y]=String(H)}}return Q}}function kN($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class aJ{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,f){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:f})}emitRequired($,f){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:f})}recordCounter($,f,J,Z,Q){if(!Q&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:f,attributes:J,description:Z,required:Q===!0})}recordHistogram($,f,J,Z,Q){if(!Q&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:f,attributes:J,description:Z,required:Q===!0})}recordGauge($,f,J,Z,Q){if(!Q&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:f,attributes:J,description:Z,required:Q===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class C2{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new aJ({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let f=this.buildAttributes($.properties);for(let J of this.adapters)J.emit($.event,f)}captureRequired($,f){let J=this.buildAttributes(f);for(let Z of this.adapters)Z.emitRequired($,J)}recordCounter($,f,J,Z,Q=!1){let W=this.buildAttributes(J);for(let j of this.adapters)j.recordCounter($,f,W,Z,Q)}recordHistogram($,f,J,Z,Q=!1){let W=this.buildAttributes(J);for(let j of this.adapters)j.recordHistogram($,f,W,Z,Q)}recordGauge($,f,J,Z,Q=!1){let W=this.buildAttributes(J);for(let j of this.adapters)j.recordGauge($,f,W,Z,Q)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var GW=()=>{};import{metrics as IN,trace as xN}from"@opentelemetry/api";import{logs as mN}from"@opentelemetry/api-logs";import{OTLPLogExporter as gN}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as vN}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as uN}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as cN}from"@opentelemetry/resources";import{BatchLogRecordProcessor as dN,ConsoleLogRecordExporter as lN,LoggerProvider as pN}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as rN,MeterProvider as iN,PeriodicExportingMetricReader as KV}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as nN,ConsoleSpanExporter as aN,SimpleSpanProcessor as tN}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as sN}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as oN,ATTR_SERVICE_VERSION as eN}from"@opentelemetry/semantic-conventions";class GV{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,f){this.resolveProperties(f)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class E2{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let f=cN({[oN]:$.serviceName??"cline",...$.serviceVersion?{[eN]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(f),this.loggerProvider=this.createLoggerProvider(f),this.tracerProvider=this.createTracerProvider(f),this.meterProvider)IN.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)mN.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",f){return xN.getTracer($,f??this.options.serviceVersion)}createAdapter($){return new nJ({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let f=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new C2({...$,adapters:[f],distinctId:Kf($.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider($){let f=PW(this.options.metricsExporter);if(f.length===0)return null;let J=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),Z=Math.min(30000,Math.floor(J*0.8)),Q=f.map((W)=>JM(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:J,timeout:Z})).filter((W)=>W!==null);if(Q.length===0)return null;return new iN({resource:$,readers:Q})}createTracerProvider($){let f=PW(this.options.tracesExporter);if(f.length===0)return null;let J=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,Z=this.options.otlpTracesHeaders??this.options.otlpHeaders,Q=[];for(let W of f){let j=fM(W,{endpoint:J,headers:Z,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(j)Q.push(j)}if(Q.length===0)return null;return new sN({resource:$,spanProcessors:Q})}createLoggerProvider($){let f=PW(this.options.logsExporter);if(f.length===0)return null;let J=f.map((Z)=>{let Q=$M(Z,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!Q)return null;return new dN(Q,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((Z)=>Z!==null);if(J.length===0)return null;return new pN({resource:$,processors:J})}}function tJ($){let f=new E2($),J=f.createTelemetryService($);return J.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion}),{provider:f,telemetry:J}}function u$($){if(i4())return{telemetry:new GV($)};if($.enabled!==!0)return{telemetry:new C2({...$,distinctId:Kf($.distinctId)})};return tJ($)}function b2($){let{telemetry:f,provider:J}=u$($);return{telemetry:f,provider:J,flush:async()=>{let W=J;if(W&&typeof W.forceFlush==="function")try{await W.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([f.dispose(),J?.dispose()])}}}function PW($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((J)=>J.trim()).filter((J)=>J==="console"||J==="otlp")}function $M($,f){if($==="console")return new lN;if(!f.endpoint)return null;let J=FW(f.endpoint,"/v1/logs");return new gN({url:J,headers:f.headers})}function fM($,f){if($==="console")return new tN(new aN);if(!f.endpoint)return null;let J=FW(f.endpoint,"/v1/traces");return new nN(new uN({url:J,headers:f.headers}))}function JM($,f){if($==="console")return new KV({exporter:new rN,exportIntervalMillis:f.interval,exportTimeoutMillis:f.timeout});if(!f.endpoint)return null;let J=FW(f.endpoint,"/v1/metrics");return new KV({exporter:new vN({url:J,headers:f.headers}),exportIntervalMillis:f.interval,exportTimeoutMillis:f.timeout})}function FW($,f){let J=new URL($),Z=J.pathname.endsWith("/")?J.pathname.slice(0,-1):J.pathname;return J.pathname=Z.endsWith(f)?Z:`${Z}${f}`,J.toString()}var w5=M1(()=>{X$();_5();GW()});var GB={};w(GB,{createOpenTelemetryTelemetryService:()=>tJ,createConfiguredTelemetryService:()=>u$,createConfiguredTelemetryHandle:()=>b2,OpenTelemetryProvider:()=>E2,OpenTelemetryAdapter:()=>nJ});var IW=M1(()=>{w5()});import{AgentRuntimeAbortError as gS}from"@cline/agents";import{initVcr as vS}from"@cline/shared";import{normalizeProviderId as IS}from"@cline/llms";var GK={};w(GK,{LocalRuntimeHost:()=>U$});import{readdirSync as yS}from"node:fs";import{homedir as qS}from"node:os";import{isAbsolute as wS,join as x7,resolve as m7}from"node:path";import{captureSdkError as zf,createSessionId as SS,isLikelyAuthError as hS,normalizeUserInput as CS}from"@cline/shared";import{setHomeDirIfUnset as ES}from"@cline/shared/storage";L0();var _3={};w(_3,{createContextCompactionPrepareTurn:()=>e2});import{createHandlerAsync as xK}from"@cline/llms";import{estimateTokens as GZ}from"@cline/shared";var o7=200000,PZ=0.9,e7=16384,FZ=20000,t7=1024,s7=2000,$3=2000,f3=8;function r$($,f){if($.length<=f)return $;return`${$.slice(0,f)}
6
+ ...[truncated ${$.length-f} chars]`}function EK($){let f=UZ($);if(typeof f==="string")return f;return f.map((J)=>{switch(J.type){case"text":return J.text;case"file":return`<file path="${J.path}">
7
+ ${J.content}
8
+ </file>`;case"image":return`[image:${J.mediaType}]`;default:return""}}).join(`
9
+ `)}function UZ($){if(typeof $==="string")return r$($,s7);return $.map((f)=>{switch(f.type){case"text":return{...f,text:r$(f.text,s7)};case"file":return{...f,content:r$(f.content,$3)};case"image":return f;default:return f}})}function bK($){return Object.entries($).map(([f,J])=>`${f}=${JSON.stringify(J)}`).join(", ")}function J3($){if(typeof $.content==="string")return`[${$.role==="user"?"User":"Bot"}]: ${$.content}`;let f=[];for(let J of $.content)switch(J.type){case"text":f.push(`[${$.role==="user"?"User":"Bot"}]: ${J.text}`);break;case"thinking":f.push(`[Bot thinking]: ${r$(J.thinking,2000)}`);break;case"redacted_thinking":f.push("[Bot thinking]: [redacted]");break;case"tool_use":f.push(`[Bot tool calls]: ${J.name}(${bK(J.input)})`);break;case"tool_result":f.push(`[Tool result]: ${EK(J.content)}`);break;case"file":f.push(`[${$.role==="user"?"User":"Bot"} file ${J.path}]: ${r$(J.content,$3)}`);break;case"image":f.push(`[${$.role==="user"?"User":"Bot"} image]: ${J.mediaType}`);break}return f.join(`
10
+ `)}function Z3($){return $.map(J3).join(`
11
+
12
+ `).trim()}function Q3(){let $=new WeakMap;return(f)=>{let J=f,Z=$.get(J);if(typeof Z==="number")return Z;let Q;try{Q=JSON.stringify(f)}catch{Q=J3(f)}let W=GZ(Q.length);return $.set(J,W),W}}function t2($){return $.metadata?.kind==="compaction_summary"}function RZ($){if(!t2($))return;let f=$.metadata;if(!f)return;let J=f.details;return{kind:"compaction_summary",summary:String(f.summary??""),details:{readFiles:Array.isArray(J?.readFiles)?J.readFiles.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter((Z)=>Z.length>0):[],modifiedFiles:Array.isArray(J?.modifiedFiles)?J.modifiedFiles.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter((Z)=>Z.length>0):[]},tokensBefore:Number(f.tokensBefore??0),generatedAt:Number(f.generatedAt??0)}}function kK($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((f)=>f.type==="tool_result")}function s2($){return $.role==="user"&&!kK($)&&!t2($)}function W3($){for(let f=0;f<$.length;f+=1)if(s2($[f]))return f;return-1}function M4($){for(let f=$.length-1;f>=0;f-=1)if(s2($[f]))return f;return 0}function j3($){for(let f=$.length-1;f>=0;f-=1)if($[f].role==="assistant")return f;return-1}function X3($){for(let f=$.length-1;f>=0;f-=1)if(t2($[f]))return f;return-1}function H3($,f,J){let Z=M4($);if(Z<=0)return 0;let Q=0,W=$.length;for(let X=$.length-1;X>=0;X-=1)if(Q+=J($[X]),W=X,Q>=f)break;if(W<=0)return 0;let j=Math.min(W,Z);while(j>0&&!s2($[j]))j-=1;return j}function a2($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((f)=>a2(f));if($&&typeof $==="object"){let f=$,J=[];for(let Z of["path","file_path","target_file","new_file_path","old_file_path"])J.push(...a2(f[Z]));if(Array.isArray(f.files)){for(let Z of f.files)if(Z&&typeof Z==="object")J.push(...a2(Z.path))}if(Array.isArray(f.file_paths))J.push(...a2(f.file_paths));return J}return[]}function n2($,f){let J=new Set($);for(let Z of f){let Q=Z.trim();if(!Q)continue;J.add(Q)}return[...J].sort((Z,Q)=>Z.localeCompare(Q))}function Y3($){let f=[],J=[];for(let Z of $){let Q=RZ(Z);if(Q){f=n2(f,Q.details.readFiles),J=n2(J,Q.details.modifiedFiles);continue}if(!Array.isArray(Z.content))continue;for(let W of Z.content){if(W.type==="file"){f=n2(f,[W.path]);continue}if(W.type!=="tool_use")continue;let j=a2(W.input);if(W.name==="read_files"){f=n2(f,j);continue}if(W.name==="editor"||W.name==="apply_patch")J=n2(J,j)}}return{readFiles:f,modifiedFiles:J}}function IK($){let f=$.readFiles.length>0?$.readFiles.map((Z)=>`- ${Z}`).join(`
13
+ `):"- none",J=$.modifiedFiles.length>0?$.modifiedFiles.map((Z)=>`- ${Z}`).join(`
14
14
  `):"- none";return`## Files
15
15
  Read:
16
- ${J}
16
+ ${f}
17
17
  Modified:
18
- ${Z}`}function p3($,J){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
18
+ ${J}`}function A3($,f){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
19
19
 
20
- ${GK(J)}`.trim()}function r3($){let J=[`Summarize this session for continuation. Be concise and factual.
20
+ ${IK(f)}`.trim()}function V3($){let f=[`Summarize this session for continuation. Be concise and factual.
21
21
 
22
22
  ## Goal
23
23
  One sentence: what is being built or fixed.
@@ -35,15 +35,15 @@ Immediate next steps.
35
35
 
36
36
  ## Files
37
37
  Read: ${$.fileOps.readFiles.join(", ")||"none"}
38
- Edited: ${$.fileOps.modifiedFiles.join(", ")||"none"}`];if($.previousSummary?.trim())J.push(`Previous summary:
39
- ${$.previousSummary.trim()}`);return J.push(`Conversation:
40
- ${$.conversationText||"(empty)"}`),J.join(`
38
+ Edited: ${$.fileOps.modifiedFiles.join(", ")||"none"}`];if($.previousSummary?.trim())f.push(`Previous summary:
39
+ ${$.previousSummary.trim()}`);return f.push(`Conversation:
40
+ ${$.conversationText||"(empty)"}`),f.join(`
41
41
 
42
- `)}function i3($){let J=$.summarizer,Z=(W)=>{if(W.providerId==="openai-codex"){let{maxOutputTokens:f,...j}=W;return{...j,thinking:!1}}return{...W,maxOutputTokens:W.maxOutputTokens??C3,thinking:!1}};if(!J)return Z($.activeProviderConfig);let Q=J.providerConfig?.providerId===J.providerId?J.providerConfig:void 0;return Z({...Q??{},providerId:J.providerId,modelId:J.modelId,apiKey:J.apiKey??Q?.apiKey,baseUrl:J.baseUrl??Q?.baseUrl,headers:J.headers??Q?.headers,knownModels:J.knownModels??Q?.knownModels,maxOutputTokens:J.maxOutputTokens??C3})}function n3($){return{role:"user",content:`Context summary:
42
+ `)}function B3($){let f=$.summarizer,J=(Q)=>{if(Q.providerId==="openai-codex"){let{maxOutputTokens:W,...j}=Q;return{...j,thinking:!1}}return{...Q,maxOutputTokens:Q.maxOutputTokens??t7,thinking:!1}};if(!f)return J($.activeProviderConfig);let Z=f.providerConfig?.providerId===f.providerId?f.providerConfig:void 0;return J({...Z??{},providerId:f.providerId,modelId:f.modelId,apiKey:f.apiKey??Z?.apiKey,baseUrl:f.baseUrl??Z?.baseUrl,headers:f.headers??Z?.headers,knownModels:f.knownModels??Z?.knownModels,maxOutputTokens:f.maxOutputTokens??t7})}function K3($){return{role:"user",content:`Context summary:
43
43
 
44
- ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}async function UK($){let J=await FK($.providerConfig),Z="";for await(let Q of J.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(Q.type==="text"){Z+=Q.text;continue}if(Q.type==="done"&&!Q.success&&Q.error)throw Error(Q.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Z.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Z.trim()}function RK($){try{return JSON.stringify($).length}catch{return String($).length}}async function a3($){let J=$.context.messages;if(J.length<2)return;let Z=d3(J,$.preserveRecentTokens,$.estimateMessageTokens);if(Z<=0||Z>=J.length)return;let Q=J.slice(0,Z),W=c3(Q),f=W>=0?XQ(Q[W])?.summary:void 0,j=W>=0?Q.slice(W+1):Q;if(j.length===0)return;let X=l3(Q),H=m3(j),Y=r3({previousSummary:f,conversationText:H,fileOps:X});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:Q.length,newMessagesToFold:j.length,preservedMessages:J.length-Z,previousSummaryChars:f?.length??0,conversationTextChars:H.length,summaryRequestChars:Y.length,summaryRequestEstimatedTokens:QQ(Y.length),newMessagesJsonChars:RK(j),maxInputTokens:$.context.maxInputTokens,triggerTokens:$.context.triggerTokens});let A=await UK({providerConfig:i3({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),request:Y,logger:$.logger});if(!A.trim())return;let V=p3(A,X),B=J.reduce((D,F)=>D+$.estimateMessageTokens(F),0),K=[n3({summary:V,fileOps:X,tokensBefore:B}),...J.slice(Z)],G=K.reduce((D,F)=>D+$.estimateMessageTokens(F),0);return $.logger?.debug("Performed agentic compaction",{messagesBefore:J.length,messagesAfter:K.length,messagesSummarized:Z,messagesPreserved:J.length-Z,tokensBefore:B,tokensAfter:G,maxInputTokens:$.context.maxInputTokens}),{messages:K}}function o3($){if(v8($))return;if(typeof $.content==="string"){let Z=$.content.trim();return Z?{...$,content:Z}:void 0}let J=$.content.filter((Z)=>Z.type!=="text"||Z.text.trim());if(J.length===0)return;return{...$,content:J.map((Z)=>Z.type==="text"?{...Z,text:Z.text.trim()}:Z.type==="tool_result"?{...Z,content:jQ(Z.content)}:Z)}}function c8($,J){return $.reduce((Z,Q)=>Z+J(Q),0)}function t3($,J){let Z=Math.max(1,J),Q=Math.max(16,Z*4);if(typeof $.content==="string"){let j=u$($.content,Q).trim();return{...$,content:j||"..."}}let W=Q,f=$.content.map((j)=>{if(j.type!=="text"||W<=0)return j;let X=u$(j.text,W).trim();return W-=X.length,{...j,text:X||"..."}});return{...$,content:f}}function DK($,J){let Z=v3($),Q=U6($),W=u3($),f=[];for(let j=0;j<$.length;j+=1){let X=o3($[j]);if(!X)continue;f.push({index:j,message:X,estimatedTokens:J(X),isFirstUser:j===Z,isLastUser:j===Q,isLastAssistant:j===W})}return f}function s3($,J,Z,Q){let W=$[J];W.message=Z,W.estimatedTokens=Q(Z)}function PK($){let J=new Set;if(!Array.isArray($.content))return J;for(let Z of $.content)if(Z.type==="tool_use")J.add(Z.id);return J}function LK($){let J=new Set;if(!Array.isArray($.content))return J;for(let Z of $.content)if(Z.type==="tool_result")J.add(Z.tool_use_id);return J}function e3($){return new Set([...PK($.message),...LK($.message)])}function zK($){let J=new Map;for(let Z=0;Z<$.length;Z+=1)for(let Q of e3($[Z])){let W=J.get(Q);if(W)W.add(Z);else J.set(Q,new Set([Z]))}return J}function OK($,J){let Z=zK($),Q=new Set,W=[J];while(W.length>0){let f=W.shift();if(f===void 0||Q.has(f))continue;Q.add(f);for(let j of e3($[f]))for(let X of Z.get(j)??[])if(!Q.has(X))W.push(X)}return Q}function R6($,J,Z,Q){let W=c8($.map((f)=>f.message),Q);for(let f=0;f<$.length&&W>Z;){if(!J($[f])){f+=1;continue}let j=OK($,f);W-=Array.from(j).reduce((X,H)=>X+$[H].estimatedTokens,0);for(let X of Array.from(j).sort((H,Y)=>Y-H))$.splice(X,1)}}function _K($,J,Z){let Q=c8($.map((f)=>f.message),Z);if(Q<=J)return;for(let f=$.length-1;f>=0&&Q>J;f-=1){let j=$[f];if(j.isFirstUser)continue;let X=Math.max(I3,j.estimatedTokens-(Q-J));if(X>=j.estimatedTokens)continue;s3($,f,t3(j.message,X),Z),Q=c8($.map((H)=>H.message),Z)}if(Q<=J)return;let W=$.findIndex((f)=>f.isFirstUser);if(W>=0){let f=Math.max(1,$[W].estimatedTokens-(Q-J));s3($,W,t3($[W].message,f),Z)}}function TK($,J){return JSON.stringify($)!==JSON.stringify(J)}function NK($){let J=U6($);if(J<0||J===0&&!u8($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,J),protectedTail:$.slice(J)}}function $f($){let J=Math.max(1,Math.min($.context.triggerTokens,$.context.maxInputTokens)),{compactable:Z,protectedTail:Q}=NK($.context.messages);if(Z.length===0)return;let W=DK(Z,$.estimateMessageTokens);if(W.length===0)return;R6(W,(H)=>H.message.role==="assistant"&&!H.isLastAssistant,J,$.estimateMessageTokens),R6(W,(H)=>H.message.role==="user"&&!H.isFirstUser&&!H.isLastUser,J,$.estimateMessageTokens),R6(W,(H)=>H.message.role==="assistant"&&H.isLastAssistant,J,$.estimateMessageTokens),R6(W,(H)=>H.message.role==="user"&&H.isLastUser&&!H.isFirstUser,J,$.estimateMessageTokens),_K(W,J,$.estimateMessageTokens);let f=[...W.map((H)=>H.message),...Q];if(!TK($.context.messages,f))return;let j=c8([...Z.map((H)=>o3(H)??H),...Q],$.estimateMessageTokens),X=c8(f,$.estimateMessageTokens);return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:f.length,messagesRemoved:$.context.messages.length-f.length,tokensBefore:j,tokensAfter:X,targetTokens:J,maxInputTokens:$.context.maxInputTokens}),{messages:f}}function Jf($){try{return JSON.stringify($).length}catch{return String($).length}}function MK($){let J=0,Z=0,Q=0;for(let W of $){if(!Array.isArray(W.content))continue;for(let f of W.content){if(f.type!=="tool_result")continue;let j=Jf(f.content);J+=1,Z+=j,Q=Math.max(Q,j)}}return{toolResultCount:J,toolResultSerializedChars:Z,maxToolResultSerializedChars:Q}}var qK={basic:({context:$,estimateMessageTokens:J,logger:Z})=>$f({context:$,estimateMessageTokens:J,logger:Z}),agentic:({context:$,providerConfig:J,compaction:Z,mode:Q,estimateMessageTokens:W,logger:f})=>a3({context:$,providerConfig:J,summarizer:Z?.summarizer,preserveRecentTokens:Q==="manual"?Math.min(Z?.preserveRecentTokens??fQ,$.triggerTokens):Z?.preserveRecentTokens??fQ,estimateMessageTokens:W,logger:f})};function yK($){if(typeof $.config.reserveTokens==="number"){let Q=Math.max(0,$.config.reserveTokens),W=Math.max(0,$.maxInputTokens-Q);return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio!=="number"){let Q=Math.max(0,Math.min($.maxInputTokens-b3,$.maxInputTokens*WQ));return{shouldCompact:$.inputTokens>Q,triggerTokens:Q,thresholdRatio:$.maxInputTokens>0?Q/$.maxInputTokens:0}}let J=$.config.thresholdRatio??WQ,Z=$.maxInputTokens*J;return{shouldCompact:$.inputTokens>Z,triggerTokens:Z,thresholdRatio:J}}function wK($){let J=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Z=Math.min(0.95,Math.max(0.05,J)),Q=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*Z)));return{triggerTokens:Q,thresholdRatio:$.maxInputTokens>0?Q/$.maxInputTokens:0}}function d8($,J={}){let Z=$.compaction;if(Z?.enabled!==!0)return;let Q=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},W=g3(),f=Z?.strategy??"basic",j=qK[f],X=J.mode??"auto",H=Z?.compact?"custom":f;return async(Y)=>{let A=Y.apiMessages.reduce((z,T)=>z+W(T),0),V=Z?.maxInputTokens??Y.model.info?.maxInputTokens??Y.model.info?.contextWindow??h3;if(typeof V!=="number"||!Number.isFinite(V)||V<=0)return;let B=yK({inputTokens:A,maxInputTokens:V,config:{reserveTokens:Z?.reserveTokens,thresholdRatio:Z?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:X,strategy:f,iteration:Y.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:A,maxInputTokens:V,triggerTokens:B.triggerTokens,thresholdRatio:B.thresholdRatio,shouldCompact:B.shouldCompact,messageCount:Y.messages.length,apiMessageCount:Y.apiMessages.length,apiMessagesJsonChars:Jf(Y.apiMessages),...MK(Y.apiMessages)}),X==="auto"&&!B.shouldCompact)return;let K=X==="manual"?wK({inputTokens:A,maxInputTokens:V,autoTriggerTokens:B.triggerTokens,manualTargetRatio:J.manualTargetRatio}):B,G={agentId:Y.agentId,conversationId:Y.conversationId,parentAgentId:Y.parentAgentId,iteration:Y.iteration,messages:Y.messages,model:Y.model,maxInputTokens:V,triggerTokens:K.triggerTokens,thresholdRatio:K.thresholdRatio,utilizationRatio:V>0?A/V:0},D=X==="manual"?"manual_compaction":"auto_compaction";Y.emitStatusNotice?.(X==="manual"?"compacting":"auto-compacting",{kind:D,reason:D,iteration:Y.iteration,triggerTokens:K.triggerTokens,maxInputTokens:V});let F=Y.messages.length,U=Date.now(),R=Z?.compact?await Z.compact(G):await j({context:G,providerConfig:{...Q,abortSignal:Y.abortSignal},compaction:Z,mode:X,estimateMessageTokens:W,logger:$.logger}),O=Date.now()-U,_=$.sessionId??Y.conversationId,P={agentId:Y.agentId,conversationId:Y.conversationId,parentAgentId:Y.parentAgentId??void 0};if(R?.messages){let z=R.messages.reduce((T,y)=>T+W(y),0);$.logger?.log("Context compaction completed",{severity:"info",strategy:f,maxInputTokens:V,inputTokens:A,afterTokens:z,tokensSaved:A-z,utilizationBefore:`${(A/V*100).toFixed(1)}%`,utilizationAfter:`${(z/V*100).toFixed(1)}%`,thresholdTrigger:`${(K.thresholdRatio*100).toFixed(1)}%`,messagesBefore:F,messagesAfter:R.messages.length,messagesRemoved:F-R.messages.length}),G6($.telemetry,{ulid:_,strategy:H,mode:X,messagesBefore:F,messagesAfter:R.messages.length,messagesRemoved:F-R.messages.length,tokensBefore:A,tokensAfter:z,tokensSaved:A-z,triggerTokens:K.triggerTokens,maxInputTokens:V,thresholdRatio:K.thresholdRatio,durationMs:O,provider:$.providerId,modelId:$.modelId,...P})}else F6($.telemetry,{ulid:_,strategy:H,mode:X,reason:"no_result",tokensBefore:A,triggerTokens:K.triggerTokens,maxInputTokens:V,thresholdRatio:K.thresholdRatio,durationMs:O,provider:$.providerId,modelId:$.modelId,...P});return R}}var Dj={};w(Dj,{zodToJsonSchema:()=>eF,validateWithZod:()=>oF,resolveToolRoutingConfig:()=>_2,resolveToolPresetName:()=>N$,resolveCoreSelectedToolIds:()=>w6,getCoreHeadlessToolNames:()=>HJ,getCoreDefaultEnabledToolIds:()=>y6,getCoreBuiltinToolCatalog:()=>w1,getCoreAcpToolNames:()=>S6,createWindowsShellTool:()=>FQ,createWebFetchTool:()=>UQ,createWebFetchExecutor:()=>fJ,createToolPoliciesWithPreset:()=>O6,createSubmitAndExitTool:()=>LQ,createSkillsTool:()=>O1,createSearchTool:()=>KQ,createSearchExecutor:()=>WJ,createReadFilesTool:()=>BQ,createFileReadExecutor:()=>QJ,createEditorTool:()=>DQ,createEditorExecutor:()=>JJ,createDefaultToolsWithPreset:()=>_6,createDefaultTools:()=>p$,createDefaultExecutors:()=>z2,createBuiltinTools:()=>S1,createBashTool:()=>GQ,createBashExecutor:()=>$J,createAskQuestionTool:()=>PQ,createApplyPatchTool:()=>RQ,createApplyPatchExecutor:()=>e8,WebFetchRequestSchema:()=>AQ,ToolPresets:()=>k0,TEAM_TOOL_NAMES:()=>q2,SubmitInputSchema:()=>o8,SkillsInputSchema:()=>t8,SearchCodebaseInputSchema:()=>r8,RunCommandsInputSchema:()=>D2,ReadFilesInputSchema:()=>p8,ReadFileRequestSchema:()=>z$,FetchWebContentInputSchema:()=>i8,EditFileInputSchema:()=>n8,DefaultToolNames:()=>Z0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>O2,AskQuestionInputSchema:()=>s8,ApplyPatchInputSchema:()=>a8,ALL_DEFAULT_TOOL_NAMES:()=>c$});import{validateWithZod as oF,zodToJsonSchema as eF}from"@cline/shared";var Z0={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"},c$=[Z0.READ_FILES,Z0.SEARCH_CODEBASE,Z0.RUN_COMMANDS,Z0.FETCH_WEB_CONTENT,Z0.APPLY_PATCH,Z0.EDITOR,Z0.SKILLS,Z0.ASK,Z0.SUBMIT_AND_EXIT];L0();import{createTool as O$,validateWithZod as _$,zodToJsonSchema as Z$}from"@cline/shared";var Qf="__clineInternalTelemetry";function Wf($){let J=$?.__clineInternalTelemetry;return J&&typeof J==="object"&&"capture"in J&&typeof J.capture==="function"?J:void 0}import{validateWithZod as SK}from"@cline/shared";import{z as L}from"zod";var d$=6000,l8=L.string().describe("The absolute file path of a text file to read content from"),ff=L.object({start_line:L.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:L.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit for the end of the file")}).describe("Optional inclusive one-based file line range"),z$=L.object({path:l8,start_line:ff.shape.start_line,end_line:ff.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),p8=L.object({files:L.array(z$).describe("Array of file read requests. Omit start_line/end_line or set them to null to return the full file content boundaries; provide integers to return only that inclusive one-based line range. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),jf=L.union([p8,z$,L.array(z$),L.array(L.string()),L.string(),L.object({files:L.array(L.union([l8,z$]))}),L.object({files:z$}),L.object({files:l8}),L.object({file_paths:L.array(l8)}),L.object({file_paths:L.string()}),L.object({paths:L.array(L.union([l8,z$]))}),L.object({paths:z$}),L.object({paths:L.string()})]),r8=L.object({queries:L.array(L.string()).describe("Array of regex search queries to execute")}),Xf=L.union([r8,L.array(L.string()),L.string(),L.object({queries:L.string()})]),L1=L.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${d$*2} characters) to avoid timeouts.`),D2=L.object({commands:L.array(L1).describe("Array of shell commands to execute")}),Hf=L.union([D2,L.object({commands:L1}),L.object({command:L1}),L.object({cmd:L1}),L.array(L.string()),L.string()]),HQ=L.object({command:L.string().min(1).describe("The executable to run directly without shell parsing."),args:L.array(L.string()).optional().describe("Optional argv list passed directly to the executable.")}),Yf=L.union([L1,HQ]),YQ=L.object({commands:L.array(Yf).describe("Array of commands to execute. Prefer structured { command, args } entries for portability; plain strings are still supported and are interpreted by the active shell.")}),Af=L.union([D2,YQ,L.object({commands:Yf}),L.array(HQ),HQ,L.object({command:L1}),L.object({cmd:L1}),L.array(L.string()),L.string()]),AQ=L.object({url:L.string().describe("The URL to fetch"),prompt:L.string().min(2).describe("Analysis prompt for the fetched content")}),i8=L.object({requests:L.array(AQ).describe("Array of the URLs for the web fetch requests")}),n8=L.object({path:L.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:L.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 ${d$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:L.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 ${d$} 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:L.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."),a8=L.object({input:L.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."),Vf=L.union([a8,L.string()]),t8=L.object({skill:L.string().min(1).describe("Name of the skill to execute."),args:L.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),s8=L.object({question:L.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:L.array(L.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),o8=L.object({summary:L.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:L.boolean().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and taken all necessary steps to resolve the issue.
44
+ ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}async function mK($){let f=await xK($.providerConfig),J="";for await(let Z of f.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(Z.type==="text"){J+=Z.text;continue}if(Z.type==="done"&&!Z.success&&Z.error)throw Error(Z.error)}return $.logger?.debug("Generated compaction summary",{outputChars:J.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),J.trim()}function gK($){try{return JSON.stringify($).length}catch{return String($).length}}async function G3($){let f=$.context.messages;if(f.length<2)return;let J=H3(f,$.preserveRecentTokens,$.estimateMessageTokens);if(J<=0||J>=f.length)return;let Z=f.slice(0,J),Q=X3(Z),W=Q>=0?RZ(Z[Q])?.summary:void 0,j=Q>=0?Z.slice(Q+1):Z;if(j.length===0)return;let X=Y3(Z),H=Z3(j),Y=V3({previousSummary:W,conversationText:H,fileOps:X});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:Z.length,newMessagesToFold:j.length,preservedMessages:f.length-J,previousSummaryChars:W?.length??0,conversationTextChars:H.length,summaryRequestChars:Y.length,summaryRequestEstimatedTokens:GZ(Y.length),newMessagesJsonChars:gK(j),maxInputTokens:$.context.maxInputTokens,triggerTokens:$.context.triggerTokens});let A=await mK({providerConfig:B3({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),request:Y,logger:$.logger});if(!A.trim())return;let V=A3(A,X),B=f.reduce((R,P)=>R+$.estimateMessageTokens(P),0),K=[K3({summary:V,fileOps:X,tokensBefore:B}),...f.slice(J)],G=K.reduce((R,P)=>R+$.estimateMessageTokens(P),0);return $.logger?.debug("Performed agentic compaction",{messagesBefore:f.length,messagesAfter:K.length,messagesSummarized:J,messagesPreserved:f.length-J,tokensBefore:B,tokensAfter:G,maxInputTokens:$.context.maxInputTokens}),{messages:K}}function U3($){if(t2($))return;if(typeof $.content==="string"){let J=$.content.trim();return J?{...$,content:J}:void 0}let f=$.content.filter((J)=>J.type!=="text"||J.text.trim());if(f.length===0)return;return{...$,content:f.map((J)=>J.type==="text"?{...J,text:J.text.trim()}:J.type==="tool_result"?{...J,content:UZ(J.content)}:J)}}function o2($,f){return $.reduce((J,Z)=>J+f(Z),0)}function P3($,f){let J=Math.max(1,f),Z=Math.max(16,J*4);if(typeof $.content==="string"){let j=r$($.content,Z).trim();return{...$,content:j||"..."}}let Q=Z,W=$.content.map((j)=>{if(j.type!=="text"||Q<=0)return j;let X=r$(j.text,Q).trim();return Q-=X.length,{...j,text:X||"..."}});return{...$,content:W}}function vK($,f){let J=W3($),Z=M4($),Q=j3($),W=[];for(let j=0;j<$.length;j+=1){let X=U3($[j]);if(!X)continue;W.push({index:j,message:X,estimatedTokens:f(X),isFirstUser:j===J,isLastUser:j===Z,isLastAssistant:j===Q})}return W}function F3($,f,J,Z){let Q=$[f];Q.message=J,Q.estimatedTokens=Z(J)}function uK($){let f=new Set;if(!Array.isArray($.content))return f;for(let J of $.content)if(J.type==="tool_use")f.add(J.id);return f}function cK($){let f=new Set;if(!Array.isArray($.content))return f;for(let J of $.content)if(J.type==="tool_result")f.add(J.tool_use_id);return f}function R3($){return new Set([...uK($.message),...cK($.message)])}function dK($){let f=new Map;for(let J=0;J<$.length;J+=1)for(let Z of R3($[J])){let Q=f.get(Z);if(Q)Q.add(J);else f.set(Z,new Set([J]))}return f}function lK($,f){let J=dK($),Z=new Set,Q=[f];while(Q.length>0){let W=Q.shift();if(W===void 0||Z.has(W))continue;Z.add(W);for(let j of R3($[W]))for(let X of J.get(j)??[])if(!Z.has(X))Q.push(X)}return Z}function y4($,f,J,Z){let Q=o2($.map((W)=>W.message),Z);for(let W=0;W<$.length&&Q>J;){if(!f($[W])){W+=1;continue}let j=lK($,W);Q-=Array.from(j).reduce((X,H)=>X+$[H].estimatedTokens,0);for(let X of Array.from(j).sort((H,Y)=>Y-H))$.splice(X,1)}}function pK($,f,J){let Z=o2($.map((W)=>W.message),J);if(Z<=f)return;for(let W=$.length-1;W>=0&&Z>f;W-=1){let j=$[W];if(j.isFirstUser)continue;let X=Math.max(f3,j.estimatedTokens-(Z-f));if(X>=j.estimatedTokens)continue;F3($,W,P3(j.message,X),J),Z=o2($.map((H)=>H.message),J)}if(Z<=f)return;let Q=$.findIndex((W)=>W.isFirstUser);if(Q>=0){let W=Math.max(1,$[Q].estimatedTokens-(Z-f));F3($,Q,P3($[Q].message,W),J)}}function rK($,f){return JSON.stringify($)!==JSON.stringify(f)}function iK($){let f=M4($);if(f<0||f===0&&!s2($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,f),protectedTail:$.slice(f)}}function D3($){let f=Math.max(1,Math.min($.context.triggerTokens,$.context.maxInputTokens)),{compactable:J,protectedTail:Z}=iK($.context.messages);if(J.length===0)return;let Q=vK(J,$.estimateMessageTokens);if(Q.length===0)return;y4(Q,(H)=>H.message.role==="assistant"&&!H.isLastAssistant,f,$.estimateMessageTokens),y4(Q,(H)=>H.message.role==="user"&&!H.isFirstUser&&!H.isLastUser,f,$.estimateMessageTokens),y4(Q,(H)=>H.message.role==="assistant"&&H.isLastAssistant,f,$.estimateMessageTokens),y4(Q,(H)=>H.message.role==="user"&&H.isLastUser&&!H.isFirstUser,f,$.estimateMessageTokens),pK(Q,f,$.estimateMessageTokens);let W=[...Q.map((H)=>H.message),...Z];if(!rK($.context.messages,W))return;let j=o2([...J.map((H)=>U3(H)??H),...Z],$.estimateMessageTokens),X=o2(W,$.estimateMessageTokens);return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:W.length,messagesRemoved:$.context.messages.length-W.length,tokensBefore:j,tokensAfter:X,targetTokens:f,maxInputTokens:$.context.maxInputTokens}),{messages:W}}function L3($){try{return JSON.stringify($).length}catch{return String($).length}}function nK($){let f=0,J=0,Z=0;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let W of Q.content){if(W.type!=="tool_result")continue;let j=L3(W.content);f+=1,J+=j,Z=Math.max(Z,j)}}return{toolResultCount:f,toolResultSerializedChars:J,maxToolResultSerializedChars:Z}}var aK={basic:({context:$,estimateMessageTokens:f,logger:J})=>D3({context:$,estimateMessageTokens:f,logger:J}),agentic:({context:$,providerConfig:f,compaction:J,mode:Z,estimateMessageTokens:Q,logger:W})=>G3({context:$,providerConfig:f,summarizer:J?.summarizer,preserveRecentTokens:Z==="manual"?Math.min(J?.preserveRecentTokens??FZ,$.triggerTokens):J?.preserveRecentTokens??FZ,estimateMessageTokens:Q,logger:W})};function tK($){if(typeof $.config.reserveTokens==="number"){let Z=Math.max(0,$.config.reserveTokens),Q=Math.max(0,$.maxInputTokens-Z);return{shouldCompact:$.inputTokens>Q,triggerTokens:Q,thresholdRatio:$.maxInputTokens>0?Q/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio!=="number"){let Z=Math.max(0,Math.min($.maxInputTokens-e7,$.maxInputTokens*PZ));return{shouldCompact:$.inputTokens>Z,triggerTokens:Z,thresholdRatio:$.maxInputTokens>0?Z/$.maxInputTokens:0}}let f=$.config.thresholdRatio??PZ,J=$.maxInputTokens*f;return{shouldCompact:$.inputTokens>J,triggerTokens:J,thresholdRatio:f}}function sK($){let f=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,J=Math.min(0.95,Math.max(0.05,f)),Z=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*J)));return{triggerTokens:Z,thresholdRatio:$.maxInputTokens>0?Z/$.maxInputTokens:0}}function e2($,f={}){let J=$.compaction;if(J?.enabled!==!0)return;let Z=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},Q=Q3(),W=J?.strategy??"basic",j=aK[W],X=f.mode??"auto",H=J?.compact?"custom":W;return async(Y)=>{let A=Y.apiMessages.reduce((_,N)=>_+Q(N),0),V=J?.maxInputTokens??Y.model.info?.maxInputTokens??Y.model.info?.contextWindow??o7;if(typeof V!=="number"||!Number.isFinite(V)||V<=0)return;let B=tK({inputTokens:A,maxInputTokens:V,config:{reserveTokens:J?.reserveTokens,thresholdRatio:J?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:X,strategy:W,iteration:Y.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:A,maxInputTokens:V,triggerTokens:B.triggerTokens,thresholdRatio:B.thresholdRatio,shouldCompact:B.shouldCompact,messageCount:Y.messages.length,apiMessageCount:Y.apiMessages.length,apiMessagesJsonChars:L3(Y.apiMessages),...nK(Y.apiMessages)}),X==="auto"&&!B.shouldCompact)return;let K=X==="manual"?sK({inputTokens:A,maxInputTokens:V,autoTriggerTokens:B.triggerTokens,manualTargetRatio:f.manualTargetRatio}):B,G={agentId:Y.agentId,conversationId:Y.conversationId,parentAgentId:Y.parentAgentId,iteration:Y.iteration,messages:Y.messages,model:Y.model,maxInputTokens:V,triggerTokens:K.triggerTokens,thresholdRatio:K.thresholdRatio,utilizationRatio:V>0?A/V:0},R=X==="manual"?"manual_compaction":"auto_compaction";Y.emitStatusNotice?.(X==="manual"?"compacting":"auto-compacting",{kind:R,reason:R,iteration:Y.iteration,triggerTokens:K.triggerTokens,maxInputTokens:V});let P=Y.messages.length,F=Date.now(),U=J?.compact?await J.compact(G):await j({context:G,providerConfig:{...Z,abortSignal:Y.abortSignal},compaction:J,mode:X,estimateMessageTokens:Q,logger:$.logger}),z=Date.now()-F,O=$.sessionId??Y.conversationId,D={agentId:Y.agentId,conversationId:Y.conversationId,parentAgentId:Y.parentAgentId??void 0};if(U?.messages){let _=U.messages.reduce((N,q)=>N+Q(q),0);$.logger?.log("Context compaction completed",{severity:"info",strategy:W,maxInputTokens:V,inputTokens:A,afterTokens:_,tokensSaved:A-_,utilizationBefore:`${(A/V*100).toFixed(1)}%`,utilizationAfter:`${(_/V*100).toFixed(1)}%`,thresholdTrigger:`${(K.thresholdRatio*100).toFixed(1)}%`,messagesBefore:P,messagesAfter:U.messages.length,messagesRemoved:P-U.messages.length}),T4($.telemetry,{ulid:O,strategy:H,mode:X,messagesBefore:P,messagesAfter:U.messages.length,messagesRemoved:P-U.messages.length,tokensBefore:A,tokensAfter:_,tokensSaved:A-_,triggerTokens:K.triggerTokens,maxInputTokens:V,thresholdRatio:K.thresholdRatio,durationMs:z,provider:$.providerId,modelId:$.modelId,...D})}else N4($.telemetry,{ulid:O,strategy:H,mode:X,reason:"no_result",tokensBefore:A,triggerTokens:K.triggerTokens,maxInputTokens:V,thresholdRatio:K.thresholdRatio,durationMs:z,provider:$.providerId,modelId:$.modelId,...D});return U}}var Ij={};w(Ij,{zodToJsonSchema:()=>_F,validateWithZod:()=>LF,resolveToolRoutingConfig:()=>hf,resolveToolPresetName:()=>q$,resolveCoreSelectedToolIds:()=>g4,getCoreHeadlessToolNames:()=>R8,getCoreDefaultEnabledToolIds:()=>m4,getCoreBuiltinToolCatalog:()=>I1,getCoreAcpToolNames:()=>v4,createWindowsShellTool:()=>MZ,createWebFetchTool:()=>yZ,createWebFetchExecutor:()=>P8,createToolPoliciesWithPreset:()=>C4,createSubmitAndExitTool:()=>hZ,createSkillsTool:()=>w1,createSearchTool:()=>TZ,createSearchExecutor:()=>G8,createReadFilesTool:()=>OZ,createFileReadExecutor:()=>K8,createEditorTool:()=>wZ,createEditorExecutor:()=>V8,createDefaultToolsWithPreset:()=>E4,createDefaultTools:()=>t$,createDefaultExecutors:()=>wf,createBuiltinTools:()=>x1,createBashTool:()=>NZ,createBashExecutor:()=>A8,createAskQuestionTool:()=>SZ,createApplyPatchTool:()=>qZ,createApplyPatchExecutor:()=>Y8,WebFetchRequestSchema:()=>_Z,ToolPresets:()=>k0,TEAM_TOOL_NAMES:()=>kf,SubmitInputSchema:()=>H8,SkillsInputSchema:()=>j8,SearchCodebaseInputSchema:()=>J8,RunCommandsInputSchema:()=>Mf,ReadFilesInputSchema:()=>f8,ReadFileRequestSchema:()=>T$,FetchWebContentInputSchema:()=>Z8,EditFileInputSchema:()=>Q8,DefaultToolNames:()=>J0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>Sf,AskQuestionInputSchema:()=>X8,ApplyPatchInputSchema:()=>W8,ALL_DEFAULT_TOOL_NAMES:()=>i$});import{validateWithZod as LF,zodToJsonSchema as _F}from"@cline/shared";var J0={READ_FILES:"read_files",SEARCH_CODEBASE:"search_codebase",RUN_COMMANDS:"run_commands",FETCH_WEB_CONTENT:"fetch_web_content",APPLY_PATCH:"apply_patch",EDITOR:"editor",SKILLS:"skills",ASK:"ask_question",SUBMIT_AND_EXIT:"submit_and_exit"},i$=[J0.READ_FILES,J0.SEARCH_CODEBASE,J0.RUN_COMMANDS,J0.FETCH_WEB_CONTENT,J0.APPLY_PATCH,J0.EDITOR,J0.SKILLS,J0.ASK,J0.SUBMIT_AND_EXIT];L0();import{createTool as N$,validateWithZod as M$,zodToJsonSchema as W$}from"@cline/shared";var z3="__clineInternalTelemetry";function O3($){let f=$?.__clineInternalTelemetry;return f&&typeof f==="object"&&"capture"in f&&typeof f.capture==="function"?f:void 0}import{validateWithZod as oK}from"@cline/shared";import{z as L}from"zod";var n$=6000,$8=L.string().describe("The absolute file path of a text file to read content from"),T3=L.object({start_line:L.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:L.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit for the end of the file")}).describe("Optional inclusive one-based file line range"),T$=L.object({path:$8,start_line:T3.shape.start_line,end_line:T3.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),f8=L.object({files:L.array(T$).describe("Array of file read requests. Omit start_line/end_line or set them to null to return the full file content boundaries; provide integers to return only that inclusive one-based line range. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),N3=L.union([f8,T$,L.array(T$),L.array(L.string()),L.string(),L.object({files:L.array(L.union([$8,T$]))}),L.object({files:T$}),L.object({files:$8}),L.object({file_paths:L.array($8)}),L.object({file_paths:L.string()}),L.object({paths:L.array(L.union([$8,T$]))}),L.object({paths:T$}),L.object({paths:L.string()})]),J8=L.object({queries:L.array(L.string()).describe("Array of regex search queries to execute")}),M3=L.union([J8,L.array(L.string()),L.string(),L.object({queries:L.string()})]),y1=L.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${n$*2} characters) to avoid timeouts.`),Mf=L.object({commands:L.array(y1).describe("Array of shell commands to execute")}),y3=L.union([Mf,L.object({commands:y1}),L.object({command:y1}),L.object({cmd:y1}),L.array(L.string()),L.string()]),DZ=L.object({command:L.string().min(1).describe("The executable to run directly without shell parsing."),args:L.array(L.string()).optional().describe("Optional argv list passed directly to the executable.")}),q3=L.union([y1,DZ]),LZ=L.object({commands:L.array(q3).describe("Array of commands to execute. Prefer structured { command, args } entries for portability; plain strings are still supported and are interpreted by the active shell.")}),w3=L.union([Mf,LZ,L.object({commands:q3}),L.array(DZ),DZ,L.object({command:y1}),L.object({cmd:y1}),L.array(L.string()),L.string()]),_Z=L.object({url:L.string().describe("The URL to fetch"),prompt:L.string().min(2).describe("Analysis prompt for the fetched content")}),Z8=L.object({requests:L.array(_Z).describe("Array of the URLs for the web fetch requests")}),Q8=L.object({path:L.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:L.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 ${n$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:L.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 ${n$} 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:L.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."),W8=L.object({input:L.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."),S3=L.union([W8,L.string()]),j8=L.object({skill:L.string().min(1).describe("Name of the skill to execute."),args:L.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),X8=L.object({question:L.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:L.array(L.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),H8=L.object({summary:L.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:L.boolean().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and taken all necessary steps to resolve the issue.
45
45
  'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
46
- IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function l$($){if($ instanceof Error)return $.message;return String($)}function Bf($){if(typeof $.old_text==="string"&&$.old_text.length>d$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${d$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>d$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${d$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class z1 extends Error{timeoutMs;constructor($,J){super($);this.name="TimeoutError",this.timeoutMs=J}}function J$($,J,Z){return Promise.race([$,new Promise((Q,W)=>{setTimeout(()=>W(new z1(Z,J)),J)})])}function D6($){let{path:J,start_line:Z,end_line:Q}=$;if(Z==null&&Q==null)return J;return`${J}:${Z??1}-${Q??"EOF"}`}function Kf($){let{start_line:J,end_line:Z}=$;if(J==null||Z==null||J<=Z)return null;return`start_line must be less than or equal to end_line (received start_line: ${J}, end_line: ${Z})`}function Gf($){let J=SK(Af,$);if(typeof J==="string")return[J];if(Array.isArray(J))return J;if("commands"in J)return Array.isArray(J.commands)?J.commands:[J.commands];if("command"in J)return"args"in J?[J]:[J.command];if("cmd"in J)return[J.cmd];return[J]}function VQ($){if(typeof $==="string")return $;let J=$.args??[];if(J.length===0)return $.command;let Z=J.map((Q)=>/[\s"]/u.test(Q)?JSON.stringify(Q):Q);return`${$.command} ${Z.join(" ")}`}function Ff($,J){let Z=$.metadata?.[J];return typeof Z==="string"?Z:void 0}function Uf($,J){S3(Wf($.metadata),{tool_name:"run_commands",effective_timeout_ms:J.effectiveTimeoutMs,timeout_source:J.timeoutSource,command_count:J.commandCount,duration_ms:J.durationMs,ulid:$.sessionId,mode:Ff($,"mode"),source:Ff($,"source"),session_id:$.sessionId,agent_id:$.agentId,conversation_id:$.conversationId,run_id:$.runId,iteration:$.iteration,tool_call_id:$.toolCallId})}function BQ($,J={}){let Z=J.fileReadTimeoutMs??1e4;return O$({name:"read_files",description:"Read the full content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. ",inputSchema:Z$(p8),timeoutMs:Z*2,retryable:!0,maxRetries:1,execute:async(Q,W)=>{let f=_$(jf,Q),j;if(typeof f==="string")j=[{path:f}];else if(Array.isArray(f))j=f.map((X)=>typeof X==="string"?{path:X}:X);else if("files"in f)j=(Array.isArray(f.files)?f.files:[f.files]).map((H)=>typeof H==="string"?{path:H}:H);else if("file_paths"in f)j=(Array.isArray(f.file_paths)?f.file_paths:[f.file_paths]).map((H)=>({path:H}));else if("paths"in f)j=(Array.isArray(f.paths)?f.paths:[f.paths]).map((H)=>typeof H==="string"?{path:H}:H);else j=[f];return Promise.all(j.map(async(X)=>{let H=Kf(X);if(H)return{query:D6(X),result:"",error:`Invalid file range: ${H}`,success:!1};try{let Y=await J$($(X,W),Z,`File read timed out after ${Z}ms`);return{query:D6(X),result:Y,success:!0}}catch(Y){let A=l$(Y);return{query:D6(X),result:"",error:`Error reading file: ${A}`,success:!1}}}))}})}function KQ($,J={}){let Z=J.searchTimeoutMs??30000,Q=J.cwd??process.cwd();return O$({name:"search_codebase",description:"Perform regex pattern searches across the codebase. Supports multiple parallel searches. Use for finding code patterns, function definitions, class names, imports, etc.",inputSchema:Z$(r8),timeoutMs:Z*2,retryable:!0,maxRetries:1,execute:async(W,f)=>{let j=_$(Xf,W),X=Array.isArray(j)?j:typeof j==="object"?Array.isArray(j.queries)?j.queries:[j.queries]:[j];return Promise.all(X.map(async(H)=>{try{let Y=await J$($(H,Q,f),Z,`Search timed out after ${Z}ms`),A=Y.length>0&&!Y.includes("No results found");return{query:H,result:Y,success:A}}catch(Y){let A=l$(Y);return{query:H,result:"",error:`Search failed: ${A}`,success:!1}}}))}})}function GQ($,J={}){let Z=J.bashTimeoutMs??30000,Q=J.bashTimeoutMs===void 0?"default_setting":"configured_setting",W=J.cwd??process.cwd();return O$({name:"run_commands",description:"Run shell commands from the root of the workspace. Use for listing files, checking git status, running builds, executing tests, etc. Commands should be properly shell-escaped and targeted to avoid error or timeout. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.",inputSchema:Z$(D2),timeoutMs:Z*2,retryable:!1,maxRetries:0,execute:async(f,j)=>{let X=_$(Hf,f),H;if(typeof X==="string")H=[X];else if(Array.isArray(X))H=X;else if("commands"in X)H=Array.isArray(X.commands)?X.commands:[X.commands];else if("command"in X)H=[X.command];else H=[X.cmd];return Promise.all(H.map(async(Y)=>{let A=Date.now();try{let V=await J$($(Y,W,j),Z,`Command timed out after ${Z}ms`);return{query:Y,result:V,success:!0}}catch(V){if(V instanceof z1)Uf(j,{effectiveTimeoutMs:V.timeoutMs,timeoutSource:Q,commandCount:H.length,durationMs:Date.now()-A});let B=l$(V);return{query:Y,result:"",error:`Command failed: ${B}`,success:!1}}}))}})}function FQ($,J={}){let Z=J.bashTimeoutMs??30000,Q=J.bashTimeoutMs===void 0?"default_setting":"configured_setting",W=J.cwd??process.cwd();return O$({name:"run_commands",description:"Run shell commands from the root of the workspacein Windows environment. Use for listing files, checking git status, running builds, executing tests, etc. Prefer structured { command, args } entries for portability; plain string commands should be properly shell-escaped.",inputSchema:Z$(YQ),timeoutMs:Z*2,retryable:!1,maxRetries:0,execute:async(f,j)=>{let X=Gf(f);return Promise.all(X.map(async(H)=>{let Y=Date.now();try{let A=await J$($(H,W,j),Z,`Command timed out after ${Z}ms`);return{query:VQ(H),result:A,success:!0}}catch(A){if(A instanceof z1)Uf(j,{effectiveTimeoutMs:A.timeoutMs,timeoutSource:Q,commandCount:X.length,durationMs:Date.now()-Y});let V=l$(A);return{query:VQ(H),result:"",error:`Command failed: ${V}`,success:!1}}}))}})}function UQ($,J={}){let Z=J.webFetchTimeoutMs??30000;return O$({name:"fetch_web_content",description:"Fetch content from URLs and analyze them using the provided prompts. Use for retrieving documentation, API references, or any web content. Each request includes a URL and a prompt describing what information to extract.",inputSchema:Z$(i8),timeoutMs:Z*2,retryable:!0,maxRetries:2,execute:async(Q,W)=>{let f=_$(i8,Q);return Promise.all(f.requests.map(async(j)=>{try{let X=await J$($(j.url,j.prompt,W),Z,`Web fetch timed out after ${Z}ms`);return{query:j.url,result:X,success:!0}}catch(X){let H=l$(X);return{query:j.url,result:"",error:`Error fetching web content: ${H}`,success:!1}}}))}})}var CK=`Use \`apply_patch\` to edit files with the canonical freeform patch grammar. Pass the patch text directly as the \`input\` string. Prefer the exact format below:
46
+ IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function a$($){if($ instanceof Error)return $.message;return String($)}function h3($){if(typeof $.old_text==="string"&&$.old_text.length>n$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${n$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>n$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${n$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class q1 extends Error{timeoutMs;constructor($,f){super($);this.name="TimeoutError",this.timeoutMs=f}}function Q$($,f,J){return Promise.race([$,new Promise((Z,Q)=>{setTimeout(()=>Q(new q1(J,f)),f)})])}function q4($){let{path:f,start_line:J,end_line:Z}=$;if(J==null&&Z==null)return f;return`${f}:${J??1}-${Z??"EOF"}`}function C3($){let{start_line:f,end_line:J}=$;if(f==null||J==null||f<=J)return null;return`start_line must be less than or equal to end_line (received start_line: ${f}, end_line: ${J})`}function E3($){let f=oK(w3,$);if(typeof f==="string")return[f];if(Array.isArray(f))return f;if("commands"in f)return Array.isArray(f.commands)?f.commands:[f.commands];if("command"in f)return"args"in f?[f]:[f.command];if("cmd"in f)return[f.cmd];return[f]}function zZ($){if(typeof $==="string")return $;let f=$.args??[];if(f.length===0)return $.command;let J=f.map((Z)=>/[\s"]/u.test(Z)?JSON.stringify(Z):Z);return`${$.command} ${J.join(" ")}`}function b3($,f){let J=$.metadata?.[f];return typeof J==="string"?J:void 0}function k3($,f){a7(O3($.metadata),{tool_name:"run_commands",effective_timeout_ms:f.effectiveTimeoutMs,timeout_source:f.timeoutSource,command_count:f.commandCount,duration_ms:f.durationMs,ulid:$.sessionId,mode:b3($,"mode"),source:b3($,"source"),session_id:$.sessionId,agent_id:$.agentId,conversation_id:$.conversationId,run_id:$.runId,iteration:$.iteration,tool_call_id:$.toolCallId})}function OZ($,f={}){let J=f.fileReadTimeoutMs??1e4;return N$({name:"read_files",description:"Read the full content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. ",inputSchema:W$(f8),timeoutMs:J*2,retryable:!0,maxRetries:1,execute:async(Z,Q)=>{let W=M$(N3,Z),j;if(typeof W==="string")j=[{path:W}];else if(Array.isArray(W))j=W.map((X)=>typeof X==="string"?{path:X}:X);else if("files"in W)j=(Array.isArray(W.files)?W.files:[W.files]).map((H)=>typeof H==="string"?{path:H}:H);else if("file_paths"in W)j=(Array.isArray(W.file_paths)?W.file_paths:[W.file_paths]).map((H)=>({path:H}));else if("paths"in W)j=(Array.isArray(W.paths)?W.paths:[W.paths]).map((H)=>typeof H==="string"?{path:H}:H);else j=[W];return Promise.all(j.map(async(X)=>{let H=C3(X);if(H)return{query:q4(X),result:"",error:`Invalid file range: ${H}`,success:!1};try{let Y=await Q$($(X,Q),J,`File read timed out after ${J}ms`);return{query:q4(X),result:Y,success:!0}}catch(Y){let A=a$(Y);return{query:q4(X),result:"",error:`Error reading file: ${A}`,success:!1}}}))}})}function TZ($,f={}){let J=f.searchTimeoutMs??30000,Z=f.cwd??process.cwd();return N$({name:"search_codebase",description:"Perform regex pattern searches across the codebase. Supports multiple parallel searches. Use for finding code patterns, function definitions, class names, imports, etc.",inputSchema:W$(J8),timeoutMs:J*2,retryable:!0,maxRetries:1,execute:async(Q,W)=>{let j=M$(M3,Q),X=Array.isArray(j)?j:typeof j==="object"?Array.isArray(j.queries)?j.queries:[j.queries]:[j];return Promise.all(X.map(async(H)=>{try{let Y=await Q$($(H,Z,W),J,`Search timed out after ${J}ms`),A=Y.length>0&&!Y.includes("No results found");return{query:H,result:Y,success:A}}catch(Y){let A=a$(Y);return{query:H,result:"",error:`Search failed: ${A}`,success:!1}}}))}})}function NZ($,f={}){let J=f.bashTimeoutMs??30000,Z=f.bashTimeoutMs===void 0?"default_setting":"configured_setting",Q=f.cwd??process.cwd();return N$({name:"run_commands",description:"Run shell commands from the root of the workspace. Use for listing files, checking git status, running builds, executing tests, etc. Commands should be properly shell-escaped and targeted to avoid error or timeout. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.",inputSchema:W$(Mf),timeoutMs:J*2,retryable:!1,maxRetries:0,execute:async(W,j)=>{let X=M$(y3,W),H;if(typeof X==="string")H=[X];else if(Array.isArray(X))H=X;else if("commands"in X)H=Array.isArray(X.commands)?X.commands:[X.commands];else if("command"in X)H=[X.command];else H=[X.cmd];return Promise.all(H.map(async(Y)=>{let A=Date.now();try{let V=await Q$($(Y,Q,j),J,`Command timed out after ${J}ms`);return{query:Y,result:V,success:!0}}catch(V){if(V instanceof q1)k3(j,{effectiveTimeoutMs:V.timeoutMs,timeoutSource:Z,commandCount:H.length,durationMs:Date.now()-A});let B=a$(V);return{query:Y,result:"",error:`Command failed: ${B}`,success:!1}}}))}})}function MZ($,f={}){let J=f.bashTimeoutMs??30000,Z=f.bashTimeoutMs===void 0?"default_setting":"configured_setting",Q=f.cwd??process.cwd();return N$({name:"run_commands",description:"Run shell commands from the root of the workspacein Windows environment. Use for listing files, checking git status, running builds, executing tests, etc. Prefer structured { command, args } entries for portability; plain string commands should be properly shell-escaped.",inputSchema:W$(LZ),timeoutMs:J*2,retryable:!1,maxRetries:0,execute:async(W,j)=>{let X=E3(W);return Promise.all(X.map(async(H)=>{let Y=Date.now();try{let A=await Q$($(H,Q,j),J,`Command timed out after ${J}ms`);return{query:zZ(H),result:A,success:!0}}catch(A){if(A instanceof q1)k3(j,{effectiveTimeoutMs:A.timeoutMs,timeoutSource:Z,commandCount:X.length,durationMs:Date.now()-Y});let V=a$(A);return{query:zZ(H),result:"",error:`Command failed: ${V}`,success:!1}}}))}})}function yZ($,f={}){let J=f.webFetchTimeoutMs??30000;return N$({name:"fetch_web_content",description:"Fetch content from URLs and analyze them using the provided prompts. Use for retrieving documentation, API references, or any web content. Each request includes a URL and a prompt describing what information to extract.",inputSchema:W$(Z8),timeoutMs:J*2,retryable:!0,maxRetries:2,execute:async(Z,Q)=>{let W=M$(Z8,Z);return Promise.all(W.requests.map(async(j)=>{try{let X=await Q$($(j.url,j.prompt,Q),J,`Web fetch timed out after ${J}ms`);return{query:j.url,result:X,success:!0}}catch(X){let H=a$(X);return{query:j.url,result:"",error:`Error fetching web content: ${H}`,success:!1}}}))}})}var eK=`Use \`apply_patch\` to edit files with the canonical freeform patch grammar. Pass the patch text directly as the \`input\` string. Prefer the exact format below:
47
47
 
48
48
  *** Begin Patch
49
49
  *** Update File: path/to/file.ts
@@ -79,68 +79,68 @@ Example:
79
79
  </div>
80
80
  );
81
81
  }
82
- *** End Patch`;function RQ($,J={}){let Z=J.applyPatchTimeoutMs??30000,Q=J.cwd??process.cwd();return O$({name:"apply_patch",description:CK,inputSchema:Z$(a8),timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(W,f)=>{let j=_$(Vf,W),X=typeof j==="string"?j:j.input;try{return{query:"apply_patch",result:await J$($({input:X},Q,f),Z,`apply_patch timed out after ${Z}ms`),success:!0}}catch(H){return{query:"apply_patch",result:"",error:`apply_patch failed: ${l$(H)}`,success:!1}}}})}function DQ($,J={}){let Z=J.editorTimeoutMs??30000,Q=J.cwd??process.cwd();return O$({name:"editor",description:"An editor for controlled filesystem edits on the text file at the provided path. Provide `insert_line` to insert `new_text` at a specific line number. Otherwise, the tool replaces `old_text` with `new_text`, or creates the file with `new_text` if file does not exist. Use this tools for making small, precise edits to existing files or creating new files over shell commands.",inputSchema:Z$(n8),timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(W,f)=>{let j=_$(n8,W),X=j.insert_line==null?"edit":"insert",H=Bf(j);if(H)return{query:`${X}:${j.path}`,result:"",error:H,success:!1};try{let Y=await J$($(j,Q,f),Z,`Editor operation timed out after ${Z}ms`);return{query:`${X}:${j.path}`,result:Y,success:!0}}catch(Y){let A=l$(Y);return{query:`${X}:${j.path}`,result:"",error:`Editor operation failed: ${A}`,success:!1}}}})}function O1($,J={}){let Z=J.skillsTimeoutMs??15000,Q='Execute a skill within the main conversation. When users ask you to perform tasks, check if any available skills match. When users reference a slash command, invoke it with this tool. Input: `skill` (required) and optional `args`. Example: `skill: "pdf"`, `skill: "commit", args: "-m \\"Fix bug\\""`, `skill: "review-pr", args: "123"`, `skill: "ms-office-suite:pdf"`. When a skill matches the user\'s request, invoking this tool is a blocking requirement before any other response. Never mention a skill without invoking this tool.',W=O$({name:"skills",description:Q,inputSchema:Z$(t8),timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(f,j)=>{let X=_$(t8,f);return J$($(X.skill,X.args||void 0,j),Z,`Skills operation timed out after ${Z}ms`)}});return Object.defineProperty(W,"description",{get(){let f=$.configuredSkills?.filter((j)=>!j.disabled).map((j)=>j.name);if(f&&f.length>0)return`${Q} Available skills: ${f.join(", ")}.`;return Q},enumerable:!0,configurable:!0}),W}function PQ($){return{name:"ask_question",description:"Ask user a question for clarifying or gathering information needed to complete the task. For example, ask the user clarifying questions about a key implementation decision. You should only ask one question. Provide an array of 2-5 options for the user to choose from. Never include an option to toggle to Act mode.",inputSchema:Z$(s8),retryable:!1,maxRetries:0,execute:async(J,Z)=>{let Q=_$(s8,J);return $(Q.question,Q.options,Z)}}}function LQ($,J={}){let Z=J.submitTimeoutMs??15000;return O$({name:"submit_and_exit",description:"Submit the final answer and exit the conversation. For example, submit a summary of the investigation and confirm the issue is resolved. You should only submit once all necessary steps are completed. Make sure to verify your output matches the expected format, data types, and file locations specified. Provide a summary of the investigation and confirm the issue is resolved.",inputSchema:Z$(o8),lifecycle:{completesRun:!0},timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(Q,W)=>{let f=_$(o8,Q);return J$($(f.summary,f.verified,W),Z,`submit_and_exit timed out after ${Z}ms`)}})}function p$($){let{executors:J,enableReadFiles:Z=!0,enableSearch:Q=!0,enableBash:W=!0,enableWebFetch:f=!0,enableApplyPatch:j=!1,enableEditor:X=!0,enableSkills:H=!0,enableAskQuestion:Y=!0,enableSubmitAndExit:A=!1,...V}=$,B=[];if(Z&&J.readFile)B.push(BQ(J.readFile,V));if(Q&&J.search)B.push(KQ(J.search,V));if(W&&J.bash)if(process.platform==="win32")B.push(FQ(J.bash,V));else B.push(GQ(J.bash,V));if(f&&J.webFetch)B.push(UQ(J.webFetch,V));if(X&&J.editor)B.push(DQ(J.editor,V));else if(j&&J.applyPatch)B.push(RQ(J.applyPatch,V));if(H&&J.skills)B.push(O1(J.skills,V));let K=A?J.submit:void 0;if(Y&&J.askQuestion&&!K)B.push(PQ(J.askQuestion));if(K)B.push(LQ(K,V));return B}import*as h0 from"node:fs/promises";import*as b0 from"node:path";var v={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},Df=["%%bash","apply_patch","EOF","```"];class W0 extends Error{constructor($){super($);this.name="DiffError"}}function E0($){let J={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(Z)=>J[Z]??Z).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class zQ{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor($,J){this.lines=$;this.currentFiles=J}parse(){this.skipBeginSentinel();while(this.hasMoreLines()&&!this.isEndMarker())this.parseNextAction();if(this.patch.warnings?.length===0)delete this.patch.warnings;return{patch:this.patch,fuzz:this.fuzz}}addWarning($){if(!this.patch.warnings)this.patch.warnings=[];this.patch.warnings.push($)}skipBeginSentinel(){if(this.lines[this.index]?.startsWith(v.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(v.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(v.UPDATE)){this.parseUpdate($.substring(v.UPDATE.length).trim());return}if($?.startsWith(v.DELETE)){this.parseDelete($.substring(v.DELETE.length).trim());return}if($?.startsWith(v.ADD)){this.parseAdd($.substring(v.ADD.length).trim());return}throw new W0(`Unknown line while parsing: ${$}`)}checkDuplicate($,J){if($ in this.patch.actions)throw new W0(`Duplicate ${J} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let J=this.lines[this.index]?.startsWith(v.MOVE)?(this.lines[this.index++]??"").substring(v.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new W0(`Update File Error: Missing File: ${$}`);let Z=this.currentFiles[$]??"",Q=this.parseUpdateFile(Z,$);Q.movePath=J,this.patch.actions[$]=Q,this.currentPath=void 0}parseUpdateFile($,J){let Z={type:"update",chunks:[]},Q=$.split(`
83
- `),W=0,f=[v.END,v.UPDATE,v.DELETE,v.ADD,v.END_FILE];while(!f.some((j)=>this.lines[this.index]?.startsWith(j.trim()))){let j=this.lines[this.index],X=j?.startsWith("@@ ")?j.substring(3):void 0;if(X!==void 0||(j==="@@"?j:void 0)!==void 0)this.index++;else if(W!==0)throw new W0(`Invalid Line:
84
- ${this.lines[this.index]}`);if(X?.trim()){let F=E0(X.trim());for(let U=W;U<Q.length;U++){let R=Q[U];if(R&&(E0(R)===F||E0(R.trim())===F)){if(W=U+1,E0(R.trim())===F&&E0(R)!==F)this.fuzz++;break}}}let[Y,A,V,B]=bK(this.lines,this.index),[K,G,D]=hK(Q,Y,W,B);if(K===-1){let F=Y.join(`
85
- `);this.addWarning({path:this.currentPath||J,chunkIndex:Z.chunks.length,message:`Could not find matching context (similarity: ${D.toFixed(2)}). Chunk skipped.`,context:F.length>200?`${F.substring(0,200)}...`:F}),this.index=V}else{this.fuzz+=G;for(let F of A)F.origIndex+=K,Z.chunks.push(F);W=K+Y.length,this.index=V}}return Z}parseDelete($){if(this.checkDuplicate($,"delete"),!($ in this.currentFiles))throw new W0(`Delete File Error: Missing File: ${$}`);this.patch.actions[$]={type:"delete",chunks:[]},this.index++}parseAdd($){if(this.checkDuplicate($,"add"),$ in this.currentFiles)throw new W0(`Add File Error: File already exists: ${$}`);this.index++;let J=[],Z=[v.END,v.UPDATE,v.DELETE,v.ADD];while(this.hasMoreLines()&&!Z.some((Q)=>this.lines[this.index]?.startsWith(Q.trim()))){let Q=this.lines[this.index++];if(Q===void 0)break;if(!Q.startsWith("+"))throw new W0(`Invalid Add File line (missing '+'): ${Q}`);J.push(Q.substring(1))}this.patch.actions[$]={type:"add",newFile:J.join(`
86
- `),chunks:[]}}}function Rf($,J){let Z=$.length>J.length?$:J,Q=$.length>J.length?J:$;if(Z.length===0)return 1;let W=EK(Q,Z);return(Z.length-W)/Z.length}function EK($,J){let Z=J.length+1,Q=$.length+1,W=Array(Z*Q).fill(0),f=(X,H)=>W[X*Q+H]??0,j=(X,H,Y)=>{W[X*Q+H]=Y};for(let X=0;X<=J.length;X++)j(X,0,X);for(let X=0;X<=$.length;X++)j(0,X,X);for(let X=1;X<=J.length;X++)for(let H=1;H<=$.length;H++)if(J[X-1]===$[H-1])j(X,H,f(X-1,H-1));else j(X,H,1+Math.min(f(X-1,H-1),f(X,H-1),f(X-1,H)));return f(J.length,$.length)}function hK($,J,Z,Q){if(J.length===0)return[Z,0,1];let W=0,f=(j)=>{let X=E0(J.join(`
87
- `));for(let Y=j;Y<$.length;Y++){let A=E0($.slice(Y,Y+J.length).join(`
88
- `));if(A===X)return[Y,0,1];let V=Rf(A,X);if(V>W)W=V}for(let Y=j;Y<$.length;Y++){let A=E0($.slice(Y,Y+J.length).map((B)=>B.trimEnd()).join(`
89
- `)),V=E0(J.map((B)=>B.trimEnd()).join(`
90
- `));if(A===V)return[Y,1,1]}for(let Y=j;Y<$.length;Y++){let A=E0($.slice(Y,Y+J.length).map((B)=>B.trim()).join(`
91
- `)),V=E0(J.map((B)=>B.trim()).join(`
92
- `));if(A===V)return[Y,100,1]}let H=0.66;for(let Y=j;Y<$.length;Y++){let A=E0($.slice(Y,Y+J.length).join(`
93
- `)),V=Rf(A,X);if(V>=H)return[Y,1000,V];if(V>W)W=V}return[-1,0,W]};if(Q){let[j,X,H]=f($.length-J.length);if(j!==-1)return[j,X,H];return[j,X,H]=f(Z),[j,X+1e4,H]}return f(Z)}function bK($,J){let Z=J,Q=[],W=[],f=[],j=[],X="keep",H=["@@",v.END,v.UPDATE,v.DELETE,v.ADD,v.END_FILE];while(Z<$.length){let Y=$[Z];if(!Y||H.some((B)=>Y.startsWith(B.trim())))break;if(Y==="***")break;if(Y.startsWith("***"))throw new W0(`Invalid line: ${Y}`);Z++;let A=X,V=Y;if(V[0]==="+")X="add";else if(V[0]==="-")X="delete";else if(V[0]===" ")X="keep";else X="keep",V=` ${V}`;if(V=V.slice(1),X==="keep"&&A!==X){if(f.length||W.length)j.push({origIndex:Q.length-W.length,delLines:W,insLines:f});W=[],f=[]}if(X==="delete")W.push(V),Q.push(V);else if(X==="add")f.push(V);else Q.push(V)}if(f.length||W.length)j.push({origIndex:Q.length-W.length,delLines:W,insLines:f});if(Z<$.length&&$[Z]===v.END_FILE)return Z++,[Q,j,Z,!0];return[Q,j,Z,!1]}function OQ($,J,Z){let Q=b0.isAbsolute(J),W=Q?b0.normalize(J):b0.resolve($,J);if(!Z||Q)return W;let f=b0.relative($,W);if(f.startsWith("..")||b0.isAbsolute(f))throw new W0(`Path must stay within cwd: ${J}`);return W}function kK($){return $.split(`
94
- `).map((J)=>J.replace(/\r$/,""))}function Pf($){if($.trim()==="")return!1;return Df.some((J)=>$.startsWith(J))}function IK($){let J=0,Z=$.length;while(J<Z&&Pf($[J]??""))J++;while(Z>J&&Pf($[Z-1]??""))Z--;return $.slice(J,Z)}function xK($){let J=kK($),Z=J.findIndex((j)=>j.startsWith(v.BEGIN)),Q=-1;for(let j=J.length-1;j>=0;j--)if(J[j]?.startsWith(v.END)){Q=j;break}if(Z!==-1||Q!==-1){if(Z===-1||Q===-1||Q<Z)throw new W0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:J.slice(Z,Q+1)}}let W=IK(J);while(W.length>0&&W[0]==="")W.shift();while(W.length>0&&W[W.length-1]==="")W.pop();return{lines:[v.BEGIN,...W,v.END]}}function mK($,J){let Z=new Set;for(let Q of $)for(let W of J)if(Q.startsWith(W)){Z.add(Q.substring(W.length).trim());break}return[...Z]}function gK($,J,Z){if(J.length===0)return $;let Q=$.split(`
95
- `),W=[],f=0;for(let j of J){if(j.origIndex>Q.length)throw new W0(`${Z}: chunk.origIndex ${j.origIndex} > lines.length ${Q.length}`);if(f>j.origIndex)throw new W0(`${Z}: currentIndex ${f} > chunk.origIndex ${j.origIndex}`);W.push(...Q.slice(f,j.origIndex)),W.push(...j.insLines),f=j.origIndex+j.delLines.length}return W.push(...Q.slice(f)),W.join(`
96
- `)}async function vK($,J,Z,Q){let W=mK($,[v.UPDATE,v.DELETE]),f={};for(let j of W){let X=OQ(J,j,Q),H;try{H=await h0.readFile(X,Z)}catch{throw new W0(`File not found: ${j}`)}f[j]=H.replace(/\r\n/g,`
97
- `)}return f}function uK($,J){let Z={};for(let[Q,W]of Object.entries($.actions))switch(W.type){case"delete":Z[Q]={type:"delete",oldContent:J[Q]};break;case"add":if(W.newFile===void 0)throw new W0("ADD action without file content");Z[Q]={type:"add",newContent:W.newFile};break;case"update":Z[Q]={type:"update",oldContent:J[Q],newContent:gK(J[Q]??"",W.chunks,Q),movePath:W.movePath};break}return Z}async function cK($,J,Z,Q){let W=[];for(let[f,j]of Object.entries($)){let X=OQ(J,f,Q);switch(j.type){case"delete":await h0.rm(X,{force:!0}),W.push(`${f}: [deleted]`);break;case"add":if(j.newContent===void 0)throw new W0(`Cannot create ${f} with no content`);await h0.mkdir(b0.dirname(X),{recursive:!0}),await h0.writeFile(X,j.newContent,{encoding:Z}),W.push(f);break;case"update":{if(j.newContent===void 0)throw new W0(`UPDATE change for ${f} has no new content`);if(j.movePath){let H=OQ(J,j.movePath,Q);await h0.mkdir(b0.dirname(H),{recursive:!0}),await h0.writeFile(H,j.newContent,{encoding:Z}),await h0.rm(X,{force:!0}),W.push(`${f} -> ${j.movePath}`)}else await h0.writeFile(X,j.newContent,{encoding:Z}),W.push(f);break}}}return W}function e8($={}){let{encoding:J="utf-8",restrictToCwd:Z=!0}=$;return async(Q,W,f)=>{let j=xK(Q.input),X=await vK(j.lines,W,J,Z),H=new zQ(j.lines,X),{patch:Y,fuzz:A}=H.parse(),V=uK(Y,X),B=await cK(V,W,J,Z),K=["Successfully applied patch to the following files:"];for(let G of B)K.push(G);if(A>0)K.push(`Note: Patch applied with fuzz factor ${A}`);if(Y.warnings&&Y.warnings.length>0)for(let G of Y.warnings)K.push(`Warning (${G.path}): ${G.message}`);return K.join(`
98
- `)}}import{spawn as Lf}from"node:child_process";import{getDefaultShell as dK,getShellArgs as lK}from"@cline/shared";function pK($,J,Z,Q,W){return new Promise((f,j)=>{let X=process.platform==="win32",H=Lf($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!X}),Y=H.pid,A="",V="",B=0,K=!1,G=!1,D=(P)=>{if(G)return;G=!0,P()},F=()=>{if(!Y)return;if(X){Lf("taskkill",["/pid",String(Y),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-Y,"SIGKILL")}catch{H.kill("SIGKILL")}},U=(P)=>{K=!0,F(),D(()=>j(P))},R=setTimeout(()=>U(new z1(`Command timed out after ${Z}ms`,Z)),Z),O=()=>U(Error("Command was aborted"));if(J.signal)J.signal.addEventListener("abort",O);let _=()=>{clearTimeout(R),J.signal?.removeEventListener("abort",O)};H.stdout?.on("data",(P)=>{if(B+=P.length,B<=Q)A+=P.toString()}),H.stderr?.on("data",(P)=>{if(B+=P.length,B<=Q)V+=P.toString()}),H.on("close",(P)=>{if(_(),K)return;let z=W?A+(V?`
82
+ *** End Patch`;function qZ($,f={}){let J=f.applyPatchTimeoutMs??30000,Z=f.cwd??process.cwd();return N$({name:"apply_patch",description:eK,inputSchema:W$(W8),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(Q,W)=>{let j=M$(S3,Q),X=typeof j==="string"?j:j.input;try{return{query:"apply_patch",result:await Q$($({input:X},Z,W),J,`apply_patch timed out after ${J}ms`),success:!0}}catch(H){return{query:"apply_patch",result:"",error:`apply_patch failed: ${a$(H)}`,success:!1}}}})}function wZ($,f={}){let J=f.editorTimeoutMs??30000,Z=f.cwd??process.cwd();return N$({name:"editor",description:"An editor for controlled filesystem edits on the text file at the provided path. Provide `insert_line` to insert `new_text` at a specific line number. Otherwise, the tool replaces `old_text` with `new_text`, or creates the file with `new_text` if file does not exist. Use this tools for making small, precise edits to existing files or creating new files over shell commands.",inputSchema:W$(Q8),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(Q,W)=>{let j=M$(Q8,Q),X=j.insert_line==null?"edit":"insert",H=h3(j);if(H)return{query:`${X}:${j.path}`,result:"",error:H,success:!1};try{let Y=await Q$($(j,Z,W),J,`Editor operation timed out after ${J}ms`);return{query:`${X}:${j.path}`,result:Y,success:!0}}catch(Y){let A=a$(Y);return{query:`${X}:${j.path}`,result:"",error:`Editor operation failed: ${A}`,success:!1}}}})}function w1($,f={}){let J=f.skillsTimeoutMs??15000,Z='Execute a skill within the main conversation. When users ask you to perform tasks, check if any available skills match. When users reference a slash command, invoke it with this tool. Input: `skill` (required) and optional `args`. Example: `skill: "pdf"`, `skill: "commit", args: "-m \\"Fix bug\\""`, `skill: "review-pr", args: "123"`, `skill: "ms-office-suite:pdf"`. When a skill matches the user\'s request, invoking this tool is a blocking requirement before any other response. Never mention a skill without invoking this tool.',Q=N$({name:"skills",description:Z,inputSchema:W$(j8),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(W,j)=>{let X=M$(j8,W);return Q$($(X.skill,X.args||void 0,j),J,`Skills operation timed out after ${J}ms`)}});return Object.defineProperty(Q,"description",{get(){let W=$.configuredSkills?.filter((j)=>!j.disabled).map((j)=>j.name);if(W&&W.length>0)return`${Z} Available skills: ${W.join(", ")}.`;return Z},enumerable:!0,configurable:!0}),Q}function SZ($){return{name:"ask_question",description:"Ask user a question for clarifying or gathering information needed to complete the task. For example, ask the user clarifying questions about a key implementation decision. You should only ask one question. Provide an array of 2-5 options for the user to choose from. Never include an option to toggle to Act mode.",inputSchema:W$(X8),retryable:!1,maxRetries:0,execute:async(f,J)=>{let Z=M$(X8,f);return $(Z.question,Z.options,J)}}}function hZ($,f={}){let J=f.submitTimeoutMs??15000;return N$({name:"submit_and_exit",description:"Submit the final answer and exit the conversation. For example, submit a summary of the investigation and confirm the issue is resolved. You should only submit once all necessary steps are completed. Make sure to verify your output matches the expected format, data types, and file locations specified. Provide a summary of the investigation and confirm the issue is resolved.",inputSchema:W$(H8),lifecycle:{completesRun:!0},timeoutMs:J,retryable:!1,maxRetries:0,execute:async(Z,Q)=>{let W=M$(H8,Z);return Q$($(W.summary,W.verified,Q),J,`submit_and_exit timed out after ${J}ms`)}})}function t$($){let{executors:f,enableReadFiles:J=!0,enableSearch:Z=!0,enableBash:Q=!0,enableWebFetch:W=!0,enableApplyPatch:j=!1,enableEditor:X=!0,enableSkills:H=!0,enableAskQuestion:Y=!0,enableSubmitAndExit:A=!1,...V}=$,B=[];if(J&&f.readFile)B.push(OZ(f.readFile,V));if(Z&&f.search)B.push(TZ(f.search,V));if(Q&&f.bash)if(process.platform==="win32")B.push(MZ(f.bash,V));else B.push(NZ(f.bash,V));if(W&&f.webFetch)B.push(yZ(f.webFetch,V));if(X&&f.editor)B.push(wZ(f.editor,V));else if(j&&f.applyPatch)B.push(qZ(f.applyPatch,V));if(H&&f.skills)B.push(w1(f.skills,V));let K=A?f.submit:void 0;if(Y&&f.askQuestion&&!K)B.push(SZ(f.askQuestion));if(K)B.push(hZ(K,V));return B}import*as E0 from"node:fs/promises";import*as b0 from"node:path";var v={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},x3=["%%bash","apply_patch","EOF","```"];class Q0 extends Error{constructor($){super($);this.name="DiffError"}}function C0($){let f={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(J)=>f[J]??J).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class CZ{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor($,f){this.lines=$;this.currentFiles=f}parse(){this.skipBeginSentinel();while(this.hasMoreLines()&&!this.isEndMarker())this.parseNextAction();if(this.patch.warnings?.length===0)delete this.patch.warnings;return{patch:this.patch,fuzz:this.fuzz}}addWarning($){if(!this.patch.warnings)this.patch.warnings=[];this.patch.warnings.push($)}skipBeginSentinel(){if(this.lines[this.index]?.startsWith(v.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(v.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(v.UPDATE)){this.parseUpdate($.substring(v.UPDATE.length).trim());return}if($?.startsWith(v.DELETE)){this.parseDelete($.substring(v.DELETE.length).trim());return}if($?.startsWith(v.ADD)){this.parseAdd($.substring(v.ADD.length).trim());return}throw new Q0(`Unknown line while parsing: ${$}`)}checkDuplicate($,f){if($ in this.patch.actions)throw new Q0(`Duplicate ${f} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let f=this.lines[this.index]?.startsWith(v.MOVE)?(this.lines[this.index++]??"").substring(v.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new Q0(`Update File Error: Missing File: ${$}`);let J=this.currentFiles[$]??"",Z=this.parseUpdateFile(J,$);Z.movePath=f,this.patch.actions[$]=Z,this.currentPath=void 0}parseUpdateFile($,f){let J={type:"update",chunks:[]},Z=$.split(`
83
+ `),Q=0,W=[v.END,v.UPDATE,v.DELETE,v.ADD,v.END_FILE];while(!W.some((j)=>this.lines[this.index]?.startsWith(j.trim()))){let j=this.lines[this.index],X=j?.startsWith("@@ ")?j.substring(3):void 0;if(X!==void 0||(j==="@@"?j:void 0)!==void 0)this.index++;else if(Q!==0)throw new Q0(`Invalid Line:
84
+ ${this.lines[this.index]}`);if(X?.trim()){let P=C0(X.trim());for(let F=Q;F<Z.length;F++){let U=Z[F];if(U&&(C0(U)===P||C0(U.trim())===P)){if(Q=F+1,C0(U.trim())===P&&C0(U)!==P)this.fuzz++;break}}}let[Y,A,V,B]=JG(this.lines,this.index),[K,G,R]=fG(Z,Y,Q,B);if(K===-1){let P=Y.join(`
85
+ `);this.addWarning({path:this.currentPath||f,chunkIndex:J.chunks.length,message:`Could not find matching context (similarity: ${R.toFixed(2)}). Chunk skipped.`,context:P.length>200?`${P.substring(0,200)}...`:P}),this.index=V}else{this.fuzz+=G;for(let P of A)P.origIndex+=K,J.chunks.push(P);Q=K+Y.length,this.index=V}}return J}parseDelete($){if(this.checkDuplicate($,"delete"),!($ in this.currentFiles))throw new Q0(`Delete File Error: Missing File: ${$}`);this.patch.actions[$]={type:"delete",chunks:[]},this.index++}parseAdd($){if(this.checkDuplicate($,"add"),$ in this.currentFiles)throw new Q0(`Add File Error: File already exists: ${$}`);this.index++;let f=[],J=[v.END,v.UPDATE,v.DELETE,v.ADD];while(this.hasMoreLines()&&!J.some((Z)=>this.lines[this.index]?.startsWith(Z.trim()))){let Z=this.lines[this.index++];if(Z===void 0)break;if(!Z.startsWith("+"))throw new Q0(`Invalid Add File line (missing '+'): ${Z}`);f.push(Z.substring(1))}this.patch.actions[$]={type:"add",newFile:f.join(`
86
+ `),chunks:[]}}}function I3($,f){let J=$.length>f.length?$:f,Z=$.length>f.length?f:$;if(J.length===0)return 1;let Q=$G(Z,J);return(J.length-Q)/J.length}function $G($,f){let J=f.length+1,Z=$.length+1,Q=Array(J*Z).fill(0),W=(X,H)=>Q[X*Z+H]??0,j=(X,H,Y)=>{Q[X*Z+H]=Y};for(let X=0;X<=f.length;X++)j(X,0,X);for(let X=0;X<=$.length;X++)j(0,X,X);for(let X=1;X<=f.length;X++)for(let H=1;H<=$.length;H++)if(f[X-1]===$[H-1])j(X,H,W(X-1,H-1));else j(X,H,1+Math.min(W(X-1,H-1),W(X,H-1),W(X-1,H)));return W(f.length,$.length)}function fG($,f,J,Z){if(f.length===0)return[J,0,1];let Q=0,W=(j)=>{let X=C0(f.join(`
87
+ `));for(let Y=j;Y<$.length;Y++){let A=C0($.slice(Y,Y+f.length).join(`
88
+ `));if(A===X)return[Y,0,1];let V=I3(A,X);if(V>Q)Q=V}for(let Y=j;Y<$.length;Y++){let A=C0($.slice(Y,Y+f.length).map((B)=>B.trimEnd()).join(`
89
+ `)),V=C0(f.map((B)=>B.trimEnd()).join(`
90
+ `));if(A===V)return[Y,1,1]}for(let Y=j;Y<$.length;Y++){let A=C0($.slice(Y,Y+f.length).map((B)=>B.trim()).join(`
91
+ `)),V=C0(f.map((B)=>B.trim()).join(`
92
+ `));if(A===V)return[Y,100,1]}let H=0.66;for(let Y=j;Y<$.length;Y++){let A=C0($.slice(Y,Y+f.length).join(`
93
+ `)),V=I3(A,X);if(V>=H)return[Y,1000,V];if(V>Q)Q=V}return[-1,0,Q]};if(Z){let[j,X,H]=W($.length-f.length);if(j!==-1)return[j,X,H];return[j,X,H]=W(J),[j,X+1e4,H]}return W(J)}function JG($,f){let J=f,Z=[],Q=[],W=[],j=[],X="keep",H=["@@",v.END,v.UPDATE,v.DELETE,v.ADD,v.END_FILE];while(J<$.length){let Y=$[J];if(!Y||H.some((B)=>Y.startsWith(B.trim())))break;if(Y==="***")break;if(Y.startsWith("***"))throw new Q0(`Invalid line: ${Y}`);J++;let A=X,V=Y;if(V[0]==="+")X="add";else if(V[0]==="-")X="delete";else if(V[0]===" ")X="keep";else X="keep",V=` ${V}`;if(V=V.slice(1),X==="keep"&&A!==X){if(W.length||Q.length)j.push({origIndex:Z.length-Q.length,delLines:Q,insLines:W});Q=[],W=[]}if(X==="delete")Q.push(V),Z.push(V);else if(X==="add")W.push(V);else Z.push(V)}if(W.length||Q.length)j.push({origIndex:Z.length-Q.length,delLines:Q,insLines:W});if(J<$.length&&$[J]===v.END_FILE)return J++,[Z,j,J,!0];return[Z,j,J,!1]}function EZ($,f,J){let Z=b0.isAbsolute(f),Q=Z?b0.normalize(f):b0.resolve($,f);if(!J||Z)return Q;let W=b0.relative($,Q);if(W.startsWith("..")||b0.isAbsolute(W))throw new Q0(`Path must stay within cwd: ${f}`);return Q}function ZG($){return $.split(`
94
+ `).map((f)=>f.replace(/\r$/,""))}function m3($){if($.trim()==="")return!1;return x3.some((f)=>$.startsWith(f))}function QG($){let f=0,J=$.length;while(f<J&&m3($[f]??""))f++;while(J>f&&m3($[J-1]??""))J--;return $.slice(f,J)}function WG($){let f=ZG($),J=f.findIndex((j)=>j.startsWith(v.BEGIN)),Z=-1;for(let j=f.length-1;j>=0;j--)if(f[j]?.startsWith(v.END)){Z=j;break}if(J!==-1||Z!==-1){if(J===-1||Z===-1||Z<J)throw new Q0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:f.slice(J,Z+1)}}let Q=QG(f);while(Q.length>0&&Q[0]==="")Q.shift();while(Q.length>0&&Q[Q.length-1]==="")Q.pop();return{lines:[v.BEGIN,...Q,v.END]}}function jG($,f){let J=new Set;for(let Z of $)for(let Q of f)if(Z.startsWith(Q)){J.add(Z.substring(Q.length).trim());break}return[...J]}function XG($,f,J){if(f.length===0)return $;let Z=$.split(`
95
+ `),Q=[],W=0;for(let j of f){if(j.origIndex>Z.length)throw new Q0(`${J}: chunk.origIndex ${j.origIndex} > lines.length ${Z.length}`);if(W>j.origIndex)throw new Q0(`${J}: currentIndex ${W} > chunk.origIndex ${j.origIndex}`);Q.push(...Z.slice(W,j.origIndex)),Q.push(...j.insLines),W=j.origIndex+j.delLines.length}return Q.push(...Z.slice(W)),Q.join(`
96
+ `)}async function HG($,f,J,Z){let Q=jG($,[v.UPDATE,v.DELETE]),W={};for(let j of Q){let X=EZ(f,j,Z),H;try{H=await E0.readFile(X,J)}catch{throw new Q0(`File not found: ${j}`)}W[j]=H.replace(/\r\n/g,`
97
+ `)}return W}function YG($,f){let J={};for(let[Z,Q]of Object.entries($.actions))switch(Q.type){case"delete":J[Z]={type:"delete",oldContent:f[Z]};break;case"add":if(Q.newFile===void 0)throw new Q0("ADD action without file content");J[Z]={type:"add",newContent:Q.newFile};break;case"update":J[Z]={type:"update",oldContent:f[Z],newContent:XG(f[Z]??"",Q.chunks,Z),movePath:Q.movePath};break}return J}async function AG($,f,J,Z){let Q=[];for(let[W,j]of Object.entries($)){let X=EZ(f,W,Z);switch(j.type){case"delete":await E0.rm(X,{force:!0}),Q.push(`${W}: [deleted]`);break;case"add":if(j.newContent===void 0)throw new Q0(`Cannot create ${W} with no content`);await E0.mkdir(b0.dirname(X),{recursive:!0}),await E0.writeFile(X,j.newContent,{encoding:J}),Q.push(W);break;case"update":{if(j.newContent===void 0)throw new Q0(`UPDATE change for ${W} has no new content`);if(j.movePath){let H=EZ(f,j.movePath,Z);await E0.mkdir(b0.dirname(H),{recursive:!0}),await E0.writeFile(H,j.newContent,{encoding:J}),await E0.rm(X,{force:!0}),Q.push(`${W} -> ${j.movePath}`)}else await E0.writeFile(X,j.newContent,{encoding:J}),Q.push(W);break}}}return Q}function Y8($={}){let{encoding:f="utf-8",restrictToCwd:J=!0}=$;return async(Z,Q,W)=>{let j=WG(Z.input),X=await HG(j.lines,Q,f,J),H=new CZ(j.lines,X),{patch:Y,fuzz:A}=H.parse(),V=YG(Y,X),B=await AG(V,Q,f,J),K=["Successfully applied patch to the following files:"];for(let G of B)K.push(G);if(A>0)K.push(`Note: Patch applied with fuzz factor ${A}`);if(Y.warnings&&Y.warnings.length>0)for(let G of Y.warnings)K.push(`Warning (${G.path}): ${G.message}`);return K.join(`
98
+ `)}}import{spawn as g3}from"node:child_process";import{getDefaultShell as VG,getShellArgs as BG}from"@cline/shared";function KG($,f,J,Z,Q){return new Promise((W,j)=>{let X=process.platform==="win32",H=g3($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!X}),Y=H.pid,A="",V="",B=0,K=!1,G=!1,R=(D)=>{if(G)return;G=!0,D()},P=()=>{if(!Y)return;if(X){g3("taskkill",["/pid",String(Y),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-Y,"SIGKILL")}catch{H.kill("SIGKILL")}},F=(D)=>{K=!0,P(),R(()=>j(D))},U=setTimeout(()=>F(new q1(`Command timed out after ${J}ms`,J)),J),z=()=>F(Error("Command was aborted"));if(f.signal)f.signal.addEventListener("abort",z);let O=()=>{clearTimeout(U),f.signal?.removeEventListener("abort",z)};H.stdout?.on("data",(D)=>{if(B+=D.length,B<=Z)A+=D.toString()}),H.stderr?.on("data",(D)=>{if(B+=D.length,B<=Z)V+=D.toString()}),H.on("close",(D)=>{if(O(),K)return;let _=Q?A+(V?`
99
99
  [stderr]
100
- ${V}`:""):A;if(B>Q)z+=`
101
-
102
- [Output truncated: ${B} bytes total, showing first ${Q} bytes]`;if(P!==0)D(()=>j(Error(V||`Command exited with code ${P}`)));else D(()=>f(z))}),H.on("error",(P)=>{_(),D(()=>j(Error(`Failed to execute command: ${P.message}`)))})})}function $J($={}){let{shell:J=dK(process.platform),timeoutMs:Z=30000,maxOutputBytes:Q=1e6,env:W={},combineOutput:f=!0}=$;return(j,X,H)=>{let Y=typeof j!=="string";return pK({executable:Y?j.command:J,args:Y?j.args??[]:lK(J,j),cwd:X,env:W},H,Z,Q,f)}}import*as t0 from"node:fs/promises";import*as a0 from"node:path";function rK($,J,Z){let Q=a0.isAbsolute(J),W=Q?a0.normalize(J):a0.resolve($,J);if(!Z)return W;if(Q)return W;let f=a0.relative($,W);if(f.startsWith("..")||a0.isAbsolute(f))throw Error(`Path must stay within cwd: ${J}`);return W}function iK($,J){if(J.length===0)return 0;return $.split(J).length-1}function nK($,J,Z){let Q=$.split(`
103
- `),W=J.split(`
104
- `),f=Math.max(Q.length,W.length),j=["```diff"],X=0;for(let H=0;H<f;H++){if(X>=Z){j.push("... diff truncated ...");break}let Y=Q[H],A=W[H];if(Y===A)continue;let V=H+1;if(Y!==void 0)j.push(`-${V}: ${Y}`),X++;if(A!==void 0&&X<Z)j.push(`+${V}: ${A}`),X++}return j.push("```"),j.join(`
105
- `)}async function aK($,J,Z){return await t0.mkdir(a0.dirname($),{recursive:!0}),await t0.writeFile($,J,{encoding:Z}),`File created successfully at: ${$}`}async function tK($){try{return await t0.access($),!0}catch{return!1}}async function sK($,J,Z,Q,W){let f=await t0.readFile($,Q),j=iK(f,J);if(j===0)throw Error(`No replacement performed: text not found in ${$}.`);if(j>1)throw Error(`No replacement performed: multiple occurrences of text found in ${$}.`);let X=f.replace(J,Z??"");await t0.writeFile($,X,{encoding:Q});let H=nK(f,X,W);return`Edited ${$}
106
- ${H}`}async function oK($,J,Z,Q){let f=(await t0.readFile($,Q)).split(`
107
- `),j=f.length+1;if(J<1||J>j)throw Error(`Invalid insert_line: ${J}. insert_line must be a positive one-based boundary line in the range 1-${j}. Use ${j} to append at EOF.`);let X=J-1;return f.splice(X,0,...Z.split(`
108
- `)),await t0.writeFile($,f.join(`
109
- `),{encoding:Q}),`Inserted content at line ${J} in ${$}.`}function JJ($={}){let{encoding:J="utf-8",restrictToCwd:Z=!0,maxDiffLines:Q=200}=$;return async(W,f,j)=>{let X=rK(f,W.path,Z);if(W.insert_line!=null)return oK(X,W.insert_line,W.new_text,J);if(!await tK(X))return aK(X,W.new_text,J);if(W.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return sK(X,W.old_text,W.new_text,J,Q)}}import*as ZJ from"node:fs/promises";import*as r$ from"node:path";import{resolveExistingFilePath as eK}from"@cline/shared/storage";var $G=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),JG={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0};function QJ($={}){let{maxFileSizeBytes:J,encoding:Z,includeLineNumbers:Q}={...JG,...$};return async(W,f)=>{let{path:j,start_line:X,end_line:H}=W,Y=r$.isAbsolute(j)?r$.normalize(j):r$.resolve(process.cwd(),j),A=eK(Y)??Y,V=r$.extname(A).toLowerCase(),B=$G.get(V),K=await ZJ.stat(A);if(!K.isFile())throw Error(`Path is not a file: ${A}`);if(K.size>J)throw Error(`File too large: ${K.size} bytes (max: ${J} bytes). Consider reading specific sections or using a different approach.`);if(B){if(f.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let O=await ZJ.readFile(A);return[{type:"text",text:"Successfully read image"},{type:"image",data:O.toString("base64"),mediaType:B}]}let D=(await ZJ.readFile(A,Z)).split(`
110
- `),F=Math.max((X??1)-1,0),U=Math.min(H??D.length,D.length),R=D.slice(F,U);if(Q){let O=String(D.length).length;return R.map((_,P)=>`${String(F+P+1).padStart(O," ")} | ${_}`).join(`
111
- `)}return R.join(`
112
- `)}}import{spawn as qf}from"node:child_process";import*as yf from"node:fs/promises";import*as z6 from"node:path";var Mf={};w(Mf,{prewarmFileIndex:()=>L6,getFileIndex:()=>T$,enrichPromptWithMentions:()=>L2});import{spawn as ZG}from"node:child_process";import{readdir as QG}from"node:fs/promises";import TQ from"node:path";import{isMainThread as _f,parentPort as zf,Worker as WG}from"node:worker_threads";var fG=15000,jG=600000,XG=1000,HG=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function Of($){let J=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return J==="EACCES"||J==="EPERM"||J==="ENOENT"}var P2=new Map;function YG(){if(!_f)return!1;return!0}function AG($){if(P2.size<=1)return;for(let[J,Z]of P2.entries()){if(Z.pending)continue;if($-Z.lastAccessedAt>jG)P2.delete(J)}}function VG($,J){return TQ.relative($,J).split(TQ.sep).join("/")}async function BG($){let Z=(await new Promise((Q,W)=>{let f=ZG("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"]}),j="",X="";f.stdout.on("data",(H)=>{j+=H.toString()}),f.stderr.on("data",(H)=>{X+=H.toString()}),f.on("error",W),f.on("close",(H)=>{if(H===0){Q(j);return}W(Error(X||`rg exited with code ${H}`))})})).split(/\r?\n/).map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>Q.replace(/\\/g,"/"));return new Set(Z)}async function Tf($,J,Z){let Q;try{Q=await QG(J,{withFileTypes:!0})}catch(W){if(Of(W))return;throw W}for(let W of Q){let f=TQ.join(J,W.name);if(W.isDirectory()){if(HG.has(W.name))continue;try{await Tf($,f,Z)}catch(j){if(Of(j))continue;throw j}continue}if(W.isFile())Z.add(VG($,f))}}async function KG($){let J=new Set;return await Tf($,$,J),J}async function P6($){try{return await BG($)}catch{return KG($)}}function GG(){if(_f||!zf)return;let $=zf;$.on("message",(J)=>{if(J.type!=="index")return;P6(J.cwd).then((Z)=>{let Q={type:"indexResult",requestId:J.requestId,files:Array.from(Z)};$.postMessage(Q)}).catch((Z)=>{let Q={type:"indexResult",requestId:J.requestId,error:Z instanceof Error?Z.message:"Failed to build file index"};$.postMessage(Q)})})}class Nf{worker=new WG(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",($)=>{if($.type!=="indexResult")return;let J=this.pending.get($.requestId);if(!J)return;if(this.pending.delete($.requestId),$.error){J.reject(Error($.error));return}J.resolve($.files??[])}),this.worker.on("error",($)=>{this.flushPending($)}),this.worker.on("exit",($)=>{if($!==0)this.flushPending(Error(`File index worker exited with code ${$}`))})}requestIndex($){let J=++this.nextRequestId,Z=new Promise((W,f)=>{let j=setTimeout(()=>{this.pending.delete(J),W(null)},XG);j.unref(),this.pending.set(J,{resolve:(X)=>{clearTimeout(j),W(X)},reject:(X)=>{clearTimeout(j),f(X)}})}),Q={type:"index",requestId:J,cwd:$};return this.worker.postMessage(Q),Z}flushPending($){for(let[J,Z]of this.pending.entries())Z.reject($),this.pending.delete(J)}}GG();var _Q;function FG(){if(!YG())return null;if(_Q===void 0)_Q=new Nf;return _Q}async function UG($){let J=FG();if(!J)return P6($);try{let Z=await J.requestIndex($);if(Z===null)return P6($);return new Set(Z)}catch{return P6($)}}async function T$($,J={}){let Z=J.ttlMs??fG,Q=Date.now();AG(Q);let W=P2.get($);if(W&&Z>0&&Q-W.lastBuiltAt<=Z&&W.files.size>0)return W.lastAccessedAt=Q,W.files;if(W?.pending)return W.lastAccessedAt=Q,W.pending;let f=UG($).then((j)=>{return P2.set($,{files:j,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),j});return P2.set($,{files:W?.files??new Set,lastBuiltAt:W?.lastBuiltAt??0,lastAccessedAt:Q,pending:f}),f}async function L6($,J={}){await T$($,{...J,ttlMs:0})}import{stat as RG}from"node:fs/promises";import _1 from"node:path";var DG=/[),.:;!?`'"]+$/,PG=/^[(`'"]+/;function LG($){let J=$.matchAll(/(^|[\s])@([^\s]+)/g),Z=[];for(let Q of J){let W=(Q[2]??"").trim();if(W.length===0)continue;let f=W.replace(PG,"").replace(DG,"");if(f.length===0||f.includes("@"))continue;Z.push(f)}return Array.from(new Set(Z))}function zG($,J){let Z=$.replace(/\\/g,"/"),Q=_1.isAbsolute(Z)?_1.resolve(Z):_1.resolve(J,Z),W=_1.relative(J,Q);if(W.startsWith("..")||_1.isAbsolute(W))return;return W.split(_1.sep).join("/")}async function L2($,J,Z={}){let Q=LG($);if(Q.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:W,maxFileBytes:f,maxTotalBytes:j}=Z,X=await T$(J,{ttlMs:Z.ttlMs}),H=[],Y=[],A=[],V=0;for(let B of Q){if(W&&A.length>=W){Y.push(B);continue}let K=zG(B,J);if(!K||!X.has(K)){Y.push(B);continue}if(!f||!j){H.push(K);continue}let G=_1.join(J,K);try{if(!(await RG(G)).isFile()){Y.push(B);continue}let F=V+f;if(F>j){Y.push(B);continue}V=F,H.push(K)}catch{Y.push(B)}}return{prompt:$,mentions:Q,matchedFiles:H,ignoredMentions:Y}}var OG=["ts","tsx","js","jsx","mjs","cjs","json","md","mdx","txt","yaml","yml","toml","py","rb","go","rs","java","kt","swift","c","cpp","h","hpp","css","scss","less","html","vue","svelte","sql","sh","bash","zsh","fish","ps1","env","gitignore","dockerignore","editorconfig"],_G=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],T1=null;function TG(){if(T1!==null)return Promise.resolve(T1);return new Promise(($)=>{let J=qf("rg",["--version"],{stdio:["ignore","pipe","pipe"]});J.on("close",(Z)=>{T1=Z===0,$(T1)}),J.on("error",()=>{T1=!1,$(!1)}),setTimeout(()=>{if(!J.killed)J.kill("SIGTERM");if(T1===null)T1=!1,$(!1)},1000)})}function NG($,J,Z,Q,W=5000,f){return new Promise((j)=>{let X=qf("rg",["--json",`--context=${Q}`,"--max-count=1","-i",$],{cwd:J,stdio:["ignore","pipe","pipe"]}),H="",Y=!1,A=()=>{if(!X.killed)X.kill("SIGTERM")},V=setTimeout(()=>{if(!Y)Y=!0,A(),j(null)},W),B=(K)=>{if(!Y)Y=!0,clearTimeout(V),A(),j(K)};if(f?.aborted){A(),j(null);return}f?.addEventListener("abort",()=>{B(null)}),X.stdout.on("data",(K)=>{H+=K.toString()}),X.stderr.on("data",()=>{}),X.on("close",(K)=>{if(K===0||K===1){try{let G=[],D=H.split(`
113
- `).filter((F)=>F.trim());for(let F of D){if(G.length>=Z)break;let U=JSON.parse(F);if(U.type==="match"){let R=U.data,O=[];if(U.data.submatches&&U.data.submatches.length>0){let _=U.data.submatches[0];G.push({file:R.path.text,line:R.line_number,column:(_?.start??0)+1,match:_?.match?.text??"",context:O})}}else if(U.type==="context"&&G.length>0){let R=G[G.length-1],O=U.data.line_number===R.line?">":" ";R.context.push(`${O} ${U.data.line_number}: ${U.data.lines?.text??U.data.line?.text??""}`)}}B(G.length>0?G:null)}catch{B(null)}return}B(null)}),X.on("error",()=>{B(null)})})}function MG($,J,Z,Q){let W=$.split("/"),f=W[W.length-1]??"";if(W.length-1>Q)return!1;for(let H=0;H<W.length-1;H++)if(J.has(W[H]??""))return!1;let X=z6.posix.extname(f).slice(1).toLowerCase();return Z.has(X)||!X&&!f.startsWith(".")}function WJ($={}){let{includeExtensions:J=OG,excludeDirs:Z=_G,maxResults:Q=100,contextLines:W=2,maxDepth:f=20}=$,j=new Set(Z),X=new Set(J.map((H)=>H.toLowerCase()));return async(H,Y,A)=>{if(A.signal?.aborted)throw Error("Search operation aborted");let V=await TG(),B=null;if(V)B=await NG(H,Y,Q,W,5000,A.signal);if(B){let R=[`Found ${B.length} result${B.length===1?"":"s"} for pattern: ${H}`,""];for(let O of B)R.push(`${O.file}:${O.line}:${O.column}`),R.push(...O.context),R.push("");if(B.length>=Q)R.push(`(Showing first ${Q} results. Refine your search for more specific results.)`);return R.join(`
114
- `)}let K;try{K=new RegExp(H,"gim")}catch(R){throw Error(`Invalid regex pattern: ${H}. ${R instanceof Error?R.message:""}`)}let G=[],D=0,F=await T$(Y);for(let R of F){if(A.signal?.aborted)throw Error("Search operation aborted");if(!MG(R,j,X,f))continue;if(G.length>=Q)break;D++;let O=z6.join(Y,R);try{let P=(await yf.readFile(O,"utf-8")).split(`
115
- `);for(let z=0;z<P.length;z++){let T=P[z];K.lastIndex=0;let y=K.exec(T);while(y!==null){if(G.length>=Q)break;let $0=Math.max(0,z-W),A0=Math.min(P.length-1,z+W),o=[];for(let V0=$0;V0<=A0;V0++){let i=V0===z?">":" ";o.push(`${i} ${V0+1}: ${P[V0]}`)}if(G.push({file:R,line:z+1,column:y.index+1,match:y[0],context:o}),y.index===K.lastIndex)K.lastIndex++;y=K.exec(T)}}}catch{}}if(G.length===0)return`No results found for pattern: ${H}
116
- Searched ${D} files.`;let U=[`Found ${G.length} result${G.length===1?"":"s"} for pattern: ${H}`,`Searched ${D} files.`,""];for(let R of G)U.push(`${R.file}:${R.line}:${R.column}`),U.push(...R.context),U.push("");if(G.length>=Q)U.push(`(Showing first ${Q} results. Refine your search for more specific results.)`);return U.join(`
117
- `)}}function qG($){return $.replace(/<script[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style[^>]*>[\s\S]*?<\/style>/gi,"").replace(/<!--[\s\S]*?-->/g,"").replace(/<(p|div|br|hr|h[1-6]|li|tr)[^>]*>/gi,`
118
- `).replace(/<[^>]+>/g," ").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#(\d+);/g,(J,Z)=>String.fromCharCode(parseInt(Z,10))).replace(/\s+/g," ").replace(/\n\s+/g,`
100
+ ${V}`:""):A;if(B>Z)_+=`
101
+
102
+ [Output truncated: ${B} bytes total, showing first ${Z} bytes]`;if(D!==0)R(()=>j(Error(V||`Command exited with code ${D}`)));else R(()=>W(_))}),H.on("error",(D)=>{O(),R(()=>j(Error(`Failed to execute command: ${D.message}`)))})})}function A8($={}){let{shell:f=VG(process.platform),timeoutMs:J=30000,maxOutputBytes:Z=1e6,env:Q={},combineOutput:W=!0}=$;return(j,X,H)=>{let Y=typeof j!=="string";return KG({executable:Y?j.command:f,args:Y?j.args??[]:BG(f,j),cwd:X,env:Q},H,J,Z,W)}}import*as o0 from"node:fs/promises";import*as s0 from"node:path";function GG($,f,J){let Z=s0.isAbsolute(f),Q=Z?s0.normalize(f):s0.resolve($,f);if(!J)return Q;if(Z)return Q;let W=s0.relative($,Q);if(W.startsWith("..")||s0.isAbsolute(W))throw Error(`Path must stay within cwd: ${f}`);return Q}function PG($,f){if(f.length===0)return 0;return $.split(f).length-1}function FG($,f,J){let Z=$.split(`
103
+ `),Q=f.split(`
104
+ `),W=Math.max(Z.length,Q.length),j=["```diff"],X=0;for(let H=0;H<W;H++){if(X>=J){j.push("... diff truncated ...");break}let Y=Z[H],A=Q[H];if(Y===A)continue;let V=H+1;if(Y!==void 0)j.push(`-${V}: ${Y}`),X++;if(A!==void 0&&X<J)j.push(`+${V}: ${A}`),X++}return j.push("```"),j.join(`
105
+ `)}async function UG($,f,J){return await o0.mkdir(s0.dirname($),{recursive:!0}),await o0.writeFile($,f,{encoding:J}),`File created successfully at: ${$}`}async function RG($){try{return await o0.access($),!0}catch{return!1}}async function DG($,f,J,Z,Q){let W=await o0.readFile($,Z),j=PG(W,f);if(j===0)throw Error(`No replacement performed: text not found in ${$}.`);if(j>1)throw Error(`No replacement performed: multiple occurrences of text found in ${$}.`);let X=W.replace(f,J??"");await o0.writeFile($,X,{encoding:Z});let H=FG(W,X,Q);return`Edited ${$}
106
+ ${H}`}async function LG($,f,J,Z){let W=(await o0.readFile($,Z)).split(`
107
+ `),j=W.length+1;if(f<1||f>j)throw Error(`Invalid insert_line: ${f}. insert_line must be a positive one-based boundary line in the range 1-${j}. Use ${j} to append at EOF.`);let X=f-1;return W.splice(X,0,...J.split(`
108
+ `)),await o0.writeFile($,W.join(`
109
+ `),{encoding:Z}),`Inserted content at line ${f} in ${$}.`}function V8($={}){let{encoding:f="utf-8",restrictToCwd:J=!0,maxDiffLines:Z=200}=$;return async(Q,W,j)=>{let X=GG(W,Q.path,J);if(Q.insert_line!=null)return LG(X,Q.insert_line,Q.new_text,f);if(!await RG(X))return UG(X,Q.new_text,f);if(Q.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return DG(X,Q.old_text,Q.new_text,f,Z)}}import*as B8 from"node:fs/promises";import*as s$ from"node:path";import{resolveExistingFilePath as _G}from"@cline/shared/storage";var zG=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),OG={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0};function K8($={}){let{maxFileSizeBytes:f,encoding:J,includeLineNumbers:Z}={...OG,...$};return async(Q,W)=>{let{path:j,start_line:X,end_line:H}=Q,Y=s$.isAbsolute(j)?s$.normalize(j):s$.resolve(process.cwd(),j),A=_G(Y)??Y,V=s$.extname(A).toLowerCase(),B=zG.get(V),K=await B8.stat(A);if(!K.isFile())throw Error(`Path is not a file: ${A}`);if(K.size>f)throw Error(`File too large: ${K.size} bytes (max: ${f} bytes). Consider reading specific sections or using a different approach.`);if(B){if(W.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let z=await B8.readFile(A);return[{type:"text",text:"Successfully read image"},{type:"image",data:z.toString("base64"),mediaType:B}]}let R=(await B8.readFile(A,J)).split(`
110
+ `),P=Math.max((X??1)-1,0),F=Math.min(H??R.length,R.length),U=R.slice(P,F);if(Z){let z=String(R.length).length;return U.map((O,D)=>`${String(P+D+1).padStart(z," ")} | ${O}`).join(`
111
+ `)}return U.join(`
112
+ `)}}import{spawn as r3}from"node:child_process";import*as i3 from"node:fs/promises";import*as h4 from"node:path";var p3={};w(p3,{prewarmFileIndex:()=>S4,getFileIndex:()=>y$,enrichPromptWithMentions:()=>qf});import{spawn as TG}from"node:child_process";import{readdir as NG}from"node:fs/promises";import kZ from"node:path";import{isMainThread as c3,parentPort as v3,Worker as MG}from"node:worker_threads";var yG=15000,qG=600000,wG=1000,SG=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function u3($){let f=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return f==="EACCES"||f==="EPERM"||f==="ENOENT"}var yf=new Map;function hG(){if(!c3)return!1;return!0}function CG($){if(yf.size<=1)return;for(let[f,J]of yf.entries()){if(J.pending)continue;if($-J.lastAccessedAt>qG)yf.delete(f)}}function EG($,f){return kZ.relative($,f).split(kZ.sep).join("/")}async function bG($){let J=(await new Promise((Z,Q)=>{let W=TG("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"]}),j="",X="";W.stdout.on("data",(H)=>{j+=H.toString()}),W.stderr.on("data",(H)=>{X+=H.toString()}),W.on("error",Q),W.on("close",(H)=>{if(H===0){Z(j);return}Q(Error(X||`rg exited with code ${H}`))})})).split(/\r?\n/).map((Z)=>Z.trim()).filter((Z)=>Z.length>0).map((Z)=>Z.replace(/\\/g,"/"));return new Set(J)}async function d3($,f,J){let Z;try{Z=await NG(f,{withFileTypes:!0})}catch(Q){if(u3(Q))return;throw Q}for(let Q of Z){let W=kZ.join(f,Q.name);if(Q.isDirectory()){if(SG.has(Q.name))continue;try{await d3($,W,J)}catch(j){if(u3(j))continue;throw j}continue}if(Q.isFile())J.add(EG($,W))}}async function kG($){let f=new Set;return await d3($,$,f),f}async function w4($){try{return await bG($)}catch{return kG($)}}function IG(){if(c3||!v3)return;let $=v3;$.on("message",(f)=>{if(f.type!=="index")return;w4(f.cwd).then((J)=>{let Z={type:"indexResult",requestId:f.requestId,files:Array.from(J)};$.postMessage(Z)}).catch((J)=>{let Z={type:"indexResult",requestId:f.requestId,error:J instanceof Error?J.message:"Failed to build file index"};$.postMessage(Z)})})}class l3{worker=new MG(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",($)=>{if($.type!=="indexResult")return;let f=this.pending.get($.requestId);if(!f)return;if(this.pending.delete($.requestId),$.error){f.reject(Error($.error));return}f.resolve($.files??[])}),this.worker.on("error",($)=>{this.flushPending($)}),this.worker.on("exit",($)=>{if($!==0)this.flushPending(Error(`File index worker exited with code ${$}`))})}requestIndex($){let f=++this.nextRequestId,J=new Promise((Q,W)=>{let j=setTimeout(()=>{this.pending.delete(f),Q(null)},wG);j.unref(),this.pending.set(f,{resolve:(X)=>{clearTimeout(j),Q(X)},reject:(X)=>{clearTimeout(j),W(X)}})}),Z={type:"index",requestId:f,cwd:$};return this.worker.postMessage(Z),J}flushPending($){for(let[f,J]of this.pending.entries())J.reject($),this.pending.delete(f)}}IG();var bZ;function xG(){if(!hG())return null;if(bZ===void 0)bZ=new l3;return bZ}async function mG($){let f=xG();if(!f)return w4($);try{let J=await f.requestIndex($);if(J===null)return w4($);return new Set(J)}catch{return w4($)}}async function y$($,f={}){let J=f.ttlMs??yG,Z=Date.now();CG(Z);let Q=yf.get($);if(Q&&J>0&&Z-Q.lastBuiltAt<=J&&Q.files.size>0)return Q.lastAccessedAt=Z,Q.files;if(Q?.pending)return Q.lastAccessedAt=Z,Q.pending;let W=mG($).then((j)=>{return yf.set($,{files:j,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),j});return yf.set($,{files:Q?.files??new Set,lastBuiltAt:Q?.lastBuiltAt??0,lastAccessedAt:Z,pending:W}),W}async function S4($,f={}){await y$($,{...f,ttlMs:0})}import{stat as gG}from"node:fs/promises";import S1 from"node:path";var vG=/[),.:;!?`'"]+$/,uG=/^[(`'"]+/;function cG($){let f=$.matchAll(/(^|[\s])@([^\s]+)/g),J=[];for(let Z of f){let Q=(Z[2]??"").trim();if(Q.length===0)continue;let W=Q.replace(uG,"").replace(vG,"");if(W.length===0||W.includes("@"))continue;J.push(W)}return Array.from(new Set(J))}function dG($,f){let J=$.replace(/\\/g,"/"),Z=S1.isAbsolute(J)?S1.resolve(J):S1.resolve(f,J),Q=S1.relative(f,Z);if(Q.startsWith("..")||S1.isAbsolute(Q))return;return Q.split(S1.sep).join("/")}async function qf($,f,J={}){let Z=cG($);if(Z.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:Q,maxFileBytes:W,maxTotalBytes:j}=J,X=await y$(f,{ttlMs:J.ttlMs}),H=[],Y=[],A=[],V=0;for(let B of Z){if(Q&&A.length>=Q){Y.push(B);continue}let K=dG(B,f);if(!K||!X.has(K)){Y.push(B);continue}if(!W||!j){H.push(K);continue}let G=S1.join(f,K);try{if(!(await gG(G)).isFile()){Y.push(B);continue}let P=V+W;if(P>j){Y.push(B);continue}V=P,H.push(K)}catch{Y.push(B)}}return{prompt:$,mentions:Z,matchedFiles:H,ignoredMentions:Y}}var lG=["ts","tsx","js","jsx","mjs","cjs","json","md","mdx","txt","yaml","yml","toml","py","rb","go","rs","java","kt","swift","c","cpp","h","hpp","css","scss","less","html","vue","svelte","sql","sh","bash","zsh","fish","ps1","env","gitignore","dockerignore","editorconfig"],pG=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],h1=null;function rG(){if(h1!==null)return Promise.resolve(h1);return new Promise(($)=>{let f=r3("rg",["--version"],{stdio:["ignore","pipe","pipe"]});f.on("close",(J)=>{h1=J===0,$(h1)}),f.on("error",()=>{h1=!1,$(!1)}),setTimeout(()=>{if(!f.killed)f.kill("SIGTERM");if(h1===null)h1=!1,$(!1)},1000)})}function iG($,f,J,Z,Q=5000,W){return new Promise((j)=>{let X=r3("rg",["--json",`--context=${Z}`,"--max-count=1","-i",$],{cwd:f,stdio:["ignore","pipe","pipe"]}),H="",Y=!1,A=()=>{if(!X.killed)X.kill("SIGTERM")},V=setTimeout(()=>{if(!Y)Y=!0,A(),j(null)},Q),B=(K)=>{if(!Y)Y=!0,clearTimeout(V),A(),j(K)};if(W?.aborted){A(),j(null);return}W?.addEventListener("abort",()=>{B(null)}),X.stdout.on("data",(K)=>{H+=K.toString()}),X.stderr.on("data",()=>{}),X.on("close",(K)=>{if(K===0||K===1){try{let G=[],R=H.split(`
113
+ `).filter((P)=>P.trim());for(let P of R){if(G.length>=J)break;let F=JSON.parse(P);if(F.type==="match"){let U=F.data,z=[];if(F.data.submatches&&F.data.submatches.length>0){let O=F.data.submatches[0];G.push({file:U.path.text,line:U.line_number,column:(O?.start??0)+1,match:O?.match?.text??"",context:z})}}else if(F.type==="context"&&G.length>0){let U=G[G.length-1],z=F.data.line_number===U.line?">":" ";U.context.push(`${z} ${F.data.line_number}: ${F.data.lines?.text??F.data.line?.text??""}`)}}B(G.length>0?G:null)}catch{B(null)}return}B(null)}),X.on("error",()=>{B(null)})})}function nG($,f,J,Z){let Q=$.split("/"),W=Q[Q.length-1]??"";if(Q.length-1>Z)return!1;for(let H=0;H<Q.length-1;H++)if(f.has(Q[H]??""))return!1;let X=h4.posix.extname(W).slice(1).toLowerCase();return J.has(X)||!X&&!W.startsWith(".")}function G8($={}){let{includeExtensions:f=lG,excludeDirs:J=pG,maxResults:Z=100,contextLines:Q=2,maxDepth:W=20}=$,j=new Set(J),X=new Set(f.map((H)=>H.toLowerCase()));return async(H,Y,A)=>{if(A.signal?.aborted)throw Error("Search operation aborted");let V=await rG(),B=null;if(V)B=await iG(H,Y,Z,Q,5000,A.signal);if(B){let U=[`Found ${B.length} result${B.length===1?"":"s"} for pattern: ${H}`,""];for(let z of B)U.push(`${z.file}:${z.line}:${z.column}`),U.push(...z.context),U.push("");if(B.length>=Z)U.push(`(Showing first ${Z} results. Refine your search for more specific results.)`);return U.join(`
114
+ `)}let K;try{K=new RegExp(H,"gim")}catch(U){throw Error(`Invalid regex pattern: ${H}. ${U instanceof Error?U.message:""}`)}let G=[],R=0,P=await y$(Y);for(let U of P){if(A.signal?.aborted)throw Error("Search operation aborted");if(!nG(U,j,X,W))continue;if(G.length>=Z)break;R++;let z=h4.join(Y,U);try{let D=(await i3.readFile(z,"utf-8")).split(`
115
+ `);for(let _=0;_<D.length;_++){let N=D[_];K.lastIndex=0;let q=K.exec(N);while(q!==null){if(G.length>=Z)break;let $0=Math.max(0,_-Q),A0=Math.min(D.length-1,_+Q),o=[];for(let V0=$0;V0<=A0;V0++){let i=V0===_?">":" ";o.push(`${i} ${V0+1}: ${D[V0]}`)}if(G.push({file:U,line:_+1,column:q.index+1,match:q[0],context:o}),q.index===K.lastIndex)K.lastIndex++;q=K.exec(N)}}}catch{}}if(G.length===0)return`No results found for pattern: ${H}
116
+ Searched ${R} files.`;let F=[`Found ${G.length} result${G.length===1?"":"s"} for pattern: ${H}`,`Searched ${R} files.`,""];for(let U of G)F.push(`${U.file}:${U.line}:${U.column}`),F.push(...U.context),F.push("");if(G.length>=Z)F.push(`(Showing first ${Z} results. Refine your search for more specific results.)`);return F.join(`
117
+ `)}}function aG($){return $.replace(/<script[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style[^>]*>[\s\S]*?<\/style>/gi,"").replace(/<!--[\s\S]*?-->/g,"").replace(/<(p|div|br|hr|h[1-6]|li|tr)[^>]*>/gi,`
118
+ `).replace(/<[^>]+>/g," ").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#(\d+);/g,(f,J)=>String.fromCharCode(parseInt(J,10))).replace(/\s+/g," ").replace(/\n\s+/g,`
119
119
  `).replace(/\n{3,}/g,`
120
120
 
121
- `).trim()}function fJ($={}){let{timeoutMs:J=30000,maxResponseBytes:Z=5000000,userAgent:Q="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:W={},followRedirects:f=!0}=$;return async(j,X,H)=>{let Y;try{Y=new URL(j)}catch{throw Error(`Invalid URL: ${j}`)}if(!["http:","https:"].includes(Y.protocol))throw Error(`Invalid protocol: ${Y.protocol}. Only http and https are supported.`);let A=new AbortController,V=setTimeout(()=>A.abort(),J),B;if(H.signal)B=()=>A.abort(),H.signal.addEventListener("abort",B);try{let K=await fetch(j,{method:"GET",headers:{"User-Agent":Q,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...W},redirect:f?"follow":"manual",signal:A.signal});if(clearTimeout(V),!f&&K.status>=300&&K.status<400)return`Redirect to: ${K.headers.get("location")}`;if(!K.ok)throw Error(`HTTP ${K.status}: ${K.statusText}`);let G=K.headers.get("content-type")||"",D=K.body?.getReader();if(!D)throw Error("Failed to read response body");let F=[],U=0;while(!0){let{done:T,value:y}=await D.read();if(T)break;if(U+=y.length,U>Z)throw D.cancel(),Error(`Response too large: exceeded ${Z} bytes`);F.push(y)}let R=new Uint8Array(U),O=0;for(let T of F)R.set(T,O),O+=T.length;let _=new TextDecoder("utf-8").decode(R),P;if(G.includes("text/html")||G.includes("application/xhtml"))P=qG(_);else if(G.includes("application/json"))try{let T=JSON.parse(_);P=JSON.stringify(T,null,2)}catch{P=_}else P=_;let z=[`URL: ${j}`,`Content-Type: ${G}`,`Size: ${U} bytes`,"","--- Content ---",P.slice(0,50000)];if(P.length>50000)z.push(`
122
- [Content truncated: showing first 50000 of ${P.length} characters]`);return z.push("","--- Analysis Request ---",`Prompt: ${X}`),z.join(`
123
- `)}catch(K){if(clearTimeout(V),K instanceof Error){if(K.name==="AbortError")throw Error(`Request timed out after ${J}ms`);throw K}throw Error(`Fetch failed: ${String(K)}`)}finally{if(H.signal&&B)H.signal.removeEventListener("abort",B)}}}function z2($={}){return{readFile:QJ($.fileRead),search:WJ($.search),bash:$J($.bash),webFetch:fJ($.webFetch),applyPatch:e8($.applyPatch),editor:JJ($.editor)}}var yG={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion",submit_and_exit:"enableSubmitAndExit"},O2=[{name:"openai-native-use-apply-patch",mode:"act",providerIdIncludes:["openai-native"],enableTools:["apply_patch"],disableTools:["editor"]},{name:"codex-and-gpt-use-apply-patch",mode:"act",modelIdIncludes:["codex","gpt"],enableTools:["apply_patch"],disableTools:["editor"]}];function wf($,J){if(!J||J.length===0)return!0;let Z=$.toLowerCase();return J.some((Q)=>Z.includes(Q.toLowerCase()))}function wG($,J,Z,Q){if($.mode&&$.mode!=="any"&&$.mode!==Q)return!1;return wf(J,$.providerIdIncludes)&&wf(Z,$.modelIdIncludes)}function _2($,J,Z,Q){if(!Q||Q.length===0)return{};let W=new Map;for(let j of Q){if(!wG(j,$,J,Z))continue;for(let X of j.disableTools??[])W.set(X,!1);for(let X of j.enableTools??[])W.set(X,!0)}let f={};for(let[j,X]of W.entries())f[yG[j]]=X;return f}var k0={act:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!0,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},plan:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!1,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},search:{enableReadFiles:!0,enableSearch:!0,enableBash:!1,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},minimal:{enableReadFiles:!1,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!1},yolo:{enableReadFiles:!0,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!0,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!0,enableSpawnAgent:!1,enableAgentTeams:!1}};function N$($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function O6($){if($!=="yolo")return{};let J={enabled:!0,autoApprove:!0},Z={"*":J};for(let Q of c$)Z[Q]=J;return Z}function _6($,J){let Z=k0[$],{enableSpawnAgent:Q,enableAgentTeams:W,...f}=Z;return p$({...f,...J})}import{createTool as wF,zodToJsonSchema as SF}from"@cline/shared";import{z as bQ}from"zod";import{createAgentRuntime as LF}from"@cline/agents";import{createContributionRegistry as zF}from"@cline/shared";import{createGateway as mG,createHandlerAsync as gG,hasRegisteredHandler as vG,MODEL_COLLECTIONS_BY_PROVIDER_ID as uG,normalizeProviderId as cG}from"@cline/llms";function SG($){let J=EG($.content),Z=[],Q=$.id??kG(),W=0,f=[],j=()=>{if(f.length===0)return;let X=W===0?Q:`${Q}_part_${W}`;W+=1,Z.push({id:X,role:$.role,content:f.map(hG),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:Sf($.metrics)}),f=[]};if(J.length===0)return Z.push({id:Q,role:$.role,content:[],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:Sf($.metrics)}),Z;for(let X of J){if(X.type!=="tool_result"){f.push(X);continue}j(),Z.push({id:`${Q}_tool_${X.tool_use_id}`,role:"tool",content:[Ef(X)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return j(),Z}function T6($){return $.flatMap(SG)}function CG($){let J=$.content.map(hf).filter((Z)=>Z!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:J,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:bG($.metrics)}}function T2($){return $.map(CG)}function N6($){let J=[];for(let Z of $){let Q=Z.content.map(hf).filter((j)=>j!==void 0),W=Z.role==="tool"?"user":Z.role,f=J[J.length-1];if(W==="user"&&Q.length>0&&Q.every((j)=>j.type==="tool_result")&&f?.role==="user"&&Array.isArray(f.content)&&f.content.every((j)=>j.type==="tool_result")){f.content.push(...Q);continue}J.push({role:W,content:Q})}return J}function EG($){if(typeof $==="string")return $.length>0?[{type:"text",text:$}]:[];return[...$]}function hG($){switch($.type){case"text":return{type:"text",text:$.text};case"thinking":return{type:"reasoning",text:$.thinking,metadata:$.signature?{signature:$.signature,details:$.details}:$.details?{details:$.details}:void 0};case"redacted_thinking":return{type:"reasoning",text:"",redacted:!0,metadata:{data:$.data}};case"image":return{type:"image",image:$.data,mediaType:$.mediaType};case"file":return{type:"file",path:$.path,content:$.content};case"tool_use":return{type:"tool-call",toolCallId:$.id,toolName:$.name,input:$.input,metadata:$.signature?{signature:$.signature}:void 0};case"tool_result":return Ef($)}}function Ef($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function hf($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let J=$.metadata;return{type:"thinking",thinking:$.text,signature:J?.signature,details:J?.details}}case"image":return typeof $.image==="string"?{type:"image",data:$.image,mediaType:$.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:$.path,content:$.content};case"tool-call":return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:$.metadata?.signature};case"tool-result":{let J=$.output,Z=typeof J==="string"?J:Array.isArray(J)?J:JSON.stringify(J);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:Z,is_error:$.isError}}}}function Sf($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function bG($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var Cf=0;function kG(){return Cf+=1,`msg_${Date.now().toString(36)}_${Cf.toString(36)}`}function IG($){switch($.type){case"text":return[{type:"text-delta",text:$.text}];case"reasoning":return[{type:"reasoning-delta",text:$.reasoning,metadata:$.signature?{thoughtSignature:$.signature,details:$.details}:{details:$.details}}];case"tool_calls":{let J=$.tool_call.function,Z=J.arguments;return[{type:"tool-call-delta",toolCallId:$.tool_call.call_id??J.id,toolName:J.name,inputText:typeof Z==="string"?Z:void 0,input:typeof Z==="string"?void 0:Z,...$.signature?{metadata:{thoughtSignature:$.signature}}:{}}]}case"usage":return[{type:"usage",usage:{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost}}];case"done":return[{type:"finish",reason:xG($),error:$.error}];default:return[]}}function xG($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function bf($){return{async*stream(J){let Z=!1,Q=!1;try{let W=typeof $==="function"?await $():$;W.setAbortSignal?.(J.signal);let f=N6(J.messages),j=J.tools.map((X)=>({name:X.name,description:X.description,inputSchema:X.inputSchema}));for await(let X of W.createMessage(J.systemPrompt??"",f,j))for(let H of IG(X)){if(H.type==="finish")Z=!0;else if(H.type==="tool-call-delta")Q=!0;yield H}if(!Z)yield{type:"finish",reason:Q?"tool-calls":"stop"}}catch(W){if(!Z)yield{type:"finish",reason:J.signal?.aborted?"aborted":"error",error:W instanceof Error?W.message:String(W)}}}}}function dG($){let J=Object.fromEntries(Object.entries($).filter(([,Z])=>Z!==void 0));return Object.keys(J).length>0?J:void 0}function lG($){let J={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if($.providerId==="bedrock")Object.assign(J,{authentication:$.aws?.authentication,profile:$.aws?.profile,accessKeyId:$.aws?.accessKey,secretAccessKey:$.aws?.secretKey,sessionToken:$.aws?.sessionToken,usePromptCache:$.aws?.usePromptCache,useCrossRegionInference:$.useCrossRegionInference,useGlobalInference:$.useGlobalInference,endpoint:$.aws?.endpoint,customModelBaseId:$.aws?.customModelBaseId});if($.providerId==="vertex"){let Z=$.gcp?.region??$.region;Object.assign(J,{project:$.gcp?.projectId,projectId:$.gcp?.projectId,location:Z,region:Z})}return dG(J)}function NQ($){let J=$.providerConfig;if(J?.knownModels)return J.knownModels;if($.knownModels)return $.knownModels;return uG[$.providerId]?.models??void 0}function pG($){if(!$?.length)return;let J=new Set;for(let Z of $)switch(Z){case"tools":case"reasoning":case"prompt-cache":case"images":J.add(Z);break;case"structured_output":J.add("structured-output");break;default:J.add("text")}return J.add("text"),[...J]}function rG($,J){return{id:$,name:J.name??$,description:J.description,contextWindow:J.contextWindow,maxInputTokens:J.maxInputTokens,maxOutputTokens:J.maxTokens,capabilities:pG(J.capabilities),metadata:{family:J.family,pricing:J.pricing,status:J.status,releaseDate:J.releaseDate}}}function kf($,J,Z){let Q=$.providerConfig,W=Q?.providerId===$.providerId?Q:void 0,f={...W??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??W?.apiKey,baseUrl:$.baseUrl??W?.baseUrl,headers:$.headers??W?.headers,knownModels:NQ($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:J,extensionContext:$.extensionContext};if(vG(cG(f.providerId)))return bf(()=>gG(f));return mG({providerConfigs:[{providerId:f.providerId,apiKey:f.apiKey,baseUrl:f.baseUrl,headers:f.headers,options:lG(f),models:f.knownModels?Object.entries(f.knownModels).map(([j,X])=>rG(j,X)):void 0}],logger:J,telemetry:Z??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:f.providerId,modelId:f.modelId},{maxTokens:f.maxOutputTokens})}import{normalizeUserInput as If}from"@cline/shared";var iG=50000,nG=6000000,xf=8000,aG=new Set(["read","read_files","search","search_codebase","bash","run_commands"]),tG=new Set(["read","read_files"]),N1="[outdated - see the latest file content]",mf="Tool execution was interrupted before a result was produced.",sG=($)=>`
121
+ `).trim()}function P8($={}){let{timeoutMs:f=30000,maxResponseBytes:J=5000000,userAgent:Z="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:Q={},followRedirects:W=!0}=$;return async(j,X,H)=>{let Y;try{Y=new URL(j)}catch{throw Error(`Invalid URL: ${j}`)}if(!["http:","https:"].includes(Y.protocol))throw Error(`Invalid protocol: ${Y.protocol}. Only http and https are supported.`);let A=new AbortController,V=setTimeout(()=>A.abort(),f),B;if(H.signal)B=()=>A.abort(),H.signal.addEventListener("abort",B);try{let K=await fetch(j,{method:"GET",headers:{"User-Agent":Z,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...Q},redirect:W?"follow":"manual",signal:A.signal});if(clearTimeout(V),!W&&K.status>=300&&K.status<400)return`Redirect to: ${K.headers.get("location")}`;if(!K.ok)throw Error(`HTTP ${K.status}: ${K.statusText}`);let G=K.headers.get("content-type")||"",R=K.body?.getReader();if(!R)throw Error("Failed to read response body");let P=[],F=0;while(!0){let{done:N,value:q}=await R.read();if(N)break;if(F+=q.length,F>J)throw R.cancel(),Error(`Response too large: exceeded ${J} bytes`);P.push(q)}let U=new Uint8Array(F),z=0;for(let N of P)U.set(N,z),z+=N.length;let O=new TextDecoder("utf-8").decode(U),D;if(G.includes("text/html")||G.includes("application/xhtml"))D=aG(O);else if(G.includes("application/json"))try{let N=JSON.parse(O);D=JSON.stringify(N,null,2)}catch{D=O}else D=O;let _=[`URL: ${j}`,`Content-Type: ${G}`,`Size: ${F} bytes`,"","--- Content ---",D.slice(0,50000)];if(D.length>50000)_.push(`
122
+ [Content truncated: showing first 50000 of ${D.length} characters]`);return _.push("","--- Analysis Request ---",`Prompt: ${X}`),_.join(`
123
+ `)}catch(K){if(clearTimeout(V),K instanceof Error){if(K.name==="AbortError")throw Error(`Request timed out after ${f}ms`);throw K}throw Error(`Fetch failed: ${String(K)}`)}finally{if(H.signal&&B)H.signal.removeEventListener("abort",B)}}}function wf($={}){return{readFile:K8($.fileRead),search:G8($.search),bash:A8($.bash),webFetch:P8($.webFetch),applyPatch:Y8($.applyPatch),editor:V8($.editor)}}var tG={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion",submit_and_exit:"enableSubmitAndExit"},Sf=[{name:"openai-native-use-apply-patch",mode:"act",providerIdIncludes:["openai-native"],enableTools:["apply_patch"],disableTools:["editor"]},{name:"codex-and-gpt-use-apply-patch",mode:"act",modelIdIncludes:["codex","gpt"],enableTools:["apply_patch"],disableTools:["editor"]}];function n3($,f){if(!f||f.length===0)return!0;let J=$.toLowerCase();return f.some((Z)=>J.includes(Z.toLowerCase()))}function sG($,f,J,Z){if($.mode&&$.mode!=="any"&&$.mode!==Z)return!1;return n3(f,$.providerIdIncludes)&&n3(J,$.modelIdIncludes)}function hf($,f,J,Z){if(!Z||Z.length===0)return{};let Q=new Map;for(let j of Z){if(!sG(j,$,f,J))continue;for(let X of j.disableTools??[])Q.set(X,!1);for(let X of j.enableTools??[])Q.set(X,!0)}let W={};for(let[j,X]of Q.entries())W[tG[j]]=X;return W}var k0={act:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!0,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},plan:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!1,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},search:{enableReadFiles:!0,enableSearch:!0,enableBash:!1,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},minimal:{enableReadFiles:!1,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!1},yolo:{enableReadFiles:!0,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!0,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!0,enableSpawnAgent:!1,enableAgentTeams:!1}};function q$($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function C4($){if($!=="yolo")return{};let f={enabled:!0,autoApprove:!0},J={"*":f};for(let Z of i$)J[Z]=f;return J}function E4($,f){let J=k0[$],{enableSpawnAgent:Z,enableAgentTeams:Q,...W}=J;return t$({...W,...f})}import{createTool as sP,zodToJsonSchema as oP}from"@cline/shared";import{z as pZ}from"zod";import{createAgentRuntime as cP}from"@cline/agents";import{createContributionRegistry as dP}from"@cline/shared";import{createGateway as jP,createHandlerAsync as XP,hasRegisteredHandler as HP,MODEL_COLLECTIONS_BY_PROVIDER_ID as YP,normalizeProviderId as AP}from"@cline/llms";function oG($){let f=$P($.content),J=[],Z=$.id??ZP(),Q=0,W=[],j=()=>{if(W.length===0)return;let X=Q===0?Z:`${Z}_part_${Q}`;Q+=1,J.push({id:X,role:$.role,content:W.map(fP),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:a3($.metrics)}),W=[]};if(f.length===0)return J.push({id:Z,role:$.role,content:[],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:a3($.metrics)}),J;for(let X of f){if(X.type!=="tool_result"){W.push(X);continue}j(),J.push({id:`${Z}_tool_${X.tool_use_id}`,role:"tool",content:[s3(X)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return j(),J}function b4($){return $.flatMap(oG)}function eG($){let f=$.content.map(o3).filter((J)=>J!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:f,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:JP($.metrics)}}function Cf($){return $.map(eG)}function k4($){let f=[];for(let J of $){let Z=J.content.map(o3).filter((j)=>j!==void 0),Q=J.role==="tool"?"user":J.role,W=f[f.length-1];if(Q==="user"&&Z.length>0&&Z.every((j)=>j.type==="tool_result")&&W?.role==="user"&&Array.isArray(W.content)&&W.content.every((j)=>j.type==="tool_result")){W.content.push(...Z);continue}f.push({role:Q,content:Z})}return f}function $P($){if(typeof $==="string")return $.length>0?[{type:"text",text:$}]:[];return[...$]}function fP($){switch($.type){case"text":return{type:"text",text:$.text};case"thinking":return{type:"reasoning",text:$.thinking,metadata:$.signature?{signature:$.signature,details:$.details}:$.details?{details:$.details}:void 0};case"redacted_thinking":return{type:"reasoning",text:"",redacted:!0,metadata:{data:$.data}};case"image":return{type:"image",image:$.data,mediaType:$.mediaType};case"file":return{type:"file",path:$.path,content:$.content};case"tool_use":return{type:"tool-call",toolCallId:$.id,toolName:$.name,input:$.input,metadata:$.signature?{signature:$.signature}:void 0};case"tool_result":return s3($)}}function s3($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function o3($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let f=$.metadata;return{type:"thinking",thinking:$.text,signature:f?.signature,details:f?.details}}case"image":return typeof $.image==="string"?{type:"image",data:$.image,mediaType:$.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:$.path,content:$.content};case"tool-call":return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:$.metadata?.signature};case"tool-result":{let f=$.output,J=typeof f==="string"?f:Array.isArray(f)?f:JSON.stringify(f);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:J,is_error:$.isError}}}}function a3($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function JP($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var t3=0;function ZP(){return t3+=1,`msg_${Date.now().toString(36)}_${t3.toString(36)}`}function QP($){switch($.type){case"text":return[{type:"text-delta",text:$.text}];case"reasoning":return[{type:"reasoning-delta",text:$.reasoning,metadata:$.signature?{thoughtSignature:$.signature,details:$.details}:{details:$.details}}];case"tool_calls":{let f=$.tool_call.function,J=f.arguments;return[{type:"tool-call-delta",toolCallId:$.tool_call.call_id??f.id,toolName:f.name,inputText:typeof J==="string"?J:void 0,input:typeof J==="string"?void 0:J,...$.signature?{metadata:{thoughtSignature:$.signature}}:{}}]}case"usage":return[{type:"usage",usage:{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost}}];case"done":return[{type:"finish",reason:WP($),error:$.error}];default:return[]}}function WP($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function e3($){return{async*stream(f){let J=!1,Z=!1;try{let Q=typeof $==="function"?await $():$;Q.setAbortSignal?.(f.signal);let W=k4(f.messages),j=f.tools.map((X)=>({name:X.name,description:X.description,inputSchema:X.inputSchema}));for await(let X of Q.createMessage(f.systemPrompt??"",W,j))for(let H of QP(X)){if(H.type==="finish")J=!0;else if(H.type==="tool-call-delta")Z=!0;yield H}if(!J)yield{type:"finish",reason:Z?"tool-calls":"stop"}}catch(Q){if(!J)yield{type:"finish",reason:f.signal?.aborted?"aborted":"error",error:Q instanceof Error?Q.message:String(Q)}}}}}function VP($){let f=Object.fromEntries(Object.entries($).filter(([,J])=>J!==void 0));return Object.keys(f).length>0?f:void 0}function BP($){let f={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if($.providerId==="bedrock")Object.assign(f,{authentication:$.aws?.authentication,profile:$.aws?.profile,accessKeyId:$.aws?.accessKey,secretAccessKey:$.aws?.secretKey,sessionToken:$.aws?.sessionToken,usePromptCache:$.aws?.usePromptCache,useCrossRegionInference:$.useCrossRegionInference,useGlobalInference:$.useGlobalInference,endpoint:$.aws?.endpoint,customModelBaseId:$.aws?.customModelBaseId});if($.providerId==="vertex"){let J=$.gcp?.region??$.region;Object.assign(f,{project:$.gcp?.projectId,projectId:$.gcp?.projectId,location:J,region:J})}return VP(f)}function IZ($){let f=$.providerConfig;if(f?.knownModels)return f.knownModels;if($.knownModels)return $.knownModels;return YP[$.providerId]?.models??void 0}function KP($){if(!$?.length)return;let f=new Set;for(let J of $)switch(J){case"tools":case"reasoning":case"prompt-cache":case"images":f.add(J);break;case"structured_output":f.add("structured-output");break;default:f.add("text")}return f.add("text"),[...f]}function GP($,f){return{id:$,name:f.name??$,description:f.description,contextWindow:f.contextWindow,maxInputTokens:f.maxInputTokens,maxOutputTokens:f.maxTokens,capabilities:KP(f.capabilities),metadata:{family:f.family,pricing:f.pricing,status:f.status,releaseDate:f.releaseDate}}}function $j($,f,J){let Z=$.providerConfig,Q=Z?.providerId===$.providerId?Z:void 0,W={...Q??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??Q?.apiKey,baseUrl:$.baseUrl??Q?.baseUrl,headers:$.headers??Q?.headers,knownModels:IZ($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:f,extensionContext:$.extensionContext};if(HP(AP(W.providerId)))return e3(()=>XP(W));return jP({providerConfigs:[{providerId:W.providerId,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,options:BP(W),models:W.knownModels?Object.entries(W.knownModels).map(([j,X])=>GP(j,X)):void 0}],logger:f,telemetry:J??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:W.providerId,modelId:W.modelId},{maxTokens:W.maxOutputTokens})}import{normalizeUserInput as fj}from"@cline/shared";var PP=50000,FP=6000000,Jj=8000,UP=new Set(["read","read_files","search","search_codebase","bash","run_commands"]),RP=new Set(["read","read_files"]),C1="[outdated - see the latest file content]",Zj="Tool execution was interrupted before a result was produced.",DP=($)=>`
124
124
 
125
125
  ...[truncated ${$} chars]...
126
126
 
127
- `,oG=($)=>`
127
+ `,LP=($)=>`
128
128
 
129
129
  ...[truncated ${$} chars to fit provider request budget]...
130
130
 
131
- `;class qQ{maxToolResultChars;targetToolNames;maxTotalTextBytes;indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;constructor($=iG,J=aG,Z=nG){this.maxToolResultChars=$;this.targetToolNames=J;this.maxTotalTextBytes=Z}buildForApi($){this.reindex($);let Z=this.addMissingToolResults($).map((Q)=>{if(!Array.isArray(Q.content)){if(Q.role==="user"&&typeof Q.content==="string"){let j=If(Q.content);if(j!==Q.content)return{...Q,content:j}}return Q}let W=!1,f=Q.content.map((j)=>{let X=this.transformBlock(j,Q.role);if(X!==j)W=!0;return X});return W?{...Q,content:f}:Q});return this.truncateToTotalTextBudget(Z)}transformBlock($,J){if(J==="user"&&$.type==="text"&&typeof $.text==="string"){let W=If($.text);if(W!==$.text)return{...$,text:W};return $}if($.type==="file"){let W=this.truncateMiddle($.content);return W===$.content?$:{...$,content:W}}if($.type!=="tool_result")return $;let Z=this.toolNameByIdCache.get($.tool_use_id),Q=$.content;if(this.isReadTool(Z)&&$.is_error!==!0){let W=this.getReadLocators($);if(W.length>0){let f=W.filter((j)=>this.isOutdatedReadLocator(j,$.tool_use_id));if(f.length>0)Q=this.replaceOutdatedReadContent(Q,f)}}if(this.shouldTruncateTool(Z))Q=this.truncateToolResultContent(Q);return Q===$.content?$:{...$,content:Q}}reindex($){let J=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!J)this.resetIndexes();for(let Z=this.indexedMessageCount;Z<$.length;Z++){let Q=$[Z];if(!Array.isArray(Q.content))continue;for(let W=0;W<Q.content.length;W++){let f=Q.content[W];if(f.type==="file")this.latestFullContentOwnerByPathCache.set(f.path,`file:${Z}:${W}`);else if(f.type==="tool_use"){let j=f.name.toLowerCase();if(this.toolNameByIdCache.set(f.id,j),this.isReadTool(j)){let X=this.extractLocatorsFromReadToolInput(f.input);if(X.length>0)this.readLocatorsByToolUseIdCache.set(f.id,X)}}else if(f.type==="tool_result"){let j=this.toolNameByIdCache.get(f.tool_use_id);if(!this.isReadTool(j)||f.is_error===!0)continue;let X=this.getReadLocators(f);for(let H of X)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(H),f.tool_use_id),this.isFullFileRead(H))this.latestFullContentOwnerByPathCache.set(H.path,f.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}addMissingToolResults($){let J=this.collectToolResultIds($),Z=[],Q=new Map,W=!1,f=()=>{if(Q.size===0)return;j(this.createMissingToolResultMessage(Q)),Q.clear(),W=!0},j=(X)=>{let H=Z.at(-1);if(this.shouldMergeUserAfterToolResults(H,X)){Z[Z.length-1]={...H,content:[...H.content,...this.contentBlocksForUserMerge(X.content)]},W=!0;return}Z.push(X)};for(let X of $){if(this.isToolResultOnlyMessage(X)){if(j(this.appendMissingToolResults(X,Q)),Q.size>0)Q.clear(),W=!0;continue}if(Array.isArray(X.content)){let H=X.content.filter((A)=>A.type==="tool_result"),Y=X.content.filter((A)=>A.type!=="tool_result");if(H.length>0){let A=this.appendMissingToolResults({...X,role:"user",content:H},Q);if(j(A),Q.size>0)Q.clear();W=!0}if(Y.length>0||H.length===0){if(H.length===0)f();let A=H.length>0?{...X,content:Y}:X;if(j(A),A.role==="assistant")this.trackMissingToolCalls(A,J,Q)}continue}f(),j(X)}return f(),W?Z:$}appendMissingToolResults($,J){if(J.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(J)]}}shouldMergeUserAfterToolResults($,J){return $?.role==="user"&&J.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(J.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let J=new Set;for(let Z of $){if(!Array.isArray(Z.content))continue;for(let Q of Z.content)if(Q.type==="tool_result")J.add(Q.tool_use_id)}return J}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((J)=>J.type==="tool_result")}trackMissingToolCalls($,J,Z){if(!Array.isArray($.content))return;for(let Q of $.content){if(Q.type!=="tool_use"||J.has(Q.id))continue;Z.set(Q.id,Q.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([J,Z])=>({type:"tool_result",tool_use_id:J,name:Z,content:[{type:"text",text:this.formatMissingToolResultText(Z)}],is_error:!0}))}formatMissingToolResultText($){return $?`${mf} Tool: ${$}.`:mf}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let J=$,Z=this.readResultLocatorCache.get(J);if(Z===void 0)Z=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(J,Z);if(Z.length>0)return Z;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let J=$,Z=[],Q=this.extractLocatorFromReadRequest(J);if(Q)Z.push(Q);if(Array.isArray(J.files))for(let W of J.files){let f=this.extractLocatorFromReadRequest(W);if(f)Z.push(f)}if(Array.isArray(J.file_paths)){for(let W of J.file_paths)if(typeof W==="string"&&W.length>0)Z.push({path:W,startLine:null,endLine:null})}return this.dedupeReadLocators(Z)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);for(let J of $){if(J.type!=="text")continue;let Z=this.tryParseReadLocators(J.text);if(Z.length>0)return Z}return[]}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Z=[];for(let Q of $){let W=this.extractLocatorFromResultEntry(Q);if(W)Z.push(W)}return this.dedupeReadLocators(Z)}let J=this.extractLocatorFromResultEntry($);return J?[J]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let J=$,Z=this.extractPath(J);if(!Z)return;return{path:Z,startLine:this.extractLineNumber(J.start_line),endLine:this.extractLineNumber(J.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let J=$,Z=this.extractPath(J);if(Z)return{path:Z,startLine:this.extractLineNumber(J.start_line),endLine:this.extractLineNumber(J.end_line)};if(typeof J.query==="string"&&J.query.length>0)return this.parseReadQuery(J.query);return}extractPath($){let J=[$.path,$.file_path,$.filePath];for(let Z of J)if(typeof Z==="string"&&Z.length>0)return Z;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let J=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!J)return{path:$,startLine:null,endLine:null};return{path:J[1],startLine:Number(J[2]),endLine:J[3]==="EOF"?null:Number(J[3])}}dedupeReadLocators($){let J=new Map;for(let Z of $)J.set(this.toReadLocatorKey(Z),Z);return Array.from(J.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,J){let Z=this.latestFullContentOwnerByPathCache.get($.path);if(Z&&Z!==J)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==J}replaceOutdatedReadContent($,J){let Z=new Set(J.map((f)=>this.toReadLocatorKey(f))),Q=new Set(J.map((f)=>f.path));if(typeof $==="string")return this.replaceOutdatedInString($,Z)??N1;let W=0;for(let f of $)if(f.type==="text")W+=this.countOutdatedImageEntries(f.text,Z);return $.map((f)=>{if(f.type==="file"){if(!Q.has(f.path))return f;return{...f,content:N1}}if(f.type==="image"){if(W===0)return f;return W-=1,{type:"text",text:N1}}if(f.type!=="text")return f;let j=this.replaceOutdatedInString(f.text,Z);if(j===null)return{...f,text:N1};return j===f.text?f:{...f,text:j}})}countOutdatedImageEntries($,J){let Z;try{Z=JSON.parse($)}catch{return 0}let Q=Array.isArray(Z)?Z:[Z],W=0;for(let f of Q){if(!f||typeof f!=="object")continue;let j=f,X=this.extractLocatorFromResultEntry(j);if(!X)continue;if(!J.has(this.toReadLocatorKey(X)))continue;if(j.result==="Successfully read image"||j.content==="Successfully read image")W+=1}return W}replaceOutdatedInString($,J){let Z;try{Z=JSON.parse($)}catch{return null}let Q=Array.isArray(Z)?Z.map((W)=>this.replaceOutdatedReadEntry(W,J)):this.replaceOutdatedReadEntry(Z,J);return JSON.stringify(Q)}replaceOutdatedReadEntry($,J){if(!$||typeof $!=="object")return $;let Z=this.extractLocatorFromResultEntry($);if(!Z||!J.has(this.toReadLocatorKey(Z)))return $;let Q={...$};if(typeof Q.result==="string")Q.result=N1;else if(typeof Q.content==="string")Q.content=N1;else Q.result=N1;return Q}isReadTool($){return!!$&&tG.has($)}shouldTruncateTool($){return!!$&&this.targetToolNames.has($)}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((J)=>{if(J.type==="file"){let Q=this.truncateMiddle(J.content);return Q===J.content?J:{...J,content:Q}}if(J.type!=="text")return J;let Z=this.truncateMiddle(J.text);return Z===J.text?J:{...J,text:Z}})}truncateMiddle($){return MQ($,this.maxToolResultChars,sG)}truncateToTotalTextBudget($){if(this.maxTotalTextBytes<=0)return $;let J=this.countMessageTextBytes($);if(J<=this.maxTotalTextBytes)return $;let Z=$.map((W)=>{if(!Array.isArray(W.content))return W;return{...W,content:W.content.map((f)=>$F(f))}}),Q=this.collectTruncationCandidates(Z);for(let W of Q){if(J<=this.maxTotalTextBytes)break;let f=W.byteLength;if(f<=xf)continue;let j=J-this.maxTotalTextBytes,X=Math.max(xf,f-j),H=eG(W.get(),X,oG);W.set(H),J-=f-N0(H)}return Z}countMessageTextBytes($){let J=0;for(let Z of $){if(typeof Z.content==="string"){J+=N0(Z.content);continue}for(let Q of Z.content)if(Q.type==="text")J+=N0(Q.text);else if(Q.type==="thinking")J+=N0(Q.thinking);else if(Q.type==="file")J+=N0(Q.content);else if(Q.type==="tool_result"){if(typeof Q.content==="string")J+=N0(Q.content);else for(let W of Q.content)if(W.type==="text")J+=N0(W.text);else if(W.type==="file")J+=N0(W.content)}}return J}collectTruncationCandidates($){let J=[];for(let Z of $){if(!Array.isArray(Z.content))continue;for(let Q of Z.content){if(Q.type!=="tool_result")continue;let W=this.toolNameByIdCache.get(Q.tool_use_id);if(!this.shouldTruncateTool(W))continue;if(typeof Q.content==="string"){J.push({byteLength:N0(Q.content),get:()=>Q.content,set:(f)=>{Q.content=f}});continue}for(let f of Q.content)if(f.type==="text")J.push({byteLength:N0(f.text),get:()=>f.text,set:(j)=>{f.text=j}});else if(f.type==="file")J.push({byteLength:N0(f.content),get:()=>f.content,set:(j)=>{f.content=j}})}}return J.sort((Z,Q)=>Q.byteLength-Z.byteLength)}}function N0($){return Buffer.byteLength($,"utf8")}function MQ($,J,Z){if($.length<=J)return $;let Q=Z($.length-J),W=Math.max(0,Math.floor((J-Q.length)/2)),f=Math.max(0,$.length-W*2),j=Z(f),X=Math.max(0,Math.floor((J-j.length)/2)),H=$.slice(0,X),Y=X>0?$.slice(-X):"";return`${H}${j}${Y}`}function eG($,J,Z){if(N0($)<=J)return $;let Q=0,W=$.length,f=MQ($,0,Z);while(Q<=W){let j=Q+W>>>1,X=MQ($,j,Z);if(N0(X)<=J)f=X,Q=j+1;else W=j-1}return f}function $F($){if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((J)=>({...J}))}}function yQ(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class wQ{messages=[];conversationId=yQ();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=yQ(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=yQ(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function gf($){let{agentConfig:J}=$,Z=JF(J),Q=ZF(J),W=$.hooks,f=QF(J.maxParallelToolCalls);return{sessionId:$.sessionId??J.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??J.systemPrompt,messageModelInfo:Q,model:$.model,modelOptions:Z,tools:$.tools,hooks:W,prepareTurn:$.prepareTurn,consumePendingUserMessage:J.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??J.logger,telemetry:$.telemetry??J.telemetry,initialMessages:$.initialMessages,completionPolicy:J.completionPolicy,maxIterations:J.maxIterations,toolExecution:f,toolPolicies:J.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:J.requestToolApproval}}function JF($){let J={};if($.thinking!==void 0)J.thinking=$.thinking;if($.reasoningEffort!==void 0)J.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)J.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)J.maxTokensPerTurn=$.maxTokensPerTurn;if($.apiTimeoutMs!==void 0)J.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(J).length>0?J:void 0}function ZF($){let J=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:J}}function QF($){if($===void 0)return;return $>=2?"parallel":"sequential"}function WF(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function fF($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function SQ($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(SQ);let J={};for(let Z of Object.keys($).sort())J[Z]=SQ($[Z]);return J}function jF($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(SQ($))}catch{return String($)}}function XF($,J,Z,Q){if(J===$.lastToolName&&Z===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=J,$.lastToolSignature=Z,{softWarning:$.consecutiveIdenticalCount===Q.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=Q.hardThreshold}}var vf={softThreshold:3,hardThreshold:5};class CQ{config;state=WF();constructor($){this.config={softThreshold:$?.softThreshold??vf.softThreshold,hardThreshold:$?.hardThreshold??vf.hardThreshold}}inspect($){let J=jF($.input),Z=XF(this.state,$.name,J,this.config);if(Z.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Z.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){fF(this.state)}}class EQ{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let J=this.options.maxConsecutiveMistakes,Z=$.forceAtLimit&&J?J:this.consecutiveMistakes+1;this.consecutiveMistakes=Z;let Q=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(Q),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:Z,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!J||Z<J)return{action:"continue"};let W=await YF({iteration:$.iteration,consecutiveMistakes:Z,maxConsecutiveMistakes:J,reason:$.reason,details:$.details},this.options.onLimitReached);if(W.action==="continue"){let f=W.guidance?.trim();if(f)this.options.appendRecoveryNotice(f,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:f}}return{action:"stop",reason:W.reason?.trim()||void 0,message:HF({iteration:$.iteration,consecutiveMistakes:Z,maxConsecutiveMistakes:J,reason:$.reason,details:$.details,stopReason:W.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function HF($){let J=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Z=$.details?.trim();if(Z)J.push(`Error: ${Z}`);let Q=$.stopReason?.trim();if(Q)J.push(`Decision: ${Q}`);return J.push("Session state was preserved. Send a new prompt to resume from the latest state."),J.join(" ")}async function YF($,J){if(!J)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await J($)}catch(Z){return{action:"stop",reason:Z instanceof Error?Z.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function AF($){let J=$.content.filter((Z)=>Z.type==="text");if(J.length===0)return;return J.map((Z)=>Z.text).join("")}function VF($){let J=$.content.filter((Z)=>Z.type==="reasoning");if(J.length===0)return;return{reasoning:J.map((Z)=>Z.text).join(""),redacted:J.some((Z)=>Z.redacted===!0)}}function BF($){return $.content.find((J)=>J.type==="tool-result")}function KF($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function GF($){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 hQ{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:$.metadata?.reason==="auto_compaction"?"auto_compaction":void 0,metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let J=[],Z=AF($);if(Z!==void 0)J.push({type:"content_end",contentType:"text",text:Z});let Q=VF($);if(Q!==void 0)J.push({type:"content_end",contentType:"reasoning",reasoning:Q.reasoning});return J}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input}]}translateToolFinished($){let J=this.toolStartedAt.get($.toolCall.toolCallId),Z=J===void 0?void 0:Date.now()-J;this.toolStartedAt.delete($.toolCall.toolCallId);let Q=BF($.message),W=Q?.output,f=GF(Q);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:W,error:f,durationMs:Z}]}translateUsage($){let J=$.inputTokens-this.lastUsage.inputTokens,Z=$.outputTokens-this.lastUsage.outputTokens,Q=$.cacheReadTokens-this.lastUsage.cacheReadTokens,W=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,f=this.lastUsage.totalCost??0,X=($.totalCost??0)-f;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,J),outputTokens:Math.max(0,Z),cacheReadTokens:Q===0?void 0:Math.max(0,Q),cacheWriteTokens:W===0?void 0:Math.max(0,W),cost:X===0?void 0:X,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let J={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:KF($.status),text:$.outputText,iterations:$.iterations,usage:J}]}}function OF($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function _F($){let Z=(typeof $.content==="function"?await $.content():$.content).trim();return Z.length>0?Z:void 0}function TF($,J){let Z=$.trim(),Q=J.map((W)=>W.trim()).filter(Boolean).join(`
131
+ `;class mZ{maxToolResultChars;targetToolNames;maxTotalTextBytes;indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;constructor($=PP,f=UP,J=FP){this.maxToolResultChars=$;this.targetToolNames=f;this.maxTotalTextBytes=J}buildForApi($){this.reindex($);let J=this.addMissingToolResults($).map((Z)=>{if(!Array.isArray(Z.content)){if(Z.role==="user"&&typeof Z.content==="string"){let j=fj(Z.content);if(j!==Z.content)return{...Z,content:j}}return Z}let Q=!1,W=Z.content.map((j)=>{let X=this.transformBlock(j,Z.role);if(X!==j)Q=!0;return X});return Q?{...Z,content:W}:Z});return this.truncateToTotalTextBudget(J)}transformBlock($,f){if(f==="user"&&$.type==="text"&&typeof $.text==="string"){let Q=fj($.text);if(Q!==$.text)return{...$,text:Q};return $}if($.type==="file"){let Q=this.truncateMiddle($.content);return Q===$.content?$:{...$,content:Q}}if($.type!=="tool_result")return $;let J=this.toolNameByIdCache.get($.tool_use_id),Z=$.content;if(this.isReadTool(J)&&$.is_error!==!0){let Q=this.getReadLocators($);if(Q.length>0){let W=Q.filter((j)=>this.isOutdatedReadLocator(j,$.tool_use_id));if(W.length>0)Z=this.replaceOutdatedReadContent(Z,W)}}if(this.shouldTruncateTool(J))Z=this.truncateToolResultContent(Z);return Z===$.content?$:{...$,content:Z}}reindex($){let f=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!f)this.resetIndexes();for(let J=this.indexedMessageCount;J<$.length;J++){let Z=$[J];if(!Array.isArray(Z.content))continue;for(let Q=0;Q<Z.content.length;Q++){let W=Z.content[Q];if(W.type==="file")this.latestFullContentOwnerByPathCache.set(W.path,`file:${J}:${Q}`);else if(W.type==="tool_use"){let j=W.name.toLowerCase();if(this.toolNameByIdCache.set(W.id,j),this.isReadTool(j)){let X=this.extractLocatorsFromReadToolInput(W.input);if(X.length>0)this.readLocatorsByToolUseIdCache.set(W.id,X)}}else if(W.type==="tool_result"){let j=this.toolNameByIdCache.get(W.tool_use_id);if(!this.isReadTool(j)||W.is_error===!0)continue;let X=this.getReadLocators(W);for(let H of X)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(H),W.tool_use_id),this.isFullFileRead(H))this.latestFullContentOwnerByPathCache.set(H.path,W.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}addMissingToolResults($){let f=this.collectToolResultIds($),J=[],Z=new Map,Q=!1,W=()=>{if(Z.size===0)return;j(this.createMissingToolResultMessage(Z)),Z.clear(),Q=!0},j=(X)=>{let H=J.at(-1);if(this.shouldMergeUserAfterToolResults(H,X)){J[J.length-1]={...H,content:[...H.content,...this.contentBlocksForUserMerge(X.content)]},Q=!0;return}J.push(X)};for(let X of $){if(this.isToolResultOnlyMessage(X)){if(j(this.appendMissingToolResults(X,Z)),Z.size>0)Z.clear(),Q=!0;continue}if(Array.isArray(X.content)){let H=X.content.filter((A)=>A.type==="tool_result"),Y=X.content.filter((A)=>A.type!=="tool_result");if(H.length>0){let A=this.appendMissingToolResults({...X,role:"user",content:H},Z);if(j(A),Z.size>0)Z.clear();Q=!0}if(Y.length>0||H.length===0){if(H.length===0)W();let A=H.length>0?{...X,content:Y}:X;if(j(A),A.role==="assistant")this.trackMissingToolCalls(A,f,Z)}continue}W(),j(X)}return W(),Q?J:$}appendMissingToolResults($,f){if(f.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(f)]}}shouldMergeUserAfterToolResults($,f){return $?.role==="user"&&f.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(f.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let f=new Set;for(let J of $){if(!Array.isArray(J.content))continue;for(let Z of J.content)if(Z.type==="tool_result")f.add(Z.tool_use_id)}return f}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((f)=>f.type==="tool_result")}trackMissingToolCalls($,f,J){if(!Array.isArray($.content))return;for(let Z of $.content){if(Z.type!=="tool_use"||f.has(Z.id))continue;J.set(Z.id,Z.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([f,J])=>({type:"tool_result",tool_use_id:f,name:J,content:[{type:"text",text:this.formatMissingToolResultText(J)}],is_error:!0}))}formatMissingToolResultText($){return $?`${Zj} Tool: ${$}.`:Zj}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 f=$,J=this.readResultLocatorCache.get(f);if(J===void 0)J=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(f,J);if(J.length>0)return J;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let f=$,J=[],Z=this.extractLocatorFromReadRequest(f);if(Z)J.push(Z);if(Array.isArray(f.files))for(let Q of f.files){let W=this.extractLocatorFromReadRequest(Q);if(W)J.push(W)}if(Array.isArray(f.file_paths)){for(let Q of f.file_paths)if(typeof Q==="string"&&Q.length>0)J.push({path:Q,startLine:null,endLine:null})}return this.dedupeReadLocators(J)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);for(let f of $){if(f.type!=="text")continue;let J=this.tryParseReadLocators(f.text);if(J.length>0)return J}return[]}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let J=[];for(let Z of $){let Q=this.extractLocatorFromResultEntry(Z);if(Q)J.push(Q)}return this.dedupeReadLocators(J)}let f=this.extractLocatorFromResultEntry($);return f?[f]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let f=$,J=this.extractPath(f);if(!J)return;return{path:J,startLine:this.extractLineNumber(f.start_line),endLine:this.extractLineNumber(f.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let f=$,J=this.extractPath(f);if(J)return{path:J,startLine:this.extractLineNumber(f.start_line),endLine:this.extractLineNumber(f.end_line)};if(typeof f.query==="string"&&f.query.length>0)return this.parseReadQuery(f.query);return}extractPath($){let f=[$.path,$.file_path,$.filePath];for(let J of f)if(typeof J==="string"&&J.length>0)return J;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let f=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!f)return{path:$,startLine:null,endLine:null};return{path:f[1],startLine:Number(f[2]),endLine:f[3]==="EOF"?null:Number(f[3])}}dedupeReadLocators($){let f=new Map;for(let J of $)f.set(this.toReadLocatorKey(J),J);return Array.from(f.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,f){let J=this.latestFullContentOwnerByPathCache.get($.path);if(J&&J!==f)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==f}replaceOutdatedReadContent($,f){let J=new Set(f.map((W)=>this.toReadLocatorKey(W))),Z=new Set(f.map((W)=>W.path));if(typeof $==="string")return this.replaceOutdatedInString($,J)??C1;let Q=0;for(let W of $)if(W.type==="text")Q+=this.countOutdatedImageEntries(W.text,J);return $.map((W)=>{if(W.type==="file"){if(!Z.has(W.path))return W;return{...W,content:C1}}if(W.type==="image"){if(Q===0)return W;return Q-=1,{type:"text",text:C1}}if(W.type!=="text")return W;let j=this.replaceOutdatedInString(W.text,J);if(j===null)return{...W,text:C1};return j===W.text?W:{...W,text:j}})}countOutdatedImageEntries($,f){let J;try{J=JSON.parse($)}catch{return 0}let Z=Array.isArray(J)?J:[J],Q=0;for(let W of Z){if(!W||typeof W!=="object")continue;let j=W,X=this.extractLocatorFromResultEntry(j);if(!X)continue;if(!f.has(this.toReadLocatorKey(X)))continue;if(j.result==="Successfully read image"||j.content==="Successfully read image")Q+=1}return Q}replaceOutdatedInString($,f){let J;try{J=JSON.parse($)}catch{return null}let Z=Array.isArray(J)?J.map((Q)=>this.replaceOutdatedReadEntry(Q,f)):this.replaceOutdatedReadEntry(J,f);return JSON.stringify(Z)}replaceOutdatedReadEntry($,f){if(!$||typeof $!=="object")return $;let J=this.extractLocatorFromResultEntry($);if(!J||!f.has(this.toReadLocatorKey(J)))return $;let Z={...$};if(typeof Z.result==="string")Z.result=C1;else if(typeof Z.content==="string")Z.content=C1;else Z.result=C1;return Z}isReadTool($){return!!$&&RP.has($)}shouldTruncateTool($){return!!$&&this.targetToolNames.has($)}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((f)=>{if(f.type==="file"){let Z=this.truncateMiddle(f.content);return Z===f.content?f:{...f,content:Z}}if(f.type!=="text")return f;let J=this.truncateMiddle(f.text);return J===f.text?f:{...f,text:J}})}truncateMiddle($){return xZ($,this.maxToolResultChars,DP)}truncateToTotalTextBudget($){if(this.maxTotalTextBytes<=0)return $;let f=this.countMessageTextBytes($);if(f<=this.maxTotalTextBytes)return $;let J=$.map((Q)=>{if(!Array.isArray(Q.content))return Q;return{...Q,content:Q.content.map((W)=>zP(W))}}),Z=this.collectTruncationCandidates(J);for(let Q of Z){if(f<=this.maxTotalTextBytes)break;let W=Q.byteLength;if(W<=Jj)continue;let j=f-this.maxTotalTextBytes,X=Math.max(Jj,W-j),H=_P(Q.get(),X,LP);Q.set(H),f-=W-N0(H)}return J}countMessageTextBytes($){let f=0;for(let J of $){if(typeof J.content==="string"){f+=N0(J.content);continue}for(let Z of J.content)if(Z.type==="text")f+=N0(Z.text);else if(Z.type==="thinking")f+=N0(Z.thinking);else if(Z.type==="file")f+=N0(Z.content);else if(Z.type==="tool_result"){if(typeof Z.content==="string")f+=N0(Z.content);else for(let Q of Z.content)if(Q.type==="text")f+=N0(Q.text);else if(Q.type==="file")f+=N0(Q.content)}}return f}collectTruncationCandidates($){let f=[];for(let J of $){if(!Array.isArray(J.content))continue;for(let Z of J.content){if(Z.type!=="tool_result")continue;let Q=this.toolNameByIdCache.get(Z.tool_use_id);if(!this.shouldTruncateTool(Q))continue;if(typeof Z.content==="string"){f.push({byteLength:N0(Z.content),get:()=>Z.content,set:(W)=>{Z.content=W}});continue}for(let W of Z.content)if(W.type==="text")f.push({byteLength:N0(W.text),get:()=>W.text,set:(j)=>{W.text=j}});else if(W.type==="file")f.push({byteLength:N0(W.content),get:()=>W.content,set:(j)=>{W.content=j}})}}return f.sort((J,Z)=>Z.byteLength-J.byteLength)}}function N0($){return Buffer.byteLength($,"utf8")}function xZ($,f,J){if($.length<=f)return $;let Z=J($.length-f),Q=Math.max(0,Math.floor((f-Z.length)/2)),W=Math.max(0,$.length-Q*2),j=J(W),X=Math.max(0,Math.floor((f-j.length)/2)),H=$.slice(0,X),Y=X>0?$.slice(-X):"";return`${H}${j}${Y}`}function _P($,f,J){if(N0($)<=f)return $;let Z=0,Q=$.length,W=xZ($,0,J);while(Z<=Q){let j=Z+Q>>>1,X=xZ($,j,J);if(N0(X)<=f)W=X,Z=j+1;else Q=j-1}return W}function zP($){if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((f)=>({...f}))}}function gZ(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class vZ{messages=[];conversationId=gZ();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=gZ(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=gZ(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function Qj($){let{agentConfig:f}=$,J=OP(f),Z=TP(f),Q=$.hooks,W=NP(f.maxParallelToolCalls);return{sessionId:$.sessionId??f.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??f.systemPrompt,messageModelInfo:Z,model:$.model,modelOptions:J,tools:$.tools,hooks:Q,prepareTurn:$.prepareTurn,consumePendingUserMessage:f.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??f.logger,telemetry:$.telemetry??f.telemetry,initialMessages:$.initialMessages,completionPolicy:f.completionPolicy,maxIterations:f.maxIterations,toolExecution:W,toolPolicies:f.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:f.requestToolApproval}}function OP($){let f={};if($.thinking!==void 0)f.thinking=$.thinking;if($.reasoningEffort!==void 0)f.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)f.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)f.maxTokensPerTurn=$.maxTokensPerTurn;if($.apiTimeoutMs!==void 0)f.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(f).length>0?f:void 0}function TP($){let f=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:f}}function NP($){if($===void 0)return;return $>=2?"parallel":"sequential"}function MP(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function yP($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function uZ($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(uZ);let f={};for(let J of Object.keys($).sort())f[J]=uZ($[J]);return f}function qP($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(uZ($))}catch{return String($)}}function wP($,f,J,Z){if(f===$.lastToolName&&J===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=f,$.lastToolSignature=J,{softWarning:$.consecutiveIdenticalCount===Z.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=Z.hardThreshold}}var Wj={softThreshold:3,hardThreshold:5};class cZ{config;state=MP();constructor($){this.config={softThreshold:$?.softThreshold??Wj.softThreshold,hardThreshold:$?.hardThreshold??Wj.hardThreshold}}inspect($){let f=qP($.input),J=wP(this.state,$.name,f,this.config);if(J.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(J.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){yP(this.state)}}class dZ{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let f=this.options.maxConsecutiveMistakes,J=$.forceAtLimit&&f?f:this.consecutiveMistakes+1;this.consecutiveMistakes=J;let Z=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(Z),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:J,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!f||J<f)return{action:"continue"};let Q=await hP({iteration:$.iteration,consecutiveMistakes:J,maxConsecutiveMistakes:f,reason:$.reason,details:$.details},this.options.onLimitReached);if(Q.action==="continue"){let W=Q.guidance?.trim();if(W)this.options.appendRecoveryNotice(W,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:W}}return{action:"stop",reason:Q.reason?.trim()||void 0,message:SP({iteration:$.iteration,consecutiveMistakes:J,maxConsecutiveMistakes:f,reason:$.reason,details:$.details,stopReason:Q.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function SP($){let f=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],J=$.details?.trim();if(J)f.push(`Error: ${J}`);let Z=$.stopReason?.trim();if(Z)f.push(`Decision: ${Z}`);return f.push("Session state was preserved. Send a new prompt to resume from the latest state."),f.join(" ")}async function hP($,f){if(!f)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await f($)}catch(J){return{action:"stop",reason:J instanceof Error?J.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function CP($){let f=$.content.filter((J)=>J.type==="text");if(f.length===0)return;return f.map((J)=>J.text).join("")}function EP($){let f=$.content.filter((J)=>J.type==="reasoning");if(f.length===0)return;return{reasoning:f.map((J)=>J.text).join(""),redacted:f.some((J)=>J.redacted===!0)}}function bP($){return $.content.find((f)=>f.type==="tool-result")}function kP($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function IP($){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 lZ{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:$.metadata?.reason==="auto_compaction"?"auto_compaction":void 0,metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let f=[],J=CP($);if(J!==void 0)f.push({type:"content_end",contentType:"text",text:J});let Z=EP($);if(Z!==void 0)f.push({type:"content_end",contentType:"reasoning",reasoning:Z.reasoning});return f}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input}]}translateToolFinished($){let f=this.toolStartedAt.get($.toolCall.toolCallId),J=f===void 0?void 0:Date.now()-f;this.toolStartedAt.delete($.toolCall.toolCallId);let Z=bP($.message),Q=Z?.output,W=IP(Z);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:Q,error:W,durationMs:J}]}translateUsage($){let f=$.inputTokens-this.lastUsage.inputTokens,J=$.outputTokens-this.lastUsage.outputTokens,Z=$.cacheReadTokens-this.lastUsage.cacheReadTokens,Q=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,W=this.lastUsage.totalCost??0,X=($.totalCost??0)-W;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,f),outputTokens:Math.max(0,J),cacheReadTokens:Z===0?void 0:Math.max(0,Z),cacheWriteTokens:Q===0?void 0:Math.max(0,Q),cost:X===0?void 0:X,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let f={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:kP($.status),text:$.outputText,iterations:$.iterations,usage:f}]}}function lP($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function pP($){let J=(typeof $.content==="function"?await $.content():$.content).trim();return J.length>0?J:void 0}function rP($,f){let J=$.trim(),Z=f.map((Q)=>Q.trim()).filter(Boolean).join(`
132
132
 
133
- `);if(Z&&Q)return`${Z}
133
+ `);if(J&&Z)return`${J}
134
134
 
135
- ${Q}`;return Z||Q}function NF($){let J=$.filter((Z)=>Z!==void 0);if(J.length===0)return{};return{beforeRun:async(Z)=>{for(let Q of J){let W=await Q.beforeRun?.(Z);if(W?.stop)return W}return},afterRun:async(Z)=>{for(let Q of J)await Q.afterRun?.(Z)},beforeModel:async(Z)=>{let Q=Z.request,W;for(let f of J){let j=await f.beforeModel?.({...Z,request:Q});if(!j)continue;if(j.stop)return j;W={...W,...j,options:{...W?.options??{},...j.options??{}}},Q={...Q,...j.messages?{messages:j.messages}:{},...j.tools?{tools:j.tools}:{},...j.options?{options:{...Q.options??{},...j.options}}:{}}}return W},afterModel:async(Z)=>{for(let Q of J){let W=await Q.afterModel?.(Z);if(W?.stop)return W}return},beforeTool:async(Z)=>{let Q=Z.input,W;for(let f of J){let j=await f.beforeTool?.({...Z,input:Q});if(!j)continue;if(j.stop||j.skip)return j;if(W={...W,...j},Object.hasOwn(j,"input"))Q=j.input}return W},afterTool:async(Z)=>{let Q=Z.result,W;for(let f of J){let j=await f.afterTool?.({...Z,result:Q});if(!j)continue;if(j.stop)return j;if(W={...W,...j},j.result)Q=j.result}return W},onEvent:async(Z)=>{for(let Q of J)await Q.onEvent?.(Z)}}}class i${config;agentId;parentAgentId;logger;telemetry;conversation;mistakeTracker;loopTracker;loopDetectionDisabled;messageBuilder;contributionRegistry;extensionsInitialized=!1;listeners=new Set;createAgentRuntimeImpl;activeRunId=null;running=!1;abortRequested=!1;abortReason;activeRuntime=null;activeRunPromise=null;eventAdapter=new hQ;shutdownCalled=!1;currentRunToolCalls=[];currentRunUsage={inputTokens:0,outputTokens:0};toolStartedAt=new Map;toolInputs=new Map;currentTurnSuccessfulTools=0;currentTurnFailedTools=0;currentTurnFailureDetails=[];activeTrackerWork=Promise.resolve();trackerAbortInFlight=!1;constructor($,J={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=J.logger??$.logger,this.telemetry=J.telemetry??$.telemetry,this.createAgentRuntimeImpl=J.createAgentRuntimeImpl??LF,this.conversation=new wQ($.initialMessages),this.messageBuilder=new qQ,this.contributionRegistry=zF({extensions:$.extensions?[...$.extensions]:[],setupContext:{session:$.extensionContext?.session,client:$.extensionContext?.client,user:$.extensionContext?.user,workspaceInfo:$.extensionContext?.workspace,automation:$.extensionContext?.automation,logger:$.extensionContext?.logger??this.logger,telemetry:$.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let Z=$.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new EQ({maxConsecutiveMistakes:Z,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(f)=>this.emitLegacyEvent(f),log:(f,j,X)=>MF(this.logger,f,j,X),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(f,j)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:f}]})}});let Q=$.execution?.loopDetection;this.loopDetectionDisabled=Q===!1;let W=Q===!1||Q===void 0?void 0:Q;this.loopTracker=new CQ(W)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools($){if($.length===0)return;let J=new Set(this.config.tools.map((Q)=>Q.name)),Z=[...this.config.tools];for(let Q of $)if(!J.has(Q.name))Z.push(Q),J.add(Q.name);this.config={...this.config,tools:Z}}updateConnection($){let J={...this.config};if($.providerId!==void 0)J.providerId=$.providerId;if($.modelId!==void 0)J.modelId=$.modelId;if($.apiKey!==void 0)J.apiKey=$.apiKey;if($.baseUrl!==void 0)J.baseUrl=$.baseUrl;if($.headers!==void 0)J.headers=$.headers;if($.providerConfig!==void 0)J.providerConfig=$.providerConfig;if($.reasoningEffort!==void 0)J.reasoningEffort=$.reasoningEffort;if($.thinking!==void 0)J.thinking=$.thinking;if($.thinkingBudgetTokens!==void 0)J.thinkingBudgetTokens=$.thinkingBudgetTokens;this.config=J}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let J=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=J,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(J)}async shutdown($,J){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run($,J,Z){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:J,userFiles:Z,isContinue:!1})}continue($,J,Z){return this.executeRun({userMessage:$,userImages:J,userFiles:Z,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let J of this.contributionRegistry.getRegisteredRules()){let Z=await _F(J);if(Z)$.push(Z)}return TF(this.config.systemPrompt,$)}executeRun($){let J;return J=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===J)this.activeRunPromise=null}),this.activeRunPromise=J,J}async executeRunInternal($){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let J=new Date,Z=$.userMessage;if(Z!==void 0){let U=await yF(Z,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:U})}let Q=await this.composeSystemPrompt(),W=kf(this.config,this.logger,this.telemetry),f=this.contributionRegistry.getRegisteredTools(),j=new Map;for(let U of f)j.set(U.name,U);for(let U of this.config.tools)j.set(U.name,U);let X=this.conversation.getConversationId(),H=cf(this.config),Y=Array.from(j.values()),A=T6(this.conversation.getMessages()),V=gf({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:X,parentAgentId:this.parentAgentId,model:W,logger:this.logger,telemetry:this.telemetry,tools:Y,toolContextMetadata:{modelSupportsImages:H?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[Qf]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(H,Y),initialMessages:A,systemPrompt:Q}),B=this.createAgentRuntimeImpl(V);if(this.activeRuntime=B,this.abortRequested)B.abort(this.abortReason);let K=B.subscribe((U)=>{this.handleRuntimeEvent(U)}),G,D;try{if($.isContinue)G=await B.continue(void 0);else G=await B.run("")}catch(U){D=U instanceof Error?U:Error(String(U))}finally{K();try{await this.activeTrackerWork}catch(U){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:U})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(G&&G.messages.length>0){let U=T2(G.messages);this.conversation.replaceMessages(U)}let F=new Date;try{return this.buildLegacyResult({runResult:G,thrownError:D,startedAt:J,endedAt:F})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize()}catch($){if(this.config.hookErrorMode==="throw")throw $;this.emitLegacyEvent({type:"error",error:$ instanceof Error?$:Error(String($)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let $=NF([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((J)=>J.hooks)]);return{...$,beforeModel:async(J)=>{let Z=await $.beforeModel?.(J);if(Z?.stop)return Z;let Q=Z?.messages??J.request.messages,W=await this.prepareMessagesForModelRequest(Q);return{...Z,messages:W}}}}createRuntimePrepareTurn($,J){let Z=this.config.prepareTurn;if(!Z)return;return async(Q)=>{let W=T2(Q.messages),f=await this.prepareProviderMessagesForApi(W),j=await Z({agentId:Q.agentId,conversationId:Q.conversationId??this.conversation.getConversationId(),parentAgentId:Q.parentAgentId??null,iteration:Q.iteration,messages:W,apiMessages:f,abortSignal:Q.signal??new AbortController().signal,systemPrompt:Q.systemPrompt??"",tools:J,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:Q.emitStatusNotice});if(!j)return;return{...j.messages?{messages:T6(j.messages)}:{},...j.systemPrompt!==void 0?{systemPrompt:j.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let J=await this.prepareProviderMessagesForApi(N6($));return T6(J)}async prepareProviderMessagesForApi($){let J=$,Z=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let Q of Z)J=await Q.build(J);return this.messageBuilder.buildForApi(J)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let J=this.toolStartedAt.get($.toolCall.toolCallId),Z=new Date,Q=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let W=$.message.content.find((H)=>H.type==="tool-result"),f=W?.type==="tool-result"&&W.isError===!0,j=f?OF(W?.type==="tool-result"?W.output:void 0):void 0,X={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:Q,output:W?.type==="tool-result"?W.output:void 0,error:j,durationMs:J===void 0?0:Z.getTime()-J.getTime(),startedAt:J??Z,endedAt:Z};if(this.currentRunToolCalls.push(X),f){if(this.currentTurnFailedTools+=1,j)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${j}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let J=this.currentTurnFailedTools,Z=this.currentTurnSuccessfulTools;if(J>0&&Z===0){let Q=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${J} tool call(s) failed${Q?`: ${Q}`:""}`})}else if(Z>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let J of this.eventAdapter.translate($))this.emitLegacyEvent(J)}syncConversationFromRuntimeMessage($,J){if($.length>0){this.conversation.replaceMessages(T2($));return}if(J.length===0)return;let Z=new Set(this.conversation.getMessages().map((W)=>W.id).filter((W)=>typeof W==="string")),Q=T2(J).filter((W)=>!W.id||!Z.has(W.id));if(Q.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...Q])}emitLegacyEvent($){for(let J of this.listeners)try{J($)}catch(Z){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Z})}}inspectLoopForToolCall($,J,Z){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let Q=this.loopTracker.inspect({name:$,input:J});if(Q.kind==="ok")return;if(Q.kind==="soft"){if(Q.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:Q.message}]});return}this.enqueueMistakeRecord({iteration:Z,reason:"tool_execution_failed",forceAtLimit:!0,details:Q.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let J=await this.mistakeTracker.record($);if(J.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:J.message}]}),this.activeRuntime?.abort(J.reason??J.message)})}buildLegacyResult($){let{runResult:J,thrownError:Z,startedAt:Q,endedAt:W}=$,f=W.getTime()-Q.getTime(),j=Z?"error":qF(J),X=J?.outputText||(J?.status==="failed"?J.error?.message:void 0)||"",H=J?{inputTokens:J.usage.inputTokens,outputTokens:J.usage.outputTokens,cacheReadTokens:J.usage.cacheReadTokens>0?J.usage.cacheReadTokens:void 0,cacheWriteTokens:J.usage.cacheWriteTokens>0?J.usage.cacheWriteTokens:void 0,totalCost:J.usage.totalCost}:this.currentRunUsage,Y=J?T2(J.messages):this.conversation.getMessages(),A=cf(this.config);if(Z)throw Z;return{text:X,usage:H,messages:Y,toolCalls:this.currentRunToolCalls,iterations:J?.iterations??0,finishReason:j,model:{id:this.config.modelId,provider:this.config.providerId,info:A},startedAt:Q,endedAt:W,durationMs:f}}}function MF($,J,Z,Q){if(!$)return;if(J==="debug"){$.debug(Z,Q);return}if(J==="error"&&$.error){$.error(Z,Q);return}let W=J==="warn"?"warn":J==="error"?"error":"info";$.log(Z,{...Q,severity:W})}function qF($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function yF($,J,Z,Q){let{buildInitialUserContent:W}=await Promise.resolve().then(() => uf);return W($,J,Z,Q)}function cf($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let J=NQ($);if(J?.[$.modelId])return J[$.modelId];return}import{buildClineSystemPrompt as df}from"@cline/shared";function lf($,J){let Z=$.trim();if(J.providerId.toLowerCase()!=="cline")return Z;return df({ide:J.clineIdeName?.trim()||"Terminal",workspaceRoot:J.cwd?.trim()||"/",providerId:J.providerId,rules:`# Team Teammate Role
136
- ${Z}`,platform:J.clinePlatform,metadata:J.workspaceMetadata})}function pf($,J){let Z=$.trim();if(J.providerId.toLowerCase()!=="cline")return Z;return df({ide:J.clineIdeName||"Terminal",workspaceRoot:J.cwd?.trim()||"/",providerId:J.providerId,overridePrompt:Z,metadata:J.workspaceMetadata,platform:J.clinePlatform})}function N2($){let J={...$};return{getRuntimeConfig:()=>J,getConnectionConfig:()=>({providerId:J.providerId,modelId:J.modelId,apiKey:J.apiKey,baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking}),updateConnectionDefaults:(Z)=>{J={...J,...Z}}}}function M1($){let J=$.configProvider.getRuntimeConfig(),Z=$.kind==="teammate"?lf($.prompt,J):pf($.prompt,J);return{...$.configProvider.getConnectionConfig(),systemPrompt:Z,tools:$.tools,maxIterations:$.maxIterations??J.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:J.hooks,extensions:J.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:J.logger,role:$.role}}function M2($){let J=M1($),Z=new i$(J);if(J.onEvent)Z.subscribeEvents(J.onEvent);return Z}var CF=bQ.object({systemPrompt:bQ.string().describe("System prompt defining the sub-agent's behavior"),task:bQ.string().describe("Task for the sub-agent to complete")});function n$($){return wF({name:"spawn_agent",description:"Spawn a sub-agent with a custom system prompt for specialized tasks. Use when delegating work that benefits from focused expertise.",inputSchema:SF(CF),execute:async(J,Z)=>{let Q=$.createSubAgentTools?await $.createSubAgentTools(J,Z):$.subAgentTools??[],W=M2({kind:"subagent",prompt:J.systemPrompt,configProvider:$.configProvider,tools:Q,maxIterations:$.defaultMaxIterations,parentAgentId:Z.agentId,abortSignal:Z.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),f=W.getAgentId(),j=W.getConversationId(),X=Z.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:f,conversationId:j,parentAgentId:X,input:J})}catch{}try{let H=await W.run(J.task),Y={text:H.text,iterations:H.iterations,finishReason:H.finishReason,usage:{inputTokens:H.usage.inputTokens,outputTokens:H.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:f,conversationId:j,parentAgentId:X,input:J,result:Y,agentResult:H})}catch{}return Y}catch(H){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:f,conversationId:j,parentAgentId:X,input:J,error:H instanceof Error?H:Error(String(H))})}catch{}throw H}},timeoutMs:300000,retryable:!1})}import{createTool as f0,TEAM_AWAIT_TIMEOUT_MS as EF,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as hF,TEAM_RUN_TEXT_PREVIEW_LIMIT as bF,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as kF,TeamAttachOutcomeFragmentInputSchema as rf,TeamAwaitRunsInputSchema as nf,TeamBroadcastInputSchema as af,TeamBroadcastToolResultSchema as IF,TeamCancelRunInputSchema as tf,TeamCancelRunToolResultSchema as xF,TeamCleanupInputSchema as sf,TeamCleanupToolResultSchema as mF,TeamCreateOutcomeInputSchema as of,TeamCreateOutcomeToolResultSchema as gF,TeamFinalizeOutcomeInputSchema as ef,TeamFinalizeOutcomeToolResultSchema as vF,TeamListOutcomesInputSchema as $j,TeamListRunsInputSchema as Jj,TeamMailboxMessageToolResultSchema as uF,TeamMissionLogInputSchema as Zj,TeamMissionLogToolResultSchema as cF,TeamOutcomeFragmentToolResultSchema as Qj,TeamOutcomeToolResultSchema as dF,TeamReadMailboxInputSchema as Wj,TeamReviewOutcomeFragmentInputSchema as fj,TeamRunTaskInputSchema as jj,TeamRunTaskToolResultSchema as kQ,TeamRunToolSummarySchema as IQ,TeamSendMessageInputSchema as Xj,TeamSendMessageToolResultSchema as lF,TeamShutdownTeammateInputSchema as Hj,TeamSimpleAgentStatusToolResultSchema as Yj,TeamSpawnTeammateInputSchema as Aj,TeamStatusInputSchema as Vj,TeamStatusToolResultSchema as pF,TeamTaskInputSchema as Bj,TeamTaskToolResultSchema as XJ,validateWithZod as h,zodToJsonSchema as j0}from"@cline/shared";function Kj($,J){let Z=$.replace(/\s+/g," ").trim();if(Z.length<=J)return Z;return`${Z.slice(0,Math.max(0,J-3)).trimEnd()}...`}function q1($,J){if($===void 0)throw Error(`Missing required field: ${J}`);return $}function rF($){let J=$.result;if(!J)return;return{textPreview:Kj(J.text,bF),iterations:J.iterations,finishReason:J.finishReason,durationMs:J.durationMs,usage:{inputTokens:J.usage.inputTokens,outputTokens:J.usage.outputTokens,cacheReadTokens:J.usage.cacheReadTokens,cacheWriteTokens:J.usage.cacheWriteTokens,totalCost:J.usage.totalCost}}}function M6($){return $?.toISOString()}function xQ($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:Kj($.message,hF),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:M6($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:M6($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:M6($.heartbeatAt),lastProgressAt:M6($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:rF($)}}function iF($){if($.status==="failed")throw Error(`Run "${$.id}" failed${$.error?`: ${$.error}`:""}`);if($.status==="cancelled")throw Error(`Run "${$.id}" was cancelled${$.error?`: ${$.error}`:""}`);if($.status==="interrupted")throw Error(`Run "${$.id}" was interrupted${$.error?`: ${$.error}`:""}`)}var q2=["team_spawn_teammate","team_shutdown_teammate","team_status","team_task","team_run_task","team_cancel_run","team_list_runs","team_await_runs","team_send_message","team_broadcast","team_read_mailbox","team_mission_log","team_cleanup","team_create_outcome","team_attach_outcome_fragment","team_review_outcome_fragment","team_finalize_outcome","team_list_outcomes"];function Gj($){let J=[];if($.createBaseTools)J.push(...$.createBaseTools());J.push(...y1({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:M1({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:J,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function y2($){let J=$.leadAgentId??"lead",Z=$.restoredFromPersistence===!0,Q=y1({runtime:$.runtime,requesterId:J,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),W=[];for(let f of $.restoredTeammates??[]){if($.runtime.isTeammateActive(f.agentId))continue;Gj({runtime:$.runtime,requesterId:J,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:f}),W.push(f.agentId)}return{tools:Q,restoredFromPersistence:Z,restoredTeammates:W}}function y1($){let J=$.allowSpawn??!0,Z=$.includeSpawnTool??!0,Q=$.includeManagementTools??!0,W=[];if(Z)W.push(f0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:j0(Aj),execute:async(j)=>{let X=h(Aj,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!J)throw Error("Spawning teammates is disabled in this context.");let H={agentId:X.agentId,rolePrompt:X.rolePrompt};if(Gj({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:H}),!Q)$.onLeadToolsUnlocked?.(y1({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return h(Yj,{agentId:X.agentId,status:"spawned"})}}));if(!Q)return W;W.push(f0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:j0(Hj),execute:async(j)=>{let X=h(Hj,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(X.agentId,X.reason),h(Yj,{agentId:X.agentId,status:"stopped"})}})),W.push(f0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:j0(Vj),execute:async(j)=>{return h(Vj,j),h(pF,$.runtime.getSnapshot())}})),W.push(f0({name:"team_task",description:"Manage shared team tasks with action-specific payloads. create requires title and description, with optional dependsOn and assignee. list accepts optional status, assignee. claim requires taskId. complete requires taskId and summary. block requires taskId and reason. Do not include fields from other actions.",inputSchema:j0(Bj),execute:async(j)=>{let X=h(Bj,j);switch(X.action){case"create":{let H=new Set(kF.create??[]),Y=Object.entries(j).filter(([V,B])=>H.has(V)&&B!=null).map(([V])=>V),A=$.runtime.createTask({title:q1(X.title,"title"),description:q1(X.description,"description"),dependsOn:X.dependsOn,assignee:X.assignee,createdBy:$.requesterId});return h(XJ,{action:"create",taskId:A.id,status:A.status,...Y.length>0?{ignoredFields:Y,note:`Ignored fields for action=create: ${Y.join(", ")}`}:{}})}case"list":return h(XJ,{action:"list",tasks:$.runtime.listTaskItems({status:X.status,assignee:X.assignee})});case"claim":{let H=$.runtime.claimTask(q1(X.taskId,"taskId"),$.requesterId);return h(XJ,{action:"claim",taskId:H.id,status:H.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_task with action=complete when done."})}case"complete":{let H=$.runtime.completeTask(q1(X.taskId,"taskId"),$.requesterId,q1(X.summary,"summary"));return h(XJ,{action:"complete",taskId:H.id,status:H.status})}case"block":{let H=$.runtime.blockTask(q1(X.taskId,"taskId"),$.requesterId,q1(X.reason,"reason"));return h(XJ,{action:"block",taskId:H.id,status:H.status})}}}}));let f=new Map;return W.push(f0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:j0(jj),execute:async(j)=>{let X=h(jj,j);if(X.runMode==="async"){let A=$.runtime.startTeammateRun(X.agentId,X.task,{taskId:X.taskId||void 0,fromAgentId:$.requesterId,continueConversation:X.continueConversation||void 0});return h(kQ,{agentId:X.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${X.agentId} and queued as ${A.id}.`,runId:A.id})}let H=f.get(X.agentId);if(H){let A=await H;return h(kQ,{...A,status:"joined",deduped:!0,message:`Task for ${X.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let Y=$.runtime.routeToTeammate(X.agentId,X.task,{taskId:X.taskId||void 0,fromAgentId:$.requesterId,continueConversation:X.continueConversation||void 0}).then((A)=>h(kQ,{agentId:X.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${X.agentId} and completed in sync mode.`,text:A.text,iterations:A.iterations})).finally(()=>{f.delete(X.agentId)});return f.set(X.agentId,Y),await Y}})),W.push(f0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:j0(tf),execute:async(j)=>{let X=h(tf,j),H=$.runtime.cancelRun(X.runId,X.reason);return h(xF,{runId:H.id,status:H.status})}})),W.push(f0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:j0(Jj),execute:async(j)=>h(IQ.array(),$.runtime.listRuns(h(Jj,j)).map(xQ))})),W.push(f0({name:"team_await_runs",description:"Wait for async teammate runs. Provide runId to wait for one run, or omit it to wait for all active async runs. Uses a long timeout for legitimate teammate work.",inputSchema:j0(nf),timeoutMs:EF,execute:async(j)=>{let X=h(nf,j);if(X.runId){let A=await $.runtime.awaitRun(X.runId);return iF(A),h(IQ,xQ(A))}let H=await $.runtime.awaitAllRuns(),Y=H.filter((A)=>["failed","cancelled","interrupted"].includes(A.status));if(Y.length>0){let A=Y.map((V)=>`${V.id}:${V.status}${V.error?`(${V.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${A}`)}return h(IQ.array(),H.map(xQ))}})),W.push(f0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:j0(Xj),execute:async(j)=>{let X=h(Xj,j),H=$.runtime.sendMessage($.requesterId,X.toAgentId,X.subject,X.body,X.taskId??void 0);return h(lF,{id:H.id,toAgentId:H.toAgentId})}})),W.push(f0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:j0(af),execute:async(j)=>{let X=h(af,j),H=$.runtime.broadcast($.requesterId,X.subject,X.body,{taskId:X.taskId??void 0});return h(IF,{delivered:H.length})}})),W.push(f0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:j0(Wj),execute:async(j)=>{let X=h(Wj,j);return h(uF.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:X.unreadOnly,markRead:!0}))}})),W.push(f0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:j0(Zj),execute:async(j)=>{let X=h(Zj,j),H=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:X.taskId||void 0,kind:X.kind,summary:X.summary,evidence:X.evidence?.length?X.evidence:void 0,nextAction:X.nextAction||void 0});return h(cF,{id:H.id})}})),W.push(f0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:j0(sf),execute:async(j)=>{if(h(sf,j),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),h(mF,{status:"cleaned"})}})),W.push(f0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:j0(of),execute:async(j)=>{let X=h(of,j),H=$.runtime.createOutcome({title:X.title,requiredSections:X.requiredSections,createdBy:$.requesterId});return h(gF,{outcomeId:H.id,status:H.status,requiredSections:H.requiredSections})}})),W.push(f0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:j0(rf),execute:async(j)=>{let X=h(rf,j),H=$.runtime.attachOutcomeFragment({outcomeId:X.outcomeId,section:X.section,sourceAgentId:$.requesterId,sourceRunId:X.sourceRunId||void 0,content:X.content});return h(Qj,{fragmentId:H.id,status:H.status})}})),W.push(f0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:j0(fj),execute:async(j)=>{let X=h(fj,j),H=$.runtime.reviewOutcomeFragment({fragmentId:X.fragmentId,reviewedBy:$.requesterId,approved:X.approved});return h(Qj,{fragmentId:H.id,status:H.status})}})),W.push(f0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:j0(ef),execute:async(j)=>{let X=h(ef,j),H=$.runtime.finalizeOutcome(X.outcomeId);return h(vF,{outcomeId:H.id,status:H.status})}})),W.push(f0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:j0($j),execute:async(j)=>{return h($j,j),h(dF.array(),$.runtime.listOutcomes())}})),W}function q6($){return{...$,tasks:$.tasks.map((J)=>({...J,createdAt:new Date(J.createdAt),updatedAt:new Date(J.updatedAt)})),mailbox:$.mailbox.map((J)=>({...J,sentAt:new Date(J.sentAt),readAt:J.readAt?new Date(J.readAt):void 0})),missionLog:$.missionLog.map((J)=>({...J,ts:new Date(J.ts)})),runs:($.runs??[]).map((J)=>({...J,startedAt:new Date(J.startedAt),endedAt:J.endedAt?new Date(J.endedAt):void 0,nextAttemptAt:J.nextAttemptAt?new Date(J.nextAttemptAt):void 0,heartbeatAt:J.heartbeatAt?new Date(J.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),finalizedAt:J.finalizedAt?new Date(J.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),reviewedAt:J.reviewedAt?new Date(J.reviewedAt):void 0}))}}function Fj($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var nF=[{id:"read_files",description:"Read the full content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided.",headlessToolNames:["read_files"]},{id:"search_codebase",description:"Perform regex pattern searches across the codebase for code patterns, definitions, imports, and other text matches.",headlessToolNames:["search_codebase"]},{id:"run_commands",description:"Run shell commands from the root of the workspace for listing files, checking git status, builds, tests, and similar tasks.",headlessToolNames:["run_commands"]},{id:"editor",description:"Make controlled filesystem edits on text files with create, replace, and insert operations.",headlessToolNames:["editor"]},{id:"fetch_web_content",description:"Fetch URL content and analyze it with a prompt describing what to extract.",headlessToolNames:["fetch_web_content"]},{id:"skills",description:"Execute a configured skill within the main conversation when a matching skill exists for the task.",headlessToolNames:["skills"]},{id:"ask_question",description:"Ask the user a single clarifying question with 2-5 selectable options.",headlessToolNames:["ask_question"]},{id:"spawn_agent",description:n$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...q2]}],aF={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function tF($){return $==="plan"||$==="yolo"?$:"act"}function Rj($){let J=tF($.mode),Z=k0[N$({mode:J})],Q=_2($.providerId??"",$.modelId??"",J,O2);return{mode:J,flags:{...Z,...Q,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function Uj($,J){if(J.disabledToolIds?.has($))return!1;let{flags:Z}=Rj(J);if($==="spawn_agent")return Z.enableSpawnAgent===!0;if($==="teams")return Z.enableAgentTeams===!0;if($==="editor")return Z.enableEditor===!0||Z.enableApplyPatch===!0;let Q=aF[$];return Q?Z[Q]===!0:!1}function sF($,J){if($.id==="editor"){let{flags:Z}=Rj(J),Q=Z.enableApplyPatch===!0&&Z.enableEditor!==!0;return{...$,defaultEnabled:Uj($.id,J),headlessToolNames:[Q?"apply_patch":"editor"]}}return{...$,defaultEnabled:Uj($.id,J)}}function w1($={}){return nF.map((J)=>sF(J,$))}function y6($={}){return w1($).filter((J)=>J.defaultEnabled).map((J)=>J.id)}function w6($){if(!$.enabled)return new Set;let J=w1($.availabilityContext),Z=new Set(J.map((Q)=>Q.id));if(!$.allowlist||$.allowlist.length===0)return new Set(J.filter((Q)=>Q.defaultEnabled).map((Q)=>Q.id));for(let Q of $.allowlist)if(!Z.has(Q))throw Error(`Unknown tool "${Q}". Available tools: ${J.map((W)=>W.id).join(", ")}`);return new Set($.allowlist)}function HJ($,J={}){return w1(J).filter((Z)=>$.has(Z.id)).flatMap((Z)=>Z.headlessToolNames)}function S6($,J={}){return HJ($,J)}function S1($={}){let{executorOptions:J={},executors:Z,...Q}=$,W={...z2(J),...Z??{}};return p$({...Q,executors:W})}import{mkdirSync as QU,writeFileSync as WU}from"node:fs";import{dirname as fU}from"node:path";import{normalizeUserInput as jU}from"@cline/shared";import{nanoid as XU}from"nanoid";var Pj={};w(Pj,{sanitizeSessionToken:()=>C1,parseTeamTaskSubSessionId:()=>S2,parseSubSessionId:()=>AJ,makeTeamTaskSubSessionId:()=>YJ,makeSubSessionId:()=>w2,deriveSubsessionStatus:()=>VJ});import{nanoid as $U}from"nanoid";function C1($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function w2($,J){let Z=C1($),Q=C1(J),W=`${Z}__${Q}`;return W.length>180?W.slice(0,180):W}function YJ($,J){let Z=C1($),Q=C1(J);return`${Z}__teamtask__${Q}__${$U(6)}`}function S2($){let Z=$.indexOf("__teamtask__");if(Z<=0)return null;let Q=$.slice(0,Z),W=$.slice(Z+12),f=W.lastIndexOf("__");if(f<=0)return null;let j=W.slice(0,f),X=W.slice(f+2);if(!Q||!j||!X)return null;return{rootSessionId:Q,agentId:j,teamTaskId:X}}function AJ($){if(S2($))return null;let J="__",Z=$.indexOf(J);if(Z<=0)return null;let Q=$.slice(0,Z),W=$.slice(Z+J.length);if(!Q||!W)return null;return{rootSessionId:Q,agentId:W}}function VJ($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let J=String($.reason??"").toLowerCase();if(J.includes("cancel")||J.includes("abort")||J.includes("interrupt"))return"cancelled";if(J.includes("fail")||J.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as a}from"zod";var Oj={};w(Oj,{isTerminalSessionStatus:()=>zj,isNonTerminalSessionStatus:()=>Q0,SessionSource:()=>G0,SESSION_STATUSES:()=>BJ,NON_TERMINAL_SESSION_STATUSES:()=>Lj});import{SESSION_STATUS_VALUES as JU}from"@cline/shared";var BJ=JU,Lj=["idle","running","pending"];function zj($){return!Lj.includes($)}function Q0($){return!zj($)}var G0={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 ZU=a.enum(BJ),M0=a.object({version:a.literal(1),session_id:a.string().min(1),source:a.string().min(1),pid:a.number().int(),started_at:a.string().min(1),ended_at:a.string().min(1).optional(),exit_code:a.number().int().nullable().optional(),status:ZU,interactive:a.boolean(),provider:a.string().min(1),model:a.string().min(1),cwd:a.string().min(1),workspace_root:a.string().min(1),team_name:a.string().min(1).optional(),enable_tools:a.boolean(),enable_spawn:a.boolean(),enable_teams:a.boolean(),prompt:a.string().optional(),metadata:a.record(a.string(),a.unknown()).optional(),messages_path:a.string().min(1).optional()});function _j($){if(!$)return!1;return Object.values($).some((J)=>typeof J==="function")}function gQ($,J){let Z=[...$??[],...J??[]];if(Z.length===0)return;let Q=[],W=new Set;for(let f of Z){if(W.has(f.name))continue;W.add(f.name),Q.push(f)}return Q}function Tj($){return JSON.stringify($,(J,Z)=>{if(Z instanceof Error)return{name:Z.name,message:Z.message,stack:Z.stack};return Z})}function M$($){return typeof $==="string"&&$.trim()?$.trim():void 0}function mQ($,J){let Z={...$};Z.id=M$(Z.id)??XU();let Q=Z.modelInfo&&typeof Z.modelInfo==="object"?{...Z.modelInfo}:void 0,W={id:M$(Q?.id)??M$(Z.modelId)??M$(J?.id),provider:M$(Q?.provider)??M$(Z.providerId)??M$(J?.provider),family:M$(Q?.family)??M$(J?.family)};if(delete Z.providerId,delete Z.modelId,W.id&&W.provider)Z.modelInfo={id:W.id,provider:W.provider,...W.family?{family:W.family}:{}};else delete Z.modelInfo;return Z}function C6($){return $.map((J)=>mQ(J))}function E6($,J,Z=[]){let Q=$.map((H,Y)=>{let A=Z[Y],B=A?.role===H.role&&JSON.stringify(A.content)===JSON.stringify(H.content)?{...A,...H}:{...H};return mQ(B)}),W=Z.length,f=[];for(let H=W;H<Q.length;H+=1)if(Q[H]?.role==="assistant")f.push(H);if(f.length===0){let H=[...Q].reverse().findIndex((Y)=>Y.role==="assistant");if(H===-1)return Q;f.push(Q.length-1-H)}let j=f[f.length-1],X=f.some((H)=>Q[H]?.metrics);for(let H of f){let Y=Q[H],A=Y.metrics;if(!A&&H===j&&!X){let V=J.usage;A={inputTokens:V.inputTokens,outputTokens:V.outputTokens,cacheReadTokens:V.cacheReadTokens??0,cacheWriteTokens:V.cacheWriteTokens??0,cost:V.totalCost}}Q[H]={...mQ(Y,{id:J.model.id,provider:J.model.provider,family:J.model.info?.family}),...A?{metrics:A}:{},ts:Y.ts??J.endedAt.getTime()}}return Q}function KJ($){return{sessionId:$.sessionId,source:$.source,pid:$.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??void 0,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:$.parentSessionId??void 0,parentAgentId:$.parentAgentId??void 0,agentId:$.agentId??void 0,conversationId:$.conversationId??void 0,isSubagent:$.isSubagent,prompt:$.prompt??void 0,metadata:$.metadata??void 0,messagesPath:$.messagesPath??void 0,updatedAt:$.updatedAt}}var HU=120;function E1($){let J=$?.trim();return J?J.slice(0,HU):void 0}function vQ($){let J=jU($??"").trim();if(!J)return;return E1(J.split(`
137
- `)[0]?.trim())}function a$($){if(!$)return;let J={...$},Z=E1(typeof J.title==="string"?J.title:void 0);if(Z)J.title=Z;else delete J.title;return Object.keys(J).length>0?J:void 0}function GJ($){let J=a$($.metadata)??{},Z=$.title!==void 0?E1($.title):vQ($.prompt);if(Z)J.title=Z;return Object.keys(J).length>0?J:void 0}function uQ($){let J=S2($);if(J)return{agent:"teammate",sessionId:J.rootSessionId,taskType:"team"};let Z=AJ($);if(Z)return{agent:"subagent",sessionId:Z.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function cQ($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:C6($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function Nj($,J,Z){QU(fU($),{recursive:!0}),WU($,`${JSON.stringify(cQ({updatedAt:J,context:Z,messages:[]}),null,2)}
138
- `,"utf8")}function Mj($,J){return M0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:J?.endedAt??$.endedAt??void 0,exit_code:J?.exitCode??$.exitCode??void 0,status:J?.status??$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName??void 0,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt??void 0,metadata:J?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function qj($,J,Z){let Q=0;while(!0){let W=await $();if(W===void 0)return{updated:!1};let f=await J(W);if(typeof f==="object"&&f!==null&&"updated"in f&&f.updated===!1){if(Q+=1,Q>=Z)return f;continue}return f}}L0();var yj={};w(yj,{summarizeUsageFromMessages:()=>E2,sumUsageTotals:()=>FJ,getCurrentContextSize:()=>dQ,createInitialAccumulatedUsage:()=>B0,accumulateUsageTotals:()=>X0});function B0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function X0($,J){return{inputTokens:$.inputTokens+Math.max(0,J.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,J.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,J.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,J.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,J.totalCost??0)}}function FJ($){let J=B0();for(let Z of $)J=X0(J,Z);return J}function C2($){return typeof $==="number"&&Number.isFinite($)?$:0}function E2($){let J=B0();for(let Z of $){let Q=Z.metrics;if(!Q)continue;J=X0(J,{inputTokens:C2(Q.inputTokens),outputTokens:C2(Q.outputTokens),cacheReadTokens:C2(Q.cacheReadTokens),cacheWriteTokens:C2(Q.cacheWriteTokens),totalCost:C2(Q.cost)})}return J}function dQ($){for(let J=$.length-1;J>=0;J-=1){let Z=$[J];if(Z?.role!=="assistant")continue;let Q=C2(Z.metrics?.inputTokens);return Q>0?Q:void 0}return}function YU($){if(!$||typeof $!=="object")return;let J=$,Z=J.skill??J.skill_name??J.skillName;if(typeof Z!=="string")return;let Q=Z.trim();return Q.length>0?Q:void 0}function lQ($){if(!$||typeof $!=="object")return{};let J=$;return{agentId:typeof J.agentId==="string"?J.agentId:void 0,conversationId:typeof J.conversationId==="string"?J.conversationId:void 0,parentAgentId:typeof J.parentAgentId==="string"?J.parentAgentId:void 0}}function q$($){let J=$.agentId?.trim();if(!J)return;let Z=$.parentAgentId?.trim()||void 0,Q=$.teamRole,W="root";if(Q==="teammate")W="team_teammate";else if(Q==="lead")W="team_lead";else if(Z)W="subagent";return{agentId:J,agentKind:W,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Z,createdByAgentId:$.createdByAgentId?.trim()||Z||void 0,isSubagent:Boolean(Z),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:Q,teamAgentId:$.teamAgentId?.trim()||void 0}}function AU($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function VU($){let J=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Z of J){let Q=Z?.trim();if(Q)return Q}return $.isPrimaryAgentEvent?"root":"unknown"}function pQ($,J,Z){let{sessionId:Q,config:W,liveSession:f,emit:j}=$,X=W.telemetry,H=f?.runtime.teamRuntime,Y=Z?.isPrimaryAgentEvent??!0,A=lQ(J),V=q$({agentId:Z?.agentId??A.agentId,conversationId:Z?.conversationId??A.conversationId,parentAgentId:Z?.parentAgentId??A.parentAgentId,createdByAgentId:Z?.createdByAgentId,teamId:Z?.teamId??H?.getTeamId(),teamName:Z?.teamName??H?.getTeamName(),teamRole:Z?.teamRole,teamAgentId:Z?.teamAgentId});if(J.type==="content_start"&&J.contentType==="tool"&&J.toolName==="skills"){let B=YU(J.input);if(B)X6(X,{ulid:Q,skillName:B,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:W.providerId,modelId:W.modelId,...V})}if(J.type==="content_end"&&J.contentType==="tool"){let B=J.toolName??"unknown",K=!J.error;if(j6(X,{ulid:Q,tool:B,autoApproved:void 0,success:K,modelId:W.modelId,provider:W.providerId,...V}),!K&&(B==="editor"||B==="apply_patch"))H6(X,{ulid:Q,modelId:W.modelId,provider:W.providerId,errorType:J.error,...V})}if(J.type==="notice"&&J.reason==="api_error")I8(X,{ulid:Q,model:W.modelId,provider:W.providerId,errorMessage:J.message,...V});if(J.type==="error")I8(X,{ulid:Q,model:W.modelId,provider:W.providerId,errorMessage:J.error?.message??"unknown error",...V});if(J.type==="usage"&&f?.turnUsageBaseline){let B=AU(J);if(Y){f.turnPrimaryUsage=X0(f.turnPrimaryUsage??B0(),B);let G=X0(f.turnUsageBaseline,f.turnPrimaryUsage);$.usageBySession.set(Q,G),R2(X,{ulid:Q,provider:W.providerId,model:W.modelId,source:"assistant",mode:W.mode,...V}),W6(X,{ulid:Q,tokensIn:J.inputTokens,tokensOut:J.outputTokens,cacheWriteTokens:J.cacheWriteTokens,cacheReadTokens:J.cacheReadTokens,totalCost:J.cost,model:W.modelId,...V})}else{let G=VU({isPrimaryAgentEvent:Y,overrides:Z,eventMetadata:A}),D=f.turnUsageByAgent??new Map;f.turnUsageByAgent=D,D.set(G,X0(D.get(G)??B0(),B))}let K=X0(f.turnPrimaryUsage??B0(),FJ(f.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(Q,X0(f.turnAggregateUsageBaseline??f.turnUsageBaseline,K))}if(J.type==="iteration_end"&&Y)$.persistMessages(Q,f?.agent.getMessages()??[],f?.config.systemPrompt);j({type:"agent_event",payload:{sessionId:Q,event:J,teamAgentId:Z?.teamAgentId,teamRole:Z!==void 0?Z.teamRole??(Y?"lead":void 0):void 0}}),j({type:"chunk",payload:{sessionId:Q,stream:"agent",chunk:Tj(J),ts:Date.now()}})}function t$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as rD}from"@cline/shared";function wj($){let J="";for(let Z=0;Z<$.length;Z+=1)J+=String.fromCharCode($[Z]??0);return btoa(J).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function BU($){let Z=new TextEncoder().encode($),Q=await crypto.subtle.digest("SHA-256",Z);return new Uint8Array(Q)}function KU($=32){let J=new Uint8Array($);return crypto.getRandomValues(J),wj(J)}async function h6(){let $=KU(),J=wj(await BU($));return{verifier:$,challenge:J}}function b6($){return $.endsWith("/")?$.slice(0,-1):$}function h1($,J){return new URL(J,`${b6($)}/`).toString()}function h2($,J={}){let Z=$.trim();if(!Z)return{};try{let Q=new URL(Z);return{code:Q.searchParams.get("code")??void 0,state:Q.searchParams.get("state")??void 0,provider:J.includeProvider?Q.searchParams.get("provider")??void 0:void 0}}catch{}if(J.allowHashCodeState&&Z.includes("#")){let[Q,W]=Z.split("#",2);return{code:Q||void 0,state:W||void 0}}if(Z.includes("code=")){let Q=new URLSearchParams(Z);return{code:Q.get("code")??void 0,state:Q.get("state")??void 0,provider:J.includeProvider?Q.get("provider")??void 0:void 0}}return{code:Z}}function GU($){if(typeof atob==="function")try{return atob($)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from($,"base64").toString("utf8")}catch{return null}return null}function z0($){if(!$)return null;try{let J=$.split(".");if(J.length!==3)return null;let Z=J[1];if(!Z)return null;let Q=Z.replace(/-/g,"+").replace(/_/g,"/"),W=Q.padEnd(Q.length+(4-Q.length%4)%4,"="),f=GU(W);if(!f)return null;return JSON.parse(f)}catch{return null}}function b2($){try{let J=JSON.parse($),Z=J.error,Q=typeof Z==="string"?Z:Z&&typeof Z==="object"&&typeof Z.type==="string"?Z.type:void 0,W=typeof J.error_description==="string"?J.error_description:typeof J.message==="string"?J.message:Z&&typeof Z==="object"&&typeof Z.message==="string"?Z.message:void 0;return{code:Q,message:W}}catch{return{}}}function b1($,J){return Date.now()>=$.expires-J}async function k2($){if(!$.onManualCodeInput){let f=await $.waitForCallback();return{code:f?.code,state:f?.state,provider:f?.provider,error:f?.error}}let J,Z,Q=$.onManualCodeInput().then((f)=>{J=f,$.cancelWait()}).catch((f)=>{Z=f instanceof Error?f:Error(String(f)),$.cancelWait()}),W=await $.waitForCallback();if(Z)throw Z;if(W?.code||W?.error)return{code:W.code,state:W.state,provider:W.provider,error:W.error};if(J)return h2(J,$.parseOptions);if(await Q,Z)throw Z;if(J)return h2(J,$.parseOptions);return{}}y$();import{existsSync as i6,readFileSync as AR,statSync as VR}from"node:fs";import{basename as BR,dirname as p6,join as n6,resolve as r6}from"node:path";import{discoverPluginModulePaths as KR,resolveConfiguredPluginModulePaths as QX,resolvePluginConfigSearchPaths as GR,SKILLS_CONFIG_DIRECTORY_NAME as FR}from"@cline/shared/storage";import{resolve as dU}from"node:path";import{normalizePluginManifest as lU}from"@cline/shared";import{existsSync as F0,readFileSync as m2}from"node:fs";import{builtinModules as TU,createRequire as tQ}from"node:module";import{dirname as s$,extname as LJ,isAbsolute as NU,resolve as c}from"node:path";import{fileURLToPath as mj}from"node:url";import{PLUGIN_FILE_EXTENSIONS as MU}from"@cline/shared";var gj=s$(mj(import.meta.url)),qU=tQ(import.meta.url),yU=c(gj,"..","..","..","..",".."),iQ=CU(yU),wU=["@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"],sQ=new Set(TU.flatMap(($)=>[$,$.replace(/^node:/,"")])),PJ=new Set(MU),SU=["development","node","import","require","default"];function CU($){let J={},Z={"@cline/sdk":c($,"packages/sdk/src/index.ts"),"@cline/agents":c($,"packages/agents/src/index.ts"),"@cline/core":c($,"packages/core/src/index.ts"),"@cline/llms":c($,"packages/llms/src/index.ts"),"@cline/shared":c($,"packages/shared/src/index.ts"),"@cline/shared/storage":c($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":c($,"packages/shared/src/db/index.ts")};for(let[Q,W]of Object.entries(Z))if(F0(W))J[Q]=W;for(let Q of["agents","core","llms","shared"]){let W=c($,"packages",Q),f=c(W,"package.json");if(!F0(f))continue;try{let j=JSON.parse(m2(f,"utf8"));if(typeof j.name!=="string"||!j.exports)continue;if(typeof j.exports==="string"){let X=c(W,j.exports);if(F0(X))J[j.name]=X;continue}if(typeof j.exports!=="object")continue;for(let[X,H]of Object.entries(j.exports)){let Y=EU(W,H);if(!Y)continue;let A=X==="."?j.name:`${j.name}/${X.replace(/^\.\//,"")}`;J[A]=Y}}catch{}}return J}function EU($,J){let Z=oQ(J);if(!Z)return null;let Q=vj($,Z);for(let W of Q)if(F0(W))return W;return null}function oQ($,J=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(J.has($))return null;J.add($);let Z=$;for(let Q of SU){let W=oQ(Z[Q],J);if(W)return W}return null}function vj($,J){let Z=J.replace(/^\.\//,""),Q=[c($,J)];if(Z.startsWith("dist/")){let W=Z.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[c($,`${W}.ts`),c($,`${W}.tsx`),c($,`${W}.mts`),c($,`${W}.cts`),...Q]}return Q}function hU($){return Object.fromEntries(Object.entries($).sort(([J],[Z])=>Z.length-J.length))}function u6($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function x2($){if($.startsWith("@")){let[J,Z]=$.split("/",3);return Z?`${J}/${Z}`:$}return $.split("/",1)[0]??$}function bU($){let J=x2($);if($===J)return".";return`.${$.slice(J.length)}`}function uj($){return x2($).startsWith("@cline/")}function nQ($,J){let Z=x2(J),Q=s$($);while(!0){let W=c(Q,"node_modules",Z);if(F0(W)||F0(c(W,"package.json")))return!0;let f=c(Q,"..");if(f===Q)return!1;Q=f}}function xj($){return aQ($)!==null}function aQ($){try{return qU.resolve($)}catch{}return kU($)}function kU($){let J=x2($),Z=cj(J);if(!Z)return null;let Q=c(Z,"package.json");try{let W=JSON.parse(m2(Q,"utf8")),f=bU($),j=f==="."&&typeof W.exports==="string"?W.exports:W.exports&&typeof W.exports==="object"&&Object.hasOwn(W.exports,f)?W.exports[f]:void 0,X=oQ(j)??(f==="."&&typeof W.main==="string"?W.main:null);if(!X)return null;let H=c(Z,X),Y=[H,...vj(Z,X).filter((A)=>A!==H)];for(let A of Y)if(F0(A))return A;return null}catch{return null}}function IU(){let $=[gj],J=process.env.CLINE_WRAPPER_PATH?.trim();if(J)$.push(s$(s$(J)));let Z=process.execPath?.trim();if(Z)$.push(s$(Z));return[...new Set($.map((Q)=>c(Q)))]}function xU($,J){let Z=$;while(!0){let Q=c(Z,"package.json");if(F0(Q))try{if(JSON.parse(m2(Q,"utf8")).name===J)return Z}catch{}let W=c(Z,"node_modules",J,"package.json");if(F0(W))return s$(W);let f=c(Z,"..");if(f===Z)return null;Z=f}}function cj($){for(let J of IU()){let Z=xU(J,$);if(Z)return Z}return null}function mU($){let Z=s$($);for(let Q=0;Q<4;Q++){let W=c(Z,"package.json");if(F0(W))try{let j=JSON.parse(m2(W,"utf8"));return j!=null&&typeof j==="object"&&"cline"in j}catch{return!1}let f=c(Z,"..");if(f===Z)return!1;Z=f}return!1}function dj($,J){let Z=J.startsWith("file:")?mj(J):NU(J)?J:c(s$($),J);if(F0(Z)&&PJ.has(LJ(Z)))return Z;for(let Q of PJ){let W=`${Z}${Q}`;if(F0(W))return W}for(let Q of PJ){let W=c(Z,`index${Q}`);if(F0(W))return W}return null}function lj($){let J=new Set,Z=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let Q of Z)for(let W of $.matchAll(Q)){let f=W[1];if(f)J.add(f)}return[...J]}function gU($){return LJ($)!==".ts"}function pj($,J,Z=new Set){if(Z.has($)||!F0($))return;if(Z.add($),!PJ.has(LJ($)))return;let Q=m2($,"utf8"),W=gU($);for(let f of lj(Q)){if(f.startsWith("node:")||sQ.has(f))continue;if(u6(f)){if(!W)continue;if(Object.hasOwn(iQ,f)||Object.hasOwn(iQ,x2(f))||nQ($,f)||uj(f)&&xj(f)||J&&xj(f))continue;throw Error(`Cannot find module '${x2(f)}'`)}let j=dj($,f);if(j)pj(j,J,Z)}}function rj($,J=new Set,Z=new Set){if(J.has($)||!F0($))return Z;if(J.add($),!PJ.has(LJ($)))return Z;let Q=m2($,"utf8");for(let W of lj(Q)){if(Z.add(W),u6(W))continue;let f=dj($,W);if(f)rj(f,J,Z)}return Z}function vU($,J){let Z=tQ($),Q={},W=rj($),f=new Set(wU);for(let[j,X]of Object.entries(iQ)){try{Z.resolve(j);continue}catch{}Q[j]=X}for(let j of W)if(u6(j)&&(uj(j)||J))f.add(j);for(let j of f){if(Object.hasOwn(Q,j)||nQ($,j))continue;let X=aQ(j);if(X)Q[j]=X}if(!J)return Q;for(let j of W){if(!u6(j)||Object.hasOwn(Q,j)||nQ($,j)||j.startsWith("node:")||sQ.has(j))continue;let X=aQ(j);if(X)Q[j]=X}return Q}function uU($){let J=LJ($);return J===".ts"||J===".tsx"||J===".mts"||J===".cts"}var I1;function cU(){if(I1!==void 0)return I1;let $=cj("jiti");if(!$)return I1=null,null;let J=c($,"dist","babel.cjs");if(!F0(J))return I1=null,null;try{let Q=tQ(J)(J);I1=typeof Q==="function"?Q:null}catch{I1=null}return I1}async function ij($,J={}){let Z=!mU($);pj($,Z);let Q=vU($,Z),W=hU(Q),f=await import("jiti"),j=typeof f==="function"?f:typeof f.default==="function"?f.default:void 0;if(!j)throw Error("Unable to load jiti");let X=Object.entries(W).filter(([,V])=>uU(V)).map(([V])=>V),H=cU(),Y=H?(V)=>H({...V,interopDefault:!0}):void 0;return await j($,{alias:W,cache:J.useCache,requireCache:J.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...sQ],transformModules:X,tryNative:!1,...Y?{transform:Y}:{}}).import($,{})}function nj($,J){if(!$)return!0;if($.providerIds?.length){if(!J?.providerId||!$.providerIds.includes(J.providerId))return!1}if($.modelIds?.length){if(!J?.modelId||!$.modelIds.includes(J.modelId))return!1}return!0}function aj($){return typeof $==="object"&&$!==null}function eQ($){return Array.isArray($)&&$.every((J)=>typeof J==="string")}function pU($,J){if(!aj($.manifest))throw Error(`Invalid plugin module at ${J}: missing required "manifest"`);if(!eQ($.manifest.capabilities))throw Error(`Invalid plugin module at ${J}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${J}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!eQ($.manifest.providerIds))throw Error(`Invalid plugin module at ${J}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!eQ($.manifest.modelIds))throw Error(`Invalid plugin module at ${J}: manifest.modelIds must be a string array when provided`)}function rU($,J){if(!aj($))throw Error(`Invalid plugin module at ${J}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${J}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${J}: missing required "manifest"`);pU($,J)}async function zJ($,J={}){let Z=dU(J.cwd??process.cwd(),$),Q=await ij(Z,{useCache:J.useCache}),W=J.exportName??"plugin",f=Q.default??Q[W];rU(f,Z);let j=f,X=j.setup,H=X?(Y,A)=>{let V={...J.session,...A.session},B={...A,session:Object.keys(V).length>0?V:void 0,client:J.client??A.client,user:J.user??A.user,workspaceInfo:J.workspaceInfo??A.workspaceInfo,automation:J.automation??A.automation,logger:J.logger??A.logger,telemetry:J.telemetry??A.telemetry};return X(Y,B)}:void 0;return{...j,manifest:lU(j.manifest),setup:H}}async function c6($,J={}){return(await x1($,J)).plugins}async function x1($,J={}){let Z=[],Q=[],W=new Map,f=0;for(let X of $)try{let H=await zJ(X,J);if(!nj(H.manifest,J))continue;let Y=W.get(H.name);if(Y)Q.push({type:"duplicate_plugin_override",pluginName:H.name,pluginPath:X,overriddenPluginPath:Y.pluginPath,message:`Plugin "${H.name}" from ${X} overrides ${Y.pluginPath}`});W.set(H.name,{plugin:H,pluginPath:X,order:f++})}catch(H){let Y=H instanceof Error?H.message:String(H);Z.push({pluginPath:X,phase:"load",message:Y,stack:H instanceof Error?H.stack:void 0})}let j=[...W.values()].sort((X,H)=>X.order-H.order);return{plugins:j.map((X)=>X.plugin),pluginPaths:j.map((X)=>X.pluginPath),failures:Z,warnings:Q}}import{existsSync as Q9}from"node:fs";import{createRequire as ZX}from"node:module";import{dirname as d6,join as v2}from"node:path";import{fileURLToPath as sU}from"node:url";var $X={};w($X,{resolveSubprocessRuntimeExecutable:()=>$9,buildSubprocessSandboxCommand:()=>ej,SubprocessSandbox:()=>g2,CLINE_JS_RUNTIME_PATH_ENV:()=>oj});import{spawn as iU}from"node:child_process";import{basename as nU}from"node:path";import{augmentNodeCommandForDebug as aU,withResolvedClineBuildEnv as tU}from"@cline/shared";function tj($){if($ instanceof Error)return $;return Error(String($))}var oj="CLINE_JS_RUNTIME_PATH";function sj($){let J=$?.trim();if(!J)return!1;let Z=nU(J).toLowerCase();return Z==="node"||Z==="node.exe"||Z==="bun"||Z==="bun.exe"}function $9($={}){let J=$.env??process.env,Z=$.runtimeExecutable?.trim()||J[oj]?.trim();if(Z)return Z;let Q=$.execPath?.trim()||process.execPath;if(sj(Q))return Q;for(let W of[J.BUN_EXEC_PATH,J.npm_node_execpath,J.NODE]){let f=W?.trim();if(f&&sj(f))return f}return"node"}function ej($,J={}){let Z=$9({env:J.env,execPath:J.execPath,runtimeExecutable:J.runtimeExecutable});return aU([Z,...$],{env:J.env,execArgv:J.execArgv,debugRole:J.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class g2{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let J=this.pending.get($);if(!J)return;if(this.pending.delete($),J.timeout)clearTimeout(J.timeout);return J}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],J=ej($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Z=iU(J[0]??$9(this.options),J.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:tU(process.env)});this.process=Z;let Q="",W=(f)=>{let j=Q+f;Q=j.length>4000?j.slice(-4000):j};Z.stderr?.setEncoding("utf8"),Z.stderr?.on("data",(f)=>{W(f)}),Z.on("message",(f)=>{this.onMessage(f)}),Z.on("error",(f)=>{this.failPending(Error(`${this.processLabel} process error: ${tj(f).message}`))}),Z.on("exit",(f,j)=>{this.process=null;let X=Q.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(f)}, signal=${String(j)})${X?`: ${X}`:""}`))})}async call($,J,Z={}){this.start();let Q=this.process;if(!Q||Q.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let W=`req_${++this.requestCounter}`,f={type:"call",id:W,method:$,args:J};return await new Promise((j,X)=>{let H={resolve:(Y)=>j(Y),reject:X};if((Z.timeoutMs??0)>0)H.timeout=setTimeout(()=>{this.clearPendingRequest(W),this.shutdown().catch(()=>{}),X(Error(`${this.processLabel} call timed out after ${Z.timeoutMs}ms: ${$}`))},Z.timeoutMs);this.pending.set(W,H),Q.send(f,(Y)=>{if(!Y)return;let A=this.clearPendingRequest(W);if(!A)return;A.reject(Error(`${this.processLabel} failed to send call "${$}": ${tj(Y).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((J)=>{let Z=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}J()},300);$.once("exit",()=>{clearTimeout(Z),J()});try{$.kill("SIGTERM")}catch{clearTimeout(Z),J()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let J=this.clearPendingRequest($.id);if(!J)return;if($.ok){J.resolve($.result);return}J.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[J,Z]of this.pending.entries()){if(this.pending.delete(J),Z.timeout)clearTimeout(Z.timeout);Z.reject($)}}}function oU($){return{...$,contributions:{tools:$.contributions?.tools??[],commands:$.contributions?.commands??[],rules:$.contributions?.rules??[],messageBuilders:$.contributions?.messageBuilders??[],providers:$.contributions?.providers??[],automationEventTypes:$.contributions?.automationEventTypes??[],shortcuts:$.contributions?.shortcuts??[],flags:$.contributions?.flags??[]}}}function OJ($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function eU(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function $R(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Z=ZX($).resolve(`${eU()}/package.json`),Q=v2(d6(Z),"extensions","plugin-sandbox-bootstrap.js");return Q9(Q)?Q:void 0}catch{return}}function JR(){let $=process.execPath?.trim();if(!$)return;let J=v2(d6(d6($)),"extensions","plugin-sandbox-bootstrap.js");return Q9(J)?J:void 0}function ZR(){let $=d6(sU(import.meta.url)),J=ZX(import.meta.url),Z=[v2($,"plugin-sandbox-bootstrap.js"),v2($,"extensions","plugin-sandbox-bootstrap.js"),v2($,"agents","plugin-sandbox-bootstrap.js"),$R(),JR()];for(let f of Z.filter((j)=>typeof j==="string"))if(Q9(f))return{file:f};let Q=v2($,"plugin-sandbox-bootstrap.ts"),W="jiti";try{W=J.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(W)});`,`const jiti = createJiti(${JSON.stringify(Q)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(Q)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
139
- `)}}var J9=ZR();function Z9($,J,Z){if(typeof $==="number"&&$>0)return $;if(Z){let Q=process.env[Z];if(Q){let W=Number(Q);if(Number.isInteger(W)&&W>0)return W}}return J}async function l6($){let J=new g2({name:"plugin-sandbox",..."file"in J9?{bootstrapFile:J9.file}:{bootstrapScript:J9.script},onEvent:$.onEvent}),Z=Z9($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),Q=Z9($.hookTimeoutMs,3000),W=Z9($.contributionTimeoutMs,60000),f={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},j,X=()=>{return j??=J.call("initialize",f,{timeoutMs:Z}).finally(()=>{j=void 0}),j},H;try{H=await J.call("initialize",f,{timeoutMs:Z})}catch(V){throw await J.shutdown().catch(()=>{}),V}let Y=H.plugins.map(oU);return{extensions:Y.map((V)=>{let B={name:V.name,__clinePluginPath:V.pluginPath,manifest:V.manifest,setup:(K)=>{QR(K,J,V,W,X),WR(K,J,V,W,X),fR(K,J,V,W,X),XR(K,J,V,W,X),jR(K,V)}};return B.hooks=YR(J,V,Q,X),B}),failures:H.failures,pluginPaths:Y.map((V)=>V.pluginPath),shutdown:async()=>{await J.shutdown()},warnings:H.warnings}}function QR($,J,Z,Q,W){for(let f of Z.contributions?.tools??[]){let j={name:f.name,description:f.description??"",inputSchema:f.inputSchema??{type:"object",properties:{}},timeoutMs:f.timeoutMs,retryable:f.retryable,execute:async(X,H)=>{try{return await J.call("executeTool",{pluginId:Z.pluginId,contributionId:f.id,input:X,context:H},{timeoutMs:Q})}catch(Y){if(!OJ(Y))throw Y;return await W(),await J.call("executeTool",{pluginId:Z.pluginId,contributionId:f.id,input:X,context:H},{timeoutMs:Q})}}};$.registerTool(j)}}function WR($,J,Z,Q,W){for(let f of Z.contributions?.commands??[])$.registerCommand({name:f.name,description:f.description,handler:async(j)=>{try{return await J.call("executeCommand",{pluginId:Z.pluginId,contributionId:f.id,input:j},{timeoutMs:Q})}catch(X){if(!OJ(X))throw X;return await W(),await J.call("executeCommand",{pluginId:Z.pluginId,contributionId:f.id,input:j},{timeoutMs:Q})}}})}function fR($,J,Z,Q,W){for(let f of Z.contributions?.rules??[])$.registerRule({id:f.ruleId,source:f.source,content:f.hasContentHandler===!0?async()=>{try{return await J.call("resolveRuleContent",{pluginId:Z.pluginId,contributionId:f.id},{timeoutMs:Q})}catch(j){if(!OJ(j))throw j;return await W(),await J.call("resolveRuleContent",{pluginId:Z.pluginId,contributionId:f.id},{timeoutMs:Q})}}:f.content??""})}function jR($,J){for(let Z of J.contributions?.providers??[])$.registerProvider({name:Z.name,description:Z.description,metadata:Z.metadata});for(let Z of J.contributions?.automationEventTypes??[])$.registerAutomationEventType({eventType:Z.eventType,source:Z.source,description:Z.description,attributesSchema:Z.attributesSchema,payloadSchema:Z.payloadSchema,examples:Z.examples,metadata:Z.metadata})}function XR($,J,Z,Q,W){for(let f of Z.contributions?.messageBuilders??[])$.registerMessageBuilder({name:f.name,async build(j){try{let X=await J.call("buildMessages",{pluginId:Z.pluginId,contributionId:f.id,messages:j},{timeoutMs:Q});return JX(X)?X:j}catch(X){if(!OJ(X))throw X;await W();let H=await J.call("buildMessages",{pluginId:Z.pluginId,contributionId:f.id,messages:j},{timeoutMs:Q});return JX(H)?H:j}}})}function JX($){return Array.isArray($)&&$.every((J)=>typeof J==="object"&&J!==null&&("role"in J)&&("content"in J))}function HR($,J,Z,Q,W){return async(f)=>{try{return await $.call("invokeHook",{pluginId:J,hookName:Z,payload:f},{timeoutMs:Q})}catch(j){if(!OJ(j))throw j;return await W(),await $.call("invokeHook",{pluginId:J,hookName:Z,payload:f},{timeoutMs:Q})}}}function YR($,J,Z,Q){let W={};for(let f of J.hooks??[])W[f]=HR($,J.pluginId,f,Z,Q);return Object.keys(W).length>0?W:void 0}var f9="package.json",UR="package";function _J($){return GR($)}function TJ($){return KR($)}function RR($){try{return i6($)&&VR($).isDirectory()}catch{return!1}}function j9($){let J=[],Z=new Set;for(let Q of $){let W=r6(Q);if(Z.has(W))continue;Z.add(W),J.push(W)}return J}function WX($){let J=j9($);return g6(J)}function fX($){return _J($).flatMap((J)=>TJ(J)).filter((J)=>i6(J))}function DR($,J){let Z=[];for(let Q of $)try{Z.push(...QX([Q],J))}catch{}return Z}function W9($){return typeof $==="object"&&$!==null}function PR($){try{let J=JSON.parse(AR(n6($,f9),"utf8"));if(!W9(J)||!W9(J.cline))return[];let Z=J.cline.plugins;if(!Array.isArray(Z))return[];let Q=[];for(let W of Z){if(typeof W==="string"){Q.push(W);continue}if(!W9(W)||!Array.isArray(W.paths))continue;for(let f of W.paths)if(typeof f==="string")Q.push(f)}return Q}catch{return[]}}function jX($,J){let Z=r6(J);return PR($).some((Q)=>r6($,Q)===Z)}function LR($,J){return BR($)===UR&&i6(n6(p6($),f9))&&jX(p6($),J)}function zR($){let J=r6($),Z=[],Q=p6(J);while(!0){if(LR(Q,J)){Z.push(Q);break}if(i6(n6(Q,f9))){if(jX(Q,J))Z.push(Q);break}let W=p6(Q);if(W===Q)break;Q=W}return j9(Z)}function m1($={}){let J=$.cwd??process.cwd(),Z=fX($.workspacePath),Q=QX($.pluginPaths??[],J);return WX([...Q,...Z])}function OR($={}){let J=$.cwd??process.cwd(),Z=fX($.workspacePath),Q=DR($.pluginPaths??[],J);return WX([...Q,...Z])}function g1($){let J=[];for(let Z of $)for(let Q of zR(Z)){let W=n6(Q,FR);if(RR(W))J.push(W)}return j9(J)}function XX($={}){return g1(OR($))}async function u2($={}){let J=m1($);if(J.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let Q=await x1(J,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:Q.plugins,failures:Q.failures,pluginPaths:Q.pluginPaths,warnings:Q.warnings}}let Z=await l6({pluginPaths:J,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:Z.extensions??[],shutdown:Z.shutdown,failures:Z.failures,pluginPaths:Z.pluginPaths,warnings:Z.warnings}}import{execFile as _R}from"node:child_process";import{promisify as TR}from"node:util";var NR=TR(_R);function X9($,J){$?.log(J,{severity:"warn"})}function MR($){let J=$?.checkpoint;if(!J||typeof J!=="object"||Array.isArray(J))return;let Z=J;if(!Z.latest||!Array.isArray(Z.history))return;let Q=Z.latest,W=Z.history.filter((f)=>!!f&&typeof f==="object"&&typeof f.ref==="string"&&typeof f.createdAt==="number"&&typeof f.runCount==="number");if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")return;return{latest:Q,history:W}}async function v1($,J){let Z=await NR("git",["-C",$,...J],{windowsHide:!0});return{stdout:Z.stdout.trim(),stderr:Z.stderr.trim()}}async function H9($,J){if(!$)return;let Z=`refs/cline/checkpoints/${J}/`;try{let{stdout:Q}=await v1($,["for-each-ref","--format=%(refname)",Z]),W=Q.trim().split(`
140
- `).filter(Boolean);await Promise.allSettled(W.map((f)=>v1($,["update-ref","-d",f])))}catch{}}async function HX($,J,Z){if(!$||Z.length===0)return;await Promise.allSettled(Z.map((Q)=>v1($,["update-ref",`refs/cline/checkpoints/${J}/${Q.runCount}`,Q.ref])))}function qR($,J){let Z=$.findIndex((Q)=>Q.runCount===J.runCount);if(Z<0)return[...$,J];return $.map((Q,W)=>W===Z?J:Q)}function YX($){let J=$.initialRunCount??0,Z,Q=async()=>{if(Z!==void 0)return Z;try{Z=(await v1($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Z=!1}return Z},W=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:J});if(!await Q())return;let f=async(Y)=>{try{let V=(await v1($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!V)return;return{ref:V,createdAt:Date.now(),runCount:J,kind:"commit"}}catch(A){X9($.logger,`${Y}: ${A instanceof Error?A.message:String(A)}`);return}},j=`cline checkpoint session=${$.sessionId} run=${J}`,X="";try{X=(await v1($.cwd,["stash","create",j])).stdout.trim()}catch(Y){return X9($.logger,`Checkpoint snapshot failed: ${Y instanceof Error?Y.message:String(Y)}`),f("Checkpoint HEAD fallback failed")}if(!X)return f("Checkpoint HEAD fallback failed");let H=`refs/cline/checkpoints/${$.sessionId}/${J}`;try{await v1($.cwd,["update-ref",H,X])}catch(Y){X9($.logger,`Checkpoint store failed: ${Y instanceof Error?Y.message:String(Y)}`);return}return{ref:X,createdAt:Date.now(),runCount:J,kind:"stash"}};return{beforeRun:async({snapshot:f})=>{if(f.parentAgentId!=null)return;J+=1;return},beforeModel:async({snapshot:f})=>{if(f.parentAgentId!=null||f.iteration!==1||J<1)return;let j=await W();if(!j)return;let X=await $.readSessionMetadata(),H=MR(X);if(H?.latest.ref===j.ref)return;let Y=qR(H?.history??[],j);await $.writeSessionMetadata({...X??{},checkpoint:{latest:j,history:Y}});return}}}import{spawn as IR}from"node:child_process";import{appendFileSync as xR,readFileSync as mR}from"node:fs";import{join as gR}from"node:path";import{augmentNodeCommandForDebug as BX,withResolvedClineBuildEnv as V9}from"@cline/shared";import{ensureHookLogDir as AX}from"@cline/shared/storage";function c2($,J){if(!J)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:J}}import{existsSync as yR,readdirSync as wR}from"node:fs";import{basename as SR,extname as CR,join as ER}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as a6,resolveHooksConfigSearchPaths as hR}from"@cline/shared/storage";function NJ($){return hR($)}var d2;((A)=>{A.TaskStart="TaskStart";A.TaskResume="TaskResume";A.TaskCancel="TaskCancel";A.TaskComplete="TaskComplete";A.TaskError="TaskError";A.PreToolUse="PreToolUse";A.PostToolUse="PostToolUse";A.UserPromptSubmit="UserPromptSubmit";A.PreCompact="PreCompact";A.SessionShutdown="SessionShutdown"})(d2||={});var MJ={["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"},bR=new Map(Object.values(d2).map(($)=>[$.toLowerCase(),$])),kR=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function qJ($){let J=CR($).toLowerCase();if(!kR.has(J))return;let Z=SR($,J).trim().toLowerCase();return bR.get(Z)}function o$($){let J=[],Z=new Set,Q=NJ($).filter((W)=>yR(W));for(let W of Q)try{for(let f of wR(W,{withFileTypes:!0})){if(!f.isFile())continue;let j=qJ(f.name);if(!j)continue;let X=ER(W,f.name);if(Z.has(X))continue;Z.add(X),J.push({fileName:j,hookEventName:MJ[j],path:X})}}catch{}return J.sort((W,f)=>W.path.localeCompare(f.path))}function s6($){if(!$||typeof $!=="object")return{};let J={};for(let[Z,Q]of Object.entries($))J[Z]=typeof Q==="string"?Q:JSON.stringify(Q);return J}function t6($,J,Z){let Q=Z instanceof Error?`: ${Z.message}`:"",W=`${J}${Q}`;if($){try{$.log(W,{severity:"warn",...Z!==void 0?{error:Z}:{}})}catch{}return}console.warn(W)}function vR($,J){if(!J)return $;if(!$)return{...J};let Z=[$.context,J.context].filter((W)=>typeof W==="string"&&W.length>0).join(`
141
- `),Q=[...$.appendMessages??[],...J.appendMessages??[]];return{cancel:$.cancel===!0||J.cancel===!0?!0:void 0,review:$.review===!0||J.review===!0?!0:void 0,context:Z||void 0,overrideInput:J.overrideInput!==void 0?J.overrideInput:$.overrideInput,systemPrompt:J.systemPrompt!==void 0?J.systemPrompt:$.systemPrompt,appendMessages:Q.length>0?Q:void 0}}function uR($){if(!$||typeof $!=="object")return;let J=$,Z=typeof J.context==="string"?J.context:typeof J.contextModification==="string"?J.contextModification:typeof J.errorMessage==="string"?J.errorMessage:void 0;return{cancel:typeof J.cancel==="boolean"?J.cancel:void 0,review:typeof J.review==="boolean"?J.review:void 0,context:Z,overrideInput:Object.hasOwn(J,"overrideInput")?J.overrideInput:void 0}}function Y9($){let J=String($??"").toLowerCase();return J.includes("cancel")||J.includes("abort")||J.includes("interrupt")}function U0($,J){let Z=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",Q={rootSessionId:J.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:Q,workspaceRoots:J.workspacePath?[J.workspacePath]:[],workspaceInfo:J.workspaceInfo,userId:Z,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function cR($){let J=$.trim();if(!J)return{};let Q=J.split(`
142
- `).map((f)=>f.trim()).filter(Boolean).filter((f)=>f.startsWith("HOOK_CONTROL\t")).map((f)=>f.slice(13)),W=Q.length>0?Q[Q.length-1]:J;try{return{parsedJson:JSON.parse(W)}}catch(f){return{parseError:f instanceof Error?f.message:"Failed to parse hook stdout JSON"}}}async function dR($,J){let Z=$.stdin;if(!Z)throw Error("hook command failed to create stdin");await new Promise((Q,W)=>{let f=!1,j=()=>{Z.off("error",H),Z.off("finish",Y),$.off("close",A)},X=(V)=>{if(f)return;if(f=!0,j(),V){let B=V.code;if(B==="EPIPE"||B==="ERR_STREAM_DESTROYED"){Q();return}W(V);return}Q()},H=(V)=>X(V),Y=()=>X(),A=()=>X();Z.on("error",H),Z.once("finish",Y),$.once("close",A);try{Z.end(J)}catch(V){X(V)}})}async function KX($,J){if(J.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await VX($,J)}catch(Z){let Q=rR(J.command,process.platform,Z);if(!Q)throw Z;return await VX($,{...J,command:Q})}}async function VX($,J){let Z=BX(J.command,{env:J.env,debugRole:"hook"}),Q=IR(Z[0],Z.slice(1),{cwd:J.cwd,env:V9(J.env),stdio:J.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:J.detached}),W=new Promise((B)=>{Q.once("spawn",()=>B())}),f=new Promise((B,K)=>{Q.once("error",(G)=>K(G))}),j=JSON.stringify($);if(await Promise.race([W,f]),await dR(Q,j),J.detached){Q.unref();return}if(!Q.stdout||!Q.stderr)throw Error("hook command failed to create stdout/stderr");let X="",H="",Y=!1,A;Q.stdout.on("data",(B)=>{X+=B.toString()}),Q.stderr.on("data",(B)=>{H+=B.toString()});let V=new Promise((B)=>{if((J.timeoutMs??0)>0)A=setTimeout(()=>{Y=!0,Q.kill("SIGKILL")},J.timeoutMs);Q.once("close",(K)=>{if(A)clearTimeout(A);let{parsedJson:G,parseError:D}=cR(X);B({exitCode:K,stdout:X,stderr:H,parsedJson:G,parseError:D,timedOut:Y})})});return await Promise.race([V,f])}function lR($){try{let Z=mR($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Z?.startsWith("#!"))return;let Q=Z.slice(2).trim();if(!Q)return;let W=Q.split(/\s+/).filter(Boolean);return W.length>0?W:void 0}catch{return}}function pR($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function rR($,J=process.platform,Z){if(J!=="win32"||!pR(Z))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function GX($){if($.length===0)return;let[J,...Z]=$,Q=J.replace(/\\/g,"/").toLowerCase(),W=Q.split("/").at(-1)??Q;if(W==="env")return GX(Z);if(W==="bash"||W==="sh"||W==="zsh")return[W,...Z];if(W==="python3"||W==="python")return process.platform==="win32"?["py","-3",...Z]:[W,...Z];return $}function iR($){let J=lR($);if(J&&J.length>0)return[...GX(J)??J,$];let Z=$.toLowerCase();if(Z.endsWith(".sh")||Z.endsWith(".bash")||Z.endsWith(".zsh"))return["bash",$];if(Z.endsWith(".js")||Z.endsWith(".mjs")||Z.endsWith(".cjs"))return BX(["node",$],{debugRole:"hook"});if(Z.endsWith(".ts")||Z.endsWith(".mts")||Z.endsWith(".cts"))return["bun","run",$];if(Z.endsWith(".py"))return process.platform==="win32"?["py","-3",$]:["python3",$];if(Z.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",$];return["bash",$]}function nR($){let J={};for(let Z of o$($)){if(!Z.hookEventName)continue;let Q=Z.hookEventName,W=J[Q]??[];W.push(iR(Z.path)),J[Q]=W}return J}async function aR($){let J;for(let Z of $.commands){let Q=Z.join(" ");try{let W=await KX($.payload,{command:Z,cwd:$.cwd,env:V9(process.env),detached:!1,timeoutMs:$.timeoutMs});if(W?.timedOut){t6($.logger,`hook command timed out: ${Q}`);continue}if(W?.parseError){t6($.logger,`hook command returned invalid JSON control output: ${Q} (${W.parseError})`);continue}J=vR(J,uR(W?.parsedJson))}catch(W){t6($.logger,`hook command failed: ${Q}`,W)}}return J}function u1($){for(let J of $.commands){let Z=J.join(" ");KX($.payload,{command:J,cwd:$.cwd,env:V9(process.env),detached:!0}).catch((Q)=>{t6($.logger,`hook command failed: ${Z}`,Q)})}}function e$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function A9($,J){return{...e$($.snapshot),userMessage:J}}function FX($){return{...e$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function UX($){return{...e$($.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 RX($){return $.filter((J)=>J.type==="text"&&typeof J.text==="string").map((J)=>J.text).join("")}function tR($){if(!$)return;let J={};if($.cancel===!0)J.stop=!0;if($.overrideInput!==void 0)J.input=$.overrideInput;return Object.keys(J).length>0?J:void 0}function l2($){let J={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Z=(Q)=>{let W=`${JSON.stringify({ts:new Date().toISOString(),...Q})}
143
- `,j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??gR(AX(),"hooks.jsonl");AX(j),xR(j,W,"utf8")};return{beforeRun:async(Q)=>{let W=A9(Q,"");Z({...U0(W,J),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Q)=>{let W=FX(Q);Z({...U0(W,J),hookName:"tool_call",iteration:W.iteration,tool_call:{id:W.call.id,name:W.call.name,input:W.call.input},preToolUse:{toolName:W.call.name,parameters:s6(W.call.input)}});return},afterTool:async(Q)=>{let W=UX(Q);Z({...U0(W,J),hookName:"tool_result",iteration:W.iteration,tool_result:W.record,postToolUse:{toolName:W.record.name,parameters:s6(W.record.input),result:typeof W.record.output==="string"?W.record.output:JSON.stringify(W.record.output),success:!W.record.error,executionTimeMs:W.record.durationMs}});return},afterRun:async({snapshot:Q,result:W})=>{let f=e$(Q);if(W.status==="completed"){Z({...U0(f,J),hookName:"agent_end",iteration:W.iterations,turn:{outputText:W.outputText,status:W.status},taskComplete:{taskMetadata:{}}});return}if(W.status==="aborted"||Y9(W.error?.message)){Z({...U0(f,J),hookName:"agent_abort",reason:W.error?.message,taskCancel:{taskMetadata:{}}});return}if(W.error)Z({...U0(f,J),hookName:"agent_error",iteration:W.iterations,error:{name:W.error.name,message:W.error.message,stack:W.error.stack}})},onEvent:async(Q)=>{if(Q.type!=="message-added"||Q.message.role!=="user")return;let W=A9({snapshot:Q.snapshot},RX(Q.message.content));Z({...U0(W,J),hookName:"prompt_submit",userPromptSubmit:{prompt:W.userMessage,attachments:[]}})}}}function yJ($){let J=nR($.workspacePath);if(!Object.values(J).some((V)=>V.length>0))return;let Q=async(V,B)=>{let K=J[B]??[];if(K.length===0)return;u1({commands:K,cwd:$.cwd,logger:$.logger,payload:B==="agent_resume"?{...U0(V,$),hookName:B,taskResume:{taskMetadata:{},previousState:{}}}:{...U0(V,$),hookName:B,taskStart:{taskMetadata:{}}}})},W=async(V)=>{let B=J.prompt_submit??[];if(B.length>0)u1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...U0(V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:V.userMessage,attachments:[]}}})},f=async(V)=>{let B=J.tool_call??[];if(B.length===0)return;return aR({commands:B,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...U0(V,$),hookName:"tool_call",iteration:V.iteration,tool_call:{id:V.call.id,name:V.call.name,input:V.call.input},preToolUse:{toolName:V.call.name,parameters:s6(V.call.input)}}})},j=async(V)=>{let B=J.tool_result??[];if(B.length===0)return;u1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...U0(V,$),hookName:"tool_result",iteration:V.iteration,tool_result:V.record,postToolUse:{toolName:V.record.name,parameters:s6(V.record.input),result:typeof V.record.output==="string"?V.record.output:JSON.stringify(V.record.output),success:!V.record.error,executionTimeMs:V.record.durationMs}}})},X=async(V)=>{let B=J.agent_end??[];if(B.length===0)return;u1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...U0(V,$),hookName:"agent_end",iteration:V.iteration,turn:V.turn,taskComplete:{taskMetadata:{}}}})},H=async(V)=>{let B=J.agent_error??[];if(B.length===0)return;u1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...U0(V,$),hookName:"agent_error",iteration:V.iteration,error:{name:V.error.name,message:V.error.message,stack:V.error.stack}}})},Y=async(V)=>{if(Y9(V.reason)){let K=J.agent_abort??[];if(K.length>0)u1({commands:K,cwd:$.cwd,logger:$.logger,payload:{...U0(V,$),hookName:"agent_abort",reason:V.reason,taskCancel:{taskMetadata:{}}}})}let B=J.session_shutdown??[];if(B.length===0)return;u1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...U0(V,$),hookName:"session_shutdown",reason:V.reason}})},A={};if((J.agent_start?.length??0)>0||(J.agent_resume?.length??0)>0||(J.prompt_submit?.length??0)>0){if((J.agent_start?.length??0)>0||(J.agent_resume?.length??0)>0)A.beforeRun=async(V)=>{let B=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await Q(e$(V.snapshot),B);return};if((J.prompt_submit?.length??0)>0)A.onEvent=async(V)=>{if(V.type!=="message-added"||V.message.role!=="user")return;await W(A9({snapshot:V.snapshot},RX(V.message.content)))}}if((J.tool_call?.length??0)>0)A.beforeTool=async(V)=>{let B=await f(FX(V));return tR(B)};if((J.tool_result?.length??0)>0)A.afterTool=async(V)=>{await j(UX(V));return};if((J.agent_end?.length??0)>0)A.afterRun=async({snapshot:V,result:B})=>{if(B.status!=="completed")return;await X({...e$(V),iteration:B.iterations,turn:{outputText:B.outputText,status:B.status}})};if((J.agent_error?.length??0)>0||(J.agent_abort?.length??0)>0||(J.session_shutdown?.length??0)>0){let V=A.afterRun;A.afterRun=async(B)=>{await V?.(B);let{snapshot:K,result:G}=B;if(G.status==="aborted"||Y9(G.error?.message)){await Y({...e$(K),reason:G.error?.message});return}if(G.error)await H({...e$(K),iteration:G.iterations,error:G.error})}}return A}function p2($){return c2("core.hook_config_files",yJ($))}function c1($,J){let Z=$.map((Q)=>Q[J]).filter((Q)=>typeof Q==="function");if(Z.length===0)return;return async(Q)=>{let W;for(let f of Z){let j=await f(Q);if(!j||typeof j!=="object")continue;let X=j;W={...W??{},...X,stop:W?.stop===!0||X.stop===!0?!0:X.stop,options:W?.options||X.options?{...W?.options??{},...X.options??{}}:void 0}}return W}}function d1($){let J=$.filter((Z)=>Z!==void 0);if(J.length===0)return;return{beforeRun:c1(J,"beforeRun"),afterRun:c1(J,"afterRun"),beforeModel:c1(J,"beforeModel"),afterModel:c1(J,"afterModel"),beforeTool:c1(J,"beforeTool"),afterTool:c1(J,"afterTool"),onEvent:c1(J,"onEvent")}}var DX={};w(DX,{normalizeRuntimeCapabilities:()=>R0});function R0(...$){let J,Z;for(let W of $){if(!W)continue;if(W.toolExecutors)J={...J??{},...W.toolExecutors};if(W.requestToolApproval)Z=W.requestToolApproval}let Q=J&&Object.keys(J).length>0;if(!Q&&!Z)return;return{...Q?{toolExecutors:J}:{},...Z?{requestToolApproval:Z}:{}}}var dX={};w(dX,{toProviderConfig:()=>x0,emptyStoredProviderSettings:()=>Q1,StoredProviderSettingsSchema:()=>a2,StoredProviderSettingsEntrySchema:()=>T5,ProviderSettingsSchemaTyped:()=>xJ});import{z as Z1}from"zod";var cX={};w(cX,{toProviderConfig:()=>x0,safeParseSettings:()=>_5,safeCreateProviderConfig:()=>N9,parseSettings:()=>O5,normalizeProviderId:()=>n2,isBuiltInProviderId:()=>_9,createProviderConfig:()=>T9,SapSettingsSchema:()=>P5,ReasoningSettingsSchema:()=>F5,ProviderSettingsSchema:()=>J1,ProviderProtocolSchema:()=>B5,ProviderIdSchema:()=>IJ,ProviderClientSchema:()=>K5,OcaSettingsSchema:()=>L5,ModelCatalogSettingsSchema:()=>z5,GcpSettingsSchema:()=>R5,BUILT_IN_PROVIDER_IDS:()=>O9,BUILT_IN_PROVIDER:()=>kJ,AzureSettingsSchema:()=>D5,AwsSettingsSchema:()=>U5,AuthSettingsSchema:()=>G5});import*as I0 from"@cline/llms";import{z as q}from"zod";L0();var bX={};w(bX,{refreshOcaToken:()=>SJ,loginOcaOAuth:()=>r2,getValidOcaCredentials:()=>CJ,generateOcaOpcRequestId:()=>J5,createOcaRequestHeaders:()=>F9,createOcaOAuthProvider:()=>G9,OCI_HEADER_OPC_REQUEST_ID:()=>qX,DEFAULT_INTERNAL_OCA_BASE_URL:()=>o6,DEFAULT_INTERNAL_IDCS_URL:()=>OX,DEFAULT_INTERNAL_IDCS_SCOPES:()=>_X,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>zX,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>e6,DEFAULT_EXTERNAL_IDCS_URL:()=>NX,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>MX,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>TX});import{nanoid as LX}from"nanoid";class B9{ttlMs;maxEntries;entries=new Map;constructor($,J){this.ttlMs=$;this.maxEntries=J}get($,J=Date.now()){this.pruneExpired(J);let Z=this.entries.get($);if(!Z)return;return this.entries.delete($),this.entries.set($,Z),Z.value}set($,J,Z=Date.now(),Q=this.ttlMs){this.pruneExpired(Z),this.entries.delete($);while(this.entries.size>=this.maxEntries){let W=this.entries.keys().next().value;if(W===void 0)break;this.entries.delete(W)}this.entries.set($,{value:J,expiresAt:Z+Q})}pruneExpired($){for(let[J,Z]of this.entries)if(Z.expiresAt<=$)this.entries.delete(J)}}var PX={};w(PX,{startLocalOAuthServer:()=>s0});function sR(){let $;return{promise:new Promise((Z)=>{$=Z}),resolve:$}}async function s0($){let J=await import("node:http"),Z=$.host??"127.0.0.1",Q=$.timeoutMs??300000,W=$.successHtml??oR,f=sR(),j=!1,X=null,H=null,Y=null,A=(K)=>{if(j)return;j=!0,f.resolve(K)},V=()=>{if(X)clearTimeout(X),X=null;let K=Y;if(Y=null,H)H.close(),H=null;if(K!==null&&$.onClose)Promise.resolve($.onClose({host:Z,port:K})).catch(()=>{})},B=async()=>{return X=setTimeout(()=>{V(),A(null)},Q),f.promise};for(let K of $.ports){let G=J.createServer((F,U)=>{try{let R=new URL(F.url||"",`http://${Z}:${K}`);if(R.pathname!==$.callbackPath){U.statusCode=404,U.end("Not found");return}let O={url:R,code:R.searchParams.get("code")??void 0,state:R.searchParams.get("state")??void 0,provider:R.searchParams.get("provider")??void 0,error:R.searchParams.get("error")??void 0};if(O.error){U.statusCode=400,U.end(`Authentication failed: ${O.error}`),V(),A(O);return}if(!O.code){U.statusCode=400,U.end("Missing authorization code");return}if($.expectedState&&O.state!==$.expectedState){U.statusCode=400,U.end("State mismatch");return}U.statusCode=200,U.setHeader("Content-Type","text/html; charset=utf-8"),U.end(W),V(),A(O)}catch{U.statusCode=500,U.end("Internal error")}}),D=await new Promise((F)=>{let U=(R)=>{G.off("error",U),F({bound:!1,error:R})};G.once("error",U),G.listen(K,Z,()=>{G.off("error",U),H=G,F({bound:!0})})});if(D.error){if(D.error.code==="EADDRINUSE")continue;throw V(),D.error}if(D.bound){Y=K;let F=`http://${Z}:${K}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Z,port:K,callbackUrl:F})).catch(()=>{});return{callbackUrl:F,waitForCallback:B,cancelWait:()=>{V(),A(null)},close:()=>{V(),A(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var oR=`<!DOCTYPE html>
135
+ ${Z}`;return J||Z}function iP($){let f=$.filter((J)=>J!==void 0);if(f.length===0)return{};return{beforeRun:async(J)=>{for(let Z of f){let Q=await Z.beforeRun?.(J);if(Q?.stop)return Q}return},afterRun:async(J)=>{for(let Z of f)await Z.afterRun?.(J)},beforeModel:async(J)=>{let Z=J.request,Q;for(let W of f){let j=await W.beforeModel?.({...J,request:Z});if(!j)continue;if(j.stop)return j;Q={...Q,...j,options:{...Q?.options??{},...j.options??{}}},Z={...Z,...j.messages?{messages:j.messages}:{},...j.tools?{tools:j.tools}:{},...j.options?{options:{...Z.options??{},...j.options}}:{}}}return Q},afterModel:async(J)=>{for(let Z of f){let Q=await Z.afterModel?.(J);if(Q?.stop)return Q}return},beforeTool:async(J)=>{let Z=J.input,Q;for(let W of f){let j=await W.beforeTool?.({...J,input:Z});if(!j)continue;if(j.stop||j.skip)return j;if(Q={...Q,...j},Object.hasOwn(j,"input"))Z=j.input}return Q},afterTool:async(J)=>{let Z=J.result,Q;for(let W of f){let j=await W.afterTool?.({...J,result:Z});if(!j)continue;if(j.stop)return j;if(Q={...Q,...j},j.result)Z=j.result}return Q},onEvent:async(J)=>{for(let Z of f)await Z.onEvent?.(J)}}}class o${config;agentId;parentAgentId;logger;telemetry;conversation;mistakeTracker;loopTracker;loopDetectionDisabled;messageBuilder;contributionRegistry;extensionsInitialized=!1;listeners=new Set;createAgentRuntimeImpl;activeRunId=null;running=!1;abortRequested=!1;abortReason;activeRuntime=null;activeRunPromise=null;eventAdapter=new lZ;shutdownCalled=!1;currentRunToolCalls=[];currentRunUsage={inputTokens:0,outputTokens:0};toolStartedAt=new Map;toolInputs=new Map;currentTurnSuccessfulTools=0;currentTurnFailedTools=0;currentTurnFailureDetails=[];activeTrackerWork=Promise.resolve();trackerAbortInFlight=!1;constructor($,f={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=f.logger??$.logger,this.telemetry=f.telemetry??$.telemetry,this.createAgentRuntimeImpl=f.createAgentRuntimeImpl??cP,this.conversation=new vZ($.initialMessages),this.messageBuilder=new mZ,this.contributionRegistry=dP({extensions:$.extensions?[...$.extensions]:[],setupContext:{session:$.extensionContext?.session,client:$.extensionContext?.client,user:$.extensionContext?.user,workspaceInfo:$.extensionContext?.workspace,automation:$.extensionContext?.automation,logger:$.extensionContext?.logger??this.logger,telemetry:$.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let J=$.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new dZ({maxConsecutiveMistakes:J,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(W)=>this.emitLegacyEvent(W),log:(W,j,X)=>nP(this.logger,W,j,X),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(W,j)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:W}]})}});let Z=$.execution?.loopDetection;this.loopDetectionDisabled=Z===!1;let Q=Z===!1||Z===void 0?void 0:Z;this.loopTracker=new cZ(Q)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools($){if($.length===0)return;let f=new Set(this.config.tools.map((Z)=>Z.name)),J=[...this.config.tools];for(let Z of $)if(!f.has(Z.name))J.push(Z),f.add(Z.name);this.config={...this.config,tools:J}}updateConnection($){let f={...this.config};if($.providerId!==void 0)f.providerId=$.providerId;if($.modelId!==void 0)f.modelId=$.modelId;if($.apiKey!==void 0)f.apiKey=$.apiKey;if($.baseUrl!==void 0)f.baseUrl=$.baseUrl;if($.headers!==void 0)f.headers=$.headers;if($.providerConfig!==void 0)f.providerConfig=$.providerConfig;if($.reasoningEffort!==void 0)f.reasoningEffort=$.reasoningEffort;if($.thinking!==void 0)f.thinking=$.thinking;if($.thinkingBudgetTokens!==void 0)f.thinkingBudgetTokens=$.thinkingBudgetTokens;this.config=f}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let f=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=f,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(f)}async shutdown($,f){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run($,f,J){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:f,userFiles:J,isContinue:!1})}continue($,f,J){return this.executeRun({userMessage:$,userImages:f,userFiles:J,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let f of this.contributionRegistry.getRegisteredRules()){let J=await pP(f);if(J)$.push(J)}return rP(this.config.systemPrompt,$)}executeRun($){let f;return f=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===f)this.activeRunPromise=null}),this.activeRunPromise=f,f}async executeRunInternal($){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let f=new Date,J=$.userMessage;if(J!==void 0){let F=await tP(J,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:F})}let Z=await this.composeSystemPrompt(),Q=$j(this.config,this.logger,this.telemetry),W=this.contributionRegistry.getRegisteredTools(),j=new Map;for(let F of W)j.set(F.name,F);for(let F of this.config.tools)j.set(F.name,F);let X=this.conversation.getConversationId(),H=Xj(this.config),Y=Array.from(j.values()),A=b4(this.conversation.getMessages()),V=Qj({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:X,parentAgentId:this.parentAgentId,model:Q,logger:this.logger,telemetry:this.telemetry,tools:Y,toolContextMetadata:{modelSupportsImages:H?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[z3]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(H,Y),initialMessages:A,systemPrompt:Z}),B=this.createAgentRuntimeImpl(V);if(this.activeRuntime=B,this.abortRequested)B.abort(this.abortReason);let K=B.subscribe((F)=>{this.handleRuntimeEvent(F)}),G,R;try{if($.isContinue)G=await B.continue(void 0);else G=await B.run("")}catch(F){R=F instanceof Error?F:Error(String(F))}finally{K();try{await this.activeTrackerWork}catch(F){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:F})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(G&&G.messages.length>0){let F=Cf(G.messages);this.conversation.replaceMessages(F)}let P=new Date;try{return this.buildLegacyResult({runResult:G,thrownError:R,startedAt:f,endedAt:P})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize()}catch($){if(this.config.hookErrorMode==="throw")throw $;this.emitLegacyEvent({type:"error",error:$ instanceof Error?$:Error(String($)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let $=iP([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((f)=>f.hooks)]);return{...$,beforeModel:async(f)=>{let J=await $.beforeModel?.(f);if(J?.stop)return J;let Z=J?.messages??f.request.messages,Q=await this.prepareMessagesForModelRequest(Z);return{...J,messages:Q}}}}createRuntimePrepareTurn($,f){let J=this.config.prepareTurn;if(!J)return;return async(Z)=>{let Q=Cf(Z.messages),W=await this.prepareProviderMessagesForApi(Q),j=await J({agentId:Z.agentId,conversationId:Z.conversationId??this.conversation.getConversationId(),parentAgentId:Z.parentAgentId??null,iteration:Z.iteration,messages:Q,apiMessages:W,abortSignal:Z.signal??new AbortController().signal,systemPrompt:Z.systemPrompt??"",tools:f,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:Z.emitStatusNotice});if(!j)return;return{...j.messages?{messages:b4(j.messages)}:{},...j.systemPrompt!==void 0?{systemPrompt:j.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let f=await this.prepareProviderMessagesForApi(k4($));return b4(f)}async prepareProviderMessagesForApi($){let f=$,J=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let Z of J)f=await Z.build(f);return this.messageBuilder.buildForApi(f)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let f=this.toolStartedAt.get($.toolCall.toolCallId),J=new Date,Z=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let Q=$.message.content.find((H)=>H.type==="tool-result"),W=Q?.type==="tool-result"&&Q.isError===!0,j=W?lP(Q?.type==="tool-result"?Q.output:void 0):void 0,X={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:Z,output:Q?.type==="tool-result"?Q.output:void 0,error:j,durationMs:f===void 0?0:J.getTime()-f.getTime(),startedAt:f??J,endedAt:J};if(this.currentRunToolCalls.push(X),W){if(this.currentTurnFailedTools+=1,j)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${j}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let f=this.currentTurnFailedTools,J=this.currentTurnSuccessfulTools;if(f>0&&J===0){let Z=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${f} tool call(s) failed${Z?`: ${Z}`:""}`})}else if(J>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let f of this.eventAdapter.translate($))this.emitLegacyEvent(f)}syncConversationFromRuntimeMessage($,f){if($.length>0){this.conversation.replaceMessages(Cf($));return}if(f.length===0)return;let J=new Set(this.conversation.getMessages().map((Q)=>Q.id).filter((Q)=>typeof Q==="string")),Z=Cf(f).filter((Q)=>!Q.id||!J.has(Q.id));if(Z.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...Z])}emitLegacyEvent($){for(let f of this.listeners)try{f($)}catch(J){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:J})}}inspectLoopForToolCall($,f,J){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let Z=this.loopTracker.inspect({name:$,input:f});if(Z.kind==="ok")return;if(Z.kind==="soft"){if(Z.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:Z.message}]});return}this.enqueueMistakeRecord({iteration:J,reason:"tool_execution_failed",forceAtLimit:!0,details:Z.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let f=await this.mistakeTracker.record($);if(f.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:f.message}]}),this.activeRuntime?.abort(f.reason??f.message)})}buildLegacyResult($){let{runResult:f,thrownError:J,startedAt:Z,endedAt:Q}=$,W=Q.getTime()-Z.getTime(),j=J?"error":aP(f),X=f?.outputText||(f?.status==="failed"?f.error?.message:void 0)||"",H=f?{inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,cacheReadTokens:f.usage.cacheReadTokens>0?f.usage.cacheReadTokens:void 0,cacheWriteTokens:f.usage.cacheWriteTokens>0?f.usage.cacheWriteTokens:void 0,totalCost:f.usage.totalCost}:this.currentRunUsage,Y=f?Cf(f.messages):this.conversation.getMessages(),A=Xj(this.config);if(J)throw J;return{text:X,usage:H,messages:Y,toolCalls:this.currentRunToolCalls,iterations:f?.iterations??0,finishReason:j,model:{id:this.config.modelId,provider:this.config.providerId,info:A},startedAt:Z,endedAt:Q,durationMs:W}}}function nP($,f,J,Z){if(!$)return;if(f==="debug"){$.debug(J,Z);return}if(f==="error"&&$.error){$.error(J,Z);return}let Q=f==="warn"?"warn":f==="error"?"error":"info";$.log(J,{...Z,severity:Q})}function aP($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function tP($,f,J,Z){let{buildInitialUserContent:Q}=await Promise.resolve().then(() => jj);return Q($,f,J,Z)}function Xj($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let f=IZ($);if(f?.[$.modelId])return f[$.modelId];return}import{buildClineSystemPrompt as Hj}from"@cline/shared";function Yj($,f){let J=$.trim();if(f.providerId.toLowerCase()!=="cline")return J;return Hj({ide:f.clineIdeName?.trim()||"Terminal",workspaceRoot:f.cwd?.trim()||"/",providerId:f.providerId,rules:`# Team Teammate Role
136
+ ${J}`,platform:f.clinePlatform,metadata:f.workspaceMetadata})}function Aj($,f){let J=$.trim();if(f.providerId.toLowerCase()!=="cline")return J;return Hj({ide:f.clineIdeName||"Terminal",workspaceRoot:f.cwd?.trim()||"/",providerId:f.providerId,overridePrompt:J,metadata:f.workspaceMetadata,platform:f.clinePlatform})}function Ef($){let f={...$};return{getRuntimeConfig:()=>f,getConnectionConfig:()=>({providerId:f.providerId,modelId:f.modelId,apiKey:f.apiKey,baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking}),updateConnectionDefaults:(J)=>{f={...f,...J}}}}function E1($){let f=$.configProvider.getRuntimeConfig(),J=$.kind==="teammate"?Yj($.prompt,f):Aj($.prompt,f);return{...$.configProvider.getConnectionConfig(),systemPrompt:J,tools:$.tools,maxIterations:$.maxIterations??f.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:f.hooks,extensions:f.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:f.logger,role:$.role}}function bf($){let f=E1($),J=new o$(f);if(f.onEvent)J.subscribeEvents(f.onEvent);return J}var eP=pZ.object({systemPrompt:pZ.string().describe("System prompt defining the sub-agent's behavior"),task:pZ.string().describe("Task for the sub-agent to complete")});function e$($){return sP({name:"spawn_agent",description:"Spawn a sub-agent with a custom system prompt for specialized tasks. Use when delegating work that benefits from focused expertise.",inputSchema:oP(eP),execute:async(f,J)=>{let Z=$.createSubAgentTools?await $.createSubAgentTools(f,J):$.subAgentTools??[],Q=bf({kind:"subagent",prompt:f.systemPrompt,configProvider:$.configProvider,tools:Z,maxIterations:$.defaultMaxIterations,parentAgentId:J.agentId,abortSignal:J.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),W=Q.getAgentId(),j=Q.getConversationId(),X=J.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:W,conversationId:j,parentAgentId:X,input:f})}catch{}try{let H=await Q.run(f.task),Y={text:H.text,iterations:H.iterations,finishReason:H.finishReason,usage:{inputTokens:H.usage.inputTokens,outputTokens:H.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:W,conversationId:j,parentAgentId:X,input:f,result:Y,agentResult:H})}catch{}return Y}catch(H){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:W,conversationId:j,parentAgentId:X,input:f,error:H instanceof Error?H:Error(String(H))})}catch{}throw H}},timeoutMs:300000,retryable:!1})}import{createTool as W0,TEAM_AWAIT_TIMEOUT_MS as $F,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as fF,TEAM_RUN_TEXT_PREVIEW_LIMIT as JF,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as ZF,TeamAttachOutcomeFragmentInputSchema as Vj,TeamAwaitRunsInputSchema as Bj,TeamBroadcastInputSchema as Kj,TeamBroadcastToolResultSchema as QF,TeamCancelRunInputSchema as Gj,TeamCancelRunToolResultSchema as WF,TeamCleanupInputSchema as Pj,TeamCleanupToolResultSchema as jF,TeamCreateOutcomeInputSchema as Fj,TeamCreateOutcomeToolResultSchema as XF,TeamFinalizeOutcomeInputSchema as Uj,TeamFinalizeOutcomeToolResultSchema as HF,TeamListOutcomesInputSchema as Rj,TeamListRunsInputSchema as Dj,TeamMailboxMessageToolResultSchema as YF,TeamMissionLogInputSchema as Lj,TeamMissionLogToolResultSchema as AF,TeamOutcomeFragmentToolResultSchema as _j,TeamOutcomeToolResultSchema as VF,TeamReadMailboxInputSchema as zj,TeamReviewOutcomeFragmentInputSchema as Oj,TeamRunTaskInputSchema as Tj,TeamRunTaskToolResultSchema as rZ,TeamRunToolSummarySchema as iZ,TeamSendMessageInputSchema as Nj,TeamSendMessageToolResultSchema as BF,TeamShutdownTeammateInputSchema as Mj,TeamSimpleAgentStatusToolResultSchema as yj,TeamSpawnTeammateInputSchema as qj,TeamStatusInputSchema as wj,TeamStatusToolResultSchema as KF,TeamTaskInputSchema as Sj,TeamTaskToolResultSchema as U8,validateWithZod as E,zodToJsonSchema as j0}from"@cline/shared";function hj($,f){let J=$.replace(/\s+/g," ").trim();if(J.length<=f)return J;return`${J.slice(0,Math.max(0,f-3)).trimEnd()}...`}function b1($,f){if($===void 0)throw Error(`Missing required field: ${f}`);return $}function GF($){let f=$.result;if(!f)return;return{textPreview:hj(f.text,JF),iterations:f.iterations,finishReason:f.finishReason,durationMs:f.durationMs,usage:{inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,cacheReadTokens:f.usage.cacheReadTokens,cacheWriteTokens:f.usage.cacheWriteTokens,totalCost:f.usage.totalCost}}}function I4($){return $?.toISOString()}function nZ($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:hj($.message,fF),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:I4($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:I4($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:I4($.heartbeatAt),lastProgressAt:I4($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:GF($)}}function PF($){if($.status==="failed")throw Error(`Run "${$.id}" failed${$.error?`: ${$.error}`:""}`);if($.status==="cancelled")throw Error(`Run "${$.id}" was cancelled${$.error?`: ${$.error}`:""}`);if($.status==="interrupted")throw Error(`Run "${$.id}" was interrupted${$.error?`: ${$.error}`:""}`)}var kf=["team_spawn_teammate","team_shutdown_teammate","team_status","team_task","team_run_task","team_cancel_run","team_list_runs","team_await_runs","team_send_message","team_broadcast","team_read_mailbox","team_mission_log","team_cleanup","team_create_outcome","team_attach_outcome_fragment","team_review_outcome_fragment","team_finalize_outcome","team_list_outcomes"];function Cj($){let f=[];if($.createBaseTools)f.push(...$.createBaseTools());f.push(...k1({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:E1({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:f,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function If($){let f=$.leadAgentId??"lead",J=$.restoredFromPersistence===!0,Z=k1({runtime:$.runtime,requesterId:f,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),Q=[];for(let W of $.restoredTeammates??[]){if($.runtime.isTeammateActive(W.agentId))continue;Cj({runtime:$.runtime,requesterId:f,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:W}),Q.push(W.agentId)}return{tools:Z,restoredFromPersistence:J,restoredTeammates:Q}}function k1($){let f=$.allowSpawn??!0,J=$.includeSpawnTool??!0,Z=$.includeManagementTools??!0,Q=[];if(J)Q.push(W0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:j0(qj),execute:async(j)=>{let X=E(qj,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!f)throw Error("Spawning teammates is disabled in this context.");let H={agentId:X.agentId,rolePrompt:X.rolePrompt};if(Cj({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:H}),!Z)$.onLeadToolsUnlocked?.(k1({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return E(yj,{agentId:X.agentId,status:"spawned"})}}));if(!Z)return Q;Q.push(W0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:j0(Mj),execute:async(j)=>{let X=E(Mj,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(X.agentId,X.reason),E(yj,{agentId:X.agentId,status:"stopped"})}})),Q.push(W0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:j0(wj),execute:async(j)=>{return E(wj,j),E(KF,$.runtime.getSnapshot())}})),Q.push(W0({name:"team_task",description:"Manage shared team tasks with action-specific payloads. create requires title and description, with optional dependsOn and assignee. list accepts optional status, assignee. claim requires taskId. complete requires taskId and summary. block requires taskId and reason. Do not include fields from other actions.",inputSchema:j0(Sj),execute:async(j)=>{let X=E(Sj,j);switch(X.action){case"create":{let H=new Set(ZF.create??[]),Y=Object.entries(j).filter(([V,B])=>H.has(V)&&B!=null).map(([V])=>V),A=$.runtime.createTask({title:b1(X.title,"title"),description:b1(X.description,"description"),dependsOn:X.dependsOn,assignee:X.assignee,createdBy:$.requesterId});return E(U8,{action:"create",taskId:A.id,status:A.status,...Y.length>0?{ignoredFields:Y,note:`Ignored fields for action=create: ${Y.join(", ")}`}:{}})}case"list":return E(U8,{action:"list",tasks:$.runtime.listTaskItems({status:X.status,assignee:X.assignee})});case"claim":{let H=$.runtime.claimTask(b1(X.taskId,"taskId"),$.requesterId);return E(U8,{action:"claim",taskId:H.id,status:H.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_task with action=complete when done."})}case"complete":{let H=$.runtime.completeTask(b1(X.taskId,"taskId"),$.requesterId,b1(X.summary,"summary"));return E(U8,{action:"complete",taskId:H.id,status:H.status})}case"block":{let H=$.runtime.blockTask(b1(X.taskId,"taskId"),$.requesterId,b1(X.reason,"reason"));return E(U8,{action:"block",taskId:H.id,status:H.status})}}}}));let W=new Map;return Q.push(W0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:j0(Tj),execute:async(j)=>{let X=E(Tj,j);if(X.runMode==="async"){let A=$.runtime.startTeammateRun(X.agentId,X.task,{taskId:X.taskId||void 0,fromAgentId:$.requesterId,continueConversation:X.continueConversation||void 0});return E(rZ,{agentId:X.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${X.agentId} and queued as ${A.id}.`,runId:A.id})}let H=W.get(X.agentId);if(H){let A=await H;return E(rZ,{...A,status:"joined",deduped:!0,message:`Task for ${X.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let Y=$.runtime.routeToTeammate(X.agentId,X.task,{taskId:X.taskId||void 0,fromAgentId:$.requesterId,continueConversation:X.continueConversation||void 0}).then((A)=>E(rZ,{agentId:X.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${X.agentId} and completed in sync mode.`,text:A.text,iterations:A.iterations})).finally(()=>{W.delete(X.agentId)});return W.set(X.agentId,Y),await Y}})),Q.push(W0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:j0(Gj),execute:async(j)=>{let X=E(Gj,j),H=$.runtime.cancelRun(X.runId,X.reason);return E(WF,{runId:H.id,status:H.status})}})),Q.push(W0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:j0(Dj),execute:async(j)=>E(iZ.array(),$.runtime.listRuns(E(Dj,j)).map(nZ))})),Q.push(W0({name:"team_await_runs",description:"Wait for async teammate runs. Provide runId to wait for one run, or omit it to wait for all active async runs. Uses a long timeout for legitimate teammate work.",inputSchema:j0(Bj),timeoutMs:$F,execute:async(j)=>{let X=E(Bj,j);if(X.runId){let A=await $.runtime.awaitRun(X.runId);return PF(A),E(iZ,nZ(A))}let H=await $.runtime.awaitAllRuns(),Y=H.filter((A)=>["failed","cancelled","interrupted"].includes(A.status));if(Y.length>0){let A=Y.map((V)=>`${V.id}:${V.status}${V.error?`(${V.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${A}`)}return E(iZ.array(),H.map(nZ))}})),Q.push(W0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:j0(Nj),execute:async(j)=>{let X=E(Nj,j),H=$.runtime.sendMessage($.requesterId,X.toAgentId,X.subject,X.body,X.taskId??void 0);return E(BF,{id:H.id,toAgentId:H.toAgentId})}})),Q.push(W0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:j0(Kj),execute:async(j)=>{let X=E(Kj,j),H=$.runtime.broadcast($.requesterId,X.subject,X.body,{taskId:X.taskId??void 0});return E(QF,{delivered:H.length})}})),Q.push(W0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:j0(zj),execute:async(j)=>{let X=E(zj,j);return E(YF.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:X.unreadOnly,markRead:!0}))}})),Q.push(W0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:j0(Lj),execute:async(j)=>{let X=E(Lj,j),H=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:X.taskId||void 0,kind:X.kind,summary:X.summary,evidence:X.evidence?.length?X.evidence:void 0,nextAction:X.nextAction||void 0});return E(AF,{id:H.id})}})),Q.push(W0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:j0(Pj),execute:async(j)=>{if(E(Pj,j),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),E(jF,{status:"cleaned"})}})),Q.push(W0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:j0(Fj),execute:async(j)=>{let X=E(Fj,j),H=$.runtime.createOutcome({title:X.title,requiredSections:X.requiredSections,createdBy:$.requesterId});return E(XF,{outcomeId:H.id,status:H.status,requiredSections:H.requiredSections})}})),Q.push(W0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:j0(Vj),execute:async(j)=>{let X=E(Vj,j),H=$.runtime.attachOutcomeFragment({outcomeId:X.outcomeId,section:X.section,sourceAgentId:$.requesterId,sourceRunId:X.sourceRunId||void 0,content:X.content});return E(_j,{fragmentId:H.id,status:H.status})}})),Q.push(W0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:j0(Oj),execute:async(j)=>{let X=E(Oj,j),H=$.runtime.reviewOutcomeFragment({fragmentId:X.fragmentId,reviewedBy:$.requesterId,approved:X.approved});return E(_j,{fragmentId:H.id,status:H.status})}})),Q.push(W0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:j0(Uj),execute:async(j)=>{let X=E(Uj,j),H=$.runtime.finalizeOutcome(X.outcomeId);return E(HF,{outcomeId:H.id,status:H.status})}})),Q.push(W0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:j0(Rj),execute:async(j)=>{return E(Rj,j),E(VF.array(),$.runtime.listOutcomes())}})),Q}function x4($){return{...$,tasks:$.tasks.map((f)=>({...f,createdAt:new Date(f.createdAt),updatedAt:new Date(f.updatedAt)})),mailbox:$.mailbox.map((f)=>({...f,sentAt:new Date(f.sentAt),readAt:f.readAt?new Date(f.readAt):void 0})),missionLog:$.missionLog.map((f)=>({...f,ts:new Date(f.ts)})),runs:($.runs??[]).map((f)=>({...f,startedAt:new Date(f.startedAt),endedAt:f.endedAt?new Date(f.endedAt):void 0,nextAttemptAt:f.nextAttemptAt?new Date(f.nextAttemptAt):void 0,heartbeatAt:f.heartbeatAt?new Date(f.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),finalizedAt:f.finalizedAt?new Date(f.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),reviewedAt:f.reviewedAt?new Date(f.reviewedAt):void 0}))}}function Ej($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var FF=[{id:"read_files",description:"Read the full content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided.",headlessToolNames:["read_files"]},{id:"search_codebase",description:"Perform regex pattern searches across the codebase for code patterns, definitions, imports, and other text matches.",headlessToolNames:["search_codebase"]},{id:"run_commands",description:"Run shell commands from the root of the workspace for listing files, checking git status, builds, tests, and similar tasks.",headlessToolNames:["run_commands"]},{id:"editor",description:"Make controlled filesystem edits on text files with create, replace, and insert operations.",headlessToolNames:["editor"]},{id:"fetch_web_content",description:"Fetch URL content and analyze it with a prompt describing what to extract.",headlessToolNames:["fetch_web_content"]},{id:"skills",description:"Execute a configured skill within the main conversation when a matching skill exists for the task.",headlessToolNames:["skills"]},{id:"ask_question",description:"Ask the user a single clarifying question with 2-5 selectable options.",headlessToolNames:["ask_question"]},{id:"spawn_agent",description:e$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...kf]}],UF={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function RF($){return $==="plan"||$==="yolo"?$:"act"}function kj($){let f=RF($.mode),J=k0[q$({mode:f})],Z=hf($.providerId??"",$.modelId??"",f,Sf);return{mode:f,flags:{...J,...Z,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function bj($,f){if(f.disabledToolIds?.has($))return!1;let{flags:J}=kj(f);if($==="spawn_agent")return J.enableSpawnAgent===!0;if($==="teams")return J.enableAgentTeams===!0;if($==="editor")return J.enableEditor===!0||J.enableApplyPatch===!0;let Z=UF[$];return Z?J[Z]===!0:!1}function DF($,f){if($.id==="editor"){let{flags:J}=kj(f),Z=J.enableApplyPatch===!0&&J.enableEditor!==!0;return{...$,defaultEnabled:bj($.id,f),headlessToolNames:[Z?"apply_patch":"editor"]}}return{...$,defaultEnabled:bj($.id,f)}}function I1($={}){return FF.map((f)=>DF(f,$))}function m4($={}){return I1($).filter((f)=>f.defaultEnabled).map((f)=>f.id)}function g4($){if(!$.enabled)return new Set;let f=I1($.availabilityContext),J=new Set(f.map((Z)=>Z.id));if(!$.allowlist||$.allowlist.length===0)return new Set(f.filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id));for(let Z of $.allowlist)if(!J.has(Z))throw Error(`Unknown tool "${Z}". Available tools: ${f.map((Q)=>Q.id).join(", ")}`);return new Set($.allowlist)}function R8($,f={}){return I1(f).filter((J)=>$.has(J.id)).flatMap((J)=>J.headlessToolNames)}function v4($,f={}){return R8($,f)}function x1($={}){let{executorOptions:f={},executors:J,...Z}=$,Q={...wf(f),...J??{}};return t$({...Z,executors:Q})}import{mkdirSync as NF,writeFileSync as MF}from"node:fs";import{dirname as yF}from"node:path";import{normalizeUserInput as qF}from"@cline/shared";import{nanoid as wF}from"nanoid";var xj={};w(xj,{sanitizeSessionToken:()=>m1,parseTeamTaskSubSessionId:()=>mf,parseSubSessionId:()=>L8,makeTeamTaskSubSessionId:()=>D8,makeSubSessionId:()=>xf,deriveSubsessionStatus:()=>_8});import{nanoid as zF}from"nanoid";function m1($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function xf($,f){let J=m1($),Z=m1(f),Q=`${J}__${Z}`;return Q.length>180?Q.slice(0,180):Q}function D8($,f){let J=m1($),Z=m1(f);return`${J}__teamtask__${Z}__${zF(6)}`}function mf($){let J=$.indexOf("__teamtask__");if(J<=0)return null;let Z=$.slice(0,J),Q=$.slice(J+12),W=Q.lastIndexOf("__");if(W<=0)return null;let j=Q.slice(0,W),X=Q.slice(W+2);if(!Z||!j||!X)return null;return{rootSessionId:Z,agentId:j,teamTaskId:X}}function L8($){if(mf($))return null;let f="__",J=$.indexOf(f);if(J<=0)return null;let Z=$.slice(0,J),Q=$.slice(J+f.length);if(!Z||!Q)return null;return{rootSessionId:Z,agentId:Q}}function _8($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let f=String($.reason??"").toLowerCase();if(f.includes("cancel")||f.includes("abort")||f.includes("interrupt"))return"cancelled";if(f.includes("fail")||f.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as a}from"zod";var vj={};w(vj,{isTerminalSessionStatus:()=>gj,isNonTerminalSessionStatus:()=>Z0,SessionSource:()=>G0,SESSION_STATUSES:()=>z8,NON_TERMINAL_SESSION_STATUSES:()=>mj});import{SESSION_STATUS_VALUES as OF}from"@cline/shared";var z8=OF,mj=["idle","running","pending"];function gj($){return!mj.includes($)}function Z0($){return!gj($)}var G0={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 TF=a.enum(z8),M0=a.object({version:a.literal(1),session_id:a.string().min(1),source:a.string().min(1),pid:a.number().int(),started_at:a.string().min(1),ended_at:a.string().min(1).optional(),exit_code:a.number().int().nullable().optional(),status:TF,interactive:a.boolean(),provider:a.string().min(1),model:a.string().min(1),cwd:a.string().min(1),workspace_root:a.string().min(1),team_name:a.string().min(1).optional(),enable_tools:a.boolean(),enable_spawn:a.boolean(),enable_teams:a.boolean(),prompt:a.string().optional(),metadata:a.record(a.string(),a.unknown()).optional(),messages_path:a.string().min(1).optional()});function uj($){if(!$)return!1;return Object.values($).some((f)=>typeof f==="function")}function tZ($,f){let J=[...$??[],...f??[]];if(J.length===0)return;let Z=[],Q=new Set;for(let W of J){if(Q.has(W.name))continue;Q.add(W.name),Z.push(W)}return Z}function cj($){return JSON.stringify($,(f,J)=>{if(J instanceof Error)return{name:J.name,message:J.message,stack:J.stack};return J})}function w$($){return typeof $==="string"&&$.trim()?$.trim():void 0}function aZ($,f){let J={...$};J.id=w$(J.id)??wF();let Z=J.modelInfo&&typeof J.modelInfo==="object"?{...J.modelInfo}:void 0,Q={id:w$(Z?.id)??w$(J.modelId)??w$(f?.id),provider:w$(Z?.provider)??w$(J.providerId)??w$(f?.provider),family:w$(Z?.family)??w$(f?.family)};if(delete J.providerId,delete J.modelId,Q.id&&Q.provider)J.modelInfo={id:Q.id,provider:Q.provider,...Q.family?{family:Q.family}:{}};else delete J.modelInfo;return J}function u4($){return $.map((f)=>aZ(f))}function c4($,f,J=[]){let Z=$.map((H,Y)=>{let A=J[Y],B=A?.role===H.role&&JSON.stringify(A.content)===JSON.stringify(H.content)?{...A,...H}:{...H};return aZ(B)}),Q=J.length,W=[];for(let H=Q;H<Z.length;H+=1)if(Z[H]?.role==="assistant")W.push(H);if(W.length===0){let H=[...Z].reverse().findIndex((Y)=>Y.role==="assistant");if(H===-1)return Z;W.push(Z.length-1-H)}let j=W[W.length-1],X=W.some((H)=>Z[H]?.metrics);for(let H of W){let Y=Z[H],A=Y.metrics;if(!A&&H===j&&!X){let V=f.usage;A={inputTokens:V.inputTokens,outputTokens:V.outputTokens,cacheReadTokens:V.cacheReadTokens??0,cacheWriteTokens:V.cacheWriteTokens??0,cost:V.totalCost}}Z[H]={...aZ(Y,{id:f.model.id,provider:f.model.provider,family:f.model.info?.family}),...A?{metrics:A}:{},ts:Y.ts??f.endedAt.getTime()}}return Z}function O8($){return{sessionId:$.sessionId,source:$.source,pid:$.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??void 0,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:$.parentSessionId??void 0,parentAgentId:$.parentAgentId??void 0,agentId:$.agentId??void 0,conversationId:$.conversationId??void 0,isSubagent:$.isSubagent,prompt:$.prompt??void 0,metadata:$.metadata??void 0,messagesPath:$.messagesPath??void 0,updatedAt:$.updatedAt}}var SF=120;function g1($){let f=$?.trim();return f?f.slice(0,SF):void 0}function sZ($){let f=qF($??"").trim();if(!f)return;return g1(f.split(`
137
+ `)[0]?.trim())}function $1($){if(!$)return;let f={...$},J=g1(typeof f.title==="string"?f.title:void 0);if(J)f.title=J;else delete f.title;return Object.keys(f).length>0?f:void 0}function T8($){let f=$1($.metadata)??{},J=$.title!==void 0?g1($.title):sZ($.prompt);if(J)f.title=J;return Object.keys(f).length>0?f:void 0}function oZ($){let f=mf($);if(f)return{agent:"teammate",sessionId:f.rootSessionId,taskType:"team"};let J=L8($);if(J)return{agent:"subagent",sessionId:J.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function eZ($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:u4($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function dj($,f,J){NF(yF($),{recursive:!0}),MF($,`${JSON.stringify(eZ({updatedAt:f,context:J,messages:[]}),null,2)}
138
+ `,"utf8")}function lj($,f){return M0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:f?.endedAt??$.endedAt??void 0,exit_code:f?.exitCode??$.exitCode??void 0,status:f?.status??$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName??void 0,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt??void 0,metadata:f?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function pj($,f,J){let Z=0;while(!0){let Q=await $();if(Q===void 0)return{updated:!1};let W=await f(Q);if(typeof W==="object"&&W!==null&&"updated"in W&&W.updated===!1){if(Z+=1,Z>=J)return W;continue}return W}}L0();var rj={};w(rj,{summarizeUsageFromMessages:()=>vf,sumUsageTotals:()=>N8,getCurrentContextSize:()=>$9,createInitialAccumulatedUsage:()=>B0,accumulateUsageTotals:()=>X0});function B0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function X0($,f){return{inputTokens:$.inputTokens+Math.max(0,f.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,f.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,f.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,f.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,f.totalCost??0)}}function N8($){let f=B0();for(let J of $)f=X0(f,J);return f}function gf($){return typeof $==="number"&&Number.isFinite($)?$:0}function vf($){let f=B0();for(let J of $){let Z=J.metrics;if(!Z)continue;f=X0(f,{inputTokens:gf(Z.inputTokens),outputTokens:gf(Z.outputTokens),cacheReadTokens:gf(Z.cacheReadTokens),cacheWriteTokens:gf(Z.cacheWriteTokens),totalCost:gf(Z.cost)})}return f}function $9($){for(let f=$.length-1;f>=0;f-=1){let J=$[f];if(J?.role!=="assistant")continue;let Z=gf(J.metrics?.inputTokens);return Z>0?Z:void 0}return}function hF($){if(!$||typeof $!=="object")return;let f=$,J=f.skill??f.skill_name??f.skillName;if(typeof J!=="string")return;let Z=J.trim();return Z.length>0?Z:void 0}function f9($){if(!$||typeof $!=="object")return{};let f=$;return{agentId:typeof f.agentId==="string"?f.agentId:void 0,conversationId:typeof f.conversationId==="string"?f.conversationId:void 0,parentAgentId:typeof f.parentAgentId==="string"?f.parentAgentId:void 0}}function S$($){let f=$.agentId?.trim();if(!f)return;let J=$.parentAgentId?.trim()||void 0,Z=$.teamRole,Q="root";if(Z==="teammate")Q="team_teammate";else if(Z==="lead")Q="team_lead";else if(J)Q="subagent";return{agentId:f,agentKind:Q,conversationId:$.conversationId?.trim()||void 0,parentAgentId:J,createdByAgentId:$.createdByAgentId?.trim()||J||void 0,isSubagent:Boolean(J),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:Z,teamAgentId:$.teamAgentId?.trim()||void 0}}function CF($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function EF($){let f=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let J of f){let Z=J?.trim();if(Z)return Z}return $.isPrimaryAgentEvent?"root":"unknown"}function J9($,f,J){let{sessionId:Z,config:Q,liveSession:W,emit:j}=$,X=Q.telemetry,H=W?.runtime.teamRuntime,Y=J?.isPrimaryAgentEvent??!0,A=f9(f),V=S$({agentId:J?.agentId??A.agentId,conversationId:J?.conversationId??A.conversationId,parentAgentId:J?.parentAgentId??A.parentAgentId,createdByAgentId:J?.createdByAgentId,teamId:J?.teamId??H?.getTeamId(),teamName:J?.teamName??H?.getTeamName(),teamRole:J?.teamRole,teamAgentId:J?.teamAgentId});if(f.type==="content_start"&&f.contentType==="tool"&&f.toolName==="skills"){let B=hF(f.input);if(B)U4(X,{ulid:Z,skillName:B,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:Q.providerId,modelId:Q.modelId,...V})}if(f.type==="content_end"&&f.contentType==="tool"){let B=f.toolName??"unknown",K=!f.error;if(F4(X,{ulid:Z,tool:B,autoApproved:void 0,success:K,modelId:Q.modelId,provider:Q.providerId,...V}),!K&&(B==="editor"||B==="apply_patch"))R4(X,{ulid:Z,modelId:Q.modelId,provider:Q.providerId,errorType:f.error,...V})}if(f.type==="notice"&&f.reason==="api_error")r2(X,{ulid:Z,model:Q.modelId,provider:Q.providerId,errorMessage:f.message,...V});if(f.type==="error")r2(X,{ulid:Z,model:Q.modelId,provider:Q.providerId,errorMessage:f.error?.message??"unknown error",...V});if(f.type==="usage"&&W?.turnUsageBaseline){let B=CF(f);if(Y){W.turnPrimaryUsage=X0(W.turnPrimaryUsage??B0(),B);let G=X0(W.turnUsageBaseline,W.turnPrimaryUsage);$.usageBySession.set(Z,G),Nf(X,{ulid:Z,provider:Q.providerId,model:Q.modelId,source:"assistant",mode:Q.mode,...V}),G4(X,{ulid:Z,tokensIn:f.inputTokens,tokensOut:f.outputTokens,cacheWriteTokens:f.cacheWriteTokens,cacheReadTokens:f.cacheReadTokens,totalCost:f.cost,model:Q.modelId,...V})}else{let G=EF({isPrimaryAgentEvent:Y,overrides:J,eventMetadata:A}),R=W.turnUsageByAgent??new Map;W.turnUsageByAgent=R,R.set(G,X0(R.get(G)??B0(),B))}let K=X0(W.turnPrimaryUsage??B0(),N8(W.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(Z,X0(W.turnAggregateUsageBaseline??W.turnUsageBaseline,K))}if(f.type==="iteration_end"&&Y)$.persistMessages(Z,W?.agent.getMessages()??[],W?.config.systemPrompt);j({type:"agent_event",payload:{sessionId:Z,event:f,teamAgentId:J?.teamAgentId,teamRole:J!==void 0?J.teamRole??(Y?"lead":void 0):void 0}}),j({type:"chunk",payload:{sessionId:Z,stream:"agent",chunk:cj(f),ts:Date.now()}})}function f1($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as GD}from"@cline/shared";function ij($){let f="";for(let J=0;J<$.length;J+=1)f+=String.fromCharCode($[J]??0);return btoa(f).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function bF($){let J=new TextEncoder().encode($),Z=await crypto.subtle.digest("SHA-256",J);return new Uint8Array(Z)}function kF($=32){let f=new Uint8Array($);return crypto.getRandomValues(f),ij(f)}async function d4(){let $=kF(),f=ij(await bF($));return{verifier:$,challenge:f}}function l4($){return $.endsWith("/")?$.slice(0,-1):$}function v1($,f){return new URL(f,`${l4($)}/`).toString()}function uf($,f={}){let J=$.trim();if(!J)return{};try{let Z=new URL(J);return{code:Z.searchParams.get("code")??void 0,state:Z.searchParams.get("state")??void 0,provider:f.includeProvider?Z.searchParams.get("provider")??void 0:void 0}}catch{}if(f.allowHashCodeState&&J.includes("#")){let[Z,Q]=J.split("#",2);return{code:Z||void 0,state:Q||void 0}}if(J.includes("code=")){let Z=new URLSearchParams(J);return{code:Z.get("code")??void 0,state:Z.get("state")??void 0,provider:f.includeProvider?Z.get("provider")??void 0:void 0}}return{code:J}}function IF($){if(typeof atob==="function")try{return atob($)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from($,"base64").toString("utf8")}catch{return null}return null}function _0($){if(!$)return null;try{let f=$.split(".");if(f.length!==3)return null;let J=f[1];if(!J)return null;let Z=J.replace(/-/g,"+").replace(/_/g,"/"),Q=Z.padEnd(Z.length+(4-Z.length%4)%4,"="),W=IF(Q);if(!W)return null;return JSON.parse(W)}catch{return null}}function cf($){try{let f=JSON.parse($),J=f.error,Z=typeof J==="string"?J:J&&typeof J==="object"&&typeof J.type==="string"?J.type:void 0,Q=typeof f.error_description==="string"?f.error_description:typeof f.message==="string"?f.message:J&&typeof J==="object"&&typeof J.message==="string"?J.message:void 0;return{code:Z,message:Q}}catch{return{}}}function u1($,f){return Date.now()>=$.expires-f}async function df($){if(!$.onManualCodeInput){let W=await $.waitForCallback();return{code:W?.code,state:W?.state,provider:W?.provider,error:W?.error}}let f,J,Z=$.onManualCodeInput().then((W)=>{f=W,$.cancelWait()}).catch((W)=>{J=W instanceof Error?W:Error(String(W)),$.cancelWait()}),Q=await $.waitForCallback();if(J)throw J;if(Q?.code||Q?.error)return{code:Q.code,state:Q.state,provider:Q.provider,error:Q.error};if(f)return uf(f,$.parseOptions);if(await Z,J)throw J;if(f)return uf(f,$.parseOptions);return{}}X$();import{existsSync as Z6,readFileSync as CU,statSync as EU}from"node:fs";import{basename as bU,dirname as f6,join as Q6,resolve as J6}from"node:path";import{discoverPluginModulePaths as kU,resolveConfiguredPluginModulePaths as _X,resolvePluginConfigSearchPaths as IU,SKILLS_CONFIG_DIRECTORY_NAME as xU}from"@cline/shared/storage";import{resolve as VU}from"node:path";import{normalizePluginManifest as BU}from"@cline/shared";import{existsSync as P0,readFileSync as pf}from"node:fs";import{builtinModules as rF,createRequire as X9}from"node:module";import{dirname as Z1,extname as S8,isAbsolute as iF,resolve as c}from"node:path";import{fileURLToPath as JX}from"node:url";import{PLUGIN_FILE_EXTENSIONS as nF}from"@cline/shared";var ZX=Z1(JX(import.meta.url)),aF=X9(import.meta.url),tF=c(ZX,"..","..","..","..",".."),Q9=eF(tF),sF=["@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"],H9=new Set(rF.flatMap(($)=>[$,$.replace(/^node:/,"")])),w8=new Set(nF),oF=["development","node","import","require","default"];function eF($){let f={},J={"@cline/sdk":c($,"packages/sdk/src/index.ts"),"@cline/agents":c($,"packages/agents/src/index.ts"),"@cline/core":c($,"packages/core/src/index.ts"),"@cline/llms":c($,"packages/llms/src/index.ts"),"@cline/shared":c($,"packages/shared/src/index.ts"),"@cline/shared/storage":c($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":c($,"packages/shared/src/db/index.ts")};for(let[Z,Q]of Object.entries(J))if(P0(Q))f[Z]=Q;for(let Z of["agents","core","llms","shared"]){let Q=c($,"packages",Z),W=c(Q,"package.json");if(!P0(W))continue;try{let j=JSON.parse(pf(W,"utf8"));if(typeof j.name!=="string"||!j.exports)continue;if(typeof j.exports==="string"){let X=c(Q,j.exports);if(P0(X))f[j.name]=X;continue}if(typeof j.exports!=="object")continue;for(let[X,H]of Object.entries(j.exports)){let Y=$U(Q,H);if(!Y)continue;let A=X==="."?j.name:`${j.name}/${X.replace(/^\.\//,"")}`;f[A]=Y}}catch{}}return f}function $U($,f){let J=Y9(f);if(!J)return null;let Z=QX($,J);for(let Q of Z)if(P0(Q))return Q;return null}function Y9($,f=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(f.has($))return null;f.add($);let J=$;for(let Z of oF){let Q=Y9(J[Z],f);if(Q)return Q}return null}function QX($,f){let J=f.replace(/^\.\//,""),Z=[c($,f)];if(J.startsWith("dist/")){let Q=J.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[c($,`${Q}.ts`),c($,`${Q}.tsx`),c($,`${Q}.mts`),c($,`${Q}.cts`),...Z]}return Z}function fU($){return Object.fromEntries(Object.entries($).sort(([f],[J])=>J.length-f.length))}function s4($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function lf($){if($.startsWith("@")){let[f,J]=$.split("/",3);return J?`${f}/${J}`:$}return $.split("/",1)[0]??$}function JU($){let f=lf($);if($===f)return".";return`.${$.slice(f.length)}`}function WX($){return lf($).startsWith("@cline/")}function W9($,f){let J=lf(f),Z=Z1($);while(!0){let Q=c(Z,"node_modules",J);if(P0(Q)||P0(c(Q,"package.json")))return!0;let W=c(Z,"..");if(W===Z)return!1;Z=W}}function fX($){return j9($)!==null}function j9($){try{return aF.resolve($)}catch{}return ZU($)}function ZU($){let f=lf($),J=jX(f);if(!J)return null;let Z=c(J,"package.json");try{let Q=JSON.parse(pf(Z,"utf8")),W=JU($),j=W==="."&&typeof Q.exports==="string"?Q.exports:Q.exports&&typeof Q.exports==="object"&&Object.hasOwn(Q.exports,W)?Q.exports[W]:void 0,X=Y9(j)??(W==="."&&typeof Q.main==="string"?Q.main:null);if(!X)return null;let H=c(J,X),Y=[H,...QX(J,X).filter((A)=>A!==H)];for(let A of Y)if(P0(A))return A;return null}catch{return null}}function QU(){let $=[ZX],f=process.env.CLINE_WRAPPER_PATH?.trim();if(f)$.push(Z1(Z1(f)));let J=process.execPath?.trim();if(J)$.push(Z1(J));return[...new Set($.map((Z)=>c(Z)))]}function WU($,f){let J=$;while(!0){let Z=c(J,"package.json");if(P0(Z))try{if(JSON.parse(pf(Z,"utf8")).name===f)return J}catch{}let Q=c(J,"node_modules",f,"package.json");if(P0(Q))return Z1(Q);let W=c(J,"..");if(W===J)return null;J=W}}function jX($){for(let f of QU()){let J=WU(f,$);if(J)return J}return null}function jU($){let J=Z1($);for(let Z=0;Z<4;Z++){let Q=c(J,"package.json");if(P0(Q))try{let j=JSON.parse(pf(Q,"utf8"));return j!=null&&typeof j==="object"&&"cline"in j}catch{return!1}let W=c(J,"..");if(W===J)return!1;J=W}return!1}function XX($,f){let J=f.startsWith("file:")?JX(f):iF(f)?f:c(Z1($),f);if(P0(J)&&w8.has(S8(J)))return J;for(let Z of w8){let Q=`${J}${Z}`;if(P0(Q))return Q}for(let Z of w8){let Q=c(J,`index${Z}`);if(P0(Q))return Q}return null}function HX($){let f=new Set,J=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let Z of J)for(let Q of $.matchAll(Z)){let W=Q[1];if(W)f.add(W)}return[...f]}function XU($){return S8($)!==".ts"}function YX($,f,J=new Set){if(J.has($)||!P0($))return;if(J.add($),!w8.has(S8($)))return;let Z=pf($,"utf8"),Q=XU($);for(let W of HX(Z)){if(W.startsWith("node:")||H9.has(W))continue;if(s4(W)){if(!Q)continue;if(Object.hasOwn(Q9,W)||Object.hasOwn(Q9,lf(W))||W9($,W)||WX(W)&&fX(W)||f&&fX(W))continue;throw Error(`Cannot find module '${lf(W)}'`)}let j=XX($,W);if(j)YX(j,f,J)}}function AX($,f=new Set,J=new Set){if(f.has($)||!P0($))return J;if(f.add($),!w8.has(S8($)))return J;let Z=pf($,"utf8");for(let Q of HX(Z)){if(J.add(Q),s4(Q))continue;let W=XX($,Q);if(W)AX(W,f,J)}return J}function HU($,f){let J=X9($),Z={},Q=AX($),W=new Set(sF);for(let[j,X]of Object.entries(Q9)){try{J.resolve(j);continue}catch{}Z[j]=X}for(let j of Q)if(s4(j)&&(WX(j)||f))W.add(j);for(let j of W){if(Object.hasOwn(Z,j)||W9($,j))continue;let X=j9(j);if(X)Z[j]=X}if(!f)return Z;for(let j of Q){if(!s4(j)||Object.hasOwn(Z,j)||W9($,j)||j.startsWith("node:")||H9.has(j))continue;let X=j9(j);if(X)Z[j]=X}return Z}function YU($){let f=S8($);return f===".ts"||f===".tsx"||f===".mts"||f===".cts"}var d1;function AU(){if(d1!==void 0)return d1;let $=jX("jiti");if(!$)return d1=null,null;let f=c($,"dist","babel.cjs");if(!P0(f))return d1=null,null;try{let Z=X9(f)(f);d1=typeof Z==="function"?Z:null}catch{d1=null}return d1}async function VX($,f={}){let J=!jU($);YX($,J);let Z=HU($,J),Q=fU(Z),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 X=Object.entries(Q).filter(([,V])=>YU(V)).map(([V])=>V),H=AU(),Y=H?(V)=>H({...V,interopDefault:!0}):void 0;return await j($,{alias:Q,cache:f.useCache,requireCache:f.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...H9],transformModules:X,tryNative:!1,...Y?{transform:Y}:{}}).import($,{})}function BX($,f){if(!$)return!0;if($.providerIds?.length){if(!f?.providerId||!$.providerIds.includes(f.providerId))return!1}if($.modelIds?.length){if(!f?.modelId||!$.modelIds.includes(f.modelId))return!1}return!0}function KX($){return typeof $==="object"&&$!==null}function A9($){return Array.isArray($)&&$.every((f)=>typeof f==="string")}function KU($,f){if(!KX($.manifest))throw Error(`Invalid plugin module at ${f}: missing required "manifest"`);if(!A9($.manifest.capabilities))throw Error(`Invalid plugin module at ${f}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${f}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!A9($.manifest.providerIds))throw Error(`Invalid plugin module at ${f}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!A9($.manifest.modelIds))throw Error(`Invalid plugin module at ${f}: manifest.modelIds must be a string array when provided`)}function GU($,f){if(!KX($))throw Error(`Invalid plugin module at ${f}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${f}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${f}: missing required "manifest"`);KU($,f)}async function h8($,f={}){let J=VU(f.cwd??process.cwd(),$),Z=await VX(J,{useCache:f.useCache}),Q=f.exportName??"plugin",W=Z.default??Z[Q];GU(W,J);let j=W,X=j.setup,H=X?(Y,A)=>{let V={...f.session,...A.session},B={...A,session:Object.keys(V).length>0?V:void 0,client:f.client??A.client,user:f.user??A.user,workspaceInfo:f.workspaceInfo??A.workspaceInfo,automation:f.automation??A.automation,logger:f.logger??A.logger,telemetry:f.telemetry??A.telemetry};return X(Y,B)}:void 0;return{...j,manifest:BU(j.manifest),setup:H}}async function o4($,f={}){return(await l1($,f)).plugins}async function l1($,f={}){let J=[],Z=[],Q=new Map,W=0;for(let X of $)try{let H=await h8(X,f);if(!BX(H.manifest,f))continue;let Y=Q.get(H.name);if(Y)Z.push({type:"duplicate_plugin_override",pluginName:H.name,pluginPath:X,overriddenPluginPath:Y.pluginPath,message:`Plugin "${H.name}" from ${X} overrides ${Y.pluginPath}`});Q.set(H.name,{plugin:H,pluginPath:X,order:W++})}catch(H){let Y=H instanceof Error?H.message:String(H);J.push({pluginPath:X,phase:"load",message:Y,stack:H instanceof Error?H.stack:void 0})}let j=[...Q.values()].sort((X,H)=>X.order-H.order);return{plugins:j.map((X)=>X.plugin),pluginPaths:j.map((X)=>X.pluginPath),failures:J,warnings:Z}}import{existsSync as G9}from"node:fs";import{createRequire as LX}from"node:module";import{dirname as e4,join as nf}from"node:path";import{fileURLToPath as DU}from"node:url";var RX={};w(RX,{resolveSubprocessRuntimeExecutable:()=>V9,buildSubprocessSandboxCommand:()=>UX,SubprocessSandbox:()=>rf,CLINE_JS_RUNTIME_PATH_ENV:()=>FX});import{spawn as PU}from"node:child_process";import{basename as FU}from"node:path";import{augmentNodeCommandForDebug as UU,withResolvedClineBuildEnv as RU}from"@cline/shared";function GX($){if($ instanceof Error)return $;return Error(String($))}var FX="CLINE_JS_RUNTIME_PATH";function PX($){let f=$?.trim();if(!f)return!1;let J=FU(f).toLowerCase();return J==="node"||J==="node.exe"||J==="bun"||J==="bun.exe"}function V9($={}){let f=$.env??process.env,J=$.runtimeExecutable?.trim()||f[FX]?.trim();if(J)return J;let Z=$.execPath?.trim()||process.execPath;if(PX(Z))return Z;for(let Q of[f.BUN_EXEC_PATH,f.npm_node_execpath,f.NODE]){let W=Q?.trim();if(W&&PX(W))return W}return"node"}function UX($,f={}){let J=V9({env:f.env,execPath:f.execPath,runtimeExecutable:f.runtimeExecutable});return UU([J,...$],{env:f.env,execArgv:f.execArgv,debugRole:f.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class rf{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let f=this.pending.get($);if(!f)return;if(this.pending.delete($),f.timeout)clearTimeout(f.timeout);return f}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],f=UX($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),J=PU(f[0]??V9(this.options),f.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:RU(process.env)});this.process=J;let Z="",Q=(W)=>{let j=Z+W;Z=j.length>4000?j.slice(-4000):j};J.stderr?.setEncoding("utf8"),J.stderr?.on("data",(W)=>{Q(W)}),J.on("message",(W)=>{this.onMessage(W)}),J.on("error",(W)=>{this.failPending(Error(`${this.processLabel} process error: ${GX(W).message}`))}),J.on("exit",(W,j)=>{this.process=null;let X=Z.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(W)}, signal=${String(j)})${X?`: ${X}`:""}`))})}async call($,f,J={}){this.start();let Z=this.process;if(!Z||Z.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let Q=`req_${++this.requestCounter}`,W={type:"call",id:Q,method:$,args:f};return await new Promise((j,X)=>{let H={resolve:(Y)=>j(Y),reject:X};if((J.timeoutMs??0)>0)H.timeout=setTimeout(()=>{this.clearPendingRequest(Q),this.shutdown().catch(()=>{}),X(Error(`${this.processLabel} call timed out after ${J.timeoutMs}ms: ${$}`))},J.timeoutMs);this.pending.set(Q,H),Z.send(W,(Y)=>{if(!Y)return;let A=this.clearPendingRequest(Q);if(!A)return;A.reject(Error(`${this.processLabel} failed to send call "${$}": ${GX(Y).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((f)=>{let J=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}f()},300);$.once("exit",()=>{clearTimeout(J),f()});try{$.kill("SIGTERM")}catch{clearTimeout(J),f()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let f=this.clearPendingRequest($.id);if(!f)return;if($.ok){f.resolve($.result);return}f.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[f,J]of this.pending.entries()){if(this.pending.delete(f),J.timeout)clearTimeout(J.timeout);J.reject($)}}}function LU($){return{...$,contributions:{tools:$.contributions?.tools??[],commands:$.contributions?.commands??[],rules:$.contributions?.rules??[],messageBuilders:$.contributions?.messageBuilders??[],providers:$.contributions?.providers??[],automationEventTypes:$.contributions?.automationEventTypes??[],shortcuts:$.contributions?.shortcuts??[],flags:$.contributions?.flags??[]}}}function C8($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function _U(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function zU(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let J=LX($).resolve(`${_U()}/package.json`),Z=nf(e4(J),"extensions","plugin-sandbox-bootstrap.js");return G9(Z)?Z:void 0}catch{return}}function OU(){let $=process.execPath?.trim();if(!$)return;let f=nf(e4(e4($)),"extensions","plugin-sandbox-bootstrap.js");return G9(f)?f:void 0}function TU(){let $=e4(DU(import.meta.url)),f=LX(import.meta.url),J=[nf($,"plugin-sandbox-bootstrap.js"),nf($,"extensions","plugin-sandbox-bootstrap.js"),nf($,"agents","plugin-sandbox-bootstrap.js"),zU(),OU()];for(let W of J.filter((j)=>typeof j==="string"))if(G9(W))return{file:W};let Z=nf($,"plugin-sandbox-bootstrap.ts"),Q="jiti";try{Q=f.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(Q)});`,`const jiti = createJiti(${JSON.stringify(Z)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(Z)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
139
+ `)}}var B9=TU();function K9($,f,J){if(typeof $==="number"&&$>0)return $;if(J){let Z=process.env[J];if(Z){let Q=Number(Z);if(Number.isInteger(Q)&&Q>0)return Q}}return f}async function $6($){let f=new rf({name:"plugin-sandbox",..."file"in B9?{bootstrapFile:B9.file}:{bootstrapScript:B9.script},onEvent:$.onEvent}),J=K9($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),Z=K9($.hookTimeoutMs,3000),Q=K9($.contributionTimeoutMs,60000),W={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},j,X=()=>{return j??=f.call("initialize",W,{timeoutMs:J}).finally(()=>{j=void 0}),j},H;try{H=await f.call("initialize",W,{timeoutMs:J})}catch(V){throw await f.shutdown().catch(()=>{}),V}let Y=H.plugins.map(LU);return{extensions:Y.map((V)=>{let B={name:V.name,__clinePluginPath:V.pluginPath,manifest:V.manifest,setup:(K)=>{NU(K,f,V,Q,X),MU(K,f,V,Q,X),yU(K,f,V,Q,X),wU(K,f,V,Q,X),qU(K,V)}};return B.hooks=hU(f,V,Z,X),B}),failures:H.failures,pluginPaths:Y.map((V)=>V.pluginPath),shutdown:async()=>{await f.shutdown()},warnings:H.warnings}}function NU($,f,J,Z,Q){for(let W of J.contributions?.tools??[]){let j={name:W.name,description:W.description??"",inputSchema:W.inputSchema??{type:"object",properties:{}},timeoutMs:W.timeoutMs,retryable:W.retryable,execute:async(X,H)=>{try{return await f.call("executeTool",{pluginId:J.pluginId,contributionId:W.id,input:X,context:H},{timeoutMs:Z})}catch(Y){if(!C8(Y))throw Y;return await Q(),await f.call("executeTool",{pluginId:J.pluginId,contributionId:W.id,input:X,context:H},{timeoutMs:Z})}}};$.registerTool(j)}}function MU($,f,J,Z,Q){for(let W of J.contributions?.commands??[])$.registerCommand({name:W.name,description:W.description,handler:async(j)=>{try{return await f.call("executeCommand",{pluginId:J.pluginId,contributionId:W.id,input:j},{timeoutMs:Z})}catch(X){if(!C8(X))throw X;return await Q(),await f.call("executeCommand",{pluginId:J.pluginId,contributionId:W.id,input:j},{timeoutMs:Z})}}})}function yU($,f,J,Z,Q){for(let W of J.contributions?.rules??[])$.registerRule({id:W.ruleId,source:W.source,content:W.hasContentHandler===!0?async()=>{try{return await f.call("resolveRuleContent",{pluginId:J.pluginId,contributionId:W.id},{timeoutMs:Z})}catch(j){if(!C8(j))throw j;return await Q(),await f.call("resolveRuleContent",{pluginId:J.pluginId,contributionId:W.id},{timeoutMs:Z})}}:W.content??""})}function qU($,f){for(let J of f.contributions?.providers??[])$.registerProvider({name:J.name,description:J.description,metadata:J.metadata});for(let J of f.contributions?.automationEventTypes??[])$.registerAutomationEventType({eventType:J.eventType,source:J.source,description:J.description,attributesSchema:J.attributesSchema,payloadSchema:J.payloadSchema,examples:J.examples,metadata:J.metadata})}function wU($,f,J,Z,Q){for(let W of J.contributions?.messageBuilders??[])$.registerMessageBuilder({name:W.name,async build(j){try{let X=await f.call("buildMessages",{pluginId:J.pluginId,contributionId:W.id,messages:j},{timeoutMs:Z});return DX(X)?X:j}catch(X){if(!C8(X))throw X;await Q();let H=await f.call("buildMessages",{pluginId:J.pluginId,contributionId:W.id,messages:j},{timeoutMs:Z});return DX(H)?H:j}}})}function DX($){return Array.isArray($)&&$.every((f)=>typeof f==="object"&&f!==null&&("role"in f)&&("content"in f))}function SU($,f,J,Z,Q){return async(W)=>{try{return await $.call("invokeHook",{pluginId:f,hookName:J,payload:W},{timeoutMs:Z})}catch(j){if(!C8(j))throw j;return await Q(),await $.call("invokeHook",{pluginId:f,hookName:J,payload:W},{timeoutMs:Z})}}}function hU($,f,J,Z){let Q={};for(let W of f.hooks??[])Q[W]=SU($,f.pluginId,W,J,Z);return Object.keys(Q).length>0?Q:void 0}var F9="package.json",mU="package";function E8($){return IU($)}function b8($){return kU($)}function gU($){try{return Z6($)&&EU($).isDirectory()}catch{return!1}}function U9($){let f=[],J=new Set;for(let Z of $){let Q=J6(Z);if(J.has(Q))continue;J.add(Q),f.push(Q)}return f}function zX($){let f=U9($);return a4(f)}function OX($){return E8($).flatMap((f)=>b8(f)).filter((f)=>Z6(f))}function vU($,f){let J=[];for(let Z of $)try{J.push(..._X([Z],f))}catch{}return J}function P9($){return typeof $==="object"&&$!==null}function uU($){try{let f=JSON.parse(CU(Q6($,F9),"utf8"));if(!P9(f)||!P9(f.cline))return[];let J=f.cline.plugins;if(!Array.isArray(J))return[];let Z=[];for(let Q of J){if(typeof Q==="string"){Z.push(Q);continue}if(!P9(Q)||!Array.isArray(Q.paths))continue;for(let W of Q.paths)if(typeof W==="string")Z.push(W)}return Z}catch{return[]}}function TX($,f){let J=J6(f);return uU($).some((Z)=>J6($,Z)===J)}function cU($,f){return bU($)===mU&&Z6(Q6(f6($),F9))&&TX(f6($),f)}function dU($){let f=J6($),J=[],Z=f6(f);while(!0){if(cU(Z,f)){J.push(Z);break}if(Z6(Q6(Z,F9))){if(TX(Z,f))J.push(Z);break}let Q=f6(Z);if(Q===Z)break;Z=Q}return U9(J)}function p1($={}){let f=$.cwd??process.cwd(),J=OX($.workspacePath),Z=_X($.pluginPaths??[],f);return zX([...Z,...J])}function lU($={}){let f=$.cwd??process.cwd(),J=OX($.workspacePath),Z=vU($.pluginPaths??[],f);return zX([...Z,...J])}function r1($){let f=[];for(let J of $)for(let Z of dU(J)){let Q=Q6(Z,xU);if(gU(Q))f.push(Q)}return U9(f)}function NX($={}){return r1(lU($))}async function af($={}){let f=p1($);if(f.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let Z=await l1(f,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:Z.plugins,failures:Z.failures,pluginPaths:Z.pluginPaths,warnings:Z.warnings}}let J=await $6({pluginPaths:f,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:J.extensions??[],shutdown:J.shutdown,failures:J.failures,pluginPaths:J.pluginPaths,warnings:J.warnings}}import{execFile as pU}from"node:child_process";import{promisify as rU}from"node:util";var iU=rU(pU);function R9($,f){$?.log(f,{severity:"warn"})}function nU($){let f=$?.checkpoint;if(!f||typeof f!=="object"||Array.isArray(f))return;let J=f;if(!J.latest||!Array.isArray(J.history))return;let Z=J.latest,Q=J.history.filter((W)=>!!W&&typeof W==="object"&&typeof W.ref==="string"&&typeof W.createdAt==="number"&&typeof W.runCount==="number");if(typeof Z.ref!=="string"||typeof Z.createdAt!=="number"||typeof Z.runCount!=="number")return;return{latest:Z,history:Q}}async function i1($,f){let J=await iU("git",["-C",$,...f],{windowsHide:!0});return{stdout:J.stdout.trim(),stderr:J.stderr.trim()}}async function D9($,f){if(!$)return;let J=`refs/cline/checkpoints/${f}/`;try{let{stdout:Z}=await i1($,["for-each-ref","--format=%(refname)",J]),Q=Z.trim().split(`
140
+ `).filter(Boolean);await Promise.allSettled(Q.map((W)=>i1($,["update-ref","-d",W])))}catch{}}async function MX($,f,J){if(!$||J.length===0)return;await Promise.allSettled(J.map((Z)=>i1($,["update-ref",`refs/cline/checkpoints/${f}/${Z.runCount}`,Z.ref])))}function aU($,f){let J=$.findIndex((Z)=>Z.runCount===f.runCount);if(J<0)return[...$,f];return $.map((Z,Q)=>Q===J?f:Z)}function yX($){let f=$.initialRunCount??0,J,Z=async()=>{if(J!==void 0)return J;try{J=(await i1($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{J=!1}return J},Q=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:f});if(!await Z())return;let W=async(Y)=>{try{let V=(await i1($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!V)return;return{ref:V,createdAt:Date.now(),runCount:f,kind:"commit"}}catch(A){R9($.logger,`${Y}: ${A instanceof Error?A.message:String(A)}`);return}},j=`cline checkpoint session=${$.sessionId} run=${f}`,X="";try{X=(await i1($.cwd,["stash","create",j])).stdout.trim()}catch(Y){return R9($.logger,`Checkpoint snapshot failed: ${Y instanceof Error?Y.message:String(Y)}`),W("Checkpoint HEAD fallback failed")}if(!X)return W("Checkpoint HEAD fallback failed");let H=`refs/cline/checkpoints/${$.sessionId}/${f}`;try{await i1($.cwd,["update-ref",H,X])}catch(Y){R9($.logger,`Checkpoint store failed: ${Y instanceof Error?Y.message:String(Y)}`);return}return{ref:X,createdAt:Date.now(),runCount:f,kind:"stash"}};return{beforeRun:async({snapshot:W})=>{if(W.parentAgentId!=null)return;f+=1;return},beforeModel:async({snapshot:W})=>{if(W.parentAgentId!=null||W.iteration!==1||f<1)return;let j=await Q();if(!j)return;let X=await $.readSessionMetadata(),H=nU(X);if(H?.latest.ref===j.ref)return;let Y=aU(H?.history??[],j);await $.writeSessionMetadata({...X??{},checkpoint:{latest:j,history:Y}});return}}}import{spawn as QR}from"node:child_process";import{appendFileSync as WR,readFileSync as jR}from"node:fs";import{join as XR}from"node:path";import{augmentNodeCommandForDebug as SX,withResolvedClineBuildEnv as z9}from"@cline/shared";import{ensureHookLogDir as qX}from"@cline/shared/storage";function tf($,f){if(!f)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:f}}import{existsSync as tU,readdirSync as sU}from"node:fs";import{basename as oU,extname as eU,join as $R}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as W6,resolveHooksConfigSearchPaths as fR}from"@cline/shared/storage";function k8($){return fR($)}var sf;((A)=>{A.TaskStart="TaskStart";A.TaskResume="TaskResume";A.TaskCancel="TaskCancel";A.TaskComplete="TaskComplete";A.TaskError="TaskError";A.PreToolUse="PreToolUse";A.PostToolUse="PostToolUse";A.UserPromptSubmit="UserPromptSubmit";A.PreCompact="PreCompact";A.SessionShutdown="SessionShutdown"})(sf||={});var I8={["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"},JR=new Map(Object.values(sf).map(($)=>[$.toLowerCase(),$])),ZR=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function x8($){let f=eU($).toLowerCase();if(!ZR.has(f))return;let J=oU($,f).trim().toLowerCase();return JR.get(J)}function Q1($){let f=[],J=new Set,Z=k8($).filter((Q)=>tU(Q));for(let Q of Z)try{for(let W of sU(Q,{withFileTypes:!0})){if(!W.isFile())continue;let j=x8(W.name);if(!j)continue;let X=$R(Q,W.name);if(J.has(X))continue;J.add(X),f.push({fileName:j,hookEventName:I8[j],path:X})}}catch{}return f.sort((Q,W)=>Q.path.localeCompare(W.path))}function X6($){if(!$||typeof $!=="object")return{};let f={};for(let[J,Z]of Object.entries($))f[J]=typeof Z==="string"?Z:JSON.stringify(Z);return f}function j6($,f,J){let Z=J instanceof Error?`: ${J.message}`:"",Q=`${f}${Z}`;if($){try{$.log(Q,{severity:"warn",...J!==void 0?{error:J}:{}})}catch{}return}console.warn(Q)}function HR($,f){if(!f)return $;if(!$)return{...f};let J=[$.context,f.context].filter((Q)=>typeof Q==="string"&&Q.length>0).join(`
141
+ `),Z=[...$.appendMessages??[],...f.appendMessages??[]];return{cancel:$.cancel===!0||f.cancel===!0?!0:void 0,review:$.review===!0||f.review===!0?!0:void 0,context:J||void 0,overrideInput:f.overrideInput!==void 0?f.overrideInput:$.overrideInput,systemPrompt:f.systemPrompt!==void 0?f.systemPrompt:$.systemPrompt,appendMessages:Z.length>0?Z:void 0}}function YR($){if(!$||typeof $!=="object")return;let f=$,J=typeof f.context==="string"?f.context:typeof f.contextModification==="string"?f.contextModification:typeof f.errorMessage==="string"?f.errorMessage:void 0;return{cancel:typeof f.cancel==="boolean"?f.cancel:void 0,review:typeof f.review==="boolean"?f.review:void 0,context:J,overrideInput:Object.hasOwn(f,"overrideInput")?f.overrideInput:void 0}}function L9($){let f=String($??"").toLowerCase();return f.includes("cancel")||f.includes("abort")||f.includes("interrupt")}function F0($,f){let J=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",Z={rootSessionId:f.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:Z,workspaceRoots:f.workspacePath?[f.workspacePath]:[],workspaceInfo:f.workspaceInfo,userId:J,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function AR($){let f=$.trim();if(!f)return{};let Z=f.split(`
142
+ `).map((W)=>W.trim()).filter(Boolean).filter((W)=>W.startsWith("HOOK_CONTROL\t")).map((W)=>W.slice(13)),Q=Z.length>0?Z[Z.length-1]:f;try{return{parsedJson:JSON.parse(Q)}}catch(W){return{parseError:W instanceof Error?W.message:"Failed to parse hook stdout JSON"}}}async function VR($,f){let J=$.stdin;if(!J)throw Error("hook command failed to create stdin");await new Promise((Z,Q)=>{let W=!1,j=()=>{J.off("error",H),J.off("finish",Y),$.off("close",A)},X=(V)=>{if(W)return;if(W=!0,j(),V){let B=V.code;if(B==="EPIPE"||B==="ERR_STREAM_DESTROYED"){Z();return}Q(V);return}Z()},H=(V)=>X(V),Y=()=>X(),A=()=>X();J.on("error",H),J.once("finish",Y),$.once("close",A);try{J.end(f)}catch(V){X(V)}})}async function hX($,f){if(f.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await wX($,f)}catch(J){let Z=GR(f.command,process.platform,J);if(!Z)throw J;return await wX($,{...f,command:Z})}}async function wX($,f){let J=SX(f.command,{env:f.env,debugRole:"hook"}),Z=QR(J[0],J.slice(1),{cwd:f.cwd,env:z9(f.env),stdio:f.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:f.detached}),Q=new Promise((B)=>{Z.once("spawn",()=>B())}),W=new Promise((B,K)=>{Z.once("error",(G)=>K(G))}),j=JSON.stringify($);if(await Promise.race([Q,W]),await VR(Z,j),f.detached){Z.unref();return}if(!Z.stdout||!Z.stderr)throw Error("hook command failed to create stdout/stderr");let X="",H="",Y=!1,A;Z.stdout.on("data",(B)=>{X+=B.toString()}),Z.stderr.on("data",(B)=>{H+=B.toString()});let V=new Promise((B)=>{if((f.timeoutMs??0)>0)A=setTimeout(()=>{Y=!0,Z.kill("SIGKILL")},f.timeoutMs);Z.once("close",(K)=>{if(A)clearTimeout(A);let{parsedJson:G,parseError:R}=AR(X);B({exitCode:K,stdout:X,stderr:H,parsedJson:G,parseError:R,timedOut:Y})})});return await Promise.race([V,W])}function BR($){try{let J=jR($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!J?.startsWith("#!"))return;let Z=J.slice(2).trim();if(!Z)return;let Q=Z.split(/\s+/).filter(Boolean);return Q.length>0?Q:void 0}catch{return}}function KR($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function GR($,f=process.platform,J){if(f!=="win32"||!KR(J))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function CX($){if($.length===0)return;let[f,...J]=$,Z=f.replace(/\\/g,"/").toLowerCase(),Q=Z.split("/").at(-1)??Z;if(Q==="env")return CX(J);if(Q==="bash"||Q==="sh"||Q==="zsh")return[Q,...J];if(Q==="python3"||Q==="python")return process.platform==="win32"?["py","-3",...J]:[Q,...J];return $}function PR($){let f=BR($);if(f&&f.length>0)return[...CX(f)??f,$];let J=$.toLowerCase();if(J.endsWith(".sh")||J.endsWith(".bash")||J.endsWith(".zsh"))return["bash",$];if(J.endsWith(".js")||J.endsWith(".mjs")||J.endsWith(".cjs"))return SX(["node",$],{debugRole:"hook"});if(J.endsWith(".ts")||J.endsWith(".mts")||J.endsWith(".cts"))return["bun","run",$];if(J.endsWith(".py"))return process.platform==="win32"?["py","-3",$]:["python3",$];if(J.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",$];return["bash",$]}function FR($){let f={};for(let J of Q1($)){if(!J.hookEventName)continue;let Z=J.hookEventName,Q=f[Z]??[];Q.push(PR(J.path)),f[Z]=Q}return f}async function UR($){let f;for(let J of $.commands){let Z=J.join(" ");try{let Q=await hX($.payload,{command:J,cwd:$.cwd,env:z9(process.env),detached:!1,timeoutMs:$.timeoutMs});if(Q?.timedOut){j6($.logger,`hook command timed out: ${Z}`);continue}if(Q?.parseError){j6($.logger,`hook command returned invalid JSON control output: ${Z} (${Q.parseError})`);continue}f=HR(f,YR(Q?.parsedJson))}catch(Q){j6($.logger,`hook command failed: ${Z}`,Q)}}return f}function n1($){for(let f of $.commands){let J=f.join(" ");hX($.payload,{command:f,cwd:$.cwd,env:z9(process.env),detached:!0}).catch((Z)=>{j6($.logger,`hook command failed: ${J}`,Z)})}}function W1($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function _9($,f){return{...W1($.snapshot),userMessage:f}}function EX($){return{...W1($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function bX($){return{...W1($.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 kX($){return $.filter((f)=>f.type==="text"&&typeof f.text==="string").map((f)=>f.text).join("")}function RR($){if(!$)return;let f={};if($.cancel===!0)f.stop=!0;if($.overrideInput!==void 0)f.input=$.overrideInput;return Object.keys(f).length>0?f:void 0}function of($){let f={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},J=(Z)=>{let Q=`${JSON.stringify({ts:new Date().toISOString(),...Z})}
143
+ `,j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??XR(qX(),"hooks.jsonl");qX(j),WR(j,Q,"utf8")};return{beforeRun:async(Z)=>{let Q=_9(Z,"");J({...F0(Q,f),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Z)=>{let Q=EX(Z);J({...F0(Q,f),hookName:"tool_call",iteration:Q.iteration,tool_call:{id:Q.call.id,name:Q.call.name,input:Q.call.input},preToolUse:{toolName:Q.call.name,parameters:X6(Q.call.input)}});return},afterTool:async(Z)=>{let Q=bX(Z);J({...F0(Q,f),hookName:"tool_result",iteration:Q.iteration,tool_result:Q.record,postToolUse:{toolName:Q.record.name,parameters:X6(Q.record.input),result:typeof Q.record.output==="string"?Q.record.output:JSON.stringify(Q.record.output),success:!Q.record.error,executionTimeMs:Q.record.durationMs}});return},afterRun:async({snapshot:Z,result:Q})=>{let W=W1(Z);if(Q.status==="completed"){J({...F0(W,f),hookName:"agent_end",iteration:Q.iterations,turn:{outputText:Q.outputText,status:Q.status},taskComplete:{taskMetadata:{}}});return}if(Q.status==="aborted"||L9(Q.error?.message)){J({...F0(W,f),hookName:"agent_abort",reason:Q.error?.message,taskCancel:{taskMetadata:{}}});return}if(Q.error)J({...F0(W,f),hookName:"agent_error",iteration:Q.iterations,error:{name:Q.error.name,message:Q.error.message,stack:Q.error.stack}})},onEvent:async(Z)=>{if(Z.type!=="message-added"||Z.message.role!=="user")return;let Q=_9({snapshot:Z.snapshot},kX(Z.message.content));J({...F0(Q,f),hookName:"prompt_submit",userPromptSubmit:{prompt:Q.userMessage,attachments:[]}})}}}function m8($){let f=FR($.workspacePath);if(!Object.values(f).some((V)=>V.length>0))return;let Z=async(V,B)=>{let K=f[B]??[];if(K.length===0)return;n1({commands:K,cwd:$.cwd,logger:$.logger,payload:B==="agent_resume"?{...F0(V,$),hookName:B,taskResume:{taskMetadata:{},previousState:{}}}:{...F0(V,$),hookName:B,taskStart:{taskMetadata:{}}}})},Q=async(V)=>{let B=f.prompt_submit??[];if(B.length>0)n1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...F0(V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:V.userMessage,attachments:[]}}})},W=async(V)=>{let B=f.tool_call??[];if(B.length===0)return;return UR({commands:B,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...F0(V,$),hookName:"tool_call",iteration:V.iteration,tool_call:{id:V.call.id,name:V.call.name,input:V.call.input},preToolUse:{toolName:V.call.name,parameters:X6(V.call.input)}}})},j=async(V)=>{let B=f.tool_result??[];if(B.length===0)return;n1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...F0(V,$),hookName:"tool_result",iteration:V.iteration,tool_result:V.record,postToolUse:{toolName:V.record.name,parameters:X6(V.record.input),result:typeof V.record.output==="string"?V.record.output:JSON.stringify(V.record.output),success:!V.record.error,executionTimeMs:V.record.durationMs}}})},X=async(V)=>{let B=f.agent_end??[];if(B.length===0)return;n1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...F0(V,$),hookName:"agent_end",iteration:V.iteration,turn:V.turn,taskComplete:{taskMetadata:{}}}})},H=async(V)=>{let B=f.agent_error??[];if(B.length===0)return;n1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...F0(V,$),hookName:"agent_error",iteration:V.iteration,error:{name:V.error.name,message:V.error.message,stack:V.error.stack}}})},Y=async(V)=>{if(L9(V.reason)){let K=f.agent_abort??[];if(K.length>0)n1({commands:K,cwd:$.cwd,logger:$.logger,payload:{...F0(V,$),hookName:"agent_abort",reason:V.reason,taskCancel:{taskMetadata:{}}}})}let B=f.session_shutdown??[];if(B.length===0)return;n1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...F0(V,$),hookName:"session_shutdown",reason:V.reason}})},A={};if((f.agent_start?.length??0)>0||(f.agent_resume?.length??0)>0||(f.prompt_submit?.length??0)>0){if((f.agent_start?.length??0)>0||(f.agent_resume?.length??0)>0)A.beforeRun=async(V)=>{let B=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await Z(W1(V.snapshot),B);return};if((f.prompt_submit?.length??0)>0)A.onEvent=async(V)=>{if(V.type!=="message-added"||V.message.role!=="user")return;await Q(_9({snapshot:V.snapshot},kX(V.message.content)))}}if((f.tool_call?.length??0)>0)A.beforeTool=async(V)=>{let B=await W(EX(V));return RR(B)};if((f.tool_result?.length??0)>0)A.afterTool=async(V)=>{await j(bX(V));return};if((f.agent_end?.length??0)>0)A.afterRun=async({snapshot:V,result:B})=>{if(B.status!=="completed")return;await X({...W1(V),iteration:B.iterations,turn:{outputText:B.outputText,status:B.status}})};if((f.agent_error?.length??0)>0||(f.agent_abort?.length??0)>0||(f.session_shutdown?.length??0)>0){let V=A.afterRun;A.afterRun=async(B)=>{await V?.(B);let{snapshot:K,result:G}=B;if(G.status==="aborted"||L9(G.error?.message)){await Y({...W1(K),reason:G.error?.message});return}if(G.error)await H({...W1(K),iteration:G.iterations,error:G.error})}}return A}function ef($){return tf("core.hook_config_files",m8($))}function a1($,f){let J=$.map((Z)=>Z[f]).filter((Z)=>typeof Z==="function");if(J.length===0)return;return async(Z)=>{let Q;for(let W of J){let j=await W(Z);if(!j||typeof j!=="object")continue;let X=j;Q={...Q??{},...X,stop:Q?.stop===!0||X.stop===!0?!0:X.stop,options:Q?.options||X.options?{...Q?.options??{},...X.options??{}}:void 0}}return Q}}function t1($){let f=$.filter((J)=>J!==void 0);if(f.length===0)return;return{beforeRun:a1(f,"beforeRun"),afterRun:a1(f,"afterRun"),beforeModel:a1(f,"beforeModel"),afterModel:a1(f,"afterModel"),beforeTool:a1(f,"beforeTool"),afterTool:a1(f,"afterTool"),onEvent:a1(f,"onEvent")}}var IX={};w(IX,{normalizeRuntimeCapabilities:()=>U0});function U0(...$){let f,J;for(let Q of $){if(!Q)continue;if(Q.toolExecutors)f={...f??{},...Q.toolExecutors};if(Q.requestToolApproval)J=Q.requestToolApproval}let Z=f&&Object.keys(f).length>0;if(!Z&&!J)return;return{...Z?{toolExecutors:f}:{},...J?{requestToolApproval:J}:{}}}var XH={};w(XH,{toProviderConfig:()=>m0,emptyStoredProviderSettings:()=>Y1,StoredProviderSettingsSchema:()=>Z2,StoredProviderSettingsEntrySchema:()=>b6,ProviderSettingsSchemaTyped:()=>i8});import{z as H1}from"zod";var jH={};w(jH,{toProviderConfig:()=>m0,safeParseSettings:()=>E6,safeCreateProviderConfig:()=>I9,parseSettings:()=>C6,normalizeProviderId:()=>J2,isBuiltInProviderId:()=>b9,createProviderConfig:()=>k9,SapSettingsSchema:()=>w6,ReasoningSettingsSchema:()=>N6,ProviderSettingsSchema:()=>X1,ProviderProtocolSchema:()=>z6,ProviderIdSchema:()=>r8,ProviderClientSchema:()=>O6,OcaSettingsSchema:()=>S6,ModelCatalogSettingsSchema:()=>h6,GcpSettingsSchema:()=>y6,BUILT_IN_PROVIDER_IDS:()=>E9,BUILT_IN_PROVIDER:()=>p8,AzureSettingsSchema:()=>q6,AwsSettingsSchema:()=>M6,AuthSettingsSchema:()=>T6});import*as x0 from"@cline/llms";import{z as y}from"zod";L0();var oX={};w(oX,{refreshOcaToken:()=>v8,loginOcaOAuth:()=>$2,getValidOcaCredentials:()=>u8,generateOcaOpcRequestId:()=>V6,createOcaRequestHeaders:()=>M9,createOcaOAuthProvider:()=>N9,OCI_HEADER_OPC_REQUEST_ID:()=>pX,DEFAULT_INTERNAL_OCA_BASE_URL:()=>H6,DEFAULT_INTERNAL_IDCS_URL:()=>vX,DEFAULT_INTERNAL_IDCS_SCOPES:()=>uX,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>gX,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>Y6,DEFAULT_EXTERNAL_IDCS_URL:()=>dX,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>lX,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>cX});import{nanoid as mX}from"nanoid";class O9{ttlMs;maxEntries;entries=new Map;constructor($,f){this.ttlMs=$;this.maxEntries=f}get($,f=Date.now()){this.pruneExpired(f);let J=this.entries.get($);if(!J)return;return this.entries.delete($),this.entries.set($,J),J.value}set($,f,J=Date.now(),Z=this.ttlMs){this.pruneExpired(J),this.entries.delete($);while(this.entries.size>=this.maxEntries){let Q=this.entries.keys().next().value;if(Q===void 0)break;this.entries.delete(Q)}this.entries.set($,{value:f,expiresAt:J+Z})}pruneExpired($){for(let[f,J]of this.entries)if(J.expiresAt<=$)this.entries.delete(f)}}var xX={};w(xX,{startLocalOAuthServer:()=>e0});function DR(){let $;return{promise:new Promise((J)=>{$=J}),resolve:$}}async function e0($){let f=await import("node:http"),J=$.host??"127.0.0.1",Z=$.timeoutMs??300000,Q=$.successHtml??LR,W=DR(),j=!1,X=null,H=null,Y=null,A=(K)=>{if(j)return;j=!0,W.resolve(K)},V=()=>{if(X)clearTimeout(X),X=null;let K=Y;if(Y=null,H)H.close(),H=null;if(K!==null&&$.onClose)Promise.resolve($.onClose({host:J,port:K})).catch(()=>{})},B=async()=>{return X=setTimeout(()=>{V(),A(null)},Z),W.promise};for(let K of $.ports){let G=f.createServer((P,F)=>{try{let U=new URL(P.url||"",`http://${J}:${K}`);if(U.pathname!==$.callbackPath){F.statusCode=404,F.end("Not found");return}let z={url:U,code:U.searchParams.get("code")??void 0,state:U.searchParams.get("state")??void 0,provider:U.searchParams.get("provider")??void 0,error:U.searchParams.get("error")??void 0};if(z.error){F.statusCode=400,F.end(`Authentication failed: ${z.error}`),V(),A(z);return}if(!z.code){F.statusCode=400,F.end("Missing authorization code");return}if($.expectedState&&z.state!==$.expectedState){F.statusCode=400,F.end("State mismatch");return}F.statusCode=200,F.setHeader("Content-Type","text/html; charset=utf-8"),F.end(Q),V(),A(z)}catch{F.statusCode=500,F.end("Internal error")}}),R=await new Promise((P)=>{let F=(U)=>{G.off("error",F),P({bound:!1,error:U})};G.once("error",F),G.listen(K,J,()=>{G.off("error",F),H=G,P({bound:!0})})});if(R.error){if(R.error.code==="EADDRINUSE")continue;throw V(),R.error}if(R.bound){Y=K;let P=`http://${J}:${K}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:J,port:K,callbackUrl:P})).catch(()=>{});return{callbackUrl:P,waitForCallback:B,cancelWait:()=>{V(),A(null)},close:()=>{V(),A(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var LR=`<!DOCTYPE html>
144
144
  <html lang="en">
145
145
  <head>
146
146
  <meta charset="utf-8">
@@ -181,65 +181,65 @@ ${Z}`,platform:J.clinePlatform,metadata:J.workspaceMetadata})}function pf($,J){l
181
181
  </div>
182
182
  <script>setTimeout(() => window.close(), 3000);</script>
183
183
  </body>
184
- </html>`;var zX="a8331954c0cf48ba99b5dd223a14c6ea",OX="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",_X="openid offline_access",o6="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",TX="c1aba3deed5740659981a752714eba33",NX="https://login-ext.identity.oraclecloud.com",MX="openid offline_access",e6="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",qX="opc-request-id",eR="/auth/oca",$D=Array.from({length:11},($,J)=>48801+J),JD=300000,ZD=30000,yX=30000,QD=600000;class $5 extends Error{status;errorCode;constructor($,J){super($);this.name="OcaOAuthTokenError",this.status=J?.status,this.errorCode=J?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var $1={internal:{clientId:zX,idcsUrl:OX,scopes:_X,baseUrl:o6},external:{clientId:TX,idcsUrl:NX,scopes:MX,baseUrl:e6}},wJ=new Map,WD=86400000,fD=300000,jD=32,K9=new B9(WD,jD);function wX($){if(typeof $==="function")return $();return $??"internal"}function SX($){return{internal:{clientId:$?.internal?.clientId??$1.internal.clientId,idcsUrl:$?.internal?.idcsUrl??$1.internal.idcsUrl,scopes:$?.internal?.scopes??$1.internal.scopes,baseUrl:$?.internal?.baseUrl??$1.internal.baseUrl},external:{clientId:$?.external?.clientId??$1.external.clientId,idcsUrl:$?.external?.idcsUrl??$1.external.idcsUrl,scopes:$?.external?.scopes??$1.external.scopes,baseUrl:$?.external?.baseUrl??$1.external.baseUrl}}}function XD($=Date.now()){let J=$-QD;for(let[Z,Q]of wJ.entries())if(Q.createdAt<J)wJ.delete(Z)}function HD($,J,Z){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let W=z0(J)?.exp;if(typeof W==="number"&&W>0)return W*1000;let j=z0(Z)?.exp;if(typeof j==="number"&&j>0)return j*1000;return Date.now()+3600000}function CX($,J,Z){let Q=$.access_token;if(!Q)throw Error("Token response did not include an access token");let W=$.refresh_token??Z?.refresh;if(!W)throw Error("Token response did not include a refresh token");let f=z0($.id_token),j=z0(Q),X=f?.sub??j?.sub,H=f?.email??j?.email;return{access:Q,refresh:W,expires:HD($,Q,$.id_token),accountId:X??Z?.accountId,email:H??Z?.email,metadata:{...Z?.metadata??{},provider:"oca",mode:J,subject:X,idToken:$.id_token}}}async function EX($,J){let Z=b6($),Q=K9.get(Z);if(Q)return Q;let W=`${Z}/.well-known/openid-configuration`,f=await fetch(W,{method:"GET",signal:AbortSignal.timeout(J)});if(!f.ok){let H=`${Z}/oauth2/v1/token`;return K9.set(Z,H,Date.now(),fD),H}let X=(await f.json()).token_endpoint||`${Z}/oauth2/v1/token`;return K9.set(Z,X),X}function hX($){return{code:$.error,message:$.error_description}}async function YD($){let J=wJ.get($.state);if(!J)throw Error("No PKCE verifier found for this state");wJ.delete($.state);let Z=$.mode==="external"?$.config.external:$.config.internal,Q=await EX(Z.idcsUrl,$.requestTimeoutMs),W=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:J.redirectUri,client_id:Z.clientId,code_verifier:J.verifier}),f=await fetch(Q,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:W,signal:AbortSignal.timeout($.requestTimeoutMs)}),j=await f.json();if(!f.ok){let H=hX(j);throw new $5(`Token exchange failed: ${f.status}${H.message?` - ${H.message}`:""}`,{status:f.status,errorCode:H.code})}let X=z0(j.id_token);if(!j.id_token||!X)throw Error("No ID token received from OCA");if(X.nonce!==J.nonce)throw Error("OIDC nonce verification failed");return CX(j,$.mode)}function AD($){let J=$.mode==="external"?$.config.external:$.config.internal,Z=new URL(`${b6(J.idcsUrl)}/oauth2/v1/authorize`);return Z.searchParams.set("client_id",J.clientId),Z.searchParams.set("response_type","code"),Z.searchParams.set("scope",J.scopes),Z.searchParams.set("code_challenge",$.challenge),Z.searchParams.set("code_challenge_method","S256"),Z.searchParams.set("redirect_uri",$.callbackUrl),Z.searchParams.set("state",$.state),Z.searchParams.set("nonce",$.nonce),Z.toString()}async function r2($){R$($.telemetry,"oca");let J=SX($.config),Z=wX($.mode),Q=$.callbackPorts?.length?$.callbackPorts:$D,W=$.callbackPath??eR,f=$.requestTimeoutMs??yX,j=await s0({ports:Q,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=j.callbackUrl;if(!X)throw Error("Unable to bind local OAuth callback server");let H=LX(16),Y=LX(16),{verifier:A,challenge:V}=await h6();XD(),wJ.set(H,{verifier:A,nonce:Y,mode:Z,redirectUri:X,createdAt:Date.now()});let B=AD({callbackUrl:X,mode:Z,state:H,nonce:Y,challenge:V,config:J});$.callbacks.onAuth({url:B,instructions:"Continue the authentication process in your browser."});try{let K=await k2({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),G=K.code,D=K.state;if(K.error)throw Error(`OAuth error: ${K.error}`);if(!G){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!D||D!==H)throw Error("State mismatch");let F=await YD({code:G,state:D,mode:Z,config:J,requestTimeoutMs:f});return D$($.telemetry,"oca"),L$($.telemetry,{id:F.accountId,email:F.email,provider:"oca"}),F}catch(K){throw P$($.telemetry,"oca",K instanceof Error?K.message:String(K)),K}finally{j.close()}}async function SJ($,J={}){let Z=SX(J.config),Q=J.requestTimeoutMs??yX,W=$.metadata?.mode,f=W==="internal"||W==="external"?W:wX(J.mode),j=f==="external"?Z.external:Z.internal,X=await EX(j.idcsUrl,Q),H=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:j.clientId}),Y=await fetch(X,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:H,signal:AbortSignal.timeout(Q)}),A=await Y.json();if(!Y.ok){let V=hX(A);throw new $5(`Token refresh failed: ${Y.status}${V.message?` - ${V.message}`:""}`,{status:Y.status,errorCode:V.code})}return CX(A,f,$)}async function CJ($,J,Z){if(!$)return null;let Q=J?.refreshBufferMs??Z?.refreshBufferMs??JD,W=J?.retryableTokenGraceMs??Z?.retryableTokenGraceMs??ZD;if(J?.forceRefresh!==!0&&!b1($,Q))return $;try{return await SJ($,Z)}catch(j){if(j instanceof $5&&j.isLikelyInvalidGrant())return g$(Z?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}function G9($={}){return{id:"oca",name:"Oracle Code Assist",usesCallbackServer:!0,async login(J){return r2({...$,callbacks:J})},async refreshToken(J){return SJ(J,$)},getApiKey(J){return J.access}}}async function J5($,J){let Z=new TextEncoder,Q=async(Y)=>{let A=await crypto.subtle.digest("SHA-256",Z.encode(Y));return Array.from(new Uint8Array(A).slice(0,4),(V)=>V.toString(16).padStart(2,"0")).join("")},[W,f]=await Promise.all([Q(J),Q($)]),j=Math.floor(Date.now()/1000).toString(16).padStart(8,"0"),X=new Uint32Array(1);crypto.getRandomValues(X);let H=(X[0]??0).toString(16).padStart(8,"0");return W+f+j+H}async function F9($){let J=await J5($.taskId,$.accessToken);return{Authorization:`Bearer ${$.accessToken}`,"Content-Type":"application/json",client:$.metadata?.client??"Cline","client-version":$.metadata?.clientVersion??"unknown","client-ide":$.metadata?.clientIde??"unknown","client-ide-version":$.metadata?.clientIdeVersion??"unknown",[qX]:J}}var uX={};w(uX,{resolveProviderConfig:()=>bJ,getProviderConfig:()=>V5,getLiveModelsCatalog:()=>i2,clearPublicModelsCatalogCache:()=>CD,clearPrivateModelsCatalogCache:()=>z9,clearLiveModelsCatalogCache:()=>L9,OPENAI_COMPATIBLE_PROVIDERS:()=>hJ,DEFAULT_MODELS_CATALOG_URL:()=>X5});import*as H0 from"@cline/llms";function U9($){if(!Array.isArray($))return[];return $.map((J)=>{if(typeof J==="string")return J.trim();if(J&&typeof J==="object"){let Z=J;for(let Q of[Z.id,Z.name,Z.model])if(typeof Q==="string"&&Q.trim())return Q.trim()}return""}).filter((J)=>J.length>0)}function VD($,J){let Z=U9($);if(Z.length>0)return Z;if(!$||typeof $!=="object")return[];let Q=$,W=U9(Q.data??Q.models);if(W.length>0)return W;if(Q.models&&typeof Q.models==="object"&&!Array.isArray(Q.models)){let j=Object.keys(Q.models).filter((X)=>X.trim().length>0);if(j.length>0)return j}let f=Q.providers?.[J];if(f&&typeof f==="object"){let X=U9(f.models??f);if(X.length>0)return X}return[]}async function Z5($,J){let Z=await fetch($,{method:"GET"});if(!Z.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Z.status}`);return VD(await Z.json(),J)}function kX($){return $.replace(/\/+$/,"")}function Q5($,J,Z){let Q=Z?.trim();if(!Q)return;let W=$?.trim();if(!W||!J?.trim())return Q;try{let f=new URL(Q),j=new URL(J),X=new URL(W);if(f.origin!==j.origin)return Q;let H=kX(j.pathname),Y=kX(X.pathname);if(H&&f.pathname.startsWith(`${H}/`)){let A=f.pathname.slice(H.length);X.pathname=`${Y}${A}`}else X.pathname=f.pathname;return X.search=f.search,X.hash=f.hash,X.toString()}catch{return Q}}function BD($){return Object.fromEntries(Object.entries($).map(([J,Z])=>[J,{...Z}]))}function KD($){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 GD=Object.values(H0.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:BD($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),xX=Object.fromEntries(GD.map(($)=>[$.id,$]));function FD($){return xX[$]}function UD(){return Object.fromEntries(Object.entries(xX).filter(([,$])=>KD($)))}function mX($=[]){let J=$.flatMap((Z)=>{switch(Z){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Z];default:return[]}});return J.length>0?J:void 0}var X5="https://models.dev/api.json",RD=600000,gX=300000,DD=5000,j5=new Map,EJ=new Map,R9=new Map,W5=new Map;async function PD(){return H0.getGeneratedProviderModels()}async function LD($,J={},Z={},Q={},W={},f={}){let j=await PD(),X=H0.resolveProviderModelCatalogKeys($),H=Object.assign({},...X.map((V)=>j[V]??{})),Y=Boolean(H0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),A=Object.keys(W).length>0;if(Y&&A)return H0.sortModelsByReleaseDate({...W,...f});if($==="openai-codex")return H0.sortModelsByReleaseDate({...J,...H0.filterOpenAICodexModels(Z),...W,...f});return H0.sortModelsByReleaseDate({...H,...J,...Z,...Q,...W,...f})}function zD($,J){let Z=H0.resolveProviderModelCatalogKeys($);return Object.assign({},...Z.map((Q)=>J[Q]??{}))}function H5($){let J=$?.trim();return J&&J.length>0?J:""}function P9($){let J=$.apiKey?.trim()||$.accessToken?.trim();return J&&J.length>0?J:void 0}function OD($){let J=2166136261;for(let Z=0;Z<$.length;Z+=1)J^=$.charCodeAt(Z),J+=(J<<1)+(J<<4)+(J<<7)+(J<<8)+(J<<24);return(J>>>0).toString(16)}function _D($,J){return`${$}:${H5(J.baseUrl)}:${OD(P9(J)??"")}`}async function Y5($,J,Z=DD){let Q=new AbortController,W=setTimeout(()=>Q.abort(),Z);try{return await fetch($,{...J,signal:Q.signal})}finally{clearTimeout(W)}}function l1($,J,Z){if(Z&&!$.includes(J))$.push(J)}function A5($,J){let Z=["streaming","tools"];return l1(Z,"images",Boolean(J.supportsImages)),l1(Z,"prompt-cache",Boolean(J.supportsPromptCache)),l1(Z,"reasoning",Boolean(J.supportsReasoning)),{id:$,name:J.name??$,contextWindow:J.contextWindow,maxInputTokens:J.maxInputTokens,maxTokens:J.maxTokens,capabilities:Z,releaseDate:J.releaseDate,status:"active"}}async function TD($,J){let Z=await Y5("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${J}`,"Content-Type":"application/json"}});if(!Z.ok)throw Error(`Baseten model refresh failed: HTTP ${Z.status}`);let W=(await Z.json())?.data??[],f={};for(let j of W){let X=j.id?.trim();if(!X)continue;if(X.includes("whisper")||X.includes("tts")||X.includes("embedding"))continue;let H=j.supported_features??[];f[X]=A5(X,{name:X,contextWindow:j.context_length,maxInputTokens:j.context_length,maxTokens:j.max_completion_tokens,supportsReasoning:H.includes("reasoning")||H.includes("reasoning_effort"),supportsImages:!1})}return f}function IX($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let J=Number($);return Number.isFinite(J)?J:void 0}return}async function ND($,J){let Z=await Y5("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":J}});if(!Z.ok)throw Error(`Hicap model refresh failed: HTTP ${Z.status}`);let W=(await Z.json())?.data??[],f={};for(let j of W){let X=j.id?.trim();if(!X)continue;f[X]=A5(X,{name:X,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return f}async function MD($,J){let Q=`${(H5($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,W=await Y5(Q,{method:"GET",headers:{Authorization:`Bearer ${J}`,accept:"application/json"}});if(!W.ok)throw Error(`Poolside model refresh failed: HTTP ${W.status}`);let j=(await W.json())?.data??[],X={};for(let H of j){let Y=H.id?.trim();if(!Y)continue;let A=H.supported_features??[],V=H.supported_sampling_parameters??[],B=H.input_modalities??[],K=["streaming"];l1(K,"tools",A.includes("tools")),l1(K,"reasoning",A.includes("reasoning")),l1(K,"temperature",V.includes("temperature")),l1(K,"images",B.includes("image"));let G={input:IX(H.pricing?.prompt),output:IX(H.pricing?.completion)};X[Y]={id:Y,name:H.name??Y,description:H.description,contextWindow:H.context_length,maxInputTokens:H.context_length,maxTokens:H.max_completion_tokens,capabilities:K,pricing:G.input!==void 0||G.output!==void 0?G:void 0,status:"active"}}return X}function qD($){let J=H5($);if(!J)return"http://localhost:4000";return J.endsWith("/v1")?J.slice(0,-3):J}async function yD($,J){let Q=`${qD($.baseUrl)}/v1/model/info`,W=async(Y)=>Y5(Q,{method:"GET",headers:{accept:"application/json",...Y}}),f=await W({"x-litellm-api-key":J});if(!f.ok)f=await W({Authorization:`Bearer ${J}`});if(!f.ok)throw Error(`LiteLLM model refresh failed: HTTP ${f.status}`);let X=(await f.json())?.data??[],H={};for(let Y of X){let A=Y.model_name?.trim(),B=Y.litellm_params?.model?.trim()||A;if(!B)continue;let K=Y.model_info,G=A5(B,{name:A??B,maxTokens:K?.max_output_tokens??K?.max_tokens,maxInputTokens:K?.max_input_tokens??K?.max_tokens,supportsImages:K?.supports_vision,supportsPromptCache:K?.supports_prompt_caching,supportsReasoning:K?.supports_reasoning});if(H[B]=G,A)H[A]={...G,id:A,name:A}}return H}var vX={baseten:TD,hicap:ND,litellm:yD,poolside:MD},D9=new Map,f5=new Map;function wD($,J){return`${$}:${H5(J.baseUrl)}`}async function SD($,J,Z){let Q=H0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],W=Q5(Z.baseUrl,Q?.provider.baseUrl,Q?.provider.modelsSourceUrl);if(!W)return{};let f=J?.cacheTtlMs??gX,j=wD($,Z),X=Date.now(),H=D9.get(j);if(H&&H.expiresAt>X)return H.data;let Y=f5.get(j);if(Y)return Y;let A=Z5(W,$).then((V)=>{let B=Object.fromEntries(V.map((K)=>[K,A5(K,{name:K})]));return D9.set(j,{data:B,expiresAt:X+f}),B}).finally(()=>{f5.delete(j)});return f5.set(j,A),A}function CD(){D9.clear(),f5.clear()}async function ED($,J){let Z=P9(J);if(!Z)return{};let Q=vX[$];if(!Q)return{};return Q(J,Z)}function hD($,J,Z){if(!Z)return!1;if(!vX[$])return!1;if(J?.loadPrivateOnAuth===!1)return!1;return Boolean(P9(Z))}async function bD($,J,Z){let Q=J?.cacheTtlMs??gX,W=_D($,Z),f=Date.now(),j=R9.get(W);if(j&&j.expiresAt>f)return j.data;let X=W5.get(W);if(X)return X;let H=ED($,Z).then((Y)=>{return R9.set(W,{data:Y,expiresAt:f+Q}),Y}).finally(()=>{W5.delete(W)});return W5.set(W,H),H}async function kD($){return H0.fetchModelsDevProviderModels($,globalThis.fetch)}async function i2($={}){let J=$.url??X5,Z=$.cacheTtlMs??RD,Q=Date.now(),W=j5.get(J);if(W&&W.expiresAt>Q)return W.data;let f=EJ.get(J);if(f)return f;let j=kD(J).then((X)=>{return j5.set(J,{data:X,expiresAt:Q+Z}),X}).finally(()=>{EJ.delete(J)});return EJ.set(J,j),j}function L9($){if($){j5.delete($),EJ.delete($);return}j5.clear(),EJ.clear()}function z9(){R9.clear(),W5.clear()}function ID($){return Object.fromEntries(Object.entries($).map(([J,Z])=>[J,{baseUrl:Z.baseUrl,modelId:Z.modelId,capabilities:mX(Z.capabilities)}]))}var hJ=ID(UD());function V5($){let J=FD($);if(!J)return;return{baseUrl:J.baseUrl||void 0,modelId:J.modelId,knownModels:J.knownModels,capabilities:mX(J.capabilities)}}async function bJ($,J,Z){let Q=V5($);if(!Q)return;try{let W=J?.loadLatestOnInit?await i2(J):void 0,f=W?zD($,W):{},j=Z&&hD($,J,Z)?await bD($,J,Z):{},H=Boolean(H0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Z??{providerId:$,modelId:Q.modelId,baseUrl:Q.baseUrl}:Z,Y=H?await SD($,J,H).catch(()=>({})):{},A=await LD($,Q.knownModels,f,j,Y,Z?.knownModels);return{...Q,knownModels:A}}catch(W){if(J?.failOnError)throw W;return Q}}var kJ=I0.BUILT_IN_PROVIDER,O9=I0.BUILT_IN_PROVIDER_IDS,_9=I0.isBuiltInProviderId,n2=I0.normalizeProviderId,IJ=q.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),B5=q.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),K5=q.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),G5=q.object({apiKey:q.string().optional(),accessToken:q.string().optional(),refreshToken:q.string().optional(),expiresAt:q.number().int().positive().optional(),accountId:q.string().optional()}),xD=q.enum(["none","low","medium","high","xhigh"]),F5=q.object({enabled:q.boolean().optional(),effort:xD.optional(),budgetTokens:q.number().int().positive().optional()}),U5=q.object({accessKey:q.string().optional(),secretKey:q.string().optional(),sessionToken:q.string().optional(),region:q.string().optional(),profile:q.string().optional(),authentication:q.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:q.boolean().optional(),useCrossRegionInference:q.boolean().optional(),useGlobalInference:q.boolean().optional(),endpoint:q.string().url().optional(),customModelBaseId:q.string().optional()}),R5=q.object({projectId:q.string().optional(),region:q.string().optional()}),D5=q.object({apiVersion:q.string().optional(),useIdentity:q.boolean().optional()}),P5=q.object({clientId:q.string().optional(),clientSecret:q.string().optional(),tokenUrl:q.string().url().optional(),resourceGroup:q.string().optional(),deploymentId:q.string().optional(),useOrchestrationMode:q.boolean().optional(),api:q.enum(["orchestration","foundation-models"]).optional(),defaultSettings:q.record(q.string(),q.unknown()).optional()}),L5=q.object({mode:q.enum(["internal","external"]).optional(),usePromptCache:q.boolean().optional()}),z5=q.object({loadLatestOnInit:q.boolean().optional(),loadPrivateOnAuth:q.boolean().optional(),url:q.string().url().optional(),cacheTtlMs:q.number().int().positive().optional(),failOnError:q.boolean().optional()}),J1=q.object({provider:IJ,apiKey:q.string().optional(),auth:G5.optional(),model:q.string().optional(),protocol:B5.optional(),client:K5.optional(),routingProviderId:IJ.optional(),maxTokens:q.number().int().positive().optional(),contextWindow:q.number().int().positive().optional(),baseUrl:q.string().url().optional(),headers:q.record(q.string(),q.string()).optional(),timeout:q.number().int().positive().optional(),reasoning:F5.optional(),aws:U5.optional(),gcp:R5.optional(),azure:D5.optional(),sap:P5.optional(),oca:L5.optional(),region:q.string().optional(),apiLine:q.enum(["china","international"]).optional(),capabilities:q.array(q.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:z5.optional()});function O5($){return J1.parse($)}function _5($){return J1.safeParse($)}function mD($){return $.protocol==="openai-responses"||$.client==="openai"}function x0($,J={}){let Z=$.provider,Q=n2(Z),W=J.includeKnownModels!==!1,f=$.reasoning?.effort||"none",j=f==="none"?void 0:f,X=hJ[Q],H=Object.assign({},...I0.resolveProviderModelCatalogKeys(Q).map((D)=>I0.getGeneratedModelsForProvider(D))),Y=Object.keys(H)[0],A=$.auth?.accessToken??$.apiKey??$.auth?.apiKey,V=$.baseUrl??(Q==="oca"?$.oca?.mode==="internal"?o6:e6:X?.baseUrl),B=$.routingProviderId??(mD($)&&Q!==kJ.OPENAI_NATIVE?kJ.OPENAI_NATIVE:void 0),K=W?X?.knownModels??(Object.keys(H).length>0?H:void 0):void 0,G={providerId:Z,clientType:$.client,routingProviderId:B,modelId:$.model??X?.modelId??Y??"default",...W?{knownModels:K}:{},apiKey:A,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:V,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:j,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??X?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(G).filter(([D,F])=>F!==void 0))}function T9($){let J=O5($);return x0(J)}function N9($){let J=_5($);if(J.success)return{success:!0,config:x0(J.data)};return{success:!1,error:J.error}}var xJ=J1;var T5=Z1.object({settings:J1,updatedAt:Z1.string().datetime(),tokenSource:Z1.enum(["manual","oauth","migration"]).default("manual")}),a2=Z1.object({version:Z1.literal(1),lastUsedProvider:Z1.string().min(1).optional(),providers:Z1.record(Z1.string(),T5)});function Q1(){return{version:1,providers:{}}}y$();var iX={};w(iX,{InMemoryWorkspaceManager:()=>s2});import{upsertWorkspaceInfo as cD,WorkspaceManifestSchema as q9}from"@cline/shared";var rX={};w(rX,{normalizeWorkspacePath:()=>w$,generateWorkspaceInfoWithDiagnostics:()=>mJ,generateWorkspaceInfo:()=>t2,buildWorkspaceMetadataWithInfo:()=>M9,buildWorkspaceMetadata:()=>gJ});import{basename as gD,resolve as vD}from"node:path";import{performance as lX}from"node:perf_hooks";import{processWorkspaceInfo as pX}from"@cline/shared";import uD from"simple-git";function w$($){return vD($)}async function t2($){return(await mJ($)).info}function N5($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function mJ($){let J=w$($),Z={rootPath:J,hint:gD(J)},Q;try{let W=uD({baseDir:J});if(!await W.checkIsRepo())return{info:Z,vcsType:"none"};try{let j=await W.getRemotes(!0);if(j.length>0){let X=j.map((H)=>{let Y=H.refs.fetch||H.refs.push;return`${H.name}: ${Y}`});Z.associatedRemoteUrls=X}}catch(j){Q??=N5(j)}try{let j=(await W.revparse(["HEAD"])).trim();if(j.length>0)Z.latestGitCommitHash=j}catch(j){Q??=N5(j)}try{let j=(await W.branch()).current.trim();if(j.length>0)Z.latestGitBranchName=j}catch(j){Q??=N5(j)}return{info:Z,vcsType:"git",error:Q}}catch(W){return{info:Z,vcsType:"none",error:N5(W)}}}async function gJ($){let J=await t2($);return pX(J)}async function M9($){let J=lX.now(),Z=await mJ($),Q=lX.now()-J,W=Z.info;return{workspaceInfo:W,workspaceMetadata:pX(W),durationMs:Q,vcsType:Z.vcsType,initError:Z.error}}class s2{manifest;listeners=new Set;constructor($){this.manifest=q9.parse($??{workspaces:{}})}async addWorkspacePath($){let J=await t2($);return this.manifest=cD(this.manifest,J),this.emit({type:"workspace_added",workspace:J}),J}async switchWorkspace($){let J=w$($),Z=this.manifest.workspaces[J];if(Z)return this.manifest=q9.parse({...this.manifest,currentWorkspacePath:J}),this.emit({type:"workspace_switched",workspace:Z}),Z;let Q=await this.addWorkspacePath(J);return this.manifest=q9.parse({...this.manifest,currentWorkspacePath:Q.rootPath}),this.emit({type:"workspace_switched",workspace:Q}),Q}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let J=w$($);return this.manifest.workspaces[J]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let J of this.listeners)J($)}}L0();import{createHash as dD}from"node:crypto";var nX=new Set,aX=new Set;function lD($){return dD("sha256").update($).digest("hex")}function pD($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function tX($){if(!$.telemetry)return;let J=lD($.rootPath),Z=$.rootCount??1;if(!nX.has(J))nX.add(J),$6($.telemetry,{root_count:Z,vcs_types:pD($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!aX.has(J)){aX.add(J);let Q=Error($.initError.message);Q.name=$.initError.errorType||"Error",J6($.telemetry,Q,{fallback_to_single_root:!0,workspace_count:Z})}}function iD($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function nD($,J,Z){if(J.length>0)for(let f of J)Z?.log(f.message,{severity:"warn"});if($.length===0)return;let Q=$.slice(0,3).map(iD).join("; "),W=$.length>3?`; and ${$.length-3} more`:"";Z?.log(`Some plugins failed to initialize. ${Q}${W}. Use --verbose for more details.`,{severity:"warn"});for(let f of $)Z?.log(`Plugin initialization failed (${f.phase}) for ${f.pluginPath}`,{severity:"warn",stack:f.stack,pluginPath:f.pluginPath,pluginName:f.pluginName})}function aD($,J){let Z=typeof $.thinking==="boolean",Q=typeof $.reasoningEffort==="string";if(!Z&&!Q)return J;return{...J??{},...Z?{enabled:$.thinking}:{},...Q?{effort:$.reasoningEffort}:{}}}function sX($,J){return rD($,J)}function tD($){let J=0;for(let Z of $??[]){if(Z.role!=="user")continue;if(("metadata"in Z&&Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0)?.kind==="recovery_notice")continue;J+=1}return J}function sD($){let J={...$.storedHeaders??{},...$.configHeaders??{}},Z=$.accountId?.trim()||oD($.accessToken);if(J.originator="cline",J.session_id=$.sessionId,J["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,Z)J["ChatGPT-Account-Id"]=Z;return J}function oD($){let J=$?.trim();if(!J)return;let Z=z0(J),Q=Z?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof Q==="string"&&Q.length>0)return Q;let W=Z?.organizations?.[0]?.id;if(typeof W==="string"&&W.length>0)return W;let f=Z?.chatgpt_account_id;if(typeof f==="string"&&f.length>0)return f;return}function eD($,J,Z,Q,W){let f=Z.getProviderSettings($.providerId),j=Q||f?.modelCatalog?{...Q??{},...f?.modelCatalog??{}}:void 0,X={...f??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??f?.apiKey,baseUrl:$.baseUrl??f?.baseUrl,headers:$.providerId==="openai-codex"?sD({sessionId:J,configHeaders:$.headers,storedHeaders:f?.headers,accountId:f?.auth?.accountId,accessToken:$.apiKey??f?.auth?.accessToken??f?.apiKey}):$.headers??f?.headers,reasoning:aD($,f?.reasoning),modelCatalog:j},H=x0(X);if($.knownModels)H.knownModels=$.knownModels;if($.extensionContext)H.extensionContext=$.extensionContext;let A=$.fetch??H.fetch??W;if(A)H.fetch=A;return H}async function oX($){let{input:J,sessionId:Z,providerSettingsManager:Q,defaultTelemetry:W,defaultCapabilities:f,defaultToolPolicies:j,defaultFetch:X,onPluginEvent:H,onTeamEvent:Y,createSpawnTool:A,localRuntime:V,readSessionMetadata:B,writeSessionMetadata:K}=$,G=t$(J.config),{modelCatalogDefaults:D,userInstructionService:F,configExtensions:U,onTeamRestored:R,...O}=V??{},_=Object.keys(O).length>0?O:void 0,{workspaceInfo:P,workspaceMetadata:z,durationMs:T,vcsType:y,initError:$0}=await M9(G),A0=_?.extensionContext,o={...A0??{},workspace:{...P,...A0?.workspace??{}},session:{...A0?.session??{},sessionId:Z},logger:A0?.logger??_?.logger,telemetry:A0?.telemetry??_?.telemetry??W};tX({telemetry:o.telemetry,rootPath:P.rootPath,workspaceInfo:P,rootCount:1,vcsType:y,durationMs:T,initError:$0,featureFlagEnabled:!0});let V0=p2({cwd:J.config.cwd,workspacePath:G,rootSessionId:Z,logger:_?.logger,workspaceInfo:P}),i=_j(_?.hooks)?void 0:l2({rootSessionId:Z,workspacePath:G,workspaceInfo:P}),$$=d1([_?.hooks,i]),p;if(sX(U,"plugins"))try{p=await u2({pluginPaths:_?.pluginPaths,workspacePath:G,cwd:J.config.cwd,onEvent:H,providerId:J.config.providerId,modelId:J.config.modelId,workspaceInfo:P,session:o.session,client:o.client,user:o.user,logger:o.logger,telemetry:o.telemetry,automation:o.automation}),nD(p.failures,p.warnings,_?.logger)}catch(b8){let r=b8 instanceof Error?b8.message:String(b8);_?.logger?.log?.(`plugin loading failed; continuing without plugins (${r})`)}let k=gQ(V0?[V0]:void 0,gQ(_?.extensions,v6(p?.extensions))),P0=sX(U,"plugins")?g1(p?.pluginPaths??[]):void 0,n={...J.config,..._??{},sessionId:Z,hooks:$$,extensions:k,extensionContext:o,telemetry:o.telemetry},n0=eD(n,Z,Q,D,X),R1=d1([n.hooks,n.checkpoint?.enabled===!0?YX({cwd:n.cwd,sessionId:Z,logger:n.logger,createCheckpoint:n.checkpoint?.createCheckpoint,initialRunCount:tD(J.initialMessages),readSessionMetadata:B,writeSessionMetadata:K}):void 0]),D1={...n,providerConfig:n0,workspaceMetadata:z,hooks:R1},F2=J.toolPolicies??n.toolPolicies??j,h8=R0(f,J.capabilities),o4=h8?.requestToolApproval,$Q=h8?.toolExecutors,U2=new s2({currentWorkspacePath:P.rootPath,workspaces:{[P.rootPath]:P}});return{effectiveInput:J,config:D1,providerConfig:n0,workspaceMetadata:z,workspaceInfo:P,extensions:k,hooks:R1,toolPolicies:F2,requestToolApproval:o4,pluginSandboxShutdown:p?.shutdown,runtimeBuilderInput:{config:D1,hooks:R1,extensions:k,onTeamEvent:Y,createSpawnTool:A,onTeamRestored:R,userInstructionService:F,pluginSkillDirectories:P0,configExtensions:U,toolExecutors:$Q,workspaceManager:U2,logger:D1.logger,telemetry:D1.telemetry}}}import{existsSync as q5,mkdirSync as $P,readdirSync as JP,rmdirSync as ZP,rmSync as QP,unlinkSync as WP}from"node:fs";import{dirname as eX,join as M5}from"node:path";function s(){return new Date().toISOString()}function vJ($){if(!$||!q5($))return;try{WP($)}catch{}}function fP($){let J=S2($);if(J)return{rootSessionId:J.rootSessionId,fileStem:`${J.agentId}__${J.teamTaskId}`};let Z=AJ($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:Z.agentId};return{rootSessionId:$,fileStem:$}}class y9{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return M5(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let J=this.sessionArtifactsDir($);if(!q5(J))$P(J,{recursive:!0});return J}sessionMessagesPath($){return M5(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,J=!1){let Z=J?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return M5(Z,`${$}.json`)}removeSessionDirIfEmpty($){let J=this.sessionArtifactsDir($),Z=this.ensureSessionsDir();while(J.startsWith(Z)&&J!==Z){if(!q5(J)){J=eX(J);continue}try{if(JP(J).length>0)break;ZP(J)}catch{break}J=eX(J)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!q5($))return;try{QP($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,J,Z){let{rootSessionId:Q,fileStem:W}=fP($),f=this.sessionArtifactsDir(Q);return{messagesPath:M5(f,`${W}.messages.json`)}}}import{resolveDocumentsExtensionPath as jP}from"@cline/shared/storage";L0();function $H($,J,Z,Q,W){if(Z)Q6($.telemetry,{ulid:J,apiProvider:$.providerId,...W});else Z6($.telemetry,{ulid:J,apiProvider:$.providerId,...W});XP($.telemetry,{workspacePath:Q})}function XP($,J){let Z=jP("Hooks"),Q=o$(J.workspacePath),W=new Map;for(let f of Q){let j=f.hookEventName??"unknown",X=W.get(j)??{global:0,workspace:0};if(f.path===Z||f.path.startsWith(`${Z}/`))X.global+=1;else X.workspace+=1;W.set(j,X)}for(let[f,j]of W.entries())K6($,f,j.global,j.workspace)}function JH($,J){for(let Z of J.mentions)V6($,Z,J.matchedFiles.includes(Z)?1:0,"file",!J.matchedFiles.includes(Z));for(let Z of J.matchedFiles)Y6($,"file",Z.length);for(let Z of J.ignoredMentions)A6($,"file","not_found",Z)}var pB={};w(pB,{ProviderSettingsManager:()=>F$});import{chmodSync as iB,existsSync as H3,mkdirSync as Uw,readFileSync as Rw,writeFileSync as Dw}from"node:fs";import{basename as nB,dirname as Y3}from"node:path";import{resolveProviderSettingsPath as Pw}from"@cline/shared/storage";var N={};w(N,{writeHubDiscovery:()=>QZ,writeGlobalSettings:()=>I2,withHubStartupLock:()=>WZ,verifyHubConnection:()=>H$,updateMcpServerOAuthState:()=>a1,updateLocalProvider:()=>vZ,truncateNotificationBody:()=>u4,toggleDisabledTool:()=>m6,toTeamProgressLifecycleEvent:()=>F8,toProviderConfig:()=>x0,toHubHealthUrl:()=>TW,toHookConfigFileName:()=>qJ,summarizeUsageFromMessages:()=>E2,stopLocalHubServerGracefully:()=>IW,startLocalOAuthServer:()=>s0,startHubWebSocketServer:()=>V2,startHubServer:()=>iV,startClineDeviceAuth:()=>b9,splitCoreSessionConfig:()=>K4,spawnDetachedHubServerWithRetry:()=>A8,spawnDetachedHubServer:()=>SW,setTelemetryOptOutGlobally:()=>Ej,setMcpServerDisabled:()=>i1,setDisabledTools:()=>rQ,setDisabledPlugin:()=>Ij,sendHubCommand:()=>oA,saveLocalProviderSettings:()=>d7,saveLocalProviderOAuthCredentials:()=>i7,sanitizeSessionToken:()=>C1,safeParseSettings:()=>_5,safeCreateProviderConfig:()=>N9,runSubprocessEvent:()=>P8,runHook:()=>z8,reviveTeamStateDates:()=>q6,restartLocalHubIfIdleAfterStartupTimeout:()=>XZ,resolveWorkspaceHubOwnerContext:()=>tY,resolveWorkflowsConfigSearchPaths:()=>Z4,resolveSkillsConfigSearchPaths:()=>$4,resolveSharedHubOwnerContext:()=>Y0,resolveSessionBackend:()=>J7,resolveRulesConfigSearchPaths:()=>J4,resolveProviderConfig:()=>bJ,resolvePluginSkillDirectoriesFromPaths:()=>g1,resolvePluginConfigSearchPaths:()=>_J,resolveMcpServerRegistrations:()=>f$,resolveLocalClineAuthToken:()=>n7,resolveHubUrl:()=>j7,resolveHubOwnerContext:()=>E$,resolveHubEndpointOptions:()=>c0,resolveHubBuildId:()=>A1,resolveHooksConfigSearchPaths:()=>NJ,resolveDisabledToolNames:()=>W$,resolveDisabledPluginPaths:()=>DJ,resolveDefaultMcpSettingsPath:()=>O0,resolveDefaultHubPort:()=>Y8,resolveDefaultHubPathname:()=>wW,resolveDefaultHubHost:()=>yW,resolveCoreSelectedToolIds:()=>w6,resolveCompatibleLocalHubUrl:()=>w4,resolveClineDir:()=>rY,resolveClineDataDir:()=>N4,resolveAndLoadAgentPlugins:()=>u2,resolveAgentPluginPaths:()=>m1,requestHubShutdown:()=>y4,requestDesktopToolApproval:()=>k7,rememberRecoverableLocalHubUrl:()=>V1,registerRemoteConfigSessionBlobUpload:()=>SZ,registerMcpServersFromSettingsFile:()=>t1,registerDisposable:()=>Bw,refreshProviderModelsFromSource:()=>l7,refreshOpenAICodexToken:()=>rJ,refreshOcaToken:()=>SJ,refreshClineToken:()=>lJ,readSessionCheckpointHistory:()=>c4,readRemoteConfigSessionBlobUploadMetadata:()=>M7,readHubDiscovery:()=>K0,readGlobalSettings:()=>Q$,probeHubServer:()=>X$,probeHubConnection:()=>sA,prewarmFileIndex:()=>L6,prewarmDetachedHubServer:()=>fZ,prepareRemoteConfigCoreIntegration:()=>y7,parseWorkflowConfigFromMarkdown:()=>eJ,parseUserCommandEnvelope:()=>Vw,parseSkillConfigFromMarkdown:()=>sJ,parseSettings:()=>O5,parseRuleConfigFromMarkdown:()=>oJ,parseHookEventPayload:()=>L8,openaiCodexOAuthProvider:()=>g9,normalizeWorkspacePath:()=>w$,normalizeUserInput:()=>Aw,normalizeSdkError:()=>Yw,normalizeRuntimeCapabilities:()=>R0,normalizeProviderId:()=>n2,normalizeOpenAICodexCredentials:()=>m9,normalizeOAuthProvider:()=>p7,normalizeHubWebSocketUrl:()=>B1,noopBasicLogger:()=>Hw,migrateLegacyProviderSettings:()=>a4,mergeRulesForSystemPrompt:()=>W8,mergeAgentHooks:()=>d1,makeTeamTaskSubSessionId:()=>YJ,makeSubSessionId:()=>w2,loginOpenAICodex:()=>$8,loginOcaOAuth:()=>r2,loginLocalProvider:()=>r7,loginClineOAuth:()=>e2,loadOpenTelemetryAdapter:()=>ty,loadMcpSettingsFile:()=>r1,loadLlmsConfigFromFile:()=>f3,loadAgentPluginsFromPathsWithDiagnostics:()=>x1,loadAgentPluginsFromPaths:()=>c6,loadAgentPluginFromPath:()=>zJ,listSessionHistoryFromBackend:()=>LW,listPluginToolsWithDiagnostics:()=>n5,listPluginTools:()=>V4,listMcpServerOAuthStatuses:()=>Y4,listLocalProviders:()=>u7,listHookConfigFiles:()=>o$,isToolDisabledGlobally:()=>hj,isTelemetryOptedOutGlobally:()=>x6,isRuleEnabled:()=>g5,isPluginDisabledGlobally:()=>kj,isOpenAICodexTokenExpired:()=>x9,isHubReconnectableTransportError:()=>bW,isHubCommandTimeoutError:()=>jZ,isDiscoveryFilePresent:()=>nY,isClineAccountActionRequest:()=>y5,isBuiltInProviderId:()=>_9,identifyAccount:()=>L$,hasMcpSettingsFile:()=>C$,getValidOpenAICodexCredentials:()=>iJ,getValidOcaCredentials:()=>CJ,getValidClineCredentials:()=>pJ,getProviderConfigFields:()=>a7,getProviderConfig:()=>V5,getMcpServerOAuthState:()=>n1,getLocalProviderModels:()=>c7,getLiveModelsCatalog:()=>i2,getFileIndex:()=>T$,getCurrentContextSize:()=>dQ,getCoreHeadlessToolNames:()=>HJ,getCoreDefaultEnabledToolIds:()=>y6,getCoreBuiltinToolCatalog:()=>w1,getCoreAcpToolNames:()=>S6,getClineDefaultSystemPrompt:()=>oy,generateWorkspaceInfoWithDiagnostics:()=>mJ,generateWorkspaceInfo:()=>t2,generateOcaOpcRequestId:()=>J5,formatRulesForSystemPrompt:()=>Q8,formatDisplayUserInput:()=>Xw,filterExtensionToolRegistrations:()=>v6,filterDisabledTools:()=>k1,filterDisabledPluginPaths:()=>g6,fetchClineRecommendedModels:()=>Q3,executeClineAccountAction:()=>w5,ensureHubWebSocketServer:()=>MZ,ensureHubServer:()=>nV,ensureDetachedHubServer:()=>oY,ensureCustomProvidersLoaded:()=>xZ,ensureCompatibleLocalHubUrl:()=>Q2,enrichPromptWithMentions:()=>L2,emptyWorkspaceManifest:()=>jw,emptyStoredProviderSettings:()=>Q1,discoverPluginModulePaths:()=>TJ,deriveSubsessionStatus:()=>VJ,deleteLocalProvider:()=>uZ,defineLlmsConfig:()=>W3,createWorkflowsConfigDefinition:()=>f4,createUserInstructionConfigService:()=>f1,createToolPoliciesWithPreset:()=>O6,createTool:()=>fw,createTeamName:()=>EZ,createSubprocessHooks:()=>UZ,createSpawnAgentTool:()=>n$,createSkillsConfigDefinition:()=>Q4,createSessionHost:()=>D8,createRuntimeHost:()=>D8,createRulesConfigDefinition:()=>W4,createRemoteConfigSessionMessagesArtifactUploader:()=>q7,createProviderConfig:()=>T9,createOpenTelemetryTelemetryService:()=>v4,createOcaRequestHeaders:()=>F9,createOcaOAuthProvider:()=>G9,createOAuthClientCallbacks:()=>dJ,createMcpTools:()=>X8,createLocalHubScheduleRuntimeHandlers:()=>qZ,createLlmsSdk:()=>X3,createInitialAccumulatedUsage:()=>B0,createInMemoryHubOwnerContext:()=>iY,createHubServerUrl:()=>o0,createHubAuthToken:()=>ZZ,createHookConfigFileHooks:()=>yJ,createHookConfigFileExtension:()=>p2,createHookAuditHooks:()=>l2,createDisabledMcpToolPolicy:()=>A4,createDisabledMcpToolPolicies:()=>i5,createDelegatedAgentConfigProvider:()=>N2,createDelegatedAgent:()=>M2,createDefaultToolsWithPreset:()=>_6,createDefaultTools:()=>p$,createDefaultMcpServerClientFactory:()=>j8,createDefaultExecutors:()=>z2,createCoreSettingsService:()=>o1,createCoreSessionSnapshot:()=>Y$,createContributionRegistry:()=>Ww,createContextCompactionPrepareTurn:()=>d8,createConfiguredTelemetryService:()=>x$,createConfiguredTelemetryHandle:()=>M8,createClineTelemetryServiceMetadata:()=>Qw,createClineTelemetryServiceConfig:()=>Zw,createClineOAuthProvider:()=>I9,createBuiltinTools:()=>S1,createAgentTeamsTools:()=>y1,createAgentRuntime:()=>Fw,createAgentHooksExtension:()=>c2,connectToHub:()=>LZ,completeClineDeviceAuth:()=>k9,clearPrivateModelsCatalogCache:()=>z9,clearLiveModelsCatalogCache:()=>L9,clearHubDiscovery:()=>u0,captureWorkspacePathResolved:()=>q3,captureWorkspaceInitialized:()=>$6,captureWorkspaceInitError:()=>J6,captureToolUsage:()=>j6,captureTokenUsage:()=>W6,captureTaskRestarted:()=>Q6,captureTaskCreated:()=>Z6,captureTaskCompleted:()=>k8,captureSubagentExecution:()=>x8,captureSkillUsed:()=>X6,captureSdkError:()=>Jw,captureProviderConfigured:()=>y3,captureProviderApiError:()=>I8,captureModeSwitch:()=>f6,captureMentionUsed:()=>Y6,captureMentionSearchResults:()=>V6,captureMentionFailed:()=>A6,captureHookDiscovery:()=>K6,captureExtensionActivated:()=>M3,captureDiffEditFailure:()=>H6,captureConversationTurnEvent:()=>R2,captureCompactionSkipped:()=>F6,captureCompactionExecuted:()=>G6,captureAuthSucceeded:()=>D$,captureAuthStarted:()=>R$,captureAuthLoggedOut:()=>g$,captureAuthFailed:()=>P$,captureAgentTeamCreated:()=>B6,captureAgentCreated:()=>v$,buildWorkspaceMetadata:()=>gJ,buildTeamProgressSummary:()=>G8,buildSdkErrorProperties:()=>ey,buildRemoteConfigSessionBlobUploadMetadata:()=>yZ,buildDelegatedAgentConfig:()=>M1,bootstrapAgentTeams:()=>y2,authorizeMcpServerOAuth:()=>l5,addLocalProvider:()=>v7,accumulateUsageTotals:()=>X0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>tJ,UnifiedConfigFileWatcher:()=>p1,ToolPresets:()=>k0,TelemetryService:()=>T8,TelemetryLoggerSink:()=>g4,TEAM_TOOL_NAMES:()=>q2,SubprocessSandbox:()=>g2,StoredProviderSettingsSchema:()=>a2,StoredProviderSettingsEntrySchema:()=>T5,SqliteTeamStore:()=>B2,SqliteSessionStore:()=>V$,SessionVersioningService:()=>U1,SessionVersioningError:()=>w0,SessionSource:()=>G0,SapSettingsSchema:()=>P5,SKILLS_CONFIG_DIRECTORY_NAME:()=>aJ,SESSION_STATUSES:()=>BJ,SDK_ERROR_TELEMETRY_EVENT:()=>Kw,RpcClineAccountService:()=>cJ,RemoteRuntimeHost:()=>K8,ReasoningSettingsSchema:()=>F5,RULES_CONFIG_DIRECTORY_NAME:()=>m5,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>wZ,ProviderSettingsSchema:()=>J1,ProviderSettingsManager:()=>F$,ProviderProtocolSchema:()=>B5,ProviderIdSchema:()=>IJ,ProviderClientSchema:()=>K5,OpenTelemetryProvider:()=>N8,OcaSettingsSchema:()=>L5,OPENAI_COMPATIBLE_PROVIDERS:()=>hJ,NodeHubClient:()=>e0,NativeHubTransportAdapter:()=>r4,ModelCatalogSettingsSchema:()=>z5,LocalRuntimeHost:()=>G$,Llms:()=>sy,InMemoryWorkspaceManager:()=>s2,InMemoryMcpManager:()=>s1,HubUIClient:()=>Y7,HubTransportError:()=>_0,HubSessionClient:()=>H7,HubServerTransport:()=>y8,HubScheduleService:()=>_8,HubScheduleCommandService:()=>O8,HubRuntimeHost:()=>h$,HubCommandError:()=>V8,HookEventPayloadSchema:()=>FZ,HookEventNameSchema:()=>GZ,HookConfigFileName:()=>d2,HOOK_CONFIG_FILE_EVENT_MAP:()=>MJ,HOOKS_CONFIG_DIRECTORY_NAME:()=>a6,GlobalSettingsSchema:()=>RJ,GcpSettingsSchema:()=>R5,FileTeamPersistenceStore:()=>pZ,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>sZ,DefaultToolNames:()=>Z0,DefaultRuntimeBuilder:()=>C8,DefaultLlmsSdk:()=>t4,DEFAULT_MODELS_CATALOG_URL:()=>X5,DEFAULT_HUB_PORT:()=>MW,DEFAULT_HUB_PATHNAME:()=>qW,DEFAULT_HUB_HOST:()=>NW,CoreSettingsService:()=>j1,CoreSessionService:()=>K$,ContributionRegistry:()=>$w,ClineCore:()=>x4,ClineAccountService:()=>uJ,ChatViewStateSchema:()=>J3,ChatSummarySchema:()=>tZ,ChatSessionStatusSchema:()=>iZ,ChatSessionConfigSchema:()=>rZ,ChatMessageSchema:()=>aZ,ChatMessageRoleSchema:()=>nZ,CORE_TELEMETRY_EVENTS:()=>x,CORE_BUILD_VERSION:()=>Z3,BrowserWebSocketHubAdapter:()=>p4,BUILT_IN_PROVIDER_IDS:()=>O9,BUILT_IN_PROVIDER:()=>kJ,AzureSettingsSchema:()=>D5,AwsSettingsSchema:()=>U5,AuthSettingsSchema:()=>G5,AgentTeamsRuntime:()=>j2,AgentTeam:()=>R8,Agent:()=>Gw,ALL_DEFAULT_TOOL_NAMES:()=>c$});M(N,cd);import*as sy from"@cline/llms";import{buildClineSystemPrompt as oy,buildSdkErrorProperties as ey,ContributionRegistry as $w,captureSdkError as Jw,createClineTelemetryServiceConfig as Zw,createClineTelemetryServiceMetadata as Qw,createContributionRegistry as Ww,createTool as fw,emptyWorkspaceManifest as jw,formatDisplayUserInput as Xw,noopBasicLogger as Hw,normalizeSdkError as Yw,normalizeUserInput as Aw,parseUserCommandEnvelope as Vw,registerDisposable as Bw,SDK_ERROR_TELEMETRY_EVENT as Kw}from"@cline/shared";import"@cline/shared/storage";var QH={};w(QH,{isClineAccountActionRequest:()=>y5,executeClineAccountAction:()=>w5,RpcClineAccountService:()=>cJ,ClineAccountService:()=>uJ});function HP($){if(typeof $!=="object"||$===null||!("error"in $))return;let J=$.error;return typeof J==="string"&&J.trim()?J:void 0}function ZH($,J,Z){let Q=HP(Z);if(Q)return Q;let W=J.trim();if(W){let f=W.length>200?`${W.slice(0,200)}...`:W;return`Cline account request failed with status ${$}: ${f}`}return`Cline account request failed with status ${$}`}class uJ{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let J=$.apiBaseUrl.trim();if(!J)throw Error("apiBaseUrl is required");this.apiBaseUrl=J,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let J=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(J)}/balance`)}async fetchUsageTransactions($){let J=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(J)}/usages`)).items??[]}async fetchPaymentTransactions($){let J=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(J)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchOrganization($){let J=$.trim();if(!J)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(J)}`)}async fetchOrganizationBalance($){let J=$.trim();if(!J)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(J)}/balance`)}async fetchOrganizationUsageTransactions($){let J=$.organizationId.trim();if(!J)throw Error("organizationId is required");let Z=await this.resolveOrganizationMemberId(J,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(J)}/members/${encodeURIComponent(Z)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let J=$?.trim();if(J)return J;let Q=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(Q)return Q;let W=await this.fetchMe();if(!W.id?.trim())throw Error("Unable to resolve current user id");return W.id}async resolveOrganizationMemberId($,J){let Z=J?.trim();if(Z)return Z;let W=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(W)return W;let j=(await this.fetchUserOrganizations()).find((X)=>X.organizationId===$)?.memberId;if(!j?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return j}async request($,J){let Z=(await this.getAuthTokenFn())?.trim();if(!Z)throw Error("No Cline account auth token found");let Q=this.getHeadersFn?await this.getHeadersFn():{},W=new AbortController,f=setTimeout(()=>W.abort(),this.requestTimeoutMs);try{let j=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:J?.method??"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json",...Q??{}},body:J?.body!==void 0?JSON.stringify(J.body):void 0,signal:W.signal});if(j.status===204||J?.expectNoContent){if(!j.ok)throw Error(`Cline account request failed with status ${j.status}`);return}let X=await j.text(),H;if(X.trim())try{H=JSON.parse(X)}catch{if(!j.ok)throw Error(ZH(j.status,X,void 0));throw Error("Cline account response was not valid JSON")}if(!j.ok)throw Error(ZH(j.status,X,H));if(typeof H==="object"&&H!==null){let Y=H;if(typeof Y.success==="boolean"){if(!Y.success)throw Error(Y.error||"Cline account request failed");if(Y.data!==void 0)return Y.data}}if(H===void 0||H===null)throw Error("Cline account response payload was empty");return H}finally{clearTimeout(f)}}}function y5($){return $.action==="clineAccount"}async function w5($,J){switch($.operation){case"fetchMe":return J.fetchMe();case"fetchBalance":return J.fetchBalance($.userId);case"fetchUsageTransactions":return J.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return J.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return J.fetchUserOrganizations();case"fetchOrganizationBalance":return J.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return J.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await J.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return J.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class cJ{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let J=$.trim();if(!J)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:J})}async fetchOrganizationUsageTransactions($){let J=$.organizationId.trim();if(!J)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:J,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var WH={};w(WH,{createOAuthClientCallbacks:()=>dJ});function dJ($){return{onAuth:({url:J,instructions:Z})=>{if($.onOutput?.(Z??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(J)).catch((Q)=>{$.onOpenUrlError?.({url:J,error:Q})})}catch(Q){$.onOpenUrlError?.({url:J,error:Q})}$.onOutput?.(J)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}L0();var BH={};w(BH,{startClineDeviceAuth:()=>b9,refreshClineToken:()=>lJ,loginClineOAuth:()=>e2,getValidClineCredentials:()=>pJ,createClineOAuthProvider:()=>I9,completeClineDeviceAuth:()=>k9});import{getClineEnvironmentConfig as w9}from"@cline/shared";var S5={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},HH={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},S9="https://api.workos.com",YP="/auth",fH=Array.from({length:11},($,J)=>48801+J),AP=300000,VP=30000,o2=30000,BP=300,KP=5;class W1 extends Error{status;errorCode;constructor($,J){super($);this.name="ClineOAuthTokenError",this.status=J?.status,this.errorCode=J?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function GP($){let J=Date.parse($);if(Number.isNaN(J))throw Error(`Invalid expiresAt value: ${$}`);return J}function C9($,J,Z={}){let Q=$.userInfo.clineUserId??Z.accountId,W=$.refreshToken??Z.refresh;if(!W)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:W,expires:GP($.expiresAt),accountId:Q??void 0,email:$.userInfo.email||Z.email,metadata:{provider:J,tokenType:$.tokenType,userInfo:$.userInfo}}}async function E9($){if(!$)return{};return typeof $==="function"?await $():$}function jH($,J){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return J;return Math.floor($)}async function XH($){await new Promise((J)=>setTimeout(J,$))}function h9($,J){if(!$.success||!$.data?.accessToken)throw Error(J);return $.data}async function YH($,J){let Z=await fetch(h1(S9,HH.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(J?.requestTimeoutMs??o2)}),Q=await Z.json().catch(()=>({}));if(!Z.ok)throw new W1(`Device authorization failed: ${Z.status}${Q.error_description?` - ${Q.error_description}`:""}`,{status:Z.status,errorCode:Q.error});if(!Q.device_code||!Q.user_code||!Q.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:Q.device_code,userCode:Q.user_code,verificationUri:Q.verification_uri,verificationUriComplete:Q.verification_uri_complete,expiresInSeconds:jH(Q.expires_in,BP),pollIntervalSeconds:jH(Q.interval,KP)}}async function AH($){let J=Date.now()+$.expiresInSeconds*1000,Z=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=J){let Q=await fetch(h1($.workosApiBaseUrl,HH.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),W=await Q.json().catch(()=>({}));if(Q.ok){if(!W.access_token||!W.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:W.access_token,refreshToken:W.refresh_token,tokenType:W.token_type??"Bearer"}}switch(W.error){case"authorization_pending":{await XH(Z*1000);break}case"slow_down":{Z+=1,await XH(Z*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new W1(W.error_description||"WorkOS authorization failed",{status:Q.status,errorCode:W.error});default:throw new W1(`WorkOS token polling failed: ${Q.status}${W.error_description?` - ${W.error_description}`:""}`,{status:Q.status,errorCode:W.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function VH($,J,Z){let Q={accessToken:$.accessToken,refreshToken:$.refreshToken},W=await fetch(h1(J.apiBaseUrl,S5.register),{method:"POST",headers:{"Content-Type":"application/json",...await E9(J.headers)},body:JSON.stringify(Q),signal:AbortSignal.timeout(J.requestTimeoutMs??o2)});if(!W.ok){let j=await W.text().catch(()=>""),X=b2(j);throw new W1(`Token registration failed: ${W.status}${X.message?` - ${X.message}`:""}`,{status:W.status,errorCode:X.code})}let f=await W.json();return C9(h9(f,"Invalid token exchange response"),Z??J.provider)}async function FP($,J,Z,Q){let W={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:J,provider:Q??Z.provider},f=await fetch(h1(Z.apiBaseUrl,S5.token),{method:"POST",headers:{"Content-Type":"application/json",...await E9(Z.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Z.requestTimeoutMs??o2)});if(!f.ok){let X=await f.text().catch(()=>""),H=b2(X);throw new W1(`Token exchange failed: ${f.status}${H.message?` - ${H.message}`:""}`,{status:f.status,errorCode:H.code})}let j=await f.json();return C9(h9(j,"Invalid token exchange response"),Q??Z.provider)}async function e2($){R$($.telemetry,$.provider??"cline");let J=$.useWorkOSDeviceAuth??!0,Z=$.callbackPorts?.length?$.callbackPorts:fH,Q=$.callbackPath??YP,W=J?null:await s0({ports:Z,callbackPath:Q,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),f=W?.callbackUrl||`http://127.0.0.1:${Z[0]??fH[0]}${Q}`;try{let j;if(J){let X=w9().workOsClientId,H=await YH(X,$);$.callbacks.onAuth({url:H.verificationUriComplete??H.verificationUri,instructions:`Enter this code in your browser: ${H.userCode}`});let Y=await AH({clientId:X,deviceCode:H.deviceCode,expiresInSeconds:H.expiresInSeconds,initialPollIntervalSeconds:H.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??o2,workosApiBaseUrl:S9,onProgress:$.callbacks.onProgress});j=await VH(Y,$,$.provider)}else{let X=new URL(h1($.apiBaseUrl,S5.authorize));X.searchParams.set("client_type","extension"),X.searchParams.set("callback_url",f),X.searchParams.set("redirect_uri",f),$.callbacks.onAuth({url:X.toString(),instructions:"Continue the authentication process in your browser."});let H,Y=$.provider,A=await k2({waitForCallback:W?.waitForCallback??(async()=>null),cancelWait:W?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(A.error)throw Error(`OAuth error: ${A.error}`);if(H=A.code,Y=A.provider??Y,!H){let V=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),B=h2(V,{includeProvider:!0});H=B.code,Y=B.provider??Y}if(!H)throw Error("Missing authorization code");j=await FP(H,f,$,Y)}return D$($.telemetry,$.provider??"cline"),L$($.telemetry,{id:j.accountId,email:j.email,provider:$.provider??"cline"}),j}catch(j){throw P$($.telemetry,$.provider??"cline",j instanceof Error?j.message:String(j)),j}finally{W?.close()}}async function b9($){return await YH(w9().workOsClientId,$)}async function k9($){let J=$.provider??"cline";R$($.telemetry,J);try{let Z=await AH({clientId:w9().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??o2,workosApiBaseUrl:S9}),Q=await VH(Z,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return D$($.telemetry,J),L$($.telemetry,{id:Q.accountId,email:Q.email,provider:J}),Q}catch(Z){throw P$($.telemetry,J,Z instanceof Error?Z.message:String(Z)),Z}}async function lJ($,J){let Z=await fetch(h1(J.apiBaseUrl,S5.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await E9(J.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(J.requestTimeoutMs??o2)});if(!Z.ok){let f=await Z.text().catch(()=>""),j=b2(f);throw new W1(`Token refresh failed: ${Z.status}${j.message?` - ${j.message}`:""}`,{status:Z.status,errorCode:j.code})}let Q=await Z.json(),W=$.metadata?.provider??J.provider;return C9(h9(Q,"Invalid token refresh response"),W,$)}async function pJ($,J,Z){if(!$)return null;let Q=Z?.refreshBufferMs??AP,W=Z?.retryableTokenGraceMs??VP;if(Z?.forceRefresh!==!0&&!b1($,Q))return $;try{return await lJ($,J)}catch(j){if(j instanceof W1&&j.isLikelyInvalidGrant())return g$(J.telemetry,J.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}function I9($){return{id:"cline",name:"Cline Account",usesCallbackServer:!($.useWorkOSDeviceAuth??!0),async login(J){return e2({...$,callbacks:J})},async refreshToken(J){return lJ(J,$)},getApiKey(J){return`workos:${J.access}`}}}L0();var FH={};w(FH,{refreshOpenAICodexToken:()=>rJ,openaiCodexOAuthProvider:()=>g9,normalizeOpenAICodexCredentials:()=>m9,loginOpenAICodex:()=>$8,isOpenAICodexTokenExpired:()=>x9,getValidOpenAICodexCredentials:()=>iJ,OPENAI_CODEX_OAUTH_CONFIG:()=>e});import{nanoid as UP}from"nanoid";var e={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class C5 extends Error{status;errorCode;constructor($,J){super($);this.name="OpenAICodexOAuthTokenError",this.status=J?.status,this.errorCode=J?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function RP($,J,Z=e.redirectUri){let Q=await fetch(e.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:e.clientId,code:$,code_verifier:J,redirect_uri:Z}),signal:AbortSignal.timeout(e.httpTimeoutMs)});if(!Q.ok)return{type:"failed"};let W=await Q.json();if(!W.access_token||!W.refresh_token||typeof W.expires_in!=="number")return{type:"failed"};return{type:"success",access:W.access_token,refresh:W.refresh_token,expires:Date.now()+W.expires_in*1000,email:W.email,idToken:W.id_token}}async function DP($){try{let J=await fetch(e.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:e.clientId}),signal:AbortSignal.timeout(e.httpTimeoutMs)});if(!J.ok){let Q=await J.text().catch(()=>""),W=b2(Q);throw new C5(`Token refresh failed: ${J.status}${W.message?` - ${W.message}`:""}`,{status:J.status,errorCode:W.code})}let Z=await J.json();if(!Z.access_token||!Z.refresh_token||typeof Z.expires_in!=="number")return{type:"failed"};return{type:"success",access:Z.access_token,refresh:Z.refresh_token,expires:Date.now()+Z.expires_in*1000,email:Z.email,idToken:Z.id_token}}catch(J){if(J instanceof C5)throw J;return{type:"failed"}}}async function PP($="pi"){let{verifier:J,challenge:Z}=await h6(),Q=UP(32),W=new URL(e.authorizationEndpoint);return W.searchParams.set("response_type","code"),W.searchParams.set("client_id",e.clientId),W.searchParams.set("redirect_uri",e.redirectUri),W.searchParams.set("scope",e.scopes),W.searchParams.set("code_challenge",Z),W.searchParams.set("code_challenge_method","S256"),W.searchParams.set("state",Q),W.searchParams.set("id_token_add_organizations","true"),W.searchParams.set("codex_cli_simplified_flow","true"),W.searchParams.set("originator",$),{verifier:J,state:Q,url:W.toString()}}function LP(){try{let $=new URL(e.redirectUri),J=$.port.length>0?Number.parseInt($.port,10):e.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(J)?J:e.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:e.callbackPort,callbackPath:"/auth/callback",redirectUri:e.redirectUri}}}function KH($,J){let Z=J?z0(J):z0($),Q=Z?Z:z0($),f=Q?.[e.jwtClaimPath]?.chatgpt_account_id;if(typeof f==="string"&&f.length>0)return f;let j=Q?.organizations;if(Array.isArray(j)&&j.length>0){let H=j[0];if(typeof H?.id==="string"&&H.id.length>0)return H.id}let X=Q?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;return null}function GH($,J){let Z=KH($.access,$.idToken)??J?.accountId;if(!Z)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||J?.refresh||"",expires:$.expires,accountId:Z,email:$.email??J?.email,metadata:{...J?.metadata??{},provider:"openai-codex"}}}async function $8($){R$($.telemetry,"openai-codex");let J=LP(),{verifier:Z,state:Q,url:W}=await PP($.originator),f=await s0({host:J.host,ports:[J.port],callbackPath:J.callbackPath,expectedState:Q});$.onAuth({url:W,instructions:"Continue the authentication process in your browser."});let j;try{let X=await k2({waitForCallback:f.waitForCallback,cancelWait:f.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(X.state&&X.state!==Q)throw Error("State mismatch");if(j=X.code,!j){let A=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),V=h2(A,{allowHashCodeState:!0});if(V.state&&V.state!==Q)throw Error("State mismatch");j=V.code}if(!j)throw Error("Missing authorization code");let H=await RP(j,Z,J.redirectUri);if(H.type!=="success")throw Error("Token exchange failed");let Y=GH(H);return D$($.telemetry,"openai-codex"),L$($.telemetry,{id:Y.accountId,email:Y.email,provider:"openai-codex"}),Y}catch(X){throw P$($.telemetry,"openai-codex",X instanceof Error?X.message:String(X)),X}finally{f.close()}}async function rJ($,J){let Z=await DP($);if(Z.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let Q=GH(Z,J);if(!Q.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return Q}async function iJ($,J){if(!$)return null;let Z=J?.refreshBufferMs??e.refreshBufferMs,Q=J?.retryableTokenGraceMs??e.retryableTokenGraceMs;if(J?.forceRefresh!==!0&&!b1($,Z))return $;try{return await rJ($.refresh,$)}catch(f){if(f instanceof C5&&f.isLikelyInvalidGrant())return g$(J?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>Q)return $;return null}}function x9($,J=e.refreshBufferMs){return b1($,J)}function m9($){let J=$.accountId??KH($.access);if(!J)throw Error("Failed to extract accountId from token");return{...$,accountId:J,metadata:{...$.metadata??{},provider:"openai-codex"}}}var g9={id:"openai-codex",name:"ChatGPT Plus/Pro (ChatGPT Subscription)",usesCallbackServer:!0,async login($){return $8({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput})},async refreshToken($){return rJ($.refresh,$)},getApiKey($){return $.access}};var dA={};w(dA,{ClineCore:()=>x4});function UH($){if($===!0)return{};if(!$)return;return $}function RH($){if($==="user")return"global";return $}class v9{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let J=this.getService().ingestEvent($);return{event:J.event,duplicate:J.duplicate,matchedSpecIds:J.matchedSpecs.map((Z)=>Z.specId),queuedRuns:J.queuedRuns,suppressions:J.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function DH($){let{host:J}=$;return{async startSession(Z){let Q=(Z.cwd?.trim()||Z.workspaceRoot).trim(),W=await J.startSession({source:Z.source?.trim()||G0.CLI,interactive:!1,config:{providerId:n2(Z.provider),modelId:Z.model,apiKey:Z.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:_P(Z),maxIterations:Z.maxIterations,enableTools:Z.enableTools!==!1,enableSpawnAgent:Z.enableSpawn!==!1,enableAgentTeams:Z.enableTeams!==!1,disableMcpSettingsTools:Z.disableMcpSettingsTools,missionLogIntervalSteps:Z.missionStepInterval,missionLogIntervalMs:Z.missionTimeIntervalMs},toolPolicies:Z.toolPolicies??{"*":{autoApprove:Z.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Z.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(Z,Q){let W=await J.runTurn({sessionId:Z,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((f)=>f.content),delivery:Q.delivery});if(!W)throw Error("ClineCore automation runtime returned no result");return{result:OP(W)}},async abortSession(Z){return await J.abort(Z,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Z){return await J.stopSession(Z),{applied:!0}}}}function E5($){let J=zP($.automationService,$.automation),Z=$.context?.client??($.clientName?{name:$.clientName}:void 0),Q=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),W=$.context?.logger??$.logger,f=$.context?.telemetry??$.telemetry;if(!J&&!Z&&!Q&&!W&&!f)return $.context;return{...$.context??{},...Z?{client:Z}:{},...Q?{user:Q}:{},...W?{logger:W}:{},...f?{telemetry:f}:{},...J?{automation:J}:{}}}function zP($,J){if(!$)return;return{ingestEvent:(Z)=>{J.ingestEvent(Z)}}}function OP($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((J)=>({name:J.name,input:J.input,output:J.output,error:J.error,durationMs:J.durationMs}))}}function _P($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var jY={};w(jY,{createCoreSettingsService:()=>o1,CoreSettingsService:()=>j1});import{existsSync as a5}from"node:fs";import{basename as QY,isAbsolute as pL,relative as rL}from"node:path";var hH={};w(hH,{resolveWorkflowsConfigSearchPaths:()=>Z4,resolveSkillsConfigSearchPaths:()=>$4,resolveRulesConfigSearchPaths:()=>J4,parseWorkflowConfigFromMarkdown:()=>eJ,parseSkillConfigFromMarkdown:()=>sJ,parseRuleConfigFromMarkdown:()=>oJ,createWorkflowsConfigDefinition:()=>f4,createUserInstructionConfigService:()=>f1,createSkillsConfigDefinition:()=>Q4,createRulesConfigDefinition:()=>W4,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>tJ,UnifiedConfigFileWatcher:()=>p1,SKILLS_CONFIG_DIRECTORY_NAME:()=>aJ,RULES_CONFIG_DIRECTORY_NAME:()=>m5});import{createHash as TP}from"node:crypto";import{watch as NP}from"node:fs";import{readdir as MP,readFile as qP}from"node:fs/promises";import{join as yP}from"node:path";function wP($){return TP("sha1").update($).digest("hex")}function zH($){return Boolean($&&typeof $==="object"&&"code"in $)}function PH($){return zH($)&&$.code==="ENOENT"}function LH($){return zH($)&&($.code==="EACCES"||$.code==="EPERM")}class p1{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,J){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=J?.debounceMs??75,this.emitParseErrors=J?.emitParseErrors??!1;for(let Z of $){if(this.definitionsByType.has(Z.type))throw Error(`Duplicate unified config definition type '${Z.type}'.`);this.definitionsByType.set(Z.type,Z),this.recordsByType.set(Z.type,new Map),this.discoveredDirectoriesByType.set(Z.type,new Set);for(let Q of Z.directories){let W=this.baseTypesByDirectory.get(Q);if(W)W.add(Z.type);else this.baseTypesByDirectory.set(Q,new Set([Z.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let J=this.definitionsByType.get($);if(!J)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(J)})}getSnapshot($){let J=this.recordsByType.get($);return new Map([...J?.entries()??[]].map(([Z,Q])=>[Z,{...Q}]))}getAllSnapshots(){let $=new Map;for(let[J,Z]of this.recordsByType.entries())$.set(J,new Map([...Z.entries()].map(([Q,W])=>[Q,{...W}])));return $}emit($){for(let J of this.listeners)J($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[J,Z]of this.watchersByDirectory.entries()){if($.has(J))continue;Z.close(),this.watchersByDirectory.delete(J)}this.watchedTypesByDirectory=$;for(let J of $.keys()){if(this.watchersByDirectory.has(J))continue;try{let Z=NP(J,()=>{let Q=this.watchedTypesByDirectory.get(J);if(!Q)return;for(let W of Q)this.pendingTypes.add(W);this.scheduleFlush()});this.watchersByDirectory.set(J,Z),Z.on("error",(Q)=>{let W=this.watchedTypesByDirectory.get(J);if(!W)return;for(let f of W)this.emit({kind:"error",type:f,error:Q,filePath:J})})}catch(Z){if(!PH(Z)&&!LH(Z)){let Q=$.get(J);if(!Q)continue;for(let W of Q)this.emit({kind:"error",type:W,error:Z,filePath:J})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let J of $){let Z=this.definitionsByType.get(J);if(!Z)continue;await this.refreshTypeInternal(Z)}})},this.debounceMs)}async refreshTypeInternal($){let{records:J,discoveredDirectories:Z}=await this.loadDefinition($),Q=this.recordsByType.get($.type)??new Map;for(let[W,f]of Q.entries()){if(J.has(W))continue;this.emit({kind:"remove",type:$.type,id:W,filePath:f.filePath})}for(let[W,f]of J.entries()){let j=Q.get(W);if(j&&j.filePath===f.filePath&&j.fingerprint===f.fingerprint)continue;this.emit({kind:"upsert",record:{type:f.type,id:W,item:f.item,filePath:f.filePath}})}if(this.recordsByType.set($.type,J),this.discoveredDirectoriesByType.set($.type,Z),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let J=new Map,Z=new Set;for(let Q of $.directories){Z.add(Q);let W=$.discoverFiles?await $.discoverFiles(Q):await this.readDirectoryFileCandidates(Q);for(let f of W){let{fileName:j,filePath:X}=f;if(Z.add(f.directoryPath),$.includeFile&&!$.includeFile(j,X))continue;try{let H=await qP(X,"utf8"),Y={type:$.type,directoryPath:f.directoryPath,fileName:j,filePath:X,content:H},A=$.parseFile(Y),V=$.resolveId(A,Y).trim();if(!V)continue;J.set(V,{type:$.type,id:V,item:A,filePath:X,fingerprint:wP(H)})}catch(H){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:H,filePath:X})}}}return{records:J,discoveredDirectories:Z}}buildDesiredTypesByDirectory(){let $=new Map;for(let[J,Z]of this.baseTypesByDirectory.entries())$.set(J,new Set(Z));for(let[J,Z]of this.discoveredDirectoriesByType.entries())for(let Q of Z){let W=$.get(Q);if(W)W.add(J);else $.set(Q,new Set([J]))}return $}async readDirectoryFileCandidates($){try{return(await MP($,{withFileTypes:!0})).filter((Z)=>Z.isFile()).map((Z)=>({directoryPath:$,fileName:Z.name,filePath:yP($,Z.name)})).sort((Z,Q)=>Z.fileName.localeCompare(Q.fileName))}catch(J){if(PH(J)||LH(J))return[];throw J}}}import{readdir as c9,readFile as SP,stat as u9}from"node:fs/promises";import{basename as S$,dirname as CP,extname as b5,join as q0,resolve as nJ}from"node:path";import{AGENTS_RULES_FILE_NAME as OH,RULES_CONFIG_DIRECTORY_NAME as m5,resolveGlobalAgentsRulesPath as EP,resolveRulesConfigSearchPaths as hP,resolveSkillsConfigSearchPaths as bP,resolveWorkflowsConfigSearchPaths as kP,SKILLS_CONFIG_DIRECTORY_NAME as aJ,WORKFLOWS_CONFIG_DIRECTORY_NAME as tJ}from"@cline/shared/storage";import IP from"yaml";var h5="SKILL.md",xP="managed.json",mP=new Set([".md",".markdown",".txt"]);function d9($){return $.trim().toLowerCase()}function J8($){let J=$;return J?.code==="ENOENT"||J?.code==="EACCES"||J?.code==="EPERM"||J?.code==="ELOOP"}function k5($){return mP.has(b5($).toLowerCase())}function _H($){let J=[],Z=new Set;for(let Q of $){let W=nJ(Q);if(Z.has(W))continue;Z.add(W),J.push(Q)}return J}function gP($){let J=[...$?.directories??$4($?.workspacePath)];if($?.pluginSkillDirectories)J.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)J.push(...XX({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return _H(J)}async function l9($){try{let J=await c9($,{withFileTypes:!0}),Z=[];for(let Q of J){if(!Q.isDirectory())continue;let W=q0($,Q.name),f=q0(W,xP);try{let j=await SP(f,"utf8"),X=JSON.parse(j);if(X&&typeof X==="object")Z.push(W)}catch(j){if(J8(j))continue;if(j?.name==="SyntaxError")continue;throw j}}return Z.sort((Q,W)=>Q.localeCompare(W))}catch(J){if(J8(J))return[];throw J}}function p9($){let J=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Z=$.match(J);if(!Z)return{data:{},body:$,hadFrontmatter:!1};let[,Q,W]=Z;try{let f=IP.parse(Q);return{data:f&&typeof f==="object"&&!Array.isArray(f)?f:{},body:W,hadFrontmatter:!0}}catch(f){let j=f instanceof Error?f.message:String(f);return{data:{},body:$,hadFrontmatter:!0,parseError:j}}}function I5($,J,Z){if($===void 0||$===null){if(Z)throw Error(`Missing required frontmatter field '${J}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${J}' must be a string.`);let Q=$.trim();if(!Q&&Z)throw Error(`Frontmatter field '${J}' cannot be empty.`);return Q||void 0}function Z8($,J){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${J}' must be a boolean.`);return $}function vP($,J){if(S$($.filePath).toLowerCase()!==OH.toLowerCase())return S$($.filePath,b5($.filePath));if(J&&nJ($.filePath)===nJ(J,OH))return"Workspace AGENTS.md";if(nJ($.filePath)===nJ(EP()))return"Global AGENTS.md";return S$($.filePath,b5($.filePath))}function sJ($,J){let{data:Z,body:Q,parseError:W}=p9($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let f=Q.trim();if(!f)throw Error("Missing instructions body in skill file.");let X=I5(Z.name,"name",!1)??J.trim();if(!X)throw Error("Missing skill name.");return{name:X,description:I5(Z.description,"description",!1),disabled:Z8(Z.disabled,"disabled")??(Z8(Z.enabled,"enabled")===!1?!0:void 0),instructions:f,frontmatter:Z}}function oJ($,J){let{data:Z,body:Q,parseError:W}=p9($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let f=Q.trim();if(!f)throw Error("Missing instructions body in rule file.");let j=I5(Z.name,"name",!1)??J.trim();if(!j)throw Error("Missing rule name.");return{name:j,disabled:Z8(Z.disabled,"disabled")??(Z8(Z.enabled,"enabled")===!1?!0:void 0),instructions:f,frontmatter:Z}}function eJ($,J){let{data:Z,body:Q,parseError:W}=p9($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let f=Q.trim();if(!f)throw Error("Missing instructions body in workflow file.");let j=I5(Z.name,"name",!1)??J.trim();if(!j)throw Error("Missing workflow name.");return{name:j,disabled:Z8(Z.disabled,"disabled")??(Z8(Z.enabled,"enabled")===!1?!0:void 0),instructions:f,frontmatter:Z}}function $4($){return bP($)}function J4($){return hP($)}function Z4($){return kP($)}async function TH($){if(S$($)===".cline"){let J=await l9($);return(await Promise.all(J.map((Q)=>TH(q0(Q,aJ))))).flat()}try{let J=await c9($,{withFileTypes:!0}),Z=[];for(let Q of J){if(Q.isFile()&&Q.name===h5){Z.push({directoryPath:$,fileName:Q.name,filePath:q0($,Q.name)});continue}let W=q0($,Q.name);if(Q.isDirectory()||Q.isSymbolicLink()&&await u9(W).then((j)=>j.isDirectory()).catch((j)=>{if(J8(j))return!1;throw j}))Z.push({directoryPath:W,fileName:h5,filePath:q0(W,h5)})}return Z}catch(J){if(J8(J))return[];throw J}}async function x5($){if(S$($)===".cline"){let J=await l9($);return(await Promise.all(J.map((Q)=>x5(q0(Q,"rules.md"))))).flat()}try{if((await u9($)).isFile())return[{directoryPath:CP($),fileName:S$($),filePath:$}]}catch(J){if(!J8(J))throw J}try{let Z=(await c9($,{withFileTypes:!0})).filter((W)=>W.isFile()&&k5(W.name)).map((W)=>({directoryPath:$,fileName:W.name,filePath:q0($,W.name)})),Q=q0($,"AGENTS.md");try{if((await u9(Q)).isFile()){if(!Z.some((j)=>j.fileName==="AGENTS.md"))Z.push({directoryPath:$,fileName:"AGENTS.md",filePath:Q})}}catch{}return Z}catch(J){if(J8(J))return[];throw J}}async function uP($){if(S$($)===".cline"){let J=await l9($);return(await Promise.all(J.map((Q)=>x5(q0(Q,tJ))))).flat()}return x5($)}function Q4($){let J=gP($),Z=$?.workspacePath?q0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Z?_H([...J,Z]):J,discoverFiles:TH,includeFile:(Q)=>Q===h5,parseFile:(Q)=>sJ(Q.content,S$(Q.directoryPath)),resolveId:(Q)=>d9(Q.name)}}function W4($){let J=$?.directories??J4($?.workspacePath),Z=$?.workspacePath?q0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Z?[...J,Z]:J,discoverFiles:x5,includeFile:(Q,W)=>Q===".clinerules"||k5(Q)||k5(W),parseFile:(Q)=>oJ(Q.content,vP(Q,$?.workspacePath)),resolveId:(Q)=>d9(Q.name)}}function f4($){let J=$?.directories??Z4($?.workspacePath),Z=$?.workspacePath?q0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Z?[...J,Z]:J,discoverFiles:uP,includeFile:(Q)=>k5(Q),parseFile:(Q)=>eJ(Q.content,S$(Q.filePath,b5(Q.filePath))),resolveId:(Q)=>d9(Q.name)}}function NH($){let J=[Q4($?.skills),W4($?.rules),f4($?.workflows)];return new p1(J,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as MH}from"@cline/shared";function cP($,J){if($.description?.trim())return MH($.description,".");if(J==="workflow")return;return MH($.instructions,".")}function dP($){return $.disabled!==!0}function qH($,J){return[...$.getSnapshot(J).entries()].map(([Z,Q])=>({id:Z,record:Q})).filter(({record:Z})=>dP(Z.item)).map(({id:Z,record:Q})=>({id:Z,name:Q.item.name,instructions:Q.item.instructions,description:cP(Q.item,J),kind:J})).sort((Z,Q)=>Z.name.localeCompare(Q.name))}function j4($){let J=new Map;for(let Z of[...qH($,"workflow"),...qH($,"skill")])if(!J.has(Z.name))J.set(Z.name,Z);return[...J.values()].sort((Z,Q)=>Z.name.localeCompare(Q.name))}function yH($,J){if(!$.startsWith("/")||$.length<2)return $;let Z=$.match(/^\/(\S+)/);if(!Z)return $;let Q=Z[1];if(!Q)return $;let W=Q.length+1,f=$.slice(W),j=j4(J).find((X)=>X.name===Q);return j?`${j.instructions}${f}`:$}var SH={};w(SH,{mergeRulesForSystemPrompt:()=>W8,loadRulesForSystemPromptFromWatcher:()=>r9,listEnabledRulesFromWatcher:()=>wH,isRuleEnabled:()=>g5,formatRulesForSystemPrompt:()=>Q8});function g5($){return $.disabled!==!0}function Q8($){if($.length===0)return"";return`
184
+ </html>`;var gX="a8331954c0cf48ba99b5dd223a14c6ea",vX="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",uX="openid offline_access",H6="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",cX="c1aba3deed5740659981a752714eba33",dX="https://login-ext.identity.oraclecloud.com",lX="openid offline_access",Y6="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",pX="opc-request-id",_R="/auth/oca",zR=Array.from({length:11},($,f)=>48801+f),OR=300000,TR=30000,rX=30000,NR=600000;class A6 extends Error{status;errorCode;constructor($,f){super($);this.name="OcaOAuthTokenError",this.status=f?.status,this.errorCode=f?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var j1={internal:{clientId:gX,idcsUrl:vX,scopes:uX,baseUrl:H6},external:{clientId:cX,idcsUrl:dX,scopes:lX,baseUrl:Y6}},g8=new Map,MR=86400000,yR=300000,qR=32,T9=new O9(MR,qR);function iX($){if(typeof $==="function")return $();return $??"internal"}function nX($){return{internal:{clientId:$?.internal?.clientId??j1.internal.clientId,idcsUrl:$?.internal?.idcsUrl??j1.internal.idcsUrl,scopes:$?.internal?.scopes??j1.internal.scopes,baseUrl:$?.internal?.baseUrl??j1.internal.baseUrl},external:{clientId:$?.external?.clientId??j1.external.clientId,idcsUrl:$?.external?.idcsUrl??j1.external.idcsUrl,scopes:$?.external?.scopes??j1.external.scopes,baseUrl:$?.external?.baseUrl??j1.external.baseUrl}}}function wR($=Date.now()){let f=$-NR;for(let[J,Z]of g8.entries())if(Z.createdAt<f)g8.delete(J)}function SR($,f,J){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let Q=_0(f)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;let j=_0(J)?.exp;if(typeof j==="number"&&j>0)return j*1000;return Date.now()+3600000}function aX($,f,J){let Z=$.access_token;if(!Z)throw Error("Token response did not include an access token");let Q=$.refresh_token??J?.refresh;if(!Q)throw Error("Token response did not include a refresh token");let W=_0($.id_token),j=_0(Z),X=W?.sub??j?.sub,H=W?.email??j?.email;return{access:Z,refresh:Q,expires:SR($,Z,$.id_token),accountId:X??J?.accountId,email:H??J?.email,metadata:{...J?.metadata??{},provider:"oca",mode:f,subject:X,idToken:$.id_token}}}async function tX($,f){let J=l4($),Z=T9.get(J);if(Z)return Z;let Q=`${J}/.well-known/openid-configuration`,W=await fetch(Q,{method:"GET",signal:AbortSignal.timeout(f)});if(!W.ok){let H=`${J}/oauth2/v1/token`;return T9.set(J,H,Date.now(),yR),H}let X=(await W.json()).token_endpoint||`${J}/oauth2/v1/token`;return T9.set(J,X),X}function sX($){return{code:$.error,message:$.error_description}}async function hR($){let f=g8.get($.state);if(!f)throw Error("No PKCE verifier found for this state");g8.delete($.state);let J=$.mode==="external"?$.config.external:$.config.internal,Z=await tX(J.idcsUrl,$.requestTimeoutMs),Q=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:f.redirectUri,client_id:J.clientId,code_verifier:f.verifier}),W=await fetch(Z,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:Q,signal:AbortSignal.timeout($.requestTimeoutMs)}),j=await W.json();if(!W.ok){let H=sX(j);throw new A6(`Token exchange failed: ${W.status}${H.message?` - ${H.message}`:""}`,{status:W.status,errorCode:H.code})}let X=_0(j.id_token);if(!j.id_token||!X)throw Error("No ID token received from OCA");if(X.nonce!==f.nonce)throw Error("OIDC nonce verification failed");return aX(j,$.mode)}function CR($){let f=$.mode==="external"?$.config.external:$.config.internal,J=new URL(`${l4(f.idcsUrl)}/oauth2/v1/authorize`);return J.searchParams.set("client_id",f.clientId),J.searchParams.set("response_type","code"),J.searchParams.set("scope",f.scopes),J.searchParams.set("code_challenge",$.challenge),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("redirect_uri",$.callbackUrl),J.searchParams.set("state",$.state),J.searchParams.set("nonce",$.nonce),J.toString()}async function $2($){L$($.telemetry,"oca");let f=nX($.config),J=iX($.mode),Z=$.callbackPorts?.length?$.callbackPorts:zR,Q=$.callbackPath??_R,W=$.requestTimeoutMs??rX,j=await e0({ports:Z,callbackPath:Q,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=j.callbackUrl;if(!X)throw Error("Unable to bind local OAuth callback server");let H=mX(16),Y=mX(16),{verifier:A,challenge:V}=await d4();wR(),g8.set(H,{verifier:A,nonce:Y,mode:J,redirectUri:X,createdAt:Date.now()});let B=CR({callbackUrl:X,mode:J,state:H,nonce:Y,challenge:V,config:f});$.callbacks.onAuth({url:B,instructions:"Continue the authentication process in your browser."});try{let K=await df({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),G=K.code,R=K.state;if(K.error)throw Error(`OAuth error: ${K.error}`);if(!G){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!R||R!==H)throw Error("State mismatch");let P=await hR({code:G,state:R,mode:J,config:f,requestTimeoutMs:W});return _$($.telemetry,"oca"),O$($.telemetry,{id:P.accountId,email:P.email,provider:"oca"}),P}catch(K){throw z$($.telemetry,"oca",K instanceof Error?K.message:String(K)),K}finally{j.close()}}async function v8($,f={}){let J=nX(f.config),Z=f.requestTimeoutMs??rX,Q=$.metadata?.mode,W=Q==="internal"||Q==="external"?Q:iX(f.mode),j=W==="external"?J.external:J.internal,X=await tX(j.idcsUrl,Z),H=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:j.clientId}),Y=await fetch(X,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:H,signal:AbortSignal.timeout(Z)}),A=await Y.json();if(!Y.ok){let V=sX(A);throw new A6(`Token refresh failed: ${Y.status}${V.message?` - ${V.message}`:""}`,{status:Y.status,errorCode:V.code})}return aX(A,W,$)}async function u8($,f,J){if(!$)return null;let Z=f?.refreshBufferMs??J?.refreshBufferMs??OR,Q=f?.retryableTokenGraceMs??J?.retryableTokenGraceMs??TR;if(f?.forceRefresh!==!0&&!u1($,Z))return $;try{return await v8($,J)}catch(j){if(j instanceof A6&&j.isLikelyInvalidGrant())return l$(J?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>Q)return $;return null}}function N9($={}){return{id:"oca",name:"Oracle Code Assist",usesCallbackServer:!0,async login(f){return $2({...$,callbacks:f})},async refreshToken(f){return v8(f,$)},getApiKey(f){return f.access}}}async function V6($,f){let J=new TextEncoder,Z=async(Y)=>{let A=await crypto.subtle.digest("SHA-256",J.encode(Y));return Array.from(new Uint8Array(A).slice(0,4),(V)=>V.toString(16).padStart(2,"0")).join("")},[Q,W]=await Promise.all([Z(f),Z($)]),j=Math.floor(Date.now()/1000).toString(16).padStart(8,"0"),X=new Uint32Array(1);crypto.getRandomValues(X);let H=(X[0]??0).toString(16).padStart(8,"0");return Q+W+j+H}async function M9($){let f=await V6($.taskId,$.accessToken);return{Authorization:`Bearer ${$.accessToken}`,"Content-Type":"application/json",client:$.metadata?.client??"Cline","client-version":$.metadata?.clientVersion??"unknown","client-ide":$.metadata?.clientIde??"unknown","client-ide-version":$.metadata?.clientIdeVersion??"unknown",[pX]:f}}var WH={};w(WH,{resolveProviderConfig:()=>l8,getProviderConfig:()=>_6,getLiveModelsCatalog:()=>f2,clearPublicModelsCatalogCache:()=>eR,clearPrivateModelsCatalogCache:()=>C9,clearLiveModelsCatalogCache:()=>h9,OPENAI_COMPATIBLE_PROVIDERS:()=>d8,DEFAULT_MODELS_CATALOG_URL:()=>U6});import*as H0 from"@cline/llms";function y9($){if(!Array.isArray($))return[];return $.map((f)=>{if(typeof f==="string")return f.trim();if(f&&typeof f==="object"){let J=f;for(let Z of[J.id,J.name,J.model])if(typeof Z==="string"&&Z.trim())return Z.trim()}return""}).filter((f)=>f.length>0)}function ER($,f){let J=y9($);if(J.length>0)return J;if(!$||typeof $!=="object")return[];let Z=$,Q=y9(Z.data??Z.models);if(Q.length>0)return Q;if(Z.models&&typeof Z.models==="object"&&!Array.isArray(Z.models)){let j=Object.keys(Z.models).filter((X)=>X.trim().length>0);if(j.length>0)return j}let W=Z.providers?.[f];if(W&&typeof W==="object"){let X=y9(W.models??W);if(X.length>0)return X}return[]}async function B6($,f){let J=await fetch($,{method:"GET"});if(!J.ok)throw Error(`failed to fetch models from ${$}: HTTP ${J.status}`);return ER(await J.json(),f)}function eX($){return $.replace(/\/+$/,"")}function K6($,f,J){let Z=J?.trim();if(!Z)return;let Q=$?.trim();if(!Q||!f?.trim())return Z;try{let W=new URL(Z),j=new URL(f),X=new URL(Q);if(W.origin!==j.origin)return Z;let H=eX(j.pathname),Y=eX(X.pathname);if(H&&W.pathname.startsWith(`${H}/`)){let A=W.pathname.slice(H.length);X.pathname=`${Y}${A}`}else X.pathname=W.pathname;return X.search=W.search,X.hash=W.hash,X.toString()}catch{return Z}}function bR($){return Object.fromEntries(Object.entries($).map(([f,J])=>[f,{...J}]))}function kR($){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 IR=Object.values(H0.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:bR($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),fH=Object.fromEntries(IR.map(($)=>[$.id,$]));function xR($){return fH[$]}function mR(){return Object.fromEntries(Object.entries(fH).filter(([,$])=>kR($)))}function JH($=[]){let f=$.flatMap((J)=>{switch(J){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[J];default:return[]}});return f.length>0?f:void 0}var U6="https://models.dev/api.json",gR=600000,ZH=300000,vR=5000,F6=new Map,c8=new Map,q9=new Map,G6=new Map;async function uR(){return H0.getGeneratedProviderModels()}async function cR($,f={},J={},Z={},Q={},W={}){let j=await uR(),X=H0.resolveProviderModelCatalogKeys($),H=Object.assign({},...X.map((V)=>j[V]??{})),Y=Boolean(H0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),A=Object.keys(Q).length>0;if(Y&&A)return H0.sortModelsByReleaseDate({...Q,...W});if($==="openai-codex")return H0.sortModelsByReleaseDate({...f,...H0.filterOpenAICodexModels(J),...Q,...W});return H0.sortModelsByReleaseDate({...H,...f,...J,...Z,...Q,...W})}function dR($,f){let J=H0.resolveProviderModelCatalogKeys($);return Object.assign({},...J.map((Z)=>f[Z]??{}))}function R6($){let f=$?.trim();return f&&f.length>0?f:""}function S9($){let f=$.apiKey?.trim()||$.accessToken?.trim();return f&&f.length>0?f:void 0}function lR($){let f=2166136261;for(let J=0;J<$.length;J+=1)f^=$.charCodeAt(J),f+=(f<<1)+(f<<4)+(f<<7)+(f<<8)+(f<<24);return(f>>>0).toString(16)}function pR($,f){return`${$}:${R6(f.baseUrl)}:${lR(S9(f)??"")}`}async function D6($,f,J=vR){let Z=new AbortController,Q=setTimeout(()=>Z.abort(),J);try{return await fetch($,{...f,signal:Z.signal})}finally{clearTimeout(Q)}}function s1($,f,J){if(J&&!$.includes(f))$.push(f)}function L6($,f){let J=["streaming","tools"];return s1(J,"images",Boolean(f.supportsImages)),s1(J,"prompt-cache",Boolean(f.supportsPromptCache)),s1(J,"reasoning",Boolean(f.supportsReasoning)),{id:$,name:f.name??$,contextWindow:f.contextWindow,maxInputTokens:f.maxInputTokens,maxTokens:f.maxTokens,capabilities:J,releaseDate:f.releaseDate,status:"active"}}async function rR($,f){let J=await D6("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${f}`,"Content-Type":"application/json"}});if(!J.ok)throw Error(`Baseten model refresh failed: HTTP ${J.status}`);let Q=(await J.json())?.data??[],W={};for(let j of Q){let X=j.id?.trim();if(!X)continue;if(X.includes("whisper")||X.includes("tts")||X.includes("embedding"))continue;let H=j.supported_features??[];W[X]=L6(X,{name:X,contextWindow:j.context_length,maxInputTokens:j.context_length,maxTokens:j.max_completion_tokens,supportsReasoning:H.includes("reasoning")||H.includes("reasoning_effort"),supportsImages:!1})}return W}function $H($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let f=Number($);return Number.isFinite(f)?f:void 0}return}async function iR($,f){let J=await D6("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":f}});if(!J.ok)throw Error(`Hicap model refresh failed: HTTP ${J.status}`);let Q=(await J.json())?.data??[],W={};for(let j of Q){let X=j.id?.trim();if(!X)continue;W[X]=L6(X,{name:X,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return W}async function nR($,f){let Z=`${(R6($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,Q=await D6(Z,{method:"GET",headers:{Authorization:`Bearer ${f}`,accept:"application/json"}});if(!Q.ok)throw Error(`Poolside model refresh failed: HTTP ${Q.status}`);let j=(await Q.json())?.data??[],X={};for(let H of j){let Y=H.id?.trim();if(!Y)continue;let A=H.supported_features??[],V=H.supported_sampling_parameters??[],B=H.input_modalities??[],K=["streaming"];s1(K,"tools",A.includes("tools")),s1(K,"reasoning",A.includes("reasoning")),s1(K,"temperature",V.includes("temperature")),s1(K,"images",B.includes("image"));let G={input:$H(H.pricing?.prompt),output:$H(H.pricing?.completion)};X[Y]={id:Y,name:H.name??Y,description:H.description,contextWindow:H.context_length,maxInputTokens:H.context_length,maxTokens:H.max_completion_tokens,capabilities:K,pricing:G.input!==void 0||G.output!==void 0?G:void 0,status:"active"}}return X}function aR($){let f=R6($);if(!f)return"http://localhost:4000";return f.endsWith("/v1")?f.slice(0,-3):f}async function tR($,f){let Z=`${aR($.baseUrl)}/v1/model/info`,Q=async(Y)=>D6(Z,{method:"GET",headers:{accept:"application/json",...Y}}),W=await Q({"x-litellm-api-key":f});if(!W.ok)W=await Q({Authorization:`Bearer ${f}`});if(!W.ok)throw Error(`LiteLLM model refresh failed: HTTP ${W.status}`);let X=(await W.json())?.data??[],H={};for(let Y of X){let A=Y.model_name?.trim(),B=Y.litellm_params?.model?.trim()||A;if(!B)continue;let K=Y.model_info,G=L6(B,{name:A??B,maxTokens:K?.max_output_tokens??K?.max_tokens,maxInputTokens:K?.max_input_tokens??K?.max_tokens,supportsImages:K?.supports_vision,supportsPromptCache:K?.supports_prompt_caching,supportsReasoning:K?.supports_reasoning});if(H[B]=G,A)H[A]={...G,id:A,name:A}}return H}var QH={baseten:rR,hicap:iR,litellm:tR,poolside:nR},w9=new Map,P6=new Map;function sR($,f){return`${$}:${R6(f.baseUrl)}`}async function oR($,f,J){let Z=H0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],Q=K6(J.baseUrl,Z?.provider.baseUrl,Z?.provider.modelsSourceUrl);if(!Q)return{};let W=f?.cacheTtlMs??ZH,j=sR($,J),X=Date.now(),H=w9.get(j);if(H&&H.expiresAt>X)return H.data;let Y=P6.get(j);if(Y)return Y;let A=B6(Q,$).then((V)=>{let B=Object.fromEntries(V.map((K)=>[K,L6(K,{name:K})]));return w9.set(j,{data:B,expiresAt:X+W}),B}).finally(()=>{P6.delete(j)});return P6.set(j,A),A}function eR(){w9.clear(),P6.clear()}async function $D($,f){let J=S9(f);if(!J)return{};let Z=QH[$];if(!Z)return{};return Z(f,J)}function fD($,f,J){if(!J)return!1;if(!QH[$])return!1;if(f?.loadPrivateOnAuth===!1)return!1;return Boolean(S9(J))}async function JD($,f,J){let Z=f?.cacheTtlMs??ZH,Q=pR($,J),W=Date.now(),j=q9.get(Q);if(j&&j.expiresAt>W)return j.data;let X=G6.get(Q);if(X)return X;let H=$D($,J).then((Y)=>{return q9.set(Q,{data:Y,expiresAt:W+Z}),Y}).finally(()=>{G6.delete(Q)});return G6.set(Q,H),H}async function ZD($){return H0.fetchModelsDevProviderModels($,globalThis.fetch)}async function f2($={}){let f=$.url??U6,J=$.cacheTtlMs??gR,Z=Date.now(),Q=F6.get(f);if(Q&&Q.expiresAt>Z)return Q.data;let W=c8.get(f);if(W)return W;let j=ZD(f).then((X)=>{return F6.set(f,{data:X,expiresAt:Z+J}),X}).finally(()=>{c8.delete(f)});return c8.set(f,j),j}function h9($){if($){F6.delete($),c8.delete($);return}F6.clear(),c8.clear()}function C9(){q9.clear(),G6.clear()}function QD($){return Object.fromEntries(Object.entries($).map(([f,J])=>[f,{baseUrl:J.baseUrl,modelId:J.modelId,capabilities:JH(J.capabilities)}]))}var d8=QD(mR());function _6($){let f=xR($);if(!f)return;return{baseUrl:f.baseUrl||void 0,modelId:f.modelId,knownModels:f.knownModels,capabilities:JH(f.capabilities)}}async function l8($,f,J){let Z=_6($);if(!Z)return;try{let Q=f?.loadLatestOnInit?await f2(f):void 0,W=Q?dR($,Q):{},j=J&&fD($,f,J)?await JD($,f,J):{},H=Boolean(H0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?J??{providerId:$,modelId:Z.modelId,baseUrl:Z.baseUrl}:J,Y=H?await oR($,f,H).catch(()=>({})):{},A=await cR($,Z.knownModels,W,j,Y,J?.knownModels);return{...Z,knownModels:A}}catch(Q){if(f?.failOnError)throw Q;return Z}}var p8=x0.BUILT_IN_PROVIDER,E9=x0.BUILT_IN_PROVIDER_IDS,b9=x0.isBuiltInProviderId,J2=x0.normalizeProviderId,r8=y.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),z6=y.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),O6=y.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),T6=y.object({apiKey:y.string().optional(),accessToken:y.string().optional(),refreshToken:y.string().optional(),expiresAt:y.number().int().positive().optional(),accountId:y.string().optional()}),WD=y.enum(["none","low","medium","high","xhigh"]),N6=y.object({enabled:y.boolean().optional(),effort:WD.optional(),budgetTokens:y.number().int().positive().optional()}),M6=y.object({accessKey:y.string().optional(),secretKey:y.string().optional(),sessionToken:y.string().optional(),region:y.string().optional(),profile:y.string().optional(),authentication:y.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:y.boolean().optional(),useCrossRegionInference:y.boolean().optional(),useGlobalInference:y.boolean().optional(),endpoint:y.string().url().optional(),customModelBaseId:y.string().optional()}),y6=y.object({projectId:y.string().optional(),region:y.string().optional()}),q6=y.object({apiVersion:y.string().optional(),useIdentity:y.boolean().optional()}),w6=y.object({clientId:y.string().optional(),clientSecret:y.string().optional(),tokenUrl:y.string().url().optional(),resourceGroup:y.string().optional(),deploymentId:y.string().optional(),useOrchestrationMode:y.boolean().optional(),api:y.enum(["orchestration","foundation-models"]).optional(),defaultSettings:y.record(y.string(),y.unknown()).optional()}),S6=y.object({mode:y.enum(["internal","external"]).optional(),usePromptCache:y.boolean().optional()}),h6=y.object({loadLatestOnInit:y.boolean().optional(),loadPrivateOnAuth:y.boolean().optional(),url:y.string().url().optional(),cacheTtlMs:y.number().int().positive().optional(),failOnError:y.boolean().optional()}),X1=y.object({provider:r8,apiKey:y.string().optional(),auth:T6.optional(),model:y.string().optional(),protocol:z6.optional(),client:O6.optional(),routingProviderId:r8.optional(),maxTokens:y.number().int().positive().optional(),contextWindow:y.number().int().positive().optional(),baseUrl:y.string().url().optional(),headers:y.record(y.string(),y.string()).optional(),timeout:y.number().int().positive().optional(),reasoning:N6.optional(),aws:M6.optional(),gcp:y6.optional(),azure:q6.optional(),sap:w6.optional(),oca:S6.optional(),region:y.string().optional(),apiLine:y.enum(["china","international"]).optional(),capabilities:y.array(y.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:h6.optional()});function C6($){return X1.parse($)}function E6($){return X1.safeParse($)}function jD($){return $.protocol==="openai-responses"||$.client==="openai"}function m0($,f={}){let J=$.provider,Z=J2(J),Q=f.includeKnownModels!==!1,W=$.reasoning?.effort||"none",j=W==="none"?void 0:W,X=d8[Z],H=Object.assign({},...x0.resolveProviderModelCatalogKeys(Z).map((R)=>x0.getGeneratedModelsForProvider(R))),Y=Object.keys(H)[0],A=$.auth?.accessToken??$.apiKey??$.auth?.apiKey,V=$.baseUrl??(Z==="oca"?$.oca?.mode==="internal"?H6:Y6:X?.baseUrl),B=$.routingProviderId??(jD($)&&Z!==p8.OPENAI_NATIVE?p8.OPENAI_NATIVE:void 0),K=Q?X?.knownModels??(Object.keys(H).length>0?H:void 0):void 0,G={providerId:J,clientType:$.client,routingProviderId:B,modelId:$.model??X?.modelId??Y??"default",...Q?{knownModels:K}:{},apiKey:A,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:V,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:j,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??X?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(G).filter(([R,P])=>P!==void 0))}function k9($){let f=C6($);return m0(f)}function I9($){let f=E6($);if(f.success)return{success:!0,config:m0(f.data)};return{success:!1,error:f.error}}var i8=X1;var b6=H1.object({settings:X1,updatedAt:H1.string().datetime(),tokenSource:H1.enum(["manual","oauth","migration"]).default("manual")}),Z2=H1.object({version:H1.literal(1),lastUsedProvider:H1.string().min(1).optional(),providers:H1.record(H1.string(),b6)});function Y1(){return{version:1,providers:{}}}X$();var VH={};w(VH,{InMemoryWorkspaceManager:()=>W2});import{upsertWorkspaceInfo as AD,WorkspaceManifestSchema as m9}from"@cline/shared";var AH={};w(AH,{normalizeWorkspacePath:()=>h$,generateWorkspaceInfoWithDiagnostics:()=>n8,generateWorkspaceInfo:()=>Q2,buildWorkspaceMetadataWithInfo:()=>x9,buildWorkspaceMetadata:()=>a8});import{basename as XD,resolve as HD}from"node:path";import{performance as HH}from"node:perf_hooks";import{processWorkspaceInfo as YH}from"@cline/shared";import YD from"simple-git";function h$($){return HD($)}async function Q2($){return(await n8($)).info}function k6($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function n8($){let f=h$($),J={rootPath:f,hint:XD(f)},Z;try{let Q=YD({baseDir:f});if(!await Q.checkIsRepo())return{info:J,vcsType:"none"};try{let j=await Q.getRemotes(!0);if(j.length>0){let X=j.map((H)=>{let Y=H.refs.fetch||H.refs.push;return`${H.name}: ${Y}`});J.associatedRemoteUrls=X}}catch(j){Z??=k6(j)}try{let j=(await Q.revparse(["HEAD"])).trim();if(j.length>0)J.latestGitCommitHash=j}catch(j){Z??=k6(j)}try{let j=(await Q.branch()).current.trim();if(j.length>0)J.latestGitBranchName=j}catch(j){Z??=k6(j)}return{info:J,vcsType:"git",error:Z}}catch(Q){return{info:J,vcsType:"none",error:k6(Q)}}}async function a8($){let f=await Q2($);return YH(f)}async function x9($){let f=HH.now(),J=await n8($),Z=HH.now()-f,Q=J.info;return{workspaceInfo:Q,workspaceMetadata:YH(Q),durationMs:Z,vcsType:J.vcsType,initError:J.error}}class W2{manifest;listeners=new Set;constructor($){this.manifest=m9.parse($??{workspaces:{}})}async addWorkspacePath($){let f=await Q2($);return this.manifest=AD(this.manifest,f),this.emit({type:"workspace_added",workspace:f}),f}async switchWorkspace($){let f=h$($),J=this.manifest.workspaces[f];if(J)return this.manifest=m9.parse({...this.manifest,currentWorkspacePath:f}),this.emit({type:"workspace_switched",workspace:J}),J;let Z=await this.addWorkspacePath(f);return this.manifest=m9.parse({...this.manifest,currentWorkspacePath:Z.rootPath}),this.emit({type:"workspace_switched",workspace:Z}),Z}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let f=h$($);return this.manifest.workspaces[f]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let f of this.listeners)f($)}}L0();import{createHash as VD}from"node:crypto";var BH=new Set,KH=new Set;function BD($){return VD("sha256").update($).digest("hex")}function KD($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function GH($){if(!$.telemetry)return;let f=BD($.rootPath),J=$.rootCount??1;if(!BH.has(f))BH.add(f),A4($.telemetry,{root_count:J,vcs_types:KD($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!KH.has(f)){KH.add(f);let Z=Error($.initError.message);Z.name=$.initError.errorType||"Error",V4($.telemetry,Z,{fallback_to_single_root:!0,workspace_count:J})}}function PD($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function FD($,f,J){if(f.length>0)for(let W of f)J?.log(W.message,{severity:"warn"});if($.length===0)return;let Z=$.slice(0,3).map(PD).join("; "),Q=$.length>3?`; and ${$.length-3} more`:"";J?.log(`Some plugins failed to initialize. ${Z}${Q}. Use --verbose for more details.`,{severity:"warn"});for(let W of $)J?.log(`Plugin initialization failed (${W.phase}) for ${W.pluginPath}`,{severity:"warn",stack:W.stack,pluginPath:W.pluginPath,pluginName:W.pluginName})}function UD($,f){let J=typeof $.thinking==="boolean",Z=typeof $.reasoningEffort==="string";if(!J&&!Z)return f;return{...f??{},...J?{enabled:$.thinking}:{},...Z?{effort:$.reasoningEffort}:{}}}function PH($,f){return GD($,f)}function RD($){let f=0;for(let J of $??[]){if(J.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"&&!Array.isArray(J.metadata)?J.metadata:void 0)?.kind==="recovery_notice")continue;f+=1}return f}function DD($){let f={...$.storedHeaders??{},...$.configHeaders??{}},J=$.accountId?.trim()||LD($.accessToken);if(f.originator="cline",f.session_id=$.sessionId,f["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,J)f["ChatGPT-Account-Id"]=J;return f}function LD($){let f=$?.trim();if(!f)return;let J=_0(f),Z=J?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof Z==="string"&&Z.length>0)return Z;let Q=J?.organizations?.[0]?.id;if(typeof Q==="string"&&Q.length>0)return Q;let W=J?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;return}function _D($,f,J,Z,Q){let W=J.getProviderSettings($.providerId),j=Z||W?.modelCatalog?{...Z??{},...W?.modelCatalog??{}}:void 0,X={...W??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??W?.apiKey,baseUrl:$.baseUrl??W?.baseUrl,headers:$.providerId==="openai-codex"?DD({sessionId:f,configHeaders:$.headers,storedHeaders:W?.headers,accountId:W?.auth?.accountId,accessToken:$.apiKey??W?.auth?.accessToken??W?.apiKey}):$.headers??W?.headers,reasoning:UD($,W?.reasoning),modelCatalog:j},H=m0(X);if($.knownModels)H.knownModels=$.knownModels;if($.extensionContext)H.extensionContext=$.extensionContext;let A=$.fetch??H.fetch??Q;if(A)H.fetch=A;return H}async function FH($){let{input:f,sessionId:J,providerSettingsManager:Z,defaultTelemetry:Q,defaultCapabilities:W,defaultToolPolicies:j,defaultFetch:X,onPluginEvent:H,onTeamEvent:Y,createSpawnTool:A,localRuntime:V,readSessionMetadata:B,writeSessionMetadata:K}=$,G=f1(f.config),{modelCatalogDefaults:R,userInstructionService:P,configExtensions:F,onTeamRestored:U,...z}=V??{},O=Object.keys(z).length>0?z:void 0,{workspaceInfo:D,workspaceMetadata:_,durationMs:N,vcsType:q,initError:$0}=await x9(G),A0=O?.extensionContext,o={...A0??{},workspace:{...D,...A0?.workspace??{}},session:{...A0?.session??{},sessionId:J},logger:A0?.logger??O?.logger,telemetry:A0?.telemetry??O?.telemetry??Q};GH({telemetry:o.telemetry,rootPath:D.rootPath,workspaceInfo:D,rootCount:1,vcsType:q,durationMs:N,initError:$0,featureFlagEnabled:!0});let V0=ef({cwd:f.config.cwd,workspacePath:G,rootSessionId:J,logger:O?.logger,workspaceInfo:D}),i=uj(O?.hooks)?void 0:of({rootSessionId:J,workspacePath:G,workspaceInfo:D}),Z$=t1([O?.hooks,i]),p;if(PH(F,"plugins"))try{p=await af({pluginPaths:O?.pluginPaths,workspacePath:G,cwd:f.config.cwd,onEvent:H,providerId:f.config.providerId,modelId:f.config.modelId,workspaceInfo:D,session:o.session,client:o.client,user:o.user,logger:o.logger,telemetry:o.telemetry,automation:o.automation}),FD(p.failures,p.warnings,O?.logger)}catch(l2){let r=l2 instanceof Error?l2.message:String(l2);O?.logger?.log?.(`plugin loading failed; continuing without plugins (${r})`)}let k=tZ(V0?[V0]:void 0,tZ(O?.extensions,t4(p?.extensions))),D0=PH(F,"plugins")?r1(p?.pluginPaths??[]):void 0,n={...f.config,...O??{},sessionId:J,hooks:Z$,extensions:k,extensionContext:o,telemetry:o.telemetry},t0=_D(n,J,Z,R,X),T1=t1([n.hooks,n.checkpoint?.enabled===!0?yX({cwd:n.cwd,sessionId:J,logger:n.logger,createCheckpoint:n.checkpoint?.createCheckpoint,initialRunCount:RD(f.initialMessages),readSessionMetadata:B,writeSessionMetadata:K}):void 0]),N1={...n,providerConfig:t0,workspaceMetadata:_,hooks:T1},Of=f.toolPolicies??n.toolPolicies??j,d2=U0(W,f.capabilities),H4=d2?.requestToolApproval,VZ=d2?.toolExecutors,Tf=new W2({currentWorkspacePath:D.rootPath,workspaces:{[D.rootPath]:D}});return{effectiveInput:f,config:N1,providerConfig:t0,workspaceMetadata:_,workspaceInfo:D,extensions:k,hooks:T1,toolPolicies:Of,requestToolApproval:H4,pluginSandboxShutdown:p?.shutdown,runtimeBuilderInput:{config:N1,hooks:T1,extensions:k,onTeamEvent:Y,createSpawnTool:A,onTeamRestored:U,userInstructionService:P,pluginSkillDirectories:D0,configExtensions:F,toolExecutors:VZ,workspaceManager:Tf,logger:N1.logger,telemetry:N1.telemetry}}}import{existsSync as x6,mkdirSync as zD,readdirSync as OD,rmdirSync as TD,rmSync as ND,unlinkSync as MD}from"node:fs";import{dirname as UH,join as I6}from"node:path";function s(){return new Date().toISOString()}function t8($){if(!$||!x6($))return;try{MD($)}catch{}}function yD($){let f=mf($);if(f)return{rootSessionId:f.rootSessionId,fileStem:`${f.agentId}__${f.teamTaskId}`};let J=L8($);if(J)return{rootSessionId:J.rootSessionId,fileStem:J.agentId};return{rootSessionId:$,fileStem:$}}class g9{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return I6(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let f=this.sessionArtifactsDir($);if(!x6(f))zD(f,{recursive:!0});return f}sessionMessagesPath($){return I6(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,f=!1){let J=f?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return I6(J,`${$}.json`)}removeSessionDirIfEmpty($){let f=this.sessionArtifactsDir($),J=this.ensureSessionsDir();while(f.startsWith(J)&&f!==J){if(!x6(f)){f=UH(f);continue}try{if(OD(f).length>0)break;TD(f)}catch{break}f=UH(f)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!x6($))return;try{ND($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,f,J){let{rootSessionId:Z,fileStem:Q}=yD($),W=this.sessionArtifactsDir(Z);return{messagesPath:I6(W,`${Q}.messages.json`)}}}import{resolveDocumentsExtensionPath as qD}from"@cline/shared/storage";L0();function RH($,f,J,Z,Q){if(J)K4($.telemetry,{ulid:f,apiProvider:$.providerId,...Q});else B4($.telemetry,{ulid:f,apiProvider:$.providerId,...Q});wD($.telemetry,{workspacePath:Z})}function wD($,f){let J=qD("Hooks"),Z=Q1(f.workspacePath),Q=new Map;for(let W of Z){let j=W.hookEventName??"unknown",X=Q.get(j)??{global:0,workspace:0};if(W.path===J||W.path.startsWith(`${J}/`))X.global+=1;else X.workspace+=1;Q.set(j,X)}for(let[W,j]of Q.entries())O4($,W,j.global,j.workspace)}function DH($,f){for(let J of f.mentions)_4($,J,f.matchedFiles.includes(J)?1:0,"file",!f.matchedFiles.includes(J));for(let J of f.matchedFiles)D4($,"file",J.length);for(let J of f.ignoredMentions)L4($,"file","not_found",J)}var KK={};w(KK,{ProviderSettingsManager:()=>R$});import{chmodSync as PK,existsSync as y7,mkdirSync as XS,readFileSync as HS,writeFileSync as YS}from"node:fs";import{basename as FK,dirname as q7}from"node:path";import{resolveProviderSettingsPath as AS}from"@cline/shared/storage";var T={};w(T,{writeHubDiscovery:()=>K5,writeGlobalSettings:()=>J1,withHubStartupLock:()=>G5,verifyHubConnection:()=>V$,updateMcpServerOAuthState:()=>Jf,updateLocalProvider:()=>s5,uninstallPlugin:()=>$7,truncateNotificationBody:()=>sJ,toggleDisabledTool:()=>n4,toTeamProgressLifecycleEvent:()=>O2,toProviderConfig:()=>m0,toHubHealthUrl:()=>kQ,toHookConfigFileName:()=>x8,summarizeUsageFromMessages:()=>vf,stopLocalHubServerGracefully:()=>iQ,startLocalOAuthServer:()=>e0,startHubWebSocketServer:()=>Df,startHubServer:()=>VB,startClineDeviceAuth:()=>p9,splitCoreSessionConfig:()=>OJ,spawnDetachedHubServerWithRetry:()=>R2,spawnDetachedHubServer:()=>uQ,setTelemetryOptOutGlobally:()=>tj,setMcpServerDisabled:()=>$f,setDisabledTools:()=>Z9,setDisabledPlugin:()=>$X,sendHubCommand:()=>FV,saveLocalProviderSettings:()=>H7,saveLocalProviderOAuthCredentials:()=>B7,sanitizeSessionToken:()=>m1,safeParseSettings:()=>E6,safeCreateProviderConfig:()=>I9,runSubprocessEvent:()=>y2,runHook:()=>w2,reviveTeamStateDates:()=>x4,restartLocalHubIfIdleAfterStartupTimeout:()=>U5,resolveWorkspaceHubOwnerContext:()=>GA,resolveWorkflowsConfigSearchPaths:()=>BJ,resolveSkillsConfigSearchPaths:()=>AJ,resolveSharedHubOwnerContext:()=>Y0,resolveSessionBackend:()=>BW,resolveRulesConfigSearchPaths:()=>VJ,resolveProviderConfig:()=>l8,resolvePluginSkillDirectoriesFromPaths:()=>r1,resolvePluginConfigSearchPaths:()=>E8,resolveMcpServerRegistrations:()=>H$,resolveLocalClineAuthToken:()=>K7,resolveHubUrl:()=>UW,resolveHubOwnerContext:()=>I$,resolveHubEndpointOptions:()=>d0,resolveHubBuildId:()=>F1,resolveHooksConfigSearchPaths:()=>k8,resolveDisabledToolNames:()=>j$,resolveDisabledPluginPaths:()=>q8,resolveDefaultMcpSettingsPath:()=>z0,resolveDefaultHubPort:()=>U2,resolveDefaultHubPathname:()=>vQ,resolveDefaultHubHost:()=>gQ,resolveCoreSelectedToolIds:()=>g4,resolveCompatibleLocalHubUrl:()=>gJ,resolveClineDir:()=>AA,resolveClineDataDir:()=>kJ,resolveAndLoadAgentPlugins:()=>af,resolveAgentPluginPaths:()=>p1,requestHubShutdown:()=>mJ,requestDesktopToolApproval:()=>rW,rememberRecoverableLocalHubUrl:()=>U1,registerRemoteConfigSessionBlobUpload:()=>v5,registerMcpServersFromSettingsFile:()=>Zf,registerDisposable:()=>ZS,refreshProviderModelsFromSource:()=>Y7,refreshOpenAICodexToken:()=>JJ,refreshOcaToken:()=>v8,refreshClineToken:()=>$J,readSessionCheckpointHistory:()=>oJ,readRemoteConfigSessionBlobUploadMetadata:()=>xW,readHubDiscovery:()=>K0,readGlobalSettings:()=>I0,probeHubServer:()=>A$,probeHubConnection:()=>PV,prewarmFileIndex:()=>S4,prewarmDetachedHubServer:()=>P5,prepareRemoteConfigCoreIntegration:()=>gW,parseWorkflowConfigFromMarkdown:()=>YJ,parseUserCommandEnvelope:()=>JS,parseSkillConfigFromMarkdown:()=>XJ,parseSettings:()=>C6,parseRuleConfigFromMarkdown:()=>HJ,parseHookEventPayload:()=>q2,openaiCodexOAuthProvider:()=>t9,normalizeWorkspacePath:()=>h$,normalizeUserInput:()=>fS,normalizeSdkError:()=>$S,normalizeRuntimeCapabilities:()=>U0,normalizeProviderId:()=>J2,normalizeOpenAICodexCredentials:()=>a9,normalizeOAuthProvider:()=>A7,normalizeHubWebSocketUrl:()=>R1,noopBasicLogger:()=>ew,migrateLegacyProviderSettings:()=>W4,mergeRulesForSystemPrompt:()=>B2,mergeAgentHooks:()=>t1,makeTeamTaskSubSessionId:()=>D8,makeSubSessionId:()=>xf,loginOpenAICodex:()=>H2,loginOcaOAuth:()=>$2,loginLocalProvider:()=>V7,loginClineOAuth:()=>X2,loadOpenTelemetryAdapter:()=>uw,loadMcpSettingsFile:()=>e1,loadLlmsConfigFromFile:()=>T7,loadAgentPluginsFromPathsWithDiagnostics:()=>l1,loadAgentPluginsFromPaths:()=>o4,loadAgentPluginFromPath:()=>h8,listSessionHistoryFromBackend:()=>hQ,listPluginToolsWithDiagnostics:()=>Q5,listPluginTools:()=>_J,listMcpServerOAuthStatuses:()=>DJ,listLocalProviders:()=>j7,listHookConfigFiles:()=>Q1,isToolDisabledGlobally:()=>sj,isTelemetryOptedOutGlobally:()=>i4,isSessionNotFoundError:()=>k$,isRuleEnabled:()=>a6,isPluginDisabledGlobally:()=>ej,isOpenAICodexTokenExpired:()=>n9,isHubReconnectableTransportError:()=>pQ,isHubCommandTimeoutError:()=>F5,isDiscoveryFilePresent:()=>BA,isClineAccountActionRequest:()=>m6,isBuiltInProviderId:()=>b9,identifyAccount:()=>O$,hasMcpSettingsFile:()=>E$,getValidOpenAICodexCredentials:()=>ZJ,getValidOcaCredentials:()=>u8,getValidClineCredentials:()=>fJ,getProviderConfigFields:()=>G7,getProviderConfig:()=>_6,getMcpServerOAuthState:()=>ff,getLocalProviderModels:()=>X7,getLiveModelsCatalog:()=>f2,getFileIndex:()=>y$,getCurrentContextSize:()=>$9,getCoreHeadlessToolNames:()=>R8,getCoreDefaultEnabledToolIds:()=>m4,getCoreBuiltinToolCatalog:()=>I1,getCoreAcpToolNames:()=>v4,getClineDefaultSystemPrompt:()=>dw,generateWorkspaceInfoWithDiagnostics:()=>n8,generateWorkspaceInfo:()=>Q2,generateOcaOpcRequestId:()=>V6,formatRulesForSystemPrompt:()=>V2,formatDisplayUserInput:()=>ow,filterExtensionToolRegistrations:()=>t4,filterDisabledTools:()=>c1,filterDisabledPluginPaths:()=>a4,fetchClineRecommendedModels:()=>z7,executeClineAccountAction:()=>g6,ensureHubWebSocketServer:()=>I5,ensureHubServer:()=>BB,ensureDetachedHubServer:()=>FA,ensureCustomProvidersLoaded:()=>n5,ensureCompatibleLocalHubUrl:()=>Vf,enrichPromptWithMentions:()=>qf,emptyWorkspaceManifest:()=>sw,emptyStoredProviderSettings:()=>Y1,discoverPluginModulePaths:()=>b8,deriveSubsessionStatus:()=>_8,deleteLocalProvider:()=>o5,defineLlmsConfig:()=>O7,createWorkflowsConfigDefinition:()=>PJ,createUserInstructionConfigService:()=>V1,createToolPoliciesWithPreset:()=>C4,createTool:()=>tw,createTeamName:()=>c5,createSubprocessHooks:()=>M5,createSpawnAgentTool:()=>e$,createSkillsConfigDefinition:()=>KJ,createSessionHost:()=>M2,createRuntimeHost:()=>M2,createRulesConfigDefinition:()=>GJ,createRemoteConfigSessionMessagesArtifactUploader:()=>mW,createProviderConfig:()=>k9,createOpenTelemetryTelemetryService:()=>tJ,createOcaRequestHeaders:()=>M9,createOcaOAuthProvider:()=>N9,createOAuthClientCallbacks:()=>e8,createMcpTools:()=>P2,createLocalHubScheduleRuntimeHandlers:()=>x5,createLlmsSdk:()=>M7,createInitialAccumulatedUsage:()=>B0,createInMemoryHubOwnerContext:()=>VA,createHubServerUrl:()=>$$,createHubAuthToken:()=>B5,createHookConfigFileHooks:()=>m8,createHookConfigFileExtension:()=>ef,createHookAuditHooks:()=>of,createDisabledMcpToolPolicy:()=>LJ,createDisabledMcpToolPolicies:()=>Z5,createDelegatedAgentConfigProvider:()=>Ef,createDelegatedAgent:()=>bf,createDefaultToolsWithPreset:()=>E4,createDefaultTools:()=>t$,createDefaultMcpServerClientFactory:()=>G2,createDefaultExecutors:()=>wf,createCoreSettingsService:()=>Wf,createCoreSessionSnapshot:()=>B$,createContributionRegistry:()=>aw,createContextCompactionPrepareTurn:()=>e2,createConfiguredTelemetryService:()=>u$,createConfiguredTelemetryHandle:()=>b2,createClineTelemetryServiceMetadata:()=>nw,createClineTelemetryServiceConfig:()=>iw,createClineOAuthProvider:()=>i9,createBuiltinTools:()=>x1,createAgentTeamsTools:()=>k1,createAgentRuntime:()=>jS,createAgentHooksExtension:()=>tf,connectToHub:()=>S5,completeClineDeviceAuth:()=>r9,clearPrivateModelsCatalogCache:()=>C9,clearLiveModelsCatalogCache:()=>h9,clearHubDiscovery:()=>c0,captureWorkspacePathResolved:()=>r7,captureWorkspaceInitialized:()=>A4,captureWorkspaceInitError:()=>V4,captureToolUsage:()=>F4,captureTokenUsage:()=>G4,captureTaskRestarted:()=>K4,captureTaskCreated:()=>B4,captureTaskCompleted:()=>p2,captureSubagentExecution:()=>i2,captureSkillUsed:()=>U4,captureSdkError:()=>rw,captureProviderConfigured:()=>i7,captureProviderApiError:()=>r2,captureModeSwitch:()=>P4,captureMentionUsed:()=>D4,captureMentionSearchResults:()=>_4,captureMentionFailed:()=>L4,captureHookDiscovery:()=>O4,captureExtensionActivated:()=>p7,captureDiffEditFailure:()=>R4,captureConversationTurnEvent:()=>Nf,captureCompactionSkipped:()=>N4,captureCompactionExecuted:()=>T4,captureAuthSucceeded:()=>_$,captureAuthStarted:()=>L$,captureAuthLoggedOut:()=>l$,captureAuthFailed:()=>z$,captureAgentTeamCreated:()=>z4,captureAgentCreated:()=>p$,buildWorkspaceMetadata:()=>a8,buildTeamProgressSummary:()=>z2,buildSdkErrorProperties:()=>lw,buildRemoteConfigSessionBlobUploadMetadata:()=>m5,buildDelegatedAgentConfig:()=>E1,bootstrapAgentTeams:()=>If,authorizeMcpServerOAuth:()=>$5,addLocalProvider:()=>W7,accumulateUsageTotals:()=>X0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>jJ,UnifiedConfigFileWatcher:()=>o1,ToolPresets:()=>k0,TelemetryService:()=>C2,TelemetryLoggerSink:()=>aJ,TEAM_TOOL_NAMES:()=>kf,SubprocessSandbox:()=>rf,StoredProviderSettingsSchema:()=>Z2,StoredProviderSettingsEntrySchema:()=>b6,SqliteTeamStore:()=>Lf,SqliteSessionStore:()=>G$,SessionVersioningService:()=>z1,SessionVersioningError:()=>w0,SessionSource:()=>G0,SessionNotFoundError:()=>b$,SapSettingsSchema:()=>w6,SKILLS_CONFIG_DIRECTORY_NAME:()=>WJ,SESSION_STATUSES:()=>z8,SESSION_NOT_FOUND_ERROR_CODE:()=>jf,SDK_ERROR_TELEMETRY_EVENT:()=>QS,RpcClineAccountService:()=>o8,RemoteRuntimeHost:()=>_2,ReasoningSettingsSchema:()=>N6,RULES_CONFIG_DIRECTORY_NAME:()=>n6,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>g5,ProviderSettingsSchema:()=>X1,ProviderSettingsManager:()=>R$,ProviderProtocolSchema:()=>z6,ProviderIdSchema:()=>r8,ProviderClientSchema:()=>O6,OpenTelemetryProvider:()=>E2,OcaSettingsSchema:()=>S6,OPENAI_COMPATIBLE_PROVIDERS:()=>d8,NodeHubClient:()=>f$,NativeHubTransportAdapter:()=>J4,ModelCatalogSettingsSchema:()=>h6,LocalRuntimeHost:()=>U$,Llms:()=>cw,InMemoryWorkspaceManager:()=>W2,InMemoryMcpManager:()=>Qf,HubUIClient:()=>LW,HubTransportError:()=>O0,HubSessionClient:()=>DW,HubServerTransport:()=>I2,HubScheduleService:()=>h2,HubScheduleCommandService:()=>S2,HubRuntimeHost:()=>x$,HubCommandError:()=>D2,HookEventPayloadSchema:()=>N5,HookEventNameSchema:()=>T5,HookConfigFileName:()=>sf,HOOK_CONFIG_FILE_EVENT_MAP:()=>I8,HOOKS_CONFIG_DIRECTORY_NAME:()=>W6,GlobalSettingsSchema:()=>y8,GcpSettingsSchema:()=>y6,FileTeamPersistenceStore:()=>JZ,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>HZ,DefaultToolNames:()=>J0,DefaultRuntimeBuilder:()=>g2,DefaultLlmsSdk:()=>j4,DEFAULT_MODELS_CATALOG_URL:()=>U6,DEFAULT_HUB_PORT:()=>xQ,DEFAULT_HUB_PATHNAME:()=>mQ,DEFAULT_HUB_HOST:()=>IQ,CoreSettingsService:()=>B1,CoreSessionService:()=>F$,ContributionRegistry:()=>pw,ClineCore:()=>iJ,ClineAccountService:()=>s8,ChatViewStateSchema:()=>L7,ChatSummarySchema:()=>XZ,ChatSessionStatusSchema:()=>QZ,ChatSessionConfigSchema:()=>ZZ,ChatMessageSchema:()=>jZ,ChatMessageRoleSchema:()=>WZ,CORE_TELEMETRY_EVENTS:()=>x,CORE_BUILD_VERSION:()=>_7,BrowserWebSocketHubAdapter:()=>f4,BUILT_IN_PROVIDER_IDS:()=>E9,BUILT_IN_PROVIDER:()=>p8,AzureSettingsSchema:()=>q6,AwsSettingsSchema:()=>M6,AuthSettingsSchema:()=>T6,AgentTeamsRuntime:()=>Gf,AgentTeam:()=>N2,Agent:()=>WS,ALL_DEFAULT_TOOL_NAMES:()=>i$});M(T,cl);import*as cw from"@cline/llms";import{buildClineSystemPrompt as dw,buildSdkErrorProperties as lw,ContributionRegistry as pw,captureSdkError as rw,createClineTelemetryServiceConfig as iw,createClineTelemetryServiceMetadata as nw,createContributionRegistry as aw,createTool as tw,emptyWorkspaceManifest as sw,formatDisplayUserInput as ow,noopBasicLogger as ew,normalizeSdkError as $S,normalizeUserInput as fS,parseUserCommandEnvelope as JS,registerDisposable as ZS,SDK_ERROR_TELEMETRY_EVENT as QS}from"@cline/shared";import"@cline/shared/storage";var _H={};w(_H,{isClineAccountActionRequest:()=>m6,executeClineAccountAction:()=>g6,RpcClineAccountService:()=>o8,ClineAccountService:()=>s8});function SD($){if(typeof $!=="object"||$===null||!("error"in $))return;let f=$.error;return typeof f==="string"&&f.trim()?f:void 0}function LH($,f,J){let Z=SD(J);if(Z)return Z;let Q=f.trim();if(Q){let W=Q.length>200?`${Q.slice(0,200)}...`:Q;return`Cline account request failed with status ${$}: ${W}`}return`Cline account request failed with status ${$}`}class s8{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let f=$.apiBaseUrl.trim();if(!f)throw Error("apiBaseUrl is required");this.apiBaseUrl=f,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let f=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(f)}/balance`)}async fetchUsageTransactions($){let f=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(f)}/usages`)).items??[]}async fetchPaymentTransactions($){let f=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(f)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchOrganization($){let f=$.trim();if(!f)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(f)}`)}async fetchOrganizationBalance($){let f=$.trim();if(!f)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(f)}/balance`)}async fetchOrganizationUsageTransactions($){let f=$.organizationId.trim();if(!f)throw Error("organizationId is required");let J=await this.resolveOrganizationMemberId(f,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(f)}/members/${encodeURIComponent(J)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let f=$?.trim();if(f)return f;let Z=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(Z)return Z;let Q=await this.fetchMe();if(!Q.id?.trim())throw Error("Unable to resolve current user id");return Q.id}async resolveOrganizationMemberId($,f){let J=f?.trim();if(J)return J;let Q=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(Q)return Q;let j=(await this.fetchUserOrganizations()).find((X)=>X.organizationId===$)?.memberId;if(!j?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return j}async request($,f){let J=(await this.getAuthTokenFn())?.trim();if(!J)throw Error("No Cline account auth token found");let Z=this.getHeadersFn?await this.getHeadersFn():{},Q=new AbortController,W=setTimeout(()=>Q.abort(),this.requestTimeoutMs);try{let j=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:f?.method??"GET",headers:{Authorization:`Bearer ${J}`,"Content-Type":"application/json",...Z??{}},body:f?.body!==void 0?JSON.stringify(f.body):void 0,signal:Q.signal});if(j.status===204||f?.expectNoContent){if(!j.ok)throw Error(`Cline account request failed with status ${j.status}`);return}let X=await j.text(),H;if(X.trim())try{H=JSON.parse(X)}catch{if(!j.ok)throw Error(LH(j.status,X,void 0));throw Error("Cline account response was not valid JSON")}if(!j.ok)throw Error(LH(j.status,X,H));if(typeof H==="object"&&H!==null){let Y=H;if(typeof Y.success==="boolean"){if(!Y.success)throw Error(Y.error||"Cline account request failed");if(Y.data!==void 0)return Y.data}}if(H===void 0||H===null)throw Error("Cline account response payload was empty");return H}finally{clearTimeout(W)}}}function m6($){return $.action==="clineAccount"}async function g6($,f){switch($.operation){case"fetchMe":return f.fetchMe();case"fetchBalance":return f.fetchBalance($.userId);case"fetchUsageTransactions":return f.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return f.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return f.fetchUserOrganizations();case"fetchOrganizationBalance":return f.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return f.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await f.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return f.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class o8{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let f=$.trim();if(!f)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:f})}async fetchOrganizationUsageTransactions($){let f=$.organizationId.trim();if(!f)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:f,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var zH={};w(zH,{createOAuthClientCallbacks:()=>e8});function e8($){return{onAuth:({url:f,instructions:J})=>{if($.onOutput?.(J??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(f)).catch((Z)=>{$.onOpenUrlError?.({url:f,error:Z})})}catch(Z){$.onOpenUrlError?.({url:f,error:Z})}$.onOutput?.(f)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}L0();var SH={};w(SH,{startClineDeviceAuth:()=>p9,refreshClineToken:()=>$J,loginClineOAuth:()=>X2,getValidClineCredentials:()=>fJ,createClineOAuthProvider:()=>i9,completeClineDeviceAuth:()=>r9});import{getClineEnvironmentConfig as v9}from"@cline/shared";var v6={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},MH={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},u9="https://api.workos.com",hD="/auth",OH=Array.from({length:11},($,f)=>48801+f),CD=300000,ED=30000,j2=30000,bD=300,kD=5;class A1 extends Error{status;errorCode;constructor($,f){super($);this.name="ClineOAuthTokenError",this.status=f?.status,this.errorCode=f?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function ID($){let f=Date.parse($);if(Number.isNaN(f))throw Error(`Invalid expiresAt value: ${$}`);return f}function c9($,f,J={}){let Z=$.userInfo.clineUserId??J.accountId,Q=$.refreshToken??J.refresh;if(!Q)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:Q,expires:ID($.expiresAt),accountId:Z??void 0,email:$.userInfo.email||J.email,metadata:{provider:f,tokenType:$.tokenType,userInfo:$.userInfo}}}async function d9($){if(!$)return{};return typeof $==="function"?await $():$}function TH($,f){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return f;return Math.floor($)}async function NH($){await new Promise((f)=>setTimeout(f,$))}function l9($,f){if(!$.success||!$.data?.accessToken)throw Error(f);return $.data}async function yH($,f){let J=await fetch(v1(u9,MH.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(f?.requestTimeoutMs??j2)}),Z=await J.json().catch(()=>({}));if(!J.ok)throw new A1(`Device authorization failed: ${J.status}${Z.error_description?` - ${Z.error_description}`:""}`,{status:J.status,errorCode:Z.error});if(!Z.device_code||!Z.user_code||!Z.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:Z.device_code,userCode:Z.user_code,verificationUri:Z.verification_uri,verificationUriComplete:Z.verification_uri_complete,expiresInSeconds:TH(Z.expires_in,bD),pollIntervalSeconds:TH(Z.interval,kD)}}async function qH($){let f=Date.now()+$.expiresInSeconds*1000,J=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=f){let Z=await fetch(v1($.workosApiBaseUrl,MH.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)}),Q=await Z.json().catch(()=>({}));if(Z.ok){if(!Q.access_token||!Q.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:Q.access_token,refreshToken:Q.refresh_token,tokenType:Q.token_type??"Bearer"}}switch(Q.error){case"authorization_pending":{await NH(J*1000);break}case"slow_down":{J+=1,await NH(J*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new A1(Q.error_description||"WorkOS authorization failed",{status:Z.status,errorCode:Q.error});default:throw new A1(`WorkOS token polling failed: ${Z.status}${Q.error_description?` - ${Q.error_description}`:""}`,{status:Z.status,errorCode:Q.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function wH($,f,J){let Z={accessToken:$.accessToken,refreshToken:$.refreshToken},Q=await fetch(v1(f.apiBaseUrl,v6.register),{method:"POST",headers:{"Content-Type":"application/json",...await d9(f.headers)},body:JSON.stringify(Z),signal:AbortSignal.timeout(f.requestTimeoutMs??j2)});if(!Q.ok){let j=await Q.text().catch(()=>""),X=cf(j);throw new A1(`Token registration failed: ${Q.status}${X.message?` - ${X.message}`:""}`,{status:Q.status,errorCode:X.code})}let W=await Q.json();return c9(l9(W,"Invalid token exchange response"),J??f.provider)}async function xD($,f,J,Z){let Q={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:f,provider:Z??J.provider},W=await fetch(v1(J.apiBaseUrl,v6.token),{method:"POST",headers:{"Content-Type":"application/json",...await d9(J.headers)},body:JSON.stringify(Q),signal:AbortSignal.timeout(J.requestTimeoutMs??j2)});if(!W.ok){let X=await W.text().catch(()=>""),H=cf(X);throw new A1(`Token exchange failed: ${W.status}${H.message?` - ${H.message}`:""}`,{status:W.status,errorCode:H.code})}let j=await W.json();return c9(l9(j,"Invalid token exchange response"),Z??J.provider)}async function X2($){L$($.telemetry,$.provider??"cline");let f=$.useWorkOSDeviceAuth??!0,J=$.callbackPorts?.length?$.callbackPorts:OH,Z=$.callbackPath??hD,Q=f?null:await e0({ports:J,callbackPath:Z,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),W=Q?.callbackUrl||`http://127.0.0.1:${J[0]??OH[0]}${Z}`;try{let j;if(f){let X=v9().workOsClientId,H=await yH(X,$);$.callbacks.onAuth({url:H.verificationUriComplete??H.verificationUri,instructions:`Enter this code in your browser: ${H.userCode}`});let Y=await qH({clientId:X,deviceCode:H.deviceCode,expiresInSeconds:H.expiresInSeconds,initialPollIntervalSeconds:H.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??j2,workosApiBaseUrl:u9,onProgress:$.callbacks.onProgress});j=await wH(Y,$,$.provider)}else{let X=new URL(v1($.apiBaseUrl,v6.authorize));X.searchParams.set("client_type","extension"),X.searchParams.set("callback_url",W),X.searchParams.set("redirect_uri",W),$.callbacks.onAuth({url:X.toString(),instructions:"Continue the authentication process in your browser."});let H,Y=$.provider,A=await df({waitForCallback:Q?.waitForCallback??(async()=>null),cancelWait:Q?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(A.error)throw Error(`OAuth error: ${A.error}`);if(H=A.code,Y=A.provider??Y,!H){let V=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),B=uf(V,{includeProvider:!0});H=B.code,Y=B.provider??Y}if(!H)throw Error("Missing authorization code");j=await xD(H,W,$,Y)}return _$($.telemetry,$.provider??"cline"),O$($.telemetry,{id:j.accountId,email:j.email,provider:$.provider??"cline"}),j}catch(j){throw z$($.telemetry,$.provider??"cline",j instanceof Error?j.message:String(j)),j}finally{Q?.close()}}async function p9($){return await yH(v9().workOsClientId,$)}async function r9($){let f=$.provider??"cline";L$($.telemetry,f);try{let J=await qH({clientId:v9().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??j2,workosApiBaseUrl:u9}),Z=await wH(J,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return _$($.telemetry,f),O$($.telemetry,{id:Z.accountId,email:Z.email,provider:f}),Z}catch(J){throw z$($.telemetry,f,J instanceof Error?J.message:String(J)),J}}async function $J($,f){let J=await fetch(v1(f.apiBaseUrl,v6.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await d9(f.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(f.requestTimeoutMs??j2)});if(!J.ok){let W=await J.text().catch(()=>""),j=cf(W);throw new A1(`Token refresh failed: ${J.status}${j.message?` - ${j.message}`:""}`,{status:J.status,errorCode:j.code})}let Z=await J.json(),Q=$.metadata?.provider??f.provider;return c9(l9(Z,"Invalid token refresh response"),Q,$)}async function fJ($,f,J){if(!$)return null;let Z=J?.refreshBufferMs??CD,Q=J?.retryableTokenGraceMs??ED;if(J?.forceRefresh!==!0&&!u1($,Z))return $;try{return await $J($,f)}catch(j){if(j instanceof A1&&j.isLikelyInvalidGrant())return l$(f.telemetry,f.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>Q)return $;return null}}function i9($){return{id:"cline",name:"Cline Account",usesCallbackServer:!($.useWorkOSDeviceAuth??!0),async login(f){return X2({...$,callbacks:f})},async refreshToken(f){return $J(f,$)},getApiKey(f){return`workos:${f.access}`}}}L0();var EH={};w(EH,{refreshOpenAICodexToken:()=>JJ,openaiCodexOAuthProvider:()=>t9,normalizeOpenAICodexCredentials:()=>a9,loginOpenAICodex:()=>H2,isOpenAICodexTokenExpired:()=>n9,getValidOpenAICodexCredentials:()=>ZJ,OPENAI_CODEX_OAUTH_CONFIG:()=>e});import{nanoid as mD}from"nanoid";var e={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class u6 extends Error{status;errorCode;constructor($,f){super($);this.name="OpenAICodexOAuthTokenError",this.status=f?.status,this.errorCode=f?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function gD($,f,J=e.redirectUri){let Z=await fetch(e.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:e.clientId,code:$,code_verifier:f,redirect_uri:J}),signal:AbortSignal.timeout(e.httpTimeoutMs)});if(!Z.ok)return{type:"failed"};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}}async function vD($){try{let f=await fetch(e.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:e.clientId}),signal:AbortSignal.timeout(e.httpTimeoutMs)});if(!f.ok){let Z=await f.text().catch(()=>""),Q=cf(Z);throw new u6(`Token refresh failed: ${f.status}${Q.message?` - ${Q.message}`:""}`,{status:f.status,errorCode:Q.code})}let J=await f.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}catch(f){if(f instanceof u6)throw f;return{type:"failed"}}}async function uD($="pi"){let{verifier:f,challenge:J}=await d4(),Z=mD(32),Q=new URL(e.authorizationEndpoint);return Q.searchParams.set("response_type","code"),Q.searchParams.set("client_id",e.clientId),Q.searchParams.set("redirect_uri",e.redirectUri),Q.searchParams.set("scope",e.scopes),Q.searchParams.set("code_challenge",J),Q.searchParams.set("code_challenge_method","S256"),Q.searchParams.set("state",Z),Q.searchParams.set("id_token_add_organizations","true"),Q.searchParams.set("codex_cli_simplified_flow","true"),Q.searchParams.set("originator",$),{verifier:f,state:Z,url:Q.toString()}}function cD(){try{let $=new URL(e.redirectUri),f=$.port.length>0?Number.parseInt($.port,10):e.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(f)?f:e.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:e.callbackPort,callbackPath:"/auth/callback",redirectUri:e.redirectUri}}}function hH($,f){let J=f?_0(f):_0($),Z=J?J:_0($),W=Z?.[e.jwtClaimPath]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let j=Z?.organizations;if(Array.isArray(j)&&j.length>0){let H=j[0];if(typeof H?.id==="string"&&H.id.length>0)return H.id}let X=Z?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;return null}function CH($,f){let J=hH($.access,$.idToken)??f?.accountId;if(!J)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||f?.refresh||"",expires:$.expires,accountId:J,email:$.email??f?.email,metadata:{...f?.metadata??{},provider:"openai-codex"}}}async function H2($){L$($.telemetry,"openai-codex");let f=cD(),{verifier:J,state:Z,url:Q}=await uD($.originator),W=await e0({host:f.host,ports:[f.port],callbackPath:f.callbackPath,expectedState:Z});$.onAuth({url:Q,instructions:"Continue the authentication process in your browser."});let j;try{let X=await df({waitForCallback:W.waitForCallback,cancelWait:W.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(X.state&&X.state!==Z)throw Error("State mismatch");if(j=X.code,!j){let A=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),V=uf(A,{allowHashCodeState:!0});if(V.state&&V.state!==Z)throw Error("State mismatch");j=V.code}if(!j)throw Error("Missing authorization code");let H=await gD(j,J,f.redirectUri);if(H.type!=="success")throw Error("Token exchange failed");let Y=CH(H);return _$($.telemetry,"openai-codex"),O$($.telemetry,{id:Y.accountId,email:Y.email,provider:"openai-codex"}),Y}catch(X){throw z$($.telemetry,"openai-codex",X instanceof Error?X.message:String(X)),X}finally{W.close()}}async function JJ($,f){let J=await vD($);if(J.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let Z=CH(J,f);if(!Z.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return Z}async function ZJ($,f){if(!$)return null;let J=f?.refreshBufferMs??e.refreshBufferMs,Z=f?.retryableTokenGraceMs??e.retryableTokenGraceMs;if(f?.forceRefresh!==!0&&!u1($,J))return $;try{return await JJ($.refresh,$)}catch(W){if(W instanceof u6&&W.isLikelyInvalidGrant())return l$(f?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>Z)return $;return null}}function n9($,f=e.refreshBufferMs){return u1($,f)}function a9($){let f=$.accountId??hH($.access);if(!f)throw Error("Failed to extract accountId from token");return{...$,accountId:f,metadata:{...$.metadata??{},provider:"openai-codex"}}}var t9={id:"openai-codex",name:"ChatGPT Plus/Pro (ChatGPT Subscription)",usesCallbackServer:!0,async login($){return H2({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput})},async refreshToken($){return JJ($.refresh,$)},getApiKey($){return $.access}};var XV={};w(XV,{ClineCore:()=>iJ});function bH($){if($===!0)return{};if(!$)return;return $}function kH($){if($==="user")return"global";return $}class s9{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let f=this.getService().ingestEvent($);return{event:f.event,duplicate:f.duplicate,matchedSpecIds:f.matchedSpecs.map((J)=>J.specId),queuedRuns:f.queuedRuns,suppressions:f.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function IH($){let{host:f}=$;return{async startSession(J){let Z=(J.cwd?.trim()||J.workspaceRoot).trim(),Q=await f.startSession({source:J.source?.trim()||G0.CLI,interactive:!1,config:{providerId:J2(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:Z,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:pD(J),maxIterations:J.maxIterations,enableTools:J.enableTools!==!1,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},toolPolicies:J.toolPolicies??{"*":{autoApprove:J.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:J.configExtensions}});return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:Q.manifestPath,messagesPath:Q.messagesPath}}},async sendSession(J,Z){let Q=await f.runTurn({sessionId:J,prompt:Z.prompt,userImages:Z.attachments?.userImages,userFiles:Z.attachments?.userFiles?.map((W)=>W.content),delivery:Z.delivery});if(!Q)throw Error("ClineCore automation runtime returned no result");return{result:lD(Q)}},async abortSession(J){return await f.abort(J,Error("ClineCore automation abort")),{applied:!0}},async stopSession(J){return await f.stopSession(J),{applied:!0}}}}function c6($){let f=dD($.automationService,$.automation),J=$.context?.client??($.clientName?{name:$.clientName}:void 0),Z=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),Q=$.context?.logger??$.logger,W=$.context?.telemetry??$.telemetry;if(!f&&!J&&!Z&&!Q&&!W)return $.context;return{...$.context??{},...J?{client:J}:{},...Z?{user:Z}:{},...Q?{logger:Q}:{},...W?{telemetry:W}:{},...f?{automation:f}:{}}}function dD($,f){if(!$)return;return{ingestEvent:(J)=>{f.ingestEvent(J)}}}function lD($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((f)=>({name:f.name,input:f.input,output:f.output,error:f.error,durationMs:f.durationMs}))}}function pD($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var TY={};w(TY,{createCoreSettingsService:()=>Wf,CoreSettingsService:()=>B1});import{existsSync as W5}from"node:fs";import{basename as _Y,isAbsolute as K_,relative as G_}from"node:path";var sH={};w(sH,{resolveWorkflowsConfigSearchPaths:()=>BJ,resolveSkillsConfigSearchPaths:()=>AJ,resolveRulesConfigSearchPaths:()=>VJ,parseWorkflowConfigFromMarkdown:()=>YJ,parseSkillConfigFromMarkdown:()=>XJ,parseRuleConfigFromMarkdown:()=>HJ,createWorkflowsConfigDefinition:()=>PJ,createUserInstructionConfigService:()=>V1,createSkillsConfigDefinition:()=>KJ,createRulesConfigDefinition:()=>GJ,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>jJ,UnifiedConfigFileWatcher:()=>o1,SKILLS_CONFIG_DIRECTORY_NAME:()=>WJ,RULES_CONFIG_DIRECTORY_NAME:()=>n6});import{createHash as rD}from"node:crypto";import{watch as iD}from"node:fs";import{readdir as nD,readFile as aD}from"node:fs/promises";import{join as tD}from"node:path";function sD($){return rD("sha1").update($).digest("hex")}function gH($){return Boolean($&&typeof $==="object"&&"code"in $)}function xH($){return gH($)&&$.code==="ENOENT"}function mH($){return gH($)&&($.code==="EACCES"||$.code==="EPERM")}class o1{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,f){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=f?.debounceMs??75,this.emitParseErrors=f?.emitParseErrors??!1;for(let J of $){if(this.definitionsByType.has(J.type))throw Error(`Duplicate unified config definition type '${J.type}'.`);this.definitionsByType.set(J.type,J),this.recordsByType.set(J.type,new Map),this.discoveredDirectoriesByType.set(J.type,new Set);for(let Z of J.directories){let Q=this.baseTypesByDirectory.get(Z);if(Q)Q.add(J.type);else this.baseTypesByDirectory.set(Z,new Set([J.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let f=this.definitionsByType.get($);if(!f)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(f)})}getSnapshot($){let f=this.recordsByType.get($);return new Map([...f?.entries()??[]].map(([J,Z])=>[J,{...Z}]))}getAllSnapshots(){let $=new Map;for(let[f,J]of this.recordsByType.entries())$.set(f,new Map([...J.entries()].map(([Z,Q])=>[Z,{...Q}])));return $}emit($){for(let f of this.listeners)f($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[f,J]of this.watchersByDirectory.entries()){if($.has(f))continue;J.close(),this.watchersByDirectory.delete(f)}this.watchedTypesByDirectory=$;for(let f of $.keys()){if(this.watchersByDirectory.has(f))continue;try{let J=iD(f,()=>{let Z=this.watchedTypesByDirectory.get(f);if(!Z)return;for(let Q of Z)this.pendingTypes.add(Q);this.scheduleFlush()});this.watchersByDirectory.set(f,J),J.on("error",(Z)=>{let Q=this.watchedTypesByDirectory.get(f);if(!Q)return;for(let W of Q)this.emit({kind:"error",type:W,error:Z,filePath:f})})}catch(J){if(!xH(J)&&!mH(J)){let Z=$.get(f);if(!Z)continue;for(let Q of Z)this.emit({kind:"error",type:Q,error:J,filePath:f})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let f of $){let J=this.definitionsByType.get(f);if(!J)continue;await this.refreshTypeInternal(J)}})},this.debounceMs)}async refreshTypeInternal($){let{records:f,discoveredDirectories:J}=await this.loadDefinition($),Z=this.recordsByType.get($.type)??new Map;for(let[Q,W]of Z.entries()){if(f.has(Q))continue;this.emit({kind:"remove",type:$.type,id:Q,filePath:W.filePath})}for(let[Q,W]of f.entries()){let j=Z.get(Q);if(j&&j.filePath===W.filePath&&j.fingerprint===W.fingerprint)continue;this.emit({kind:"upsert",record:{type:W.type,id:Q,item:W.item,filePath:W.filePath}})}if(this.recordsByType.set($.type,f),this.discoveredDirectoriesByType.set($.type,J),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let f=new Map,J=new Set;for(let Z of $.directories){J.add(Z);let Q=$.discoverFiles?await $.discoverFiles(Z):await this.readDirectoryFileCandidates(Z);for(let W of Q){let{fileName:j,filePath:X}=W;if(J.add(W.directoryPath),$.includeFile&&!$.includeFile(j,X))continue;try{let H=await aD(X,"utf8"),Y={type:$.type,directoryPath:W.directoryPath,fileName:j,filePath:X,content:H},A=$.parseFile(Y),V=$.resolveId(A,Y).trim();if(!V)continue;f.set(V,{type:$.type,id:V,item:A,filePath:X,fingerprint:sD(H)})}catch(H){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:H,filePath:X})}}}return{records:f,discoveredDirectories:J}}buildDesiredTypesByDirectory(){let $=new Map;for(let[f,J]of this.baseTypesByDirectory.entries())$.set(f,new Set(J));for(let[f,J]of this.discoveredDirectoriesByType.entries())for(let Z of J){let Q=$.get(Z);if(Q)Q.add(f);else $.set(Z,new Set([f]))}return $}async readDirectoryFileCandidates($){try{return(await nD($,{withFileTypes:!0})).filter((J)=>J.isFile()).map((J)=>({directoryPath:$,fileName:J.name,filePath:tD($,J.name)})).sort((J,Z)=>J.fileName.localeCompare(Z.fileName))}catch(f){if(xH(f)||mH(f))return[];throw f}}}import{readdir as e9,readFile as oD,stat as o9}from"node:fs/promises";import{basename as C$,dirname as eD,extname as l6,join as y0,resolve as QJ}from"node:path";import{AGENTS_RULES_FILE_NAME as vH,RULES_CONFIG_DIRECTORY_NAME as n6,resolveGlobalAgentsRulesPath as $L,resolveRulesConfigSearchPaths as fL,resolveSkillsConfigSearchPaths as JL,resolveWorkflowsConfigSearchPaths as ZL,SKILLS_CONFIG_DIRECTORY_NAME as WJ,WORKFLOWS_CONFIG_DIRECTORY_NAME as jJ}from"@cline/shared/storage";import QL from"yaml";var d6="SKILL.md",WL="managed.json",jL=new Set([".md",".markdown",".txt"]);function $Q($){return $.trim().toLowerCase()}function Y2($){let f=$;return f?.code==="ENOENT"||f?.code==="EACCES"||f?.code==="EPERM"||f?.code==="ELOOP"}function p6($){return jL.has(l6($).toLowerCase())}function uH($){let f=[],J=new Set;for(let Z of $){let Q=QJ(Z);if(J.has(Q))continue;J.add(Q),f.push(Z)}return f}function XL($){let f=[...$?.directories??AJ($?.workspacePath)];if($?.pluginSkillDirectories)f.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)f.push(...NX({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return uH(f)}async function fQ($){try{let f=await e9($,{withFileTypes:!0}),J=[];for(let Z of f){if(!Z.isDirectory())continue;let Q=y0($,Z.name),W=y0(Q,WL);try{let j=await oD(W,"utf8"),X=JSON.parse(j);if(X&&typeof X==="object")J.push(Q)}catch(j){if(Y2(j))continue;if(j?.name==="SyntaxError")continue;throw j}}return J.sort((Z,Q)=>Z.localeCompare(Q))}catch(f){if(Y2(f))return[];throw f}}function JQ($){let f=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=$.match(f);if(!J)return{data:{},body:$,hadFrontmatter:!1};let[,Z,Q]=J;try{let W=QL.parse(Z);return{data:W&&typeof W==="object"&&!Array.isArray(W)?W:{},body:Q,hadFrontmatter:!0}}catch(W){let j=W instanceof Error?W.message:String(W);return{data:{},body:$,hadFrontmatter:!0,parseError:j}}}function r6($,f,J){if($===void 0||$===null){if(J)throw Error(`Missing required frontmatter field '${f}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${f}' must be a string.`);let Z=$.trim();if(!Z&&J)throw Error(`Frontmatter field '${f}' cannot be empty.`);return Z||void 0}function A2($,f){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${f}' must be a boolean.`);return $}function HL($,f){if(C$($.filePath).toLowerCase()!==vH.toLowerCase())return C$($.filePath,l6($.filePath));if(f&&QJ($.filePath)===QJ(f,vH))return"Workspace AGENTS.md";if(QJ($.filePath)===QJ($L()))return"Global AGENTS.md";return C$($.filePath,l6($.filePath))}function XJ($,f){let{data:J,body:Z,parseError:Q}=JQ($);if(Q)throw Error(`Failed to parse YAML frontmatter: ${Q}`);let W=Z.trim();if(!W)throw Error("Missing instructions body in skill file.");let X=r6(J.name,"name",!1)??f.trim();if(!X)throw Error("Missing skill name.");return{name:X,description:r6(J.description,"description",!1),disabled:A2(J.disabled,"disabled")??(A2(J.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:J}}function HJ($,f){let{data:J,body:Z,parseError:Q}=JQ($);if(Q)throw Error(`Failed to parse YAML frontmatter: ${Q}`);let W=Z.trim();if(!W)throw Error("Missing instructions body in rule file.");let j=r6(J.name,"name",!1)??f.trim();if(!j)throw Error("Missing rule name.");return{name:j,disabled:A2(J.disabled,"disabled")??(A2(J.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:J}}function YJ($,f){let{data:J,body:Z,parseError:Q}=JQ($);if(Q)throw Error(`Failed to parse YAML frontmatter: ${Q}`);let W=Z.trim();if(!W)throw Error("Missing instructions body in workflow file.");let j=r6(J.name,"name",!1)??f.trim();if(!j)throw Error("Missing workflow name.");return{name:j,disabled:A2(J.disabled,"disabled")??(A2(J.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:J}}function AJ($){return JL($)}function VJ($){return fL($)}function BJ($){return ZL($)}async function cH($){if(C$($)===".cline"){let f=await fQ($);return(await Promise.all(f.map((Z)=>cH(y0(Z,WJ))))).flat()}try{let f=await e9($,{withFileTypes:!0}),J=[];for(let Z of f){if(Z.isFile()&&Z.name===d6){J.push({directoryPath:$,fileName:Z.name,filePath:y0($,Z.name)});continue}let Q=y0($,Z.name);if(Z.isDirectory()||Z.isSymbolicLink()&&await o9(Q).then((j)=>j.isDirectory()).catch((j)=>{if(Y2(j))return!1;throw j}))J.push({directoryPath:Q,fileName:d6,filePath:y0(Q,d6)})}return J}catch(f){if(Y2(f))return[];throw f}}async function i6($){if(C$($)===".cline"){let f=await fQ($);return(await Promise.all(f.map((Z)=>i6(y0(Z,"rules.md"))))).flat()}try{if((await o9($)).isFile())return[{directoryPath:eD($),fileName:C$($),filePath:$}]}catch(f){if(!Y2(f))throw f}try{let J=(await e9($,{withFileTypes:!0})).filter((Q)=>Q.isFile()&&p6(Q.name)).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:y0($,Q.name)})),Z=y0($,"AGENTS.md");try{if((await o9(Z)).isFile()){if(!J.some((j)=>j.fileName==="AGENTS.md"))J.push({directoryPath:$,fileName:"AGENTS.md",filePath:Z})}}catch{}return J}catch(f){if(Y2(f))return[];throw f}}async function YL($){if(C$($)===".cline"){let f=await fQ($);return(await Promise.all(f.map((Z)=>i6(y0(Z,jJ))))).flat()}return i6($)}function KJ($){let f=XL($),J=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"skill",directories:J?uH([...f,J]):f,discoverFiles:cH,includeFile:(Z)=>Z===d6,parseFile:(Z)=>XJ(Z.content,C$(Z.directoryPath)),resolveId:(Z)=>$Q(Z.name)}}function GJ($){let f=$?.directories??VJ($?.workspacePath),J=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"rule",directories:J?[...f,J]:f,discoverFiles:i6,includeFile:(Z,Q)=>Z===".clinerules"||p6(Z)||p6(Q),parseFile:(Z)=>HJ(Z.content,HL(Z,$?.workspacePath)),resolveId:(Z)=>$Q(Z.name)}}function PJ($){let f=$?.directories??BJ($?.workspacePath),J=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:J?[...f,J]:f,discoverFiles:YL,includeFile:(Z)=>p6(Z),parseFile:(Z)=>YJ(Z.content,C$(Z.filePath,l6(Z.filePath))),resolveId:(Z)=>$Q(Z.name)}}function dH($){let f=[KJ($?.skills),GJ($?.rules),PJ($?.workflows)];return new o1(f,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as lH}from"@cline/shared";function AL($,f){if($.description?.trim())return lH($.description,".");if(f==="workflow")return;return lH($.instructions,".")}function VL($){return $.disabled!==!0}function pH($,f){return[...$.getSnapshot(f).entries()].map(([J,Z])=>({id:J,record:Z})).filter(({record:J})=>VL(J.item)).map(({id:J,record:Z})=>({id:J,name:Z.item.name,instructions:Z.item.instructions,description:AL(Z.item,f),kind:f})).sort((J,Z)=>J.name.localeCompare(Z.name))}function FJ($){let f=new Map;for(let J of[...pH($,"workflow"),...pH($,"skill")])if(!f.has(J.name))f.set(J.name,J);return[...f.values()].sort((J,Z)=>J.name.localeCompare(Z.name))}function rH($,f){if(!$.startsWith("/")||$.length<2)return $;let J=$.match(/^\/(\S+)/);if(!J)return $;let Z=J[1];if(!Z)return $;let Q=Z.length+1,W=$.slice(Q),j=FJ(f).find((X)=>X.name===Z);return j?`${j.instructions}${W}`:$}var nH={};w(nH,{mergeRulesForSystemPrompt:()=>B2,loadRulesForSystemPromptFromWatcher:()=>ZQ,listEnabledRulesFromWatcher:()=>iH,isRuleEnabled:()=>a6,formatRulesForSystemPrompt:()=>V2});function a6($){return $.disabled!==!0}function V2($){if($.length===0)return"";return`
185
185
 
186
186
  # Rules
187
- ${$.map((Z)=>`## ${Z.name}
188
- ${Z.instructions}`).join(`
187
+ ${$.map((J)=>`## ${J.name}
188
+ ${J.instructions}`).join(`
189
189
 
190
- `)}`}function W8($,J){let Z=$?.trim(),Q=J?.trim();if(Z&&Q)return`${Z}
190
+ `)}`}function B2($,f){let J=$?.trim(),Z=f?.trim();if(J&&Z)return`${J}
191
191
 
192
- ${Q}`;return Z||Q||void 0}function wH($){return[...$.getSnapshot("rule").values()].map((Z)=>Z.item).filter(g5).sort((Z,Q)=>Z.name.localeCompare(Q.name))}function r9($){return Q8(wH($))}function v5($){return $.trim().replace(/^\/+/,"").toLowerCase()}function lP($){if(!$||$.length===0)return;let J=$.map(v5).filter((Z)=>Z.length>0);return J.length>0?new Set(J):void 0}function pP($,J,Z){if(!Z)return!0;let Q=v5($),W=v5(J),f=Q.includes(":")?Q.split(":").at(-1)??Q:Q,j=W.includes(":")?W.split(":").at(-1)??W:W;return Z.has(Q)||Z.has(W)||Z.has(f)||Z.has(j)}function X4($,J){let Z=lP(J);return[...$.getSnapshot("skill").entries()].map(([W,f])=>{let j=f.item;return{id:W,name:j.name.trim(),description:j.description?.trim(),disabled:j.disabled===!0,skill:j}}).filter((W)=>pP(W.id,W.name,Z))}function rP($,J){return X4($,J).filter((Z)=>!Z.disabled).map((Z)=>Z.name.trim()).filter((Z)=>Z.length>0).sort((Z,Q)=>Z.localeCompare(Q))}function iP($,J,Z){let Q=v5(J);if(!Q)return{error:"Missing skill name."};let W=X4($,Z),f=W.find((A)=>A.id===Q);if(f){let{skill:A}=f;if(A.disabled===!0)return{error:`Skill "${A.name}" is configured but disabled.`};return{id:f.id,skill:A}}let j=Q.includes(":")?Q.split(":").at(-1)??Q:Q,X=W.filter(({id:A})=>{if(A===j)return!0;return A.endsWith(`:${j}`)}),H=X.filter(({skill:A})=>A.disabled!==!0);if(H.length===1){let{id:A,skill:V}=H[0];return{id:A,skill:V}}if(H.length>1)return{error:`Skill "${J}" is ambiguous. Use one of: ${H.map(({id:A})=>A).join(", ")}`};if(X.length===1){let{skill:A}=X[0];return{error:`Skill "${A.name}" is configured but disabled.`}}if(X.length>1)return{error:`Skill "${J}" is ambiguous, and all matches are disabled: ${X.map(({id:A})=>A).join(", ")}`};let Y=rP($,Z);return{error:Y.length>0?`Skill "${J}" not found. Available skills: ${Y.join(", ")}`:"No skills are currently available."}}function nP($,J=Promise.resolve(),Z){let Q=new Set,W=async(f,j)=>{await J;let X=iP($,f,Z);if("error"in X)return X.error;let{id:H,skill:Y}=X;if(Q.has(H))return`Skill "${Y.name}" is already running.`;Q.add(H);try{let A=j?.trim(),V=A?`
192
+ ${Z}`;return J||Z||void 0}function iH($){return[...$.getSnapshot("rule").values()].map((J)=>J.item).filter(a6).sort((J,Z)=>J.name.localeCompare(Z.name))}function ZQ($){return V2(iH($))}function t6($){return $.trim().replace(/^\/+/,"").toLowerCase()}function BL($){if(!$||$.length===0)return;let f=$.map(t6).filter((J)=>J.length>0);return f.length>0?new Set(f):void 0}function KL($,f,J){if(!J)return!0;let Z=t6($),Q=t6(f),W=Z.includes(":")?Z.split(":").at(-1)??Z:Z,j=Q.includes(":")?Q.split(":").at(-1)??Q:Q;return J.has(Z)||J.has(Q)||J.has(W)||J.has(j)}function UJ($,f){let J=BL(f);return[...$.getSnapshot("skill").entries()].map(([Q,W])=>{let j=W.item;return{id:Q,name:j.name.trim(),description:j.description?.trim(),disabled:j.disabled===!0,skill:j}}).filter((Q)=>KL(Q.id,Q.name,J))}function GL($,f){return UJ($,f).filter((J)=>!J.disabled).map((J)=>J.name.trim()).filter((J)=>J.length>0).sort((J,Z)=>J.localeCompare(Z))}function PL($,f,J){let Z=t6(f);if(!Z)return{error:"Missing skill name."};let Q=UJ($,J),W=Q.find((A)=>A.id===Z);if(W){let{skill:A}=W;if(A.disabled===!0)return{error:`Skill "${A.name}" is configured but disabled.`};return{id:W.id,skill:A}}let j=Z.includes(":")?Z.split(":").at(-1)??Z:Z,X=Q.filter(({id:A})=>{if(A===j)return!0;return A.endsWith(`:${j}`)}),H=X.filter(({skill:A})=>A.disabled!==!0);if(H.length===1){let{id:A,skill:V}=H[0];return{id:A,skill:V}}if(H.length>1)return{error:`Skill "${f}" is ambiguous. Use one of: ${H.map(({id:A})=>A).join(", ")}`};if(X.length===1){let{skill:A}=X[0];return{error:`Skill "${A.name}" is configured but disabled.`}}if(X.length>1)return{error:`Skill "${f}" is ambiguous, and all matches are disabled: ${X.map(({id:A})=>A).join(", ")}`};let Y=GL($,J);return{error:Y.length>0?`Skill "${f}" not found. Available skills: ${Y.join(", ")}`:"No skills are currently available."}}function FL($,f=Promise.resolve(),J){let Z=new Set,Q=async(W,j)=>{await f;let X=PL($,W,J);if("error"in X)return X.error;let{id:H,skill:Y}=X;if(Z.has(H))return`Skill "${Y.name}" is already running.`;Z.add(H);try{let A=j?.trim(),V=A?`
193
193
  <command-args>${A}</command-args>`:"",B=Y.description?.trim()?`Description: ${Y.description.trim()}
194
194
 
195
195
  `:"";return`<command-name>${Y.name}</command-name>${V}
196
196
  <command-instructions>
197
197
  ${B}${Y.instructions}
198
- </command-instructions>`}finally{Q.delete(H)}};return Object.defineProperty(W,"configuredSkills",{get:()=>X4($,Z).map(({skill:f,...j})=>j),enumerable:!0,configurable:!1}),W}function CH($){let J=$.watcherReady??Promise.resolve();return{name:"cline-user-instructions",manifest:{capabilities:[$.includeRules?"rules":void 0,$.registerSkillsTool?"tools":void 0,$.includeSkills||$.includeWorkflows?"commands":void 0].filter((Q)=>Boolean(Q))},async setup(Q){if(await J,$.includeRules)Q.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>r9($.watcher)});if($.registerSkillsTool)Q.registerTool(O1(nP($.watcher,J,$.allowedSkillNames)));for(let W of j4($.watcher).filter((f)=>f.kind==="skill"&&$.includeSkills||f.kind==="workflow"&&$.includeWorkflows))Q.registerCommand({name:W.name,description:W.description,handler:(f)=>{let j=f.trim();return j?`${W.instructions}
198
+ </command-instructions>`}finally{Z.delete(H)}};return Object.defineProperty(Q,"configuredSkills",{get:()=>UJ($,J).map(({skill:W,...j})=>j),enumerable:!0,configurable:!1}),Q}function aH($){let f=$.watcherReady??Promise.resolve();return{name:"cline-user-instructions",manifest:{capabilities:[$.includeRules?"rules":void 0,$.registerSkillsTool?"tools":void 0,$.includeSkills||$.includeWorkflows?"commands":void 0].filter((Z)=>Boolean(Z))},async setup(Z){if(await f,$.includeRules)Z.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>ZQ($.watcher)});if($.registerSkillsTool)Z.registerTool(w1(FL($.watcher,f,$.allowedSkillNames)));for(let Q of FJ($.watcher).filter((W)=>W.kind==="skill"&&$.includeSkills||W.kind==="workflow"&&$.includeWorkflows))Z.registerCommand({name:Q.name,description:Q.description,handler:(W)=>{let j=W.trim();return j?`${Q.instructions}
199
199
 
200
- ${j}`:W.instructions}})}}}class EH{watcher;ready;stopped=!1;constructor($){this.watcher=NH($)}start(){if(!this.ready)this.stopped=!1,this.ready=this.watcher.start();return this.ready}stop(){if(this.stopped)return;this.stopped=!0,this.watcher.stop(),this.ready=void 0}async refreshType($){await this.start(),await this.watcher.refreshType($)}listRecords($){return[...this.watcher.getSnapshot($).entries()].map(([J,Z])=>({type:$,id:J,filePath:Z.filePath,item:Z.item}))}listRuntimeCommands(){return j4(this.watcher)}resolveRuntimeSlashCommand($){return yH($,this.watcher)}hasConfiguredSkills($){return X4(this.watcher,$).some((J)=>!J.disabled)}createExtension($){return CH({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function f1($){return new EH($)}import{readFile as aP,writeFile as tP}from"node:fs/promises";import kH from"yaml";function sP($){let J=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Z=$.match(J);if(!Z)return{data:{},body:$,hadFrontmatter:!1};let[,Q,W]=Z,f=kH.parse(Q);return{data:f&&typeof f==="object"&&!Array.isArray(f)?f:{},body:W,hadFrontmatter:!0}}function bH($,J){return`---
201
- ${kH.stringify($).trimEnd()}
200
+ ${j}`:Q.instructions}})}}}class tH{watcher;ready;stopped=!1;constructor($){this.watcher=dH($)}start(){if(!this.ready)this.stopped=!1,this.ready=this.watcher.start();return this.ready}stop(){if(this.stopped)return;this.stopped=!0,this.watcher.stop(),this.ready=void 0}async refreshType($){await this.start(),await this.watcher.refreshType($)}listRecords($){return[...this.watcher.getSnapshot($).entries()].map(([f,J])=>({type:$,id:f,filePath:J.filePath,item:J.item}))}listRuntimeCommands(){return FJ(this.watcher)}resolveRuntimeSlashCommand($){return rH($,this.watcher)}hasConfiguredSkills($){return UJ(this.watcher,$).some((f)=>!f.disabled)}createExtension($){return aH({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function V1($){return new tH($)}import{readFile as UL,writeFile as RL}from"node:fs/promises";import eH from"yaml";function DL($){let f=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=$.match(f);if(!J)return{data:{},body:$,hadFrontmatter:!1};let[,Z,Q]=J,W=eH.parse(Z);return{data:W&&typeof W==="object"&&!Array.isArray(W)?W:{},body:Q,hadFrontmatter:!0}}function oH($,f){return`---
201
+ ${eH.stringify($).trimEnd()}
202
202
  ---
203
- ${J}`}function oP($,J){let{data:Z,body:Q,hadFrontmatter:W}=sP($);if(!W&&J)return $;if(J){if(delete Z.disabled,Z.enabled===!1)delete Z.enabled;if(Object.keys(Z).length===0)return Q;return bH(Z,Q)}return Z.disabled=!0,bH(Z,Q)}async function IH({filePath:$,enabled:J}){let Z=await aP($,"utf8"),Q=oP(Z,J);return await tP($,Q),{filePath:$,enabled:J,disabled:!J}}var $Y={};w($Y,{updateMcpServerOAuthState:()=>a1,setMcpServerDisabled:()=>i1,resolveMcpServerRegistrations:()=>f$,resolveDefaultMcpSettingsPath:()=>O0,registerMcpServersFromSettingsFile:()=>t1,loadMcpSettingsFile:()=>r1,listMcpServerOAuthStatuses:()=>Y4,hasMcpSettingsFile:()=>C$,getMcpServerOAuthState:()=>n1,createMcpTools:()=>X8,createDisabledMcpToolPolicy:()=>A4,createDisabledMcpToolPolicies:()=>i5,createDefaultMcpServerClientFactory:()=>j8,authorizeMcpServerOAuth:()=>l5,InMemoryMcpManager:()=>s1});import{spawn as NL}from"node:child_process";import{StringDecoder as aH}from"node:string_decoder";import{UnauthorizedError as pH}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as ML}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as FL}from"node:crypto";import{UnauthorizedError as UL}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as RL}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as DL}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as PL}from"@modelcontextprotocol/sdk/client/streamableHttp.js";u5();var LL="/mcp/oauth/callback",zL=[1456,1457,1458],OL=300000;function _L($){if($ instanceof Error){let J=$.message.trim();if(J.length>0)return J}return String($)}function TL($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function d5($){let J={};try{J=n1($.serverName,{filePath:$.settingsPath})??{}}catch{J={}}let Z,Q,W=async(j)=>{let X=f8(j(J))??{};try{J=a1($.serverName,()=>X,{filePath:$.settingsPath})}catch{J=X}};return{provider:{get redirectUrl(){return J.redirectUrl??$.redirectUrl},get clientMetadata(){return TL(J.redirectUrl??$.redirectUrl)},state:()=>{return Q=FL(),Q},clientInformation:()=>J.clientInformation,saveClientInformation:async(j)=>{await W((X)=>({...X,clientInformation:j,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>J.tokens,saveTokens:async(j)=>{await W((X)=>({...X,tokens:j,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:Date.now()}))},redirectToAuthorization:async(j)=>{Z=j.toString(),await $.onAuthorizationUrl?.(Z)},saveCodeVerifier:async(j)=>{await W((X)=>({...X,codeVerifier:j,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!J.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return J.codeVerifier},invalidateCredentials:async(j)=>{await W((X)=>{if(j==="all")return{lastError:X.lastError,redirectUrl:X.redirectUrl};return{...X,...j==="client"?{clientInformation:void 0}:{},...j==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...j==="verifier"?{codeVerifier:void 0}:{},...j==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(j)=>{await W((X)=>({...X,discoveryState:j}))},discoveryState:()=>J.discoveryState},getLastAuthorizationUrl:()=>Z,getLastOAuthState:()=>Q,resetInteractiveState:async()=>{await W((j)=>({...j,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(j)=>{await W((X)=>({...X,lastError:j}))},clearError:async()=>{await W((j)=>({...j,lastError:void 0}))}}}function c5($){let J=$.registration.transport;if(J.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let Z=J.headers?{headers:J.headers}:void 0;if(J.type==="sse")return new DL(new URL(J.url),{authProvider:$.oauthProvider,requestInit:Z,fetch:$.fetch});return new PL(new URL(J.url),{authProvider:$.oauthProvider,requestInit:Z,fetch:$.fetch})}function lH($){return new RL({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function l5($){let J=$.serverName.trim();if(!J)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Z}=await Promise.resolve().then(() => (u5(),dH)),Q=Z({filePath:$.filePath}).find((H)=>H.name===J);if(!Q)throw Error(`MCP server "${J}" is not configured.`);if(Q.disabled)throw Error(`MCP server "${J}" is disabled. Enable it before running OAuth.`);if(Q.transport.type==="stdio")throw Error(`MCP server "${J}" uses stdio transport and does not support OAuth browser flow.`);let W=await s0({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:zL,callbackPath:$.callbackPath??LL,timeoutMs:$.timeoutMs??OL,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!W.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let f=d5({settingsPath:$.filePath,serverName:J,redirectUrl:W.callbackUrl,onAuthorizationUrl:async(H)=>{await $.openUrl?.(H)}});await f.resetInteractiveState();let j=lH($),X;try{let H=c5({registration:Q,oauthProvider:f.provider,fetch:$.fetch});try{return await j.connect(H),await j.listTools(),await f.clearError(),{serverName:J,authorized:!0,message:`MCP server "${J}" is already authorized.`}}catch(Y){if(!(Y instanceof UL))throw Y;if(!f.getLastAuthorizationUrl())throw Error(`MCP server "${J}" did not provide an authorization URL.`);let V=await W.waitForCallback();if(!V)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(V.error)throw Error(`OAuth authorization failed: ${V.error}`);if(!V.code)throw Error("OAuth callback did not include an authorization code.");let B=f.getLastOAuthState();if(!B)throw Error(`MCP server "${J}" did not start an OAuth stateful authorization flow.`);if(V.state!==B)throw Error("OAuth authorization failed: state mismatch.");await H.finishAuth(V.code),X=lH($);let K=c5({registration:Q,oauthProvider:f.provider,fetch:$.fetch});return await X.connect(K),await X.listTools(),await f.clearError(),{serverName:J,authorized:!0,message:`MCP server "${J}" OAuth authorization completed.`}}}catch(H){let Y=_L(H);throw await f.markError(Y),Error(Y)}finally{await j.close().catch(()=>{return}),await X?.close().catch(()=>{return}),W.close()}}var qL="2024-11-05",yL=5000,wL=1500,rH="http://127.0.0.1:1456/mcp/oauth/callback";function p5($){return $ instanceof Error?$.message:String($)}function iH($){let J=Buffer.from(JSON.stringify($),"utf8"),Z=Buffer.from(`Content-Length: ${J.byteLength}\r
203
+ ${f}`}function LL($,f){let{data:J,body:Z,hadFrontmatter:Q}=DL($);if(!Q&&f)return $;if(f){if(delete J.disabled,J.enabled===!1)delete J.enabled;if(Object.keys(J).length===0)return Z;return oH(J,Z)}return J.disabled=!0,oH(J,Z)}async function $Y({filePath:$,enabled:f}){let J=await UL($,"utf8"),Z=LL(J,f);return await RL($,Z),{filePath:$,enabled:f,disabled:!f}}var RY={};w(RY,{updateMcpServerOAuthState:()=>Jf,setMcpServerDisabled:()=>$f,resolveMcpServerRegistrations:()=>H$,resolveDefaultMcpSettingsPath:()=>z0,registerMcpServersFromSettingsFile:()=>Zf,loadMcpSettingsFile:()=>e1,listMcpServerOAuthStatuses:()=>DJ,hasMcpSettingsFile:()=>E$,getMcpServerOAuthState:()=>ff,createMcpTools:()=>P2,createDisabledMcpToolPolicy:()=>LJ,createDisabledMcpToolPolicies:()=>Z5,createDefaultMcpServerClientFactory:()=>G2,authorizeMcpServerOAuth:()=>$5,InMemoryMcpManager:()=>Qf});import{spawn as iL}from"node:child_process";import{StringDecoder as KY}from"node:string_decoder";import{UnauthorizedError as YY}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as nL}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as xL}from"node:crypto";import{UnauthorizedError as mL}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as gL}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as vL}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as uL}from"@modelcontextprotocol/sdk/client/streamableHttp.js";s6();var cL="/mcp/oauth/callback",dL=[1456,1457,1458],lL=300000;function pL($){if($ instanceof Error){let f=$.message.trim();if(f.length>0)return f}return String($)}function rL($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function e6($){let f={};try{f=ff($.serverName,{filePath:$.settingsPath})??{}}catch{f={}}let J,Z,Q=async(j)=>{let X=K2(j(f))??{};try{f=Jf($.serverName,()=>X,{filePath:$.settingsPath})}catch{f=X}};return{provider:{get redirectUrl(){return f.redirectUrl??$.redirectUrl},get clientMetadata(){return rL(f.redirectUrl??$.redirectUrl)},state:()=>{return Z=xL(),Z},clientInformation:()=>f.clientInformation,saveClientInformation:async(j)=>{await Q((X)=>({...X,clientInformation:j,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>f.tokens,saveTokens:async(j)=>{await Q((X)=>({...X,tokens:j,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:Date.now()}))},redirectToAuthorization:async(j)=>{J=j.toString(),await $.onAuthorizationUrl?.(J)},saveCodeVerifier:async(j)=>{await Q((X)=>({...X,codeVerifier:j,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!f.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return f.codeVerifier},invalidateCredentials:async(j)=>{await Q((X)=>{if(j==="all")return{lastError:X.lastError,redirectUrl:X.redirectUrl};return{...X,...j==="client"?{clientInformation:void 0}:{},...j==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...j==="verifier"?{codeVerifier:void 0}:{},...j==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(j)=>{await Q((X)=>({...X,discoveryState:j}))},discoveryState:()=>f.discoveryState},getLastAuthorizationUrl:()=>J,getLastOAuthState:()=>Z,resetInteractiveState:async()=>{await Q((j)=>({...j,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(j)=>{await Q((X)=>({...X,lastError:j}))},clearError:async()=>{await Q((j)=>({...j,lastError:void 0}))}}}function o6($){let f=$.registration.transport;if(f.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let J=f.headers?{headers:f.headers}:void 0;if(f.type==="sse")return new vL(new URL(f.url),{authProvider:$.oauthProvider,requestInit:J,fetch:$.fetch});return new uL(new URL(f.url),{authProvider:$.oauthProvider,requestInit:J,fetch:$.fetch})}function HY($){return new gL({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function $5($){let f=$.serverName.trim();if(!f)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:J}=await Promise.resolve().then(() => (s6(),XY)),Z=J({filePath:$.filePath}).find((H)=>H.name===f);if(!Z)throw Error(`MCP server "${f}" is not configured.`);if(Z.disabled)throw Error(`MCP server "${f}" is disabled. Enable it before running OAuth.`);if(Z.transport.type==="stdio")throw Error(`MCP server "${f}" uses stdio transport and does not support OAuth browser flow.`);let Q=await e0({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:dL,callbackPath:$.callbackPath??cL,timeoutMs:$.timeoutMs??lL,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!Q.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let W=e6({settingsPath:$.filePath,serverName:f,redirectUrl:Q.callbackUrl,onAuthorizationUrl:async(H)=>{await $.openUrl?.(H)}});await W.resetInteractiveState();let j=HY($),X;try{let H=o6({registration:Z,oauthProvider:W.provider,fetch:$.fetch});try{return await j.connect(H),await j.listTools(),await W.clearError(),{serverName:f,authorized:!0,message:`MCP server "${f}" is already authorized.`}}catch(Y){if(!(Y instanceof mL))throw Y;if(!W.getLastAuthorizationUrl())throw Error(`MCP server "${f}" did not provide an authorization URL.`);let V=await Q.waitForCallback();if(!V)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(V.error)throw Error(`OAuth authorization failed: ${V.error}`);if(!V.code)throw Error("OAuth callback did not include an authorization code.");let B=W.getLastOAuthState();if(!B)throw Error(`MCP server "${f}" did not start an OAuth stateful authorization flow.`);if(V.state!==B)throw Error("OAuth authorization failed: state mismatch.");await H.finishAuth(V.code),X=HY($);let K=o6({registration:Z,oauthProvider:W.provider,fetch:$.fetch});return await X.connect(K),await X.listTools(),await W.clearError(),{serverName:f,authorized:!0,message:`MCP server "${f}" OAuth authorization completed.`}}}catch(H){let Y=pL(H);throw await W.markError(Y),Error(Y)}finally{await j.close().catch(()=>{return}),await X?.close().catch(()=>{return}),Q.close()}}var aL="2024-11-05",tL=5000,sL=1500,AY="http://127.0.0.1:1456/mcp/oauth/callback";function f5($){return $ instanceof Error?$.message:String($)}function VY($){let f=Buffer.from(JSON.stringify($),"utf8"),J=Buffer.from(`Content-Length: ${f.byteLength}\r
204
204
  \r
205
- `,"utf8");return Buffer.concat([Z,J])}function nH($){return Buffer.from(`${JSON.stringify($)}
206
- `,"utf8")}class t9{buffer="";decoder=new aH("utf8");push($){this.buffer+=this.decoder.write($);let J=[];while(!0){let Z=this.buffer.indexOf(`\r
205
+ `,"utf8");return Buffer.concat([J,f])}function BY($){return Buffer.from(`${JSON.stringify($)}
206
+ `,"utf8")}class XQ{buffer="";decoder=new KY("utf8");push($){this.buffer+=this.decoder.write($);let f=[];while(!0){let J=this.buffer.indexOf(`\r
207
207
  \r
208
- `);if(Z<0)break;let W=this.buffer.slice(0,Z).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!W)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let f=Number.parseInt(W[1],10),j=Z+4,X=j+f;if(this.buffer.length<X)break;J.push(this.buffer.slice(j,X)),this.buffer=this.buffer.slice(X)}return J}}class s9{buffer="";decoder=new aH("utf8");push($){this.buffer+=this.decoder.write($);let J=[];while(!0){let Z=this.buffer.indexOf(`
209
- `);if(Z<0)break;let Q=this.buffer.slice(0,Z).trim();if(this.buffer=this.buffer.slice(Z+1),Q.length>0)J.push(Q)}return J}}class tH{registration;process;nextRequestId=1;pending=new Map;framedParser=new t9;newlineParser=new s9;stderrBuffer="";connected=!1;protocolMode="newline";constructor($){this.registration=$}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=["newline","framed"],J;for(let Z of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Z);try{await this.request("initialize",{protocolVersion:qL,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},wL),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Z;return}catch(Q){J=Q instanceof Error?Q:Error(String(Q))}}throw J??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((J)=>typeof J?.name==="string"&&typeof J.inputSchema==="object"&&J.inputSchema!==null).map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let J=this.registration.transport;if(J.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${J.type}`);this.framedParser=new t9,this.newlineParser=new s9,this.stderrBuffer="",this.protocolMode=$;let Z=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},Q=NL(J.command,J.args??[],{cwd:J.cwd,env:{...process.env,...J.env??{}},stdio:["pipe","pipe","pipe"],...Z});this.process=Q,Q.stdout.on("data",(W)=>this.handleStdout(W)),Q.stderr.on("data",(W)=>{if(this.process!==Q)return;if(this.stderrBuffer+=W.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),Q.once("error",(W)=>{if(this.process!==Q)return;this.failAllPending(Error(`MCP process error: ${p5(W)}`))}),Q.once("exit",(W,f)=>{if(this.process!==Q)return;this.connected=!1,this.process=void 0;let j=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${W??"null"}, signal=${f??"null"}).${j}`))})}handleStdout($){try{let J=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Z of J){let Q=JSON.parse(Z);if(typeof Q.id!=="number")continue;let W=this.pending.get(Q.id);if(!W)continue;if(this.pending.delete(Q.id),clearTimeout(W.timeout),Q.error){let f=Q.error.message||`MCP request failed with code ${Q.error.code??"unknown"}`;W.reject(Error(f));continue}W.resolve(Q.result)}}catch(J){this.handleProtocolFailure(J)}}handleProtocolFailure($){let J=this.process;if(!J)return;this.connected=!1,this.process=void 0;let Z=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${p5($)}.${Z}`)),J.kill()}async request($,J,Z=yL){let Q=this.process;if(!Q?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let W=this.nextRequestId++,f={jsonrpc:"2.0",id:W,method:$,...J?{params:J}:{}},j=new Promise((X,H)=>{let Y=setTimeout(()=>{this.pending.delete(W),H(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Z);this.pending.set(W,{resolve:X,reject:H,timeout:Y})});try{Q.stdin.write(this.protocolMode==="framed"?iH(f):nH(f))}catch(X){let H=this.pending.get(W);if(H)clearTimeout(H.timeout),this.pending.delete(W);throw X}return j}notify($,J){let Z=this.process;if(!Z?.stdin.writable)return;let Q={jsonrpc:"2.0",method:$,...J?{params:J}:{}};Z.stdin.write(this.protocolMode==="framed"?iH(Q):nH(Q))}failAllPending($){for(let[J,Z]of this.pending)clearTimeout(Z.timeout),this.pending.delete(J),Z.reject($)}}class sH{registration;options;client;authContext;constructor($,J){this.registration=$;this.options=J}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=d5({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??rH});this.authContext=$;try{let J=new ML({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Z=c5({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await J.connect(Z),await $.clearError(),this.client=J}catch(J){let Z=J instanceof pH?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):p5(J);throw await $.markError(Z),Error(Z)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema&&typeof Z.inputSchema==="object"&&!Array.isArray(Z.inputSchema)?Z.inputSchema:{}}))}catch(J){return await this.handleOperationError(J)}}async callTool($){let J=await this.ensureConnectedClient();try{return await J.callTool({name:$.name,arguments:$.arguments??{}})}catch(Z){return await this.handleOperationError(Z)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let J=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${J} Run authorizeMcpServerOAuth for this server.`;return`${J} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let J=this.authContext??d5({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??rH}),Z=$ instanceof pH?this.formatUnauthorizedMessage(J.getLastAuthorizationUrl()):p5($);throw await J.markError(Z),Error(Z)}}function j8($={}){return(J)=>J.transport.type==="stdio"?new tH(J):new sH(J,$)}u5();function m0(){return Date.now()}function SL($){return $.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema}))}class s1{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let J=this.servers.get($.name);if(!J){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:m0()});return}let Z=JSON.stringify(J.registration.transport)!==JSON.stringify($.transport);if(J.registration={...$},J.updatedAt=m0(),Z)await this.disconnectState(J),J.client=void 0,J.toolCache=void 0,J.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let J=this.requireServer($);await this.disconnectState(J),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let J=this.requireServer($);await this.connectState(J)})}async disconnectServer($){await this.runExclusive($,async()=>{let J=this.requireServer($);await this.disconnectState(J)})}async setServerDisabled($,J){await this.runExclusive($,async()=>{let Z=this.requireServer($);if(Z.registration={...Z.registration,disabled:J},Z.updatedAt=m0(),J)await this.disconnectState(Z)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,J)=>$.name.localeCompare(J.name))}async listTools($){let J=this.requireServer($),Z=J.toolCacheUpdatedAt??0;if(J.toolCache&&m0()-Z<=this.toolsCacheTtlMs)return J.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let J=this.requireServer($),Q=await(await this.ensureConnectedClient(J)).listTools(),W=SL(Q);return J.toolCache=W,J.toolCacheUpdatedAt=m0(),J.updatedAt=m0(),W})}async callTool($){return this.runExclusive($.serverName,async()=>{let J=this.requireServer($.serverName),Z=await this.ensureConnectedClient(J);return J.updatedAt=m0(),Z.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let J of $)await this.unregisterServer(J)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=m0();try{let J=$.client??await this.clientFactory($.registration);await J.connect(),$.client=J,$.status="connected",$.lastError=void 0,$.updatedAt=m0()}catch(J){throw $.status="disconnected",$.lastError=J instanceof Error?J.message:String(J),$.updatedAt=m0(),J}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=m0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=m0()}}requireServer($){let J=this.servers.get($);if(!J)throw Error(`Unknown MCP server: ${$}`);return J}async runExclusive($,J){let Z=this.operationLocks.get($)??Promise.resolve(),Q,W=new Promise((j)=>{Q=j}),f=Z.catch(()=>{return}).then(()=>W);this.operationLocks.set($,f),await Z.catch(()=>{return});try{return await J()}finally{if(Q?.(),this.operationLocks.get($)===f)this.operationLocks.delete($)}}}import{createHash as CL}from"node:crypto";var oH=128,EL=/[^a-zA-Z0-9_-]+/g,eH=8,hL=1,bL="mcp_tool";function kL($){return CL("sha1").update($).digest("hex").slice(0,eH)}function IL($){return $.replace(EL,"_")}var r5=({serverName:$,toolName:J})=>{let Z=`${$}__${J}`,Q=IL(Z);if(Q===Z&&Z.length<=oH)return Z;let W=kL(Z),f=oH-hL-eH;return`${Q.slice(0,f)||bL}_${W}`};function A4($){return{[($.nameTransform??r5)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function i5($){let J={};for(let Z of $.toolNames)Object.assign(J,A4({serverName:$.serverName,toolName:Z,nameTransform:$.nameTransform}));return J}import{createTool as xL}from"@cline/shared";function mL($,J){let Z=J.description?.trim();if(Z)return Z;return`Execute MCP tool "${J.name}" from server "${$}".`}async function X8($){let J=await $.provider.listTools($.serverName),Z=$.nameTransform??r5;return J.map((Q)=>{let W=Z({serverName:$.serverName,toolName:Q.name});return xL({name:W,description:mL($.serverName,Q),inputSchema:Q.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(f,j)=>$.provider.callTool({serverName:$.serverName,toolName:Q.name,arguments:f&&typeof f==="object"&&!Array.isArray(f)?f:void 0,context:j})})})}y$();var ZY={};w(ZY,{listPluginToolsWithDiagnostics:()=>n5,listPluginTools:()=>V4});import{stat as gL}from"node:fs/promises";y$();var vL=32,H8=new Map;function uL($,J){if(!H8.has($)&&H8.size>=vL){let Z=H8.keys().next().value;if(Z)H8.delete(Z)}H8.set($,J)}async function cL($){let J=await Promise.all($.pluginPaths.map(async(Z)=>{try{let Q=await gL(Z);return`${Z}:${Q.mtimeMs}:${Q.size}`}catch{return`${Z}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:J})}function JY($,J){return $.map((Z)=>({...Z,enabled:!J.has(Z.name)}))}function dL($){return $.sort((J,Z)=>{let Q=J.name.localeCompare(Z.name);if(Q!==0)return Q;return J.path.localeCompare(Z.path)})}function lL($,J){if(!$.setup)return[];let Z=[],Q={registerTool:(W)=>Z.push(W),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{}};return $.setup(Q,{workspaceInfo:J}),Z}async function n5($){let J=m1({workspacePath:$.workspacePath,cwd:$.cwd}),Z=W$($.disabledToolNames);if(J.length===0)return{tools:[],failures:[],warnings:[]};let Q=await cL({pluginPaths:J,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),W=H8.get(Q);if(W)return{tools:JY(W.tools,Z),failures:W.failures,warnings:W.warnings};let f=[],j=[],X=[],H;try{H=await l6({pluginPaths:J,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),j=[...H.failures],X=[...H.warnings];for(let V of H.extensions??[]){let B=V.__clinePluginPath;if(!B)continue;for(let K of lL(V,{rootPath:$.workspacePath}))f.push({name:K.name,pluginName:V.name,path:B,source:B.startsWith($.workspacePath)?"workspace-plugin":"global-plugin",description:K.description?.trim()||void 0})}}catch(V){j=J.map((B)=>({pluginPath:B,phase:"load",message:V instanceof Error?V.message:String(V),stack:V instanceof Error?V.stack:void 0}))}finally{await H?.shutdown().catch(()=>{})}let Y=dL(f);return uL(Q,{tools:Y,failures:j,warnings:X}),{tools:JY(Y,Z),failures:j,warnings:X}}async function V4($){return(await n5($)).tools}function t5($,J){if(!J)return"global";let Z=rL(J,$);return!Z.startsWith("..")&&!pL(Z)?"workspace":"global"}function B4($){return[...$].sort((J,Z)=>{let Q=(W)=>{switch(W){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(J.source!==Z.source)return Q(J.source)-Q(Z.source);return J.name.localeCompare(Z.name)})}function fY($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}async function WY($,J){if($.userInstructionService)return await J($.userInstructionService);let Z=fY($);if(!Z)return await J(void 0);let Q=$.cwd?.trim()||Z,W=f1({skills:{workspacePath:Z,includePluginSkills:!0,cwd:Q},rules:{workspacePath:Z},workflows:{workspacePath:Z}});try{return await W.start(),await J(W)}finally{W.stop()}}function iL($,J){if(!$)return;let Z=$.listRecords("skill");if(J.id){let Q=Z.find((W)=>W.id===J.id);if(Q)return Q}for(let Q of Z)if(Q.filePath===J.path||Q.item.name===J.name||Q.id===J.name)return Q;return}class j1{async list($={}){return await WY($,async(J)=>{let Z=fY($),Q=[],W=[],f=[],j=[],X=[];if(J){for(let Y of J.listRecords("workflow")){let A=Y.item;Q.push({id:Y.id,name:A.name,path:Y.filePath,enabled:A.disabled!==!0,kind:"workflow",source:t5(Y.filePath,Z),description:A.instructions,toggleable:!1})}for(let Y of J.listRecords("rule")){let A=Y.item;W.push({id:Y.id,name:A.name,path:Y.filePath,enabled:A.disabled!==!0,kind:"rule",source:t5(Y.filePath,Z),description:A.instructions,toggleable:!1})}for(let Y of J.listRecords("skill")){let A=Y.item;f.push({id:Y.id,name:A.name,path:Y.filePath,enabled:A.disabled!==!0,kind:"skill",source:t5(Y.filePath,Z),description:A.description,toggleable:!0})}}if(Z)try{for(let Y of await V4({workspacePath:Z,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))j.push({id:`${Y.pluginName}:${Y.name}:${Y.path}`,name:Y.name,path:Y.path,enabled:Y.enabled,kind:"tool",source:Y.source,description:Y.description,toggleable:!0})}catch{}let H=O0();if(C$({filePath:H}))try{for(let Y of f$({filePath:H}))X.push({id:Y.name,name:Y.name,path:H,enabled:Y.disabled!==!0,kind:"mcp",source:t5(H,Z),description:Y.transport.type,toggleable:!0})}catch{}return{workflows:B4(Q.filter((Y)=>a5(Y.path))),rules:B4(W.filter((Y)=>a5(Y.path))),skills:B4(f.filter((Y)=>a5(Y.path))),tools:B4(j),mcp:B4(X.filter((Y)=>a5(Y.path)))}})}async toggle($){if($.type==="skills")return await WY($,async(J)=>{let Z=iL(J,$),Q=Z?.filePath;if(!Q)throw Error(`Unable to resolve skill setting '${$.id??$.name??QY($.path??"")}'.`);let W=Z?.item&&"disabled"in Z.item?Z.item.disabled!==!0:void 0,f=$.enabled??(W!==void 0?!W:void 0);if(f===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??QY($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await IH({filePath:Q,enabled:f}),await J?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:J}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)m6($.name);else bj($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let J=$.name?.trim()||$.id?.trim();if(!J)throw Error("MCP server settings toggle requires a server name.");let Z=$.path?.trim()||O0(),Q=$.enabled;if(Q===void 0){let W=f$({filePath:Z}).find((f)=>f.name===J);if(!W)throw Error(`Unknown MCP server: ${J}`);Q=W.disabled===!0}return i1({filePath:Z,name:J,disabled:!Q}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function o1(){return new j1}function XY($){return{async list(J){let Z=$;if(Z.listSettings)return await Z.listSettings(J);return await o1().list(J)},async toggle(J){let Z=$;if(Z.toggleSetting)return await Z.toggleSetting(J);return await o1().toggle(J)}}}function HY($){function J(){let Z=$.pendingPrompts;if(!Z)throw Error("Pending prompt service is not available.");return Z}return{list(Z){return J().list(Z)},update(Z){return J().update(Z)},delete(Z){return J().delete(Z)}}}var YY={};w(YY,{splitCoreSessionConfig:()=>K4});function K4($){let{hooks:J,logger:Z,telemetry:Q,extensionContext:W,extraTools:f,extensions:j,onTeamEvent:X,onConsecutiveMistakeLimitReached:H,checkpoint:Y,compaction:A,...V}=$,B={};if(J)B.hooks=J;if(Z)B.logger=Z;if(Q)B.telemetry=Q;if(W)B.extensionContext=W;if(f)B.extraTools=f;if(j)B.extensions=j;if(X)B.onTeamEvent=X;if(H)B.onConsecutiveMistakeLimitReached=H;if(Y?.createCheckpoint)B.checkpoint=Y;if(A?.compact)B.compaction=A;let K=Object.keys(B).length>0?B:void 0;return{config:{...V,...Y?{checkpoint:{enabled:Y.enabled}}:{},...A?{compaction:{enabled:A.enabled,strategy:A.strategy,thresholdRatio:A.thresholdRatio,reserveTokens:A.reserveTokens,preserveRecentTokens:A.preserveRecentTokens,maxInputTokens:A.maxInputTokens,summarizer:A.summarizer}}:{}},...K?{localRuntime:K}:{}}}function AY($){let J=$.config;return"providerId"in J?{...$,config:{...J,...nL($.localRuntime)},localRuntime:$.localRuntime}:$}function o9($,J={}){let Z=K4($.config),Q=R0(J.defaultCapabilities,$.capabilities),W=aL(Z.localRuntime,$.localRuntime),f=J.withExtensionContext?.(W?.extensionContext);if(f)W={...W??{},extensionContext:f};return{...$,...Z,...W?{localRuntime:W}:{},...Q?{capabilities:Q}:{}}}function nL($){if(!$)return{};let{modelCatalogDefaults:J,userInstructionService:Z,configExtensions:Q,onTeamRestored:W,...f}=$;return f}function aL(...$){let J={};for(let Z of $)if(Z)Object.assign(J,Z);return Object.keys(J).length>0?J:void 0}L0();function VY($){let J=$.input.config.telemetry??$.telemetry;if(!J)return;J.capture({event:x.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??G0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function G4($){return!!$&&typeof $==="object"&&!Array.isArray($)}function e9($){let J=$?.trim();return J?J:void 0}function tL($,J){let Z=$?.trim();if(!Z)return J;let Q=Date.parse(Z);if(!Number.isFinite(Q))return J;return new Date(Q).toISOString()}function BY($,J){return new Date(new Date($).getTime()+Math.max(0,Math.floor(J))*1000).toISOString()}function KY($,J){return new Date(new Date($).getTime()-Math.max(0,Math.floor(J))*1000).toISOString()}function sL($,J){if(!$)return J;return new Date($).getTime()>=new Date(J).getTime()?$:J}function oL($,J){let Z=$.eventId.trim(),Q=$.eventType.trim(),W=$.source.trim(),f=e9($.subject),j=e9($.dedupeKey)??`${Q}:${W}:${f??Z}`;return{eventId:Z,eventType:Q,source:W,subject:f,occurredAt:tL($.occurredAt,J),workspaceRoot:e9($.workspaceRoot),payload:G4($.payload)?$.payload:void 0,attributes:G4($.attributes)?$.attributes:void 0,dedupeKey:j}}function $W($,J){if(!J)return;let Z=J.split("."),Q=$;for(let W of Z){if(!G4(Q))return;Q=Q[W]}return Q}function eL($,J){if($.attributes&&Object.hasOwn($.attributes,J))return $.attributes[J];if($.payload&&Object.hasOwn($.payload,J))return $.payload[J];let Z={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},Q=$W(Z,J);if(Q!==void 0)return Q;if($.attributes){let W=$W($.attributes,J);if(W!==void 0)return W}if($.payload)return $W($.payload,J);return}function s5($,J){if(Array.isArray(J))return J.some((Z)=>s5($,Z));if(Array.isArray($))return $.some((Z)=>s5(Z,J));if(G4(J)){if(!G4($))return!1;return Object.entries(J).every(([Z,Q])=>s5($[Z],Q))}return Object.is($,J)}function $z($,J){if(!J||Object.keys(J).length===0)return!0;return Object.entries(J).every(([Z,Q])=>s5(eL($,Z),Q))}class JW{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let J=new Date(this.nowFn()).toISOString(),Z=oL($,J),Q=this.store.insertEventLog(Z,{receivedAtIso:J});if(!Q.created)return this.logger?.debug("cron.event.duplicate",{eventId:Q.record.eventId,eventType:Q.record.eventType,source:Q.record.source}),{event:Q.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:Q.record.dedupeKey}]};try{let W=this.store.listEventSpecsForType(Z.eventType),f=[],j=[],X=[];for(let A of W){if(!$z(Z,A.filters)){f.push({specId:A.specId,externalId:A.externalId,reason:"filter_mismatch",dedupeKey:Z.dedupeKey});continue}j.push(A);let V=this.materializeForSpec(A,Z,Q.record.receivedAt);if(V.run)X.push(V.run);else f.push({specId:A.specId,externalId:A.externalId,reason:V.reason,dedupeKey:Z.dedupeKey})}let H=j.length===0?"unmatched":X.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(Q.record.eventId,{status:H,matchedSpecCount:j.length,queuedRunCount:X.length,suppressedCount:f.filter((A)=>A.reason!=="filter_mismatch").length});let Y=this.store.getEventLog(Q.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:Q.record.eventId,eventType:Q.record.eventType,status:H,matchedSpecCount:j.length,queuedRunCount:X.length}),{event:Y??Q.record,duplicate:!1,matchedSpecs:j,queuedRuns:X,suppressions:f}}catch(W){if(this.store.updateEventLogProcessing(Q.record.eventId,{status:"failed",error:W instanceof Error?W.message:String(W)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:Q.record.eventId,eventType:Q.record.eventType,error:W});throw W}}materializeForSpec($,J,Z){let Q=J.dedupeKey??J.eventId,W=$.debounceSeconds??0;if(W>0){let H=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:Q});if(H){let Y=sL(H.scheduledFor,BY(Z,W)),A=this.store.updateQueuedEventRunForDebounce({runId:H.runId,triggerEventId:J.eventId,scheduledFor:Y});if(A)return{run:A,reason:"dedupe_window"}}}let f=$.dedupeWindowSeconds??0;if(f>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:Q,sinceIso:KY(Z,f)}))return{reason:"dedupe_window"};let j=$.cooldownSeconds??0;if(j>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:KY(Z,j)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:J.eventId,scheduledFor:W>0?BY(Z,W):Z}),reason:"dedupe_window"}}}class F4{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},J=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let Q of J)if(this.materializeOneOff(Q))$.oneOffQueued+=1;let Z=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Q of Z)try{if(this.materializeSchedule(Q))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as Xz}from"node:path";import{buildClineSystemPrompt as Hz}from"@cline/shared";import{nowIso as GY}from"@cline/shared/db";import{mkdirSync as Jz,writeFileSync as Zz}from"node:fs";import{join as Qz}from"node:path";import{resolveCronReportsDir as Wz}from"@cline/shared/storage";function X1($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function e1($,J){if(J===void 0||J===null)return;return`${$}: ${X1(J)}`}function fz($,J,Z){let Q=[`runId: ${X1($.runId)}`,`specId: ${X1(J.specId)}`,`externalId: ${X1(J.externalId)}`,`title: ${X1(J.title)}`,`triggerKind: ${X1($.triggerKind)}`,`status: ${X1($.status)}`,`sourcePath: ${X1(J.sourcePath)}`],W=[e1("sessionId",$.sessionId),e1("startedAt",$.startedAt),e1("completedAt",$.completedAt),e1("triggerEventId",$.triggerEventId),e1("triggerEventType",Z?.eventType),e1("triggerEventSource",Z?.source),e1("triggerEventSubject",Z?.subject)];for(let f of W)if(f)Q.push(f);return`---
210
- ${Q.join(`
208
+ `);if(J<0)break;let Q=this.buffer.slice(0,J).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!Q)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let W=Number.parseInt(Q[1],10),j=J+4,X=j+W;if(this.buffer.length<X)break;f.push(this.buffer.slice(j,X)),this.buffer=this.buffer.slice(X)}return f}}class HQ{buffer="";decoder=new KY("utf8");push($){this.buffer+=this.decoder.write($);let f=[];while(!0){let J=this.buffer.indexOf(`
209
+ `);if(J<0)break;let Z=this.buffer.slice(0,J).trim();if(this.buffer=this.buffer.slice(J+1),Z.length>0)f.push(Z)}return f}}class GY{registration;process;nextRequestId=1;pending=new Map;framedParser=new XQ;newlineParser=new HQ;stderrBuffer="";connected=!1;protocolMode="newline";constructor($){this.registration=$}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=["newline","framed"],f;for(let J of $){await this.disconnect().catch(()=>{}),this.spawnProcess(J);try{await this.request("initialize",{protocolVersion:aL,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},sL),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=J;return}catch(Z){f=Z instanceof Error?Z:Error(String(Z))}}throw f??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((f)=>typeof f?.name==="string"&&typeof f.inputSchema==="object"&&f.inputSchema!==null).map((f)=>({name:f.name,description:f.description,inputSchema:f.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let f=this.registration.transport;if(f.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${f.type}`);this.framedParser=new XQ,this.newlineParser=new HQ,this.stderrBuffer="",this.protocolMode=$;let J=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},Z=iL(f.command,f.args??[],{cwd:f.cwd,env:{...process.env,...f.env??{}},stdio:["pipe","pipe","pipe"],...J});this.process=Z,Z.stdout.on("data",(Q)=>this.handleStdout(Q)),Z.stderr.on("data",(Q)=>{if(this.process!==Z)return;if(this.stderrBuffer+=Q.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),Z.once("error",(Q)=>{if(this.process!==Z)return;this.failAllPending(Error(`MCP process error: ${f5(Q)}`))}),Z.once("exit",(Q,W)=>{if(this.process!==Z)return;this.connected=!1,this.process=void 0;let j=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${Q??"null"}, signal=${W??"null"}).${j}`))})}handleStdout($){try{let f=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let J of f){let Z=JSON.parse(J);if(typeof Z.id!=="number")continue;let Q=this.pending.get(Z.id);if(!Q)continue;if(this.pending.delete(Z.id),clearTimeout(Q.timeout),Z.error){let W=Z.error.message||`MCP request failed with code ${Z.error.code??"unknown"}`;Q.reject(Error(W));continue}Q.resolve(Z.result)}}catch(f){this.handleProtocolFailure(f)}}handleProtocolFailure($){let f=this.process;if(!f)return;this.connected=!1,this.process=void 0;let J=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${f5($)}.${J}`)),f.kill()}async request($,f,J=tL){let Z=this.process;if(!Z?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let Q=this.nextRequestId++,W={jsonrpc:"2.0",id:Q,method:$,...f?{params:f}:{}},j=new Promise((X,H)=>{let Y=setTimeout(()=>{this.pending.delete(Q),H(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},J);this.pending.set(Q,{resolve:X,reject:H,timeout:Y})});try{Z.stdin.write(this.protocolMode==="framed"?VY(W):BY(W))}catch(X){let H=this.pending.get(Q);if(H)clearTimeout(H.timeout),this.pending.delete(Q);throw X}return j}notify($,f){let J=this.process;if(!J?.stdin.writable)return;let Z={jsonrpc:"2.0",method:$,...f?{params:f}:{}};J.stdin.write(this.protocolMode==="framed"?VY(Z):BY(Z))}failAllPending($){for(let[f,J]of this.pending)clearTimeout(J.timeout),this.pending.delete(f),J.reject($)}}class PY{registration;options;client;authContext;constructor($,f){this.registration=$;this.options=f}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=e6({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??AY});this.authContext=$;try{let f=new nL({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),J=o6({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await f.connect(J),await $.clearError(),this.client=f}catch(f){let J=f instanceof YY?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):f5(f);throw await $.markError(J),Error(J)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema&&typeof J.inputSchema==="object"&&!Array.isArray(J.inputSchema)?J.inputSchema:{}}))}catch(f){return await this.handleOperationError(f)}}async callTool($){let f=await this.ensureConnectedClient();try{return await f.callTool({name:$.name,arguments:$.arguments??{}})}catch(J){return await this.handleOperationError(J)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let f=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${f} Run authorizeMcpServerOAuth for this server.`;return`${f} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let f=this.authContext??e6({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??AY}),J=$ instanceof YY?this.formatUnauthorizedMessage(f.getLastAuthorizationUrl()):f5($);throw await f.markError(J),Error(J)}}function G2($={}){return(f)=>f.transport.type==="stdio"?new GY(f):new PY(f,$)}s6();function g0(){return Date.now()}function oL($){return $.map((f)=>({name:f.name,description:f.description,inputSchema:f.inputSchema}))}class Qf{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let f=this.servers.get($.name);if(!f){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:g0()});return}let J=JSON.stringify(f.registration.transport)!==JSON.stringify($.transport);if(f.registration={...$},f.updatedAt=g0(),J)await this.disconnectState(f),f.client=void 0,f.toolCache=void 0,f.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let f=this.requireServer($);await this.disconnectState(f),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let f=this.requireServer($);await this.connectState(f)})}async disconnectServer($){await this.runExclusive($,async()=>{let f=this.requireServer($);await this.disconnectState(f)})}async setServerDisabled($,f){await this.runExclusive($,async()=>{let J=this.requireServer($);if(J.registration={...J.registration,disabled:f},J.updatedAt=g0(),f)await this.disconnectState(J)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,f)=>$.name.localeCompare(f.name))}async listTools($){let f=this.requireServer($),J=f.toolCacheUpdatedAt??0;if(f.toolCache&&g0()-J<=this.toolsCacheTtlMs)return f.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let f=this.requireServer($),Z=await(await this.ensureConnectedClient(f)).listTools(),Q=oL(Z);return f.toolCache=Q,f.toolCacheUpdatedAt=g0(),f.updatedAt=g0(),Q})}async callTool($){return this.runExclusive($.serverName,async()=>{let f=this.requireServer($.serverName),J=await this.ensureConnectedClient(f);return f.updatedAt=g0(),J.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let f of $)await this.unregisterServer(f)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=g0();try{let f=$.client??await this.clientFactory($.registration);await f.connect(),$.client=f,$.status="connected",$.lastError=void 0,$.updatedAt=g0()}catch(f){throw $.status="disconnected",$.lastError=f instanceof Error?f.message:String(f),$.updatedAt=g0(),f}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=g0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=g0()}}requireServer($){let f=this.servers.get($);if(!f)throw Error(`Unknown MCP server: ${$}`);return f}async runExclusive($,f){let J=this.operationLocks.get($)??Promise.resolve(),Z,Q=new Promise((j)=>{Z=j}),W=J.catch(()=>{return}).then(()=>Q);this.operationLocks.set($,W),await J.catch(()=>{return});try{return await f()}finally{if(Z?.(),this.operationLocks.get($)===W)this.operationLocks.delete($)}}}import{createHash as eL}from"node:crypto";var FY=128,$_=/[^a-zA-Z0-9_-]+/g,UY=8,f_=1,J_="mcp_tool";function Z_($){return eL("sha1").update($).digest("hex").slice(0,UY)}function Q_($){return $.replace($_,"_")}var J5=({serverName:$,toolName:f})=>{let J=`${$}__${f}`,Z=Q_(J);if(Z===J&&J.length<=FY)return J;let Q=Z_(J),W=FY-f_-UY;return`${Z.slice(0,W)||J_}_${Q}`};function LJ($){return{[($.nameTransform??J5)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function Z5($){let f={};for(let J of $.toolNames)Object.assign(f,LJ({serverName:$.serverName,toolName:J,nameTransform:$.nameTransform}));return f}import{createTool as W_}from"@cline/shared";function j_($,f){let J=f.description?.trim();if(J)return J;return`Execute MCP tool "${f.name}" from server "${$}".`}async function P2($){let f=await $.provider.listTools($.serverName),J=$.nameTransform??J5;return f.map((Z)=>{let Q=J({serverName:$.serverName,toolName:Z.name});return W_({name:Q,description:j_($.serverName,Z),inputSchema:Z.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(W,j)=>$.provider.callTool({serverName:$.serverName,toolName:Z.name,arguments:W&&typeof W==="object"&&!Array.isArray(W)?W:void 0,context:j})})})}X$();var LY={};w(LY,{listPluginToolsWithDiagnostics:()=>Q5,listPluginTools:()=>_J});import{stat as X_}from"node:fs/promises";X$();var H_=32,F2=new Map;function Y_($,f){if(!F2.has($)&&F2.size>=H_){let J=F2.keys().next().value;if(J)F2.delete(J)}F2.set($,f)}async function A_($){let f=await Promise.all($.pluginPaths.map(async(J)=>{try{let Z=await X_(J);return`${J}:${Z.mtimeMs}:${Z.size}`}catch{return`${J}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:f})}function DY($,f){return $.map((J)=>({...J,enabled:!f.has(J.name)}))}function V_($){return $.sort((f,J)=>{let Z=f.name.localeCompare(J.name);if(Z!==0)return Z;return f.path.localeCompare(J.path)})}function B_($,f){if(!$.setup)return[];let J=[],Z={registerTool:(Q)=>J.push(Q),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{}};return $.setup(Z,{workspaceInfo:f}),J}async function Q5($){let f=p1({workspacePath:$.workspacePath,cwd:$.cwd}),J=j$($.disabledToolNames);if(f.length===0)return{tools:[],failures:[],warnings:[]};let Z=await A_({pluginPaths:f,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),Q=F2.get(Z);if(Q)return{tools:DY(Q.tools,J),failures:Q.failures,warnings:Q.warnings};let W=[],j=[],X=[],H;try{H=await $6({pluginPaths:f,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),j=[...H.failures],X=[...H.warnings];for(let V of H.extensions??[]){let B=V.__clinePluginPath;if(!B)continue;for(let K of B_(V,{rootPath:$.workspacePath}))W.push({name:K.name,pluginName:V.name,path:B,source:B.startsWith($.workspacePath)?"workspace-plugin":"global-plugin",description:K.description?.trim()||void 0})}}catch(V){j=f.map((B)=>({pluginPath:B,phase:"load",message:V instanceof Error?V.message:String(V),stack:V instanceof Error?V.stack:void 0}))}finally{await H?.shutdown().catch(()=>{})}let Y=V_(W);return Y_(Z,{tools:Y,failures:j,warnings:X}),{tools:DY(Y,J),failures:j,warnings:X}}async function _J($){return(await Q5($)).tools}function j5($,f){if(!f)return"global";let J=G_(f,$);return!J.startsWith("..")&&!K_(J)?"workspace":"global"}function zJ($){return[...$].sort((f,J)=>{let Z=(Q)=>{switch(Q){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(f.source!==J.source)return Z(f.source)-Z(J.source);return f.name.localeCompare(J.name)})}function OY($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}async function zY($,f){if($.userInstructionService)return await f($.userInstructionService);let J=OY($);if(!J)return await f(void 0);let Z=$.cwd?.trim()||J,Q=V1({skills:{workspacePath:J,includePluginSkills:!0,cwd:Z},rules:{workspacePath:J},workflows:{workspacePath:J}});try{return await Q.start(),await f(Q)}finally{Q.stop()}}function P_($,f){if(!$)return;let J=$.listRecords("skill");if(f.id){let Z=J.find((Q)=>Q.id===f.id);if(Z)return Z}for(let Z of J)if(Z.filePath===f.path||Z.item.name===f.name||Z.id===f.name)return Z;return}class B1{async list($={}){return await zY($,async(f)=>{let J=OY($),Z=[],Q=[],W=[],j=[],X=[];if(f){for(let Y of f.listRecords("workflow")){let A=Y.item;Z.push({id:Y.id,name:A.name,path:Y.filePath,enabled:A.disabled!==!0,kind:"workflow",source:j5(Y.filePath,J),description:A.instructions,toggleable:!1})}for(let Y of f.listRecords("rule")){let A=Y.item;Q.push({id:Y.id,name:A.name,path:Y.filePath,enabled:A.disabled!==!0,kind:"rule",source:j5(Y.filePath,J),description:A.instructions,toggleable:!1})}for(let Y of f.listRecords("skill")){let A=Y.item;W.push({id:Y.id,name:A.name,path:Y.filePath,enabled:A.disabled!==!0,kind:"skill",source:j5(Y.filePath,J),description:A.description,toggleable:!0})}}if(J)try{for(let Y of await _J({workspacePath:J,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))j.push({id:`${Y.pluginName}:${Y.name}:${Y.path}`,name:Y.name,path:Y.path,enabled:Y.enabled,kind:"tool",source:Y.source,description:Y.description,toggleable:!0})}catch{}let H=z0();if(E$({filePath:H}))try{for(let Y of H$({filePath:H}))X.push({id:Y.name,name:Y.name,path:H,enabled:Y.disabled!==!0,kind:"mcp",source:j5(H,J),description:Y.transport.type,toggleable:!0})}catch{}return{workflows:zJ(Z.filter((Y)=>W5(Y.path))),rules:zJ(Q.filter((Y)=>W5(Y.path))),skills:zJ(W.filter((Y)=>W5(Y.path))),tools:zJ(j),mcp:zJ(X.filter((Y)=>W5(Y.path)))}})}async toggle($){if($.type==="skills")return await zY($,async(f)=>{let J=P_(f,$),Z=J?.filePath;if(!Z)throw Error(`Unable to resolve skill setting '${$.id??$.name??_Y($.path??"")}'.`);let Q=J?.item&&"disabled"in J.item?J.item.disabled!==!0:void 0,W=$.enabled??(Q!==void 0?!Q:void 0);if(W===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??_Y($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await $Y({filePath:Z,enabled:W}),await f?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:f}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)n4($.name);else oj($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let f=$.name?.trim()||$.id?.trim();if(!f)throw Error("MCP server settings toggle requires a server name.");let J=$.path?.trim()||z0(),Z=$.enabled;if(Z===void 0){let Q=H$({filePath:J}).find((W)=>W.name===f);if(!Q)throw Error(`Unknown MCP server: ${f}`);Z=Q.disabled===!0}return $f({filePath:J,name:f,disabled:!Z}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function Wf(){return new B1}function NY($){return{async list(f){let J=$;if(J.listSettings)return await J.listSettings(f);return await Wf().list(f)},async toggle(f){let J=$;if(J.toggleSetting)return await J.toggleSetting(f);return await Wf().toggle(f)}}}function MY($){function f(){let J=$.pendingPrompts;if(!J)throw Error("Pending prompt service is not available.");return J}return{list(J){return f().list(J)},update(J){return f().update(J)},delete(J){return f().delete(J)}}}var yY={};w(yY,{splitCoreSessionConfig:()=>OJ,isSessionNotFoundError:()=>k$,SessionNotFoundError:()=>b$,SESSION_NOT_FOUND_ERROR_CODE:()=>jf});var jf="session_not_found";class b$ extends Error{sessionId;code="session_not_found";constructor($,f){super(f??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function k$($){return $ instanceof b$||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function OJ($){let{hooks:f,logger:J,telemetry:Z,extensionContext:Q,extraTools:W,extensions:j,onTeamEvent:X,onConsecutiveMistakeLimitReached:H,checkpoint:Y,compaction:A,...V}=$,B={};if(f)B.hooks=f;if(J)B.logger=J;if(Z)B.telemetry=Z;if(Q)B.extensionContext=Q;if(W)B.extraTools=W;if(j)B.extensions=j;if(X)B.onTeamEvent=X;if(H)B.onConsecutiveMistakeLimitReached=H;if(Y?.createCheckpoint)B.checkpoint=Y;if(A?.compact)B.compaction=A;let K=Object.keys(B).length>0?B:void 0;return{config:{...V,...Y?{checkpoint:{enabled:Y.enabled}}:{},...A?{compaction:{enabled:A.enabled,strategy:A.strategy,thresholdRatio:A.thresholdRatio,reserveTokens:A.reserveTokens,preserveRecentTokens:A.preserveRecentTokens,maxInputTokens:A.maxInputTokens,summarizer:A.summarizer}}:{}},...K?{localRuntime:K}:{}}}function qY($){let f=$.config;return"providerId"in f?{...$,config:{...f,...F_($.localRuntime)},localRuntime:$.localRuntime}:$}function YQ($,f={}){let J=OJ($.config),Z=U0(f.defaultCapabilities,$.capabilities),Q=U_(J.localRuntime,$.localRuntime),W=f.withExtensionContext?.(Q?.extensionContext);if(W)Q={...Q??{},extensionContext:W};return{...$,...J,...Q?{localRuntime:Q}:{},...Z?{capabilities:Z}:{}}}function F_($){if(!$)return{};let{modelCatalogDefaults:f,userInstructionService:J,configExtensions:Z,onTeamRestored:Q,...W}=$;return W}function U_(...$){let f={};for(let J of $)if(J)Object.assign(f,J);return Object.keys(f).length>0?f:void 0}L0();function wY($){let f=$.input.config.telemetry??$.telemetry;if(!f)return;f.capture({event:x.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??G0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function TJ($){return!!$&&typeof $==="object"&&!Array.isArray($)}function AQ($){let f=$?.trim();return f?f:void 0}function R_($,f){let J=$?.trim();if(!J)return f;let Z=Date.parse(J);if(!Number.isFinite(Z))return f;return new Date(Z).toISOString()}function SY($,f){return new Date(new Date($).getTime()+Math.max(0,Math.floor(f))*1000).toISOString()}function hY($,f){return new Date(new Date($).getTime()-Math.max(0,Math.floor(f))*1000).toISOString()}function D_($,f){if(!$)return f;return new Date($).getTime()>=new Date(f).getTime()?$:f}function L_($,f){let J=$.eventId.trim(),Z=$.eventType.trim(),Q=$.source.trim(),W=AQ($.subject),j=AQ($.dedupeKey)??`${Z}:${Q}:${W??J}`;return{eventId:J,eventType:Z,source:Q,subject:W,occurredAt:R_($.occurredAt,f),workspaceRoot:AQ($.workspaceRoot),payload:TJ($.payload)?$.payload:void 0,attributes:TJ($.attributes)?$.attributes:void 0,dedupeKey:j}}function VQ($,f){if(!f)return;let J=f.split("."),Z=$;for(let Q of J){if(!TJ(Z))return;Z=Z[Q]}return Z}function __($,f){if($.attributes&&Object.hasOwn($.attributes,f))return $.attributes[f];if($.payload&&Object.hasOwn($.payload,f))return $.payload[f];let J={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},Z=VQ(J,f);if(Z!==void 0)return Z;if($.attributes){let Q=VQ($.attributes,f);if(Q!==void 0)return Q}if($.payload)return VQ($.payload,f);return}function X5($,f){if(Array.isArray(f))return f.some((J)=>X5($,J));if(Array.isArray($))return $.some((J)=>X5(J,f));if(TJ(f)){if(!TJ($))return!1;return Object.entries(f).every(([J,Z])=>X5($[J],Z))}return Object.is($,f)}function z_($,f){if(!f||Object.keys(f).length===0)return!0;return Object.entries(f).every(([J,Z])=>X5(__($,J),Z))}class BQ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let f=new Date(this.nowFn()).toISOString(),J=L_($,f),Z=this.store.insertEventLog(J,{receivedAtIso:f});if(!Z.created)return this.logger?.debug("cron.event.duplicate",{eventId:Z.record.eventId,eventType:Z.record.eventType,source:Z.record.source}),{event:Z.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:Z.record.dedupeKey}]};try{let Q=this.store.listEventSpecsForType(J.eventType),W=[],j=[],X=[];for(let A of Q){if(!z_(J,A.filters)){W.push({specId:A.specId,externalId:A.externalId,reason:"filter_mismatch",dedupeKey:J.dedupeKey});continue}j.push(A);let V=this.materializeForSpec(A,J,Z.record.receivedAt);if(V.run)X.push(V.run);else W.push({specId:A.specId,externalId:A.externalId,reason:V.reason,dedupeKey:J.dedupeKey})}let H=j.length===0?"unmatched":X.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(Z.record.eventId,{status:H,matchedSpecCount:j.length,queuedRunCount:X.length,suppressedCount:W.filter((A)=>A.reason!=="filter_mismatch").length});let Y=this.store.getEventLog(Z.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:Z.record.eventId,eventType:Z.record.eventType,status:H,matchedSpecCount:j.length,queuedRunCount:X.length}),{event:Y??Z.record,duplicate:!1,matchedSpecs:j,queuedRuns:X,suppressions:W}}catch(Q){if(this.store.updateEventLogProcessing(Z.record.eventId,{status:"failed",error:Q instanceof Error?Q.message:String(Q)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:Z.record.eventId,eventType:Z.record.eventType,error:Q});throw Q}}materializeForSpec($,f,J){let Z=f.dedupeKey??f.eventId,Q=$.debounceSeconds??0;if(Q>0){let H=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:Z});if(H){let Y=D_(H.scheduledFor,SY(J,Q)),A=this.store.updateQueuedEventRunForDebounce({runId:H.runId,triggerEventId:f.eventId,scheduledFor:Y});if(A)return{run:A,reason:"dedupe_window"}}}let W=$.dedupeWindowSeconds??0;if(W>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:Z,sinceIso:hY(J,W)}))return{reason:"dedupe_window"};let j=$.cooldownSeconds??0;if(j>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:hY(J,j)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:f.eventId,scheduledFor:Q>0?SY(J,Q):J}),reason:"dedupe_window"}}}class NJ{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},f=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let Z of f)if(this.materializeOneOff(Z))$.oneOffQueued+=1;let J=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Z of J)try{if(this.materializeSchedule(Z))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as w_}from"node:path";import{buildClineSystemPrompt as S_}from"@cline/shared";import{nowIso as CY}from"@cline/shared/db";import{mkdirSync as O_,writeFileSync as T_}from"node:fs";import{join as N_}from"node:path";import{resolveCronReportsDir as M_}from"@cline/shared/storage";function K1($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function Xf($,f){if(f===void 0||f===null)return;return`${$}: ${K1(f)}`}function y_($,f,J){let Z=[`runId: ${K1($.runId)}`,`specId: ${K1(f.specId)}`,`externalId: ${K1(f.externalId)}`,`title: ${K1(f.title)}`,`triggerKind: ${K1($.triggerKind)}`,`status: ${K1($.status)}`,`sourcePath: ${K1(f.sourcePath)}`],Q=[Xf("sessionId",$.sessionId),Xf("startedAt",$.startedAt),Xf("completedAt",$.completedAt),Xf("triggerEventId",$.triggerEventId),Xf("triggerEventType",J?.eventType),Xf("triggerEventSource",J?.source),Xf("triggerEventSubject",J?.subject)];for(let W of Q)if(W)Z.push(W);return`---
210
+ ${Z.join(`
211
211
  `)}
212
212
  ---
213
- `}function jz($){let J=[];if($.triggerEvent){let Z=$.triggerEvent,Q=[`- eventId: ${Z.eventId}`,`- eventType: ${Z.eventType}`,`- source: ${Z.source}`,Z.subject?`- subject: ${Z.subject}`:"",`- occurredAt: ${Z.occurredAt}`,Z.dedupeKey?`- dedupeKey: ${Z.dedupeKey}`:"",Z.attributes?`- attributes: ${JSON.stringify(Z.attributes)}`:""].filter((W)=>W.length>0);J.push(`## Trigger Event
213
+ `}function q_($){let f=[];if($.triggerEvent){let J=$.triggerEvent,Z=[`- eventId: ${J.eventId}`,`- eventType: ${J.eventType}`,`- source: ${J.source}`,J.subject?`- subject: ${J.subject}`:"",`- occurredAt: ${J.occurredAt}`,J.dedupeKey?`- dedupeKey: ${J.dedupeKey}`:"",J.attributes?`- attributes: ${JSON.stringify(J.attributes)}`:""].filter((Q)=>Q.length>0);f.push(`## Trigger Event
214
214
 
215
- ${Q.join(`
215
+ ${Z.join(`
216
216
  `)}
217
- `)}if($.error)J.push(`## Error
217
+ `)}if($.error)f.push(`## Error
218
218
 
219
219
  ${$.error}
220
- `);if($.finalText&&$.finalText.trim().length>0)J.push(`## Summary
220
+ `);if($.finalText&&$.finalText.trim().length>0)f.push(`## Summary
221
221
 
222
222
  ${$.finalText.trim()}
223
- `);if($.usage){let Z=$.usage,Q=[Z.inputTokens!==void 0?`- inputTokens: ${Z.inputTokens}`:"",Z.outputTokens!==void 0?`- outputTokens: ${Z.outputTokens}`:"",Z.cacheReadTokens!==void 0?`- cacheReadTokens: ${Z.cacheReadTokens}`:"",Z.cacheWriteTokens!==void 0?`- cacheWriteTokens: ${Z.cacheWriteTokens}`:"",Z.totalCost!==void 0?`- totalCostUsd: ${Z.totalCost}`:"",$.durationMs!==void 0?`- durationMs: ${$.durationMs}`:""].filter((W)=>W.length>0);if(Q.length>0)J.push(`## Usage
223
+ `);if($.usage){let J=$.usage,Z=[J.inputTokens!==void 0?`- inputTokens: ${J.inputTokens}`:"",J.outputTokens!==void 0?`- outputTokens: ${J.outputTokens}`:"",J.cacheReadTokens!==void 0?`- cacheReadTokens: ${J.cacheReadTokens}`:"",J.cacheWriteTokens!==void 0?`- cacheWriteTokens: ${J.cacheWriteTokens}`:"",J.totalCost!==void 0?`- totalCostUsd: ${J.totalCost}`:"",$.durationMs!==void 0?`- durationMs: ${$.durationMs}`:""].filter((Q)=>Q.length>0);if(Z.length>0)f.push(`## Usage
224
224
 
225
- ${Q.join(`
225
+ ${Z.join(`
226
226
  `)}
227
- `)}if($.toolCalls&&$.toolCalls.length>0){let Z=$.toolCalls.map((Q)=>{let W=[`- ${Q.name}`];if(Q.durationMs!==void 0)W.push(`(${Q.durationMs}ms)`);if(Q.error)W.push(`error: ${Q.error}`);return W.join(" ")});J.push(`## Tool Calls
227
+ `)}if($.toolCalls&&$.toolCalls.length>0){let J=$.toolCalls.map((Z)=>{let Q=[`- ${Z.name}`];if(Z.durationMs!==void 0)Q.push(`(${Z.durationMs}ms)`);if(Z.error)Q.push(`error: ${Z.error}`);return Q.join(" ")});f.push(`## Tool Calls
228
228
 
229
- ${Z.join(`
229
+ ${J.join(`
230
230
  `)}
231
- `)}return J.join(`
232
- `)}function ZW($){let J=Wz($.specs);Jz(J,{recursive:!0});let Z=Qz(J,`${$.run.runId}.md`),Q=`${fz($.run,$.spec,$.data.triggerEvent)}
233
- ${jz($.data)}`;return Zz(Z,Q,"utf8"),Z}class QW{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,J,Z){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let Q=Math.max(1,Math.floor(Z)),W=this.activeExecutions.get($)??new Set;if(W.size>=Q)return!1;return W.add(J),this.activeExecutions.set($,W),!0}release($,J){let Z=this.activeExecutions.get($);if(!Z)return;if(Z.delete(J),Z.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let J of this.activeExecutions.values())$+=J.size;return $}}var Yz=15000,Az=90,FY=["rules","skills","plugins"];function Vz($,J){return new Set($.extensions??FY).has(J)}function Bz($,J){if($.tools===void 0)return{"*":{autoApprove:!0}};let Z={"*":{enabled:!1,autoApprove:!0}};for(let Q of $.tools)Z[Q]={enabled:!0,autoApprove:!0};if(J==="yolo")Z[Z0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Z}function Kz($){let J=$?.trim();if(!J)return;return["# Notes Directory",`Use ${J} for durable notes related to this automation.`,"Before starting, inspect relevant existing notes there when useful. During or after the run, write concise notes there when they would help future runs continue with context."].join(`
234
- `)}class WW extends Error{constructor($){super($);this.name="TimeoutError"}}async function Gz($,J){if(J<=0)return $;let Z,Q=new Promise((W,f)=>{Z=setTimeout(()=>{f(new WW("cron run timed out"))},J)});try{return await Promise.race([$,Q])}finally{if(Z)clearTimeout(Z)}}class U4{store;materializer;options;limiter;claimLeaseMs;timer;started=!1;ticking=!1;disposed=!1;stopping=!1;activeRuns=new Map;constructor($){this.store=$.store,this.materializer=$.materializer,this.options=$,this.limiter=new QW($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??Az)*1000)}async start(){if(this.disposed)throw Error("CronRunner disposed");if(this.started)return;this.stopping=!1,this.started=!0;let $=Math.max(2000,this.options.pollIntervalMs??Yz);await this.tick(),this.timer=setInterval(()=>void this.tick(),$)}async stop(){let $=this.started;if(this.started=!1,this.stopping=!0,this.timer)clearInterval(this.timer),this.timer=void 0;if(!$)return;let J=[...this.activeRuns.entries()];await Promise.all(J.map(async([Z,Q])=>{if(Q.sessionId)try{await this.options.runtimeHandlers.abortSession(Q.sessionId)}catch{}try{this.store.requeueRun({runId:Z,claimToken:Q.claimToken,error:"runner stopped before completion"})}catch{}}))}async dispose(){if(this.disposed)return;this.disposed=!0,await this.stop()}async tick(){if(this.ticking)return;this.ticking=!0;try{this.materializer.materializeAll();let $=this.store.claimDueRuns({nowIso:GY(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((J)=>this.executeClaim(J)))}catch($){let J=this.options.logger;if(J)if(J.error)J.error("cron.runner.tick.failed",{error:$});else J.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,J])=>{let Z=this.store.getRun($);return Z?[{...Z,...J}]:[]})}async executeClaim($){let J=$.run,Z=this.store.getSpec(J.specId);if(!Z){this.store.completeRun(J.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!Z.enabled||Z.removed){this.store.completeRun(J.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let Q=Z.maxParallel&&Z.maxParallel>0?Z.maxParallel:1;if(!this.limiter.acquire(Z.specId,J.runId,Q)){this.store.requeueRun({runId:J.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(Z.specId,J.runId),this.store.requeueRun({runId:J.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(J.runId,{claimToken:$.claimToken});let f=J.triggerEventId?this.store.getEventLog(J.triggerEventId):void 0,j,X,H=Date.now(),Y;if(Z.timeoutSeconds&&Z.timeoutSeconds>0)Y=H+Z.timeoutSeconds*1000;try{X=this.startClaimLeaseHeartbeat($);let A=await this.buildStartRequest(Z);if(j=(await this.options.runtimeHandlers.startSession(A)).sessionId.trim(),!j)throw Error("runtime returned empty sessionId");this.activeRuns.set(J.runId,{claimToken:$.claimToken,sessionId:j}),this.store.attachSessionIdToRun(J.runId,j);let B={config:A,prompt:this.buildPrompt(Z,f)},K=this.options.runtimeHandlers.sendSession(j,B),G=Y?Math.max(1,Y-Date.now()):0,F=(await Gz(K,G)).result,U=Date.now(),R=ZW({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...J,sessionId:j,status:"done"},spec:Z,data:{finalText:F.text,usage:F.usage,toolCalls:F.toolCalls,durationMs:U-H,triggerEvent:f}});this.store.completeRun(J.runId,{status:"done",sessionId:j,reportPath:R,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",Z,J.runId),this.store.updateSpecLastRunAt(Z.specId,GY())}catch(A){let V=A instanceof WW;if(j&&V)try{await this.options.runtimeHandlers.abortSession(j)}catch{}let B=A instanceof Error?A.message:String(A),K=Date.now(),G=ZW({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...J,sessionId:j,status:"failed"},spec:Z,data:{error:B,durationMs:K-H,triggerEvent:f}});this.store.completeRun(J.runId,{status:"failed",sessionId:j,reportPath:G,error:B,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.failed",Z,J.runId)}finally{if(X?.(),j)try{await this.options.runtimeHandlers.stopSession(j)}catch{}this.activeRuns.delete(J.runId),this.limiter.release(Z.specId,J.runId)}}publishScheduleExecutionEvent($,J,Z){if(J.source!=="hub-schedule"||!this.options.eventPublisher)return;let Q=this.store.getRun(Z);if(!Q)return;let W=Q.status==="done"?"success":Q.status==="cancelled"?"aborted":Q.status==="running"?"running":Q.status==="queued"?"pending":"failed";this.options.eventPublisher($,{scheduleId:J.externalId,executionId:Q.runId,sessionId:Q.sessionId,triggeredAt:new Date(Q.scheduledFor??Q.createdAt).getTime(),startedAt:Q.startedAt?new Date(Q.startedAt).getTime():void 0,endedAt:Q.completedAt?new Date(Q.completedAt).getTime():void 0,status:W,errorMessage:Q.error})}buildPrompt($,J){let Z=$.prompt??"";if(!J)return Z;let Q={eventId:J.eventId,eventType:J.eventType,source:J.source,subject:J.subject,occurredAt:J.occurredAt,workspaceRoot:J.workspaceRoot,dedupeKey:J.dedupeKey,attributes:J.attributes,payload:J.payload};return`${Z}
231
+ `)}return f.join(`
232
+ `)}function KQ($){let f=M_($.specs);O_(f,{recursive:!0});let J=N_(f,`${$.run.runId}.md`),Z=`${y_($.run,$.spec,$.data.triggerEvent)}
233
+ ${q_($.data)}`;return T_(J,Z,"utf8"),J}class GQ{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,f,J){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let Z=Math.max(1,Math.floor(J)),Q=this.activeExecutions.get($)??new Set;if(Q.size>=Z)return!1;return Q.add(f),this.activeExecutions.set($,Q),!0}release($,f){let J=this.activeExecutions.get($);if(!J)return;if(J.delete(f),J.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let f of this.activeExecutions.values())$+=f.size;return $}}var h_=15000,C_=90,EY=["rules","skills","plugins"];function E_($,f){return new Set($.extensions??EY).has(f)}function b_($,f){if($.tools===void 0)return{"*":{autoApprove:!0}};let J={"*":{enabled:!1,autoApprove:!0}};for(let Z of $.tools)J[Z]={enabled:!0,autoApprove:!0};if(f==="yolo")J[J0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return J}function k_($){let f=$?.trim();if(!f)return;return["# Notes Directory",`Use ${f} for durable notes related to this automation.`,"Before starting, inspect relevant existing notes there when useful. During or after the run, write concise notes there when they would help future runs continue with context."].join(`
234
+ `)}class PQ extends Error{constructor($){super($);this.name="TimeoutError"}}async function I_($,f){if(f<=0)return $;let J,Z=new Promise((Q,W)=>{J=setTimeout(()=>{W(new PQ("cron run timed out"))},f)});try{return await Promise.race([$,Z])}finally{if(J)clearTimeout(J)}}class MJ{store;materializer;options;limiter;claimLeaseMs;timer;started=!1;ticking=!1;disposed=!1;stopping=!1;activeRuns=new Map;constructor($){this.store=$.store,this.materializer=$.materializer,this.options=$,this.limiter=new GQ($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??C_)*1000)}async start(){if(this.disposed)throw Error("CronRunner disposed");if(this.started)return;this.stopping=!1,this.started=!0;let $=Math.max(2000,this.options.pollIntervalMs??h_);await this.tick(),this.timer=setInterval(()=>void this.tick(),$)}async stop(){let $=this.started;if(this.started=!1,this.stopping=!0,this.timer)clearInterval(this.timer),this.timer=void 0;if(!$)return;let f=[...this.activeRuns.entries()];await Promise.all(f.map(async([J,Z])=>{if(Z.sessionId)try{await this.options.runtimeHandlers.abortSession(Z.sessionId)}catch{}try{this.store.requeueRun({runId:J,claimToken:Z.claimToken,error:"runner stopped before completion"})}catch{}}))}async dispose(){if(this.disposed)return;this.disposed=!0,await this.stop()}async tick(){if(this.ticking)return;this.ticking=!0;try{this.materializer.materializeAll();let $=this.store.claimDueRuns({nowIso:CY(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((f)=>this.executeClaim(f)))}catch($){let f=this.options.logger;if(f)if(f.error)f.error("cron.runner.tick.failed",{error:$});else f.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,f])=>{let J=this.store.getRun($);return J?[{...J,...f}]:[]})}async executeClaim($){let f=$.run,J=this.store.getSpec(f.specId);if(!J){this.store.completeRun(f.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!J.enabled||J.removed){this.store.completeRun(f.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let Z=J.maxParallel&&J.maxParallel>0?J.maxParallel:1;if(!this.limiter.acquire(J.specId,f.runId,Z)){this.store.requeueRun({runId:f.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(J.specId,f.runId),this.store.requeueRun({runId:f.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(f.runId,{claimToken:$.claimToken});let W=f.triggerEventId?this.store.getEventLog(f.triggerEventId):void 0,j,X,H=Date.now(),Y;if(J.timeoutSeconds&&J.timeoutSeconds>0)Y=H+J.timeoutSeconds*1000;try{X=this.startClaimLeaseHeartbeat($);let A=await this.buildStartRequest(J);if(j=(await this.options.runtimeHandlers.startSession(A)).sessionId.trim(),!j)throw Error("runtime returned empty sessionId");this.activeRuns.set(f.runId,{claimToken:$.claimToken,sessionId:j}),this.store.attachSessionIdToRun(f.runId,j);let B={config:A,prompt:this.buildPrompt(J,W)},K=this.options.runtimeHandlers.sendSession(j,B),G=Y?Math.max(1,Y-Date.now()):0,P=(await I_(K,G)).result,F=Date.now(),U=KQ({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...f,sessionId:j,status:"done"},spec:J,data:{finalText:P.text,usage:P.usage,toolCalls:P.toolCalls,durationMs:F-H,triggerEvent:W}});this.store.completeRun(f.runId,{status:"done",sessionId:j,reportPath:U,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",J,f.runId),this.store.updateSpecLastRunAt(J.specId,CY())}catch(A){let V=A instanceof PQ;if(j&&V)try{await this.options.runtimeHandlers.abortSession(j)}catch{}let B=A instanceof Error?A.message:String(A),K=Date.now(),G=KQ({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...f,sessionId:j,status:"failed"},spec:J,data:{error:B,durationMs:K-H,triggerEvent:W}});this.store.completeRun(f.runId,{status:"failed",sessionId:j,reportPath:G,error:B,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.failed",J,f.runId)}finally{if(X?.(),j)try{await this.options.runtimeHandlers.stopSession(j)}catch{}this.activeRuns.delete(f.runId),this.limiter.release(J.specId,f.runId)}}publishScheduleExecutionEvent($,f,J){if(f.source!=="hub-schedule"||!this.options.eventPublisher)return;let Z=this.store.getRun(J);if(!Z)return;let Q=Z.status==="done"?"success":Z.status==="cancelled"?"aborted":Z.status==="running"?"running":Z.status==="queued"?"pending":"failed";this.options.eventPublisher($,{scheduleId:f.externalId,executionId:Z.runId,sessionId:Z.sessionId,triggeredAt:new Date(Z.scheduledFor??Z.createdAt).getTime(),startedAt:Z.startedAt?new Date(Z.startedAt).getTime():void 0,endedAt:Z.completedAt?new Date(Z.completedAt).getTime():void 0,status:Q,errorMessage:Z.error})}buildPrompt($,f){let J=$.prompt??"";if(!f)return J;let Z={eventId:f.eventId,eventType:f.eventType,source:f.source,subject:f.subject,occurredAt:f.occurredAt,workspaceRoot:f.workspaceRoot,dedupeKey:f.dedupeKey,attributes:f.attributes,payload:f.payload};return`${J}
235
235
 
236
236
  Trigger event:
237
- ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Z=setInterval(()=>{let Q=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,Q))clearInterval(Z)},J);return()=>clearInterval(Z)}async buildSystemPrompt($,J,Z,Q){let W=Kz($.notesDirectory),f=W8(void 0,W),j=await gJ(J),X=Hz({ide:"Cline Cron",workspaceRoot:J,workspaceName:Xz(J),metadata:j,rules:$.systemPrompt?void 0:f,mode:Z,providerId:Q,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?W8(X,f)??X:X}async buildStartRequest($){let J=($.workspaceRoot??"").trim(),Z=($.providerId??"").trim(),Q=($.modelId??"").trim(),W=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,f=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():J;if(!J)throw Error("cron spec requires workspaceRoot");let j=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:J,cwd:f,provider:Z,model:Q,mode:j,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,J,j,Z),maxIterations:$.maxIterations,enableTools:W?.enableTools??!0,enableSpawn:W?.enableSpawn??!0,enableTeams:W?.enableTeams??!0,autoApproveTools:W?.autoApproveTools??!0,toolPolicies:Bz($,j),configExtensions:FY.filter((X)=>Vz($,X))}}}import{existsSync as xz,readdirSync as mz,readFileSync as gz,statSync as vz}from"node:fs";import{relative as uz}from"node:path";import{resolveCronSpecsDir as cz}from"@cline/shared/storage";function R4($,J,Z,Q){let W=new Set;function f(j){let X=j.toLowerCase();if(Q){let Y=Q.indexOf(X);if(Y!==-1)return Y+J}let H=Number(j);if(!Number.isInteger(H)||H<J||H>Z)throw Error(`Invalid cron value "${j}" for range [${J}-${Z}]`);return H}for(let j of $.split(",")){if(j==="*"){for(let Y=J;Y<=Z;Y+=1)W.add(Y);continue}let X=j.indexOf("/");if(X!==-1){let Y=j.slice(0,X),A=Number(j.slice(X+1));if(!Number.isInteger(A)||A<1)throw Error(`Invalid step "${j.slice(X+1)}"`);let V=J,B=Z;if(Y!=="*"){let K=Y.indexOf("-");if(K!==-1)V=f(Y.slice(0,K)),B=f(Y.slice(K+1));else V=f(Y)}if(V>B)throw Error(`Invalid cron range "${Y}"`);for(let K=V;K<=B;K+=A)W.add(K);continue}let H=j.indexOf("-");if(H!==-1){let Y=f(j.slice(0,H)),A=f(j.slice(H+1));if(Y>A)throw Error(`Invalid cron range "${j}"`);for(let V=Y;V<=A;V+=1)W.add(V);continue}W.add(f(j))}return[...W].sort((j,X)=>j-X)}var Fz=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],RY=["sun","mon","tue","wed","thu","fri","sat"];function D4($,J,Z){let Q=$[J];if(typeof Q!=="string")throw Error(`Invalid cron pattern "${Z}": missing field ${J+1}`);return Q}function fW($,J){let Z=$[0];if(typeof Z!=="number")throw Error(`Invalid cron pattern: no values parsed for ${J}`);return Z}function jW($){let J=$.trim().split(/\s+/);if(J.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${J.length}`);return{minutes:R4(D4(J,0,$),0,59),hours:R4(D4(J,1,$),0,23),daysOfMonth:R4(D4(J,2,$),1,31),months:R4(D4(J,3,$),1,12,Fz),daysOfWeek:R4(D4(J,4,$),0,6,RY)}}function XW($){jW($)}function DY($,J,Z=Date.now()){$2($,Z,J)}var UY=new Map,Uz=new Map(RY.map(($,J)=>[$,J]));function PY($){let J=$?.trim();return J?J:void 0}function LY($){let J=UY.get($);if(J)return J;let Z=new Intl.DateTimeFormat("en-US",{timeZone:$,calendar:"gregory",numberingSystem:"latn",year:"numeric",month:"2-digit",day:"2-digit",weekday:"short",hour:"2-digit",minute:"2-digit",hourCycle:"h23"});return UY.set($,Z),Z}function Rz($){let J=PY($);if(!J)return;LY(J).format(new Date)}function Dz($,J){let Z=LY(J).formatToParts(new Date($)),Q=new Map(Z.map((j)=>[j.type,j.value])),W=Q.get("weekday")?.toLowerCase().slice(0,3)??"",f=Uz.get(W);if(f===void 0)throw Error(`Unable to resolve weekday for timezone "${J}"`);return{month:Number(Q.get("month")),dayOfMonth:Number(Q.get("day")),dayOfWeek:f,hour:Number(Q.get("hour")),minute:Number(Q.get("minute"))}}function Pz($){let J=new Date($);return{month:J.getMonth()+1,dayOfMonth:J.getDate(),dayOfWeek:J.getDay(),hour:J.getHours(),minute:J.getMinutes()}}function Lz($,J){return $.months.includes(J.month)&&$.daysOfMonth.includes(J.dayOfMonth)&&$.daysOfWeek.includes(J.dayOfWeek)&&$.hours.includes(J.hour)&&$.minutes.includes(J.minute)}function zz($,J,Z){let Q=jW($),W=new Date(J);W.setSeconds(0,0);let f=W.getTime()+60000,j=new Date(J);j.setFullYear(j.getFullYear()+4);let X=j.getTime();while(f<=X){if(Lz(Q,Dz(f,Z)))return f;f+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Z}"`)}function $2($,J,Z){let Q=PY(Z);if(Q)return Rz(Q),zz($,J,Q);let W=jW($),f=new Date(J);f.setSeconds(0,0),f=new Date(f.getTime()+60000);let j=new Date(J);j.setFullYear(j.getFullYear()+4);while(f<=j){let{month:X,dayOfMonth:H,dayOfWeek:Y,hour:A,minute:V}=Pz(f.getTime());if(!W.months.includes(X)){let B=W.months.find((G)=>G>X)??fW(W.months,"months"),K=B<=X?1:0;f=new Date(f.getFullYear()+K,B-1,1,0,0,0,0);continue}if(!W.daysOfMonth.includes(H)||!W.daysOfWeek.includes(Y)){f=new Date(f.getFullYear(),f.getMonth(),H+1,0,0,0,0);continue}if(!W.hours.includes(A)){let B=W.hours.find((G)=>G>A)??fW(W.hours,"hours"),K=B<=A?1:0;f=new Date(f.getFullYear(),f.getMonth(),f.getDate()+K,B,0,0,0);continue}if(!W.minutes.includes(V)){let B=W.minutes.find((G)=>G>V)??fW(W.minutes,"minutes"),K=B<=V?1:0;f=new Date(f.getFullYear(),f.getMonth(),f.getDate(),f.getHours()+K,B,0,0);continue}return f.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{createHash as Oz}from"node:crypto";import _z from"yaml";function Tz($){let J=$.replace(/\\/g,"/");if(J.startsWith("events/")&&J.endsWith(".event.md"))return"event";if(J.endsWith(".cron.md"))return"schedule";return"one_off"}function Nz($){let J=$.replace(/\r\n/g,`
238
- `);if(!J.startsWith(`---
239
- `))return{frontmatter:void 0,body:$};let Z=J.slice(4),Q=Z.indexOf(`
240
- ---`);if(Q===-1)return{frontmatter:void 0,body:$};let W=Z.slice(0,Q),f=Z.slice(Q+4);if(f.startsWith(`
241
- `))f=f.slice(1);return{frontmatter:W,body:f}}function g0($){if(typeof $!=="string")return;let J=$.trim();return J.length>0?J:void 0}function Mz($){if(!Array.isArray($))return;let J=$.map((Z)=>typeof Z==="string"?Z.trim():"").filter((Z)=>Z.length>0);return J.length>0?J:void 0}function AW($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function qz($){let J=AW($);if(!J)return;let Z=g0(J.providerId),Q=g0(J.modelId);if(Z===void 0&&Q===void 0)return;return{providerId:Z,modelId:Q}}function yz($){if(typeof $!=="string")return;let J=$.trim().toLowerCase();if(J==="act"||J==="plan"||J==="yolo")return J;return}function OY($,J={}){let Z=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!Z)return;let Q=[...new Set(Z.map((W)=>typeof W==="string"?W.trim():"").filter((W)=>W.length>0))];if(Array.isArray($)&&J.preserveEmptyArray)return Q;return Q.length>0?Q:void 0}var wz=new Set(c$);function Sz($){let J=OY($,{preserveEmptyArray:!0});if(!J)return;let Z=J.filter((Q)=>!wz.has(Q));if(Z.length>0)throw Error(`unknown tool(s): ${Z.join(", ")}`);return J}var Cz=new Set(["rules","skills","plugins"]);function Ez($){let J=OY($,{preserveEmptyArray:!0});if(!J)return;let Z=J.filter((Q)=>!Cz.has(Q));if(Z.length>0)throw Error(`unknown extension(s): ${Z.join(", ")}`);return J}function HW($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function YW($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function VW($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Z)=>VW(Z)).join(",")}]`;let J=Object.entries($).filter(([,Z])=>Z!==void 0);return J.sort(([Z],[Q])=>Z<Q?-1:Z>Q?1:0),`{${J.map(([Z,Q])=>`${JSON.stringify(Z)}:${VW(Q)}`).join(",")}}`}function _Y($,J){let Z=Oz("sha256");return Z.update(VW($)),Z.update(`
242
- `),Z.update(J),Z.digest("hex")}function hz($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var bz=["schedule","timezone"],kz=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],Iz=["cwd"];function zY($,J,Z,Q,W){return{externalId:$,relativePath:$,triggerKind:J,body:Z,contentHash:_Y(Q,Z),error:W}}function j$($,J,Z,Q,W,f){return{externalId:$,relativePath:J,triggerKind:Z,body:Q,contentHash:W,error:f}}function TY($){let J=$.relativePath.replace(/\\/g,"/"),Z=Tz(J),{frontmatter:Q,body:W}=Nz($.raw),f={};if(Q!==void 0&&Q.trim().length>0)try{let R=_z.parse(Q);if(R&&typeof R==="object"&&!Array.isArray(R))f=R;else if(R!==null&&R!==void 0)return zY(J,Z,W,{},"frontmatter must be a YAML mapping")}catch(R){return zY(J,Z,W,{},R instanceof Error?`failed to parse frontmatter: ${R.message}`:"failed to parse frontmatter")}let j=_Y(f,W),X=g0(f.id),H=X??J;if(Z!=="schedule"){for(let R of bz)if(f[R]!==void 0)return j$(H,J,Z,W,j,`field "${R}" is only allowed on *.cron.md specs`)}for(let R of Iz)if(f[R]!==void 0)return j$(H,J,Z,W,j,`field "${R}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Z!=="event"){for(let R of kz)if(f[R]!==void 0)return j$(H,J,Z,W,j,`field "${R}" is only allowed on .event.md specs`)}let Y=g0(f.prompt),A=W.trim(),V=Y??(A.length>0?A:void 0);if(!V)return j$(H,J,Z,W,j,"prompt is required (frontmatter `prompt` or markdown body)");let B=g0(f.workspaceRoot);if(!B)return j$(H,J,Z,W,j,"workspaceRoot is required");let K,G;try{K=Sz(f.tools),G=Ez(f.extensions)}catch(R){return j$(H,J,Z,W,j,R instanceof Error?R.message:String(R))}let D=yz(f.mode);if(f.mode!==void 0&&D===void 0)return j$(H,J,Z,W,j,"mode must be one of: act, plan, yolo");let F={id:X,title:g0(f.title)??X??hz(J),prompt:V,workspaceRoot:B,mode:D??"yolo",systemPrompt:g0(f.systemPrompt),modelSelection:qz(f.modelSelection),maxIterations:HW(f.maxIterations),timeoutSeconds:HW(f.timeoutSeconds),tools:K,notesDirectory:g0(f.notesDirectory),extensions:G,source:g0(f.source)??"user",tags:Mz(f.tags),enabled:typeof f.enabled==="boolean"?f.enabled:!0,metadata:AW(f.metadata)},U;if(Z==="schedule"){let R=g0(f.schedule);if(!R)return j$(H,J,Z,W,j,"schedule is required for *.cron.md specs");let O=g0(f.timezone);try{DY(R,O)}catch(P){return j$(H,J,Z,W,j,P instanceof Error?P.message:String(P))}U={...F,triggerKind:"schedule",schedule:R,timezone:O}}else if(Z==="event"){let R=g0(f.event);if(!R)return j$(H,J,Z,W,j,"event is required for .event.md specs");U={...F,triggerKind:"event",event:R,filters:AW(f.filters),debounceSeconds:YW(f.debounceSeconds),dedupeWindowSeconds:YW(f.dedupeWindowSeconds),cooldownSeconds:YW(f.cooldownSeconds),maxParallel:HW(f.maxParallel)}}else U={...F,triggerKind:"one_off"};return{externalId:H,relativePath:J,triggerKind:Z,body:W,contentHash:j,spec:U}}function dz($,J){return uz($,J).replace(/\\/g,"/")}function lz($){if(!xz($))return[];let J=[],Z=[$];while(Z.length>0){let Q=Z.pop();if(!Q)continue;let W;try{W=mz(Q,{withFileTypes:!0})}catch{continue}for(let f of W){let j=`${Q}/${f.name}`;if(f.isDirectory()){if(f.name==="reports")continue;Z.push(j);continue}if(!f.isFile())continue;if(!f.name.endsWith(".md"))continue;J.push(j)}}return J}class BW{store;cronDir;constructor($){this.store=$.store,this.cronDir=cz($.specs??($.workspaceRoot?{scope:"workspace",workspaceRoot:$.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let $={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},J=lz(this.cronDir),Z=new Set;for(let W of J){let f=dz(this.cronDir,W);Z.add(f),$.scanned+=1;let j=await this.reconcileFile(f,W);if(j){if($.changes.push(j),$.upserted+=1,j.parse.error)$.invalidParses+=1}}let Q=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let W of Q)if(!Z.has(W.sourcePath))this.handleFileDeleted(W),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,J){let Z=this.store.getSpecBySourcePath($),Q,W;try{Q=gz(J,"utf8"),W=vz(J).mtimeMs}catch{return}let j=TY({relativePath:$,raw:Q}),X=this.store.upsertSpec({externalId:j.externalId,sourcePath:$,triggerKind:j.triggerKind,sourceMtimeMs:W,sourceHash:j.contentHash,parseStatus:j.error?"invalid":"valid",parseError:j.error,spec:j.spec});if(!j.error&&j.triggerKind==="schedule"&&X.record.enabled)this.applyScheduleNextRunAt(X.record,{forceReset:!Z||Z.removed||!Z.enabled||Z.scheduleExpr!==X.record.scheduleExpr||Z.timezone!==X.record.timezone});return{relativePath:$,result:X,parse:j}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let J of $)this.applyScheduleNextRunAt(J,{forceReset:!1})}applyScheduleNextRunAt($,J){if(!$.scheduleExpr)return;if(!J.forceReset&&$.nextRunAt)return;try{let Z=Date.now(),Q=$.lastRunAt?Math.max(Z,new Date($.lastRunAt).getTime()):Z,W=$2($.scheduleExpr,Q,$.timezone),f=new Date(W).toISOString();if($.nextRunAt!==f)this.store.updateSpecNextRunAt($.specId,f)}catch{}}}import{existsSync as pz,mkdirSync as rz,watch as iz}from"node:fs";import{relative as nz,resolve as az}from"node:path";var tz=250;class KW{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??tz),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{rz($,{recursive:!0}),this.watcher=iz($,{recursive:!0},(J,Z)=>{if(!Z)return;let Q=String(Z).replace(/\\/g,"/");if(!Q.endsWith(".md"))return;if(Q.startsWith("reports/"))return;this.scheduleReconcile(Q)}),this.watcher.on("error",this.onError)}catch(J){this.onError(J)}}stop(){for(let $ of this.pending.values())clearTimeout($);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile($){let J=this.pending.get($);if(J)clearTimeout(J);let Z=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,Z)}async reconcileNow($){try{let J=az(this.reconciler.getCronDir(),$);if(!pz(J)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Z=nz(this.reconciler.getCronDir(),J).replace(/\\/g,"/");await this.reconciler.reconcileFile(Z,J),await this.onReconciled()}catch(J){this.onError(J)}}}import{randomUUID as P4}from"node:crypto";import{asOptionalString as I,asString as t,loadSqliteDb as oz,nowIso as D0}from"@cline/shared/db";import{resolveCronDbPath as ez}from"@cline/shared/storage";var sz=[`CREATE TABLE IF NOT EXISTS cron_specs (
237
+ ${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let f=Math.max(1000,Math.floor(this.claimLeaseMs/2)),J=setInterval(()=>{let Z=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,Z))clearInterval(J)},f);return()=>clearInterval(J)}async buildSystemPrompt($,f,J,Z){let Q=k_($.notesDirectory),W=B2(void 0,Q),j=await a8(f),X=S_({ide:"Cline Cron",workspaceRoot:f,workspaceName:w_(f),metadata:j,rules:$.systemPrompt?void 0:W,mode:J,providerId:Z,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?B2(X,W)??X:X}async buildStartRequest($){let f=($.workspaceRoot??"").trim(),J=($.providerId??"").trim(),Z=($.modelId??"").trim(),Q=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,W=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():f;if(!f)throw Error("cron spec requires workspaceRoot");let j=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:f,cwd:W,provider:J,model:Z,mode:j,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,f,j,J),maxIterations:$.maxIterations,enableTools:Q?.enableTools??!0,enableSpawn:Q?.enableSpawn??!0,enableTeams:Q?.enableTeams??!0,autoApproveTools:Q?.autoApproveTools??!0,toolPolicies:b_($,j),configExtensions:EY.filter((X)=>E_($,X))}}}import{existsSync as Wz,readdirSync as jz,readFileSync as Xz,statSync as Hz}from"node:fs";import{relative as Yz}from"node:path";import{resolveCronSpecsDir as Az}from"@cline/shared/storage";function yJ($,f,J,Z){let Q=new Set;function W(j){let X=j.toLowerCase();if(Z){let Y=Z.indexOf(X);if(Y!==-1)return Y+f}let H=Number(j);if(!Number.isInteger(H)||H<f||H>J)throw Error(`Invalid cron value "${j}" for range [${f}-${J}]`);return H}for(let j of $.split(",")){if(j==="*"){for(let Y=f;Y<=J;Y+=1)Q.add(Y);continue}let X=j.indexOf("/");if(X!==-1){let Y=j.slice(0,X),A=Number(j.slice(X+1));if(!Number.isInteger(A)||A<1)throw Error(`Invalid step "${j.slice(X+1)}"`);let V=f,B=J;if(Y!=="*"){let K=Y.indexOf("-");if(K!==-1)V=W(Y.slice(0,K)),B=W(Y.slice(K+1));else V=W(Y)}if(V>B)throw Error(`Invalid cron range "${Y}"`);for(let K=V;K<=B;K+=A)Q.add(K);continue}let H=j.indexOf("-");if(H!==-1){let Y=W(j.slice(0,H)),A=W(j.slice(H+1));if(Y>A)throw Error(`Invalid cron range "${j}"`);for(let V=Y;V<=A;V+=1)Q.add(V);continue}Q.add(W(j))}return[...Q].sort((j,X)=>j-X)}var x_=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],kY=["sun","mon","tue","wed","thu","fri","sat"];function qJ($,f,J){let Z=$[f];if(typeof Z!=="string")throw Error(`Invalid cron pattern "${J}": missing field ${f+1}`);return Z}function FQ($,f){let J=$[0];if(typeof J!=="number")throw Error(`Invalid cron pattern: no values parsed for ${f}`);return J}function UQ($){let f=$.trim().split(/\s+/);if(f.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${f.length}`);return{minutes:yJ(qJ(f,0,$),0,59),hours:yJ(qJ(f,1,$),0,23),daysOfMonth:yJ(qJ(f,2,$),1,31),months:yJ(qJ(f,3,$),1,12,x_),daysOfWeek:yJ(qJ(f,4,$),0,6,kY)}}function RQ($){UQ($)}function IY($,f,J=Date.now()){Hf($,J,f)}var bY=new Map,m_=new Map(kY.map(($,f)=>[$,f]));function xY($){let f=$?.trim();return f?f:void 0}function mY($){let f=bY.get($);if(f)return f;let J=new Intl.DateTimeFormat("en-US",{timeZone:$,calendar:"gregory",numberingSystem:"latn",year:"numeric",month:"2-digit",day:"2-digit",weekday:"short",hour:"2-digit",minute:"2-digit",hourCycle:"h23"});return bY.set($,J),J}function g_($){let f=xY($);if(!f)return;mY(f).format(new Date)}function v_($,f){let J=mY(f).formatToParts(new Date($)),Z=new Map(J.map((j)=>[j.type,j.value])),Q=Z.get("weekday")?.toLowerCase().slice(0,3)??"",W=m_.get(Q);if(W===void 0)throw Error(`Unable to resolve weekday for timezone "${f}"`);return{month:Number(Z.get("month")),dayOfMonth:Number(Z.get("day")),dayOfWeek:W,hour:Number(Z.get("hour")),minute:Number(Z.get("minute"))}}function u_($){let f=new Date($);return{month:f.getMonth()+1,dayOfMonth:f.getDate(),dayOfWeek:f.getDay(),hour:f.getHours(),minute:f.getMinutes()}}function c_($,f){return $.months.includes(f.month)&&$.daysOfMonth.includes(f.dayOfMonth)&&$.daysOfWeek.includes(f.dayOfWeek)&&$.hours.includes(f.hour)&&$.minutes.includes(f.minute)}function d_($,f,J){let Z=UQ($),Q=new Date(f);Q.setSeconds(0,0);let W=Q.getTime()+60000,j=new Date(f);j.setFullYear(j.getFullYear()+4);let X=j.getTime();while(W<=X){if(c_(Z,v_(W,J)))return W;W+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${J}"`)}function Hf($,f,J){let Z=xY(J);if(Z)return g_(Z),d_($,f,Z);let Q=UQ($),W=new Date(f);W.setSeconds(0,0),W=new Date(W.getTime()+60000);let j=new Date(f);j.setFullYear(j.getFullYear()+4);while(W<=j){let{month:X,dayOfMonth:H,dayOfWeek:Y,hour:A,minute:V}=u_(W.getTime());if(!Q.months.includes(X)){let B=Q.months.find((G)=>G>X)??FQ(Q.months,"months"),K=B<=X?1:0;W=new Date(W.getFullYear()+K,B-1,1,0,0,0,0);continue}if(!Q.daysOfMonth.includes(H)||!Q.daysOfWeek.includes(Y)){W=new Date(W.getFullYear(),W.getMonth(),H+1,0,0,0,0);continue}if(!Q.hours.includes(A)){let B=Q.hours.find((G)=>G>A)??FQ(Q.hours,"hours"),K=B<=A?1:0;W=new Date(W.getFullYear(),W.getMonth(),W.getDate()+K,B,0,0,0);continue}if(!Q.minutes.includes(V)){let B=Q.minutes.find((G)=>G>V)??FQ(Q.minutes,"minutes"),K=B<=V?1:0;W=new Date(W.getFullYear(),W.getMonth(),W.getDate(),W.getHours()+K,B,0,0);continue}return W.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{createHash as l_}from"node:crypto";import p_ from"yaml";function r_($){let f=$.replace(/\\/g,"/");if(f.startsWith("events/")&&f.endsWith(".event.md"))return"event";if(f.endsWith(".cron.md"))return"schedule";return"one_off"}function i_($){let f=$.replace(/\r\n/g,`
238
+ `);if(!f.startsWith(`---
239
+ `))return{frontmatter:void 0,body:$};let J=f.slice(4),Z=J.indexOf(`
240
+ ---`);if(Z===-1)return{frontmatter:void 0,body:$};let Q=J.slice(0,Z),W=J.slice(Z+4);if(W.startsWith(`
241
+ `))W=W.slice(1);return{frontmatter:Q,body:W}}function v0($){if(typeof $!=="string")return;let f=$.trim();return f.length>0?f:void 0}function n_($){if(!Array.isArray($))return;let f=$.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0);return f.length>0?f:void 0}function _Q($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function a_($){let f=_Q($);if(!f)return;let J=v0(f.providerId),Z=v0(f.modelId);if(J===void 0&&Z===void 0)return;return{providerId:J,modelId:Z}}function t_($){if(typeof $!=="string")return;let f=$.trim().toLowerCase();if(f==="act"||f==="plan"||f==="yolo")return f;return}function vY($,f={}){let J=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!J)return;let Z=[...new Set(J.map((Q)=>typeof Q==="string"?Q.trim():"").filter((Q)=>Q.length>0))];if(Array.isArray($)&&f.preserveEmptyArray)return Z;return Z.length>0?Z:void 0}var s_=new Set(i$);function o_($){let f=vY($,{preserveEmptyArray:!0});if(!f)return;let J=f.filter((Z)=>!s_.has(Z));if(J.length>0)throw Error(`unknown tool(s): ${J.join(", ")}`);return f}var e_=new Set(["rules","skills","plugins"]);function $z($){let f=vY($,{preserveEmptyArray:!0});if(!f)return;let J=f.filter((Z)=>!e_.has(Z));if(J.length>0)throw Error(`unknown extension(s): ${J.join(", ")}`);return f}function DQ($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function LQ($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function zQ($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((J)=>zQ(J)).join(",")}]`;let f=Object.entries($).filter(([,J])=>J!==void 0);return f.sort(([J],[Z])=>J<Z?-1:J>Z?1:0),`{${f.map(([J,Z])=>`${JSON.stringify(J)}:${zQ(Z)}`).join(",")}}`}function uY($,f){let J=l_("sha256");return J.update(zQ($)),J.update(`
242
+ `),J.update(f),J.digest("hex")}function fz($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var Jz=["schedule","timezone"],Zz=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],Qz=["cwd"];function gY($,f,J,Z,Q){return{externalId:$,relativePath:$,triggerKind:f,body:J,contentHash:uY(Z,J),error:Q}}function Y$($,f,J,Z,Q,W){return{externalId:$,relativePath:f,triggerKind:J,body:Z,contentHash:Q,error:W}}function cY($){let f=$.relativePath.replace(/\\/g,"/"),J=r_(f),{frontmatter:Z,body:Q}=i_($.raw),W={};if(Z!==void 0&&Z.trim().length>0)try{let U=p_.parse(Z);if(U&&typeof U==="object"&&!Array.isArray(U))W=U;else if(U!==null&&U!==void 0)return gY(f,J,Q,{},"frontmatter must be a YAML mapping")}catch(U){return gY(f,J,Q,{},U instanceof Error?`failed to parse frontmatter: ${U.message}`:"failed to parse frontmatter")}let j=uY(W,Q),X=v0(W.id),H=X??f;if(J!=="schedule"){for(let U of Jz)if(W[U]!==void 0)return Y$(H,f,J,Q,j,`field "${U}" is only allowed on *.cron.md specs`)}for(let U of Qz)if(W[U]!==void 0)return Y$(H,f,J,Q,j,`field "${U}" is no longer supported; cron specs use workspaceRoot as cwd`);if(J!=="event"){for(let U of Zz)if(W[U]!==void 0)return Y$(H,f,J,Q,j,`field "${U}" is only allowed on .event.md specs`)}let Y=v0(W.prompt),A=Q.trim(),V=Y??(A.length>0?A:void 0);if(!V)return Y$(H,f,J,Q,j,"prompt is required (frontmatter `prompt` or markdown body)");let B=v0(W.workspaceRoot);if(!B)return Y$(H,f,J,Q,j,"workspaceRoot is required");let K,G;try{K=o_(W.tools),G=$z(W.extensions)}catch(U){return Y$(H,f,J,Q,j,U instanceof Error?U.message:String(U))}let R=t_(W.mode);if(W.mode!==void 0&&R===void 0)return Y$(H,f,J,Q,j,"mode must be one of: act, plan, yolo");let P={id:X,title:v0(W.title)??X??fz(f),prompt:V,workspaceRoot:B,mode:R??"yolo",systemPrompt:v0(W.systemPrompt),modelSelection:a_(W.modelSelection),maxIterations:DQ(W.maxIterations),timeoutSeconds:DQ(W.timeoutSeconds),tools:K,notesDirectory:v0(W.notesDirectory),extensions:G,source:v0(W.source)??"user",tags:n_(W.tags),enabled:typeof W.enabled==="boolean"?W.enabled:!0,metadata:_Q(W.metadata)},F;if(J==="schedule"){let U=v0(W.schedule);if(!U)return Y$(H,f,J,Q,j,"schedule is required for *.cron.md specs");let z=v0(W.timezone);try{IY(U,z)}catch(D){return Y$(H,f,J,Q,j,D instanceof Error?D.message:String(D))}F={...P,triggerKind:"schedule",schedule:U,timezone:z}}else if(J==="event"){let U=v0(W.event);if(!U)return Y$(H,f,J,Q,j,"event is required for .event.md specs");F={...P,triggerKind:"event",event:U,filters:_Q(W.filters),debounceSeconds:LQ(W.debounceSeconds),dedupeWindowSeconds:LQ(W.dedupeWindowSeconds),cooldownSeconds:LQ(W.cooldownSeconds),maxParallel:DQ(W.maxParallel)}}else F={...P,triggerKind:"one_off"};return{externalId:H,relativePath:f,triggerKind:J,body:Q,contentHash:j,spec:F}}function Vz($,f){return Yz($,f).replace(/\\/g,"/")}function Bz($){if(!Wz($))return[];let f=[],J=[$];while(J.length>0){let Z=J.pop();if(!Z)continue;let Q;try{Q=jz(Z,{withFileTypes:!0})}catch{continue}for(let W of Q){let j=`${Z}/${W.name}`;if(W.isDirectory()){if(W.name==="reports")continue;J.push(j);continue}if(!W.isFile())continue;if(!W.name.endsWith(".md"))continue;f.push(j)}}return f}class OQ{store;cronDir;constructor($){this.store=$.store,this.cronDir=Az($.specs??($.workspaceRoot?{scope:"workspace",workspaceRoot:$.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let $={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},f=Bz(this.cronDir),J=new Set;for(let Q of f){let W=Vz(this.cronDir,Q);J.add(W),$.scanned+=1;let j=await this.reconcileFile(W,Q);if(j){if($.changes.push(j),$.upserted+=1,j.parse.error)$.invalidParses+=1}}let Z=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let Q of Z)if(!J.has(Q.sourcePath))this.handleFileDeleted(Q),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,f){let J=this.store.getSpecBySourcePath($),Z,Q;try{Z=Xz(f,"utf8"),Q=Hz(f).mtimeMs}catch{return}let j=cY({relativePath:$,raw:Z}),X=this.store.upsertSpec({externalId:j.externalId,sourcePath:$,triggerKind:j.triggerKind,sourceMtimeMs:Q,sourceHash:j.contentHash,parseStatus:j.error?"invalid":"valid",parseError:j.error,spec:j.spec});if(!j.error&&j.triggerKind==="schedule"&&X.record.enabled)this.applyScheduleNextRunAt(X.record,{forceReset:!J||J.removed||!J.enabled||J.scheduleExpr!==X.record.scheduleExpr||J.timezone!==X.record.timezone});return{relativePath:$,result:X,parse:j}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let f of $)this.applyScheduleNextRunAt(f,{forceReset:!1})}applyScheduleNextRunAt($,f){if(!$.scheduleExpr)return;if(!f.forceReset&&$.nextRunAt)return;try{let J=Date.now(),Z=$.lastRunAt?Math.max(J,new Date($.lastRunAt).getTime()):J,Q=Hf($.scheduleExpr,Z,$.timezone),W=new Date(Q).toISOString();if($.nextRunAt!==W)this.store.updateSpecNextRunAt($.specId,W)}catch{}}}import{existsSync as Kz,mkdirSync as Gz,watch as Pz}from"node:fs";import{relative as Fz,resolve as Uz}from"node:path";var Rz=250;class TQ{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??Rz),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{Gz($,{recursive:!0}),this.watcher=Pz($,{recursive:!0},(f,J)=>{if(!J)return;let Z=String(J).replace(/\\/g,"/");if(!Z.endsWith(".md"))return;if(Z.startsWith("reports/"))return;this.scheduleReconcile(Z)}),this.watcher.on("error",this.onError)}catch(f){this.onError(f)}}stop(){for(let $ of this.pending.values())clearTimeout($);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile($){let f=this.pending.get($);if(f)clearTimeout(f);let J=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,J)}async reconcileNow($){try{let f=Uz(this.reconciler.getCronDir(),$);if(!Kz(f)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let J=Fz(this.reconciler.getCronDir(),f).replace(/\\/g,"/");await this.reconciler.reconcileFile(J,f),await this.onReconciled()}catch(f){this.onError(f)}}}import{randomUUID as wJ}from"node:crypto";import{asOptionalString as I,asString as t,loadSqliteDb as Lz,nowIso as R0}from"@cline/shared/db";import{resolveCronDbPath as _z}from"@cline/shared/storage";var Dz=[`CREATE TABLE IF NOT EXISTS cron_specs (
243
243
  spec_id TEXT PRIMARY KEY,
244
244
  external_id TEXT NOT NULL,
245
245
  source_path TEXT NOT NULL UNIQUE,
@@ -330,17 +330,17 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
330
330
  ON cron_specs(trigger_kind, enabled, next_run_at);`,`CREATE INDEX IF NOT EXISTS cron_specs_event_match_idx
331
331
  ON cron_specs(trigger_kind, event_type, enabled);`,`CREATE INDEX IF NOT EXISTS cron_specs_parse_status_idx
332
332
  ON cron_specs(parse_status, updated_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_source_path_idx
333
- ON cron_specs(source_path);`];function NY($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let J of sz)$.exec(J)}function o5($){if(!$)return;try{let J=JSON.parse($);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return}function GW($,J={}){if(!$)return;try{let Z=JSON.parse($);if(!Array.isArray(Z))return;let Q=Z.map((W)=>typeof W==="string"?W.trim():"").filter((W)=>W.length>0);if(J.preserveEmpty)return Q;return Q.length>0?Q:void 0}catch{return}}function J2($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function H1($){return{specId:t($.spec_id),externalId:t($.external_id),sourcePath:t($.source_path),triggerKind:t($.trigger_kind),sourceMtimeMs:J2($.source_mtime_ms),sourceHash:I($.source_hash),parseStatus:t($.parse_status)==="invalid"?"invalid":"valid",parseError:I($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:t($.title),prompt:I($.prompt),workspaceRoot:I($.workspace_root),scheduleExpr:I($.schedule_expr),timezone:I($.timezone),eventType:I($.event_type),filters:o5(I($.filters_json)),debounceSeconds:J2($.debounce_seconds),dedupeWindowSeconds:J2($.dedupe_window_seconds),cooldownSeconds:J2($.cooldown_seconds),mode:I($.mode),systemPrompt:I($.system_prompt),providerId:I($.provider_id),modelId:I($.model_id),maxIterations:J2($.max_iterations),timeoutSeconds:J2($.timeout_seconds),maxParallel:J2($.max_parallel),tools:GW(I($.tools_json),{preserveEmpty:!0}),notesDirectory:I($.notes_directory),extensions:GW(I($.extensions_json),{preserveEmpty:!0}),source:I($.source),tags:GW(I($.tags_json)),metadata:o5(I($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:I($.last_materialized_run_id),lastRunAt:I($.last_run_at),nextRunAt:I($.next_run_at),createdAt:t($.created_at),updatedAt:t($.updated_at)}}function FW($){return{runId:t($.run_id),specId:t($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:t($.trigger_kind),status:t($.status),claimToken:I($.claim_token),claimStartedAt:I($.claim_started_at),claimUntilAt:I($.claim_until_at),scheduledFor:I($.scheduled_for),triggerEventId:I($.trigger_event_id),startedAt:I($.started_at),completedAt:I($.completed_at),sessionId:I($.session_id),reportPath:I($.report_path),error:I($.error),attemptCount:Number($.attempt_count??0),createdAt:t($.created_at),updatedAt:t($.updated_at)}}function MY($){return{eventId:t($.event_id),eventType:t($.event_type),source:t($.source),subject:I($.subject),occurredAt:t($.occurred_at),receivedAt:t($.received_at),workspaceRoot:I($.workspace_root),dedupeKey:I($.dedupe_key),payload:o5(I($.payload_json)),attributes:o5(I($.attributes_json)),processingStatus:t($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:I($.error),createdAt:t($.created_at),updatedAt:t($.updated_at)}}function qY($){return $?JSON.stringify($):null}var $O=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function yY($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function JO($,J,Z,Q){for(let W of $O){let f=$[W],j=J[W];if(yY(f)!==yY(j))return!0}if(Z===!1&&Q===!0)return!0;return!1}function ZO($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function QO($){return`hub/schedules/${$}.cron.md`}function WO($){let J={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(J).length>0?J:void 0}function UW($){return{triggerKind:"schedule",title:$.name.trim(),prompt:$.prompt,workspaceRoot:$.workspaceRoot.trim(),schedule:$.cronPattern.trim(),mode:$.mode??"act",systemPrompt:$.systemPrompt,modelSelection:$.modelSelection?JSON.parse(JSON.stringify($.modelSelection)):void 0,maxIterations:typeof $.maxIterations==="number"?Math.floor($.maxIterations):void 0,timeoutSeconds:typeof $.timeoutSeconds==="number"?Math.floor($.timeoutSeconds):void 0,maxParallel:typeof $.maxParallel==="number"?Math.max(1,Math.floor($.maxParallel)):1,source:"hub-schedule",tags:$.tags?.filter((J)=>J.trim().length>0),enabled:$.enabled!==!1,metadata:WO($)}}function wY($){return JSON.stringify(UW($))}function fO($,J){let Z=$.metadata?{...$.metadata}:{},Q=J.createdBy===null?void 0:J.createdBy!==void 0?J.createdBy:typeof Z.__hubScheduleCreatedBy==="string"?Z.__hubScheduleCreatedBy:void 0,W=J.cwd!==void 0?J.cwd:typeof Z.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,f=J.runtimeOptions!==void 0?J.runtimeOptions:Z.__hubRuntimeOptions&&typeof Z.__hubRuntimeOptions==="object"&&!Array.isArray(Z.__hubRuntimeOptions)?Z.__hubRuntimeOptions:void 0;return delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions,{name:J.name??$.title,cronPattern:J.cronPattern??$.scheduleExpr??"",prompt:J.prompt??$.prompt??"",workspaceRoot:J.workspaceRoot??$.workspaceRoot??"",cwd:W,modelSelection:J.modelSelection!==void 0?J.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:J.enabled??$.enabled,mode:J.mode??($.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"),systemPrompt:J.systemPrompt===null?void 0:J.systemPrompt!==void 0?J.systemPrompt:$.systemPrompt,maxIterations:J.maxIterations===null?void 0:J.maxIterations!==void 0?J.maxIterations:$.maxIterations,timeoutSeconds:J.timeoutSeconds===null?void 0:J.timeoutSeconds!==void 0?J.timeoutSeconds:$.timeoutSeconds,maxParallel:J.maxParallel??$.maxParallel??1,createdBy:Q,tags:J.tags??$.tags,runtimeOptions:f,metadata:J.metadata!==void 0?J.metadata:Object.keys(Z).length>0?Z:void 0}}class L4{db;constructor($={}){let J=$.dbPath??ez();this.db=oz(J),NY(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let J=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return J?H1(J):void 0}getSpec($){let J=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return J?H1(J):void 0}getSpecByExternalId($){let J=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return J?H1(J):void 0}listSpecs($={}){let J=[],Z=[];if($.triggerKind)J.push("trigger_kind = ?"),Z.push($.triggerKind);if(typeof $.enabled==="boolean")J.push("enabled = ?"),Z.push($.enabled?1:0);if($.parseStatus)J.push("parse_status = ?"),Z.push($.parseStatus);if(!$.includeRemoved)J.push("removed = 0");let Q=J.length>0?`WHERE ${J.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${Q} ORDER BY created_at DESC LIMIT ?`).all(...Z,W).map((j)=>H1(j))}createHubSchedule($){let J=`sched_${P4()}`,Z=this.upsertSpec({externalId:J,sourcePath:QO(J),triggerKind:"schedule",sourceHash:wY($),parseStatus:"valid",spec:UW($)});this.initializeScheduleNextRun(Z.record.specId);let Q=this.getSpec(Z.record.specId);if(!Q)throw Error("failed to create hub schedule");return Q}getHubSchedule($){let J=this.db.prepare(`SELECT * FROM cron_specs
333
+ ON cron_specs(source_path);`];function dY($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let f of Dz)$.exec(f)}function H5($){if(!$)return;try{let f=JSON.parse($);if(f&&typeof f==="object"&&!Array.isArray(f))return f}catch{}return}function NQ($,f={}){if(!$)return;try{let J=JSON.parse($);if(!Array.isArray(J))return;let Z=J.map((Q)=>typeof Q==="string"?Q.trim():"").filter((Q)=>Q.length>0);if(f.preserveEmpty)return Z;return Z.length>0?Z:void 0}catch{return}}function Yf($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function G1($){return{specId:t($.spec_id),externalId:t($.external_id),sourcePath:t($.source_path),triggerKind:t($.trigger_kind),sourceMtimeMs:Yf($.source_mtime_ms),sourceHash:I($.source_hash),parseStatus:t($.parse_status)==="invalid"?"invalid":"valid",parseError:I($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:t($.title),prompt:I($.prompt),workspaceRoot:I($.workspace_root),scheduleExpr:I($.schedule_expr),timezone:I($.timezone),eventType:I($.event_type),filters:H5(I($.filters_json)),debounceSeconds:Yf($.debounce_seconds),dedupeWindowSeconds:Yf($.dedupe_window_seconds),cooldownSeconds:Yf($.cooldown_seconds),mode:I($.mode),systemPrompt:I($.system_prompt),providerId:I($.provider_id),modelId:I($.model_id),maxIterations:Yf($.max_iterations),timeoutSeconds:Yf($.timeout_seconds),maxParallel:Yf($.max_parallel),tools:NQ(I($.tools_json),{preserveEmpty:!0}),notesDirectory:I($.notes_directory),extensions:NQ(I($.extensions_json),{preserveEmpty:!0}),source:I($.source),tags:NQ(I($.tags_json)),metadata:H5(I($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:I($.last_materialized_run_id),lastRunAt:I($.last_run_at),nextRunAt:I($.next_run_at),createdAt:t($.created_at),updatedAt:t($.updated_at)}}function MQ($){return{runId:t($.run_id),specId:t($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:t($.trigger_kind),status:t($.status),claimToken:I($.claim_token),claimStartedAt:I($.claim_started_at),claimUntilAt:I($.claim_until_at),scheduledFor:I($.scheduled_for),triggerEventId:I($.trigger_event_id),startedAt:I($.started_at),completedAt:I($.completed_at),sessionId:I($.session_id),reportPath:I($.report_path),error:I($.error),attemptCount:Number($.attempt_count??0),createdAt:t($.created_at),updatedAt:t($.updated_at)}}function lY($){return{eventId:t($.event_id),eventType:t($.event_type),source:t($.source),subject:I($.subject),occurredAt:t($.occurred_at),receivedAt:t($.received_at),workspaceRoot:I($.workspace_root),dedupeKey:I($.dedupe_key),payload:H5(I($.payload_json)),attributes:H5(I($.attributes_json)),processingStatus:t($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:I($.error),createdAt:t($.created_at),updatedAt:t($.updated_at)}}function pY($){return $?JSON.stringify($):null}var zz=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function rY($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function Oz($,f,J,Z){for(let Q of zz){let W=$[Q],j=f[Q];if(rY(W)!==rY(j))return!0}if(J===!1&&Z===!0)return!0;return!1}function Tz($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function Nz($){return`hub/schedules/${$}.cron.md`}function Mz($){let f={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(f).length>0?f:void 0}function yQ($){return{triggerKind:"schedule",title:$.name.trim(),prompt:$.prompt,workspaceRoot:$.workspaceRoot.trim(),schedule:$.cronPattern.trim(),mode:$.mode??"act",systemPrompt:$.systemPrompt,modelSelection:$.modelSelection?JSON.parse(JSON.stringify($.modelSelection)):void 0,maxIterations:typeof $.maxIterations==="number"?Math.floor($.maxIterations):void 0,timeoutSeconds:typeof $.timeoutSeconds==="number"?Math.floor($.timeoutSeconds):void 0,maxParallel:typeof $.maxParallel==="number"?Math.max(1,Math.floor($.maxParallel)):1,source:"hub-schedule",tags:$.tags?.filter((f)=>f.trim().length>0),enabled:$.enabled!==!1,metadata:Mz($)}}function iY($){return JSON.stringify(yQ($))}function yz($,f){let J=$.metadata?{...$.metadata}:{},Z=f.createdBy===null?void 0:f.createdBy!==void 0?f.createdBy:typeof J.__hubScheduleCreatedBy==="string"?J.__hubScheduleCreatedBy:void 0,Q=f.cwd!==void 0?f.cwd:typeof J.__hubScheduleCwd==="string"?J.__hubScheduleCwd:void 0,W=f.runtimeOptions!==void 0?f.runtimeOptions:J.__hubRuntimeOptions&&typeof J.__hubRuntimeOptions==="object"&&!Array.isArray(J.__hubRuntimeOptions)?J.__hubRuntimeOptions:void 0;return delete J.__hubScheduleCreatedBy,delete J.__hubScheduleCwd,delete J.__hubRuntimeOptions,{name:f.name??$.title,cronPattern:f.cronPattern??$.scheduleExpr??"",prompt:f.prompt??$.prompt??"",workspaceRoot:f.workspaceRoot??$.workspaceRoot??"",cwd:Q,modelSelection:f.modelSelection!==void 0?f.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:f.enabled??$.enabled,mode:f.mode??($.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"),systemPrompt:f.systemPrompt===null?void 0:f.systemPrompt!==void 0?f.systemPrompt:$.systemPrompt,maxIterations:f.maxIterations===null?void 0:f.maxIterations!==void 0?f.maxIterations:$.maxIterations,timeoutSeconds:f.timeoutSeconds===null?void 0:f.timeoutSeconds!==void 0?f.timeoutSeconds:$.timeoutSeconds,maxParallel:f.maxParallel??$.maxParallel??1,createdBy:Z,tags:f.tags??$.tags,runtimeOptions:W,metadata:f.metadata!==void 0?f.metadata:Object.keys(J).length>0?J:void 0}}class SJ{db;constructor($={}){let f=$.dbPath??_z();this.db=Lz(f),dY(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let f=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return f?G1(f):void 0}getSpec($){let f=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return f?G1(f):void 0}getSpecByExternalId($){let f=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return f?G1(f):void 0}listSpecs($={}){let f=[],J=[];if($.triggerKind)f.push("trigger_kind = ?"),J.push($.triggerKind);if(typeof $.enabled==="boolean")f.push("enabled = ?"),J.push($.enabled?1:0);if($.parseStatus)f.push("parse_status = ?"),J.push($.parseStatus);if(!$.includeRemoved)f.push("removed = 0");let Z=f.length>0?`WHERE ${f.join(" AND ")}`:"",Q=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${Z} ORDER BY created_at DESC LIMIT ?`).all(...J,Q).map((j)=>G1(j))}createHubSchedule($){let f=`sched_${wJ()}`,J=this.upsertSpec({externalId:f,sourcePath:Nz(f),triggerKind:"schedule",sourceHash:iY($),parseStatus:"valid",spec:yQ($)});this.initializeScheduleNextRun(J.record.specId);let Z=this.getSpec(J.record.specId);if(!Z)throw Error("failed to create hub schedule");return Z}getHubSchedule($){let f=this.db.prepare(`SELECT * FROM cron_specs
334
334
  WHERE external_id = ? AND source = 'hub-schedule' AND removed = 0
335
- ORDER BY created_at ASC LIMIT 1`).get($);return J?H1(J):void 0}listHubSchedules($={}){let J=["source = 'hub-schedule'","trigger_kind = 'schedule'","removed = 0"],Z=[];if(typeof $.enabled==="boolean")J.push("enabled = ?"),Z.push($.enabled?1:0);if($.tags&&$.tags.length>0)for(let f of $.tags)J.push("tags_json LIKE ?"),Z.push(`%"${f.trim()}"%`);let Q=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_specs
336
- WHERE ${J.join(" AND ")}
337
- ORDER BY created_at DESC LIMIT ?`).all(...Z,Q).map((f)=>H1(f))}updateHubSchedule($,J){let Z=this.getHubSchedule($);if(!Z)return;let Q=fO(Z,J),W=this.upsertSpec({externalId:$,sourcePath:Z.sourcePath,triggerKind:"schedule",sourceHash:wY(Q),parseStatus:"valid",spec:UW(Q)});if(J.cronPattern!==void 0||J.enabled!==void 0)this.initializeScheduleNextRun(W.record.specId);return this.getSpec(W.record.specId)}deleteHubSchedule($){let J=this.getHubSchedule($);if(!J)return!1;return this.markSpecRemoved(J.specId),this.cancelQueuedRunsForSpec(J.specId),!0}enqueueHubScheduleRun($,J="manual"){let Z=this.getHubSchedule($);if(!Z||!Z.enabled||Z.removed||Z.parseStatus!=="valid")return;return this.enqueueRun({specId:Z.specId,specRevision:Z.revision,triggerKind:J,scheduledFor:D0()})}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
335
+ ORDER BY created_at ASC LIMIT 1`).get($);return f?G1(f):void 0}listHubSchedules($={}){let f=["source = 'hub-schedule'","trigger_kind = 'schedule'","removed = 0"],J=[];if(typeof $.enabled==="boolean")f.push("enabled = ?"),J.push($.enabled?1:0);if($.tags&&$.tags.length>0)for(let W of $.tags)f.push("tags_json LIKE ?"),J.push(`%"${W.trim()}"%`);let Z=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_specs
336
+ WHERE ${f.join(" AND ")}
337
+ ORDER BY created_at DESC LIMIT ?`).all(...J,Z).map((W)=>G1(W))}updateHubSchedule($,f){let J=this.getHubSchedule($);if(!J)return;let Z=yz(J,f),Q=this.upsertSpec({externalId:$,sourcePath:J.sourcePath,triggerKind:"schedule",sourceHash:iY(Z),parseStatus:"valid",spec:yQ(Z)});if(f.cronPattern!==void 0||f.enabled!==void 0)this.initializeScheduleNextRun(Q.record.specId);return this.getSpec(Q.record.specId)}deleteHubSchedule($){let f=this.getHubSchedule($);if(!f)return!1;return this.markSpecRemoved(f.specId),this.cancelQueuedRunsForSpec(f.specId),!0}enqueueHubScheduleRun($,f="manual"){let J=this.getHubSchedule($);if(!J||!J.enabled||J.removed||J.parseStatus!=="valid")return;return this.enqueueRun({specId:J.specId,specRevision:J.revision,triggerKind:f,scheduledFor:R0()})}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
338
338
  WHERE trigger_kind = 'event'
339
339
  AND event_type = ?
340
340
  AND enabled = 1
341
341
  AND removed = 0
342
342
  AND parse_status = 'valid'
343
- ORDER BY created_at ASC`).all($).map((Z)=>H1(Z))}upsertSpec($){let J=D0(),Z=this.getSpecBySourcePath($.sourcePath),Q=$.spec,W={title:Q?.title??Z?.title??ZO($.sourcePath),prompt:Q?.prompt,workspaceRoot:Q?.workspaceRoot,scheduleExpr:Q?.triggerKind==="schedule"?Q.schedule:void 0,timezone:Q?.triggerKind==="schedule"?Q.timezone:void 0,eventType:Q?.triggerKind==="event"?Q.event:void 0,filters:Q?.triggerKind==="event"?Q.filters:void 0,debounceSeconds:Q?.triggerKind==="event"?Q.debounceSeconds:void 0,dedupeWindowSeconds:Q?.triggerKind==="event"?Q.dedupeWindowSeconds:void 0,cooldownSeconds:Q?.triggerKind==="event"?Q.cooldownSeconds:void 0,mode:Q?.mode,systemPrompt:Q?.systemPrompt,providerId:Q?.modelSelection?.providerId,modelId:Q?.modelSelection?.modelId,maxIterations:Q?.maxIterations,timeoutSeconds:Q?.timeoutSeconds,maxParallel:Q&&"maxParallel"in Q?Q.maxParallel:void 0,tools:Q?.tools,notesDirectory:Q?.notesDirectory,extensions:Q?.extensions,source:Q?.source},f=$.parseStatus==="valid"&&(Q?.enabled??!0);if(!Z){let A=`cspec_${P4()}`;this.insertSpecRow(A,$,W,f,J);let V=this.getSpec(A);if(!V)throw Error("failed to insert cron_spec row");return{record:V,created:!0,revisionChanged:!0}}let X=Z.sourceHash!==$.sourceHash&&JO(Z,W,Z.enabled,f),H=X?Z.revision+1:Z.revision;this.updateSpecRow(Z.specId,$,W,f,H,J);let Y=this.getSpec(Z.specId);if(!Y)throw Error("failed to reload cron_spec after update");return{record:Y,created:!1,revisionChanged:X}}insertSpecRow($,J,Z,Q,W){let f=J.spec;this.db.prepare(`INSERT INTO cron_specs (
343
+ ORDER BY created_at ASC`).all($).map((J)=>G1(J))}upsertSpec($){let f=R0(),J=this.getSpecBySourcePath($.sourcePath),Z=$.spec,Q={title:Z?.title??J?.title??Tz($.sourcePath),prompt:Z?.prompt,workspaceRoot:Z?.workspaceRoot,scheduleExpr:Z?.triggerKind==="schedule"?Z.schedule:void 0,timezone:Z?.triggerKind==="schedule"?Z.timezone:void 0,eventType:Z?.triggerKind==="event"?Z.event:void 0,filters:Z?.triggerKind==="event"?Z.filters:void 0,debounceSeconds:Z?.triggerKind==="event"?Z.debounceSeconds:void 0,dedupeWindowSeconds:Z?.triggerKind==="event"?Z.dedupeWindowSeconds:void 0,cooldownSeconds:Z?.triggerKind==="event"?Z.cooldownSeconds:void 0,mode:Z?.mode,systemPrompt:Z?.systemPrompt,providerId:Z?.modelSelection?.providerId,modelId:Z?.modelSelection?.modelId,maxIterations:Z?.maxIterations,timeoutSeconds:Z?.timeoutSeconds,maxParallel:Z&&"maxParallel"in Z?Z.maxParallel:void 0,tools:Z?.tools,notesDirectory:Z?.notesDirectory,extensions:Z?.extensions,source:Z?.source},W=$.parseStatus==="valid"&&(Z?.enabled??!0);if(!J){let A=`cspec_${wJ()}`;this.insertSpecRow(A,$,Q,W,f);let V=this.getSpec(A);if(!V)throw Error("failed to insert cron_spec row");return{record:V,created:!0,revisionChanged:!0}}let X=J.sourceHash!==$.sourceHash&&Oz(J,Q,J.enabled,W),H=X?J.revision+1:J.revision;this.updateSpecRow(J.specId,$,Q,W,H,f);let Y=this.getSpec(J.specId);if(!Y)throw Error("failed to reload cron_spec after update");return{record:Y,created:!1,revisionChanged:X}}insertSpecRow($,f,J,Z,Q){let W=f.spec;this.db.prepare(`INSERT INTO cron_specs (
344
344
  spec_id, external_id, source_path, trigger_kind,
345
345
  source_mtime_ms, source_hash, parse_status, parse_error,
346
346
  enabled, removed, title, prompt, workspace_root,
@@ -351,7 +351,7 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
351
351
  tools_json, notes_directory, extensions_json, source,
352
352
  tags_json, metadata_json, revision,
353
353
  created_at, updated_at
354
- ) VALUES (${Array.from({length:36},()=>"?").join(",")})`).run($,J.externalId,J.sourcePath,J.triggerKind,J.sourceMtimeMs??null,J.sourceHash,J.parseStatus,J.parseError??null,Q?1:0,0,Z.title??"",Z.prompt??null,Z.workspaceRoot??null,Z.scheduleExpr??null,Z.timezone??null,Z.eventType??null,Z.filters?JSON.stringify(Z.filters):null,Z.debounceSeconds??null,Z.dedupeWindowSeconds??null,Z.cooldownSeconds??null,Z.mode??null,Z.systemPrompt??null,Z.providerId??null,Z.modelId??null,Z.maxIterations??null,Z.timeoutSeconds??null,Z.maxParallel??null,Z.tools?JSON.stringify(Z.tools):null,Z.notesDirectory??null,Z.extensions?JSON.stringify(Z.extensions):null,Z.source??null,f?.tags?JSON.stringify(f.tags):null,f?.metadata?JSON.stringify(f.metadata):null,1,W,W)}updateSpecRow($,J,Z,Q,W,f){let j=J.spec;this.db.prepare(`UPDATE cron_specs SET
354
+ ) VALUES (${Array.from({length:36},()=>"?").join(",")})`).run($,f.externalId,f.sourcePath,f.triggerKind,f.sourceMtimeMs??null,f.sourceHash,f.parseStatus,f.parseError??null,Z?1:0,0,J.title??"",J.prompt??null,J.workspaceRoot??null,J.scheduleExpr??null,J.timezone??null,J.eventType??null,J.filters?JSON.stringify(J.filters):null,J.debounceSeconds??null,J.dedupeWindowSeconds??null,J.cooldownSeconds??null,J.mode??null,J.systemPrompt??null,J.providerId??null,J.modelId??null,J.maxIterations??null,J.timeoutSeconds??null,J.maxParallel??null,J.tools?JSON.stringify(J.tools):null,J.notesDirectory??null,J.extensions?JSON.stringify(J.extensions):null,J.source??null,W?.tags?JSON.stringify(W.tags):null,W?.metadata?JSON.stringify(W.metadata):null,1,Q,Q)}updateSpecRow($,f,J,Z,Q,W){let j=f.spec;this.db.prepare(`UPDATE cron_specs SET
355
355
  external_id = ?, trigger_kind = ?,
356
356
  source_mtime_ms = ?, source_hash = ?, parse_status = ?, parse_error = ?,
357
357
  enabled = ?, removed = 0, title = ?, prompt = ?,
@@ -363,31 +363,31 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
363
363
  tools_json = ?, notes_directory = ?, extensions_json = ?, source = ?,
364
364
  tags_json = ?, metadata_json = ?,
365
365
  revision = ?, updated_at = ?
366
- WHERE spec_id = ?`).run(J.externalId,J.triggerKind,J.sourceMtimeMs??null,J.sourceHash,J.parseStatus,J.parseError??null,Q?1:0,Z.title??"",Z.prompt??null,Z.workspaceRoot??null,Z.scheduleExpr??null,Z.timezone??null,Z.eventType??null,Z.filters?JSON.stringify(Z.filters):null,Z.debounceSeconds??null,Z.dedupeWindowSeconds??null,Z.cooldownSeconds??null,Z.mode??null,Z.systemPrompt??null,Z.providerId??null,Z.modelId??null,Z.maxIterations??null,Z.timeoutSeconds??null,Z.maxParallel??null,Z.tools?JSON.stringify(Z.tools):null,Z.notesDirectory??null,Z.extensions?JSON.stringify(Z.extensions):null,Z.source??null,j?.tags?JSON.stringify(j.tags):null,j?.metadata?JSON.stringify(j.metadata):null,W,f,$)}markSpecRemoved($){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(D0(),$)}updateSpecNextRunAt($,J){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(J??null,D0(),$)}updateSpecLastRunAt($,J){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(J,D0(),$)}updateLastMaterializedRunId($,J){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(J,D0(),$)}initializeScheduleNextRun($){let J=this.getSpec($);if(!J||J.triggerKind!=="schedule"||!J.enabled||!J.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let Z=new Date($2(J.scheduleExpr,Date.now(),J.timezone)).toISOString();this.updateSpecNextRunAt($,Z)}materializeDueScheduleRun($){let J=$.nowMs,Z=new Date(J).toISOString();this.db.exec("BEGIN IMMEDIATE;");try{let Q=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($.specId);if(!Q)return this.db.exec("COMMIT;"),{queued:!1};let W=H1(Q);if(W.triggerKind!=="schedule"||!W.enabled||W.removed||W.parseStatus!=="valid"||!W.scheduleExpr)return this.db.exec("COMMIT;"),{queued:!1};let f=W.nextRunAt;if(!f){let H=new Date($2(W.scheduleExpr,J,W.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(H,Z,W.specId),this.db.exec("COMMIT;"),{queued:!1,nextRunAt:H}}if(new Date(f).getTime()>J)return this.db.exec("COMMIT;"),{queued:!1,nextRunAt:f};let j=`crun_${P4()}`,X;try{X=new Date($2(W.scheduleExpr,J,W.timezone)).toISOString()}catch{X=void 0}return this.db.prepare(`INSERT INTO cron_runs (
366
+ WHERE spec_id = ?`).run(f.externalId,f.triggerKind,f.sourceMtimeMs??null,f.sourceHash,f.parseStatus,f.parseError??null,Z?1:0,J.title??"",J.prompt??null,J.workspaceRoot??null,J.scheduleExpr??null,J.timezone??null,J.eventType??null,J.filters?JSON.stringify(J.filters):null,J.debounceSeconds??null,J.dedupeWindowSeconds??null,J.cooldownSeconds??null,J.mode??null,J.systemPrompt??null,J.providerId??null,J.modelId??null,J.maxIterations??null,J.timeoutSeconds??null,J.maxParallel??null,J.tools?JSON.stringify(J.tools):null,J.notesDirectory??null,J.extensions?JSON.stringify(J.extensions):null,J.source??null,j?.tags?JSON.stringify(j.tags):null,j?.metadata?JSON.stringify(j.metadata):null,Q,W,$)}markSpecRemoved($){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(R0(),$)}updateSpecNextRunAt($,f){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(f??null,R0(),$)}updateSpecLastRunAt($,f){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(f,R0(),$)}updateLastMaterializedRunId($,f){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(f,R0(),$)}initializeScheduleNextRun($){let f=this.getSpec($);if(!f||f.triggerKind!=="schedule"||!f.enabled||!f.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let J=new Date(Hf(f.scheduleExpr,Date.now(),f.timezone)).toISOString();this.updateSpecNextRunAt($,J)}materializeDueScheduleRun($){let f=$.nowMs,J=new Date(f).toISOString();this.db.exec("BEGIN IMMEDIATE;");try{let Z=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($.specId);if(!Z)return this.db.exec("COMMIT;"),{queued:!1};let Q=G1(Z);if(Q.triggerKind!=="schedule"||!Q.enabled||Q.removed||Q.parseStatus!=="valid"||!Q.scheduleExpr)return this.db.exec("COMMIT;"),{queued:!1};let W=Q.nextRunAt;if(!W){let H=new Date(Hf(Q.scheduleExpr,f,Q.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(H,J,Q.specId),this.db.exec("COMMIT;"),{queued:!1,nextRunAt:H}}if(new Date(W).getTime()>f)return this.db.exec("COMMIT;"),{queued:!1,nextRunAt:W};let j=`crun_${wJ()}`,X;try{X=new Date(Hf(Q.scheduleExpr,f,Q.timezone)).toISOString()}catch{X=void 0}return this.db.prepare(`INSERT INTO cron_runs (
367
367
  run_id, spec_id, spec_revision, trigger_kind, status,
368
368
  scheduled_for, trigger_event_id, attempt_count,
369
369
  created_at, updated_at
370
- ) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(j,W.specId,W.revision,"schedule","queued",f,null,0,Z,Z),this.db.prepare(`UPDATE cron_specs SET
370
+ ) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(j,Q.specId,Q.revision,"schedule","queued",W,null,0,J,J),this.db.prepare(`UPDATE cron_specs SET
371
371
  last_materialized_run_id = ?,
372
372
  last_run_at = ?,
373
373
  next_run_at = ?,
374
374
  updated_at = ?
375
- WHERE spec_id = ?`).run(j,Z,X??null,Z,W.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(j),nextRunAt:X}}catch(Q){throw this.db.exec("ROLLBACK;"),Q}}getRun($){let J=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get($);return J?FW(J):void 0}insertEventLog($,J={}){let Z=D0(),Q=J.receivedAtIso??Z,W=$.eventId.trim();if(!W)throw Error("automation event requires eventId");let f=$.eventType.trim();if(!f)throw Error("automation event requires eventType");let j=$.source.trim();if(!j)throw Error("automation event requires source");let X=$.occurredAt.trim()||Q,H=this.db.prepare(`INSERT OR IGNORE INTO cron_event_log (
375
+ WHERE spec_id = ?`).run(j,J,X??null,J,Q.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(j),nextRunAt:X}}catch(Z){throw this.db.exec("ROLLBACK;"),Z}}getRun($){let f=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get($);return f?MQ(f):void 0}insertEventLog($,f={}){let J=R0(),Z=f.receivedAtIso??J,Q=$.eventId.trim();if(!Q)throw Error("automation event requires eventId");let W=$.eventType.trim();if(!W)throw Error("automation event requires eventType");let j=$.source.trim();if(!j)throw Error("automation event requires source");let X=$.occurredAt.trim()||Z,H=this.db.prepare(`INSERT OR IGNORE INTO cron_event_log (
376
376
  event_id, event_type, source, subject,
377
377
  occurred_at, received_at, workspace_root, dedupe_key,
378
378
  payload_json, attributes_json, processing_status,
379
379
  matched_spec_count, queued_run_count, suppressed_count,
380
380
  error, created_at, updated_at
381
- ) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(W,f,j,$.subject?.trim()||null,X,Q,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,qY($.payload),qY($.attributes),"received",0,0,0,null,Z,Z).changes??0,Y=this.getEventLog(W);if(!Y)throw Error("failed to insert cron_event_log row");return{record:Y,created:H===1}}getEventLog($){let J=this.db.prepare("SELECT * FROM cron_event_log WHERE event_id = ?").get($);return J?MY(J):void 0}listEventLogs($={}){let J=[],Z=[];if($.eventType)J.push("event_type = ?"),Z.push($.eventType);if($.source)J.push("source = ?"),Z.push($.source);if($.processingStatus)J.push("processing_status = ?"),Z.push($.processingStatus);let Q=J.length>0?`WHERE ${J.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_event_log ${Q}
381
+ ) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(Q,W,j,$.subject?.trim()||null,X,Z,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,pY($.payload),pY($.attributes),"received",0,0,0,null,J,J).changes??0,Y=this.getEventLog(Q);if(!Y)throw Error("failed to insert cron_event_log row");return{record:Y,created:H===1}}getEventLog($){let f=this.db.prepare("SELECT * FROM cron_event_log WHERE event_id = ?").get($);return f?lY(f):void 0}listEventLogs($={}){let f=[],J=[];if($.eventType)f.push("event_type = ?"),J.push($.eventType);if($.source)f.push("source = ?"),J.push($.source);if($.processingStatus)f.push("processing_status = ?"),J.push($.processingStatus);let Z=f.length>0?`WHERE ${f.join(" AND ")}`:"",Q=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_event_log ${Z}
382
382
  ORDER BY received_at DESC, created_at DESC
383
- LIMIT ?`).all(...Z,W).map((j)=>MY(j))}updateEventLogProcessing($,J){return(this.db.prepare(`UPDATE cron_event_log SET
383
+ LIMIT ?`).all(...J,Q).map((j)=>lY(j))}updateEventLogProcessing($,f){return(this.db.prepare(`UPDATE cron_event_log SET
384
384
  processing_status = ?,
385
385
  matched_spec_count = COALESCE(?, matched_spec_count),
386
386
  queued_run_count = COALESCE(?, queued_run_count),
387
387
  suppressed_count = COALESCE(?, suppressed_count),
388
388
  error = ?,
389
389
  updated_at = ?
390
- WHERE event_id = ?`).run(J.status,J.matchedSpecCount??null,J.queuedRunCount??null,J.suppressedCount??null,J.error??null,D0(),$).changes??0)===1}listRuns($={}){let J=[],Z=[];if($.specId)J.push("spec_id = ?"),Z.push($.specId);if($.status){let j=Array.isArray($.status)?$.status:[$.status];if(j.length>0){let X=j.map(()=>"?").join(",");J.push(`status IN (${X})`);for(let H of j)Z.push(H)}}let Q=J.length>0?`WHERE ${J.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${Q} ORDER BY created_at DESC LIMIT ?`).all(...Z,W).map((j)=>FW(j))}hasRecentEventRunForDedupe($){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
390
+ WHERE event_id = ?`).run(f.status,f.matchedSpecCount??null,f.queuedRunCount??null,f.suppressedCount??null,f.error??null,R0(),$).changes??0)===1}listRuns($={}){let f=[],J=[];if($.specId)f.push("spec_id = ?"),J.push($.specId);if($.status){let j=Array.isArray($.status)?$.status:[$.status];if(j.length>0){let X=j.map(()=>"?").join(",");f.push(`status IN (${X})`);for(let H of j)J.push(H)}}let Z=f.length>0?`WHERE ${f.join(" AND ")}`:"",Q=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${Z} ORDER BY created_at DESC LIMIT ?`).all(...J,Q).map((j)=>MQ(j))}hasRecentEventRunForDedupe($){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
391
391
  INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
392
392
  WHERE r.spec_id = ?
393
393
  AND r.trigger_kind = 'event'
@@ -398,28 +398,28 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
398
398
  WHERE r.spec_id = ?
399
399
  AND r.trigger_kind = 'event'
400
400
  AND e.received_at >= ?
401
- LIMIT 1`).get($.specId,$.sinceIso)}findQueuedEventRunForDedupe($){let J=this.db.prepare(`SELECT r.* FROM cron_runs r
401
+ LIMIT 1`).get($.specId,$.sinceIso)}findQueuedEventRunForDedupe($){let f=this.db.prepare(`SELECT r.* FROM cron_runs r
402
402
  INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
403
403
  WHERE r.spec_id = ?
404
404
  AND r.trigger_kind = 'event'
405
405
  AND r.status = 'queued'
406
406
  AND e.dedupe_key = ?
407
407
  ORDER BY COALESCE(r.scheduled_for, r.created_at) DESC
408
- LIMIT 1`).get($.specId,$.dedupeKey);return J?FW(J):void 0}updateQueuedEventRunForDebounce($){let J=D0();if((this.db.prepare(`UPDATE cron_runs SET
408
+ LIMIT 1`).get($.specId,$.dedupeKey);return f?MQ(f):void 0}updateQueuedEventRunForDebounce($){let f=R0();if((this.db.prepare(`UPDATE cron_runs SET
409
409
  trigger_event_id = ?,
410
410
  scheduled_for = ?,
411
411
  updated_at = ?
412
412
  WHERE run_id = ?
413
413
  AND trigger_kind = 'event'
414
- AND status = 'queued'`).run($.triggerEventId,$.scheduledFor,J,$.runId).changes??0)!==1)return;return this.getRun($.runId)}hasOneOffRunForRevision($,J){return!!this.db.prepare(`SELECT run_id FROM cron_runs
414
+ AND status = 'queued'`).run($.triggerEventId,$.scheduledFor,f,$.runId).changes??0)!==1)return;return this.getRun($.runId)}hasOneOffRunForRevision($,f){return!!this.db.prepare(`SELECT run_id FROM cron_runs
415
415
  WHERE spec_id = ? AND spec_revision = ?
416
416
  AND trigger_kind = 'one_off'
417
- LIMIT 1`).get($,J)}enqueueRun($){let J=`crun_${P4()}`,Z=D0();this.db.prepare(`INSERT INTO cron_runs (
417
+ LIMIT 1`).get($,f)}enqueueRun($){let f=`crun_${wJ()}`,J=R0();this.db.prepare(`INSERT INTO cron_runs (
418
418
  run_id, spec_id, spec_revision, trigger_kind, status,
419
419
  scheduled_for, trigger_event_id, attempt_count,
420
420
  created_at, updated_at
421
- ) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(J,$.specId,$.specRevision,$.triggerKind,"queued",$.scheduledFor??null,$.triggerEventId??null,0,Z,Z),this.updateLastMaterializedRunId($.specId,J);let Q=this.getRun(J);if(!Q)throw Error("failed to insert cron_run row");return Q}cancelQueuedRunsForSpec($){return this.db.prepare(`UPDATE cron_runs SET status = 'cancelled', updated_at = ?
422
- WHERE spec_id = ? AND status = 'queued'`).run(D0(),$).changes??0}claimDueRuns($){let J=$.nowIso,Z=Math.max(1000,Math.floor($.leaseMs)),Q=new Date(new Date(J).getTime()+Z).toISOString(),W=Math.max(1,Math.floor($.limit??25)),f=[];this.db.exec("BEGIN IMMEDIATE;");try{let j=this.db.prepare(`SELECT * FROM cron_runs
421
+ ) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(f,$.specId,$.specRevision,$.triggerKind,"queued",$.scheduledFor??null,$.triggerEventId??null,0,J,J),this.updateLastMaterializedRunId($.specId,f);let Z=this.getRun(f);if(!Z)throw Error("failed to insert cron_run row");return Z}cancelQueuedRunsForSpec($){return this.db.prepare(`UPDATE cron_runs SET status = 'cancelled', updated_at = ?
422
+ WHERE spec_id = ? AND status = 'queued'`).run(R0(),$).changes??0}claimDueRuns($){let f=$.nowIso,J=Math.max(1000,Math.floor($.leaseMs)),Z=new Date(new Date(f).getTime()+J).toISOString(),Q=Math.max(1,Math.floor($.limit??25)),W=[];this.db.exec("BEGIN IMMEDIATE;");try{let j=this.db.prepare(`SELECT * FROM cron_runs
423
423
  WHERE (
424
424
  status = 'queued'
425
425
  OR (
@@ -431,7 +431,7 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
431
431
  )
432
432
  AND (scheduled_for IS NULL OR scheduled_for <= ?)
433
433
  ORDER BY COALESCE(scheduled_for, created_at) ASC
434
- LIMIT ?`).all(J,J,W);for(let X of j){let H=t(X.run_id);if(!H)continue;let Y=`cclaim_${P4()}`;if((this.db.prepare(`UPDATE cron_runs SET
434
+ LIMIT ?`).all(f,f,Q);for(let X of j){let H=t(X.run_id);if(!H)continue;let Y=`cclaim_${wJ()}`;if((this.db.prepare(`UPDATE cron_runs SET
435
435
  status = 'running',
436
436
  claim_token = ?,
437
437
  claim_started_at = ?,
@@ -452,8 +452,8 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
452
452
  AND claim_until_at <= ?
453
453
  AND completed_at IS NULL
454
454
  )
455
- )`).run(Y,J,Q,J,J,H,J).changes??0)!==1)continue;let V=this.getRun(H);if(!V)continue;f.push({run:V,claimToken:Y,claimUntilAt:Q})}this.db.exec("COMMIT;")}catch(j){throw this.db.exec("ROLLBACK;"),j}return f}renewClaim($,J,Z){return(this.db.prepare(`UPDATE cron_runs SET claim_until_at = ?, updated_at = ?
456
- WHERE run_id = ? AND claim_token = ?`).run(Z,D0(),$,J).changes??0)===1}completeRun($,J){let Z=J.completedAtIso??D0(),Q=J.claimToken?"WHERE run_id = ? AND claim_token = ?":"WHERE run_id = ?";return(this.db.prepare(`UPDATE cron_runs SET
455
+ )`).run(Y,f,Z,f,f,H,f).changes??0)!==1)continue;let V=this.getRun(H);if(!V)continue;W.push({run:V,claimToken:Y,claimUntilAt:Z})}this.db.exec("COMMIT;")}catch(j){throw this.db.exec("ROLLBACK;"),j}return W}renewClaim($,f,J){return(this.db.prepare(`UPDATE cron_runs SET claim_until_at = ?, updated_at = ?
456
+ WHERE run_id = ? AND claim_token = ?`).run(J,R0(),$,f).changes??0)===1}completeRun($,f){let J=f.completedAtIso??R0(),Z=f.claimToken?"WHERE run_id = ? AND claim_token = ?":"WHERE run_id = ?";return(this.db.prepare(`UPDATE cron_runs SET
457
457
  status = ?,
458
458
  session_id = COALESCE(?, session_id),
459
459
  report_path = COALESCE(?, report_path),
@@ -463,7 +463,7 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
463
463
  claim_token = NULL,
464
464
  claim_until_at = NULL,
465
465
  updated_at = ?
466
- ${Q}`).run(J.status,J.sessionId??null,J.reportPath??null,J.error??null,Z,Z,$,...J.claimToken?[J.claimToken]:[]).changes??0)>0}requeueRun($){let J=D0();return(this.db.prepare(`UPDATE cron_runs SET
466
+ ${Z}`).run(f.status,f.sessionId??null,f.reportPath??null,f.error??null,J,J,$,...f.claimToken?[f.claimToken]:[]).changes??0)>0}requeueRun($){let f=R0();return(this.db.prepare(`UPDATE cron_runs SET
467
467
  status = 'queued',
468
468
  claim_started_at = NULL,
469
469
  claim_token = NULL,
@@ -475,40 +475,40 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
475
475
  error = ?,
476
476
  scheduled_for = COALESCE(?, scheduled_for),
477
477
  updated_at = ?
478
- WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,J,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,J){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(J,D0(),$)}attachReportPathToRun($,J){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(J,D0(),$)}}class z4{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new L4({dbPath:$.dbPath});let J=$.specs;this.reconciler=new BW({store:this.store,specs:J}),this.materializer=new F4({store:this.store}),this.eventIngress=new JW({store:this.store,logger:$.logger}),this.runner=new U4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:J,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new KW({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Z)=>{let Q=$.logger;if(Q)if(Q.error)Q.error("cron.watcher.failed",{error:Z});else Q.log("cron.watcher.failed",{error:Z})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}var mY={};w(mY,{manifestToSessionRecord:()=>$Z,listSessionHistoryFromBackend:()=>LW,listSessionHistory:()=>JZ,hydrateSessionHistory:()=>xY});import{readdir as YO,readFile as bY}from"node:fs/promises";import{join as kY}from"node:path";import{formatDisplayUserInput as AO,normalizeUserInput as VO}from"@cline/shared";import{resolveSessionDataDir as IY}from"@cline/shared/storage";import{existsSync as jO}from"node:fs";import{readFile as XO}from"node:fs/promises";import{formatDisplayUserInput as SY}from"@cline/shared";class O4{listeners=new Set;subscribe($,J){let Z={listener:$,sessionId:J?.sessionId?.trim()||void 0};return this.listeners.add(Z),()=>{this.listeners.delete(Z)}}emit($){let J=$.payload.sessionId?.trim();for(let Z of this.listeners){if(Z.sessionId&&Z.sessionId!==J)continue;Z.listener($)}}get size(){return this.listeners.size}}async function Y1($){let J=$?.trim();if(!J||!jO(J))return[];try{let Z=(await XO(J,"utf8")).trim();if(!Z)return[];let Q=JSON.parse(Z);if(Array.isArray(Q))return CY(Q);if(Q&&typeof Q==="object"&&!Array.isArray(Q)){let W=Q.messages;if(Array.isArray(W))return CY(W)}return[]}catch{return[]}}function HO($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:SY($.content)};return{...$,content:$.content.map((J)=>{if(J.type!=="text"||typeof J.text!=="string")return J;return{...J,text:SY(J.text)}})}}function CY($){return $.map(HO)}function RW($){return $?{...$}:void 0}async function EY($,J){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await J.queueSpawnRequest($);let Q=await J.upsertSubagentSessionFromHook($);if(!Q)return;await J.appendSubagentHookAudit(Q,$),await J.applySubagentStatus(Q,$)}function _4($){if(typeof $!=="string")return;let J=$.trim();return J.length>0?J:void 0}function v0($){let J=_4($);if(!J)return;return J.toLowerCase()==="unknown"?void 0:J}function e5($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function BO($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function PW($){let J=$??200;return Number.isFinite(J)?Math.max(0,Math.floor(J)):200}function KO($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function GO($){return $.isSubagent!==!0&&!_4($.parentSessionId)}function FO($){let J=$.match(/\d{13,}/g);if(!J||J.length===0)return 0;let Z=0;for(let Q of J){let W=Number.parseInt(Q,10);if(Number.isFinite(W)&&W>Z)Z=W}return Z}function $Z($){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 UO($){let J=PW($);if(J===0)return[];let Z=IY(),W=(await YO(Z,{withFileTypes:!0}).catch(()=>[])).filter((j)=>j.isDirectory()).map((j)=>({entry:j,recency:FO(j.name.trim())})).sort((j,X)=>X.recency-j.recency||X.entry.name.localeCompare(j.entry.name));return(await Promise.all(W.map(async({entry:j})=>{let X=j.name.trim();if(!X)return;let H=kY(Z,X,`${X}.json`),Y=await bY(H,"utf8").catch(()=>{return});if(!Y)return;let A;try{A=JSON.parse(Y)}catch{return}let V=M0.safeParse(A);if(!V.success)return;return $Z(V.data)}))).filter((j)=>Boolean(j)).sort((j,X)=>X.startedAt.localeCompare(j.startedAt)).slice(0,J)}async function RO($,J,Z){let Q=PW(J);if(Q===0)return await $.listSessions(0),[];let W=Z.includeSubagents?Q:KO(Q),f=await $.listSessions(W);return(Z.includeSubagents?f:f.filter(GO)).slice(0,Q)}function DO($){if(typeof $==="string")return $.trim();let J=[];for(let Z of $){if(!Z||typeof Z!=="object")continue;let Q=Z;if(Q.type!=="text")continue;let W=Q.text?.trim();if(W)J.push(W)}return J.join(`
479
- `).trim()}function hY($){return $.replace(/\s+/g," ").trim()}function PO($,J){if($.length<=J)return $;return`${$.slice(0,Math.max(0,J-3)).trimEnd()}...`}function LO($){for(let J of["user","assistant"])for(let Z of $){if(Z.role!==J)continue;let Q=hY(DO(Z.content));if(!Q)continue;let W=J==="user"?hY(AO(Q)):Q,f=VO(W.split(`
480
- `)[0]??W);return PO(f,50)}return}function zO($){let J=0;for(let Z of $)J+=e5(Z.metrics?.cost)??0;return J}function OO($){let J,Z;for(let Q=$.length-1;Q>=0;Q-=1){let W=$[Q];if(!J)J=v0(W.modelInfo?.provider);if(!Z)Z=v0(W.modelInfo?.id);if(J&&Z)break}return{provider:J,model:Z}}function _O($){return v0($?.provider)??v0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function TO($){return v0($?.model)??v0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function DW($,J){let Z=BO($.metadata),Q=_4(J?.title)??_4(Z?.title),W=e5(J?.totalCost)??e5(Z?.totalCost),f=Z||Q!==void 0||W!==void 0?{...Z??{},...Q!==void 0?{title:Q}:{},...W!==void 0?{totalCost:W}:{}}:void 0;return{...$,provider:v0(J?.provider)??v0($.provider)??_O(Z)??"",model:v0(J?.model)??v0($.model)??TO(Z)??"",metadata:f}}function NO($){let J=$.content;if(!Array.isArray(J))return!1;return J.some((Z)=>!!Z&&typeof Z==="object"&&Z.type==="tool-call")}function MO($,J){if($.status!=="running"||$.interactive!==!0)return!1;let Z=J.at(-1);return Z?.role==="assistant"&&!NO(Z)}async function qO($,J){return await Promise.all(J.map(async(Z)=>{if(Z.status!=="running"||Z.interactive!==!0)return Z;let Q=await $.readSessionMessages(Z.sessionId);return MO(Z,Q)?{...Z,status:"idle"}:Z}))}async function xY($,J){return await Promise.all(J.map(async(Z)=>{let Q=DW(Z),W=Boolean(_4(Q.metadata?.title)),f=Boolean(v0(Q.provider)),j=Boolean(v0(Q.model)),X=e5(Q.metadata?.totalCost),H=X!==void 0&&X>0;if(W&&f&&j&&H)return Q;let Y=await $.readSessionMessages(Z.sessionId);if(Y.length===0)return Q;let A=OO(Y),V=zO(Y);return DW(Z,{title:W?void 0:LO(Y),provider:f?void 0:A.provider,model:j?void 0:A.model,totalCost:H||V<=0?void 0:V})}))}async function JZ($,J={}){let Z=PW(J.limit),Q=J.includeSubagents===!0,W=await RO($,Z,{includeSubagents:Q}),f=J.includeManifestFallback===!0&&W.length<Z?await UO(Math.min(Math.max(Z*2,100),500)):[],j=new Map;for(let Y of[...W,...f]){if(j.has(Y.sessionId))continue;j.set(Y.sessionId,Y)}let X=f.length===0?W:Array.from(j.values()).sort((Y,A)=>A.startedAt.localeCompare(Y.startedAt)).slice(0,Z),H=await qO($,X);if(J.hydrate===!1)return H.map((Y)=>DW(Y));return await xY($,H)}async function yO($){let J=$.trim();if(!J)return;let Z=kY(IY(),J,`${J}.json`),Q=await bY(Z,"utf8").catch(()=>{return});if(!Q)return;try{let W=M0.safeParse(JSON.parse(Q));return W.success?W.data.messages_path:void 0}catch{return}}async function LW($,J={}){let Z=new Map;return await JZ({listSessions:async(W)=>{let f=await $.listSessions(W);Z.clear();for(let j of f)Z.set(j.sessionId,j);return f.map(KJ)},readSessionMessages:async(W)=>{let f=Z.get(W)?.messagesPath??await yO(W);return await Y1(f)}},J)}var cA={};w(cA,{resolveSessionBackend:()=>J7,createRuntimeHost:()=>D8});import{captureSdkError as vA}from"@cline/shared";import{createSessionId as D_,resolveHubCommandTimeoutMs as P_}from"@cline/shared";import{spawn as tO}from"node:child_process";import{closeSync as sO,mkdirSync as oO,openSync as eO}from"node:fs";import{basename as $_,dirname as J_,join as Z_}from"node:path";import{fileURLToPath as Q_}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as W_,isHubDaemonProcess as sY,withResolvedClineBuildEnv as f_}from"@cline/shared";import{createHash as wO,randomBytes as SO}from"node:crypto";import{existsSync as CO}from"node:fs";import{chmod as EO,mkdir as zW,readFile as dY,rm as OW,writeFile as lY}from"node:fs/promises";import{dirname as pY,join as _W}from"node:path";import{resolveClineDataDir as N4,resolveClineDir as rY}from"@cline/shared/storage";var vY="0.0.42-nightly.1780514867";var T4={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:vY,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^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"},devDependencies:{"@types/ws":"^8.18.1"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var hO="CLINE_HUB_DISCOVERY_PATH",bO="CLINE_HUB_BUILD_ID",uY=30000,kO=15000,IO=100;function xO($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function mO($){return wO("sha256").update($).digest("hex").slice(0,12)}function gO($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(J){return J instanceof Error&&"code"in J?String(J.code)==="EPERM":!1}}function ZZ(){return SO(32).toString("hex")}function vO($){return new Promise((J)=>setTimeout(J,$))}function uO($){return`${$}.lock`}async function cO($){try{let J=JSON.parse(await dY(_W($,"owner.json"),"utf8"));if(typeof J.pid!=="number"||typeof J.acquiredAt!=="string")return;return{pid:J.pid,acquiredAt:J.acquiredAt}}catch{return}}async function cY($){await OW($,{recursive:!0,force:!0}).catch(()=>{return})}function A1(){return process.env[bO]?.trim()||String(T4.version)}function E$($=process.argv[1]?.trim()||process.cwd()){let J=`hub-${mO($)}`,Z=process.env[hO]?.trim()||_W(N4(),"locks","hub","owners",`${xO(J)}.json`);return{ownerId:J,discoveryPath:Z}}function iY($=`hub-${Date.now().toString(36)}`){return E$($)}async function K0($){try{let J=JSON.parse(await dY($,"utf8"));if(typeof J.hubId!=="string"||typeof J.protocolVersion!=="string"||typeof J.authToken!=="string"||typeof J.host!=="string"||typeof J.port!=="number"||typeof J.url!=="string"||typeof J.startedAt!=="string"||typeof J.updatedAt!=="string")return;return{hubId:J.hubId,protocolVersion:J.protocolVersion,coreVersion:typeof J.coreVersion==="string"?J.coreVersion:void 0,buildId:typeof J.buildId==="string"?J.buildId:void 0,authToken:J.authToken,host:J.host,port:J.port,url:J.url,pid:typeof J.pid==="number"?J.pid:void 0,startedAt:J.startedAt,updatedAt:J.updatedAt}}catch{return}}async function QZ($,J){await zW(pY($),{recursive:!0}),await OW($,{force:!0}).catch(()=>{return}),await lY($,`${JSON.stringify(J,null,2)}
481
- `,{encoding:"utf8",mode:384}),await EO($,384)}async function u0($){await OW($,{force:!0}).catch(()=>{return})}async function WZ($,J){let Z=uO($);await zW(pY(Z),{recursive:!0});let Q=Date.now()+kO;while(!0)try{await zW(Z,{recursive:!1}),await lY(_W(Z,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
482
- `,"utf8");try{return await J()}finally{await cY(Z)}}catch(W){if((W instanceof Error&&"code"in W?String(W.code):"")!=="EEXIST")throw W;let j=await cO(Z),X=j?Date.now()-Date.parse(j.acquiredAt):uY+1;if(!j||!gO(j.pid)||X>uY){await cY(Z);continue}if(Date.now()>=Q)throw Error(`Timed out waiting for hub startup lock ${Z}`);await vO(IO)}}async function X$($){try{let J=await fetch(TW($));if(!J.ok)return;return await J.json()}catch{return}}function o0($,J,Z="/hub"){return new URL(`ws://${$}:${J}${Z}`).toString()}function TW($){let J=new URL($);return J.protocol=J.protocol==="wss:"?"https:":"http:",J.pathname="/health",J.search="",J.toString()}function nY($){return CO($)}import{CLINE_HUB_DEV_PORT as dO,CLINE_HUB_PORT as lO,resolveClineBuildEnv as pO}from"@cline/shared";var rO="CLINE_HUB_HOST",iO="CLINE_HUB_PORT",nO="CLINE_HUB_PATHNAME",NW="127.0.0.1",MW=lO,qW="/hub";function aY($){return pO($)==="development"?dO:MW}function yW($={}){return($.env??process.env)[rO]?.trim()||NW}function Y8($={}){let Z=($.env??process.env)[iO]?.trim();if(!Z)return aY($);let Q=Number.parseInt(Z,10);if(!Number.isInteger(Q)||Q<1||Q>65535)return aY($);return Q}function wW($={}){return($.env??process.env)[nO]?.trim()||qW}function c0($={},J={}){return{host:$.host??yW(J),port:$.port??Y8(J),pathname:$.pathname??wW(J)}}var aO="shared:cline";function tY($){let J=w$($.trim());return E$(`workspace:${J||$.trim()}`)}function Y0($=aO){return E$($)}var j_=8000,X_=200,H_=3000,Y_=100,A_=[100,250,500,1000,2000],V_="--cline-hub-daemon";function B_($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function K_(){try{let $=Z_(N4(),"logs","hub-daemon.log");return oO(J_($),{recursive:!0}),{fd:eO($,"a"),logPath:$}}catch{return}}function M4($){let J=$.buildId?.trim();return!!J&&J===A1()}async function Z2($){try{return await X$($)}catch{return}}async function G_($,J){let Z=Date.now()+J;while(Date.now()<Z){if(!(await Z2($))?.url)return!0;await new Promise((W)=>setTimeout(W,Y_))}return!1}async function q4($,J){if(M4($))return;if(await y4($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}await G_($.url,H_),await u0(J).catch(()=>{return})}function F_(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return Q_(new URL(`./entry.${$}`,import.meta.url))}function U_($,J){let Z=F_(),Q=process.execPath?.trim();if(!Q)throw Error("unable to resolve runtime executable for hub daemon");let W=$_(Q).toLowerCase().includes("bun"),f=Z.startsWith("/$bunfs/"),j=W&&Z.toLowerCase().endsWith(".ts"),X=f?[V_]:[...j?["--conditions=development"]:[],Z];return{launcher:Q,args:[...X,"--cwd",$,...B_(J)],cwd:$,env:{...f_(process.env),CLINE_NO_INTERACTIVE:"1",[W_]:"1"}}}function R_($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Z="message"in $?$.message:void 0;return typeof Z==="string"&&Z.includes("ETXTBSY")}function SW($,J={}){if(sY())return;let Z=U_($,J),Q=K_();try{tO(Z.launcher,Z.args,{detached:!0,stdio:Q?["ignore",Q.fd,Q.fd]:"ignore",env:Z.env,cwd:Z.cwd}).unref()}finally{if(Q)sO(Q.fd)}}async function A8($,J={}){for(let Z=0;;Z++)try{SW($,J);return}catch(Q){let W=A_[Z];if(!R_(Q)||W===void 0)throw Q;await new Promise((f)=>setTimeout(f,W))}}function fZ($,J={}){if(sY())return;let Z=Y0(),Q=J.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=c0(J),f=o0(W.host,W.port,W.pathname);K0(Z.discoveryPath).then(async(j)=>{if(j?.url){let A=await Z2(j.url);if(A?.url&&M4(A)&&await H$(A.url,{authToken:j.authToken}))return;if(A?.url)await q4({...A,authToken:j.authToken},Z.discoveryPath);else await u0(Z.discoveryPath).catch(()=>{return})}let X=await Z2(f);if(X?.url)await q4(X,Z.discoveryPath);let Y=!Q&&W.port!==0?{...W,port:0}:W;await A8($,Y)}).catch(()=>{})}async function oY($,J={}){let Z=Y0(),Q=J.host!==void 0||J.port!==void 0||J.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=J.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),f=c0(J),j=o0(f.host,f.port,f.pathname),X=(K)=>{if(!Q)V1(K.url,K.authToken);return K},H=await K0(Z.discoveryPath);if(H?.url){let K=await Z2(H.url);if(K?.url&&M4(K)&&await H$(K.url,{authToken:H.authToken}))return X({url:K.url,authToken:H.authToken});if(K?.url)await q4({...K,authToken:H.authToken},Z.discoveryPath);else await u0(Z.discoveryPath).catch(()=>{return})}let Y=await Z2(j);if(Y?.url)await q4(Y,Z.discoveryPath);let V=!W&&f.port!==0?{...f,port:0}:f;await A8($,V);let B=Date.now()+j_;while(Date.now()<B){let K=await K0(Z.discoveryPath);if(K?.url){let D=await Z2(K.url);if(D?.url&&M4(D)&&await H$(D.url,{authToken:K.authToken}))return X({url:D.url,authToken:K.authToken})}let G=await Z2(j);if(G?.url&&!M4(G))await q4(G,Z.discoveryPath);await new Promise((D)=>setTimeout(D,X_))}throw Error("Timed out waiting for detached hub startup.")}function L_(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function QA($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((J)=>Buffer.from(J))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return QA($.data);return String($)}function z_($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function eY($){let J=$,Z=z_(J.reason);return new _0("hub_connection_closed",J.code||Z?`Hub connection closed (code=${J.code??0}${Z?`, reason=${Z}`:""})`:CW,{closeCode:J.code,closeReason:Z||void 0})}function O_($,J){if($ instanceof _0)return $;if($ instanceof Error)return new _0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new _0("hub_connect_failed",$.error.message);let Z=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Z)return new _0("hub_connect_failed",Z);let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new _0("hub_connect_failed",Q?`Failed to connect to hub at ${J.toString()} (${Q} event before socket open).`:`Failed to connect to hub at ${J.toString()}.`)}var __=8000,T_=200,$A="*",JA=8000,N_="cline-hub-auth.",WA=new Map,fA=new Set,M_=3000,q_=3000,y_=100,CW="Hub connection closed",w_=250,S_=5000,ZA=0.5;class _0 extends Error{code;details;constructor($,J,Z){super(J);this.code=$;this.details=Z;this.name="HubTransportError"}}function bW($){return $ instanceof _0}class V8 extends Error{command;code;constructor($,J,Z){super(Z);this.command=$;this.code=J;this.name="HubCommandError"}}function jZ($,J){return $ instanceof V8&&$.code==="hub_command_timeout"&&(J===void 0||$.command===J)}function jA($){let J=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),J)return J;let Z=kW($.toString());return Z?WA.get(Z):void 0}function C_($){try{let Z=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"}catch{return!1}}function kW($){if(!C_($))return;let J=new URL(B1($));return J.search="",J.hash="",J.toString()}function EW($){let J=kW($);return!!J&&fA.has(J)}function V1($,J){let Z=kW($);if(Z){if(fA.add(Z),J?.trim())WA.set(Z,J)}return $}class e0{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new _0("hub_connection_closed",CW);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),J=this.options.authToken?.trim()||jA($);$.hash="";let Q=new(L_())($.toString(),J?[`${N_}${J}`]:void 0);this.socket=Q;let W=!1;this.connectPromise=new Promise((f,j)=>{let X=!1,H=setTimeout(()=>{if(X)return;X=!0,W=!0,this.lastCloseError=new _0("hub_connect_timeout",`Timed out connecting to hub after ${JA}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Q.close()}catch{}j(this.lastCloseError)},JA);Q.addEventListener("open",()=>{if(X)return;X=!0,clearTimeout(H),f()}),Q.addEventListener("error",(Y)=>{if(X)return;X=!0,clearTimeout(H),this.lastCloseError=O_(Y,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)}),Q.addEventListener("close",(Y)=>{if(X)return;if(X=!0,clearTimeout(H),!W)this.lastCloseError=eY(Y),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)})}),Q.addEventListener("message",(f)=>{this.handleFrame(JSON.parse(QA(f)))}),Q.addEventListener("close",(f)=>{if(this.socket!==Q)return;if(!W)this.lastCloseError=eY(f),this.sawSocketClose=!0;this.registered=!1;for(let j of this.pendingReplies.values())j.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let f of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(f));this.reconnectAttempt=0}subscribe($,J){let Z=J?.sessionId?.trim()||void 0,Q={listener:$,sessionId:Z};return this.listeners.add(Q),this.adjustSubscriptionCount(Z,1),()=>{if(!this.listeners.delete(Q))return;this.adjustSubscriptionCount(Z,-1)}}async command($,J,Z,Q){let W=0,f=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,J,Z,Q)}catch(j){if(!f||W>=1||!await this.recoverLocalHubTransport(j))throw j;W+=1}}async commandOnce($,J,Z,Q){await this.connect();let W=D_("hubreq_"),f=P_($,Q?.timeoutMs),j=new Promise((H,Y)=>{let A=f===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(W))return;Y(new V8($,"hub_command_timeout",`Hub command ${$} timed out after ${f}ms (hub=${this.currentUrl}, requestId=${W}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},f);this.pendingReplies.set(W,{resolve:(V)=>{if(A)clearTimeout(A);H(V)},reject:(V)=>{if(A)clearTimeout(A);Y(V)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:W,clientId:this.clientId,sessionId:Z,timeoutMs:f,payload:J}})}catch(H){throw this.pendingReplies.delete(W),H}let X=await j;if(!X.ok)throw new V8($,X.error?.code,X.error?.message??`Hub command ${$} failed`);return X}async recoverLocalHubTransport($){if(!EW(this.currentUrl)||!bW($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let J=await Q2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!J)return!1;return this.currentUrl=J,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(w_*2**this.reconnectAttempt,S_),J=Math.round($*(1-ZA)+Math.random()*$*ZA);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},J)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!EW(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await Q2({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 _0("hub_connection_closed",CW),this.sawSocketClose=!1;for(let J of this.pendingReplies.values())J.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new _0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,J){this.sendFrame({kind:$,clientId:this.clientId,...J?{sessionId:J}:{}})}adjustSubscriptionCount($,J){let Z=this.subscriptionKeyForSessionId($),Q=(this.subscriptionCounts.get(Z)??0)+J;if(Q<=0){if(this.subscriptionCounts.delete(Z),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(J<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Z,Q),J>0&&Q===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??$A}subscriptionSessionIdFromKey($){return $===$A?void 0:$}handleFrame($){switch($.kind){case"reply":{let J=$.envelope.requestId;if(!J)return;let Z=this.pendingReplies.get(J);if(!Z)return;this.pendingReplies.delete(J),Z.resolve($.envelope);return}case"event":for(let J of this.listeners){if(J.sessionId&&J.sessionId!==$.envelope.sessionId?.trim())continue;J.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function B1($){let J=new URL($);if(J.protocol==="http:")J.protocol="ws:";else if(J.protocol==="https:")J.protocol="wss:";return J.toString()}async function H$($,J){let Z=new e0({url:$,authToken:J?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd});try{return await Z.connect(),!0}catch{return!1}finally{Z.close()}}async function hW($,J){let Z=B1($),Q=await X$(Z);if(!Q)return{status:"unreachable",url:Z};let W=A1(),f=Q.buildId?.trim();if(!f||f!==W)return{status:"build_mismatch",url:Z};if(J?.verifyConnection===!0&&!await H$(Z,{workspaceRoot:J.workspaceRoot,cwd:J.cwd,authToken:J.authToken}))return{status:"unreachable",url:Z};return{status:"compatible",url:Z}}async function E_($){let J=Date.now()+__;while(Date.now()<J){let Z=await K0($.discoveryPath);if(Z?.url){let Q=await hW(Z.url,{verifyConnection:!0,authToken:Z.authToken});if(Q.status==="compatible")return V1(Q.url,Z.authToken)}await new Promise((Q)=>setTimeout(Q,T_))}return}async function h_($){let J=Date.now()+q_;while(Date.now()<J){if(!(await X$($).catch(()=>{return}))?.url)return!0;await new Promise((Q)=>setTimeout(Q,y_))}return!1}function b_($,J){try{return B1($)===B1(J)}catch{return!1}}function k_($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Z)=>{if(!Z||typeof Z!=="object")return!1;let Q=Z;if(Q.status==="running"||Q.status==="idle"||Q.status==="pending")return!0;return Array.isArray(Q.participants)&&Q.participants.length>0})}async function I_($,J,Z){let Q=new e0({url:$,authToken:J,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{let W=await Q.command("session.list",{limit:500},void 0,{timeoutMs:M_});return!k_(W.payload)}catch{return!1}finally{await Q.dispose().catch(()=>{return})}}async function w4($={}){if($.endpoint?.trim()){let W=await hW($.endpoint);return W.status==="compatible"?W.url:void 0}let J=Y0(),Z=await K0(J.discoveryPath);if(!Z?.url)return;let Q=await hW(Z.url);if(Q.status==="compatible")return V1(Q.url,Z.authToken);if(Q.status==="build_mismatch")await u0(J.discoveryPath).catch(()=>{return});return}async function Q2($={}){let J=await w4($);if(J&&await H$(J,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return J;if($.endpoint?.trim())return;let Z=Y0();return await A8($.workspaceRoot??process.cwd()),await E_(Z)}async function y4($,J){let Z=new URL($),Q=J?.trim()||jA(Z);if(Z.protocol==="ws:")Z.protocol="http:";else if(Z.protocol==="wss:")Z.protocol="https:";return Z.pathname="/shutdown",Z.hash="",(await fetch(Z,{method:"POST",headers:Q?{authorization:`Bearer ${Q}`}:void 0})).ok}async function IW(){let $=Y0(),J=await K0($.discoveryPath);if(!J?.url)return!1;try{if(await y4(J.url,J.authToken))return!0}catch{}return!1}async function XZ($){if(!EW($.url))return;let J=Y0(),Z=await K0(J.discoveryPath);if(!Z?.url||!b_(Z.url,$.url))return;if(!await I_(Z.url,Z.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await IW())return;if(!await h_(Z.url))return;return await u0(J.discoveryPath).catch(()=>{return}),await Q2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var PA={};w(PA,{HubRuntimeHost:()=>h$});import{captureSdkError as HA,createSessionId as YA,HUB_CHECKPOINT_CAPABILITY as v_,HUB_COMPACTION_CAPABILITY as u_,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as c_,HUB_HOOK_CAPABILITY_PREFIX as d_,HUB_MISTAKE_LIMIT_CAPABILITY as l_,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as p_,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as r_,isHubToolExecutorName as i_}from"@cline/shared";var XA={};w(XA,{createCoreSessionSnapshot:()=>Y$,coreSessionSnapshotToRecord:()=>HZ});function x_($){return $?JSON.parse(JSON.stringify($)):void 0}function m_($){return $?JSON.parse(JSON.stringify($)):void 0}function g_($){let J=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,Q=(Array.isArray(J?.history)?J.history:[]).filter((j)=>!!j&&typeof j==="object"&&!Array.isArray(j)).flatMap((j)=>{let X=typeof j.ref==="string"?j.ref.trim():"",H=Number(j.createdAt),Y=Number(j.runCount);if(!X||!Number.isFinite(H)||!Number.isInteger(Y))return[];return[{ref:X,createdAt:H,runCount:Y,...j.kind==="stash"||j.kind==="commit"?{kind:j.kind}:{}}]}),W=Q.at(-1),f=$?.checkpointEnabled===!0?!0:void 0;if(!f&&Q.length===0)return;return{...f?{enabled:f}:{},...W?{latest:W}:{},history:Q}}function Y$($){let{session:J}=$,Z=x_(J.metadata);return{version:1,sessionId:J.sessionId,source:J.source,status:J.status,createdAt:J.startedAt,updatedAt:J.updatedAt,endedAt:J.endedAt??null,exitCode:J.exitCode??null,interactive:J.interactive,workspace:{cwd:J.cwd,root:J.workspaceRoot},model:{providerId:J.provider,modelId:J.model},capabilities:{enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams},lineage:{...J.parentSessionId?{parentSessionId:J.parentSessionId}:{},...J.parentAgentId?{parentAgentId:J.parentAgentId}:{},...J.agentId?{agentId:J.agentId}:{},...J.conversationId?{conversationId:J.conversationId}:{},isSubagent:J.isSubagent},...J.teamName?{team:{name:J.teamName}}:{},...J.prompt?{prompt:J.prompt}:{},...Z?{metadata:Z}:{},...J.messagesPath?{artifacts:{messagesPath:J.messagesPath}}:{},...$.messages?{messages:m_($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Q=g_(Z);return Q?{checkpoint:Q}:{}})()}}function HZ($){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 B8($){if(!$)return;return JSON.parse(JSON.stringify($))}var n_=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function AA($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function VA($){if(!$)return;let{userInstructionService:J,...Z}=$;return JSON.parse(JSON.stringify(Z))}function BA($){let J=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof J.agentId==="string"?J.agentId:"",conversationId:typeof J.conversationId==="string"?J.conversationId:"",iteration:typeof J.iteration==="number"?J.iteration:0,metadata:J.metadata&&typeof J.metadata==="object"&&!Array.isArray(J.metadata)?J.metadata:void 0}}function W2($,J,Z){$.manifest.push(J),$.handlers.set(J.capabilityName,Z)}function KA($,J){let Z={manifest:[],handlers:new Map};for(let W of Object.keys(J.toolExecutors??{}).filter(i_)){let f=J.toolExecutors?.[W];if(typeof f!=="function")continue;W2(Z,{kind:"toolExecutor",executor:W,capabilityName:`${p_}${W}`},async({payload:j,abortSignal:X})=>{let H=Array.isArray(j.args)?[...j.args]:[],Y={...BA(j.context),signal:X};return{result:await f(...H,Y)}})}for(let W of $?.extraTools??[])W2(Z,{kind:"tool",name:W.name,description:W.description,inputSchema:B8(W.inputSchema)??{},...W.lifecycle?{lifecycle:B8(W.lifecycle)}:{},capabilityName:`${c_}${W.name}`},async({payload:f,abortSignal:j,progress:X})=>{let H={...BA(f.context),signal:j};return{result:await W.execute(f.input,{...H,emitUpdate:(A)=>{X({update:A})}})}});let Q=$?.hooks;if(Q)for(let W of n_){let f=Q[W];if(typeof f!=="function")continue;W2(Z,{kind:"hook",name:W,capabilityName:`${d_}${W}`},async({payload:j})=>({control:await f(j.context)}))}if($?.compaction?.compact){let W=$.compaction.compact;W2(Z,{kind:"compaction",capabilityName:u_,config:AA($.compaction)},async({payload:f})=>({result:await W(f.context)}))}if($?.checkpoint?.createCheckpoint){let W=$.checkpoint.createCheckpoint;W2(Z,{kind:"checkpoint",capabilityName:v_,config:AA($.checkpoint)},async({payload:f})=>({result:await W(f.context)}))}if($?.onConsecutiveMistakeLimitReached){let W=$.onConsecutiveMistakeLimitReached;W2(Z,{kind:"mistakeLimit",capabilityName:l_},async({payload:f})=>({result:await W(f.context)}))}if($?.userInstructionService){let W=$.userInstructionService;W2(Z,{kind:"userInstructionService",capabilityName:r_},async()=>{return await W.start().catch(()=>{}),{snapshot:{records:{skill:W.listRecords("skill"),rule:W.listRecords("rule"),workflow:W.listRecords("workflow")},runtimeCommands:W.listRuntimeCommands()}}})}return Z}function RA($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let J=$.message;if(typeof J==="string"&&J.trim())return J.trim()}return}function a_($){return RA($)??"Capability request was cancelled."}function t_($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function s_($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function o_($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$,Z=typeof J.inputTokens==="number"?J.inputTokens:void 0,Q=typeof J.outputTokens==="number"?J.outputTokens:void 0;if(Z===void 0||Q===void 0)return;return{inputTokens:Z,outputTokens:Q,cacheReadTokens:typeof J.cacheReadTokens==="number"?J.cacheReadTokens:0,cacheWriteTokens:typeof J.cacheWriteTokens==="number"?J.cacheWriteTokens:0,totalCost:typeof J.totalCost==="number"?J.totalCost:0}}function GA($){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 xW($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function K1($,J){return xW($?.[J])??0}function e_($){let J=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Z=$?.totals&&typeof $.totals==="object"?$.totals:void 0,Q=$?.agent&&typeof $.agent==="object"?$.agent:void 0,W=Q?.teamRole==="teammate"||Q?.teamRole==="lead"?Q.teamRole:void 0;return{event:{type:"usage",agentId:typeof Q?.agentId==="string"?Q.agentId:void 0,conversationId:typeof Q?.conversationId==="string"?Q.conversationId:void 0,parentAgentId:typeof Q?.parentAgentId==="string"?Q.parentAgentId:void 0,inputTokens:K1(J,"inputTokens"),outputTokens:K1(J,"outputTokens"),cacheReadTokens:K1(J,"cacheReadTokens"),cacheWriteTokens:K1(J,"cacheWriteTokens"),cost:xW(J?.totalCost),totalInputTokens:K1(Z,"inputTokens"),totalOutputTokens:K1(Z,"outputTokens"),totalCacheReadTokens:K1(Z,"cacheReadTokens"),totalCacheWriteTokens:K1(Z,"cacheWriteTokens"),totalCost:xW(Z?.totalCost)},teamAgentId:typeof Q?.teamAgentId==="string"?Q.teamAgentId:void 0,teamRole:W}}function $T($){let J=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Z=$?.reason??J?.finishReason,Q=s_(Z)?Z:Z==="failed"?"error":"completed",W=o_($?.usage??J?.usage);return{type:"done",reason:Q,text:typeof $?.text==="string"?$.text:typeof J?.text==="string"?J.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof J?.iterations==="number"?J.iterations:0,usage:W}}function YZ($,J){return $.error?.message??`hub command failed: ${J}`}function S4($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function DA($){let J=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof J?.parentSessionId==="string"?J.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof J?.agentId==="string"?J.agentId:void 0),parentAgentId:typeof J?.parentAgentId==="string"?J.parentAgentId:void 0,conversationId:typeof J?.conversationId==="string"?J.conversationId:void 0,isSubagent:typeof J?.isSubagent==="boolean"?J.isSubagent:!1,source:typeof J?.source==="string"?J.source:G0.CORE,pid:typeof J?.pid==="number"?J.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:S4($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:S4($.status)==="completed"?0:S4($.status)==="failed"?1:void 0,status:S4($.status),interactive:J?.interactive===!0,provider:typeof J?.provider==="string"?J.provider:"hub",model:typeof J?.model==="string"?J.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof J?.teamName==="string"?J.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??J?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??J?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??J?.enableTeams===!0,prompt:typeof J?.prompt==="string"?J.prompt:void 0,metadata:J,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof J?.messagesPath==="string"?J.messagesPath:void 0,hookPath:typeof J?.hookPath==="string"?J.hookPath:void 0}}function G1($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$;return J.version===1&&typeof J.sessionId==="string"?JSON.parse(JSON.stringify(J)):void 0}function JT($){let J=G1($?.snapshot);if(J)return HZ(J);let Z=$?.session;return Z?DA(Z):void 0}function FA($,J,Z){let Q=Z?.workspaceRoot?.trim()||J.config.workspaceRoot||J.config.cwd;return M0.parse({version:1,session_id:$,source:J.source??G0.CORE,pid:process.pid,started_at:new Date(Z?.createdAt??Date.now()).toISOString(),status:S4(Z?.status),interactive:J.interactive===!0,provider:J.config.providerId,model:J.config.modelId,cwd:Z?.cwd?.trim()||J.config.cwd,workspace_root:Q,team_name:J.config.teamName,enable_tools:J.config.enableTools,enable_spawn:J.config.enableSpawnAgent,enable_teams:J.config.enableAgentTeams,prompt:J.prompt?.trim()||void 0,metadata:J.sessionMetadata&&Object.keys(J.sessionMetadata).length>0?J.sessionMetadata:void 0})}function UA($,J){return M0.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??J.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class h${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new O4;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,J){this.clientContext=J,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd},this.defaultCapabilities=R0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Z)=>this.requestPendingPromptsList(Z),update:(Z)=>this.requestPendingPromptUpdate(Z),delete:(Z)=>this.requestPendingPromptDelete(Z)},this.client=this.createClient($.url)}createClient($){return new e0({...this.clientOptions,url:$})}async replaceClient($){let J=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(J.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!jZ($,"session.create"))return!1;let J=await XZ({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!J)return!1;return await this.replaceClient(J),!0}registerPlannedSession($,J,Z){if(this.sessionCapabilities.set($,J),Z.size>0)this.sessionClientContributionHandlers.set($,Z);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let J=this.resolveCapabilities($),Z=KA($.localRuntime,J),Q=$.config.sessionId?.trim()||YA(),W=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:B8({...$.config,sessionId:Q}),metadata:{...$.sessionMetadata??{},source:$.source??G0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Z.manifest.length>0?{clientContributions:Z.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:B8($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(Q,J,Z.handlers);let f;try{f=await W()}catch(Y){if(this.cleanupPlannedSession(Q),await this.recoverLocalHubStartupDeadlock(Y)){this.registerPlannedSession(Q,J,Z.handlers);try{f=await W()}catch(A){throw this.cleanupPlannedSession(Q),A}}else throw Y}let j=G1(f.payload?.snapshot),X=f.payload?.session,H=(j?.sessionId??X?.sessionId)?.trim();if(!H)throw this.cleanupPlannedSession(Q),Error("Hub runtime did not return a session id.");if(H!==Q)this.cleanupPlannedSession(Q),this.registerPlannedSession(H,J,Z.handlers);return{sessionId:H,manifest:j?UA(j,$):FA(H,$,X),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let J=$.sessionId.trim();if(!J)throw Error("sessionId is required");let Z=$.restore?.messages!==!1;if(Z&&!$.start)throw Error("start is required when restore.messages is true");let Q=$.start,W=Q?this.resolveCapabilities(Q):void 0,f=Q?KA(Q.localRuntime,W??{}):{manifest:[],handlers:new Map},j=Q?Q.config.sessionId?.trim()||YA():void 0;if(j&&W)this.sessionCapabilities.set(j,W);if(j&&f.handlers.size>0)this.sessionClientContributionHandlers.set(j,f.handlers),this.ensureSessionSubscription(j);let X;try{X=await this.client.command("session.restore",{sessionId:J,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Q?{workspaceRoot:Q.config.workspaceRoot?.trim()||Q.config.cwd,cwd:Q.config.cwd??$.cwd,sessionConfig:B8({...Q.config,sessionId:j}),metadata:{...Q.sessionMetadata??{},source:Q.source??G0.CORE,provider:Q.config.providerId,model:Q.config.modelId,enableTools:Q.config.enableTools,enableSpawn:Q.config.enableSpawnAgent,enableTeams:Q.config.enableAgentTeams,teamName:Q.config.teamName,prompt:Q.prompt,interactive:Q.interactive===!0},runtimeOptions:{...f.manifest.length>0?{clientContributions:f.manifest}:{},...Q.localRuntime?.configExtensions?{configExtensions:Q.localRuntime.configExtensions}:{}},toolPolicies:B8(Q.toolPolicies)}:{}},J)}catch(K){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw K}if(!X.ok){let K=typeof X.payload?.error==="string"?X.payload.error:"session.restore failed";if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error(K)}let H=G1(X.payload?.snapshot),Y=X.payload?.session,A=(H?.sessionId??Y?.sessionId)?.trim();if(Z&&!A){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error("Hub checkpoint restore returned no session id")}if(A&&j&&A!==j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);if(A&&W)this.sessionCapabilities.set(A,W);if(A&&f.handlers.size>0)this.sessionClientContributionHandlers.set(A,f.handlers);if(A)this.ensureSessionSubscription(A);let V=Array.isArray(X.payload?.messages)?X.payload.messages:void 0,B=X.payload?.checkpoint;if(!B)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:A,startResult:A?{sessionId:A,manifest:H?UA(H,Q??{}):FA(A,Q??{},Y),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:V,checkpoint:B}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let J=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(J.payload?.prompts)?J.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let J=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(J.payload?.prompts)?J.payload.prompts:[],prompt:J.payload?.prompt,updated:J.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let J=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(J.payload?.prompts)?J.payload.prompts:[],prompt:J.payload?.prompt,removed:J.payload?.removed===!0}}async getAccumulatedUsage($){let J=await this.client.command("session.get",{includeSnapshot:!0},$),Z=G1(J.payload?.snapshot);if(Z){let j=Z.usage?{...Z.usage}:void 0,X=Z.aggregateUsage?{...Z.aggregateUsage}:void 0;return j||X?{usage:j,aggregateUsage:X}:void 0}let Q=J.payload?.session,W=GA(Q?.usage),f=GA(Q?.aggregateUsage);return W||f?{usage:W,aggregateUsage:f}:void 0}async abort($,J){await this.client.command("run.abort",{sessionId:$,reason:RA(J)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,J]of this.sessionSubscriptions){J();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let J=await this.client.command("session.get",void 0,$);return JT(J.payload)}async listSessions($=100){let J=await this.client.command("session.list",{limit:$}),Z=Array.isArray(J.payload?.snapshots)?J.payload.snapshots.flatMap((W)=>{let f=G1(W);return f?[HZ(f)]:[]}):[];if(Z.length>0)return Z;return(J.payload?.sessions??[]).map(DA)}async listSettings($){let J=await this.client.command("settings.list",VA($));if(!J.ok)throw Error(YZ(J,"settings.list"));return J.payload?.snapshot}async toggleSetting($){let J=await this.client.command("settings.toggle",VA($));if(!J.ok)throw Error(YZ(J,"settings.toggle"));return{snapshot:J.payload?.snapshot,changedTypes:Array.isArray(J.payload?.changedTypes)?J.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,J){let Z={...J.metadata??{}};if(typeof J.prompt==="string")Z.prompt=J.prompt;if(typeof J.title==="string")Z.title=J.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Z})).ok}}async readSessionMessages($){let J=$.trim();if(!J)return[];let Z=await this.client.command("session.messages",{sessionId:J},J);if(!Z.ok)throw HA(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(YZ(Z,"session.messages")),severity:Z.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:J,errorCode:Z.error?.code,runtimeAddress:this.runtimeAddress}}),Error(YZ(Z,"session.messages"));let Q=Z.payload?.messages;return Array.isArray(Q)?Q:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,J){return this.events.subscribe($,J)}ensureSessionSubscription($){let J=$.trim();if(!J||this.sessionSubscriptions.has(J))return;let Z=this.client.subscribe((Q)=>{this.handleHubEvent(Q)},{sessionId:J});this.sessionSubscriptions.set(J,typeof Z==="function"?Z:()=>{})}disposeSessionSubscription($){let J=$.trim();if(!J)return;this.sessionSubscriptions.get(J)?.(),this.sessionSubscriptions.delete(J),this.agentDoneEmittedForCurrentRunBySession.delete(J)}resolveCapabilities($){return R0(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:$T($.payload)}})}handleHubEvent($){let J=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Z)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Z,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Z)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Z,$)});return}if(!J)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(J);let Z=G1($.payload?.snapshot),Q=$.payload?.session;if(Z)this.events.emit({type:"session_snapshot",payload:{sessionId:J,snapshot:Z}});this.events.emit({type:"status",payload:{sessionId:J,status:Q?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"assistant.delta":{let Z=typeof $.payload?.text==="string"?$.payload.text:"";if(!Z)return;this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_start",contentType:"text",text:Z}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Z=typeof $.payload?.text==="string"?$.payload.text:"",Q=$.payload?.redacted===!0;if(!Z&&!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_start",contentType:"reasoning",reasoning:Z,redacted:Q}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:J,payload:$.payload});return}case"usage.updated":{let Z=e_($.payload);this.events.emit({type:"agent_event",payload:{sessionId:J,event:Z.event,teamAgentId:Z.teamAgentId,teamRole:Z.teamRole}});return}case"tool.started":{let Z=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Z&&this.pendingApprovalToolCallIds.delete(Z))return;this.emitToolCallContentStart({sessionId:J,toolCallId:Z,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Z=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Z)this.pendingApprovalToolCallIds.delete(Z);this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_end",contentType:"tool",toolCallId:Z,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 Z=G1($.payload?.snapshot),Q=$.payload?.session;if(Z)this.events.emit({type:"session_snapshot",payload:{sessionId:J,snapshot:Z}});this.events.emit({type:"status",payload:{sessionId:J,status:Q?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:J,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Z=$.payload?.prompt;if(!Z)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:J,id:Z.id,prompt:Z.prompt,delivery:Z.delivery,attachmentCount:Z.attachmentCount}});return}case"run.completed":case"run.failed":case"run.aborted":{let Z=G1($.payload?.snapshot),Q=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:J,payload:{...$.payload,reason:Q}}),Z?.interactive===!0&&Q0(Z.status))return;this.events.emit({type:"ended",payload:{sessionId:J,reason:Q,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,J,Z){try{HA(this.telemetry,{component:"core",operation:$,error:J,severity:"warn",handled:!0,context:{event:Z.event,sessionId:Z.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let J=$.sessionId?.trim();if(!J)return;let Z=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Z&&Z!==this.client.getClientId())return;let Q=typeof $.payload?.requestId==="string"?$.payload.requestId:"",W=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!Q)return;let f=this.sessionClientContributionHandlers.get(J)?.get(W);if(!f){await this.client.command("capability.respond",{requestId:Q,ok:!1,error:`No client contribution handler registered for capability ${W} in session ${J}.`},J).catch(()=>{});return}let j=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},X=new AbortController;this.activeCapabilityAbortControllers.set(Q,X);let H=(Y)=>{this.client.command("capability.progress",{requestId:Q,payload:Y},J).catch((A)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",A,$)})};try{let Y=await f({payload:j,abortSignal:X.signal,progress:H});if(X.signal.aborted)return;await this.client.command("capability.respond",{requestId:Q,ok:!0,payload:Y},J)}catch(Y){if(X.signal.aborted)return;await this.client.command("capability.respond",{requestId:Q,ok:!1,error:Y instanceof Error?Y.message:String(Y)},J)}finally{this.activeCapabilityAbortControllers.delete(Q)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let J=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!J)return;let Z=this.activeCapabilityAbortControllers.get(J);if(!Z)return;Z.abort(a_($.payload.error))}async handleApprovalRequested($){let J=$.sessionId?.trim();if(!J)return;let Z=this.sessionCapabilities.get(J)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Z)return;let Q=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",W=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",f=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!Q||!W||!f)return;let j=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},X=t_($.payload?.inputJson);this.pendingApprovalToolCallIds.add(W),this.emitToolCallContentStart({sessionId:J,toolCallId:W,toolName:f,toolInput:X});let H=await Promise.resolve(Z({sessionId:J,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:J,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:W,toolName:f,input:X,policy:j})).catch((Y)=>({approved:!1,reason:Y instanceof Error?Y.message:`Tool approval request failed: ${String(Y)}`}));await this.client.command("approval.respond",{approvalId:Q,approved:H.approved,reason:H.reason},J).catch(()=>{})}}var LA={};w(LA,{RemoteRuntimeHost:()=>K8});class K8 extends h${constructor($){super({url:B1($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var zA={};w(zA,{SqliteSessionStore:()=>V$});import{existsSync as ZT,mkdirSync as QT}from"node:fs";import{join as WT}from"node:path";import{asBool as C4,asOptionalString as A$,asString as b$,ensureSessionSchema as fT,loadSqliteDb as jT,nowIso as AZ,toBoolInt as E4}from"@cline/shared/db";import{resolveDbDataDir as XT}from"@cline/shared/storage";class V${sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??XT()}init(){this.getRawDb()}ensureSessionsDir(){if(!ZT(this.sessionsDirPath))QT(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return WT(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=jT(this.sessionDbPath());return fT($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,J=[]){return this.getRawDb().prepare($).run(...J)}queryOne($,J=[]){return this.getRawDb().prepare($).get(...J)??void 0}queryAll($,J=[]){return this.getRawDb().prepare($).all(...J)}create($){let J=AZ();this.run(`INSERT OR REPLACE INTO sessions (
478
+ WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,f,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,f){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(f,R0(),$)}attachReportPathToRun($,f){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(f,R0(),$)}}class hJ{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new SJ({dbPath:$.dbPath});let f=$.specs;this.reconciler=new OQ({store:this.store,specs:f}),this.materializer=new NJ({store:this.store}),this.eventIngress=new BQ({store:this.store,logger:$.logger}),this.runner=new MJ({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:f,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new TQ({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(J)=>{let Z=$.logger;if(Z)if(Z.error)Z.error("cron.watcher.failed",{error:J});else Z.log("cron.watcher.failed",{error:J})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}var JA={};w(JA,{manifestToSessionRecord:()=>A5,listSessionHistoryFromBackend:()=>hQ,listSessionHistory:()=>V5,hydrateSessionHistory:()=>fA});import{readdir as hz,readFile as oY}from"node:fs/promises";import{join as eY}from"node:path";import{formatDisplayUserInput as Cz,normalizeUserInput as Ez}from"@cline/shared";import{resolveSessionDataDir as $A}from"@cline/shared/storage";import{existsSync as qz}from"node:fs";import{readFile as wz}from"node:fs/promises";import{formatDisplayUserInput as nY}from"@cline/shared";class CJ{listeners=new Set;subscribe($,f){let J={listener:$,sessionId:f?.sessionId?.trim()||void 0};return this.listeners.add(J),()=>{this.listeners.delete(J)}}emit($){let f=$.payload.sessionId?.trim();for(let J of this.listeners){if(J.sessionId&&J.sessionId!==f)continue;J.listener($)}}get size(){return this.listeners.size}}async function P1($){let f=$?.trim();if(!f||!qz(f))return[];try{let J=(await wz(f,"utf8")).trim();if(!J)return[];let Z=JSON.parse(J);if(Array.isArray(Z))return aY(Z);if(Z&&typeof Z==="object"&&!Array.isArray(Z)){let Q=Z.messages;if(Array.isArray(Q))return aY(Q)}return[]}catch{return[]}}function Sz($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:nY($.content)};return{...$,content:$.content.map((f)=>{if(f.type!=="text"||typeof f.text!=="string")return f;return{...f,text:nY(f.text)}})}}function aY($){return $.map(Sz)}function qQ($){return $?{...$}:void 0}async function tY($,f){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await f.queueSpawnRequest($);let Z=await f.upsertSubagentSessionFromHook($);if(!Z)return;await f.appendSubagentHookAudit(Z,$),await f.applySubagentStatus(Z,$)}function EJ($){if(typeof $!=="string")return;let f=$.trim();return f.length>0?f:void 0}function u0($){let f=EJ($);if(!f)return;return f.toLowerCase()==="unknown"?void 0:f}function Y5($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function bz($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function SQ($){let f=$??200;return Number.isFinite(f)?Math.max(0,Math.floor(f)):200}function kz($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function Iz($){return $.isSubagent!==!0&&!EJ($.parentSessionId)}function xz($){let f=$.match(/\d{13,}/g);if(!f||f.length===0)return 0;let J=0;for(let Z of f){let Q=Number.parseInt(Z,10);if(Number.isFinite(Q)&&Q>J)J=Q}return J}function A5($){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 mz($){let f=SQ($);if(f===0)return[];let J=$A(),Q=(await hz(J,{withFileTypes:!0}).catch(()=>[])).filter((j)=>j.isDirectory()).map((j)=>({entry:j,recency:xz(j.name.trim())})).sort((j,X)=>X.recency-j.recency||X.entry.name.localeCompare(j.entry.name));return(await Promise.all(Q.map(async({entry:j})=>{let X=j.name.trim();if(!X)return;let H=eY(J,X,`${X}.json`),Y=await oY(H,"utf8").catch(()=>{return});if(!Y)return;let A;try{A=JSON.parse(Y)}catch{return}let V=M0.safeParse(A);if(!V.success)return;return A5(V.data)}))).filter((j)=>Boolean(j)).sort((j,X)=>X.startedAt.localeCompare(j.startedAt)).slice(0,f)}async function gz($,f,J){let Z=SQ(f);if(Z===0)return await $.listSessions(0),[];let Q=J.includeSubagents?Z:kz(Z),W=await $.listSessions(Q);return(J.includeSubagents?W:W.filter(Iz)).slice(0,Z)}function vz($){if(typeof $==="string")return $.trim();let f=[];for(let J of $){if(!J||typeof J!=="object")continue;let Z=J;if(Z.type!=="text")continue;let Q=Z.text?.trim();if(Q)f.push(Q)}return f.join(`
479
+ `).trim()}function sY($){return $.replace(/\s+/g," ").trim()}function uz($,f){if($.length<=f)return $;return`${$.slice(0,Math.max(0,f-3)).trimEnd()}...`}function cz($){for(let f of["user","assistant"])for(let J of $){if(J.role!==f)continue;let Z=sY(vz(J.content));if(!Z)continue;let Q=f==="user"?sY(Cz(Z)):Z,W=Ez(Q.split(`
480
+ `)[0]??Q);return uz(W,50)}return}function dz($){let f=0;for(let J of $)f+=Y5(J.metrics?.cost)??0;return f}function lz($){let f,J;for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(!f)f=u0(Q.modelInfo?.provider);if(!J)J=u0(Q.modelInfo?.id);if(f&&J)break}return{provider:f,model:J}}function pz($){return u0($?.provider)??u0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function rz($){return u0($?.model)??u0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function wQ($,f){let J=bz($.metadata),Z=EJ(f?.title)??EJ(J?.title),Q=Y5(f?.totalCost)??Y5(J?.totalCost),W=J||Z!==void 0||Q!==void 0?{...J??{},...Z!==void 0?{title:Z}:{},...Q!==void 0?{totalCost:Q}:{}}:void 0;return{...$,provider:u0(f?.provider)??u0($.provider)??pz(J)??"",model:u0(f?.model)??u0($.model)??rz(J)??"",metadata:W}}function iz($){let f=$.content;if(!Array.isArray(f))return!1;return f.some((J)=>!!J&&typeof J==="object"&&J.type==="tool-call")}function nz($,f){if($.status!=="running"||$.interactive!==!0)return!1;let J=f.at(-1);return J?.role==="assistant"&&!iz(J)}async function az($,f){return await Promise.all(f.map(async(J)=>{if(J.status!=="running"||J.interactive!==!0)return J;let Z=await $.readSessionMessages(J.sessionId);return nz(J,Z)?{...J,status:"idle"}:J}))}async function fA($,f){return await Promise.all(f.map(async(J)=>{let Z=wQ(J),Q=Boolean(EJ(Z.metadata?.title)),W=Boolean(u0(Z.provider)),j=Boolean(u0(Z.model)),X=Y5(Z.metadata?.totalCost),H=X!==void 0&&X>0;if(Q&&W&&j&&H)return Z;let Y=await $.readSessionMessages(J.sessionId);if(Y.length===0)return Z;let A=lz(Y),V=dz(Y);return wQ(J,{title:Q?void 0:cz(Y),provider:W?void 0:A.provider,model:j?void 0:A.model,totalCost:H||V<=0?void 0:V})}))}async function V5($,f={}){let J=SQ(f.limit),Z=f.includeSubagents===!0,Q=await gz($,J,{includeSubagents:Z}),W=f.includeManifestFallback===!0&&Q.length<J?await mz(Math.min(Math.max(J*2,100),500)):[],j=new Map;for(let Y of[...Q,...W]){if(j.has(Y.sessionId))continue;j.set(Y.sessionId,Y)}let X=W.length===0?Q:Array.from(j.values()).sort((Y,A)=>A.startedAt.localeCompare(Y.startedAt)).slice(0,J),H=await az($,X);if(f.hydrate===!1)return H.map((Y)=>wQ(Y));return await fA($,H)}async function tz($){let f=$.trim();if(!f)return;let J=eY($A(),f,`${f}.json`),Z=await oY(J,"utf8").catch(()=>{return});if(!Z)return;try{let Q=M0.safeParse(JSON.parse(Z));return Q.success?Q.data.messages_path:void 0}catch{return}}async function hQ($,f={}){let J=new Map;return await V5({listSessions:async(Q)=>{let W=await $.listSessions(Q);J.clear();for(let j of W)J.set(j.sessionId,j);return W.map(O8)},readSessionMessages:async(Q)=>{let W=J.get(Q)?.messagesPath??await tz(Q);return await P1(W)}},f)}var jV={};w(jV,{resolveSessionBackend:()=>BW,createRuntimeHost:()=>M2});import{captureSdkError as QV}from"@cline/shared";import{createSessionId as vO,resolveHubCommandTimeoutMs as uO}from"@cline/shared";import{spawn as RO}from"node:child_process";import{closeSync as DO,mkdirSync as LO,openSync as _O}from"node:fs";import{basename as zO,dirname as OO,join as TO}from"node:path";import{fileURLToPath as NO}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as MO,isHubDaemonProcess as PA,withResolvedClineBuildEnv as yO}from"@cline/shared";import{createHash as sz,randomBytes as oz}from"node:crypto";import{existsSync as ez}from"node:fs";import{chmod as $O,mkdir as CQ,readFile as XA,rm as EQ,writeFile as HA}from"node:fs/promises";import{dirname as YA,join as bQ}from"node:path";import{resolveClineDataDir as kJ,resolveClineDir as AA}from"@cline/shared/storage";var QA="0.0.43";var bJ={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:QA,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^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"},devDependencies:{"@types/ws":"^8.18.1"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var fO="CLINE_HUB_DISCOVERY_PATH",JO="CLINE_HUB_BUILD_ID",WA=30000,ZO=15000,QO=100;function WO($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function jO($){return sz("sha256").update($).digest("hex").slice(0,12)}function XO($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(f){return f instanceof Error&&"code"in f?String(f.code)==="EPERM":!1}}function B5(){return oz(32).toString("hex")}function HO($){return new Promise((f)=>setTimeout(f,$))}function YO($){return`${$}.lock`}async function AO($){try{let f=JSON.parse(await XA(bQ($,"owner.json"),"utf8"));if(typeof f.pid!=="number"||typeof f.acquiredAt!=="string")return;return{pid:f.pid,acquiredAt:f.acquiredAt}}catch{return}}async function jA($){await EQ($,{recursive:!0,force:!0}).catch(()=>{return})}function F1(){return process.env[JO]?.trim()||String(bJ.version)}function I$($=process.argv[1]?.trim()||process.cwd()){let f=`hub-${jO($)}`,J=process.env[fO]?.trim()||bQ(kJ(),"locks","hub","owners",`${WO(f)}.json`);return{ownerId:f,discoveryPath:J}}function VA($=`hub-${Date.now().toString(36)}`){return I$($)}async function K0($){try{let f=JSON.parse(await XA($,"utf8"));if(typeof f.hubId!=="string"||typeof f.protocolVersion!=="string"||typeof f.authToken!=="string"||typeof f.host!=="string"||typeof f.port!=="number"||typeof f.url!=="string"||typeof f.startedAt!=="string"||typeof f.updatedAt!=="string")return;return{hubId:f.hubId,protocolVersion:f.protocolVersion,coreVersion:typeof f.coreVersion==="string"?f.coreVersion:void 0,buildId:typeof f.buildId==="string"?f.buildId:void 0,authToken:f.authToken,host:f.host,port:f.port,url:f.url,pid:typeof f.pid==="number"?f.pid:void 0,startedAt:f.startedAt,updatedAt:f.updatedAt}}catch{return}}async function K5($,f){await CQ(YA($),{recursive:!0}),await EQ($,{force:!0}).catch(()=>{return}),await HA($,`${JSON.stringify(f,null,2)}
481
+ `,{encoding:"utf8",mode:384}),await $O($,384)}async function c0($){await EQ($,{force:!0}).catch(()=>{return})}async function G5($,f){let J=YO($);await CQ(YA(J),{recursive:!0});let Z=Date.now()+ZO;while(!0)try{await CQ(J,{recursive:!1}),await HA(bQ(J,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
482
+ `,"utf8");try{return await f()}finally{await jA(J)}}catch(Q){if((Q instanceof Error&&"code"in Q?String(Q.code):"")!=="EEXIST")throw Q;let j=await AO(J),X=j?Date.now()-Date.parse(j.acquiredAt):WA+1;if(!j||!XO(j.pid)||X>WA){await jA(J);continue}if(Date.now()>=Z)throw Error(`Timed out waiting for hub startup lock ${J}`);await HO(QO)}}async function A$($){try{let f=await fetch(kQ($));if(!f.ok)return;return await f.json()}catch{return}}function $$($,f,J="/hub"){return new URL(`ws://${$}:${f}${J}`).toString()}function kQ($){let f=new URL($);return f.protocol=f.protocol==="wss:"?"https:":"http:",f.pathname="/health",f.search="",f.toString()}function BA($){return ez($)}import{CLINE_HUB_DEV_PORT as VO,CLINE_HUB_PORT as BO,resolveClineBuildEnv as KO}from"@cline/shared";var GO="CLINE_HUB_HOST",PO="CLINE_HUB_PORT",FO="CLINE_HUB_PATHNAME",IQ="127.0.0.1",xQ=BO,mQ="/hub";function KA($){return KO($)==="development"?VO:xQ}function gQ($={}){return($.env??process.env)[GO]?.trim()||IQ}function U2($={}){let J=($.env??process.env)[PO]?.trim();if(!J)return KA($);let Z=Number.parseInt(J,10);if(!Number.isInteger(Z)||Z<1||Z>65535)return KA($);return Z}function vQ($={}){return($.env??process.env)[FO]?.trim()||mQ}function d0($={},f={}){return{host:$.host??gQ(f),port:$.port??U2(f),pathname:$.pathname??vQ(f)}}var UO="shared:cline";function GA($){let f=h$($.trim());return I$(`workspace:${f||$.trim()}`)}function Y0($=UO){return I$($)}var qO=8000,wO=200,SO=3000,hO=100,CO=[100,250,500,1000,2000],EO="--cline-hub-daemon";function bO($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function kO(){try{let $=TO(kJ(),"logs","hub-daemon.log");return LO(OO($),{recursive:!0}),{fd:_O($,"a"),logPath:$}}catch{return}}function IJ($){let f=$.buildId?.trim();return!!f&&f===F1()}async function Af($){try{return await A$($)}catch{return}}async function IO($,f){let J=Date.now()+f;while(Date.now()<J){if(!(await Af($))?.url)return!0;await new Promise((Q)=>setTimeout(Q,hO))}return!1}async function xJ($,f){if(IJ($))return;if(await mJ($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}await IO($.url,SO),await c0(f).catch(()=>{return})}function xO(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return NO(new URL(`./entry.${$}`,import.meta.url))}function mO($,f){let J=xO(),Z=process.execPath?.trim();if(!Z)throw Error("unable to resolve runtime executable for hub daemon");let Q=zO(Z).toLowerCase().includes("bun"),W=J.startsWith("/$bunfs/"),j=Q&&J.toLowerCase().endsWith(".ts"),X=W?[EO]:[...j?["--conditions=development"]:[],J];return{launcher:Z,args:[...X,"--cwd",$,...bO(f)],cwd:$,env:{...yO(process.env),CLINE_NO_INTERACTIVE:"1",[MO]:"1"}}}function gO($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let J="message"in $?$.message:void 0;return typeof J==="string"&&J.includes("ETXTBSY")}function uQ($,f={}){if(PA())return;let J=mO($,f),Z=kO();try{RO(J.launcher,J.args,{detached:!0,stdio:Z?["ignore",Z.fd,Z.fd]:"ignore",env:J.env,cwd:J.cwd}).unref()}finally{if(Z)DO(Z.fd)}}async function R2($,f={}){for(let J=0;;J++)try{uQ($,f);return}catch(Z){let Q=CO[J];if(!gO(Z)||Q===void 0)throw Z;await new Promise((W)=>setTimeout(W,Q))}}function P5($,f={}){if(PA())return;let J=Y0(),Z=f.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=d0(f),W=$$(Q.host,Q.port,Q.pathname);K0(J.discoveryPath).then(async(j)=>{if(j?.url){let A=await Af(j.url);if(A?.url&&IJ(A)&&await V$(A.url,{authToken:j.authToken}))return;if(A?.url)await xJ({...A,authToken:j.authToken},J.discoveryPath);else await c0(J.discoveryPath).catch(()=>{return})}let X=await Af(W);if(X?.url)await xJ(X,J.discoveryPath);let Y=!Z&&Q.port!==0?{...Q,port:0}:Q;await R2($,Y)}).catch(()=>{})}async function FA($,f={}){let J=Y0(),Z=f.host!==void 0||f.port!==void 0||f.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=f.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=d0(f),j=$$(W.host,W.port,W.pathname),X=(K)=>{if(!Z)U1(K.url,K.authToken);return K},H=await K0(J.discoveryPath);if(H?.url){let K=await Af(H.url);if(K?.url&&IJ(K)&&await V$(K.url,{authToken:H.authToken}))return X({url:K.url,authToken:H.authToken});if(K?.url)await xJ({...K,authToken:H.authToken},J.discoveryPath);else await c0(J.discoveryPath).catch(()=>{return})}let Y=await Af(j);if(Y?.url)await xJ(Y,J.discoveryPath);let V=!Q&&W.port!==0?{...W,port:0}:W;await R2($,V);let B=Date.now()+qO;while(Date.now()<B){let K=await K0(J.discoveryPath);if(K?.url){let R=await Af(K.url);if(R?.url&&IJ(R)&&await V$(R.url,{authToken:K.authToken}))return X({url:R.url,authToken:K.authToken})}let G=await Af(j);if(G?.url&&!IJ(G))await xJ(G,J.discoveryPath);await new Promise((R)=>setTimeout(R,wO))}throw Error("Timed out waiting for detached hub startup.")}function cO(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function _A($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((f)=>Buffer.from(f))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return _A($.data);return String($)}function dO($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function UA($){let f=$,J=dO(f.reason);return new O0("hub_connection_closed",f.code||J?`Hub connection closed (code=${f.code??0}${J?`, reason=${J}`:""})`:cQ,{closeCode:f.code,closeReason:J||void 0})}function lO($,f){if($ instanceof O0)return $;if($ instanceof Error)return new O0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new O0("hub_connect_failed",$.error.message);let J=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(J)return new O0("hub_connect_failed",J);let Z=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new O0("hub_connect_failed",Z?`Failed to connect to hub at ${f.toString()} (${Z} event before socket open).`:`Failed to connect to hub at ${f.toString()}.`)}var pO=8000,rO=200,RA="*",DA=8000,iO="cline-hub-auth.",zA=new Map,OA=new Set,nO=3000,aO=3000,tO=100,cQ="Hub connection closed",sO=250,oO=5000,LA=0.5;class O0 extends Error{code;details;constructor($,f,J){super(f);this.code=$;this.details=J;this.name="HubTransportError"}}function pQ($){return $ instanceof O0}class D2 extends Error{command;code;constructor($,f,J){super(J);this.command=$;this.code=f;this.name="HubCommandError"}}function F5($,f){return $ instanceof D2&&$.code==="hub_command_timeout"&&(f===void 0||$.command===f)}function TA($){let f=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),f)return f;let J=rQ($.toString());return J?zA.get(J):void 0}function eO($){try{let J=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return J==="localhost"||J==="127.0.0.1"||J==="::1"}catch{return!1}}function rQ($){if(!eO($))return;let f=new URL(R1($));return f.search="",f.hash="",f.toString()}function dQ($){let f=rQ($);return!!f&&OA.has(f)}function U1($,f){let J=rQ($);if(J){if(OA.add(J),f?.trim())zA.set(J,f)}return $}class f${options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new O0("hub_connection_closed",cQ);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),f=this.options.authToken?.trim()||TA($);$.hash="";let Z=new(cO())($.toString(),f?[`${iO}${f}`]:void 0);this.socket=Z;let Q=!1;this.connectPromise=new Promise((W,j)=>{let X=!1,H=setTimeout(()=>{if(X)return;X=!0,Q=!0,this.lastCloseError=new O0("hub_connect_timeout",`Timed out connecting to hub after ${DA}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Z.close()}catch{}j(this.lastCloseError)},DA);Z.addEventListener("open",()=>{if(X)return;X=!0,clearTimeout(H),W()}),Z.addEventListener("error",(Y)=>{if(X)return;X=!0,clearTimeout(H),this.lastCloseError=lO(Y,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)}),Z.addEventListener("close",(Y)=>{if(X)return;if(X=!0,clearTimeout(H),!Q)this.lastCloseError=UA(Y),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)})}),Z.addEventListener("message",(W)=>{this.handleFrame(JSON.parse(_A(W)))}),Z.addEventListener("close",(W)=>{if(this.socket!==Z)return;if(!Q)this.lastCloseError=UA(W),this.sawSocketClose=!0;this.registered=!1;for(let j of this.pendingReplies.values())j.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let W of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(W));this.reconnectAttempt=0}subscribe($,f){let J=f?.sessionId?.trim()||void 0,Z={listener:$,sessionId:J};return this.listeners.add(Z),this.adjustSubscriptionCount(J,1),()=>{if(!this.listeners.delete(Z))return;this.adjustSubscriptionCount(J,-1)}}async command($,f,J,Z){let Q=0,W=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,f,J,Z)}catch(j){if(!W||Q>=1||!await this.recoverLocalHubTransport(j))throw j;Q+=1}}async commandOnce($,f,J,Z){await this.connect();let Q=vO("hubreq_"),W=uO($,Z?.timeoutMs),j=new Promise((H,Y)=>{let A=W===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(Q))return;Y(new D2($,"hub_command_timeout",`Hub command ${$} timed out after ${W}ms (hub=${this.currentUrl}, requestId=${Q}, 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(Q,{resolve:(V)=>{if(A)clearTimeout(A);H(V)},reject:(V)=>{if(A)clearTimeout(A);Y(V)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:Q,clientId:this.clientId,sessionId:J,timeoutMs:W,payload:f}})}catch(H){throw this.pendingReplies.delete(Q),H}let X=await j;if(!X.ok){if(X.error?.code===jf){let H=J??(typeof f?.sessionId==="string"?f.sessionId:void 0);throw new b$(H,X.error.message)}throw new D2($,X.error?.code,X.error?.message??`Hub command ${$} failed`)}return X}async recoverLocalHubTransport($){if(!dQ(this.currentUrl)||!pQ($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let f=await Vf({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!f)return!1;return this.currentUrl=f,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(sO*2**this.reconnectAttempt,oO),f=Math.round($*(1-LA)+Math.random()*$*LA);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},f)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!dQ(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await Vf({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 O0("hub_connection_closed",cQ),this.sawSocketClose=!1;for(let f of this.pendingReplies.values())f.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new O0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,f){this.sendFrame({kind:$,clientId:this.clientId,...f?{sessionId:f}:{}})}adjustSubscriptionCount($,f){let J=this.subscriptionKeyForSessionId($),Z=(this.subscriptionCounts.get(J)??0)+f;if(Z<=0){if(this.subscriptionCounts.delete(J),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(f<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(J,Z),f>0&&Z===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??RA}subscriptionSessionIdFromKey($){return $===RA?void 0:$}handleFrame($){switch($.kind){case"reply":{let f=$.envelope.requestId;if(!f)return;let J=this.pendingReplies.get(f);if(!J)return;this.pendingReplies.delete(f),J.resolve($.envelope);return}case"event":for(let f of this.listeners){if(f.sessionId&&f.sessionId!==$.envelope.sessionId?.trim())continue;f.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function R1($){let f=new URL($);if(f.protocol==="http:")f.protocol="ws:";else if(f.protocol==="https:")f.protocol="wss:";return f.toString()}async function V$($,f){let J=new f$({url:$,authToken:f?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:f?.workspaceRoot,cwd:f?.cwd});try{return await J.connect(),!0}catch{return!1}finally{J.close()}}async function lQ($,f){let J=R1($),Z=await A$(J);if(!Z)return{status:"unreachable",url:J};let Q=F1(),W=Z.buildId?.trim();if(!W||W!==Q)return{status:"build_mismatch",url:J};if(f?.verifyConnection===!0&&!await V$(J,{workspaceRoot:f.workspaceRoot,cwd:f.cwd,authToken:f.authToken}))return{status:"unreachable",url:J};return{status:"compatible",url:J}}async function $T($){let f=Date.now()+pO;while(Date.now()<f){let J=await K0($.discoveryPath);if(J?.url){let Z=await lQ(J.url,{verifyConnection:!0,authToken:J.authToken});if(Z.status==="compatible")return U1(Z.url,J.authToken)}await new Promise((Z)=>setTimeout(Z,rO))}return}async function fT($){let f=Date.now()+aO;while(Date.now()<f){if(!(await A$($).catch(()=>{return}))?.url)return!0;await new Promise((Z)=>setTimeout(Z,tO))}return!1}function JT($,f){try{return R1($)===R1(f)}catch{return!1}}function ZT($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((J)=>{if(!J||typeof J!=="object")return!1;let Z=J;if(Z.status==="running"||Z.status==="idle"||Z.status==="pending")return!0;return Array.isArray(Z.participants)&&Z.participants.length>0})}async function QT($,f,J){let Z=new f$({url:$,authToken:f,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd});try{let Q=await Z.command("session.list",{limit:500},void 0,{timeoutMs:nO});return!ZT(Q.payload)}catch{return!1}finally{await Z.dispose().catch(()=>{return})}}async function gJ($={}){if($.endpoint?.trim()){let Q=await lQ($.endpoint);return Q.status==="compatible"?Q.url:void 0}let f=Y0(),J=await K0(f.discoveryPath);if(!J?.url)return;let Z=await lQ(J.url);if(Z.status==="compatible")return U1(Z.url,J.authToken);if(Z.status==="build_mismatch")await c0(f.discoveryPath).catch(()=>{return});return}async function Vf($={}){let f=await gJ($);if(f&&await V$(f,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return f;if($.endpoint?.trim())return;let J=Y0();return await R2($.workspaceRoot??process.cwd()),await $T(J)}async function mJ($,f){let J=new URL($),Z=f?.trim()||TA(J);if(J.protocol==="ws:")J.protocol="http:";else if(J.protocol==="wss:")J.protocol="https:";return J.pathname="/shutdown",J.hash="",(await fetch(J,{method:"POST",headers:Z?{authorization:`Bearer ${Z}`}:void 0})).ok}async function iQ(){let $=Y0(),f=await K0($.discoveryPath);if(!f?.url)return!1;try{if(await mJ(f.url,f.authToken))return!0}catch{}return!1}async function U5($){if(!dQ($.url))return;let f=Y0(),J=await K0(f.discoveryPath);if(!J?.url||!JT(J.url,$.url))return;if(!await QT(J.url,J.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await iQ())return;if(!await fT(J.url))return;return await c0(f.discoveryPath).catch(()=>{return}),await Vf({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var xA={};w(xA,{HubRuntimeHost:()=>x$});import{captureSdkError as MA,createSessionId as yA,HUB_CHECKPOINT_CAPABILITY as HT,HUB_COMPACTION_CAPABILITY as YT,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as AT,HUB_HOOK_CAPABILITY_PREFIX as VT,HUB_MISTAKE_LIMIT_CAPABILITY as BT,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as KT,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as GT,isHubToolExecutorName as PT}from"@cline/shared";var NA={};w(NA,{createCoreSessionSnapshot:()=>B$,coreSessionSnapshotToRecord:()=>R5});function WT($){return $?JSON.parse(JSON.stringify($)):void 0}function jT($){return $?JSON.parse(JSON.stringify($)):void 0}function XT($){let f=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,Z=(Array.isArray(f?.history)?f.history:[]).filter((j)=>!!j&&typeof j==="object"&&!Array.isArray(j)).flatMap((j)=>{let X=typeof j.ref==="string"?j.ref.trim():"",H=Number(j.createdAt),Y=Number(j.runCount);if(!X||!Number.isFinite(H)||!Number.isInteger(Y))return[];return[{ref:X,createdAt:H,runCount:Y,...j.kind==="stash"||j.kind==="commit"?{kind:j.kind}:{}}]}),Q=Z.at(-1),W=$?.checkpointEnabled===!0?!0:void 0;if(!W&&Z.length===0)return;return{...W?{enabled:W}:{},...Q?{latest:Q}:{},history:Z}}function B$($){let{session:f}=$,J=WT(f.metadata);return{version:1,sessionId:f.sessionId,source:f.source,status:f.status,createdAt:f.startedAt,updatedAt:f.updatedAt,endedAt:f.endedAt??null,exitCode:f.exitCode??null,interactive:f.interactive,workspace:{cwd:f.cwd,root:f.workspaceRoot},model:{providerId:f.provider,modelId:f.model},capabilities:{enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams},lineage:{...f.parentSessionId?{parentSessionId:f.parentSessionId}:{},...f.parentAgentId?{parentAgentId:f.parentAgentId}:{},...f.agentId?{agentId:f.agentId}:{},...f.conversationId?{conversationId:f.conversationId}:{},isSubagent:f.isSubagent},...f.teamName?{team:{name:f.teamName}}:{},...f.prompt?{prompt:f.prompt}:{},...J?{metadata:J}:{},...f.messagesPath?{artifacts:{messagesPath:f.messagesPath}}:{},...$.messages?{messages:jT($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Z=XT(J);return Z?{checkpoint:Z}:{}})()}}function R5($){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 L2($){if(!$)return;return JSON.parse(JSON.stringify($))}var FT=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function qA($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function wA($){if(!$)return;let{userInstructionService:f,...J}=$;return JSON.parse(JSON.stringify(J))}function SA($){let f=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof f.agentId==="string"?f.agentId:"",conversationId:typeof f.conversationId==="string"?f.conversationId:"",iteration:typeof f.iteration==="number"?f.iteration:0,metadata:f.metadata&&typeof f.metadata==="object"&&!Array.isArray(f.metadata)?f.metadata:void 0}}function Bf($,f,J){$.manifest.push(f),$.handlers.set(f.capabilityName,J)}function hA($,f){let J={manifest:[],handlers:new Map};for(let Q of Object.keys(f.toolExecutors??{}).filter(PT)){let W=f.toolExecutors?.[Q];if(typeof W!=="function")continue;Bf(J,{kind:"toolExecutor",executor:Q,capabilityName:`${KT}${Q}`},async({payload:j,abortSignal:X})=>{let H=Array.isArray(j.args)?[...j.args]:[],Y={...SA(j.context),signal:X};return{result:await W(...H,Y)}})}for(let Q of $?.extraTools??[])Bf(J,{kind:"tool",name:Q.name,description:Q.description,inputSchema:L2(Q.inputSchema)??{},...Q.lifecycle?{lifecycle:L2(Q.lifecycle)}:{},capabilityName:`${AT}${Q.name}`},async({payload:W,abortSignal:j,progress:X})=>{let H={...SA(W.context),signal:j};return{result:await Q.execute(W.input,{...H,emitUpdate:(A)=>{X({update:A})}})}});let Z=$?.hooks;if(Z)for(let Q of FT){let W=Z[Q];if(typeof W!=="function")continue;Bf(J,{kind:"hook",name:Q,capabilityName:`${VT}${Q}`},async({payload:j})=>({control:await W(j.context)}))}if($?.compaction?.compact){let Q=$.compaction.compact;Bf(J,{kind:"compaction",capabilityName:YT,config:qA($.compaction)},async({payload:W})=>({result:await Q(W.context)}))}if($?.checkpoint?.createCheckpoint){let Q=$.checkpoint.createCheckpoint;Bf(J,{kind:"checkpoint",capabilityName:HT,config:qA($.checkpoint)},async({payload:W})=>({result:await Q(W.context)}))}if($?.onConsecutiveMistakeLimitReached){let Q=$.onConsecutiveMistakeLimitReached;Bf(J,{kind:"mistakeLimit",capabilityName:BT},async({payload:W})=>({result:await Q(W.context)}))}if($?.userInstructionService){let Q=$.userInstructionService;Bf(J,{kind:"userInstructionService",capabilityName:GT},async()=>{return await Q.start().catch(()=>{}),{snapshot:{records:{skill:Q.listRecords("skill"),rule:Q.listRecords("rule"),workflow:Q.listRecords("workflow")},runtimeCommands:Q.listRuntimeCommands()}}})}return J}function kA($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let f=$.message;if(typeof f==="string"&&f.trim())return f.trim()}return}function UT($){return kA($)??"Capability request was cancelled."}function RT($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function DT($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function LT($){if(!$||typeof $!=="object"||Array.isArray($))return;let f=$,J=typeof f.inputTokens==="number"?f.inputTokens:void 0,Z=typeof f.outputTokens==="number"?f.outputTokens:void 0;if(J===void 0||Z===void 0)return;return{inputTokens:J,outputTokens:Z,cacheReadTokens:typeof f.cacheReadTokens==="number"?f.cacheReadTokens:0,cacheWriteTokens:typeof f.cacheWriteTokens==="number"?f.cacheWriteTokens:0,totalCost:typeof f.totalCost==="number"?f.totalCost:0}}function CA($){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 nQ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function D1($,f){return nQ($?.[f])??0}function _T($){let f=$?.delta&&typeof $.delta==="object"?$.delta:void 0,J=$?.totals&&typeof $.totals==="object"?$.totals:void 0,Z=$?.agent&&typeof $.agent==="object"?$.agent:void 0,Q=Z?.teamRole==="teammate"||Z?.teamRole==="lead"?Z.teamRole:void 0;return{event:{type:"usage",agentId:typeof Z?.agentId==="string"?Z.agentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,inputTokens:D1(f,"inputTokens"),outputTokens:D1(f,"outputTokens"),cacheReadTokens:D1(f,"cacheReadTokens"),cacheWriteTokens:D1(f,"cacheWriteTokens"),cost:nQ(f?.totalCost),totalInputTokens:D1(J,"inputTokens"),totalOutputTokens:D1(J,"outputTokens"),totalCacheReadTokens:D1(J,"cacheReadTokens"),totalCacheWriteTokens:D1(J,"cacheWriteTokens"),totalCost:nQ(J?.totalCost)},teamAgentId:typeof Z?.teamAgentId==="string"?Z.teamAgentId:void 0,teamRole:Q}}function zT($){let f=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,J=$?.reason??f?.finishReason,Z=DT(J)?J:J==="failed"?"error":"completed",Q=LT($?.usage??f?.usage);return{type:"done",reason:Z,text:typeof $?.text==="string"?$.text:typeof f?.text==="string"?f.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof f?.iterations==="number"?f.iterations:0,usage:Q}}function D5($,f){return $.error?.message??`hub command failed: ${f}`}function vJ($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function IA($){let f=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof f?.parentSessionId==="string"?f.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof f?.agentId==="string"?f.agentId:void 0),parentAgentId:typeof f?.parentAgentId==="string"?f.parentAgentId:void 0,conversationId:typeof f?.conversationId==="string"?f.conversationId:void 0,isSubagent:typeof f?.isSubagent==="boolean"?f.isSubagent:!1,source:typeof f?.source==="string"?f.source:G0.CORE,pid:typeof f?.pid==="number"?f.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:vJ($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:vJ($.status)==="completed"?0:vJ($.status)==="failed"?1:void 0,status:vJ($.status),interactive:f?.interactive===!0,provider:typeof f?.provider==="string"?f.provider:"hub",model:typeof f?.model==="string"?f.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof f?.teamName==="string"?f.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??f?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??f?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??f?.enableTeams===!0,prompt:typeof f?.prompt==="string"?f.prompt:void 0,metadata:f,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof f?.messagesPath==="string"?f.messagesPath:void 0,hookPath:typeof f?.hookPath==="string"?f.hookPath:void 0}}function L1($){if(!$||typeof $!=="object"||Array.isArray($))return;let f=$;return f.version===1&&typeof f.sessionId==="string"?JSON.parse(JSON.stringify(f)):void 0}function OT($){let f=L1($?.snapshot);if(f)return R5(f);let J=$?.session;return J?IA(J):void 0}function EA($,f,J){let Z=J?.workspaceRoot?.trim()||f.config.workspaceRoot||f.config.cwd;return M0.parse({version:1,session_id:$,source:f.source??G0.CORE,pid:process.pid,started_at:new Date(J?.createdAt??Date.now()).toISOString(),status:vJ(J?.status),interactive:f.interactive===!0,provider:f.config.providerId,model:f.config.modelId,cwd:J?.cwd?.trim()||f.config.cwd,workspace_root:Z,team_name:f.config.teamName,enable_tools:f.config.enableTools,enable_spawn:f.config.enableSpawnAgent,enable_teams:f.config.enableAgentTeams,prompt:f.prompt?.trim()||void 0,metadata:f.sessionMetadata&&Object.keys(f.sessionMetadata).length>0?f.sessionMetadata:void 0})}function bA($,f){return M0.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??f.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class x${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new CJ;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,f){this.clientContext=f,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:f?.workspaceRoot,cwd:f?.cwd},this.defaultCapabilities=U0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(J)=>this.requestPendingPromptsList(J),update:(J)=>this.requestPendingPromptUpdate(J),delete:(J)=>this.requestPendingPromptDelete(J)},this.client=this.createClient($.url)}createClient($){return new f$({...this.clientOptions,url:$})}async replaceClient($){let f=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(f.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!F5($,"session.create"))return!1;let f=await U5({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!f)return!1;return await this.replaceClient(f),!0}registerPlannedSession($,f,J){if(this.sessionCapabilities.set($,f),J.size>0)this.sessionClientContributionHandlers.set($,J);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let f=this.resolveCapabilities($),J=hA($.localRuntime,f),Z=$.config.sessionId?.trim()||yA(),Q=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:L2({...$.config,sessionId:Z}),metadata:{...$.sessionMetadata??{},source:$.source??G0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...J.manifest.length>0?{clientContributions:J.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:L2($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(Z,f,J.handlers);let W;try{W=await Q()}catch(Y){if(this.cleanupPlannedSession(Z),await this.recoverLocalHubStartupDeadlock(Y)){this.registerPlannedSession(Z,f,J.handlers);try{W=await Q()}catch(A){throw this.cleanupPlannedSession(Z),A}}else throw Y}let j=L1(W.payload?.snapshot),X=W.payload?.session,H=(j?.sessionId??X?.sessionId)?.trim();if(!H)throw this.cleanupPlannedSession(Z),Error("Hub runtime did not return a session id.");if(H!==Z)this.cleanupPlannedSession(Z),this.registerPlannedSession(H,f,J.handlers);return{sessionId:H,manifest:j?bA(j,$):EA(H,$,X),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let f=$.sessionId.trim();if(!f)throw Error("sessionId is required");let J=$.restore?.messages!==!1;if(J&&!$.start)throw Error("start is required when restore.messages is true");let Z=$.start,Q=Z?this.resolveCapabilities(Z):void 0,W=Z?hA(Z.localRuntime,Q??{}):{manifest:[],handlers:new Map},j=Z?Z.config.sessionId?.trim()||yA():void 0;if(j&&Q)this.sessionCapabilities.set(j,Q);if(j&&W.handlers.size>0)this.sessionClientContributionHandlers.set(j,W.handlers),this.ensureSessionSubscription(j);let X;try{X=await this.client.command("session.restore",{sessionId:f,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Z?{workspaceRoot:Z.config.workspaceRoot?.trim()||Z.config.cwd,cwd:Z.config.cwd??$.cwd,sessionConfig:L2({...Z.config,sessionId:j}),metadata:{...Z.sessionMetadata??{},source:Z.source??G0.CORE,provider:Z.config.providerId,model:Z.config.modelId,enableTools:Z.config.enableTools,enableSpawn:Z.config.enableSpawnAgent,enableTeams:Z.config.enableAgentTeams,teamName:Z.config.teamName,prompt:Z.prompt,interactive:Z.interactive===!0},runtimeOptions:{...W.manifest.length>0?{clientContributions:W.manifest}:{},...Z.localRuntime?.configExtensions?{configExtensions:Z.localRuntime.configExtensions}:{}},toolPolicies:L2(Z.toolPolicies)}:{}},f)}catch(K){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw K}if(!X.ok){let K=typeof X.payload?.error==="string"?X.payload.error:"session.restore failed";if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error(K)}let H=L1(X.payload?.snapshot),Y=X.payload?.session,A=(H?.sessionId??Y?.sessionId)?.trim();if(J&&!A){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error("Hub checkpoint restore returned no session id")}if(A&&j&&A!==j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);if(A&&Q)this.sessionCapabilities.set(A,Q);if(A&&W.handlers.size>0)this.sessionClientContributionHandlers.set(A,W.handlers);if(A)this.ensureSessionSubscription(A);let V=Array.isArray(X.payload?.messages)?X.payload.messages:void 0,B=X.payload?.checkpoint;if(!B)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:A,startResult:A?{sessionId:A,manifest:H?bA(H,Z??{}):EA(A,Z??{},Y),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:V,checkpoint:B}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let f=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(f.payload?.prompts)?f.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let f=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(f.payload?.prompts)?f.payload.prompts:[],prompt:f.payload?.prompt,updated:f.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let f=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(f.payload?.prompts)?f.payload.prompts:[],prompt:f.payload?.prompt,removed:f.payload?.removed===!0}}async getAccumulatedUsage($){let f=await this.client.command("session.get",{includeSnapshot:!0},$),J=L1(f.payload?.snapshot);if(J){let j=J.usage?{...J.usage}:void 0,X=J.aggregateUsage?{...J.aggregateUsage}:void 0;return j||X?{usage:j,aggregateUsage:X}:void 0}let Z=f.payload?.session,Q=CA(Z?.usage),W=CA(Z?.aggregateUsage);return Q||W?{usage:Q,aggregateUsage:W}:void 0}async abort($,f){await this.client.command("run.abort",{sessionId:$,reason:kA(f)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,f]of this.sessionSubscriptions){f();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let f;try{f=await this.client.command("session.get",void 0,$)}catch(J){if(k$(J))return;throw J}return OT(f.payload)}async listSessions($=100){let f=await this.client.command("session.list",{limit:$}),J=Array.isArray(f.payload?.snapshots)?f.payload.snapshots.flatMap((Q)=>{let W=L1(Q);return W?[R5(W)]:[]}):[];if(J.length>0)return J;return(f.payload?.sessions??[]).map(IA)}async listSettings($){let f=await this.client.command("settings.list",wA($));if(!f.ok)throw Error(D5(f,"settings.list"));return f.payload?.snapshot}async toggleSetting($){let f=await this.client.command("settings.toggle",wA($));if(!f.ok)throw Error(D5(f,"settings.toggle"));return{snapshot:f.payload?.snapshot,changedTypes:Array.isArray(f.payload?.changedTypes)?f.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,f){let J={...f.metadata??{}};if(typeof f.prompt==="string")J.prompt=f.prompt;if(typeof f.title==="string")J.title=f.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:J})).ok}}async readSessionMessages($){let f=$.trim();if(!f)return[];let J=await this.client.command("session.messages",{sessionId:f},f);if(!J.ok)throw MA(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(D5(J,"session.messages")),severity:J.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:f,errorCode:J.error?.code,runtimeAddress:this.runtimeAddress}}),Error(D5(J,"session.messages"));let Z=J.payload?.messages;return Array.isArray(Z)?Z:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,f){return this.events.subscribe($,f)}ensureSessionSubscription($){let f=$.trim();if(!f||this.sessionSubscriptions.has(f))return;let J=this.client.subscribe((Z)=>{this.handleHubEvent(Z)},{sessionId:f});this.sessionSubscriptions.set(f,typeof J==="function"?J:()=>{})}disposeSessionSubscription($){let f=$.trim();if(!f)return;this.sessionSubscriptions.get(f)?.(),this.sessionSubscriptions.delete(f),this.agentDoneEmittedForCurrentRunBySession.delete(f)}resolveCapabilities($){return U0(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:zT($.payload)}})}handleHubEvent($){let f=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((J)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",J,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((J)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",J,$)});return}if(!f)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(f);let J=L1($.payload?.snapshot),Z=$.payload?.session;if(J)this.events.emit({type:"session_snapshot",payload:{sessionId:f,snapshot:J}});this.events.emit({type:"status",payload:{sessionId:f,status:Z?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"assistant.delta":{let J=typeof $.payload?.text==="string"?$.payload.text:"";if(!J)return;this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_start",contentType:"text",text:J}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let J=typeof $.payload?.text==="string"?$.payload.text:"",Z=$.payload?.redacted===!0;if(!J&&!Z)return;this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_start",contentType:"reasoning",reasoning:J,redacted:Z}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:f,payload:$.payload});return}case"usage.updated":{let J=_T($.payload);this.events.emit({type:"agent_event",payload:{sessionId:f,event:J.event,teamAgentId:J.teamAgentId,teamRole:J.teamRole}});return}case"tool.started":{let J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(J&&this.pendingApprovalToolCallIds.delete(J))return;this.emitToolCallContentStart({sessionId:f,toolCallId:J,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(J)this.pendingApprovalToolCallIds.delete(J);this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"tool",toolCallId:J,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let J=L1($.payload?.snapshot),Z=$.payload?.session;if(J)this.events.emit({type:"session_snapshot",payload:{sessionId:f,snapshot:J}});this.events.emit({type:"status",payload:{sessionId:f,status:Z?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:f,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let J=$.payload?.prompt;if(!J)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:f,id:J.id,prompt:J.prompt,delivery:J.delivery,attachmentCount:J.attachmentCount}});return}case"run.completed":case"run.failed":case"run.aborted":{let J=L1($.payload?.snapshot),Z=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:f,payload:{...$.payload,reason:Z}}),J?.interactive===!0&&Z0(J.status))return;this.events.emit({type:"ended",payload:{sessionId:f,reason:Z,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,f,J){try{MA(this.telemetry,{component:"core",operation:$,error:f,severity:"warn",handled:!0,context:{event:J.event,sessionId:J.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let f=$.sessionId?.trim();if(!f)return;let J=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(J&&J!==this.client.getClientId())return;let Z=typeof $.payload?.requestId==="string"?$.payload.requestId:"",Q=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!Z)return;let W=this.sessionClientContributionHandlers.get(f)?.get(Q);if(!W){await this.client.command("capability.respond",{requestId:Z,ok:!1,error:`No client contribution handler registered for capability ${Q} in session ${f}.`},f).catch(()=>{});return}let j=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},X=new AbortController;this.activeCapabilityAbortControllers.set(Z,X);let H=(Y)=>{this.client.command("capability.progress",{requestId:Z,payload:Y},f).catch((A)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",A,$)})};try{let Y=await W({payload:j,abortSignal:X.signal,progress:H});if(X.signal.aborted)return;await this.client.command("capability.respond",{requestId:Z,ok:!0,payload:Y},f)}catch(Y){if(X.signal.aborted)return;await this.client.command("capability.respond",{requestId:Z,ok:!1,error:Y instanceof Error?Y.message:String(Y)},f)}finally{this.activeCapabilityAbortControllers.delete(Z)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let f=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!f)return;let J=this.activeCapabilityAbortControllers.get(f);if(!J)return;J.abort(UT($.payload.error))}async handleApprovalRequested($){let f=$.sessionId?.trim();if(!f)return;let J=this.sessionCapabilities.get(f)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!J)return;let Z=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",W=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!Z||!Q||!W)return;let j=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},X=RT($.payload?.inputJson);this.pendingApprovalToolCallIds.add(Q),this.emitToolCallContentStart({sessionId:f,toolCallId:Q,toolName:W,toolInput:X});let H=await Promise.resolve(J({sessionId:f,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:f,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:Q,toolName:W,input:X,policy:j})).catch((Y)=>({approved:!1,reason:Y instanceof Error?Y.message:`Tool approval request failed: ${String(Y)}`}));await this.client.command("approval.respond",{approvalId:Z,approved:H.approved,reason:H.reason},f).catch(()=>{})}}var mA={};w(mA,{RemoteRuntimeHost:()=>_2});class _2 extends x${constructor($){super({url:R1($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var gA={};w(gA,{SqliteSessionStore:()=>G$});import{existsSync as TT,mkdirSync as NT}from"node:fs";import{join as MT}from"node:path";import{asBool as uJ,asOptionalString as K$,asString as m$,ensureSessionSchema as yT,loadSqliteDb as qT,nowIso as L5,toBoolInt as cJ}from"@cline/shared/db";import{resolveDbDataDir as wT}from"@cline/shared/storage";class G${sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??wT()}init(){this.getRawDb()}ensureSessionsDir(){if(!TT(this.sessionsDirPath))NT(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return MT(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=qT(this.sessionDbPath());return yT($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,f=[]){return this.getRawDb().prepare($).run(...f)}queryOne($,f=[]){return this.getRawDb().prepare($).get(...f)??void 0}queryAll($,f=[]){return this.getRawDb().prepare($).all(...f)}create($){let f=L5();this.run(`INSERT OR REPLACE INTO sessions (
483
483
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
484
484
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
485
485
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
486
486
  metadata_json, transcript_path, hook_path, messages_path, updated_at
487
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,E4($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,E4($.enableTools),E4($.enableSpawn),E4($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,E4($.isSubagent),$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"",$.hookPath??"",$.messagesPath??null,J])}update($){let J=[],Z=[];if($.endedAt!==void 0)J.push("ended_at = ?"),Z.push($.endedAt);if($.exitCode!==void 0)J.push("exit_code = ?"),Z.push($.exitCode);if($.status!==void 0)J.push("status = ?"),Z.push($.status);if($.prompt!==void 0)J.push("prompt = ?"),Z.push($.prompt);if($.metadata!==void 0)J.push("metadata_json = ?"),Z.push($.metadata?JSON.stringify($.metadata):null);if($.parentSessionId!==void 0)J.push("parent_session_id = ?"),Z.push($.parentSessionId);if($.parentAgentId!==void 0)J.push("parent_agent_id = ?"),Z.push($.parentAgentId);if($.agentId!==void 0)J.push("agent_id = ?"),Z.push($.agentId);if($.conversationId!==void 0)J.push("conversation_id = ?"),Z.push($.conversationId);if(J.length===0)return;J.push("updated_at = ?"),Z.push(AZ()),Z.push($.sessionId),this.run(`UPDATE sessions SET ${J.join(", ")} WHERE session_id = ?`,Z)}updateStatus($,J,Z){this.update({sessionId:$,status:J,endedAt:Q0(J)?null:AZ(),exitCode:Q0(J)?null:Z??(J==="failed"?1:0)})}get($){let J=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
487
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,cJ($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,cJ($.enableTools),cJ($.enableSpawn),cJ($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,cJ($.isSubagent),$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"",$.hookPath??"",$.messagesPath??null,f])}update($){let f=[],J=[];if($.endedAt!==void 0)f.push("ended_at = ?"),J.push($.endedAt);if($.exitCode!==void 0)f.push("exit_code = ?"),J.push($.exitCode);if($.status!==void 0)f.push("status = ?"),J.push($.status);if($.prompt!==void 0)f.push("prompt = ?"),J.push($.prompt);if($.metadata!==void 0)f.push("metadata_json = ?"),J.push($.metadata?JSON.stringify($.metadata):null);if($.parentSessionId!==void 0)f.push("parent_session_id = ?"),J.push($.parentSessionId);if($.parentAgentId!==void 0)f.push("parent_agent_id = ?"),J.push($.parentAgentId);if($.agentId!==void 0)f.push("agent_id = ?"),J.push($.agentId);if($.conversationId!==void 0)f.push("conversation_id = ?"),J.push($.conversationId);if(f.length===0)return;f.push("updated_at = ?"),J.push(L5()),J.push($.sessionId),this.run(`UPDATE sessions SET ${f.join(", ")} WHERE session_id = ?`,J)}updateStatus($,f,J){this.update({sessionId:$,status:f,endedAt:Z0(f)?null:L5(),exitCode:Z0(f)?null:J??(f==="failed"?1:0)})}get($){let f=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
488
488
  provider, model, cwd, workspace_root, team_name,
489
489
  enable_tools, enable_spawn, enable_teams,
490
490
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
491
491
  prompt, metadata_json, hook_path, messages_path, updated_at
492
- FROM sessions WHERE session_id = ?`,[$]);if(!J)return;return{sessionId:b$(J.session_id),source:b$(J.source),pid:Number(J.pid??0),startedAt:b$(J.started_at),endedAt:J.ended_at??null,exitCode:J.exit_code??null,status:b$(J.status),interactive:C4(J.interactive),provider:b$(J.provider),model:b$(J.model),cwd:b$(J.cwd),workspaceRoot:b$(J.workspace_root),teamName:A$(J.team_name),enableTools:C4(J.enable_tools),enableSpawn:C4(J.enable_spawn),enableTeams:C4(J.enable_teams),parentSessionId:A$(J.parent_session_id),parentAgentId:A$(J.parent_agent_id),agentId:A$(J.agent_id),conversationId:A$(J.conversation_id),isSubagent:C4(J.is_subagent),prompt:A$(J.prompt),metadata:(()=>{let Z=A$(J.metadata_json);if(!Z)return;try{let Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return})(),hookPath:A$(J.hook_path),messagesPath:A$(J.messages_path),updatedAt:A$(J.updated_at)??AZ()}}list($=200){let J=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Z=[];for(let Q of J){let W=this.get(b$(Q.session_id));if(W)Z.push(W)}return Z}delete($,J=!1){let Z=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(J)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Z>0}}VZ();import{existsSync as aW,mkdirSync as mT,readFileSync as EA,renameSync as gT,writeFileSync as vT}from"node:fs";import{join as hA}from"node:path";import{resolveSessionDataDir as uT}from"@cline/shared/storage";import{dirname as IT}from"node:path";import{nanoid as xT}from"nanoid";import{appendFileSync as LT,existsSync as zT,mkdirSync as OA,readFileSync as OT,writeFileSync as _A}from"node:fs";import{dirname as TA,join as _T}from"node:path";import{ensureHookLogDir as TT}from"@cline/shared/storage";class mW{adapter;messagesArtifactUploader;logger;artifacts;constructor($,J,Z){this.adapter=$;this.messagesArtifactUploader=J;this.logger=Z;this.artifacts=new y9(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,J,Z){Nj(J,Z,uQ($))}writeSessionManifest($,J){OA(TA($),{recursive:!0}),_A($,`${JSON.stringify(M0.parse(J),null,2)}
493
- `,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let J=this.artifacts.sessionManifestPath($,!1);if(!zT(J))return{path:J};try{return{path:J,manifest:M0.parse(JSON.parse(OT(J,"utf8")))}}catch{return{path:J}}}async resolveArtifactPath($,J,Z){let W=(await this.adapter.getSession($))?.[J];return typeof W==="string"&&W.trim().length>0?W:Z($)}async persistSessionMessages($,J,Z){let Q=await this.resolveArtifactPath($,"messagesPath",(j)=>this.artifacts.sessionMessagesPath(j)),W=cQ({updatedAt:s(),context:uQ($),messages:J,systemPrompt:Z}),f=`${JSON.stringify(W,null,2)}
494
- `;if(OA(TA(Q),{recursive:!0}),_A(Q,f,"utf8"),!this.messagesArtifactUploader)return;try{let j=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:Q,contents:f,row:j})}catch(j){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:j})}}appendStaleSessionHookLog($,J,Z,Q,W){let j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??_T(TT(),"hooks.jsonl");LT(j,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:Q,sessionId:J,pid:Z,source:W})}
495
- `,"utf8")}}import{appendFileSync as NT}from"node:fs";import{join as MT}from"node:path";import{resolveRootSessionId as NA}from"@cline/shared";import{ensureHookLogDir as qT}from"@cline/shared/storage";import{z as gW}from"zod";var yT="subagent",wT=gW.looseObject({task:gW.string().optional(),systemPrompt:gW.string().optional()});class BZ{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,J,Z,Q){this.adapter=$;this.manifestStore=J;this.toPersistedMessages=Z;this.heartbeatLogIntervalMs=Q}teamTaskQueueKey($,J){return`${$}::${J}`}activeTeamTaskSessionId($,J){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,J))?.at(-1)}buildSubsessionRow($,J){return{sessionId:J.sessionId,source:yT,pid:process.ppid,startedAt:J.startedAt,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:!1,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:J.parentSessionId,parentAgentId:J.parentAgentId,agentId:J.agentId,conversationId:J.conversationId??null,isSubagent:!0,prompt:J.prompt,metadata:GJ({prompt:J.prompt}),hookPath:"",messagesPath:J.messagesPath,updatedAt:J.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let J=NA($.sessionContext);if(!J)return;let Z=wT.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:J,parentAgentId:$.agent_id,task:Z.success?Z.data.task:void 0,systemPrompt:Z.success?Z.data.systemPrompt:void 0})}async upsertSubagentSession($){let J=$.rootSessionId;if(!J)return;let Z=await this.adapter.getSession(J);if(!Z)return;let Q=w2(J,$.agentId),W=await this.adapter.getSession(Q),f=s(),j=this.manifestStore.artifacts.subagentArtifactPaths(Q,$.agentId,this.activeTeamTaskSessionId(J,$.parentAgentId)),X=$.prompt??W?.prompt??void 0;if(!X)X=await this.adapter.claimSpawnRequest(J,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!W)return await this.adapter.upsertSession(this.buildSubsessionRow(Z,{sessionId:Q,parentSessionId:J,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:X,startedAt:f,...j})),this.manifestStore.initializeMessagesFile(Q,j.messagesPath,f),Q;return await this.adapter.updateSession({sessionId:Q,setRunning:!0,parentSessionId:J,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:W.prompt??X??null,metadata:GJ({metadata:W.metadata??void 0,prompt:W.prompt??X??null}),expectedStatusLock:W.statusLock}),Q}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let J=NA($.sessionContext);if(!J)return;if($.hookName==="session_shutdown"){let Z=w2(J,$.agent_id);return await this.adapter.getSession(Z)?Z:void 0}return await this.upsertSubagentSession({agentId:$.agent_id,parentAgentId:$.parent_agent_id,conversationId:$.taskId,rootSessionId:J})}async applySubagentStatus($,J){await this.applySubagentStatusBySessionId($,VJ(J))}async applySubagentStatusBySessionId($,J){let Z=await this.adapter.getSession($);if(!Z)return;let Q=Q0(J)?null:s(),W=Q0(J)?null:J==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:J,endedAt:Q,exitCode:W,expectedStatusLock:Z.statusLock})}async applyStatusToRunningChildSessions($,J){if(!$)return;let Z=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let Q of Z)await this.applySubagentStatusBySessionId(Q.sessionId,J)}async onTeamTaskStart($,J,Z){let Q=await this.adapter.getSession($);if(!Q)return;let W=YJ($,J),f=s(),{messagesPath:j}=this.manifestStore.artifacts.subagentArtifactPaths(W,J);await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:W,parentSessionId:$,parentAgentId:"lead",agentId:J,prompt:Z||`Team task for ${J}`,startedAt:f,messagesPath:j})),this.manifestStore.initializeMessagesFile(W,j,f);let X=this.teamTaskQueueKey($,J),H=this.teamTaskSessionsByAgent.get(X)??[];H.push(W),this.teamTaskSessionsByAgent.set(X,H)}async onTeamTaskEnd($,J,Z,Q,W,f){let j=this.teamTaskQueueKey($,J),X=this.teamTaskSessionsByAgent.get(j);if(!X||X.length===0)return;let H=X.shift();if(X.length===0)this.teamTaskSessionsByAgent.delete(j);if(!H)return;let Y=W?.messages??f,A=this.toPersistedMessages(Y,W,f);if(A)await this.manifestStore.persistSessionMessages(H,A);await this.applySubagentStatusBySessionId(H,Z),this.teamTaskLastHeartbeatBySession.delete(H),this.teamTaskLastProgressLineBySession.delete(H)}async onTeamTaskProgress($,J,Z,Q){let W=this.teamTaskQueueKey($,J),f=this.teamTaskSessionsByAgent.get(W)?.[0];if(!f)return;let j=Z.trim();if(!j)return;let X=Q?.kind??"progress";if(X==="heartbeat"){let Y=Date.now(),A=this.teamTaskLastHeartbeatBySession.get(f)??0;if(Y-A<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(f,Y)}let H=X==="heartbeat"?"[progress] heartbeat":X==="text"?`[progress] text: ${j}`:`[progress] ${j}`;if(this.teamTaskLastProgressLineBySession.get(f)===H)return;this.teamTaskLastProgressLineBySession.set(f,H)}async handleSubAgentStart($,J){let Z=await this.upsertSubagentSession({agentId:J.subAgentId,parentAgentId:J.parentAgentId,conversationId:J.conversationId,prompt:J.input.task,rootSessionId:$});if(!Z)return;await this.applySubagentStatusBySessionId(Z,"running")}async handleSubAgentEnd($,J){let Z=await this.upsertSubagentSession({agentId:J.subAgentId,parentAgentId:J.parentAgentId,conversationId:J.conversationId,prompt:J.input.task,rootSessionId:$});if(!Z)return;if(J.error){await this.applySubagentStatusBySessionId(Z,"failed");return}let Q=this.toPersistedMessages(J.agentResult?.messages,J.agentResult);if(Q)await this.manifestStore.persistSessionMessages(Z,Q);let W=J.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Z,W==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Z=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??MT(qT(),"hooks.jsonl");NT(Z,`${JSON.stringify({ts:s(),...$})}
496
- `,"utf8")}}import{formatUserInputBlock as kT}from"@cline/shared";var CA={};w(CA,{toTeamProgressLifecycleEvent:()=>F8,sanitizeTeamName:()=>Fj,reviveTeamStateDates:()=>q6,createWorkerReviewerTeam:()=>SA,createSpawnAgentTool:()=>n$,createDelegatedAgentConfigProvider:()=>N2,createDelegatedAgent:()=>M2,createAgentTeamsTools:()=>y1,createAgentTeam:()=>uW,buildTeamProgressSummary:()=>G8,buildDelegatedAgentConfig:()=>M1,bootstrapAgentTeams:()=>y2,AgentTeamsRuntime:()=>j2,AgentTeam:()=>R8});function B$(){return new Date().toISOString()}function MA($,J){if(J<=0)return 0;return Math.round($/J*100)}function ST($,J){let Z=new Set;for(let W of J)if(W.status==="reviewed")Z.add(`${W.outcomeId}:${W.section}`);let Q=new Set;for(let W of $){if(W.status==="finalized")continue;for(let f of W.requiredSections)if(!Z.has(`${W.id}:${f}`))Q.add(`${W.id}:${f}`)}return[...Q].sort((W,f)=>W.localeCompare(f))}function G8($,J){let Z={idle:0,running:0,stopped:0},Q={pending:0,in_progress:0,blocked:0,completed:0},W={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},f={draft:0,in_review:0,finalized:0},j={draft:0,reviewed:0,rejected:0},X=0,H=0;for(let F of J.members)if(Z[F.status]+=1,F.role==="lead")X+=1;else H+=1;let Y=[],A=[],V=J.tasks.filter((F)=>F.status==="completed").length,B=new Map(J.tasks.map((F)=>[F.id,F]));for(let F of J.tasks){if(Q[F.status]+=1,F.status==="blocked"){Y.push(F.id);continue}if(F.status!=="pending")continue;if(F.dependsOn.every((R)=>{return B.get(R)?.status==="completed"}))A.push(F.id)}let K=[],G,D=0;for(let F of J.runs){if(W[F.status]+=1,F.status==="queued"||F.status==="running")K.push(F.id);let U=F.startedAt.getTime();if(U>=D)D=U,G=F.id}for(let F of J.outcomes)f[F.status]+=1;for(let F of J.outcomeFragments)j[F.status]+=1;return{teamName:$,updatedAt:B$(),members:{total:J.members.length,byStatus:Z,leadCount:X,teammateCount:H},tasks:{total:J.tasks.length,byStatus:Q,blockedTaskIds:Y,readyTaskIds:A,completionPct:MA(V,J.tasks.length)},runs:{total:J.runs.length,byStatus:W,activeRunIds:K,latestRunId:G},outcomes:{total:J.outcomes.length,byStatus:f,finalizedPct:MA(f.finalized,J.outcomes.length),missingRequiredSections:ST(J.outcomes,J.outcomeFragments)},fragments:{total:J.outcomeFragments.length,byStatus:j}}}function F8($){let{event:J}=$;switch(J.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:B$(),taskId:J.task.id,agentId:J.task.assignee??J.task.createdBy};case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:B$(),runId:J.run.id,taskId:J.run.taskId,agentId:J.run.agentId,message:J.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:B$(),runId:J.run.id,taskId:J.run.taskId,agentId:J.run.agentId,message:J.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:B$(),outcomeId:J.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:B$(),outcomeId:J.fragment.outcomeId,fragmentId:J.fragment.id,agentId:J.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:B$(),taskId:J.message.taskId,agentId:J.message.fromAgentId,message:J.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:B$(),taskId:J.entry.taskId,agentId:J.entry.agentId,message:J.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:B$(),agentId:J.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:B$()}}import{sanitizeFileName as CT,TeamMessageType as b}from"@cline/shared";import{nanoid as ET}from"nanoid";import{TeamMessageType as Nm}from"@cline/shared";function vW($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function qA($,J){return $?.status==="stopped"&&vW(J)}var hT=600000,yA="recovered_queued";function bT($){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.
492
+ FROM sessions WHERE session_id = ?`,[$]);if(!f)return;return{sessionId:m$(f.session_id),source:m$(f.source),pid:Number(f.pid??0),startedAt:m$(f.started_at),endedAt:f.ended_at??null,exitCode:f.exit_code??null,status:m$(f.status),interactive:uJ(f.interactive),provider:m$(f.provider),model:m$(f.model),cwd:m$(f.cwd),workspaceRoot:m$(f.workspace_root),teamName:K$(f.team_name),enableTools:uJ(f.enable_tools),enableSpawn:uJ(f.enable_spawn),enableTeams:uJ(f.enable_teams),parentSessionId:K$(f.parent_session_id),parentAgentId:K$(f.parent_agent_id),agentId:K$(f.agent_id),conversationId:K$(f.conversation_id),isSubagent:uJ(f.is_subagent),prompt:K$(f.prompt),metadata:(()=>{let J=K$(f.metadata_json);if(!J)return;try{let Z=JSON.parse(J);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return})(),hookPath:K$(f.hook_path),messagesPath:K$(f.messages_path),updatedAt:K$(f.updated_at)??L5()}}list($=200){let f=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),J=[];for(let Z of f){let Q=this.get(m$(Z.session_id));if(Q)J.push(Q)}return J}delete($,f=!1){let J=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(f)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return J>0}}_5();import{existsSync as jW,mkdirSync as jN,readFileSync as tA,renameSync as XN,writeFileSync as HN}from"node:fs";import{join as sA}from"node:path";import{resolveSessionDataDir as YN}from"@cline/shared/storage";import{dirname as QN}from"node:path";import{nanoid as WN}from"nanoid";import{appendFileSync as cT,existsSync as dT,mkdirSync as vA,readFileSync as lT,writeFileSync as uA}from"node:fs";import{dirname as cA,join as pT}from"node:path";import{ensureHookLogDir as rT}from"@cline/shared/storage";class aQ{adapter;messagesArtifactUploader;logger;artifacts;constructor($,f,J){this.adapter=$;this.messagesArtifactUploader=f;this.logger=J;this.artifacts=new g9(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,f,J){dj(f,J,oZ($))}writeSessionManifest($,f){vA(cA($),{recursive:!0}),uA($,`${JSON.stringify(M0.parse(f),null,2)}
493
+ `,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let f=this.artifacts.sessionManifestPath($,!1);if(!dT(f))return{path:f};try{return{path:f,manifest:M0.parse(JSON.parse(lT(f,"utf8")))}}catch{return{path:f}}}async resolveArtifactPath($,f,J){let Q=(await this.adapter.getSession($))?.[f];return typeof Q==="string"&&Q.trim().length>0?Q:J($)}async persistSessionMessages($,f,J){let Z=await this.resolveArtifactPath($,"messagesPath",(j)=>this.artifacts.sessionMessagesPath(j)),Q=eZ({updatedAt:s(),context:oZ($),messages:f,systemPrompt:J}),W=`${JSON.stringify(Q,null,2)}
494
+ `;if(vA(cA(Z),{recursive:!0}),uA(Z,W,"utf8"),!this.messagesArtifactUploader)return;try{let j=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:Z,contents:W,row:j})}catch(j){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:j})}}appendStaleSessionHookLog($,f,J,Z,Q){let j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??pT(rT(),"hooks.jsonl");cT(j,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:Z,sessionId:f,pid:J,source:Q})}
495
+ `,"utf8")}}import{appendFileSync as iT}from"node:fs";import{join as nT}from"node:path";import{resolveRootSessionId as dA}from"@cline/shared";import{ensureHookLogDir as aT}from"@cline/shared/storage";import{z as tQ}from"zod";var tT="subagent",sT=tQ.looseObject({task:tQ.string().optional(),systemPrompt:tQ.string().optional()});class z5{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,f,J,Z){this.adapter=$;this.manifestStore=f;this.toPersistedMessages=J;this.heartbeatLogIntervalMs=Z}teamTaskQueueKey($,f){return`${$}::${f}`}activeTeamTaskSessionId($,f){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,f))?.at(-1)}buildSubsessionRow($,f){return{sessionId:f.sessionId,source:tT,pid:process.ppid,startedAt:f.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:f.parentSessionId,parentAgentId:f.parentAgentId,agentId:f.agentId,conversationId:f.conversationId??null,isSubagent:!0,prompt:f.prompt,metadata:T8({prompt:f.prompt}),hookPath:"",messagesPath:f.messagesPath,updatedAt:f.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let f=dA($.sessionContext);if(!f)return;let J=sT.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:f,parentAgentId:$.agent_id,task:J.success?J.data.task:void 0,systemPrompt:J.success?J.data.systemPrompt:void 0})}async upsertSubagentSession($){let f=$.rootSessionId;if(!f)return;let J=await this.adapter.getSession(f);if(!J)return;let Z=xf(f,$.agentId),Q=await this.adapter.getSession(Z),W=s(),j=this.manifestStore.artifacts.subagentArtifactPaths(Z,$.agentId,this.activeTeamTaskSessionId(f,$.parentAgentId)),X=$.prompt??Q?.prompt??void 0;if(!X)X=await this.adapter.claimSpawnRequest(f,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!Q)return await this.adapter.upsertSession(this.buildSubsessionRow(J,{sessionId:Z,parentSessionId:f,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:X,startedAt:W,...j})),this.manifestStore.initializeMessagesFile(Z,j.messagesPath,W),Z;return await this.adapter.updateSession({sessionId:Z,setRunning:!0,parentSessionId:f,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:Q.prompt??X??null,metadata:T8({metadata:Q.metadata??void 0,prompt:Q.prompt??X??null}),expectedStatusLock:Q.statusLock}),Z}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let f=dA($.sessionContext);if(!f)return;if($.hookName==="session_shutdown"){let J=xf(f,$.agent_id);return await this.adapter.getSession(J)?J:void 0}return await this.upsertSubagentSession({agentId:$.agent_id,parentAgentId:$.parent_agent_id,conversationId:$.taskId,rootSessionId:f})}async applySubagentStatus($,f){await this.applySubagentStatusBySessionId($,_8(f))}async applySubagentStatusBySessionId($,f){let J=await this.adapter.getSession($);if(!J)return;let Z=Z0(f)?null:s(),Q=Z0(f)?null:f==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:f,endedAt:Z,exitCode:Q,expectedStatusLock:J.statusLock})}async applyStatusToRunningChildSessions($,f){if(!$)return;let J=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let Z of J)await this.applySubagentStatusBySessionId(Z.sessionId,f)}async onTeamTaskStart($,f,J){let Z=await this.adapter.getSession($);if(!Z)return;let Q=D8($,f),W=s(),{messagesPath:j}=this.manifestStore.artifacts.subagentArtifactPaths(Q,f);await this.adapter.upsertSession(this.buildSubsessionRow(Z,{sessionId:Q,parentSessionId:$,parentAgentId:"lead",agentId:f,prompt:J||`Team task for ${f}`,startedAt:W,messagesPath:j})),this.manifestStore.initializeMessagesFile(Q,j,W);let X=this.teamTaskQueueKey($,f),H=this.teamTaskSessionsByAgent.get(X)??[];H.push(Q),this.teamTaskSessionsByAgent.set(X,H)}async onTeamTaskEnd($,f,J,Z,Q,W){let j=this.teamTaskQueueKey($,f),X=this.teamTaskSessionsByAgent.get(j);if(!X||X.length===0)return;let H=X.shift();if(X.length===0)this.teamTaskSessionsByAgent.delete(j);if(!H)return;let Y=Q?.messages??W,A=this.toPersistedMessages(Y,Q,W);if(A)await this.manifestStore.persistSessionMessages(H,A);await this.applySubagentStatusBySessionId(H,J),this.teamTaskLastHeartbeatBySession.delete(H),this.teamTaskLastProgressLineBySession.delete(H)}async onTeamTaskProgress($,f,J,Z){let Q=this.teamTaskQueueKey($,f),W=this.teamTaskSessionsByAgent.get(Q)?.[0];if(!W)return;let j=J.trim();if(!j)return;let X=Z?.kind??"progress";if(X==="heartbeat"){let Y=Date.now(),A=this.teamTaskLastHeartbeatBySession.get(W)??0;if(Y-A<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(W,Y)}let H=X==="heartbeat"?"[progress] heartbeat":X==="text"?`[progress] text: ${j}`:`[progress] ${j}`;if(this.teamTaskLastProgressLineBySession.get(W)===H)return;this.teamTaskLastProgressLineBySession.set(W,H)}async handleSubAgentStart($,f){let J=await this.upsertSubagentSession({agentId:f.subAgentId,parentAgentId:f.parentAgentId,conversationId:f.conversationId,prompt:f.input.task,rootSessionId:$});if(!J)return;await this.applySubagentStatusBySessionId(J,"running")}async handleSubAgentEnd($,f){let J=await this.upsertSubagentSession({agentId:f.subAgentId,parentAgentId:f.parentAgentId,conversationId:f.conversationId,prompt:f.input.task,rootSessionId:$});if(!J)return;if(f.error){await this.applySubagentStatusBySessionId(J,"failed");return}let Z=this.toPersistedMessages(f.agentResult?.messages,f.agentResult);if(Z)await this.manifestStore.persistSessionMessages(J,Z);let Q=f.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(J,Q==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let J=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??nT(aT(),"hooks.jsonl");iT(J,`${JSON.stringify({ts:s(),...$})}
496
+ `,"utf8")}}import{formatUserInputBlock as ZN}from"@cline/shared";var aA={};w(aA,{toTeamProgressLifecycleEvent:()=>O2,sanitizeTeamName:()=>Ej,reviveTeamStateDates:()=>x4,createWorkerReviewerTeam:()=>nA,createSpawnAgentTool:()=>e$,createDelegatedAgentConfigProvider:()=>Ef,createDelegatedAgent:()=>bf,createAgentTeamsTools:()=>k1,createAgentTeam:()=>oQ,buildTeamProgressSummary:()=>z2,buildDelegatedAgentConfig:()=>E1,bootstrapAgentTeams:()=>If,AgentTeamsRuntime:()=>Gf,AgentTeam:()=>N2});function P$(){return new Date().toISOString()}function lA($,f){if(f<=0)return 0;return Math.round($/f*100)}function oT($,f){let J=new Set;for(let Q of f)if(Q.status==="reviewed")J.add(`${Q.outcomeId}:${Q.section}`);let Z=new Set;for(let Q of $){if(Q.status==="finalized")continue;for(let W of Q.requiredSections)if(!J.has(`${Q.id}:${W}`))Z.add(`${Q.id}:${W}`)}return[...Z].sort((Q,W)=>Q.localeCompare(W))}function z2($,f){let J={idle:0,running:0,stopped:0},Z={pending:0,in_progress:0,blocked:0,completed:0},Q={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},X=0,H=0;for(let P of f.members)if(J[P.status]+=1,P.role==="lead")X+=1;else H+=1;let Y=[],A=[],V=f.tasks.filter((P)=>P.status==="completed").length,B=new Map(f.tasks.map((P)=>[P.id,P]));for(let P of f.tasks){if(Z[P.status]+=1,P.status==="blocked"){Y.push(P.id);continue}if(P.status!=="pending")continue;if(P.dependsOn.every((U)=>{return B.get(U)?.status==="completed"}))A.push(P.id)}let K=[],G,R=0;for(let P of f.runs){if(Q[P.status]+=1,P.status==="queued"||P.status==="running")K.push(P.id);let F=P.startedAt.getTime();if(F>=R)R=F,G=P.id}for(let P of f.outcomes)W[P.status]+=1;for(let P of f.outcomeFragments)j[P.status]+=1;return{teamName:$,updatedAt:P$(),members:{total:f.members.length,byStatus:J,leadCount:X,teammateCount:H},tasks:{total:f.tasks.length,byStatus:Z,blockedTaskIds:Y,readyTaskIds:A,completionPct:lA(V,f.tasks.length)},runs:{total:f.runs.length,byStatus:Q,activeRunIds:K,latestRunId:G},outcomes:{total:f.outcomes.length,byStatus:W,finalizedPct:lA(W.finalized,f.outcomes.length),missingRequiredSections:oT(f.outcomes,f.outcomeFragments)},fragments:{total:f.outcomeFragments.length,byStatus:j}}}function O2($){let{event:f}=$;switch(f.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:P$(),taskId:f.task.id,agentId:f.task.assignee??f.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:f.type,ts:P$(),runId:f.run.id,taskId:f.run.taskId,agentId:f.run.agentId,message:f.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:P$(),runId:f.run.id,taskId:f.run.taskId,agentId:f.run.agentId,message:f.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:P$(),outcomeId:f.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:P$(),outcomeId:f.fragment.outcomeId,fragmentId:f.fragment.id,agentId:f.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:P$(),taskId:f.message.taskId,agentId:f.message.fromAgentId,message:f.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:P$(),taskId:f.entry.taskId,agentId:f.entry.agentId,message:f.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:P$(),agentId:f.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:P$()}}import{sanitizeFileName as eT,TeamMessageType as b}from"@cline/shared";import{nanoid as $N}from"nanoid";import{TeamMessageType as Dg}from"@cline/shared";function sQ($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function pA($,f){return $?.status==="stopped"&&sQ(f)}var fN=600000,rA="recovered_queued";function JN($){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.
497
497
 
498
- ${$.message}`}class R8{agents=new Map;configs=new Map;onTeamEvent;constructor($,J){if(this.onTeamEvent=J,$)for(let[Z,Q]of Object.entries($))this.addAgent(Z,Q)}addAgent($,J){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let Z={...J,onEvent:(W)=>{J.onEvent?.(W),this.emitEvent({type:b.AgentEvent,agentId:$,event:W})}},Q=new i$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);this.agents.set($,Q),this.configs.set($,J)}removeAgent($){return this.configs.delete($),this.agents.delete($)}getAgent($){return this.agents.get($)}getAgentIds(){return Array.from(this.agents.keys())}get size(){return this.agents.size}async routeTo($,J){let Z=this.agents.get($);if(!Z)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:b.TaskStart,agentId:$,message:J});try{let Q=await Z.run(J);return this.emitEvent({type:b.TaskEnd,agentId:$,result:Q}),Q}catch(Q){let W=Q instanceof Error?Q:Error(String(Q));throw this.emitEvent({type:b.TaskEnd,agentId:$,error:W,messages:Z.getMessages()}),Q}}async continueTo($,J){let Z=this.agents.get($);if(!Z)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:b.TaskStart,agentId:$,message:J});try{let Q=await Z.continue(J);return this.emitEvent({type:b.TaskEnd,agentId:$,result:Q}),Q}catch(Q){let W=Q instanceof Error?Q:Error(String(Q));throw this.emitEvent({type:b.TaskEnd,agentId:$,error:W,messages:Z.getMessages()}),Q}}async runParallel($){let J=$.map(async(Z)=>{let Q=this.agents.get(Z.agentId);if(!Q)return{agentId:Z.agentId,result:void 0,error:Error(`Agent "${Z.agentId}" not found in team`),metadata:Z.metadata};this.emitEvent({type:b.TaskStart,agentId:Z.agentId,message:Z.message});try{let W=await Q.run(Z.message);return this.emitEvent({type:b.TaskEnd,agentId:Z.agentId,result:W}),{agentId:Z.agentId,result:W,metadata:Z.metadata}}catch(W){let f=W instanceof Error?W:Error(String(W));return this.emitEvent({type:b.TaskEnd,agentId:Z.agentId,error:f,messages:Q.getMessages()}),{agentId:Z.agentId,result:void 0,error:f,metadata:Z.metadata}}});return Promise.all(J)}async runSequential($){let J=[];for(let Z of $){let Q=this.agents.get(Z.agentId);if(!Q){J.push({agentId:Z.agentId,result:void 0,error:Error(`Agent "${Z.agentId}" not found in team`),metadata:Z.metadata});continue}this.emitEvent({type:b.TaskStart,agentId:Z.agentId,message:Z.message});try{let W=await Q.run(Z.message);this.emitEvent({type:b.TaskEnd,agentId:Z.agentId,result:W}),J.push({agentId:Z.agentId,result:W,metadata:Z.metadata})}catch(W){let f=W instanceof Error?W:Error(String(W));this.emitEvent({type:b.TaskEnd,agentId:Z.agentId,error:f,messages:Q.getMessages()}),J.push({agentId:Z.agentId,result:void 0,error:f,metadata:Z.metadata})}}return J}async runPipeline($,J,Z){let Q=[],W=J;for(let f of $){let j=this.agents.get(f);if(!j){Q.push({agentId:f,result:void 0,error:Error(`Agent "${f}" not found in team`)});break}this.emitEvent({type:b.TaskStart,agentId:f,message:W});try{let X=await j.run(W);this.emitEvent({type:b.TaskEnd,agentId:f,result:X}),Q.push({agentId:f,result:X});let H=$.indexOf(f)+1;if(H<$.length){let Y=$[H];W=Z?Z(X,Y):`Previous agent output:
498
+ ${$.message}`}class N2{agents=new Map;configs=new Map;onTeamEvent;constructor($,f){if(this.onTeamEvent=f,$)for(let[J,Z]of Object.entries($))this.addAgent(J,Z)}addAgent($,f){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let J={...f,onEvent:(Q)=>{f.onEvent?.(Q),this.emitEvent({type:b.AgentEvent,agentId:$,event:Q})}},Z=new o$(J);if(J.onEvent)Z.subscribeEvents(J.onEvent);this.agents.set($,Z),this.configs.set($,f)}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($,f){let J=this.agents.get($);if(!J)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:b.TaskStart,agentId:$,message:f});try{let Z=await J.run(f);return this.emitEvent({type:b.TaskEnd,agentId:$,result:Z}),Z}catch(Z){let Q=Z instanceof Error?Z:Error(String(Z));throw this.emitEvent({type:b.TaskEnd,agentId:$,error:Q,messages:J.getMessages()}),Z}}async continueTo($,f){let J=this.agents.get($);if(!J)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:b.TaskStart,agentId:$,message:f});try{let Z=await J.continue(f);return this.emitEvent({type:b.TaskEnd,agentId:$,result:Z}),Z}catch(Z){let Q=Z instanceof Error?Z:Error(String(Z));throw this.emitEvent({type:b.TaskEnd,agentId:$,error:Q,messages:J.getMessages()}),Z}}async runParallel($){let f=$.map(async(J)=>{let Z=this.agents.get(J.agentId);if(!Z)return{agentId:J.agentId,result:void 0,error:Error(`Agent "${J.agentId}" not found in team`),metadata:J.metadata};this.emitEvent({type:b.TaskStart,agentId:J.agentId,message:J.message});try{let Q=await Z.run(J.message);return this.emitEvent({type:b.TaskEnd,agentId:J.agentId,result:Q}),{agentId:J.agentId,result:Q,metadata:J.metadata}}catch(Q){let W=Q instanceof Error?Q:Error(String(Q));return this.emitEvent({type:b.TaskEnd,agentId:J.agentId,error:W,messages:Z.getMessages()}),{agentId:J.agentId,result:void 0,error:W,metadata:J.metadata}}});return Promise.all(f)}async runSequential($){let f=[];for(let J of $){let Z=this.agents.get(J.agentId);if(!Z){f.push({agentId:J.agentId,result:void 0,error:Error(`Agent "${J.agentId}" not found in team`),metadata:J.metadata});continue}this.emitEvent({type:b.TaskStart,agentId:J.agentId,message:J.message});try{let Q=await Z.run(J.message);this.emitEvent({type:b.TaskEnd,agentId:J.agentId,result:Q}),f.push({agentId:J.agentId,result:Q,metadata:J.metadata})}catch(Q){let W=Q instanceof Error?Q:Error(String(Q));this.emitEvent({type:b.TaskEnd,agentId:J.agentId,error:W,messages:Z.getMessages()}),f.push({agentId:J.agentId,result:void 0,error:W,metadata:J.metadata})}}return f}async runPipeline($,f,J){let Z=[],Q=f;for(let W of $){let j=this.agents.get(W);if(!j){Z.push({agentId:W,result:void 0,error:Error(`Agent "${W}" not found in team`)});break}this.emitEvent({type:b.TaskStart,agentId:W,message:Q});try{let X=await j.run(Q);this.emitEvent({type:b.TaskEnd,agentId:W,result:X}),Z.push({agentId:W,result:X});let H=$.indexOf(W)+1;if(H<$.length){let Y=$[H];Q=J?J(X,Y):`Previous agent output:
499
499
  ${X.text}
500
500
 
501
- Please continue from here.`}}catch(X){let H=X instanceof Error?X:Error(String(X));this.emitEvent({type:b.TaskEnd,agentId:f,error:H,messages:j.getMessages()}),Q.push({agentId:f,result:void 0,error:H});break}}return Q}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function uW($,J){return new R8($,J)}function SA($){let J=uW({worker:$.worker,reviewer:$.reviewer}),Z=J;return Z.doAndReview=async(Q)=>{let W=await J.routeTo("worker",Q),f=await J.routeTo("reviewer",`Please review this work:
501
+ Please continue from here.`}}catch(X){let H=X instanceof Error?X:Error(String(X));this.emitEvent({type:b.TaskEnd,agentId:W,error:H,messages:j.getMessages()}),Z.push({agentId:W,result:void 0,error:H});break}}return Z}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function oQ($,f){return new N2($,f)}function nA($){let f=oQ({worker:$.worker,reviewer:$.reviewer}),J=f;return J.doAndReview=async(Z)=>{let Q=await f.routeTo("worker",Z),W=await f.routeTo("reviewer",`Please review this work:
502
502
 
503
- ${W.text}`);return{workerResult:W,reviewResult:f}},Z}class j2{teamId;teamName;onTeamEvent;members=new Map;tasks=new Map;missionLog=[];mailbox=[];missionStepCounter=0;taskCounter=0;messageCounter=0;missionCounter=0;runCounter=0;outcomeCounter=0;outcomeFragmentCounter=0;runs=new Map;runQueue=[];queuedRunDispatchTimer;outcomes=new Map;outcomeFragments=new Map;missionLogIntervalSteps;missionLogIntervalMs;maxConcurrentRuns;constructor($){this.teamName=$.teamName,this.teamId=`t_${CT(ET(10))}`,this.onTeamEvent=$.onTeamEvent,this.missionLogIntervalSteps=Math.max(1,$.missionLogIntervalSteps??3),this.missionLogIntervalMs=Math.max(1000,$.missionLogIntervalMs??120000),this.maxConcurrentRuns=Math.max(1,$.maxConcurrentRuns??2);let J=$.leadAgentId??"lead";this.members.set(J,{agentId:J,role:"lead",status:"idle",runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()})}getTeamId(){return this.teamId}getTeamName(){return this.teamName}getMemberRole($){return this.members.get($)?.role}getMemberIds(){return Array.from(this.members.keys())}getTeammateIds(){return Array.from(this.members.values()).filter(($)=>$.role==="teammate").map(($)=>$.agentId)}getTask($){return this.tasks.get($)}listTasks(){return Array.from(this.tasks.values())}listTaskItems($){return Array.from(this.tasks.values()).map((J)=>{let Z=this.getUnresolvedDependencies(J);return{...J,blockedBy:Z,isReady:J.status==="pending"&&!J.assignee&&Z.length===0}}).filter((J)=>{if($?.status&&J.status!==$.status)return!1;if($?.assignee&&J.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,J){let Z=J?.unreadOnly??!0,Q=J?.markRead??!0,W=J?.limit,f=this.mailbox.filter((X)=>X.toAgentId===$&&(!Z||!X.readAt)),j=typeof W==="number"&&W>0?f.slice(Math.max(0,f.length-W)):f;if(Q){let X=new Date;for(let H of j)if(!H.readAt)H.readAt=X}return j.map((X)=>({...X}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let Z of this.tasks.values())$[Z.status]++;let J={draft:0,in_review:0,finalized:0};for(let Z of this.outcomes.values())J[Z.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((Z)=>({agentId:Z.agentId,role:Z.role,description:Z.description,status:Z.status})),taskCounts:$,unreadMessages:this.mailbox.filter((Z)=>!Z.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((Z)=>Z.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((Z)=>Z.status==="queued").length,outcomeCounts:J}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map(($)=>({agentId:$.agentId,role:$.role,description:$.description,status:$.status})),tasks:Array.from(this.tasks.values()).map(($)=>({...$})),mailbox:this.mailbox.map(($)=>({...$})),missionLog:this.missionLog.map(($)=>({...$})),runs:Array.from(this.runs.values()).map(($)=>({...$})),outcomes:Array.from(this.outcomes.values()).map(($)=>({...$})),outcomeFragments:Array.from(this.outcomeFragments.values()).map(($)=>({...$}))}}hydrateState($){this.clearQueuedRunDispatchTimer(),this.tasks.clear();for(let Z of $.tasks)this.tasks.set(Z.id,{...Z});this.mailbox.length=0,this.mailbox.push(...$.mailbox.map((Z)=>({...Z}))),this.missionLog.length=0,this.missionLog.push(...$.missionLog.map((Z)=>({...Z}))),this.runs.clear();for(let Z of $.runs??[])this.runs.set(Z.id,{...Z});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((Z)=>Z.status==="queued").map((Z)=>Z.id)),this.outcomes.clear();for(let Z of $.outcomes??[])this.outcomes.set(Z.id,{...Z});this.outcomeFragments.clear();for(let Z of $.outcomeFragments??[])this.outcomeFragments.set(Z.id,{...Z});let J=Array.from(this.members.values()).filter((Z)=>Z.role==="lead");this.members.clear();for(let Z of J)this.members.set(Z.agentId,{...Z,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let Z of $.members){if(Z.role!=="teammate")continue;this.members.set(Z.agentId,{agentId:Z.agentId,role:"teammate",description:Z.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,U8($.tasks.map((Z)=>Z.id),"task_")),this.messageCounter=Math.max(this.messageCounter,U8($.mailbox.map((Z)=>Z.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,U8($.missionLog.map((Z)=>Z.id),"log_")),this.runCounter=Math.max(this.runCounter,U8(($.runs??[]).map((Z)=>Z.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,U8(($.outcomes??[]).map((Z)=>Z.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,U8(($.outcomeFragments??[]).map((Z)=>Z.id),"frag_"))}isTeammateActive($){let J=this.members.get($);return!!J&&J.role==="teammate"&&!!J.agent}spawnTeammate({agentId:$,config:J}){let Z=this.members.get($);if(Z&&Z.role!=="teammate")throw Error(`Team member "${$}" already exists and is not a teammate`);if(Z&&Z.runningCount>0)throw Error(`Teammate "${$}" is currently running and cannot be respawned`);let Q={...J,apiTimeoutMs:hT,consumePendingUserMessage:()=>{let j=this.members.get($);if(!j||!j.pendingSteerMessage)return;let X=j.pendingSteerMessage;return j.pendingSteerMessage=void 0,X},onEvent:(j)=>{J.onEvent?.(j),this.emitEvent({type:b.AgentEvent,agentId:$,event:j}),this.trackMeaningfulEvent($,j)}},W=new i$(Q);if(Q.onEvent)W.subscribeEvents(Q.onEvent);let f={agentId:$,role:"teammate",description:J.role,status:"idle",agent:W,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,f),this.emitEvent({type:b.TeammateSpawned,agentId:$,role:J.role,teammate:{rolePrompt:J.systemPrompt,modelId:J.modelId,maxIterations:J.maxIterations,runtimeAgentId:W.getAgentId(),conversationId:W.getConversationId(),parentAgentId:null}}),{agentId:f.agentId,role:f.role,description:f.description,status:f.status}}shutdownTeammate($,J){let Z=this.members.get($);if(!Z||Z.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{Z.agent?.abort()}catch(Q){if(!vW(Q))throw Q}Z.status="stopped",this.emitEvent({type:b.TeammateShutdown,agentId:$,reason:J})}updateTeammateConnections($){for(let J of this.members.values()){if(J.role!=="teammate"||!J.agent)continue;J.agent.updateConnection($)}}createTask($){let J=`task_${String(++this.taskCounter).padStart(4,"0")}`,Z=new Date,Q={id:J,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:Z,updatedAt:Z,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(J,Q),this.emitEvent({type:b.TeamTaskUpdated,task:{...Q}}),{...Q}}claimTask($,J){let Z=this.requireTask($);return this.assertDependenciesResolved(Z),Z.status="in_progress",Z.assignee=J,Z.updatedAt=new Date,this.emitEvent({type:b.TeamTaskUpdated,task:{...Z}}),this.appendMissionLog({agentId:J,taskId:$,kind:"progress",summary:`Claimed task "${Z.title}"`}),{...Z}}blockTask($,J,Z){let Q=this.requireTask($);return Q.status="blocked",Q.updatedAt=new Date,Q.summary=Z,this.emitEvent({type:b.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:J,taskId:$,kind:"blocked",summary:Z}),{...Q}}completeTask($,J,Z){let Q=this.requireTask($);if(Q.status="completed",Q.updatedAt=new Date,Q.summary=Z,!Q.assignee)Q.assignee=J;return this.emitEvent({type:b.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:J,taskId:$,kind:"done",summary:Z}),{...Q}}async routeToTeammate($,J,Z){let Q=this.members.get($);if(!Q||Q.role!=="teammate"||!Q.agent)throw Error(`Teammate "${$}" was not found`);if(!Q.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");Q.runningCount++,Q.status="running",this.emitEvent({type:b.TaskStart,agentId:$,message:J});try{let W=this.listMailbox($,{unreadOnly:!0,markRead:!0}),f=W.length>0?`${this.buildMailboxNotification(W)}
503
+ ${Q.text}`);return{workerResult:Q,reviewResult:W}},J}class Gf{teamId;teamName;onTeamEvent;members=new Map;tasks=new Map;missionLog=[];mailbox=[];missionStepCounter=0;taskCounter=0;messageCounter=0;missionCounter=0;runCounter=0;outcomeCounter=0;outcomeFragmentCounter=0;runs=new Map;runQueue=[];queuedRunDispatchTimer;outcomes=new Map;outcomeFragments=new Map;missionLogIntervalSteps;missionLogIntervalMs;maxConcurrentRuns;constructor($){this.teamName=$.teamName,this.teamId=`t_${eT($N(10))}`,this.onTeamEvent=$.onTeamEvent,this.missionLogIntervalSteps=Math.max(1,$.missionLogIntervalSteps??3),this.missionLogIntervalMs=Math.max(1000,$.missionLogIntervalMs??120000),this.maxConcurrentRuns=Math.max(1,$.maxConcurrentRuns??2);let f=$.leadAgentId??"lead";this.members.set(f,{agentId:f,role:"lead",status:"idle",runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()})}getTeamId(){return this.teamId}getTeamName(){return this.teamName}getMemberRole($){return this.members.get($)?.role}getMemberIds(){return Array.from(this.members.keys())}getTeammateIds(){return Array.from(this.members.values()).filter(($)=>$.role==="teammate").map(($)=>$.agentId)}getTask($){return this.tasks.get($)}listTasks(){return Array.from(this.tasks.values())}listTaskItems($){return Array.from(this.tasks.values()).map((f)=>{let J=this.getUnresolvedDependencies(f);return{...f,blockedBy:J,isReady:f.status==="pending"&&!f.assignee&&J.length===0}}).filter((f)=>{if($?.status&&f.status!==$.status)return!1;if($?.assignee&&f.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,f){let J=f?.unreadOnly??!0,Z=f?.markRead??!0,Q=f?.limit,W=this.mailbox.filter((X)=>X.toAgentId===$&&(!J||!X.readAt)),j=typeof Q==="number"&&Q>0?W.slice(Math.max(0,W.length-Q)):W;if(Z){let X=new Date;for(let H of j)if(!H.readAt)H.readAt=X}return j.map((X)=>({...X}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let J of this.tasks.values())$[J.status]++;let f={draft:0,in_review:0,finalized:0};for(let J of this.outcomes.values())f[J.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((J)=>({agentId:J.agentId,role:J.role,description:J.description,status:J.status})),taskCounts:$,unreadMessages:this.mailbox.filter((J)=>!J.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((J)=>J.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((J)=>J.status==="queued").length,outcomeCounts:f}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map(($)=>({agentId:$.agentId,role:$.role,description:$.description,status:$.status})),tasks:Array.from(this.tasks.values()).map(($)=>({...$})),mailbox:this.mailbox.map(($)=>({...$})),missionLog:this.missionLog.map(($)=>({...$})),runs:Array.from(this.runs.values()).map(($)=>({...$})),outcomes:Array.from(this.outcomes.values()).map(($)=>({...$})),outcomeFragments:Array.from(this.outcomeFragments.values()).map(($)=>({...$}))}}hydrateState($){this.clearQueuedRunDispatchTimer(),this.tasks.clear();for(let J of $.tasks)this.tasks.set(J.id,{...J});this.mailbox.length=0,this.mailbox.push(...$.mailbox.map((J)=>({...J}))),this.missionLog.length=0,this.missionLog.push(...$.missionLog.map((J)=>({...J}))),this.runs.clear();for(let J of $.runs??[])this.runs.set(J.id,{...J});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((J)=>J.status==="queued").map((J)=>J.id)),this.outcomes.clear();for(let J of $.outcomes??[])this.outcomes.set(J.id,{...J});this.outcomeFragments.clear();for(let J of $.outcomeFragments??[])this.outcomeFragments.set(J.id,{...J});let f=Array.from(this.members.values()).filter((J)=>J.role==="lead");this.members.clear();for(let J of f)this.members.set(J.agentId,{...J,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let J of $.members){if(J.role!=="teammate")continue;this.members.set(J.agentId,{agentId:J.agentId,role:"teammate",description:J.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,T2($.tasks.map((J)=>J.id),"task_")),this.messageCounter=Math.max(this.messageCounter,T2($.mailbox.map((J)=>J.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,T2($.missionLog.map((J)=>J.id),"log_")),this.runCounter=Math.max(this.runCounter,T2(($.runs??[]).map((J)=>J.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,T2(($.outcomes??[]).map((J)=>J.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,T2(($.outcomeFragments??[]).map((J)=>J.id),"frag_"))}isTeammateActive($){let f=this.members.get($);return!!f&&f.role==="teammate"&&!!f.agent}spawnTeammate({agentId:$,config:f}){let J=this.members.get($);if(J&&J.role!=="teammate")throw Error(`Team member "${$}" already exists and is not a teammate`);if(J&&J.runningCount>0)throw Error(`Teammate "${$}" is currently running and cannot be respawned`);let Z={...f,apiTimeoutMs:fN,consumePendingUserMessage:()=>{let j=this.members.get($);if(!j||!j.pendingSteerMessage)return;let X=j.pendingSteerMessage;return j.pendingSteerMessage=void 0,X},onEvent:(j)=>{f.onEvent?.(j),this.emitEvent({type:b.AgentEvent,agentId:$,event:j}),this.trackMeaningfulEvent($,j)}},Q=new o$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);let W={agentId:$,role:"teammate",description:f.role,status:"idle",agent:Q,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,W),this.emitEvent({type:b.TeammateSpawned,agentId:$,role:f.role,teammate:{rolePrompt:f.systemPrompt,modelId:f.modelId,maxIterations:f.maxIterations,runtimeAgentId:Q.getAgentId(),conversationId:Q.getConversationId(),parentAgentId:null}}),{agentId:W.agentId,role:W.role,description:W.description,status:W.status}}shutdownTeammate($,f){let J=this.members.get($);if(!J||J.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{J.agent?.abort()}catch(Z){if(!sQ(Z))throw Z}J.status="stopped",this.emitEvent({type:b.TeammateShutdown,agentId:$,reason:f})}updateTeammateConnections($){for(let f of this.members.values()){if(f.role!=="teammate"||!f.agent)continue;f.agent.updateConnection($)}}createTask($){let f=`task_${String(++this.taskCounter).padStart(4,"0")}`,J=new Date,Z={id:f,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:J,updatedAt:J,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(f,Z),this.emitEvent({type:b.TeamTaskUpdated,task:{...Z}}),{...Z}}claimTask($,f){let J=this.requireTask($);return this.assertDependenciesResolved(J),J.status="in_progress",J.assignee=f,J.updatedAt=new Date,this.emitEvent({type:b.TeamTaskUpdated,task:{...J}}),this.appendMissionLog({agentId:f,taskId:$,kind:"progress",summary:`Claimed task "${J.title}"`}),{...J}}blockTask($,f,J){let Z=this.requireTask($);return Z.status="blocked",Z.updatedAt=new Date,Z.summary=J,this.emitEvent({type:b.TeamTaskUpdated,task:{...Z}}),this.appendMissionLog({agentId:f,taskId:$,kind:"blocked",summary:J}),{...Z}}completeTask($,f,J){let Z=this.requireTask($);if(Z.status="completed",Z.updatedAt=new Date,Z.summary=J,!Z.assignee)Z.assignee=f;return this.emitEvent({type:b.TeamTaskUpdated,task:{...Z}}),this.appendMissionLog({agentId:f,taskId:$,kind:"done",summary:J}),{...Z}}async routeToTeammate($,f,J){let Z=this.members.get($);if(!Z||Z.role!=="teammate"||!Z.agent)throw Error(`Teammate "${$}" was not found`);if(!Z.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");Z.runningCount++,Z.status="running",this.emitEvent({type:b.TaskStart,agentId:$,message:f});try{let Q=this.listMailbox($,{unreadOnly:!0,markRead:!0}),W=Q.length>0?`${this.buildMailboxNotification(Q)}
504
504
 
505
- ${J}`:J,j=Z?.continueConversation?await Q.agent.continue(f):await Q.agent.run(f);return this.emitEvent({type:b.TaskEnd,agentId:$,result:j}),this.recordProgressStep($,`Completed a delegated run (${j.iterations} iterations)`,Z?.taskId,!0),j}catch(W){let f=W instanceof Error?W:Error(String(W));if(this.emitEvent({type:b.TaskEnd,agentId:$,error:f,messages:Q.agent.getMessages()}),!qA(Q,f))this.appendMissionLog({agentId:$,taskId:Z?.taskId,kind:"error",summary:f.message});throw f}finally{if(Q.runningCount--,Q.runningCount<=0&&this.members.get($)?.status!=="stopped")Q.status="idle"}}startTeammateRun($,J,Z){let Q=`run_${String(++this.runCounter).padStart(5,"0")}`,W={id:Q,agentId:$,taskId:Z?.taskId,status:"queued",message:J,priority:Z?.priority??0,retryCount:0,maxRetries:Math.max(0,Z?.maxRetries??0),continueConversation:Z?.continueConversation,startedAt:new Date(0),leaseOwner:Z?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(Q,W),this.runQueue.push(Q),this.emitEvent({type:b.RunQueued,run:{...W}}),this.dispatchQueuedRuns(),{...W}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let J=this.selectNextDispatchableQueuedRun();$=J.nextDelayedAttemptAt;let Z=J.index;if(Z<0){this.scheduleQueuedRunDispatch($);return}let[Q]=this.runQueue.splice(Z,1),W=Q?this.runs.get(Q):void 0;if(!W||W.status!=="queued")continue;this.executeQueuedRun(W)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,J=Number.NEGATIVE_INFINITY,Z,Q=Date.now();for(let W=0;W<this.runQueue.length;W++){let f=this.runs.get(this.runQueue[W]);if(!f||f.status!=="queued")continue;if(f.nextAttemptAt&&f.nextAttemptAt.getTime()>Q){if(!Z||f.nextAttemptAt<Z)Z=f.nextAttemptAt;continue}if(f.priority>J)J=f.priority,$=W}return{index:$,nextDelayedAttemptAt:Z}}scheduleQueuedRunDispatch($){if(!$)return;let J=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},J)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let J of this.runs.values())if(J.status==="running")$++;return $}async executeQueuedRun($){let J=$.currentActivity===yA;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:b.RunStarted,run:{...$}});let Z=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let Q=J?bT($):$.message,W=await this.routeToTeammate($.agentId,Q,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=W,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:b.RunCompleted,run:{...$}})}catch(Q){let W=Q instanceof Error?Q.message:String(Q??"Unknown error");$.error=W,$.endedAt=new Date;let f=this.members.get($.agentId);if(qA(f,Q))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:b.RunCancelled,run:{...$},reason:W});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:b.RunFailed,run:{...$}})}finally{clearInterval(Z),this.dispatchQueuedRuns()}}listRuns($){let J=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Z)=>{if(!J&&!["running","queued"].includes(Z.status))return!1;if($?.status&&Z.status!==$.status)return!1;if($?.agentId&&Z.agentId!==$.agentId)return!1;return!0}).map((Z)=>({...Z}))}getRun($){let J=this.runs.get($);return J?{...J}:void 0}async awaitRun($,J=250){let Z=this.runs.get($);if(!Z)throw Error(`Run "${$}" was not found`);while(Z.status==="queued"||Z.status==="running")await wA(J);return{...Z}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((J)=>["queued","running"].includes(J.status)))await wA($);return this.listRuns()}cancelRun($,J){let Z=this.runs.get($);if(!Z)throw Error(`Run "${$}" was not found`);if(Z.status==="completed"||Z.status==="failed")return{...Z};Z.status="cancelled",Z.error=J,Z.endedAt=new Date,Z.currentActivity="cancelled";let Q=this.runQueue.indexOf($);if(Q>=0)this.runQueue.splice(Q,1);return this.emitEvent({type:b.RunCancelled,run:{...Z},reason:J}),{...Z}}recoverActiveRuns($="runtime_recovered"){let J=[];for(let Z of this.runs.values()){if(!["queued","running"].includes(Z.status))continue;let Q=this.members.get(Z.agentId);if(!Q||Q.role!=="teammate"||!Q.agent){Z.status="interrupted",Z.error="teammate_unavailable_after_recovery",Z.endedAt=new Date,Z.currentActivity="interrupted",this.emitEvent({type:b.RunInterrupted,run:{...Z},reason:Z.error});continue}let W=new Date;if(Z.status="queued",Z.error=void 0,Z.endedAt=void 0,Z.heartbeatAt=W,Z.lastProgressAt=W,Z.lastProgressMessage=$,Z.currentActivity=yA,!this.runQueue.includes(Z.id))this.runQueue.push(Z.id);J.push({...Z}),this.emitEvent({type:b.RunQueued,run:{...Z}})}return this.dispatchQueuedRuns(),J}markStaleRunsInterrupted($="runtime_recovered"){let J=[];for(let Z of this.runs.values()){if(!["queued","running"].includes(Z.status))continue;Z.status="interrupted",Z.error=$,Z.endedAt=new Date,Z.currentActivity="interrupted",J.push({...Z}),this.emitEvent({type:b.RunInterrupted,run:{...Z},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),J}sendMessage($,J,Z,Q,W){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let f=this.members.get(J);if(!f)throw Error(`Unknown recipient "${J}"`);let j={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:J,subject:Z,body:Q,taskId:W,sentAt:new Date};if(this.mailbox.push(j),this.emitEvent({type:b.TeamMessage,message:{...j}}),f.role==="teammate"&&f.runningCount>0&&f.agent)f.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Z}". Use the team_read_mailbox tool to read it at your convenience.`;return{...j}}broadcast($,J,Z,Q){let W=[];for(let f of this.members.values()){if(f.agentId===$)continue;if(f.role==="lead")continue;W.push(this.sendMessage($,f.agentId,J,Z,Q?.taskId))}return W}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let J={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:$.agentId,taskId:$.taskId,kind:$.kind,summary:$.summary,evidence:$.evidence,nextAction:$.nextAction};this.missionLog.push(J);let Z=this.members.get($.agentId);if(Z)Z.lastMissionAt=Date.now(),Z.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:b.TeamMissionLog,entry:{...J}}),{...J}}createOutcome($){let J={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:$.title,status:"draft",requiredSections:[...new Set($.requiredSections)],createdBy:$.createdBy,createdAt:new Date};return this.outcomes.set(J.id,J),this.emitEvent({type:b.OutcomeCreated,outcome:{...J}}),{...J}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let J=this.outcomes.get($.outcomeId);if(!J)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!J.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Z={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(Z.id,Z),J.status==="draft")J.status="in_review";return this.emitEvent({type:b.OutcomeFragmentAttached,fragment:{...Z}}),{...Z}}reviewOutcomeFragment($){let J=this.outcomeFragments.get($.fragmentId);if(!J)throw Error(`Fragment "${$.fragmentId}" was not found`);return J.status=$.approved?"reviewed":"rejected",J.reviewedBy=$.reviewedBy,J.reviewedAt=new Date,this.emitEvent({type:b.OutcomeFragmentReviewed,fragment:{...J}}),{...J}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((J)=>J.outcomeId===$).map((J)=>({...J}))}finalizeOutcome($){let J=this.outcomes.get($);if(!J)throw Error(`Outcome "${$}" was not found`);let Z=this.listOutcomeFragments($);for(let Q of J.requiredSections)if(!Z.some((f)=>f.section===Q&&f.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${Q}" is missing a reviewed fragment.`);return J.status="finalized",J.finalizedAt=new Date,this.emitEvent({type:b.OutcomeFinalized,outcome:{...J}}),{...J}}cleanup(){for(let $ of this.members.values())if($.role==="teammate"&&$.runningCount>0)throw Error(`Cannot cleanup team while teammate "${$.agentId}" is still running`);if(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let $ of this.members.values())if($.role==="teammate")try{$.agent?.abort()}catch(J){if(!vW(J))throw J}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[$,J]of this.members.entries())if(J.role==="teammate")this.members.delete($)}requireTask($){let J=this.tasks.get($);if(!J)throw Error(`Task "${$}" was not found`);return J}assertDependenciesResolved($){let J=this.getUnresolvedDependencies($);if(J.length>0)throw Error(`Task "${$.id}" is blocked by "${J[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((J)=>{let Z=this.tasks.get(J);return!Z||Z.status!=="completed"})}trackMeaningfulEvent($,J){if(this.recordRunActivityFromAgentEvent($,J),J.type==="iteration_end"&&J.hadToolCalls){this.recordProgressStep($,`Completed iteration ${J.iteration} with ${J.toolCallCount} tool call(s)`);return}if(J.type==="content_end"&&J.contentType==="tool"&&!J.error){this.recordProgressStep($,`Finished tool "${J.toolName??"unknown"}"`);return}if(J.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${J.iterations} iterations)`});return}if(J.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:J.error.message})}recordRunActivityFromAgentEvent($,J){let Z;switch(J.type){case"iteration_start":Z=`iteration_${J.iteration}_started`;break;case"content_start":if(J.contentType==="tool")Z=`running_tool_${J.toolName??"unknown"}`;break;case"content_end":if(J.contentType==="tool")Z=J.error?this.formatProgressErrorActivity(`tool_${J.toolName??"unknown"}_error`,J.error):`finished_tool_${J.toolName??"unknown"}`;break;case"done":Z="finalizing_response";break;case"error":Z=this.formatProgressErrorActivity("run_error",J.error.message);break;default:break}if(!Z)return;for(let Q of this.runs.values()){if(Q.agentId!==$||Q.status!=="running")continue;this.recordRunProgress(Q,Z)}}recordRunProgress($,J){let Z=new Date;$.heartbeatAt=Z,$.lastProgressAt=Z,$.lastProgressMessage=J,$.currentActivity=J,this.emitEvent({type:b.RunProgress,run:{...$},message:J})}formatProgressErrorActivity($,J){let Z=J.replace(/\s+/g," ").trim();if(Z.length===0)return $;let Q=Z.length>240?`${Z.slice(0,237).trimEnd()}...`:Z;return`${$}: ${Q}`}recordProgressStep($,J,Z,Q=!1){this.missionStepCounter++;let W=this.members.get($);if(!W)return;let f=this.missionStepCounter-W.lastMissionStep,j=Date.now()-W.lastMissionAt;if(!Q&&f<this.missionLogIntervalSteps&&j<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Z,kind:"progress",summary:J})}buildMailboxNotification($){if($.length===0)return"";let J=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Z of $)J.push(`--- Message from ${Z.fromAgentId} | subject: ${Z.subject} ---`),J.push(Z.body);return J.push("---"),J.join(`
506
- `)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function wA($){return new Promise((J)=>setTimeout(J,$))}function U8($,J){let Z=0;for(let Q of $){if(!Q.startsWith(J))continue;let W=Number.parseInt(Q.slice(J.length),10);if(Number.isFinite(W))Z=Math.max(Z,W)}return Z}function cW($,J){switch(J.type){case"run_queued":case"run_started":$.activeTeamRunIds.add(J.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let Z;if(J.type==="run_failed")Z=J.run.error;else if(J.type==="run_cancelled"||J.type==="run_interrupted")Z=J.run.error??J.reason;$.activeTeamRunIds.delete(J.run.id),$.pendingTeamRunUpdates.push({runId:J.run.id,agentId:J.run.agentId,taskId:J.run.taskId,status:J.type.replace("run_",""),error:Z,iterations:J.run.result?.iterations}),KZ($);break}default:break}}async function dW($,J,Z){switch(J.type){case"run_progress":await Z("onTeamTaskProgress",$,J.run.agentId,J.message,{kind:J.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(J.event.type==="content_start"&&J.event.contentType==="text"&&typeof J.event.text==="string"){let Q=J.event.text.replace(/\s+/g," ").trim().slice(0,120);if(Q)await Z("onTeamTaskProgress",$,J.agentId,Q,{kind:"text"})}break;case"task_start":await Z("onTeamTaskStart",$,J.agentId,J.message);break;case"task_end":{if(J.error)await Z("onTeamTaskEnd",$,J.agentId,"failed",`[error] ${J.error.message}`,void 0,J.messages);else if(J.result?.finishReason==="aborted")await Z("onTeamTaskEnd",$,J.agentId,"cancelled","[done] aborted",J.result,J.result.messages);else await Z("onTeamTaskEnd",$,J.agentId,"completed",`[done] ${J.result?.finishReason??"completed"}`,J.result,J.result?.messages);break}default:break}}function lW($,J,Z,Q){if(!$.runtime.teamRuntime)return;let W=$.runtime.teamRuntime.getTeamName();Q({type:"team_progress",payload:{sessionId:J,teamName:W,lifecycle:F8({teamName:W,sessionId:J,event:Z}),summary:G8(W,$.runtime.teamRuntime.exportState())}})}function h4($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function pW($,J){if($.aborting)return!1;if(!(J==="completed"||J==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&h4($)}function KZ($){let J=$.teamRunWaiters.splice(0);for(let Z of J)Z()}async function rW($){while(!0){if($.aborting)return[];if($.pendingTeamRunUpdates.length>0){let J=[...$.pendingTeamRunUpdates];return $.pendingTeamRunUpdates.length=0,J}if($.activeTeamRunIds.size===0)return[];await new Promise((J)=>{$.teamRunWaiters.push(J)})}}function iW($,J){let Z=J.map((f)=>{let j=[`- ${f.runId} (${f.agentId}) -> ${f.status}`];if(f.taskId)j.push(` task=${f.taskId}`);if(typeof f.iterations==="number")j.push(` iterations=${f.iterations}`);if(f.error)j.push(` error=${f.error}`);return j.join("")}),Q=$.activeTeamRunIds.size,W=Q>0?`There are still ${Q} teammate run(s) in progress. Continue coordination and decide whether to wait for more updates.`:"No teammate runs are currently in progress. Continue coordination using these updates.";return b4(`System-delivered teammate async run updates:
507
- ${Z.join(`
505
+ ${f}`:f,j=J?.continueConversation?await Z.agent.continue(W):await Z.agent.run(W);return this.emitEvent({type:b.TaskEnd,agentId:$,result:j}),this.recordProgressStep($,`Completed a delegated run (${j.iterations} iterations)`,J?.taskId,!0),j}catch(Q){let W=Q instanceof Error?Q:Error(String(Q));if(this.emitEvent({type:b.TaskEnd,agentId:$,error:W,messages:Z.agent.getMessages()}),!pA(Z,W))this.appendMissionLog({agentId:$,taskId:J?.taskId,kind:"error",summary:W.message});throw W}finally{if(Z.runningCount--,Z.runningCount<=0&&this.members.get($)?.status!=="stopped")Z.status="idle"}}startTeammateRun($,f,J){let Z=`run_${String(++this.runCounter).padStart(5,"0")}`,Q={id:Z,agentId:$,taskId:J?.taskId,status:"queued",message:f,priority:J?.priority??0,retryCount:0,maxRetries:Math.max(0,J?.maxRetries??0),continueConversation:J?.continueConversation,startedAt:new Date(0),leaseOwner:J?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(Z,Q),this.runQueue.push(Z),this.emitEvent({type:b.RunQueued,run:{...Q}}),this.dispatchQueuedRuns(),{...Q}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let f=this.selectNextDispatchableQueuedRun();$=f.nextDelayedAttemptAt;let J=f.index;if(J<0){this.scheduleQueuedRunDispatch($);return}let[Z]=this.runQueue.splice(J,1),Q=Z?this.runs.get(Z):void 0;if(!Q||Q.status!=="queued")continue;this.executeQueuedRun(Q)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,f=Number.NEGATIVE_INFINITY,J,Z=Date.now();for(let Q=0;Q<this.runQueue.length;Q++){let W=this.runs.get(this.runQueue[Q]);if(!W||W.status!=="queued")continue;if(W.nextAttemptAt&&W.nextAttemptAt.getTime()>Z){if(!J||W.nextAttemptAt<J)J=W.nextAttemptAt;continue}if(W.priority>f)f=W.priority,$=Q}return{index:$,nextDelayedAttemptAt:J}}scheduleQueuedRunDispatch($){if(!$)return;let f=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},f)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let f of this.runs.values())if(f.status==="running")$++;return $}async executeQueuedRun($){let f=$.currentActivity===rA;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:b.RunStarted,run:{...$}});let J=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let Z=f?JN($):$.message,Q=await this.routeToTeammate($.agentId,Z,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=Q,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:b.RunCompleted,run:{...$}})}catch(Z){let Q=Z instanceof Error?Z.message:String(Z??"Unknown error");$.error=Q,$.endedAt=new Date;let W=this.members.get($.agentId);if(pA(W,Z))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:b.RunCancelled,run:{...$},reason:Q});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:b.RunFailed,run:{...$}})}finally{clearInterval(J),this.dispatchQueuedRuns()}}listRuns($){let f=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((J)=>{if(!f&&!["running","queued"].includes(J.status))return!1;if($?.status&&J.status!==$.status)return!1;if($?.agentId&&J.agentId!==$.agentId)return!1;return!0}).map((J)=>({...J}))}getRun($){let f=this.runs.get($);return f?{...f}:void 0}async awaitRun($,f=250){let J=this.runs.get($);if(!J)throw Error(`Run "${$}" was not found`);while(J.status==="queued"||J.status==="running")await iA(f);return{...J}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((f)=>["queued","running"].includes(f.status)))await iA($);return this.listRuns()}cancelRun($,f){let J=this.runs.get($);if(!J)throw Error(`Run "${$}" was not found`);if(J.status==="completed"||J.status==="failed")return{...J};J.status="cancelled",J.error=f,J.endedAt=new Date,J.currentActivity="cancelled";let Z=this.runQueue.indexOf($);if(Z>=0)this.runQueue.splice(Z,1);return this.emitEvent({type:b.RunCancelled,run:{...J},reason:f}),{...J}}recoverActiveRuns($="runtime_recovered"){let f=[];for(let J of this.runs.values()){if(!["queued","running"].includes(J.status))continue;let Z=this.members.get(J.agentId);if(!Z||Z.role!=="teammate"||!Z.agent){J.status="interrupted",J.error="teammate_unavailable_after_recovery",J.endedAt=new Date,J.currentActivity="interrupted",this.emitEvent({type:b.RunInterrupted,run:{...J},reason:J.error});continue}let Q=new Date;if(J.status="queued",J.error=void 0,J.endedAt=void 0,J.heartbeatAt=Q,J.lastProgressAt=Q,J.lastProgressMessage=$,J.currentActivity=rA,!this.runQueue.includes(J.id))this.runQueue.push(J.id);f.push({...J}),this.emitEvent({type:b.RunQueued,run:{...J}})}return this.dispatchQueuedRuns(),f}markStaleRunsInterrupted($="runtime_recovered"){let f=[];for(let J of this.runs.values()){if(!["queued","running"].includes(J.status))continue;J.status="interrupted",J.error=$,J.endedAt=new Date,J.currentActivity="interrupted",f.push({...J}),this.emitEvent({type:b.RunInterrupted,run:{...J},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),f}sendMessage($,f,J,Z,Q){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let W=this.members.get(f);if(!W)throw Error(`Unknown recipient "${f}"`);let j={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:f,subject:J,body:Z,taskId:Q,sentAt:new Date};if(this.mailbox.push(j),this.emitEvent({type:b.TeamMessage,message:{...j}}),W.role==="teammate"&&W.runningCount>0&&W.agent)W.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${J}". Use the team_read_mailbox tool to read it at your convenience.`;return{...j}}broadcast($,f,J,Z){let Q=[];for(let W of this.members.values()){if(W.agentId===$)continue;if(W.role==="lead")continue;Q.push(this.sendMessage($,W.agentId,f,J,Z?.taskId))}return Q}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let f={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:$.agentId,taskId:$.taskId,kind:$.kind,summary:$.summary,evidence:$.evidence,nextAction:$.nextAction};this.missionLog.push(f);let J=this.members.get($.agentId);if(J)J.lastMissionAt=Date.now(),J.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:b.TeamMissionLog,entry:{...f}}),{...f}}createOutcome($){let f={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:$.title,status:"draft",requiredSections:[...new Set($.requiredSections)],createdBy:$.createdBy,createdAt:new Date};return this.outcomes.set(f.id,f),this.emitEvent({type:b.OutcomeCreated,outcome:{...f}}),{...f}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let f=this.outcomes.get($.outcomeId);if(!f)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!f.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let J={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(J.id,J),f.status==="draft")f.status="in_review";return this.emitEvent({type:b.OutcomeFragmentAttached,fragment:{...J}}),{...J}}reviewOutcomeFragment($){let f=this.outcomeFragments.get($.fragmentId);if(!f)throw Error(`Fragment "${$.fragmentId}" was not found`);return f.status=$.approved?"reviewed":"rejected",f.reviewedBy=$.reviewedBy,f.reviewedAt=new Date,this.emitEvent({type:b.OutcomeFragmentReviewed,fragment:{...f}}),{...f}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((f)=>f.outcomeId===$).map((f)=>({...f}))}finalizeOutcome($){let f=this.outcomes.get($);if(!f)throw Error(`Outcome "${$}" was not found`);let J=this.listOutcomeFragments($);for(let Z of f.requiredSections)if(!J.some((W)=>W.section===Z&&W.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${Z}" is missing a reviewed fragment.`);return f.status="finalized",f.finalizedAt=new Date,this.emitEvent({type:b.OutcomeFinalized,outcome:{...f}}),{...f}}cleanup(){for(let $ of this.members.values())if($.role==="teammate"&&$.runningCount>0)throw Error(`Cannot cleanup team while teammate "${$.agentId}" is still running`);if(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let $ of this.members.values())if($.role==="teammate")try{$.agent?.abort()}catch(f){if(!sQ(f))throw f}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[$,f]of this.members.entries())if(f.role==="teammate")this.members.delete($)}requireTask($){let f=this.tasks.get($);if(!f)throw Error(`Task "${$}" was not found`);return f}assertDependenciesResolved($){let f=this.getUnresolvedDependencies($);if(f.length>0)throw Error(`Task "${$.id}" is blocked by "${f[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((f)=>{let J=this.tasks.get(f);return!J||J.status!=="completed"})}trackMeaningfulEvent($,f){if(this.recordRunActivityFromAgentEvent($,f),f.type==="iteration_end"&&f.hadToolCalls){this.recordProgressStep($,`Completed iteration ${f.iteration} with ${f.toolCallCount} tool call(s)`);return}if(f.type==="content_end"&&f.contentType==="tool"&&!f.error){this.recordProgressStep($,`Finished tool "${f.toolName??"unknown"}"`);return}if(f.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${f.iterations} iterations)`});return}if(f.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:f.error.message})}recordRunActivityFromAgentEvent($,f){let J;switch(f.type){case"iteration_start":J=`iteration_${f.iteration}_started`;break;case"content_start":if(f.contentType==="tool")J=`running_tool_${f.toolName??"unknown"}`;break;case"content_end":if(f.contentType==="tool")J=f.error?this.formatProgressErrorActivity(`tool_${f.toolName??"unknown"}_error`,f.error):`finished_tool_${f.toolName??"unknown"}`;break;case"done":J="finalizing_response";break;case"error":J=this.formatProgressErrorActivity("run_error",f.error.message);break;default:break}if(!J)return;for(let Z of this.runs.values()){if(Z.agentId!==$||Z.status!=="running")continue;this.recordRunProgress(Z,J)}}recordRunProgress($,f){let J=new Date;$.heartbeatAt=J,$.lastProgressAt=J,$.lastProgressMessage=f,$.currentActivity=f,this.emitEvent({type:b.RunProgress,run:{...$},message:f})}formatProgressErrorActivity($,f){let J=f.replace(/\s+/g," ").trim();if(J.length===0)return $;let Z=J.length>240?`${J.slice(0,237).trimEnd()}...`:J;return`${$}: ${Z}`}recordProgressStep($,f,J,Z=!1){this.missionStepCounter++;let Q=this.members.get($);if(!Q)return;let W=this.missionStepCounter-Q.lastMissionStep,j=Date.now()-Q.lastMissionAt;if(!Z&&W<this.missionLogIntervalSteps&&j<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:J,kind:"progress",summary:f})}buildMailboxNotification($){if($.length===0)return"";let f=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let J of $)f.push(`--- Message from ${J.fromAgentId} | subject: ${J.subject} ---`),f.push(J.body);return f.push("---"),f.join(`
506
+ `)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function iA($){return new Promise((f)=>setTimeout(f,$))}function T2($,f){let J=0;for(let Z of $){if(!Z.startsWith(f))continue;let Q=Number.parseInt(Z.slice(f.length),10);if(Number.isFinite(Q))J=Math.max(J,Q)}return J}function eQ($,f){switch(f.type){case"run_queued":case"run_started":$.activeTeamRunIds.add(f.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let J;if(f.type==="run_failed")J=f.run.error;else if(f.type==="run_cancelled"||f.type==="run_interrupted")J=f.run.error??f.reason;$.activeTeamRunIds.delete(f.run.id),$.pendingTeamRunUpdates.push({runId:f.run.id,agentId:f.run.agentId,taskId:f.run.taskId,status:f.type.replace("run_",""),error:J,iterations:f.run.result?.iterations}),O5($);break}default:break}}async function $W($,f,J){switch(f.type){case"run_progress":await J("onTeamTaskProgress",$,f.run.agentId,f.message,{kind:f.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(f.event.type==="content_start"&&f.event.contentType==="text"&&typeof f.event.text==="string"){let Z=f.event.text.replace(/\s+/g," ").trim().slice(0,120);if(Z)await J("onTeamTaskProgress",$,f.agentId,Z,{kind:"text"})}break;case"task_start":await J("onTeamTaskStart",$,f.agentId,f.message);break;case"task_end":{if(f.error)await J("onTeamTaskEnd",$,f.agentId,"failed",`[error] ${f.error.message}`,void 0,f.messages);else if(f.result?.finishReason==="aborted")await J("onTeamTaskEnd",$,f.agentId,"cancelled","[done] aborted",f.result,f.result.messages);else await J("onTeamTaskEnd",$,f.agentId,"completed",`[done] ${f.result?.finishReason??"completed"}`,f.result,f.result?.messages);break}default:break}}function fW($,f,J,Z){if(!$.runtime.teamRuntime)return;let Q=$.runtime.teamRuntime.getTeamName();Z({type:"team_progress",payload:{sessionId:f,teamName:Q,lifecycle:O2({teamName:Q,sessionId:f,event:J}),summary:z2(Q,$.runtime.teamRuntime.exportState())}})}function dJ($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function JW($,f){if($.aborting)return!1;if(!(f==="completed"||f==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&dJ($)}function O5($){let f=$.teamRunWaiters.splice(0);for(let J of f)J()}async function ZW($){while(!0){if($.aborting)return[];if($.pendingTeamRunUpdates.length>0){let f=[...$.pendingTeamRunUpdates];return $.pendingTeamRunUpdates.length=0,f}if($.activeTeamRunIds.size===0)return[];await new Promise((f)=>{$.teamRunWaiters.push(f)})}}function QW($,f){let J=f.map((W)=>{let j=[`- ${W.runId} (${W.agentId}) -> ${W.status}`];if(W.taskId)j.push(` task=${W.taskId}`);if(typeof W.iterations==="number")j.push(` iterations=${W.iterations}`);if(W.error)j.push(` error=${W.error}`);return j.join("")}),Z=$.activeTeamRunIds.size,Q=Z>0?`There are still ${Z} teammate run(s) in progress. Continue coordination and decide whether to wait for more updates.`:"No teammate runs are currently in progress. Continue coordination using these updates.";return lJ(`System-delivered teammate async run updates:
507
+ ${J.join(`
508
508
  `)}
509
509
 
510
- ${W}`,$.config.mode)}function b4($,J){return kT($,J==="plan"?"plan":J==="yolo"?"yolo":"act")}var nW=4;class k${adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor($,J={}){this.adapter=$;this.manifestStore=new mW($,J.messagesArtifactUploader,J.logger),this.teamChildren=new BZ($,this.manifestStore,(Z,Q,W)=>this.toPersistedMessages(Z,Q,W),k$.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,J,Z){if(!$)return;return J?E6(J.messages,J,Z):C6($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,J){this.manifestStore.writeSessionManifest($,J)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let J=$.startedAt??s(),Z=$.sessionId.trim(),Q=Z.length>0?Z:`${Date.now()}_${xT(5)}`,W=this.manifestStore.artifacts.sessionMessagesPath(Q),f=this.manifestStore.artifacts.sessionManifestPath(Q),j=GJ({metadata:$.metadata,prompt:$.prompt}),X={version:1,session_id:Q,source:$.source,pid:$.pid,started_at:J,status:"running",interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt?.trim()||void 0,metadata:j,messages_path:W};return await this.adapter.upsertSession({sessionId:Q,source:$.source,pid:$.pid,startedAt:J,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:null,parentAgentId:null,agentId:null,conversationId:null,isSubagent:!1,prompt:X.prompt??null,metadata:a$(X.metadata),hookPath:"",messagesPath:W,updatedAt:s()}),this.manifestStore.initializeMessagesFile(Q,W,J),this.manifestStore.writeSessionManifest(f,X),{manifestPath:f,messagesPath:W,manifest:X}}async updateSessionStatus($,J,Z){let Q;if((await qj(()=>this.adapter.getSession($),async(f)=>{return Q=Q0(J)?void 0:s(),this.adapter.updateSession({sessionId:$,status:J,endedAt:Q??null,exitCode:Q0(J)?null:typeof Z==="number"?Z:null,expectedStatusLock:f.statusLock})},nW)).updated){if(J==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:Q}}return{updated:!1}}async updateSession($){for(let J=0;J<nW;J++){let Z=await this.adapter.getSession($.sessionId);if(!Z)return{updated:!1};let Q=Z.metadata??void 0,W=$.metadata!==void 0?a$($.metadata)??{}:a$(Q)??{},f=E1(typeof Q?.title==="string"?Q.title:void 0),j=$.title!==void 0?E1($.title):f??vQ($.prompt);if(j)W.title=j;else delete W.title;let X=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:X?Object.keys(W).length>0?W:null:void 0,title:j,expectedStatusLock:Z.statusLock})).updated)continue;let{path:Y,manifest:A}=this.manifestStore.readManifestFile($.sessionId);if(A){if($.prompt!==void 0)A.prompt=$.prompt??void 0;let V=$.metadata!==void 0?a$($.metadata)??{}:a$(A.metadata)??{};if(j)V.title=j;A.metadata=Object.keys(V).length>0?V:void 0,this.manifestStore.writeSessionManifest(Y,A)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,J){return this.teamChildren.appendSubagentHookAudit(J),Promise.resolve()}persistSessionMessages($,J,Z){let Q=C6(J);return this.manifestStore.persistSessionMessages($,Q,Z)}applySubagentStatus($,J){return this.teamChildren.applySubagentStatus($,J)}applySubagentStatusBySessionId($,J){return this.teamChildren.applySubagentStatusBySessionId($,J)}applyStatusToRunningChildSessions($,J){return this.teamChildren.applyStatusToRunningChildSessions($,J)}onTeamTaskStart($,J,Z){return this.teamChildren.onTeamTaskStart($,J,Z)}onTeamTaskEnd($,J,Z,Q,W,f){return this.teamChildren.onTeamTaskEnd($,J,Z,Q,W,f)}onTeamTaskProgress($,J,Z,Q){return this.teamChildren.onTeamTaskProgress($,J,Z,Q)}handleSubAgentStart($,J){return this.teamChildren.handleSubAgentStart($,J)}handleSubAgentEnd($,J){return this.teamChildren.handleSubAgentEnd($,J)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(J){return typeof J==="object"&&J!==null&&"code"in J&&J.code==="EPERM"}}async reconcileDeadRunningSession($){if(Q0($.status)===!1||this.isPidAlive($.pid))return $;let J=s(),Z=k$.STALE_REASON;for(let Q=0;Q<nW;Q++){let W=await this.adapter.getSession($.sessionId);if(!W)return;if(Q0(W.status)===!1)return W;let f={...W.metadata??{},terminal_marker:Z,terminal_marker_at:J,terminal_marker_pid:W.pid,terminal_marker_source:k$.STALE_SOURCE},j=await this.adapter.updateSession({sessionId:W.sessionId,status:"failed",endedAt:J,exitCode:1,metadata:f,expectedStatusLock:W.statusLock});if(!j.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(W.sessionId,"failed");let X=Mj(W,{status:"failed",endedAt:J,exitCode:1,metadata:f}),{path:H}=this.manifestStore.readManifestFile(W.sessionId);return this.manifestStore.writeSessionManifest(H,X),this.manifestStore.appendStaleSessionHookLog(J,W.sessionId,W.pid,Z,k$.STALE_SOURCE),{...W,status:"failed",endedAt:J,exitCode:1,metadata:f,statusLock:j.statusLock,updatedAt:J}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let J=Math.max(1,Math.floor($)),Z=Math.min(J*5,2000);return await this.reconcileDeadSessions(Z),(await this.adapter.listSessions({limit:Z})).slice(0,J).map((W)=>{let f=a$(W.metadata??void 0),j=this.manifestStore.readSessionManifest(W.sessionId),X=E1(typeof j?.metadata?.title==="string"?j.metadata.title:void 0),H=X?{...f??{},title:X}:f;return{...W,metadata:H}})}async reconcileDeadSessions($=2000){let J=Math.max(1,Math.floor($)),Z=(await Promise.all(["idle","running","pending"].map((W)=>this.adapter.listSessions({limit:J,status:W})))).flat(),Q=0;for(let W of Z){let f=await this.reconcileDeadRunningSession(W);if(f&&f.status!==W.status)Q++}return Q}async deleteSession($){let J=$.trim();if(!J)throw Error("session id is required");let Z=await this.adapter.getSession(J);if(!Z)return{deleted:!1};if(await this.adapter.deleteSession(J,!1),!Z.isSubagent){let Q=await this.adapter.listSessions({limit:2000,parentSessionId:J});await this.adapter.deleteSession(J,!0),await Promise.allSettled(Q.map(async(W)=>{await H9(W.cwd,W.sessionId),vJ(W.messagesPath),vJ(this.manifestStore.artifacts.sessionManifestPath(W.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(W.sessionId)}))}if(await H9(Z.cwd,J),vJ(Z.messagesPath),vJ(this.manifestStore.artifacts.sessionManifestPath(J,!1)),Z.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(J);else{let Q=new Set([this.manifestStore.artifacts.sessionArtifactsDir(J)]);for(let W of[Z.messagesPath])if(typeof W==="string"&&W.trim().length>0)Q.add(IT(W));for(let W of Q)this.manifestStore.artifacts.removeDir(W)}return{deleted:!0}}}function tW(){return new Date().toISOString()}function bA($,J){let Z=`${$}.tmp`;vT(Z,`${JSON.stringify(J,null,2)}
511
- `,"utf8"),gT(Z,$)}class kA{sessionsDirPath;constructor($=uT()){this.sessionsDirPath=$}ensureSessionsDir(){if(!aW(this.sessionsDirPath))mT(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return hA(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return hA(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!aW($))return{version:1,sessions:{}};try{let J=JSON.parse(EA($,"utf8"));if(J?.version===1&&J.sessions)return J}catch{}return{version:1,sessions:{}}}writeIndex($){bA(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!aW($))return{version:1,nextId:1,requests:[]};try{let J=JSON.parse(EA($,"utf8"));if(J?.version===1&&typeof J.nextId==="number"&&Array.isArray(J.requests))return J}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){bA(this.spawnQueuePath(),$)}async upsertSession($){let J=this.readIndex();J.sessions[$.sessionId]=$,this.writeIndex(J)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((J)=>$.parentSessionId!==void 0?J.parentSessionId===$.parentSessionId:!0).filter((J)=>$.status!==void 0?J.status===$.status:!0).sort((J,Z)=>Z.startedAt.localeCompare(J.startedAt)).slice(0,$.limit)}async updateSession($){let J=this.readIndex(),Z=J.sessions[$.sessionId];if(!Z)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&Z.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:Z.statusLock};let Q=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:Z.statusLock,W={...Z,status:$.status??Z.status,endedAt:$.endedAt!==void 0?$.endedAt:Z.endedAt??null,exitCode:$.exitCode!==void 0?$.exitCode:Z.exitCode??null,prompt:$.prompt!==void 0?$.prompt:Z.prompt??null,metadata:$.metadata!==void 0?$.metadata??null:Z.metadata??null,parentSessionId:$.parentSessionId!==void 0?$.parentSessionId??null:Z.parentSessionId??null,parentAgentId:$.parentAgentId!==void 0?$.parentAgentId??null:Z.parentAgentId??null,agentId:$.agentId!==void 0?$.agentId??null:Z.agentId??null,conversationId:$.conversationId!==void 0?$.conversationId??null:Z.conversationId??null,statusLock:Q,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:Z.isSubagent,updatedAt:tW()};if($.setRunning)W.status="running",W.endedAt=null,W.exitCode=null;return J.sessions[$.sessionId]=W,this.writeIndex(J),{updated:!0,statusLock:W.statusLock}}async deleteSession($,J){let Z=this.readIndex();if(!Z.sessions[$])return!1;if(delete Z.sessions[$],J){for(let W of Object.values(Z.sessions))if(W.parentSessionId===$)delete Z.sessions[W.sessionId]}return this.writeIndex(Z),!0}async enqueueSpawnRequest($){let J=this.readQueue();J.requests.push({id:J.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:tW()}),J.nextId+=1,this.writeQueue(J)}async claimSpawnRequest($,J){let Z=this.readQueue(),Q=Z.requests.find((W)=>W.rootSessionId===$&&W.parentAgentId===J&&!W.consumedAt);if(!Q)return;return Q.consumedAt=tW(),this.writeQueue(Z),Q.task}}class sW extends k${constructor($,J={}){super(new kA($),J)}ensureSessionsDir(){return super.ensureSessionsDir()}}var mA={};w(mA,{CoreSessionService:()=>K$});import{existsSync as cT,mkdirSync as dT}from"node:fs";import{resolveSessionDataDir as lT}from"@cline/shared/storage";var oW=`
510
+ ${Q}`,$.config.mode)}function lJ($,f){return ZN($,f==="plan"?"plan":f==="yolo"?"yolo":"act")}var WW=4;class g${adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor($,f={}){this.adapter=$;this.manifestStore=new aQ($,f.messagesArtifactUploader,f.logger),this.teamChildren=new z5($,this.manifestStore,(J,Z,Q)=>this.toPersistedMessages(J,Z,Q),g$.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,f,J){if(!$)return;return f?c4(f.messages,f,J):u4($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,f){this.manifestStore.writeSessionManifest($,f)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let f=$.startedAt??s(),J=$.sessionId.trim(),Z=J.length>0?J:`${Date.now()}_${WN(5)}`,Q=this.manifestStore.artifacts.sessionMessagesPath(Z),W=this.manifestStore.artifacts.sessionManifestPath(Z),j=T8({metadata:$.metadata,prompt:$.prompt}),X={version:1,session_id:Z,source:$.source,pid:$.pid,started_at:f,status:"running",interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt?.trim()||void 0,metadata:j,messages_path:Q};return await this.adapter.upsertSession({sessionId:Z,source:$.source,pid:$.pid,startedAt:f,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:null,parentAgentId:null,agentId:null,conversationId:null,isSubagent:!1,prompt:X.prompt??null,metadata:$1(X.metadata),hookPath:"",messagesPath:Q,updatedAt:s()}),this.manifestStore.initializeMessagesFile(Z,Q,f),this.manifestStore.writeSessionManifest(W,X),{manifestPath:W,messagesPath:Q,manifest:X}}async updateSessionStatus($,f,J){let Z;if((await pj(()=>this.adapter.getSession($),async(W)=>{return Z=Z0(f)?void 0:s(),this.adapter.updateSession({sessionId:$,status:f,endedAt:Z??null,exitCode:Z0(f)?null:typeof J==="number"?J:null,expectedStatusLock:W.statusLock})},WW)).updated){if(f==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:Z}}return{updated:!1}}async updateSession($){for(let f=0;f<WW;f++){let J=await this.adapter.getSession($.sessionId);if(!J)return{updated:!1};let Z=J.metadata??void 0,Q=$.metadata!==void 0?$1($.metadata)??{}:$1(Z)??{},W=g1(typeof Z?.title==="string"?Z.title:void 0),j=$.title!==void 0?g1($.title):W??sZ($.prompt);if(j)Q.title=j;else delete Q.title;let X=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:X?Object.keys(Q).length>0?Q:null:void 0,title:j,expectedStatusLock:J.statusLock})).updated)continue;let{path:Y,manifest:A}=this.manifestStore.readManifestFile($.sessionId);if(A){if($.prompt!==void 0)A.prompt=$.prompt??void 0;let V=$.metadata!==void 0?$1($.metadata)??{}:$1(A.metadata)??{};if(j)V.title=j;A.metadata=Object.keys(V).length>0?V:void 0,this.manifestStore.writeSessionManifest(Y,A)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,f){return this.teamChildren.appendSubagentHookAudit(f),Promise.resolve()}persistSessionMessages($,f,J){let Z=u4(f);return this.manifestStore.persistSessionMessages($,Z,J)}applySubagentStatus($,f){return this.teamChildren.applySubagentStatus($,f)}applySubagentStatusBySessionId($,f){return this.teamChildren.applySubagentStatusBySessionId($,f)}applyStatusToRunningChildSessions($,f){return this.teamChildren.applyStatusToRunningChildSessions($,f)}onTeamTaskStart($,f,J){return this.teamChildren.onTeamTaskStart($,f,J)}onTeamTaskEnd($,f,J,Z,Q,W){return this.teamChildren.onTeamTaskEnd($,f,J,Z,Q,W)}onTeamTaskProgress($,f,J,Z){return this.teamChildren.onTeamTaskProgress($,f,J,Z)}handleSubAgentStart($,f){return this.teamChildren.handleSubAgentStart($,f)}handleSubAgentEnd($,f){return this.teamChildren.handleSubAgentEnd($,f)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(f){return typeof f==="object"&&f!==null&&"code"in f&&f.code==="EPERM"}}async reconcileDeadRunningSession($){if(Z0($.status)===!1||this.isPidAlive($.pid))return $;let f=s(),J=g$.STALE_REASON;for(let Z=0;Z<WW;Z++){let Q=await this.adapter.getSession($.sessionId);if(!Q)return;if(Z0(Q.status)===!1)return Q;let W={...Q.metadata??{},terminal_marker:J,terminal_marker_at:f,terminal_marker_pid:Q.pid,terminal_marker_source:g$.STALE_SOURCE},j=await this.adapter.updateSession({sessionId:Q.sessionId,status:"failed",endedAt:f,exitCode:1,metadata:W,expectedStatusLock:Q.statusLock});if(!j.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(Q.sessionId,"failed");let X=lj(Q,{status:"failed",endedAt:f,exitCode:1,metadata:W}),{path:H}=this.manifestStore.readManifestFile(Q.sessionId);return this.manifestStore.writeSessionManifest(H,X),this.manifestStore.appendStaleSessionHookLog(f,Q.sessionId,Q.pid,J,g$.STALE_SOURCE),{...Q,status:"failed",endedAt:f,exitCode:1,metadata:W,statusLock:j.statusLock,updatedAt:f}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let f=Math.max(1,Math.floor($)),J=Math.min(f*5,2000);return await this.reconcileDeadSessions(J),(await this.adapter.listSessions({limit:J})).slice(0,f).map((Q)=>{let W=$1(Q.metadata??void 0),j=this.manifestStore.readSessionManifest(Q.sessionId),X=g1(typeof j?.metadata?.title==="string"?j.metadata.title:void 0),H=X?{...W??{},title:X}:W;return{...Q,metadata:H}})}async reconcileDeadSessions($=2000){let f=Math.max(1,Math.floor($)),J=(await Promise.all(["idle","running","pending"].map((Q)=>this.adapter.listSessions({limit:f,status:Q})))).flat(),Z=0;for(let Q of J){let W=await this.reconcileDeadRunningSession(Q);if(W&&W.status!==Q.status)Z++}return Z}async deleteSession($){let f=$.trim();if(!f)throw Error("session id is required");let J=await this.adapter.getSession(f);if(!J)return{deleted:!1};if(await this.adapter.deleteSession(f,!1),!J.isSubagent){let Z=await this.adapter.listSessions({limit:2000,parentSessionId:f});await this.adapter.deleteSession(f,!0),await Promise.allSettled(Z.map(async(Q)=>{await D9(Q.cwd,Q.sessionId),t8(Q.messagesPath),t8(this.manifestStore.artifacts.sessionManifestPath(Q.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(Q.sessionId)}))}if(await D9(J.cwd,f),t8(J.messagesPath),t8(this.manifestStore.artifacts.sessionManifestPath(f,!1)),J.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(f);else{let Z=new Set([this.manifestStore.artifacts.sessionArtifactsDir(f)]);for(let Q of[J.messagesPath])if(typeof Q==="string"&&Q.trim().length>0)Z.add(QN(Q));for(let Q of Z)this.manifestStore.artifacts.removeDir(Q)}return{deleted:!0}}}function XW(){return new Date().toISOString()}function oA($,f){let J=`${$}.tmp`;HN(J,`${JSON.stringify(f,null,2)}
511
+ `,"utf8"),XN(J,$)}class eA{sessionsDirPath;constructor($=YN()){this.sessionsDirPath=$}ensureSessionsDir(){if(!jW(this.sessionsDirPath))jN(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return sA(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return sA(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!jW($))return{version:1,sessions:{}};try{let f=JSON.parse(tA($,"utf8"));if(f?.version===1&&f.sessions)return f}catch{}return{version:1,sessions:{}}}writeIndex($){oA(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!jW($))return{version:1,nextId:1,requests:[]};try{let f=JSON.parse(tA($,"utf8"));if(f?.version===1&&typeof f.nextId==="number"&&Array.isArray(f.requests))return f}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){oA(this.spawnQueuePath(),$)}async upsertSession($){let f=this.readIndex();f.sessions[$.sessionId]=$,this.writeIndex(f)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((f)=>$.parentSessionId!==void 0?f.parentSessionId===$.parentSessionId:!0).filter((f)=>$.status!==void 0?f.status===$.status:!0).sort((f,J)=>J.startedAt.localeCompare(f.startedAt)).slice(0,$.limit)}async updateSession($){let f=this.readIndex(),J=f.sessions[$.sessionId];if(!J)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&J.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:J.statusLock};let Z=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:J.statusLock,Q={...J,status:$.status??J.status,endedAt:$.endedAt!==void 0?$.endedAt:J.endedAt??null,exitCode:$.exitCode!==void 0?$.exitCode:J.exitCode??null,prompt:$.prompt!==void 0?$.prompt:J.prompt??null,metadata:$.metadata!==void 0?$.metadata??null:J.metadata??null,parentSessionId:$.parentSessionId!==void 0?$.parentSessionId??null:J.parentSessionId??null,parentAgentId:$.parentAgentId!==void 0?$.parentAgentId??null:J.parentAgentId??null,agentId:$.agentId!==void 0?$.agentId??null:J.agentId??null,conversationId:$.conversationId!==void 0?$.conversationId??null:J.conversationId??null,statusLock:Z,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:J.isSubagent,updatedAt:XW()};if($.setRunning)Q.status="running",Q.endedAt=null,Q.exitCode=null;return f.sessions[$.sessionId]=Q,this.writeIndex(f),{updated:!0,statusLock:Q.statusLock}}async deleteSession($,f){let J=this.readIndex();if(!J.sessions[$])return!1;if(delete J.sessions[$],f){for(let Q of Object.values(J.sessions))if(Q.parentSessionId===$)delete J.sessions[Q.sessionId]}return this.writeIndex(J),!0}async enqueueSpawnRequest($){let f=this.readQueue();f.requests.push({id:f.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:XW()}),f.nextId+=1,this.writeQueue(f)}async claimSpawnRequest($,f){let J=this.readQueue(),Z=J.requests.find((Q)=>Q.rootSessionId===$&&Q.parentAgentId===f&&!Q.consumedAt);if(!Z)return;return Z.consumedAt=XW(),this.writeQueue(J),Z.task}}class HW extends g${constructor($,f={}){super(new eA($),f)}ensureSessionsDir(){return super.ensureSessionsDir()}}var JV={};w(JV,{CoreSessionService:()=>F$});import{existsSync as AN,mkdirSync as VN}from"node:fs";import{resolveSessionDataDir as BN}from"@cline/shared/storage";var YW=`
512
512
  session_id AS sessionId,
513
513
  source,
514
514
  pid,
@@ -535,50 +535,50 @@ ${W}`,$.config.mode)}function b4($,J){return kT($,J==="plan"?"plan":J==="yolo"?"
535
535
  metadata_json AS metadata,
536
536
  hook_path AS hookPath,
537
537
  messages_path AS messagesPath,
538
- updated_at AS updatedAt`;function eW($){$.interactive=$.interactive===1,$.enableTools=$.enableTools===1,$.enableSpawn=$.enableSpawn===1,$.enableTeams=$.enableTeams===1,$.isSubagent=$.isSubagent===1;let J=$.metadata;if(typeof J==="string"&&J.trim())try{let Z=JSON.parse(J);$.metadata=Z&&typeof Z==="object"&&!Array.isArray(Z)?Z:null}catch{$.metadata=null}else $.metadata=null;return $}function $7($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function IA($){return{...$,tasks:$.tasks.map((J)=>({...J,createdAt:new Date(J.createdAt),updatedAt:new Date(J.updatedAt)})),mailbox:$.mailbox.map((J)=>({...J,sentAt:new Date(J.sentAt),readAt:J.readAt?new Date(J.readAt):void 0})),missionLog:$.missionLog.map((J)=>({...J,ts:new Date(J.ts)})),runs:($.runs??[]).map((J)=>({...J,startedAt:new Date(J.startedAt),endedAt:J.endedAt?new Date(J.endedAt):void 0,nextAttemptAt:J.nextAttemptAt?new Date(J.nextAttemptAt):void 0,heartbeatAt:J.heartbeatAt?new Date(J.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),finalizedAt:J.finalizedAt?new Date(J.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),reviewedAt:J.reviewedAt?new Date(J.reviewedAt):void 0}))}}class xA{store;sessionsDirPath;constructor($,J=lT()){this.store=$;this.sessionsDirPath=J}ensureSessionsDir(){if(!cT(this.sessionsDirPath))dT(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
538
+ updated_at AS updatedAt`;function AW($){$.interactive=$.interactive===1,$.enableTools=$.enableTools===1,$.enableSpawn=$.enableSpawn===1,$.enableTeams=$.enableTeams===1,$.isSubagent=$.isSubagent===1;let f=$.metadata;if(typeof f==="string"&&f.trim())try{let J=JSON.parse(f);$.metadata=J&&typeof J==="object"&&!Array.isArray(J)?J:null}catch{$.metadata=null}else $.metadata=null;return $}function VW($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function $V($){return{...$,tasks:$.tasks.map((f)=>({...f,createdAt:new Date(f.createdAt),updatedAt:new Date(f.updatedAt)})),mailbox:$.mailbox.map((f)=>({...f,sentAt:new Date(f.sentAt),readAt:f.readAt?new Date(f.readAt):void 0})),missionLog:$.missionLog.map((f)=>({...f,ts:new Date(f.ts)})),runs:($.runs??[]).map((f)=>({...f,startedAt:new Date(f.startedAt),endedAt:f.endedAt?new Date(f.endedAt):void 0,nextAttemptAt:f.nextAttemptAt?new Date(f.nextAttemptAt):void 0,heartbeatAt:f.heartbeatAt?new Date(f.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),finalizedAt:f.finalizedAt?new Date(f.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),reviewedAt:f.reviewedAt?new Date(f.reviewedAt):void 0}))}}class fV{store;sessionsDirPath;constructor($,f=BN()){this.store=$;this.sessionsDirPath=f}ensureSessionsDir(){if(!AN(this.sessionsDirPath))VN(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
539
539
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
540
540
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
541
541
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
542
542
  metadata_json, transcript_path, hook_path, messages_path, updated_at
543
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,$.statusLock,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.isSubagent?1:0,$.prompt??null,$7($.metadata),"",$.hookPath??"",$.messagesPath??null,$.updatedAt])}async getSession($){let J=this.store.queryOne(`SELECT ${oW} FROM sessions WHERE session_id = ?`,[$]);return J?eW(J):void 0}async listSessions($){let J=[],Z=[];if($.parentSessionId)J.push("parent_session_id = ?"),Z.push($.parentSessionId);if($.status)J.push("status = ?"),Z.push($.status);let Q=J.length>0?`WHERE ${J.join(" AND ")}`:"";return this.store.queryAll(`SELECT ${oW}
543
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,$.statusLock,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.isSubagent?1:0,$.prompt??null,VW($.metadata),"",$.hookPath??"",$.messagesPath??null,$.updatedAt])}async getSession($){let f=this.store.queryOne(`SELECT ${YW} FROM sessions WHERE session_id = ?`,[$]);return f?AW(f):void 0}async listSessions($){let f=[],J=[];if($.parentSessionId)f.push("parent_session_id = ?"),J.push($.parentSessionId);if($.status)f.push("status = ?"),J.push($.status);let Z=f.length>0?`WHERE ${f.join(" AND ")}`:"";return this.store.queryAll(`SELECT ${YW}
544
544
  FROM sessions
545
- ${Q}
545
+ ${Z}
546
546
  ORDER BY started_at DESC
547
- LIMIT ?`,[...Z,$.limit]).map(eW)}async updateSession($){if($.setRunning){if($.expectedStatusLock===void 0)return{updated:!1,statusLock:0};return{updated:(this.store.run(`UPDATE sessions
547
+ LIMIT ?`,[...J,$.limit]).map(AW)}async updateSession($){if($.setRunning){if($.expectedStatusLock===void 0)return{updated:!1,statusLock:0};return{updated:(this.store.run(`UPDATE sessions
548
548
  SET status = 'running', ended_at = NULL, exit_code = NULL, updated_at = ?, status_lock = ?,
549
549
  parent_session_id = ?, parent_agent_id = ?, agent_id = ?, conversation_id = ?, is_subagent = 1,
550
550
  prompt = COALESCE(prompt, ?)
551
- WHERE session_id = ? AND status_lock = ?`,[s(),$.expectedStatusLock+1,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.prompt??null,$.sessionId,$.expectedStatusLock]).changes??0)>0,statusLock:$.expectedStatusLock+1}}let J=[],Z=[];if($.status!==void 0)J.push("status = ?"),Z.push($.status);if($.endedAt!==void 0)J.push("ended_at = ?"),Z.push($.endedAt);if($.exitCode!==void 0)J.push("exit_code = ?"),Z.push($.exitCode);if($.prompt!==void 0)J.push("prompt = ?"),Z.push($.prompt??null);if($.metadata!==void 0)J.push("metadata_json = ?"),Z.push($7($.metadata));if($.parentSessionId!==void 0)J.push("parent_session_id = ?"),Z.push($.parentSessionId??null);if($.parentAgentId!==void 0)J.push("parent_agent_id = ?"),Z.push($.parentAgentId??null);if($.agentId!==void 0)J.push("agent_id = ?"),Z.push($.agentId??null);if($.conversationId!==void 0)J.push("conversation_id = ?"),Z.push($.conversationId??null);if(J.length===0){let j=await this.getSession($.sessionId);return{updated:!!j,statusLock:j?.statusLock??0}}let Q=0;if($.expectedStatusLock!==void 0)Q=$.expectedStatusLock+1,J.push("status_lock = ?"),Z.push(Q);J.push("updated_at = ?"),Z.push(s());let W=`UPDATE sessions SET ${J.join(", ")} WHERE session_id = ?`;if(Z.push($.sessionId),$.expectedStatusLock!==void 0)W+=" AND status_lock = ?",Z.push($.expectedStatusLock);if((this.store.run(W,Z).changes??0)===0)return{updated:!1,statusLock:0};if($.expectedStatusLock===void 0)Q=(await this.getSession($.sessionId))?.statusLock??0;return{updated:!0,statusLock:Q}}async deleteSession($,J){let Z=this.store.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(J)this.store.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Z>0}async enqueueSpawnRequest($){this.store.run(`INSERT INTO subagent_spawn_queue (root_session_id, parent_agent_id, task, system_prompt, created_at, consumed_at)
552
- VALUES (?, ?, ?, ?, ?, NULL)`,[$.rootSessionId,$.parentAgentId,$.task??null,$.systemPrompt??null,s()])}async claimSpawnRequest($,J){let Z=this.store.queryOne(`SELECT id, task FROM subagent_spawn_queue
551
+ WHERE session_id = ? AND status_lock = ?`,[s(),$.expectedStatusLock+1,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.prompt??null,$.sessionId,$.expectedStatusLock]).changes??0)>0,statusLock:$.expectedStatusLock+1}}let f=[],J=[];if($.status!==void 0)f.push("status = ?"),J.push($.status);if($.endedAt!==void 0)f.push("ended_at = ?"),J.push($.endedAt);if($.exitCode!==void 0)f.push("exit_code = ?"),J.push($.exitCode);if($.prompt!==void 0)f.push("prompt = ?"),J.push($.prompt??null);if($.metadata!==void 0)f.push("metadata_json = ?"),J.push(VW($.metadata));if($.parentSessionId!==void 0)f.push("parent_session_id = ?"),J.push($.parentSessionId??null);if($.parentAgentId!==void 0)f.push("parent_agent_id = ?"),J.push($.parentAgentId??null);if($.agentId!==void 0)f.push("agent_id = ?"),J.push($.agentId??null);if($.conversationId!==void 0)f.push("conversation_id = ?"),J.push($.conversationId??null);if(f.length===0){let j=await this.getSession($.sessionId);return{updated:!!j,statusLock:j?.statusLock??0}}let Z=0;if($.expectedStatusLock!==void 0)Z=$.expectedStatusLock+1,f.push("status_lock = ?"),J.push(Z);f.push("updated_at = ?"),J.push(s());let Q=`UPDATE sessions SET ${f.join(", ")} WHERE session_id = ?`;if(J.push($.sessionId),$.expectedStatusLock!==void 0)Q+=" AND status_lock = ?",J.push($.expectedStatusLock);if((this.store.run(Q,J).changes??0)===0)return{updated:!1,statusLock:0};if($.expectedStatusLock===void 0)Z=(await this.getSession($.sessionId))?.statusLock??0;return{updated:!0,statusLock:Z}}async deleteSession($,f){let J=this.store.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(f)this.store.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return J>0}async enqueueSpawnRequest($){this.store.run(`INSERT INTO subagent_spawn_queue (root_session_id, parent_agent_id, task, system_prompt, created_at, consumed_at)
552
+ VALUES (?, ?, ?, ?, ?, NULL)`,[$.rootSessionId,$.parentAgentId,$.task??null,$.systemPrompt??null,s()])}async claimSpawnRequest($,f){let J=this.store.queryOne(`SELECT id, task FROM subagent_spawn_queue
553
553
  WHERE root_session_id = ? AND parent_agent_id = ? AND consumed_at IS NULL
554
- ORDER BY id ASC LIMIT 1`,[$,J]);if(!Z||typeof Z.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[s(),Z.id]),Z.task??void 0}}class K$ extends k${store;constructor($,J={}){super(new xA($,J.sessionArtifactsDir),J);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
554
+ ORDER BY id ASC LIMIT 1`,[$,f]);if(!J||typeof J.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[s(),J.id]),J.task??void 0}}class F$ extends g${store;constructor($,f={}){super(new fV($,f.sessionArtifactsDir),f);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
555
555
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
556
556
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
557
557
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
558
558
  metadata_json, transcript_path, hook_path, messages_path, updated_at
559
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,s()])}}function pT($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let J=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(J==="local"||J==="hub"||J==="remote")return J;return"auto"}var k4,I4;function rT($,J){if($!=="auto"&&$!=="hub")return;if(J.hub?.endpoint?.trim())return;fZ(J.hub?.workspaceRoot?.trim()||J.hub?.cwd?.trim()||process.cwd())}async function iT($){await $.reconcileDeadSessions?.().catch(()=>{})}function uA($){try{let J=new V$;return J.init(),new K$(J,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(J){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),vA($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:J,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new sW(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function gA($,J,Z){return new G$({sessionService:Z??$.sessionService??uA($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:J,fetch:$.fetch})}async function J7($){if(k4)return k4;if(I4)return await I4;return I4=(async()=>{return k4=uA($),await iT(k4),k4})().finally(()=>{I4=void 0}),await I4}async function D8($){let J=f2($.distinctId);$.telemetry?.setDistinctId(J);let Z=pT($);if(rT(Z,$),Z==="remote"){let Q=$.remote?.endpoint?.trim();if(!Q)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:Q}),new K8({endpoint:Q,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Z==="hub"){let Q=$.hub?.endpoint?.trim(),W=Q||await Q2({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!W)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:W,explicitEndpoint:Q||void 0}),new h$({url:W,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Z==="auto"){let Q=await w4({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(Q){$.logger?.log("Using discovered local hub runtime host",{url:Q});let W=new h$({url:Q,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await W.connect(),W}catch(f){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:f}),vA($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:f,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),gA($,J)}return gA($,J)}class x4{clientName;runtimeAddress;automation;settings;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,J,Z,Q,W,f,j,X,H){this.clientName=J,this.runtimeAddress=Z,this.host=$,this.prepare=Q,this.capabilities=W,this.logger=f,this.telemetry=j,this.distinctId=X,this.settings=XY($),this.pendingPrompts=HY($),this.automation=new v9(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=H?new z4({workspaceRoot:H.workspaceRoot??process.cwd(),specs:{cronSpecsDir:H.cronSpecsDir??H.cronDir,scope:RH(H.cronScope),workspaceRoot:H.workspaceRoot},runtimeHandlers:DH({host:$,getExtensionContext:()=>E5({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:H.dbPath,logger:H.logger,pollIntervalMs:H.pollIntervalMs,claimLeaseSeconds:H.claimLeaseSeconds,globalMaxConcurrency:H.globalMaxConcurrency,watcherDebounceMs:H.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((Y)=>{if(Y.type!=="ended")return;this.disposeSessionBootstrap(Y.payload.sessionId)})}static async create($={}){let J=R0($.capabilities),Z=await D8({...$,capabilities:J}),Q=UH($.automation),W=new x4(Z,$.clientName,Z.runtimeAddress,$.prepare,J,$.logger,$.telemetry,$.distinctId,Q?{...Q,logger:$.logger}:void 0);if(Q&&Q.autoStart!==!1)await W.automation.start();return W}async disposeSessionBootstrap($){let J=this.activeSessionBootstraps.get($);if(!J)return;this.activeSessionBootstraps.delete($),await Promise.resolve(J.dispose?.())}async start($){let J=AY($),Z=await this.prepare?.(J);try{let Q=Z?await Z.applyToStartSessionInput(J):J,W=await this.host.startSession(o9(Q,{defaultCapabilities:this.capabilities,withExtensionContext:(f)=>E5({automationService:this.automationService,automation:this.automation,context:f,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Z)if(await this.host.getSession(W.sessionId))this.activeSessionBootstraps.set(W.sessionId,Z);else await Promise.resolve(Z.dispose?.());return VY({input:Q,sessionId:W.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),W}catch(Q){throw await Promise.resolve(Z?.dispose?.()),Q}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let J=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(J.map((Z)=>this.disposeSessionBootstrap(Z)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await JZ(this.host,$);list=async($=200,J={})=>await this.listHistory({...J,limit:$});delete=async($)=>{let J=await this.host.deleteSession($);if(J)await this.disposeSessionBootstrap($);return J};update=(...$)=>this.host.updateSession(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let J=$.start?o9($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Z)=>E5({automationService:this.automationService,automation:this.automation,context:Z,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:$.sessionId,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restore:$.restore,start:J})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,J){return this.host.subscribe($,J)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}var lA={};w(lA,{resolvePluginSkillDirectoriesFromPaths:()=>g1,resolvePluginConfigSearchPaths:()=>_J,resolveAndLoadAgentPlugins:()=>u2,resolveAgentPluginPaths:()=>m1,loadAgentPluginsFromPathsWithDiagnostics:()=>x1,loadAgentPluginsFromPaths:()=>c6,loadAgentPluginFromPath:()=>zJ,discoverPluginModulePaths:()=>TJ});var iA={};w(iA,{toHookConfigFileName:()=>qJ,runSubprocessEvent:()=>P8,runHook:()=>z8,resolveHooksConfigSearchPaths:()=>NJ,parseHookEventPayload:()=>L8,mergeAgentHooks:()=>d1,listHookConfigFiles:()=>o$,createSubprocessHooks:()=>UZ,createHookConfigFileHooks:()=>yJ,createHookConfigFileExtension:()=>p2,createHookAuditHooks:()=>l2,createAgentHooksExtension:()=>c2,HookEventPayloadSchema:()=>FZ,HookEventNameSchema:()=>GZ,HookConfigFileName:()=>d2,HOOK_CONFIG_FILE_EVENT_MAP:()=>MJ,HOOKS_CONFIG_DIRECTORY_NAME:()=>a6});import{HookEventNameSchema as GZ,HookEventPayloadSchema as FZ,parseHookEventPayload as L8,resolveHookSessionContext as $N}from"@cline/shared";import{z as X2}from"zod";import{spawn as nT}from"node:child_process";import{augmentNodeCommandForDebug as aT,withResolvedClineBuildEnv as tT}from"@cline/shared";function sT($){let J=$.trim();if(!J)return{};let Q=J.split(`
560
- `).map((f)=>f.trim()).filter(Boolean).filter((f)=>f.startsWith("HOOK_CONTROL\t")).map((f)=>f.slice(13)),W=Q.length>0?Q[Q.length-1]:J;try{return{parsedJson:JSON.parse(W)}}catch(f){return{parseError:f instanceof Error?f.message:"Failed to parse subprocess stdout JSON"}}}function oT($,J){let Z=$ instanceof Error?$:Error(String($)),Q=Z,W=J.join(" ");if(Q.code==="EACCES")return Error(`Failed to execute hook command "${W}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return Error(`Failed to execute hook command "${W}": ${Z.message}`)}async function eT($,J){let Z=$.stdin;if(!Z)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((Q,W)=>{let f=(j)=>{Z.off("error",f);let X=j.code;if(X==="EPIPE"||X==="ERR_STREAM_DESTROYED"){Q();return}W(j)};Z.once("error",f),Z.end(J,(j)=>{if(Z.off("error",f),j){let X=j.code;if(X==="EPIPE"||X==="ERR_STREAM_DESTROYED"){Q();return}W(j);return}Q()})})}async function P8($,J){let Z=aT(J.command,{env:J.env,debugRole:"hook"});if(!Array.isArray(Z)||Z.length===0)throw Error("runSubprocessEvent requires a non-empty command");let Q=!!J.detached,W=nT(Z[0],Z.slice(1),{cwd:J.cwd,env:tT(J.env),stdio:Q?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Q}),f=new Promise((B)=>{W.once("spawn",()=>{try{J.onSpawn?.({command:Z,pid:W.pid??void 0,detached:Q})}catch{}B()})}),j=new Promise((B,K)=>{W.once("error",(G)=>{K(oT(G,Z))})});if(await eT(W,JSON.stringify($)),Q){await Promise.race([f,j]),W.unref();return}if(!W.stdout||!W.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let X="",H="",Y=!1,A;W.stdout.on("data",(B)=>{X+=B.toString()}),W.stderr.on("data",(B)=>{H+=B.toString()});let V=new Promise((B)=>{if((J.timeoutMs??0)>0)A=setTimeout(()=>{Y=!0,W.kill("SIGKILL")},J.timeoutMs);W.once("close",(K)=>{if(A)clearTimeout(A);let{parsedJson:G,parseError:D}=sT(X);B({exitCode:K,stdout:X,stderr:H,parsedJson:G,parseError:D,timedOut:Y})})});return await Promise.race([V,j])}var JN=X2.object({contextModification:X2.string().optional(),cancel:X2.boolean().optional(),review:X2.boolean().optional(),errorMessage:X2.string().optional(),context:X2.string().optional(),overrideInput:X2.unknown().optional()}).passthrough();var ZN=["agent","hook"];async function z8($,J={}){let Z=J.command??ZN;return await P8($,{command:Z,cwd:J.cwd,env:J.env,detached:J.detached,timeoutMs:J.timeoutMs,onSpawn:J.onSpawn})}function rA($){return $ instanceof Error?$:Error(String($))}function QN($){if(!$||typeof $!=="object")return;let J=JN.safeParse($);if(!J.success)return;let Z=J.data;if(!(("cancel"in Z)||("review"in Z)||("context"in Z)||("contextModification"in Z)||("overrideInput"in Z)||("errorMessage"in Z)))return;let W=typeof Z.context==="string"?Z.context:typeof Z.contextModification==="string"?Z.contextModification:typeof Z.errorMessage==="string"&&Z.errorMessage.length>0?Z.errorMessage:void 0;return{cancel:typeof Z.cancel==="boolean"?Z.cancel:void 0,review:typeof Z.review==="boolean"?Z.review:void 0,context:W,overrideInput:Object.hasOwn(Z,"overrideInput")?Z.overrideInput:void 0}}function pA($){if(!$||typeof $!=="object")return{};let J={};for(let[Z,Q]of Object.entries($))if(typeof Q==="string")J[Z]=Q;else J[Z]=JSON.stringify(Q);return J}function I$($,J,Z){let Q=Z.env??process.env,W=Q.CLINE_USER_ID?.trim()||Q.USER?.trim()||"unknown",f=Z.cwd||process.cwd();return{clineVersion:Q.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:J.conversationId,sessionContext:$N(Z.sessionContext,{hookName:$,conversationId:J.conversationId,agentId:J.agentId,parentAgentId:J.parentAgentId}),workspaceRoots:f?[f]:[],workspaceInfo:Z.workspaceInfo,userId:W,agent_id:J.agentId,parent_agent_id:J.parentAgentId}}function WN($){return{name:$.name,message:$.message,stack:$.stack}}function fN($){let J=String($??"").toLowerCase();return J.includes("cancel")||J.includes("abort")||J.includes("interrupt")}function jN($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function XN($){return $.filter((J)=>J.type==="text"&&typeof J.text==="string").map((J)=>J.text).join("")}function HN($){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 YN($){if(!$)return;let J={};if($.cancel===!0)J.stop=!0;if($.overrideInput!==void 0)J.input=$.overrideInput;return Object.keys(J).length>0?J:void 0}async function H2($,J){try{let Z=await z8($,{command:J.command,cwd:J.cwd,env:J.env,detached:!0,onSpawn:J.onSpawn});J.onDispatch?.({payload:$,result:Z,detached:!0})}catch(Z){J.onDispatchError?.(rA(Z),$)}}function UZ($={}){return{hooks:{beforeRun:async(X)=>{let H=jN(X);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let A={...I$("agent_resume",H,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await H2(A,$)}else{let A={...I$("agent_start",H,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await H2(A,$)}return},beforeTool:async(X)=>{let H={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},Y={...I$("tool_call",H,$),hookName:"tool_call",iteration:X.snapshot.iteration,tool_call:{id:X.toolCall.toolCallId,name:X.toolCall.toolName,input:X.input},preToolUse:{toolName:X.toolCall.toolName,parameters:pA(X.input)}};try{let A=await z8(Y,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:Y,result:A,detached:!1}),A?.timedOut)throw Error("tool_call hook command timed out");if(A?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${A.parseError}`);return YN(QN(A?.parsedJson))}catch(A){$.onDispatchError?.(rA(A),Y);return}},afterTool:async(X)=>{let H=HN(X),Y={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},A={...I$("tool_result",Y,$),hookName:"tool_result",iteration:X.snapshot.iteration,tool_result:H,postToolUse:{toolName:H.name,parameters:pA(H.input),result:typeof H.output==="string"?H.output:JSON.stringify(H.output),success:!H.error,executionTimeMs:H.durationMs}};await H2(A,$);return},afterRun:async({snapshot:X,result:H})=>{let Y={agentId:X.agentId,conversationId:X.conversationId??X.runId??X.agentId,parentAgentId:X.parentAgentId??null};if(H.status==="completed"){let B={...I$("agent_end",Y,$),hookName:"agent_end",iteration:H.iterations,turn:{outputText:H.outputText,status:H.status},taskComplete:{taskMetadata:{}}};await H2(B,$);return}let A=H.status==="aborted"||fN(H.error?.message)?"agent_abort":"agent_error",V=A==="agent_error"?{...I$(A,Y,$),hookName:A,iteration:H.iterations,error:WN(H.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...I$(A,Y,$),hookName:A,reason:H.error?.message,taskCancel:{taskMetadata:{}}};await H2(V,$)},onEvent:async(X)=>{if(X.type!=="message-added"||X.message.role!=="user")return;let H={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},Y={...I$("prompt_submit",H,$),hookName:"prompt_submit",userPromptSubmit:{prompt:XN(X.message.content),attachments:[]}};await H2(Y,$)}},shutdown:async({agentId:X,conversationId:H,parentAgentId:Y,reason:A})=>{let V={...I$("session_shutdown",{agentId:X,conversationId:H,parentAgentId:Y},$),hookName:"session_shutdown",reason:A};await H2(V,$)}}}var aV={};w(aV,{writeHubDiscovery:()=>QZ,withHubStartupLock:()=>WZ,verifyHubConnection:()=>H$,truncateNotificationBody:()=>u4,toHubHealthUrl:()=>TW,stopLocalHubServerGracefully:()=>IW,startHubWebSocketServer:()=>V2,startHubServer:()=>iV,spawnDetachedHubServerWithRetry:()=>A8,spawnDetachedHubServer:()=>SW,sendHubCommand:()=>oA,restartLocalHubIfIdleAfterStartupTimeout:()=>XZ,resolveWorkspaceHubOwnerContext:()=>tY,resolveSharedHubOwnerContext:()=>Y0,resolveHubUrl:()=>j7,resolveHubOwnerContext:()=>E$,resolveHubEndpointOptions:()=>c0,resolveHubBuildId:()=>A1,resolveDefaultHubPort:()=>Y8,resolveDefaultHubPathname:()=>wW,resolveDefaultHubHost:()=>yW,resolveCompatibleLocalHubUrl:()=>w4,resolveClineDir:()=>rY,resolveClineDataDir:()=>N4,requestHubShutdown:()=>y4,rememberRecoverableLocalHubUrl:()=>V1,readHubDiscovery:()=>K0,probeHubServer:()=>X$,probeHubConnection:()=>sA,prewarmDetachedHubServer:()=>fZ,normalizeHubWebSocketUrl:()=>B1,isHubReconnectableTransportError:()=>bW,isHubCommandTimeoutError:()=>jZ,isDiscoveryFilePresent:()=>nY,ensureHubWebSocketServer:()=>MZ,ensureHubServer:()=>nV,ensureDetachedHubServer:()=>oY,ensureCompatibleLocalHubUrl:()=>Q2,createLocalHubScheduleRuntimeHandlers:()=>qZ,createInMemoryHubOwnerContext:()=>iY,createHubServerUrl:()=>o0,createHubAuthToken:()=>ZZ,createConfiguredTelemetryService:()=>x$,createConfiguredTelemetryHandle:()=>M8,connectToHub:()=>LZ,clearHubDiscovery:()=>u0,NodeHubClient:()=>e0,NativeHubTransportAdapter:()=>r4,HubUIClient:()=>Y7,HubTransportError:()=>_0,HubSessionClient:()=>H7,HubServerTransport:()=>y8,HubScheduleService:()=>_8,HubScheduleCommandService:()=>O8,HubCommandError:()=>V8,DEFAULT_HUB_PORT:()=>MW,DEFAULT_HUB_PATHNAME:()=>qW,DEFAULT_HUB_HOST:()=>NW,BrowserWebSocketHubAdapter:()=>p4});import{createSessionId as AN}from"@cline/shared";function d0($,J){return{version:$.version,requestId:$.requestId,ok:!0,payload:J}}function nA($,J,Z){return{version:$.version,requestId:$.requestId??AN("hubreq_"),ok:!1,error:{code:J,message:Z}}}class O8{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return d0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return d0($,{schedules:this.schedules.listSchedules({enabled:typeof $.payload?.enabled==="boolean"?$.payload.enabled:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0,tags:Array.isArray($.payload?.tags)?$.payload?.tags:void 0})});case"schedule.get":return d0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return d0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return d0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return d0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return d0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return d0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return d0($,{executions:this.schedules.listScheduleExecutions({scheduleId:typeof $.payload?.scheduleId==="string"?$.payload.scheduleId:void 0,status:typeof $.payload?.status==="string"?$.payload.status:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0})});case"schedule.stats":return d0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return d0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return d0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return nA($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(J){return nA($,"schedule_command_failed",J instanceof Error?J.message:String(J))}}toCreateInput($){let J=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:J}}toUpdateInput($){let J=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:J}}}function DZ($){return $?new Date($).getTime():void 0}function VN($){let J=$.metadata?{...$.metadata}:void 0;if(J)delete J.__hubScheduleCreatedBy,delete J.__hubScheduleCwd,delete J.__hubRuntimeOptions;return J}function RZ($){let J=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof J?.__hubScheduleCwd==="string"?J.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:DZ($.nextRunAt),lastRunAt:DZ($.lastRunAt),createdBy:typeof J?.__hubScheduleCreatedBy==="string"?J.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:J?.__hubRuntimeOptions&&typeof J.__hubRuntimeOptions==="object"&&!Array.isArray(J.__hubRuntimeOptions)?J.__hubRuntimeOptions:void 0,metadata:VN($)}}function BN($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function Z7($,J){return{executionId:$.runId,scheduleId:J,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:DZ($.startedAt),endedAt:DZ($.completedAt),status:BN($.status),errorMessage:$.error}}class _8{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new L4({dbPath:$.dbPath}),this.materializer=new F4({store:this.store}),this.runner=new U4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,eventPublisher:$.eventPublisher,workspaceRoot:"",logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency})}async start(){if(this.disposed)throw Error("HubScheduleService has been disposed");if(this.started)return;this.started=!0,await this.runner.start()}async stop(){await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,await this.runner.dispose(),this.store.close()}createSchedule($){if(XW($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return RZ(this.store.createHubSchedule($))}getSchedule($){let J=this.store.getHubSchedule($);return J?RZ(J):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((J)=>RZ(J))}updateSchedule($,J){if(J.cronPattern!==void 0)XW(J.cronPattern);let Z=this.store.getHubSchedule($);if(!Z)return;let Q=J.workspaceRoot!==void 0?J.workspaceRoot.trim():Z.workspaceRoot;if((J.enabled??Z.enabled)&&!Q)throw Error("workspaceRoot is required for enabled schedules");let f=this.store.updateHubSchedule($,{...J,scheduleId:$});return f?RZ(f):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let J=this.store.enqueueHubScheduleRun($,"manual");if(!J)return;await this.runner.tick();let Z=this.store.getRun(J.runId)??J;return Z7(Z,$)}triggerScheduleNowDetached($){let J=this.store.enqueueHubScheduleRun($,"manual");if(!J)return;return this.runner.tick().catch(()=>{return}),Z7(J,$)}listScheduleExecutions($){let J=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Z={specId:J?.specId,limit:$.limit};return this.store.listRuns(Z).map((W)=>{let f=J??this.store.getSpec(W.specId);if(!f||f.source!=="hub-schedule")return;return Z7(W,f.externalId)}).filter((W)=>{if(!W)return!1;return!$.status||W.status===$.status})}getScheduleStats($){let J=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(J.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Z=0,Q=0,W=0,f;for(let j of J){if(j.status==="success"||j.status==="completed")Z+=1;if(!f&&j.status!=="success"&&j.status!=="completed")f=j;if(j.startedAt&&j.endedAt)W+=j.endedAt-j.startedAt,Q+=1}return{totalRuns:J.length,successRate:Z/J.length,avgDurationSeconds:Q>0?W/Q/1000:0,lastFailure:f}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let J=this.store.getSpec($.specId);if(!J||J.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:J.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:J.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+J.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let J={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(J).flatMap((Z)=>Z.source==="hub-schedule"&&Z.nextRunAt?[{spec:Z,nextRunAt:Z.nextRunAt}]:[]).sort((Z,Q)=>String(Z.nextRunAt).localeCompare(String(Q.nextRunAt))).slice(0,$).map(({spec:Z,nextRunAt:Q})=>({scheduleId:Z.externalId,name:Z.title,nextRunAt:Q}))}}PZ();function kN($,J){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Z=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Z?`Failed to connect to hub at ${J} (${Z} event before socket open).`:`Failed to connect to hub at ${J}.`)}var IN="cline-hub-auth.";function xN($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function mN($,J){let Z=new URL($),Q=new URL(J);return Z.search="",Z.hash="",Q.search="",Q.hash="",Z.toString()===Q.toString()}async function gN($){let J=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),J)return J;let Z=Y0(),Q=await K0(Z.discoveryPath);if(Q?.url&&mN($.toString(),Q.url))return Q.authToken;return}async function j7($={}){let J=c0($);if(!xN($)){let Z=Y0(),Q=await K0(Z.discoveryPath);if(Q?.url)return Q.url}return o0(J.host,J.port,J.pathname)}async function LZ($){return await new Promise((J,Z)=>{(async()=>{let Q=new URL($),W=await gN(Q);Q.hash="";let f=new WebSocket(Q.toString(),W?[`${IN}${W}`]:void 0),j=new Map,X=0;f.addEventListener("open",()=>{J({send(H){let Y=H.requestId??`hub-client-${++X}`;return new Promise((A,V)=>{j.set(Y,{resolve:A,reject:V});let B={kind:"command",envelope:{...H,requestId:Y}};f.send(JSON.stringify(B))})},close(){f.close()}})}),f.addEventListener("message",(H)=>{let Y=JSON.parse(String(H.data));if(Y.kind==="reply"&&Y.envelope.requestId){let A=j.get(Y.envelope.requestId);if(A)j.delete(Y.envelope.requestId),A.resolve(Y.envelope)}}),f.addEventListener("close",()=>{for(let H of j.values())H.reject(Error("Hub connection closed"));j.clear()}),f.addEventListener("error",(H)=>{Z(kN(H,$))})})().catch(Z)})}async function sA($){try{return(await LZ($)).close(),!0}catch{return!1}}async function oA($,J){let Z=await j7($),Q=await LZ(Z);try{return await Q.send({version:J.version??"v1",clientId:J.clientId??"hub-client",...J})}finally{Q.close()}}function X7($){return $?JSON.parse(JSON.stringify($)):{}}function zZ($){let J=$?.session&&typeof $.session==="object"?$.session:void 0;if(!J)return;let Z=J.metadata&&typeof J.metadata==="object"?X7(J.metadata):void 0;return{sessionId:typeof J.sessionId==="string"?J.sessionId:"",parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,metadata:Z}}function eA($,J){return $.error?.message??`hub command failed: ${J}`}function vN($){let J=X7($);if(typeof J.error==="string"&&J.error.trim())return{...J,error:J.error.trim()};let Z=J.result&&typeof J.result==="object"?J.result:void 0;if(typeof Z?.text==="string"&&Z.text.trim())return{...J,error:Z.text.trim()};let Q=Z?.error&&typeof Z.error==="object"?Z.error:void 0;if(typeof Q?.message==="string"&&Q.message.trim())return{...J,error:Q.message.trim()};return J}function $V($){let J=$?.sessionId;return typeof J==="string"&&J.trim()?J.trim():void 0}function uN($){let J=$?.checkpoint;if(!J||typeof J!=="object"||Array.isArray(J))throw Error("hub checkpoint restore returned no checkpoint");let Z=J;if(typeof Z.ref!=="string"||typeof Z.createdAt!=="number"||typeof Z.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Z}function cN($){let J=X7($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||$V(J)||"",eventType:"schedule.execution.completed",payload:J};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||$V(J)||"",eventType:"schedule.execution.failed",payload:J};let Z=$.sessionId?.trim();if(!Z)return;switch($.event){case"iteration.started":return{sessionId:Z,eventType:"runtime.chat.iteration_start",payload:J};case"iteration.finished":return{sessionId:Z,eventType:"runtime.chat.iteration_end",payload:J};case"assistant.delta":return{sessionId:Z,eventType:"runtime.chat.text_delta",payload:J};case"usage.updated":return{sessionId:Z,eventType:"runtime.chat.usage",payload:J};case"tool.started":return{sessionId:Z,eventType:"runtime.chat.tool_call_start",payload:J};case"tool.finished":return{sessionId:Z,eventType:"runtime.chat.tool_call_end",payload:J};case"approval.requested":return{sessionId:Z,eventType:"approval.requested",payload:J};case"run.aborted":return{sessionId:Z,eventType:"runtime.chat.aborted",payload:J};case"run.failed":return{sessionId:Z,eventType:"runtime.chat.failed",payload:vN($.payload)};case"run.completed":return{sessionId:Z,eventType:"runtime.chat.completed",payload:J};default:return}}class H7{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new e0({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-session-client",displayName:$.displayName??"hub session client",workspaceRoot:$.workspaceRoot,cwd:$.cwd})}async ensureMetadataApplied(){if(this.metadataApplied||!this.options.metadata){if(!this.options.metadata)await this.client.connect();return}await this.client.connect(),await this.client.command("client.update",{metadata:this.options.metadata}),this.metadataApplied=!0}async connect(){await this.ensureMetadataApplied()}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession($){await this.ensureMetadataApplied();let J=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),Z=zZ(J.payload);if(!Z?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Z.sessionId,startResult:{sessionId:Z.sessionId,manifestPath:"",messagesPath:Z.messagesPath??""}}}async sendRuntimeSession($,J,Z){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:J.prompt,mode:J.config.mode,attachments:J.attachments,delivery:J.delivery,timeoutSeconds:J.config.timeoutSeconds},$,Z)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let J=await this.client.command("session.get",void 0,$);return zZ(J.payload)}async readMessages($){let J=$.trim();if(!J)return[];await this.ensureMetadataApplied();let Z=await this.client.command("session.messages",{sessionId:J},J);if(!Z.ok)throw Error(eA(Z,"session.messages"));let Q=Z.payload?.messages;return Array.isArray(Q)?Q:[]}async restore($){let J=$.sessionId.trim();if(!J)throw Error("sessionId is required");let Z=$.restore?.messages!==!1;if(Z&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let Q=$.config,W=await this.client.command("session.restore",{sessionId:J,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Q?{workspaceRoot:Q.workspaceRoot,cwd:Q.cwd,sessionConfig:{providerId:Q.provider,modelId:Q.model,apiKey:Q.apiKey,cwd:Q.cwd??Q.workspaceRoot,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:Q.mode??"act",rules:Q.rules,maxIterations:Q.maxIterations,enableTools:Q.enableTools,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},metadata:{source:Q.source??"cli",provider:Q.provider,model:Q.model,enableTools:Q.enableTools,enableSpawn:Q.enableSpawn,enableTeams:Q.enableTeams,prompt:void 0,interactive:Q.interactive!==!1},runtimeOptions:{mode:Q.mode,systemPrompt:Q.systemPrompt,maxIterations:Q.maxIterations,enableTools:Q.enableTools,enableSpawn:Q.enableSpawn,enableTeams:Q.enableTeams,autoApproveTools:Q.autoApproveTools,configExtensions:Q.configExtensions},modelSelection:{provider:Q.provider,model:Q.model,apiKey:Q.apiKey},toolPolicies:Q.toolPolicies}:{}},J);if(!W.ok)throw Error(eA(W,"session.restore"));let f=zZ(W.payload);if(Z&&!f?.sessionId)throw Error("hub checkpoint restore returned no session id");let j=Array.isArray(W.payload?.messages)?W.payload.messages:void 0,X=uN(W.payload);return{sessionId:f?.sessionId,startResult:f?.sessionId?{sessionId:f.sessionId,manifestPath:"",messagesPath:f.messagesPath??""}:void 0,...j?{messages:j}:{},checkpoint:X}}async listSessions($){await this.ensureMetadataApplied();let J=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(J.payload?.sessions)?J.payload?.sessions:[]).map((Q)=>zZ({session:Q})).filter((Q)=>Boolean(Q?.sessionId))}async deleteSession($,J=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:J})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,J){let Z=new Set(($.sessionIds??[]).map((W)=>W.trim()).filter(Boolean)),Q=this.client.subscribe((W)=>{let f=cN(W);if(!f)return;if(Z.size>0&&!Z.has(f.sessionId))return;J.onEvent?.(f)});return this.ensureMetadataApplied().catch((W)=>{J.onError?.(W instanceof Error?W:Error(String(W)))}),Q}streamTeamProgress($,J){let Z=this.client.subscribe((Q)=>{if(Q.event!=="team.progress"||!Q.payload)return;J.onProjection?.(Q.payload)});return this.ensureMetadataApplied().catch((Q)=>{J.onError?.(Q instanceof Error?Q:Error(String(Q)))}),Z}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let J=await this.client.command("schedule.list");return Array.isArray(J.payload?.schedules)?J.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,J){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...J})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,J){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list_executions",{scheduleId:$,limit:J});return Array.isArray(Z.payload?.executions)?Z.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let J=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(J.payload?.upcoming)?J.payload?.upcoming:[]}}class Y7{client;constructor($){this.client=new e0({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let J=await this.client.command("session.list",{limit:$});return Array.isArray(J.payload?.sessions)?J.payload.sessions:[]}subscribeUI($){return this.client.subscribe((J)=>{switch(J.event){case"ui.notify":$.onNotify?.(J.payload);break;case"ui.show_window":$.onShowWindow?.(J.payload);break;case"hub.client.registered":$.onClientRegistered?.(J.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(J.payload??{});break;case"session.created":$.onSessionCreated?.(J.payload??{});break;case"session.updated":$.onSessionUpdated?.(J.payload??{});break;case"session.detached":$.onSessionDetached?.(J.payload??{});break}})}}function dN($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Z)=>{if(Z&&typeof Z==="object"&&"type"in Z&&Z.type==="text"&&"text"in Z&&typeof Z.text==="string")return Z.text.trim();return""}).filter(Boolean).join(`
561
- `).trim()||void 0}var JV=120,A7="...";function u4($){let J=$.trim();if(!J)return"";if(Buffer.byteLength(J,"utf8")<=JV)return J;let Z=JV-Buffer.byteLength(A7,"utf8");if(Z<=0)return A7;let Q="";for(let W of J){if(Buffer.byteLength(Q+W,"utf8")>Z)break;Q+=W}return`${Q}${A7}`}async function ZV($){let J=$?.sessionId?.trim()||"unknown",Z=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,W=[...await Y1(Z)].reverse().find((H)=>H.role==="assistant"),f=W?dN(W.content):void 0,j=$?.workspaceRoot?.trim()||"workspace",X=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():j;return{title:`Task completed (${J})`,body:u4(f&&f.length>0?f:X.length>0?X:j),severity:"info"}}import{captureSdkError as NZ,createSessionId as OM}from"@cline/shared";import{createSessionId as iN}from"@cline/shared";import{createSessionId as rN}from"@cline/shared";function lN($){switch($){case"idle":return"idle";case"pending":return"pending";case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function pN($){let J=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())J.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())J.parentAgentId=$.parentAgentId;if($.agentId?.trim())J.agentId=$.agentId;if($.conversationId?.trim())J.conversationId=$.conversationId;if($.messagesPath?.trim())J.messagesPath=$.messagesPath;if($.prompt?.trim())J.prompt=$.prompt;if($.provider?.trim())J.provider=$.provider;if($.model?.trim())J.model=$.model;if($.source?.trim())J.source=$.source;if(typeof $.pid==="number")J.pid=$.pid;return Object.keys(J).length>0?J:void 0}function OZ($,J,Z,Q){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:J?.createdByClientId??"hub",status:lN($.status),participants:J?[...J.participants.values()]:[],metadata:pN($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Z?{usage:{...Z}}:{},...Q?{aggregateUsage:{...Q}}:{}}}function u($,J){return{version:$.version,requestId:$.requestId,ok:!0,...J!==void 0?{payload:J}:{}}}function m($,J,Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:J,message:Z}}}function _Z($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function y0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function Y2($,J,Z){return{version:"v1",event:$,eventId:rN("hevt_"),sessionId:Z,timestamp:Date.now(),payload:J}}async function l0($,J){let Z=await $.sessionHost.getSession(J);if(!Z)return;let Q=await $.sessionHost.getAccumulatedUsage?.(J);return OZ(Z,$.sessionState.get(J),Q?.usage,Q?.aggregateUsage)}async function p0($,J){let Z=await $.sessionHost.getSession(J);if(!Z)return;let[Q,W]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(J):[],$.sessionHost.getAccumulatedUsage?.(J)]);return Y$({session:Z,messages:Q,usage:W?.usage,aggregateUsage:W?.aggregateUsage})}function TZ($,J,Z,Q,W={}){let f=$.sessionState.get(J);if(f){if(W.interactive!==void 0)f.interactive=W.interactive;if(!f.participants.has(Z))f.participants.set(Z,{clientId:Z,attachedAt:Date.now(),role:Q});return f}let j={createdByClientId:Z,interactive:W.interactive??!0,participants:new Map([[Z,{clientId:Z,attachedAt:Date.now(),role:Q}]])};return $.sessionState.set(J,j),j}async function V7($,J){let Z=iN("approval_"),Q=J.sessionId;if($.sessionState.get(Q)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((f)=>{$.pendingApprovals.set(Z,{sessionId:Q,resolve:f}),$.publish($.buildEvent("approval.requested",{approvalId:Z,sessionId:J.sessionId,agentId:J.agentId,conversationId:J.conversationId,iteration:J.iteration,toolCallId:J.toolCallId,toolName:J.toolName,inputJson:JSON.stringify(J.input??null),policy:J.policy},Q))})}function B7($,J,Z){let Q=$.pendingApprovals.get(J);if(!Q)return;return $.pendingApprovals.delete(J),Q.resolve(Z),{sessionId:Q.sessionId}}function K7($,J,Z){let Q=0;for(let[W,f]of[...$.pendingApprovals.entries()]){if(!J({approvalId:W,sessionId:f.sessionId}))continue;$.pendingApprovals.delete(W),f.resolve({approved:!1,reason:Z}),$.publish($.buildEvent("approval.resolved",{approvalId:W,approved:!1,cancelled:!0,reason:Z},f.sessionId)),Q+=1}return Q}async function QV($,J){let Z=typeof J.payload?.approvalId==="string"?J.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Z))return m(J,"approval_not_found",`Unknown approval: ${Z}`);let W=typeof J.payload?.reason==="string"?J.payload.reason:J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)&&typeof J.payload.payload.reason==="string"?J.payload.payload.reason:void 0,f=J.payload?.approved===!0,j=B7($,Z,{approved:f,reason:W});if(!j)return m(J,"approval_not_found",`Unknown approval: ${Z}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Z,approved:f,reason:W},j.sessionId)),u(J,{approvalId:Z,approved:f})}import{createSessionId as tN}from"@cline/shared";function nN($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var WV={debug:10,info:20,warn:30,error:40,silent:50};function aN(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function g($,J,Z={}){if(WV[$]<WV[aN()])return;let Q=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:J,...Object.fromEntries(Object.entries(Z).map(([W,f])=>[W,nN(f)]).filter(([,W])=>W!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${Q}`);return}console.log(`[hub] ${Q}`)}function G7($,J){let Z=J instanceof Error?J.stack||J.message:String(J);g("error",$,{error:Z})}async function fV($,J,Z,Q,W,f){let j=tN("capreq_"),X=performance.now();return g("info","capability.request.start",{requestId:j,sessionId:J,capabilityName:Z,targetClientId:W}),await new Promise((H,Y)=>{$.pendingCapabilityRequests.set(j,{sessionId:J,targetClientId:W,capabilityName:Z,onProgress:f,resolve:(A)=>{if(g(A.ok?"info":"warn","capability.request.end",{requestId:j,sessionId:J,capabilityName:Z,targetClientId:W,ok:A.ok,error:A.error,durationMs:Math.round(performance.now()-X)}),!A.ok){Y(Error(A.error||`Capability ${Z} was rejected by ${W}.`));return}H(A.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:j,targetClientId:W,capabilityName:Z,payload:Q},J)),g("info","capability.request.published",{requestId:j,sessionId:J,capabilityName:Z,targetClientId:W})})}function jV($,J){let Z=typeof J.payload?.requestId==="string"?J.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(Z);if(!Q)return m(J,"capability_not_found",`Unknown capability request: ${Z}`);if((J.clientId?.trim()||"")!==Q.targetClientId)return m(J,"capability_wrong_client",`Capability request ${Z} is owned by ${Q.targetClientId}`);if(J.sessionId?.trim()&&J.sessionId.trim()!==Q.sessionId)return m(J,"capability_wrong_session",`Capability request ${Z} belongs to session ${Q.sessionId}`);let f=J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)?J.payload.payload:{};return Q.onProgress?.(f),u(J,{requestId:Z})}function F1($,J,Z){let Q=0;for(let[W,f]of[...$.pendingCapabilityRequests.entries()]){if(!J({requestId:W,...f}))continue;$.pendingCapabilityRequests.delete(W),g("warn","capability.request.cancelled",{requestId:W,sessionId:f.sessionId,capabilityName:f.capabilityName,targetClientId:f.targetClientId,reason:Z}),f.resolve({ok:!1,error:Z}),$.publish($.buildEvent("capability.resolved",{requestId:W,capabilityName:f.capabilityName,targetClientId:f.targetClientId,ok:!1,cancelled:!0,error:Z},f.sessionId)),Q+=1}return Q}async function XV($,J){let Z=typeof J.payload?.sessionId==="string"?J.payload.sessionId.trim():J.sessionId?.trim()||"",Q=typeof J.payload?.capabilityName==="string"?J.payload.capabilityName.trim():"",W=typeof J.payload?.targetClientId==="string"?J.payload.targetClientId.trim():"";if(!Z||!Q||!W)return m(J,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let f=J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)?J.payload.payload:{},j=await $.requestCapability(Z,Q,f,W);return u(J,j)}catch(f){return m(J,"capability_request_failed",f instanceof Error?f.message:String(f))}}function HV($,J){let Z=typeof J.payload?.requestId==="string"?J.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(Z);if(!Q)return m(J,"capability_not_found",`Unknown capability request: ${Z}`);let W=J.clientId?.trim()||"";if(W!==Q.targetClientId)return m(J,"capability_wrong_client",`Capability request ${Z} is owned by ${Q.targetClientId}`);if(J.sessionId?.trim()&&J.sessionId.trim()!==Q.sessionId)return m(J,"capability_wrong_session",`Capability request ${Z} belongs to session ${Q.sessionId}`);$.pendingCapabilityRequests.delete(Z);let f=J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)?J.payload.payload:void 0,j=typeof J.payload?.error==="string"?J.payload.error:void 0,X=J.payload?.ok===!0;return g(X?"info":"warn","capability.respond",{requestId:Z,sessionId:Q.sessionId,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,respondedByClientId:W,ok:X,error:j}),Q.resolve({ok:X,payload:f,error:j}),$.publish($.buildEvent("capability.resolved",{requestId:Z,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,respondedByClientId:W,ok:X,payload:f,error:j},Q.sessionId)),u(J,{requestId:Z,ok:X})}import{createSessionId as sN}from"@cline/shared";function YV($,J){let Z=J.payload,Q=Z?.clientId?.trim()||J.clientId?.trim()||sN("client_");return $.clients.set(Q,{clientId:Q,clientType:Z?.clientType??"unknown",displayName:Z?.displayName,actorKind:Z?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Z?.transport??"native",capabilities:Z?.capabilities??[],metadata:Z?.metadata,workspaceContext:Z?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:Q,clientType:Z?.clientType??"unknown",displayName:Z?.displayName,connectedAt:Date.now()})),u(J,{clientId:Q})}function AV($,J){let Z=J.clientId?.trim(),Q=Z?$.clients.get(Z):void 0;if(!Z||!Q)return m(J,"client_not_found","Client is not registered with this hub.");let W=_Z(J.payload?.metadata);if(Q.lastSeenAt=Date.now(),W)Q.metadata=JSON.parse(JSON.stringify(W));return u(J)}function VV($,J,Z){let Q=J.clientId?.trim();if(Q)$.clients.delete(Q),Z(Q),$.publish($.buildEvent("hub.client.disconnected",{clientId:Q}));return u(J)}function BV($,J){return u(J,{clients:[...$.clients.values()]})}var oN=30000;function eN($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function $M($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function JM($){return $?$:void 0}function ZM($){let J=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(J&&Number.isFinite(J)&&J>0)return Math.floor(J);let Z=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(Z&&Number.isFinite(Z)&&Z>0)return Math.floor(Z*1000);return}async function QM($,J,Z,Q){let W=performance.now(),f=!1,j={command:J.command,requestId:J.requestId,clientId:J.clientId,sessionId:Z.sessionId,timeoutMs:Q},X=setInterval(()=>{if(f)return;let A=Math.round(performance.now()-W);g("warn","run.heartbeat",{...j,elapsedMs:A}),$.publish($.buildEvent("run.heartbeat",{requestId:J.requestId,elapsedMs:A,...Q?{timeoutMs:Q}:{}},Z.sessionId))},oN),H=$.sessionHost.runTurn(Z);H.then((A)=>{if(!f)return;g("warn","run.late_end",{...j,elapsedMs:Math.round(performance.now()-W),finishReason:A?.finishReason})},(A)=>{if(!f)return;g("error","run.late_error",{...j,elapsedMs:Math.round(performance.now()-W),error:A})});let Y;try{if(!Q)return await H;return await Promise.race([H,new Promise((A,V)=>{Y=setTimeout(()=>{let B=`Hub run ${J.command} timed out after ${Q}ms.`;f=!0,clearInterval(X),V(Error(B)),g("error","run.timeout",{...j,elapsedMs:Math.round(performance.now()-W)}),K7($,(K)=>K.sessionId===Z.sessionId,B),F1($,(K)=>K.sessionId===Z.sessionId,B),$.sessionHost.abort(Z.sessionId,B).catch((K)=>{g("error","run.timeout_abort_failed",{...j,error:K})})},Q)})])}finally{if(f=!0,clearInterval(X),Y)clearTimeout(Y)}}async function KV($,J){let Z=y0(J),Q=J.payload&&typeof J.payload==="object"?J.payload:{},W=typeof Q.prompt==="string"?Q.prompt:typeof Q.input==="string"?Q.input:"";if(!W.trim())return m(J,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Z));let f=Q.attachments&&typeof Q.attachments==="object"&&!Array.isArray(Q.attachments)?Q.attachments:void 0,j=Array.isArray(f?.userFiles)?f.userFiles.filter((A)=>typeof A==="string"):void 0,X=ZM(Q);$.suppressNextTerminalEventBySession.set(Z,"run.start.reply");let H;try{H=await QM($,J,{sessionId:Z,prompt:W,mode:JM(Q.mode),delivery:Q.delivery==="queue"||Q.delivery==="steer"?Q.delivery:void 0,userImages:Array.isArray(f?.userImages)?f.userImages:void 0,userFiles:j,timeoutMs:X},X)}catch(A){if($.suppressNextTerminalEventBySession.get(Z)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Z);throw $.publish($.buildEvent("run.failed",{reason:"error",error:A instanceof Error?A.message:String(A)},Z)),A}if(H){let A=await p0($,Z),V=$M(H);if($.publish($.buildEvent(eN(H.finishReason),{reason:H.finishReason,...V?{error:V}:{},result:H,...A?{snapshot:A}:{}},Z)),$.suppressNextTerminalEventBySession.get(Z)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Z)}else $.suppressNextTerminalEventBySession.delete(Z);let Y=await p0($,Z);return u(J,H||Y?{...H?{result:H}:{},...Y?{snapshot:Y}:{}}:void 0)}async function GV($,J){let Z=y0(J),Q=typeof J.payload?.reason==="string"?J.payload.reason:"Run was aborted before pending approval or capability request was resolved.";K7($,(W)=>W.sessionId===Z,Q);try{await $.sessionHost.abort(Z,J.payload?.reason)}catch(W){g("warn","run.abort_failed",{command:J.command,requestId:J.requestId,clientId:J.clientId,sessionId:Z,error:W})}finally{F1($,(W)=>W.sessionId===Z,Q)}return u(J,{applied:!0})}async function FV($,J){let Z=L8(J.payload?.payload);if(!Z)return m(J,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Z),u(J,{applied:!0})}async function UV($,J){switch(J.type){case"chunk":return;case"agent_event":await WM($,J);return;case"hook":if(J.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:J.payload.toolName},J.payload.sessionId));else if(J.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:J.payload.toolName},J.payload.sessionId));return;case"team_progress":{let Z={type:"team_progress_projection",version:1,sessionId:J.payload.sessionId,summary:J.payload.summary,lastEvent:J.payload.lifecycle};$.publish($.buildEvent("team.progress",Z,J.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:J.payload.sessionId,prompts:J.payload.prompts},J.payload.sessionId));return;case"pending_prompt_submitted":{let Z={id:J.payload.id,prompt:J.payload.prompt,delivery:J.payload.delivery,attachmentCount:J.payload.attachmentCount};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:J.payload.sessionId,prompt:Z},J.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:J.payload.sessionId,snapshot:J.payload.snapshot},J.payload.sessionId));return;case"status":{let[Z,Q]=await Promise.all([l0($,J.payload.sessionId),p0($,J.payload.sessionId)]);if(Z)$.publish($.buildEvent("session.updated",{session:Z,...Q?{snapshot:Q}:{}},J.payload.sessionId));return}case"ended":await fM($,J);return;default:return}}async function WM($,J){let{sessionId:Z,event:Q}=J.payload;if(Q.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:Q.iteration},Z));return}if(Q.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:Q.iteration,hadToolCalls:Q.hadToolCalls,toolCallCount:Q.toolCallCount},Z));return}if(Q.type==="content_start"){if(Q.contentType==="text"&&typeof Q.text==="string"&&Q.text.length>0){$.publish($.buildEvent("assistant.delta",{text:Q.text},Z));return}if(Q.contentType==="reasoning"){if(Q.redacted&&!Q.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Z));return}if(typeof Q.reasoning==="string"&&Q.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:Q.reasoning,redacted:Q.redacted===!0},Z));return}if(Q.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:Q.toolCallId,toolName:Q.toolName,input:Q.input},Z));return}}if(Q.type==="content_end"){switch(Q.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:Q.text},Z));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:Q.reasoning},Z));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:Q.toolCallId,toolName:Q.toolName,output:Q.output,error:Q.error},Z));break}return}if(Q.type==="usage"){let W;try{W=await $.sessionHost.getAccumulatedUsage?.(Z)}catch{W=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Z,delta:{inputTokens:Q.inputTokens,outputTokens:Q.outputTokens,cacheReadTokens:Q.cacheReadTokens??0,cacheWriteTokens:Q.cacheWriteTokens??0,totalCost:Q.cost??0},totals:{inputTokens:Q.totalInputTokens,outputTokens:Q.totalOutputTokens,cacheReadTokens:Q.totalCacheReadTokens??0,cacheWriteTokens:Q.totalCacheWriteTokens??0,totalCost:Q.totalCost??0},usage:W?.usage,aggregateUsage:W?.aggregateUsage,agent:{kind:J.payload.teamRole==="teammate"?"teammate":Q.parentAgentId?"subagent":"lead",agentId:Q.agentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamAgentId:J.payload.teamAgentId,teamRole:J.payload.teamRole}},Z));return}if(Q.type==="done")$.publish($.buildEvent("agent.done",{reason:Q.reason,text:Q.text,iterations:Q.iterations,usage:Q.usage},Z))}async function fM($,J){let Z=$.suppressNextTerminalEventBySession.get(J.payload.sessionId),Q=Z===J.payload.reason||Z==="run.start.reply";if(Q)$.suppressNextTerminalEventBySession.delete(J.payload.sessionId);let[W,f]=await Promise.all([l0($,J.payload.sessionId),p0($,J.payload.sessionId)]);if(J.payload.reason==="completed"){let j=await ZV(W);$.publish($.buildEvent("ui.notify",j,J.payload.sessionId))}if(Q)return;$.publish($.buildEvent(J.payload.reason==="aborted"?"run.aborted":J.payload.reason==="error"||J.payload.reason==="failed"?"run.failed":"run.completed",{reason:J.payload.reason,...f?{snapshot:f}:{}},J.payload.sessionId))}import{createSessionId as OV,parseRuntimeConfigExtensions as _V}from"@cline/shared";var LV={};w(LV,{SessionVersioningService:()=>U1,SessionVersioningError:()=>w0});var PV={};w(PV,{trimMessagesToCheckpoint:()=>DV,trimMessagesBeforeCheckpoint:()=>U7,readSessionCheckpointHistory:()=>c4,createRestoredCheckpointMetadata:()=>F7,createCheckpointRestorePlan:()=>R7,applyCheckpointToWorktree:()=>D7});import{execFile as jM}from"node:child_process";import{promisify as XM}from"node:util";var q8=XM(jM);function c4($){let J=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(J?.history)?J.history:[]).filter((Q)=>!!Q&&typeof Q==="object"&&!Array.isArray(Q)).flatMap((Q)=>{let W=String(Q.ref??"").trim(),f=Number(Q.createdAt??0),j=Number(Q.runCount??0);if(W.length===0||!Number.isFinite(f)||!Number.isInteger(j)||j<1)return[];let X=Q.kind==="stash"||Q.kind==="commit"?Q.kind:void 0;return[{ref:W,createdAt:f,runCount:j,...X?{kind:X}:{}}]})}function F7($,J){let Z=c4($).filter((W)=>W.runCount<=J),Q=Z.at(-1);return Q?{latest:Q,history:Z}:void 0}function HM($,J){return $.reduce((Z,Q)=>{if(Q.runCount>J)return Z;if(!Z||Q.runCount>Z.runCount)return Q;return Z},void 0)}function RV($,J){let Z=0;for(let Q=0;Q<$.length;Q+=1){let W=$[Q];if(W?.role!=="user")continue;if(("metadata"in W&&W.metadata&&typeof W.metadata==="object"?W.metadata:void 0)?.kind==="recovery_notice")continue;if(Z+=1,Z===J)return Q}throw Error(`Could not find user message for checkpoint run ${J}`)}function DV($,J){let Z=RV($,J);return $.slice(0,Z+1)}function U7($,J){let Z=RV($,J);return $.slice(0,Z)}function R7($){let J=$.checkpointRunCount;if(!Number.isInteger(J)||J<1)throw Error("checkpointRunCount must be a positive integer");let Z=HM(c4($.session),J);if(!Z)throw Error(`No checkpoint found at or before run ${J} in session ${$.session.sessionId}`);let Q=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!Q)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Z,cwd:Q,...$.restoreMessages!==!1?{messages:DV($.messages??[],J)}:{}}}async function D7($,J){if((await q8("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await q8("git",["-C",$,"cat-file","-e",`${J.ref}^{commit}`],{windowsHide:!0}),await q8("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await q8("git",["-C",$,"clean","-fd"],{windowsHide:!0}),J.kind==="commit"){await q8("git",["-C",$,"reset","--hard",J.ref],{windowsHide:!0});return}await q8("git",["-C",$,"stash","apply",J.ref],{windowsHide:!0})}class w0 extends Error{code;constructor($,J){super(J);this.code=$;this.name="SessionVersioningError"}}function YM($){let J=$.sessionId.trim();if(!J)throw new w0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new w0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new w0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new w0("invalid_restore","checkpointRunCount must be a positive integer");return J}class U1{async restoreCheckpoint($){let J=$.restore?.messages!==!1,Z=$.restore?.workspace!==!1,Q=YM({sessionId:$.sessionId,restoreMessages:J,restoreWorkspace:Z,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),W=await $.getSession(Q);if(!W)throw new w0("session_not_found",`Session ${Q} not found`);let f=J?await $.readMessages(Q):void 0;if(J&&f?.length===0)throw new w0("session_messages_not_found",`No messages found for session ${Q}`);let j=R7({session:W,messages:f,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:J});if(Z)await($.applyWorkspaceCheckpoint??D7)(j.cwd,j.checkpoint);let X=Y$({session:W,messages:f});if(!J)return{checkpoint:j.checkpoint,sourceSnapshot:X};let H=F7(W,$.checkpointRunCount),Y=$.restore?.omitCheckpointMessageFromSession?U7(f??[],$.checkpointRunCount):j.messages??[],A={sourceSession:W,sourceMessages:f,sourceSnapshot:X,plan:j,restoredCheckpointMetadata:H,initialMessages:Y,restoreMessages:J,restoreWorkspace:Z,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new w0("invalid_restore","start is required when restore.messages is true");let V=$.buildStartInput?await $.buildStartInput(A,$.start):$.start,B=await $.startSession(V),K=$.getStartedSessionId?.(B);if(K)await($.retainCheckpointRefs??HX)(j.cwd,K,H?.history??[]);let G=K&&$.readRestoredSession?await $.readRestoredSession(K):void 0;return{sessionId:K,startResult:B,messages:j.messages,checkpoint:j.checkpoint,sourceSnapshot:X,...G?{restoredSnapshot:Y$({session:G,messages:Y})}:{}}}}import{HUB_CHECKPOINT_CAPABILITY as sv,HUB_COMPACTION_CAPABILITY as ov,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as ev,HUB_HOOK_CAPABILITY_PREFIX as $u,HUB_MISTAKE_LIMIT_CAPABILITY as Ju,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Zu,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Qu,isHubToolExecutorName as AM}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as Hu,HUB_COMPACTION_CAPABILITY as Yu,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Au,HUB_HOOK_CAPABILITY_PREFIX as Vu,HUB_MISTAKE_LIMIT_CAPABILITY as Bu,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Ku,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Gu}from"@cline/shared";var VM=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function A2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function BM($,J){let Z=typeof $.name==="string"?$.name.trim():"",Q=typeof $.description==="string"?$.description:"",W=typeof $.capabilityName==="string"?$.capabilityName.trim():"",f=A2($.inputSchema);if(!Z||!Q||!f||!W||J.has(W))return;return J.add(W),{kind:"tool",capabilityName:W,name:Z,description:Q,inputSchema:f,...A2($.lifecycle)?{lifecycle:A2($.lifecycle)}:{}}}function L7($){if(!Array.isArray($))return[];let J=[],Z=new Set;for(let Q of $){if(!Q||typeof Q!=="object"||Array.isArray(Q))continue;let W=Q,f=W.kind,j=typeof W.capabilityName==="string"?W.capabilityName.trim():"";if(!j||Z.has(j))continue;if(f==="tool"){let X=BM(W,Z);if(X)J.push(X);continue}if(f==="toolExecutor"){let X=W.executor;if(!AM(X))continue;Z.add(j),J.push({kind:"toolExecutor",capabilityName:j,executor:X});continue}if(f==="hook"){let X=typeof W.name==="string"?W.name.trim():"";if(!X)continue;Z.add(j),J.push({kind:"hook",capabilityName:j,name:X});continue}if(f==="compaction"){Z.add(j),J.push({kind:"compaction",capabilityName:j,...A2(W.config)?{config:A2(W.config)}:{}});continue}if(f==="checkpoint"){Z.add(j),J.push({kind:"checkpoint",capabilityName:j,...A2(W.config)?{config:A2(W.config)}:{}});continue}if(f==="mistakeLimit"){Z.add(j),J.push({kind:"mistakeLimit",capabilityName:j});continue}if(f==="userInstructionService")Z.add(j),J.push({kind:"userInstructionService",capabilityName:j})}return J}function zV($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function KM($){return Object.hasOwn($,"update")?$.update:$}function d4($){return $.trim().replace(/^\/+/,"").toLowerCase()}function GM($){let J=($??[]).map(d4).filter(Boolean);return J.length>0?new Set(J):void 0}function FM($,J,Z){if(!Z)return!0;let Q=d4($),W=d4(J),f=Q.includes(":")?Q.split(":").at(-1)??Q:Q,j=W.includes(":")?W.split(":").at(-1)??W:W;return Z.has(Q)||Z.has(W)||Z.has(f)||Z.has(j)}function P7($,J){let Z=GM(J);return $.records.skill.map((Q)=>({id:Q.id,name:Q.item.name,description:"description"in Q.item&&typeof Q.item.description==="string"?Q.item.description:void 0,disabled:Q.item.disabled===!0,skill:Q.item})).filter((Q)=>FM(Q.id,Q.name,Z))}function UM($,J){let Z=async(Q,W)=>{let f=d4(Q),X=P7($,J).filter((B)=>B.id===f||d4(B.name)===f||B.id.endsWith(`:${f}`)).filter((B)=>!B.disabled);if(X.length!==1)return X.length>1?`Skill "${Q}" is ambiguous. Use one of: ${X.map((B)=>B.id).join(", ")}`:`Skill "${Q}" not found.`;let H=X[0].skill,Y=W?.trim(),A=Y?`
559
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,s()])}}function KN($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let f=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(f==="local"||f==="hub"||f==="remote")return f;return"auto"}var pJ,rJ;function GN($,f){if($!=="auto"&&$!=="hub")return;if(f.hub?.endpoint?.trim())return;P5(f.hub?.workspaceRoot?.trim()||f.hub?.cwd?.trim()||process.cwd())}async function PN($){await $.reconcileDeadSessions?.().catch(()=>{})}function WV($){try{let f=new G$;return f.init(),new F$(f,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(f){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),QV($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:f,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new HW(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function ZV($,f,J){return new U$({sessionService:J??$.sessionService??WV($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:f,fetch:$.fetch})}async function BW($){if(pJ)return pJ;if(rJ)return await rJ;return rJ=(async()=>{return pJ=WV($),await PN(pJ),pJ})().finally(()=>{rJ=void 0}),await rJ}async function M2($){let f=Kf($.distinctId);$.telemetry?.setDistinctId(f);let J=KN($);if(GN(J,$),J==="remote"){let Z=$.remote?.endpoint?.trim();if(!Z)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:Z}),new _2({endpoint:Z,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(J==="hub"){let Z=$.hub?.endpoint?.trim(),Q=Z||await Vf({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!Q)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:Q,explicitEndpoint:Z||void 0}),new x$({url:Q,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(J==="auto"){let Z=await gJ({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(Z){$.logger?.log("Using discovered local hub runtime host",{url:Z});let Q=new x$({url:Z,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await Q.connect(),Q}catch(W){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:W}),QV($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:W,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),ZV($,f)}return ZV($,f)}class iJ{clientName;runtimeAddress;automation;settings;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,f,J,Z,Q,W,j,X,H){this.clientName=f,this.runtimeAddress=J,this.host=$,this.prepare=Z,this.capabilities=Q,this.logger=W,this.telemetry=j,this.distinctId=X,this.settings=NY($),this.pendingPrompts=MY($),this.automation=new s9(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=H?new hJ({workspaceRoot:H.workspaceRoot??process.cwd(),specs:{cronSpecsDir:H.cronSpecsDir??H.cronDir,scope:kH(H.cronScope),workspaceRoot:H.workspaceRoot},runtimeHandlers:IH({host:$,getExtensionContext:()=>c6({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:H.dbPath,logger:H.logger,pollIntervalMs:H.pollIntervalMs,claimLeaseSeconds:H.claimLeaseSeconds,globalMaxConcurrency:H.globalMaxConcurrency,watcherDebounceMs:H.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((Y)=>{if(Y.type!=="ended")return;this.disposeSessionBootstrap(Y.payload.sessionId)})}static async create($={}){let f=U0($.capabilities),J=await M2({...$,capabilities:f}),Z=bH($.automation),Q=new iJ(J,$.clientName,J.runtimeAddress,$.prepare,f,$.logger,$.telemetry,$.distinctId,Z?{...Z,logger:$.logger}:void 0);if(Z&&Z.autoStart!==!1)await Q.automation.start();return Q}async disposeSessionBootstrap($){let f=this.activeSessionBootstraps.get($);if(!f)return;this.activeSessionBootstraps.delete($),await Promise.resolve(f.dispose?.())}async start($){let f=qY($),J=await this.prepare?.(f);try{let Z=J?await J.applyToStartSessionInput(f):f,Q=await this.host.startSession(YQ(Z,{defaultCapabilities:this.capabilities,withExtensionContext:(W)=>c6({automationService:this.automationService,automation:this.automation,context:W,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(J)if(await this.host.getSession(Q.sessionId))this.activeSessionBootstraps.set(Q.sessionId,J);else await Promise.resolve(J.dispose?.());return wY({input:Z,sessionId:Q.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),Q}catch(Z){throw await Promise.resolve(J?.dispose?.()),Z}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let f=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(f.map((J)=>this.disposeSessionBootstrap(J)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await V5(this.host,$);list=async($=200,f={})=>await this.listHistory({...f,limit:$});delete=async($)=>{let f=await this.host.deleteSession($);if(f)await this.disposeSessionBootstrap($);return f};update=(...$)=>this.host.updateSession(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let f=$.start?YQ($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(J)=>c6({automationService:this.automationService,automation:this.automation,context:J,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:$.sessionId,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restore:$.restore,start:f})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,f){return this.host.subscribe($,f)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}var HV={};w(HV,{resolvePluginSkillDirectoriesFromPaths:()=>r1,resolvePluginConfigSearchPaths:()=>E8,resolveAndLoadAgentPlugins:()=>af,resolveAgentPluginPaths:()=>p1,loadAgentPluginsFromPathsWithDiagnostics:()=>l1,loadAgentPluginsFromPaths:()=>o4,loadAgentPluginFromPath:()=>h8,discoverPluginModulePaths:()=>b8});var VV={};w(VV,{toHookConfigFileName:()=>x8,runSubprocessEvent:()=>y2,runHook:()=>w2,resolveHooksConfigSearchPaths:()=>k8,parseHookEventPayload:()=>q2,mergeAgentHooks:()=>t1,listHookConfigFiles:()=>Q1,createSubprocessHooks:()=>M5,createHookConfigFileHooks:()=>m8,createHookConfigFileExtension:()=>ef,createHookAuditHooks:()=>of,createAgentHooksExtension:()=>tf,HookEventPayloadSchema:()=>N5,HookEventNameSchema:()=>T5,HookConfigFileName:()=>sf,HOOK_CONFIG_FILE_EVENT_MAP:()=>I8,HOOKS_CONFIG_DIRECTORY_NAME:()=>W6});import{HookEventNameSchema as T5,HookEventPayloadSchema as N5,parseHookEventPayload as q2,resolveHookSessionContext as zN}from"@cline/shared";import{z as Pf}from"zod";import{spawn as FN}from"node:child_process";import{augmentNodeCommandForDebug as UN,withResolvedClineBuildEnv as RN}from"@cline/shared";function DN($){let f=$.trim();if(!f)return{};let Z=f.split(`
560
+ `).map((W)=>W.trim()).filter(Boolean).filter((W)=>W.startsWith("HOOK_CONTROL\t")).map((W)=>W.slice(13)),Q=Z.length>0?Z[Z.length-1]:f;try{return{parsedJson:JSON.parse(Q)}}catch(W){return{parseError:W instanceof Error?W.message:"Failed to parse subprocess stdout JSON"}}}function LN($,f){let J=$ instanceof Error?$:Error(String($)),Z=J,Q=f.join(" ");if(Z.code==="EACCES")return Error(`Failed to execute hook command "${Q}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return Error(`Failed to execute hook command "${Q}": ${J.message}`)}async function _N($,f){let J=$.stdin;if(!J)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((Z,Q)=>{let W=(j)=>{J.off("error",W);let X=j.code;if(X==="EPIPE"||X==="ERR_STREAM_DESTROYED"){Z();return}Q(j)};J.once("error",W),J.end(f,(j)=>{if(J.off("error",W),j){let X=j.code;if(X==="EPIPE"||X==="ERR_STREAM_DESTROYED"){Z();return}Q(j);return}Z()})})}async function y2($,f){let J=UN(f.command,{env:f.env,debugRole:"hook"});if(!Array.isArray(J)||J.length===0)throw Error("runSubprocessEvent requires a non-empty command");let Z=!!f.detached,Q=FN(J[0],J.slice(1),{cwd:f.cwd,env:RN(f.env),stdio:Z?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Z}),W=new Promise((B)=>{Q.once("spawn",()=>{try{f.onSpawn?.({command:J,pid:Q.pid??void 0,detached:Z})}catch{}B()})}),j=new Promise((B,K)=>{Q.once("error",(G)=>{K(LN(G,J))})});if(await _N(Q,JSON.stringify($)),Z){await Promise.race([W,j]),Q.unref();return}if(!Q.stdout||!Q.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let X="",H="",Y=!1,A;Q.stdout.on("data",(B)=>{X+=B.toString()}),Q.stderr.on("data",(B)=>{H+=B.toString()});let V=new Promise((B)=>{if((f.timeoutMs??0)>0)A=setTimeout(()=>{Y=!0,Q.kill("SIGKILL")},f.timeoutMs);Q.once("close",(K)=>{if(A)clearTimeout(A);let{parsedJson:G,parseError:R}=DN(X);B({exitCode:K,stdout:X,stderr:H,parsedJson:G,parseError:R,timedOut:Y})})});return await Promise.race([V,j])}var ON=Pf.object({contextModification:Pf.string().optional(),cancel:Pf.boolean().optional(),review:Pf.boolean().optional(),errorMessage:Pf.string().optional(),context:Pf.string().optional(),overrideInput:Pf.unknown().optional()}).passthrough();var TN=["agent","hook"];async function w2($,f={}){let J=f.command??TN;return await y2($,{command:J,cwd:f.cwd,env:f.env,detached:f.detached,timeoutMs:f.timeoutMs,onSpawn:f.onSpawn})}function AV($){return $ instanceof Error?$:Error(String($))}function NN($){if(!$||typeof $!=="object")return;let f=ON.safeParse($);if(!f.success)return;let J=f.data;if(!(("cancel"in J)||("review"in J)||("context"in J)||("contextModification"in J)||("overrideInput"in J)||("errorMessage"in J)))return;let Q=typeof J.context==="string"?J.context:typeof J.contextModification==="string"?J.contextModification:typeof J.errorMessage==="string"&&J.errorMessage.length>0?J.errorMessage:void 0;return{cancel:typeof J.cancel==="boolean"?J.cancel:void 0,review:typeof J.review==="boolean"?J.review:void 0,context:Q,overrideInput:Object.hasOwn(J,"overrideInput")?J.overrideInput:void 0}}function YV($){if(!$||typeof $!=="object")return{};let f={};for(let[J,Z]of Object.entries($))if(typeof Z==="string")f[J]=Z;else f[J]=JSON.stringify(Z);return f}function v$($,f,J){let Z=J.env??process.env,Q=Z.CLINE_USER_ID?.trim()||Z.USER?.trim()||"unknown",W=J.cwd||process.cwd();return{clineVersion:Z.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:f.conversationId,sessionContext:zN(J.sessionContext,{hookName:$,conversationId:f.conversationId,agentId:f.agentId,parentAgentId:f.parentAgentId}),workspaceRoots:W?[W]:[],workspaceInfo:J.workspaceInfo,userId:Q,agent_id:f.agentId,parent_agent_id:f.parentAgentId}}function MN($){return{name:$.name,message:$.message,stack:$.stack}}function yN($){let f=String($??"").toLowerCase();return f.includes("cancel")||f.includes("abort")||f.includes("interrupt")}function qN($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function wN($){return $.filter((f)=>f.type==="text"&&typeof f.text==="string").map((f)=>f.text).join("")}function SN($){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 hN($){if(!$)return;let f={};if($.cancel===!0)f.stop=!0;if($.overrideInput!==void 0)f.input=$.overrideInput;return Object.keys(f).length>0?f:void 0}async function Ff($,f){try{let J=await w2($,{command:f.command,cwd:f.cwd,env:f.env,detached:!0,onSpawn:f.onSpawn});f.onDispatch?.({payload:$,result:J,detached:!0})}catch(J){f.onDispatchError?.(AV(J),$)}}function M5($={}){return{hooks:{beforeRun:async(X)=>{let H=qN(X);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let A={...v$("agent_resume",H,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await Ff(A,$)}else{let A={...v$("agent_start",H,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await Ff(A,$)}return},beforeTool:async(X)=>{let H={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},Y={...v$("tool_call",H,$),hookName:"tool_call",iteration:X.snapshot.iteration,tool_call:{id:X.toolCall.toolCallId,name:X.toolCall.toolName,input:X.input},preToolUse:{toolName:X.toolCall.toolName,parameters:YV(X.input)}};try{let A=await w2(Y,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:Y,result:A,detached:!1}),A?.timedOut)throw Error("tool_call hook command timed out");if(A?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${A.parseError}`);return hN(NN(A?.parsedJson))}catch(A){$.onDispatchError?.(AV(A),Y);return}},afterTool:async(X)=>{let H=SN(X),Y={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},A={...v$("tool_result",Y,$),hookName:"tool_result",iteration:X.snapshot.iteration,tool_result:H,postToolUse:{toolName:H.name,parameters:YV(H.input),result:typeof H.output==="string"?H.output:JSON.stringify(H.output),success:!H.error,executionTimeMs:H.durationMs}};await Ff(A,$);return},afterRun:async({snapshot:X,result:H})=>{let Y={agentId:X.agentId,conversationId:X.conversationId??X.runId??X.agentId,parentAgentId:X.parentAgentId??null};if(H.status==="completed"){let B={...v$("agent_end",Y,$),hookName:"agent_end",iteration:H.iterations,turn:{outputText:H.outputText,status:H.status},taskComplete:{taskMetadata:{}}};await Ff(B,$);return}let A=H.status==="aborted"||yN(H.error?.message)?"agent_abort":"agent_error",V=A==="agent_error"?{...v$(A,Y,$),hookName:A,iteration:H.iterations,error:MN(H.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...v$(A,Y,$),hookName:A,reason:H.error?.message,taskCancel:{taskMetadata:{}}};await Ff(V,$)},onEvent:async(X)=>{if(X.type!=="message-added"||X.message.role!=="user")return;let H={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},Y={...v$("prompt_submit",H,$),hookName:"prompt_submit",userPromptSubmit:{prompt:wN(X.message.content),attachments:[]}};await Ff(Y,$)}},shutdown:async({agentId:X,conversationId:H,parentAgentId:Y,reason:A})=>{let V={...v$("session_shutdown",{agentId:X,conversationId:H,parentAgentId:Y},$),hookName:"session_shutdown",reason:A};await Ff(V,$)}}}var KB={};w(KB,{writeHubDiscovery:()=>K5,withHubStartupLock:()=>G5,verifyHubConnection:()=>V$,truncateNotificationBody:()=>sJ,toHubHealthUrl:()=>kQ,stopLocalHubServerGracefully:()=>iQ,startHubWebSocketServer:()=>Df,startHubServer:()=>VB,spawnDetachedHubServerWithRetry:()=>R2,spawnDetachedHubServer:()=>uQ,sendHubCommand:()=>FV,restartLocalHubIfIdleAfterStartupTimeout:()=>U5,resolveWorkspaceHubOwnerContext:()=>GA,resolveSharedHubOwnerContext:()=>Y0,resolveHubUrl:()=>UW,resolveHubOwnerContext:()=>I$,resolveHubEndpointOptions:()=>d0,resolveHubBuildId:()=>F1,resolveDefaultHubPort:()=>U2,resolveDefaultHubPathname:()=>vQ,resolveDefaultHubHost:()=>gQ,resolveCompatibleLocalHubUrl:()=>gJ,resolveClineDir:()=>AA,resolveClineDataDir:()=>kJ,requestHubShutdown:()=>mJ,rememberRecoverableLocalHubUrl:()=>U1,readHubDiscovery:()=>K0,probeHubServer:()=>A$,probeHubConnection:()=>PV,prewarmDetachedHubServer:()=>P5,normalizeHubWebSocketUrl:()=>R1,isHubReconnectableTransportError:()=>pQ,isHubCommandTimeoutError:()=>F5,isDiscoveryFilePresent:()=>BA,ensureHubWebSocketServer:()=>I5,ensureHubServer:()=>BB,ensureDetachedHubServer:()=>FA,ensureCompatibleLocalHubUrl:()=>Vf,createLocalHubScheduleRuntimeHandlers:()=>x5,createInMemoryHubOwnerContext:()=>VA,createHubServerUrl:()=>$$,createHubAuthToken:()=>B5,createConfiguredTelemetryService:()=>u$,createConfiguredTelemetryHandle:()=>b2,connectToHub:()=>S5,clearHubDiscovery:()=>c0,NodeHubClient:()=>f$,NativeHubTransportAdapter:()=>J4,HubUIClient:()=>LW,HubTransportError:()=>O0,HubSessionClient:()=>DW,HubServerTransport:()=>I2,HubScheduleService:()=>h2,HubScheduleCommandService:()=>S2,HubCommandError:()=>D2,DEFAULT_HUB_PORT:()=>xQ,DEFAULT_HUB_PATHNAME:()=>mQ,DEFAULT_HUB_HOST:()=>IQ,BrowserWebSocketHubAdapter:()=>f4});import{createSessionId as CN}from"@cline/shared";function l0($,f){return{version:$.version,requestId:$.requestId,ok:!0,payload:f}}function BV($,f,J){return{version:$.version,requestId:$.requestId??CN("hubreq_"),ok:!1,error:{code:f,message:J}}}class S2{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return l0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return l0($,{schedules:this.schedules.listSchedules({enabled:typeof $.payload?.enabled==="boolean"?$.payload.enabled:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0,tags:Array.isArray($.payload?.tags)?$.payload?.tags:void 0})});case"schedule.get":return l0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return l0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return l0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return l0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return l0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return l0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return l0($,{executions:this.schedules.listScheduleExecutions({scheduleId:typeof $.payload?.scheduleId==="string"?$.payload.scheduleId:void 0,status:typeof $.payload?.status==="string"?$.payload.status:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0})});case"schedule.stats":return l0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return l0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return l0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return BV($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(f){return BV($,"schedule_command_failed",f instanceof Error?f.message:String(f))}}toCreateInput($){let f=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:f}}toUpdateInput($){let f=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:f}}}function q5($){return $?new Date($).getTime():void 0}function EN($){let f=$.metadata?{...$.metadata}:void 0;if(f)delete f.__hubScheduleCreatedBy,delete f.__hubScheduleCwd,delete f.__hubRuntimeOptions;return f}function y5($){let f=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof f?.__hubScheduleCwd==="string"?f.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:q5($.nextRunAt),lastRunAt:q5($.lastRunAt),createdBy:typeof f?.__hubScheduleCreatedBy==="string"?f.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:f?.__hubRuntimeOptions&&typeof f.__hubRuntimeOptions==="object"&&!Array.isArray(f.__hubRuntimeOptions)?f.__hubRuntimeOptions:void 0,metadata:EN($)}}function bN($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function KW($,f){return{executionId:$.runId,scheduleId:f,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:q5($.startedAt),endedAt:q5($.completedAt),status:bN($.status),errorMessage:$.error}}class h2{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new SJ({dbPath:$.dbPath}),this.materializer=new NJ({store:this.store}),this.runner=new MJ({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,eventPublisher:$.eventPublisher,workspaceRoot:"",logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency})}async start(){if(this.disposed)throw Error("HubScheduleService has been disposed");if(this.started)return;this.started=!0,await this.runner.start()}async stop(){await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,await this.runner.dispose(),this.store.close()}createSchedule($){if(RQ($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return y5(this.store.createHubSchedule($))}getSchedule($){let f=this.store.getHubSchedule($);return f?y5(f):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((f)=>y5(f))}updateSchedule($,f){if(f.cronPattern!==void 0)RQ(f.cronPattern);let J=this.store.getHubSchedule($);if(!J)return;let Z=f.workspaceRoot!==void 0?f.workspaceRoot.trim():J.workspaceRoot;if((f.enabled??J.enabled)&&!Z)throw Error("workspaceRoot is required for enabled schedules");let W=this.store.updateHubSchedule($,{...f,scheduleId:$});return W?y5(W):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let f=this.store.enqueueHubScheduleRun($,"manual");if(!f)return;await this.runner.tick();let J=this.store.getRun(f.runId)??f;return KW(J,$)}triggerScheduleNowDetached($){let f=this.store.enqueueHubScheduleRun($,"manual");if(!f)return;return this.runner.tick().catch(()=>{return}),KW(f,$)}listScheduleExecutions($){let f=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,J={specId:f?.specId,limit:$.limit};return this.store.listRuns(J).map((Q)=>{let W=f??this.store.getSpec(Q.specId);if(!W||W.source!=="hub-schedule")return;return KW(Q,W.externalId)}).filter((Q)=>{if(!Q)return!1;return!$.status||Q.status===$.status})}getScheduleStats($){let f=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(f.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let J=0,Z=0,Q=0,W;for(let j of f){if(j.status==="success"||j.status==="completed")J+=1;if(!W&&j.status!=="success"&&j.status!=="completed")W=j;if(j.startedAt&&j.endedAt)Q+=j.endedAt-j.startedAt,Z+=1}return{totalRuns:f.length,successRate:J/f.length,avgDurationSeconds:Z>0?Q/Z/1000:0,lastFailure:W}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let f=this.store.getSpec($.specId);if(!f||f.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:f.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:f.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+f.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let f={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(f).flatMap((J)=>J.source==="hub-schedule"&&J.nextRunAt?[{spec:J,nextRunAt:J.nextRunAt}]:[]).sort((J,Z)=>String(J.nextRunAt).localeCompare(String(Z.nextRunAt))).slice(0,$).map(({spec:J,nextRunAt:Z})=>({scheduleId:J.externalId,name:J.title,nextRunAt:Z}))}}w5();function ZM($,f){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let J=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(J?`Failed to connect to hub at ${f} (${J} event before socket open).`:`Failed to connect to hub at ${f}.`)}var QM="cline-hub-auth.";function WM($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function jM($,f){let J=new URL($),Z=new URL(f);return J.search="",J.hash="",Z.search="",Z.hash="",J.toString()===Z.toString()}async function XM($){let f=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),f)return f;let J=Y0(),Z=await K0(J.discoveryPath);if(Z?.url&&jM($.toString(),Z.url))return Z.authToken;return}async function UW($={}){let f=d0($);if(!WM($)){let J=Y0(),Z=await K0(J.discoveryPath);if(Z?.url)return Z.url}return $$(f.host,f.port,f.pathname)}async function S5($){return await new Promise((f,J)=>{(async()=>{let Z=new URL($),Q=await XM(Z);Z.hash="";let W=new WebSocket(Z.toString(),Q?[`${QM}${Q}`]:void 0),j=new Map,X=0;W.addEventListener("open",()=>{f({send(H){let Y=H.requestId??`hub-client-${++X}`;return new Promise((A,V)=>{j.set(Y,{resolve:A,reject:V});let B={kind:"command",envelope:{...H,requestId:Y}};W.send(JSON.stringify(B))})},close(){W.close()}})}),W.addEventListener("message",(H)=>{let Y=JSON.parse(String(H.data));if(Y.kind==="reply"&&Y.envelope.requestId){let A=j.get(Y.envelope.requestId);if(A)j.delete(Y.envelope.requestId),A.resolve(Y.envelope)}}),W.addEventListener("close",()=>{for(let H of j.values())H.reject(Error("Hub connection closed"));j.clear()}),W.addEventListener("error",(H)=>{J(ZM(H,$))})})().catch(J)})}async function PV($){try{return(await S5($)).close(),!0}catch{return!1}}async function FV($,f){let J=await UW($),Z=await S5(J);try{return await Z.send({version:f.version??"v1",clientId:f.clientId??"hub-client",...f})}finally{Z.close()}}function RW($){return $?JSON.parse(JSON.stringify($)):{}}function h5($){let f=$?.session&&typeof $.session==="object"?$.session:void 0;if(!f)return;let J=f.metadata&&typeof f.metadata==="object"?RW(f.metadata):void 0;return{sessionId:typeof f.sessionId==="string"?f.sessionId:"",parentSessionId:typeof J?.parentSessionId==="string"?J.parentSessionId:void 0,messagesPath:typeof J?.messagesPath==="string"?J.messagesPath:void 0,metadata:J}}function UV($,f){return $.error?.message??`hub command failed: ${f}`}function HM($){let f=RW($);if(typeof f.error==="string"&&f.error.trim())return{...f,error:f.error.trim()};let J=f.result&&typeof f.result==="object"?f.result:void 0;if(typeof J?.text==="string"&&J.text.trim())return{...f,error:J.text.trim()};let Z=J?.error&&typeof J.error==="object"?J.error:void 0;if(typeof Z?.message==="string"&&Z.message.trim())return{...f,error:Z.message.trim()};return f}function RV($){let f=$?.sessionId;return typeof f==="string"&&f.trim()?f.trim():void 0}function YM($){let f=$?.checkpoint;if(!f||typeof f!=="object"||Array.isArray(f))throw Error("hub checkpoint restore returned no checkpoint");let J=f;if(typeof J.ref!=="string"||typeof J.createdAt!=="number"||typeof J.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return J}function AM($){let f=RW($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||RV(f)||"",eventType:"schedule.execution.completed",payload:f};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||RV(f)||"",eventType:"schedule.execution.failed",payload:f};let J=$.sessionId?.trim();if(!J)return;switch($.event){case"iteration.started":return{sessionId:J,eventType:"runtime.chat.iteration_start",payload:f};case"iteration.finished":return{sessionId:J,eventType:"runtime.chat.iteration_end",payload:f};case"assistant.delta":return{sessionId:J,eventType:"runtime.chat.text_delta",payload:f};case"usage.updated":return{sessionId:J,eventType:"runtime.chat.usage",payload:f};case"tool.started":return{sessionId:J,eventType:"runtime.chat.tool_call_start",payload:f};case"tool.finished":return{sessionId:J,eventType:"runtime.chat.tool_call_end",payload:f};case"approval.requested":return{sessionId:J,eventType:"approval.requested",payload:f};case"run.aborted":return{sessionId:J,eventType:"runtime.chat.aborted",payload:f};case"run.failed":return{sessionId:J,eventType:"runtime.chat.failed",payload:HM($.payload)};case"run.completed":return{sessionId:J,eventType:"runtime.chat.completed",payload:f};default:return}}class DW{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new f$({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-session-client",displayName:$.displayName??"hub session client",workspaceRoot:$.workspaceRoot,cwd:$.cwd})}async ensureMetadataApplied(){if(this.metadataApplied||!this.options.metadata){if(!this.options.metadata)await this.client.connect();return}await this.client.connect(),await this.client.command("client.update",{metadata:this.options.metadata}),this.metadataApplied=!0}async connect(){await this.ensureMetadataApplied()}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession($){await this.ensureMetadataApplied();let f=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),J=h5(f.payload);if(!J?.sessionId)throw Error("hub session create returned no session id");return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:"",messagesPath:J.messagesPath??""}}}async sendRuntimeSession($,f,J){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:f.prompt,mode:f.config.mode,attachments:f.attachments,delivery:f.delivery,timeoutSeconds:f.config.timeoutSeconds},$,J)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let f;try{f=await this.client.command("session.get",void 0,$)}catch(J){if(k$(J))return;throw J}return h5(f.payload)}async readMessages($){let f=$.trim();if(!f)return[];await this.ensureMetadataApplied();let J=await this.client.command("session.messages",{sessionId:f},f);if(!J.ok)throw Error(UV(J,"session.messages"));let Z=J.payload?.messages;return Array.isArray(Z)?Z:[]}async restore($){let f=$.sessionId.trim();if(!f)throw Error("sessionId is required");let J=$.restore?.messages!==!1;if(J&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let Z=$.config,Q=await this.client.command("session.restore",{sessionId:f,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Z?{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,sessionConfig:{providerId:Z.provider,modelId:Z.model,apiKey:Z.apiKey,cwd:Z.cwd??Z.workspaceRoot,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:Z.mode??"act",rules:Z.rules,maxIterations:Z.maxIterations,enableTools:Z.enableTools,enableSpawnAgent:Z.enableSpawn!==!1,enableAgentTeams:Z.enableTeams!==!1,disableMcpSettingsTools:Z.disableMcpSettingsTools,missionLogIntervalSteps:Z.missionStepInterval,missionLogIntervalMs:Z.missionTimeIntervalMs},metadata:{source:Z.source??"cli",provider:Z.provider,model:Z.model,enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams,prompt:void 0,interactive:Z.interactive!==!1},runtimeOptions:{mode:Z.mode,systemPrompt:Z.systemPrompt,maxIterations:Z.maxIterations,enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams,autoApproveTools:Z.autoApproveTools,configExtensions:Z.configExtensions},modelSelection:{provider:Z.provider,model:Z.model,apiKey:Z.apiKey},toolPolicies:Z.toolPolicies}:{}},f);if(!Q.ok)throw Error(UV(Q,"session.restore"));let W=h5(Q.payload);if(J&&!W?.sessionId)throw Error("hub checkpoint restore returned no session id");let j=Array.isArray(Q.payload?.messages)?Q.payload.messages:void 0,X=YM(Q.payload);return{sessionId:W?.sessionId,startResult:W?.sessionId?{sessionId:W.sessionId,manifestPath:"",messagesPath:W.messagesPath??""}:void 0,...j?{messages:j}:{},checkpoint:X}}async listSessions($){await this.ensureMetadataApplied();let f=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(f.payload?.sessions)?f.payload?.sessions:[]).map((Z)=>h5({session:Z})).filter((Z)=>Boolean(Z?.sessionId))}async deleteSession($,f=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:f})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,f){let J=new Set(($.sessionIds??[]).map((Q)=>Q.trim()).filter(Boolean)),Z=this.client.subscribe((Q)=>{let W=AM(Q);if(!W)return;if(J.size>0&&!J.has(W.sessionId))return;f.onEvent?.(W)});return this.ensureMetadataApplied().catch((Q)=>{f.onError?.(Q instanceof Error?Q:Error(String(Q)))}),Z}streamTeamProgress($,f){let J=this.client.subscribe((Z)=>{if(Z.event!=="team.progress"||!Z.payload)return;f.onProjection?.(Z.payload)});return this.ensureMetadataApplied().catch((Z)=>{f.onError?.(Z instanceof Error?Z:Error(String(Z)))}),J}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let f=await this.client.command("schedule.list");return Array.isArray(f.payload?.schedules)?f.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...f})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,f){await this.ensureMetadataApplied();let J=await this.client.command("schedule.list_executions",{scheduleId:$,limit:f});return Array.isArray(J.payload?.executions)?J.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let f=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(f.payload?.upcoming)?f.payload?.upcoming:[]}}class LW{client;constructor($){this.client=new f$({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let f=await this.client.command("session.list",{limit:$});return Array.isArray(f.payload?.sessions)?f.payload.sessions:[]}subscribeUI($){return this.client.subscribe((f)=>{switch(f.event){case"ui.notify":$.onNotify?.(f.payload);break;case"ui.show_window":$.onShowWindow?.(f.payload);break;case"hub.client.registered":$.onClientRegistered?.(f.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(f.payload??{});break;case"session.created":$.onSessionCreated?.(f.payload??{});break;case"session.updated":$.onSessionUpdated?.(f.payload??{});break;case"session.detached":$.onSessionDetached?.(f.payload??{});break}})}}function VM($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((J)=>{if(J&&typeof J==="object"&&"type"in J&&J.type==="text"&&"text"in J&&typeof J.text==="string")return J.text.trim();return""}).filter(Boolean).join(`
561
+ `).trim()||void 0}var DV=120,_W="...";function sJ($){let f=$.trim();if(!f)return"";if(Buffer.byteLength(f,"utf8")<=DV)return f;let J=DV-Buffer.byteLength(_W,"utf8");if(J<=0)return _W;let Z="";for(let Q of f){if(Buffer.byteLength(Z+Q,"utf8")>J)break;Z+=Q}return`${Z}${_W}`}async function LV($){let f=$?.sessionId?.trim()||"unknown",J=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,Q=[...await P1(J)].reverse().find((H)=>H.role==="assistant"),W=Q?VM(Q.content):void 0,j=$?.workspaceRoot?.trim()||"workspace",X=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():j;return{title:`Task completed (${f})`,body:sJ(W&&W.length>0?W:X.length>0?X:j),severity:"info"}}import{captureSdkError as k5,createSessionId as pM}from"@cline/shared";import{createSessionId as PM}from"@cline/shared";import{createSessionId as GM}from"@cline/shared";function BM($){switch($){case"idle":return"idle";case"pending":return"pending";case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function KM($){let f=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())f.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())f.parentAgentId=$.parentAgentId;if($.agentId?.trim())f.agentId=$.agentId;if($.conversationId?.trim())f.conversationId=$.conversationId;if($.messagesPath?.trim())f.messagesPath=$.messagesPath;if($.prompt?.trim())f.prompt=$.prompt;if($.provider?.trim())f.provider=$.provider;if($.model?.trim())f.model=$.model;if($.source?.trim())f.source=$.source;if(typeof $.pid==="number")f.pid=$.pid;return Object.keys(f).length>0?f:void 0}function C5($,f,J,Z){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:f?.createdByClientId??"hub",status:BM($.status),participants:f?[...f.participants.values()]:[],metadata:KM($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...J?{usage:{...J}}:{},...Z?{aggregateUsage:{...Z}}:{}}}function u($,f){return{version:$.version,requestId:$.requestId,ok:!0,...f!==void 0?{payload:f}:{}}}function m($,f,J){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:f,message:J}}}function E5($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function q0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function Uf($,f,J){return{version:"v1",event:$,eventId:GM("hevt_"),sessionId:J,timestamp:Date.now(),payload:f}}async function p0($,f){let J=await $.sessionHost.getSession(f);if(!J)return;let Z=await $.sessionHost.getAccumulatedUsage?.(f);return C5(J,$.sessionState.get(f),Z?.usage,Z?.aggregateUsage)}async function r0($,f){let J=await $.sessionHost.getSession(f);if(!J)return;let[Z,Q]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(f):[],$.sessionHost.getAccumulatedUsage?.(f)]);return B$({session:J,messages:Z,usage:Q?.usage,aggregateUsage:Q?.aggregateUsage})}function b5($,f,J,Z,Q={}){let W=$.sessionState.get(f);if(W){if(Q.interactive!==void 0)W.interactive=Q.interactive;if(!W.participants.has(J))W.participants.set(J,{clientId:J,attachedAt:Date.now(),role:Z});return W}let j={createdByClientId:J,interactive:Q.interactive??!0,participants:new Map([[J,{clientId:J,attachedAt:Date.now(),role:Z}]])};return $.sessionState.set(f,j),j}async function zW($,f){let J=PM("approval_"),Z=f.sessionId;if($.sessionState.get(Z)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((W)=>{$.pendingApprovals.set(J,{sessionId:Z,resolve:W}),$.publish($.buildEvent("approval.requested",{approvalId:J,sessionId:f.sessionId,agentId:f.agentId,conversationId:f.conversationId,iteration:f.iteration,toolCallId:f.toolCallId,toolName:f.toolName,inputJson:JSON.stringify(f.input??null),policy:f.policy},Z))})}function OW($,f,J){let Z=$.pendingApprovals.get(f);if(!Z)return;return $.pendingApprovals.delete(f),Z.resolve(J),{sessionId:Z.sessionId}}function TW($,f,J){let Z=0;for(let[Q,W]of[...$.pendingApprovals.entries()]){if(!f({approvalId:Q,sessionId:W.sessionId}))continue;$.pendingApprovals.delete(Q),W.resolve({approved:!1,reason:J}),$.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:!1,cancelled:!0,reason:J},W.sessionId)),Z+=1}return Z}async function _V($,f){let J=typeof f.payload?.approvalId==="string"?f.payload.approvalId.trim():"";if(!$.pendingApprovals.get(J))return m(f,"approval_not_found",`Unknown approval: ${J}`);let Q=typeof f.payload?.reason==="string"?f.payload.reason:f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)&&typeof f.payload.payload.reason==="string"?f.payload.payload.reason:void 0,W=f.payload?.approved===!0,j=OW($,J,{approved:W,reason:Q});if(!j)return m(f,"approval_not_found",`Unknown approval: ${J}`);return $.publish($.buildEvent("approval.resolved",{approvalId:J,approved:W,reason:Q},j.sessionId)),u(f,{approvalId:J,approved:W})}import{createSessionId as RM}from"@cline/shared";function FM($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var zV={debug:10,info:20,warn:30,error:40,silent:50};function UM(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function g($,f,J={}){if(zV[$]<zV[UM()])return;let Z=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:f,...Object.fromEntries(Object.entries(J).map(([Q,W])=>[Q,FM(W)]).filter(([,Q])=>Q!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${Z}`);return}console.log(`[hub] ${Z}`)}function NW($,f){let J=f instanceof Error?f.stack||f.message:String(f);g("error",$,{error:J})}async function OV($,f,J,Z,Q,W){let j=RM("capreq_"),X=performance.now();return g("info","capability.request.start",{requestId:j,sessionId:f,capabilityName:J,targetClientId:Q}),await new Promise((H,Y)=>{$.pendingCapabilityRequests.set(j,{sessionId:f,targetClientId:Q,capabilityName:J,onProgress:W,resolve:(A)=>{if(g(A.ok?"info":"warn","capability.request.end",{requestId:j,sessionId:f,capabilityName:J,targetClientId:Q,ok:A.ok,error:A.error,durationMs:Math.round(performance.now()-X)}),!A.ok){Y(Error(A.error||`Capability ${J} was rejected by ${Q}.`));return}H(A.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:j,targetClientId:Q,capabilityName:J,payload:Z},f)),g("info","capability.request.published",{requestId:j,sessionId:f,capabilityName:J,targetClientId:Q})})}function TV($,f){let J=typeof f.payload?.requestId==="string"?f.payload.requestId.trim():"",Z=$.pendingCapabilityRequests.get(J);if(!Z)return m(f,"capability_not_found",`Unknown capability request: ${J}`);if((f.clientId?.trim()||"")!==Z.targetClientId)return m(f,"capability_wrong_client",`Capability request ${J} is owned by ${Z.targetClientId}`);if(f.sessionId?.trim()&&f.sessionId.trim()!==Z.sessionId)return m(f,"capability_wrong_session",`Capability request ${J} belongs to session ${Z.sessionId}`);let W=f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)?f.payload.payload:{};return Z.onProgress?.(W),u(f,{requestId:J})}function _1($,f,J){let Z=0;for(let[Q,W]of[...$.pendingCapabilityRequests.entries()]){if(!f({requestId:Q,...W}))continue;$.pendingCapabilityRequests.delete(Q),g("warn","capability.request.cancelled",{requestId:Q,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,reason:J}),W.resolve({ok:!1,error:J}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:W.capabilityName,targetClientId:W.targetClientId,ok:!1,cancelled:!0,error:J},W.sessionId)),Z+=1}return Z}async function NV($,f){let J=typeof f.payload?.sessionId==="string"?f.payload.sessionId.trim():f.sessionId?.trim()||"",Z=typeof f.payload?.capabilityName==="string"?f.payload.capabilityName.trim():"",Q=typeof f.payload?.targetClientId==="string"?f.payload.targetClientId.trim():"";if(!J||!Z||!Q)return m(f,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let W=f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)?f.payload.payload:{},j=await $.requestCapability(J,Z,W,Q);return u(f,j)}catch(W){return m(f,"capability_request_failed",W instanceof Error?W.message:String(W))}}function MV($,f){let J=typeof f.payload?.requestId==="string"?f.payload.requestId.trim():"",Z=$.pendingCapabilityRequests.get(J);if(!Z)return m(f,"capability_not_found",`Unknown capability request: ${J}`);let Q=f.clientId?.trim()||"";if(Q!==Z.targetClientId)return m(f,"capability_wrong_client",`Capability request ${J} is owned by ${Z.targetClientId}`);if(f.sessionId?.trim()&&f.sessionId.trim()!==Z.sessionId)return m(f,"capability_wrong_session",`Capability request ${J} belongs to session ${Z.sessionId}`);$.pendingCapabilityRequests.delete(J);let W=f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)?f.payload.payload:void 0,j=typeof f.payload?.error==="string"?f.payload.error:void 0,X=f.payload?.ok===!0;return g(X?"info":"warn","capability.respond",{requestId:J,sessionId:Z.sessionId,capabilityName:Z.capabilityName,targetClientId:Z.targetClientId,respondedByClientId:Q,ok:X,error:j}),Z.resolve({ok:X,payload:W,error:j}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:Z.capabilityName,targetClientId:Z.targetClientId,respondedByClientId:Q,ok:X,payload:W,error:j},Z.sessionId)),u(f,{requestId:J,ok:X})}import{createSessionId as DM}from"@cline/shared";function yV($,f){let J=f.payload,Z=J?.clientId?.trim()||f.clientId?.trim()||DM("client_");return $.clients.set(Z,{clientId:Z,clientType:J?.clientType??"unknown",displayName:J?.displayName,actorKind:J?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:J?.transport??"native",capabilities:J?.capabilities??[],metadata:J?.metadata,workspaceContext:J?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:Z,clientType:J?.clientType??"unknown",displayName:J?.displayName,connectedAt:Date.now()})),u(f,{clientId:Z})}function qV($,f){let J=f.clientId?.trim(),Z=J?$.clients.get(J):void 0;if(!J||!Z)return m(f,"client_not_found","Client is not registered with this hub.");let Q=E5(f.payload?.metadata);if(Z.lastSeenAt=Date.now(),Q)Z.metadata=JSON.parse(JSON.stringify(Q));return u(f)}function wV($,f,J){let Z=f.clientId?.trim();if(Z)$.clients.delete(Z),J(Z),$.publish($.buildEvent("hub.client.disconnected",{clientId:Z}));return u(f)}function SV($,f){return u(f,{clients:[...$.clients.values()]})}var LM=30000;function _M($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function zM($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function OM($,f,J){let Z=J instanceof Error&&J.message.trim()?J.message:`Unknown session: ${f}`;return m($,jf,Z)}function TM($){return $?$:void 0}function NM($){let f=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(f&&Number.isFinite(f)&&f>0)return Math.floor(f);let J=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(J&&Number.isFinite(J)&&J>0)return Math.floor(J*1000);return}async function MM($,f,J,Z){let Q=performance.now(),W=!1,j={command:f.command,requestId:f.requestId,clientId:f.clientId,sessionId:J.sessionId,timeoutMs:Z},X=setInterval(()=>{if(W)return;let A=Math.round(performance.now()-Q);g("warn","run.heartbeat",{...j,elapsedMs:A}),$.publish($.buildEvent("run.heartbeat",{requestId:f.requestId,elapsedMs:A,...Z?{timeoutMs:Z}:{}},J.sessionId))},LM),H=$.sessionHost.runTurn(J);H.then((A)=>{if(!W)return;g("warn","run.late_end",{...j,elapsedMs:Math.round(performance.now()-Q),finishReason:A?.finishReason})},(A)=>{if(!W)return;g("error","run.late_error",{...j,elapsedMs:Math.round(performance.now()-Q),error:A})});let Y;try{if(!Z)return await H;return await Promise.race([H,new Promise((A,V)=>{Y=setTimeout(()=>{let B=`Hub run ${f.command} timed out after ${Z}ms.`;W=!0,clearInterval(X),V(Error(B)),g("error","run.timeout",{...j,elapsedMs:Math.round(performance.now()-Q)}),TW($,(K)=>K.sessionId===J.sessionId,B),_1($,(K)=>K.sessionId===J.sessionId,B),$.sessionHost.abort(J.sessionId,B).catch((K)=>{g("error","run.timeout_abort_failed",{...j,error:K})})},Z)})])}finally{if(W=!0,clearInterval(X),Y)clearTimeout(Y)}}async function hV($,f){let J=q0(f),Z=f.payload&&typeof f.payload==="object"?f.payload:{},Q=typeof Z.prompt==="string"?Z.prompt:typeof Z.input==="string"?Z.input:"";if(!Q.trim())return m(f,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,J));let W=Z.attachments&&typeof Z.attachments==="object"&&!Array.isArray(Z.attachments)?Z.attachments:void 0,j=Array.isArray(W?.userFiles)?W.userFiles.filter((A)=>typeof A==="string"):void 0,X=NM(Z);$.suppressNextTerminalEventBySession.set(J,"run.start.reply");let H;try{H=await MM($,f,{sessionId:J,prompt:Q,mode:TM(Z.mode),delivery:Z.delivery==="queue"||Z.delivery==="steer"?Z.delivery:void 0,userImages:Array.isArray(W?.userImages)?W.userImages:void 0,userFiles:j,timeoutMs:X},X)}catch(A){if($.suppressNextTerminalEventBySession.get(J)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(J);if(k$(A))return OM(f,J,A);throw $.publish($.buildEvent("run.failed",{reason:"error",error:A instanceof Error?A.message:String(A)},J)),A}if(H){let A=await r0($,J),V=zM(H);if($.publish($.buildEvent(_M(H.finishReason),{reason:H.finishReason,...V?{error:V}:{},result:H,...A?{snapshot:A}:{}},J)),$.suppressNextTerminalEventBySession.get(J)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(J)}else $.suppressNextTerminalEventBySession.delete(J);let Y=await r0($,J);return u(f,H||Y?{...H?{result:H}:{},...Y?{snapshot:Y}:{}}:void 0)}async function CV($,f){let J=q0(f),Z=typeof f.payload?.reason==="string"?f.payload.reason:"Run was aborted before pending approval or capability request was resolved.";TW($,(Q)=>Q.sessionId===J,Z);try{await $.sessionHost.abort(J,f.payload?.reason)}catch(Q){g("warn","run.abort_failed",{command:f.command,requestId:f.requestId,clientId:f.clientId,sessionId:J,error:Q})}finally{_1($,(Q)=>Q.sessionId===J,Z)}return u(f,{applied:!0})}async function EV($,f){let J=q2(f.payload?.payload);if(!J)return m(f,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(J),u(f,{applied:!0})}async function bV($,f){switch(f.type){case"chunk":return;case"agent_event":await yM($,f);return;case"hook":if(f.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:f.payload.toolName},f.payload.sessionId));else if(f.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:f.payload.toolName},f.payload.sessionId));return;case"team_progress":{let J={type:"team_progress_projection",version:1,sessionId:f.payload.sessionId,summary:f.payload.summary,lastEvent:f.payload.lifecycle};$.publish($.buildEvent("team.progress",J,f.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:f.payload.sessionId,prompts:f.payload.prompts},f.payload.sessionId));return;case"pending_prompt_submitted":{let J={id:f.payload.id,prompt:f.payload.prompt,delivery:f.payload.delivery,attachmentCount:f.payload.attachmentCount};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:f.payload.sessionId,prompt:J},f.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:f.payload.sessionId,snapshot:f.payload.snapshot},f.payload.sessionId));return;case"status":{let[J,Z]=await Promise.all([p0($,f.payload.sessionId),r0($,f.payload.sessionId)]);if(J)$.publish($.buildEvent("session.updated",{session:J,...Z?{snapshot:Z}:{}},f.payload.sessionId));return}case"ended":await qM($,f);return;default:return}}async function yM($,f){let{sessionId:J,event:Z}=f.payload;if(Z.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:Z.iteration},J));return}if(Z.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:Z.iteration,hadToolCalls:Z.hadToolCalls,toolCallCount:Z.toolCallCount},J));return}if(Z.type==="content_start"){if(Z.contentType==="text"&&typeof Z.text==="string"&&Z.text.length>0){$.publish($.buildEvent("assistant.delta",{text:Z.text},J));return}if(Z.contentType==="reasoning"){if(Z.redacted&&!Z.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},J));return}if(typeof Z.reasoning==="string"&&Z.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:Z.reasoning,redacted:Z.redacted===!0},J));return}if(Z.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:Z.toolCallId,toolName:Z.toolName,input:Z.input},J));return}}if(Z.type==="content_end"){switch(Z.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:Z.text},J));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:Z.reasoning},J));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:Z.toolCallId,toolName:Z.toolName,output:Z.output,error:Z.error},J));break}return}if(Z.type==="usage"){let Q;try{Q=await $.sessionHost.getAccumulatedUsage?.(J)}catch{Q=void 0}$.publish($.buildEvent("usage.updated",{sessionId:J,delta:{inputTokens:Z.inputTokens,outputTokens:Z.outputTokens,cacheReadTokens:Z.cacheReadTokens??0,cacheWriteTokens:Z.cacheWriteTokens??0,totalCost:Z.cost??0},totals:{inputTokens:Z.totalInputTokens,outputTokens:Z.totalOutputTokens,cacheReadTokens:Z.totalCacheReadTokens??0,cacheWriteTokens:Z.totalCacheWriteTokens??0,totalCost:Z.totalCost??0},usage:Q?.usage,aggregateUsage:Q?.aggregateUsage,agent:{kind:f.payload.teamRole==="teammate"?"teammate":Z.parentAgentId?"subagent":"lead",agentId:Z.agentId,conversationId:Z.conversationId,parentAgentId:Z.parentAgentId,teamAgentId:f.payload.teamAgentId,teamRole:f.payload.teamRole}},J));return}if(Z.type==="done")$.publish($.buildEvent("agent.done",{reason:Z.reason,text:Z.text,iterations:Z.iterations,usage:Z.usage},J))}async function qM($,f){let J=$.suppressNextTerminalEventBySession.get(f.payload.sessionId),Z=J===f.payload.reason||J==="run.start.reply";if(Z)$.suppressNextTerminalEventBySession.delete(f.payload.sessionId);let[Q,W]=await Promise.all([p0($,f.payload.sessionId),r0($,f.payload.sessionId)]);if(f.payload.reason==="completed"){let j=await LV(Q);$.publish($.buildEvent("ui.notify",j,f.payload.sessionId))}if(Z)return;$.publish($.buildEvent(f.payload.reason==="aborted"?"run.aborted":f.payload.reason==="error"||f.payload.reason==="failed"?"run.failed":"run.completed",{reason:f.payload.reason,...W?{snapshot:W}:{}},f.payload.sessionId))}import{createSessionId as vV,parseRuntimeConfigExtensions as uV}from"@cline/shared";var mV={};w(mV,{SessionVersioningService:()=>z1,SessionVersioningError:()=>w0});var xV={};w(xV,{trimMessagesToCheckpoint:()=>IV,trimMessagesBeforeCheckpoint:()=>yW,readSessionCheckpointHistory:()=>oJ,createRestoredCheckpointMetadata:()=>MW,createCheckpointRestorePlan:()=>qW,applyCheckpointToWorktree:()=>wW});import{execFile as wM}from"node:child_process";import{promisify as SM}from"node:util";var k2=SM(wM);function oJ($){let f=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(f?.history)?f.history:[]).filter((Z)=>!!Z&&typeof Z==="object"&&!Array.isArray(Z)).flatMap((Z)=>{let Q=String(Z.ref??"").trim(),W=Number(Z.createdAt??0),j=Number(Z.runCount??0);if(Q.length===0||!Number.isFinite(W)||!Number.isInteger(j)||j<1)return[];let X=Z.kind==="stash"||Z.kind==="commit"?Z.kind:void 0;return[{ref:Q,createdAt:W,runCount:j,...X?{kind:X}:{}}]})}function MW($,f){let J=oJ($).filter((Q)=>Q.runCount<=f),Z=J.at(-1);return Z?{latest:Z,history:J}:void 0}function hM($,f){return $.reduce((J,Z)=>{if(Z.runCount>f)return J;if(!J||Z.runCount>J.runCount)return Z;return J},void 0)}function kV($,f){let J=0;for(let Z=0;Z<$.length;Z+=1){let Q=$[Z];if(Q?.role!=="user")continue;if(("metadata"in Q&&Q.metadata&&typeof Q.metadata==="object"?Q.metadata:void 0)?.kind==="recovery_notice")continue;if(J+=1,J===f)return Z}throw Error(`Could not find user message for checkpoint run ${f}`)}function IV($,f){let J=kV($,f);return $.slice(0,J+1)}function yW($,f){let J=kV($,f);return $.slice(0,J)}function qW($){let f=$.checkpointRunCount;if(!Number.isInteger(f)||f<1)throw Error("checkpointRunCount must be a positive integer");let J=hM(oJ($.session),f);if(!J)throw Error(`No checkpoint found at or before run ${f} in session ${$.session.sessionId}`);let Z=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!Z)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:J,cwd:Z,...$.restoreMessages!==!1?{messages:IV($.messages??[],f)}:{}}}async function wW($,f){if((await k2("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await k2("git",["-C",$,"cat-file","-e",`${f.ref}^{commit}`],{windowsHide:!0}),await k2("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await k2("git",["-C",$,"clean","-fd"],{windowsHide:!0}),f.kind==="commit"){await k2("git",["-C",$,"reset","--hard",f.ref],{windowsHide:!0});return}await k2("git",["-C",$,"stash","apply",f.ref],{windowsHide:!0})}class w0 extends Error{code;constructor($,f){super(f);this.code=$;this.name="SessionVersioningError"}}function CM($){let f=$.sessionId.trim();if(!f)throw new w0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new w0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new w0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new w0("invalid_restore","checkpointRunCount must be a positive integer");return f}class z1{async restoreCheckpoint($){let f=$.restore?.messages!==!1,J=$.restore?.workspace!==!1,Z=CM({sessionId:$.sessionId,restoreMessages:f,restoreWorkspace:J,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),Q=await $.getSession(Z);if(!Q)throw new w0("session_not_found",`Session ${Z} not found`);let W=f?await $.readMessages(Z):void 0;if(f&&W?.length===0)throw new w0("session_messages_not_found",`No messages found for session ${Z}`);let j=qW({session:Q,messages:W,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:f});if(J)await($.applyWorkspaceCheckpoint??wW)(j.cwd,j.checkpoint);let X=B$({session:Q,messages:W});if(!f)return{checkpoint:j.checkpoint,sourceSnapshot:X};let H=MW(Q,$.checkpointRunCount),Y=$.restore?.omitCheckpointMessageFromSession?yW(W??[],$.checkpointRunCount):j.messages??[],A={sourceSession:Q,sourceMessages:W,sourceSnapshot:X,plan:j,restoredCheckpointMetadata:H,initialMessages:Y,restoreMessages:f,restoreWorkspace:J,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new w0("invalid_restore","start is required when restore.messages is true");let V=$.buildStartInput?await $.buildStartInput(A,$.start):$.start,B=await $.startSession(V),K=$.getStartedSessionId?.(B);if(K)await($.retainCheckpointRefs??MX)(j.cwd,K,H?.history??[]);let G=K&&$.readRestoredSession?await $.readRestoredSession(K):void 0;return{sessionId:K,startResult:B,messages:j.messages,checkpoint:j.checkpoint,sourceSnapshot:X,...G?{restoredSnapshot:B$({session:G,messages:Y})}:{}}}}import{HUB_CHECKPOINT_CAPABILITY as iu,HUB_COMPACTION_CAPABILITY as nu,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as au,HUB_HOOK_CAPABILITY_PREFIX as tu,HUB_MISTAKE_LIMIT_CAPABILITY as su,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as ou,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as eu,isHubToolExecutorName as EM}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as Qc,HUB_COMPACTION_CAPABILITY as Wc,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as jc,HUB_HOOK_CAPABILITY_PREFIX as Xc,HUB_MISTAKE_LIMIT_CAPABILITY as Hc,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Yc,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Ac}from"@cline/shared";var bM=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function Rf($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function kM($,f){let J=typeof $.name==="string"?$.name.trim():"",Z=typeof $.description==="string"?$.description:"",Q=typeof $.capabilityName==="string"?$.capabilityName.trim():"",W=Rf($.inputSchema);if(!J||!Z||!W||!Q||f.has(Q))return;return f.add(Q),{kind:"tool",capabilityName:Q,name:J,description:Z,inputSchema:W,...Rf($.lifecycle)?{lifecycle:Rf($.lifecycle)}:{}}}function hW($){if(!Array.isArray($))return[];let f=[],J=new Set;for(let Z of $){if(!Z||typeof Z!=="object"||Array.isArray(Z))continue;let Q=Z,W=Q.kind,j=typeof Q.capabilityName==="string"?Q.capabilityName.trim():"";if(!j||J.has(j))continue;if(W==="tool"){let X=kM(Q,J);if(X)f.push(X);continue}if(W==="toolExecutor"){let X=Q.executor;if(!EM(X))continue;J.add(j),f.push({kind:"toolExecutor",capabilityName:j,executor:X});continue}if(W==="hook"){let X=typeof Q.name==="string"?Q.name.trim():"";if(!X)continue;J.add(j),f.push({kind:"hook",capabilityName:j,name:X});continue}if(W==="compaction"){J.add(j),f.push({kind:"compaction",capabilityName:j,...Rf(Q.config)?{config:Rf(Q.config)}:{}});continue}if(W==="checkpoint"){J.add(j),f.push({kind:"checkpoint",capabilityName:j,...Rf(Q.config)?{config:Rf(Q.config)}:{}});continue}if(W==="mistakeLimit"){J.add(j),f.push({kind:"mistakeLimit",capabilityName:j});continue}if(W==="userInstructionService")J.add(j),f.push({kind:"userInstructionService",capabilityName:j})}return f}function gV($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function IM($){return Object.hasOwn($,"update")?$.update:$}function eJ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function xM($){let f=($??[]).map(eJ).filter(Boolean);return f.length>0?new Set(f):void 0}function mM($,f,J){if(!J)return!0;let Z=eJ($),Q=eJ(f),W=Z.includes(":")?Z.split(":").at(-1)??Z:Z,j=Q.includes(":")?Q.split(":").at(-1)??Q:Q;return J.has(Z)||J.has(Q)||J.has(W)||J.has(j)}function SW($,f){let J=xM(f);return $.records.skill.map((Z)=>({id:Z.id,name:Z.item.name,description:"description"in Z.item&&typeof Z.item.description==="string"?Z.item.description:void 0,disabled:Z.item.disabled===!0,skill:Z.item})).filter((Z)=>mM(Z.id,Z.name,J))}function gM($,f){let J=async(Z,Q)=>{let W=eJ(Z),X=SW($,f).filter((B)=>B.id===W||eJ(B.name)===W||B.id.endsWith(`:${W}`)).filter((B)=>!B.disabled);if(X.length!==1)return X.length>1?`Skill "${Z}" is ambiguous. Use one of: ${X.map((B)=>B.id).join(", ")}`:`Skill "${Z}" not found.`;let H=X[0].skill,Y=Q?.trim(),A=Y?`
562
562
  <command-args>${Y}</command-args>`:"",V=H.description?.trim()?`Description: ${H.description.trim()}
563
563
 
564
564
  `:"";return`<command-name>${H.name}</command-name>${A}
565
565
  <command-instructions>
566
566
  ${V}${H.instructions}
567
- </command-instructions>`};return Object.defineProperty(Z,"configuredSkills",{get:()=>P7($,J).map(({skill:Q,...W})=>W),enumerable:!0}),Z}function RM($,J,Z,Q){let W={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},f=async()=>{let j=await Q($,Z.capabilityName,{},J);if(j?.snapshot)W=j.snapshot};return{start:f,stop:()=>{},refreshType:async()=>{await f()},listRecords:(j)=>[...W.records[j]],listRuntimeCommands:()=>[...W.runtimeCommands],resolveRuntimeSlashCommand:(j)=>{if(!j.startsWith("/")||j.length<2)return j;let H=j.match(/^\/(\S+)/)?.[1];if(!H)return j;let Y=W.runtimeCommands.find((A)=>A.name===H);return Y?`${Y.instructions}${j.slice(H.length+1)}`:j},hasConfiguredSkills:(j)=>P7(W,j).some((X)=>!X.disabled),createExtension:(j)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[j.includeRules?"rules":void 0,j.registerSkillsTool?"tools":void 0,j.includeSkills||j.includeWorkflows?"commands":void 0].filter((X)=>Boolean(X))},setup(X){if(j.includeRules)X.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>Q8(W.records.rule.map((H)=>H.item).filter((H)=>H.disabled!==!0))});if(j.registerSkillsTool)X.registerTool(O1(UM(W,j.allowedSkillNames)));for(let H of W.runtimeCommands.filter((Y)=>Y.kind==="skill"&&j.includeSkills||Y.kind==="workflow"&&j.includeWorkflows))X.registerCommand({name:H.name,description:H.description,handler:(Y)=>{let A=Y.trim();return A?`${H.instructions}
567
+ </command-instructions>`};return Object.defineProperty(J,"configuredSkills",{get:()=>SW($,f).map(({skill:Z,...Q})=>Q),enumerable:!0}),J}function vM($,f,J,Z){let Q={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},W=async()=>{let j=await Z($,J.capabilityName,{},f);if(j?.snapshot)Q=j.snapshot};return{start:W,stop:()=>{},refreshType:async()=>{await W()},listRecords:(j)=>[...Q.records[j]],listRuntimeCommands:()=>[...Q.runtimeCommands],resolveRuntimeSlashCommand:(j)=>{if(!j.startsWith("/")||j.length<2)return j;let H=j.match(/^\/(\S+)/)?.[1];if(!H)return j;let Y=Q.runtimeCommands.find((A)=>A.name===H);return Y?`${Y.instructions}${j.slice(H.length+1)}`:j},hasConfiguredSkills:(j)=>SW(Q,j).some((X)=>!X.disabled),createExtension:(j)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[j.includeRules?"rules":void 0,j.registerSkillsTool?"tools":void 0,j.includeSkills||j.includeWorkflows?"commands":void 0].filter((X)=>Boolean(X))},setup(X){if(j.includeRules)X.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>V2(Q.records.rule.map((H)=>H.item).filter((H)=>H.disabled!==!0))});if(j.registerSkillsTool)X.registerTool(w1(gM(Q,j.allowedSkillNames)));for(let H of Q.runtimeCommands.filter((Y)=>Y.kind==="skill"&&j.includeSkills||Y.kind==="workflow"&&j.includeWorkflows))X.registerCommand({name:H.name,description:H.description,handler:(Y)=>{let A=Y.trim();return A?`${H.instructions}
568
568
 
569
- ${A}`:H.instructions}})}})}}function DM($,J,Z,Q){let W=Z.map((f)=>[f.executor,async(...j)=>{let X=j.at(-1),H=j.slice(0,-1);return(await Q($,f.capabilityName,{executor:f.executor,args:H,context:zV(X)},J))?.result}]);return W.length>0?Object.fromEntries(W):void 0}function PM($,J,Z,Q){if(Z.length===0)return;return Z.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema,lifecycle:W.lifecycle,async execute(f,j){return(await Q($,W.capabilityName,{toolName:W.name,input:f,context:zV(j)},J,j.emitUpdate?(H)=>{j.emitUpdate?.(KM(H))}:void 0))?.result}}))}function LM($,J,Z,Q){let W=new Map(Z.map((j)=>[j.name,j])),f={};for(let j of VM){let X=W.get(j);if(!X)continue;f[j]=async(H)=>{return(await Q($,X.capabilityName,{context:H},J))?.control}}return Object.keys(f).length>0?f:void 0}function z7($){let J=$.contributions.filter((H)=>H.kind==="toolExecutor"),Z=$.contributions.filter((H)=>H.kind==="tool"),Q=$.contributions.filter((H)=>H.kind==="hook"),W=$.contributions.find((H)=>H.kind==="compaction"),f=$.contributions.find((H)=>H.kind==="checkpoint"),j=$.contributions.find((H)=>H.kind==="mistakeLimit"),X=$.contributions.find((H)=>H.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:DM($.sessionId,$.targetClientId,J,$.requestCapability),localRuntime:{...Q.length>0?{hooks:LM($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...Z.length>0?{extraTools:PM($.sessionId,$.targetClientId,Z,$.requestCapability)}:{},...W?{compaction:{...$.sessionConfig?.compaction??{},...W.config,compact:async(H)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:H},$.targetClientId))?.result}}}:{},...f?{checkpoint:{...$.sessionConfig?.checkpoint??{},...f.config,createCheckpoint:async(H)=>{return(await $.requestCapability($.sessionId,f.capabilityName,{context:H},$.targetClientId))?.result}}}:{},...j?{onConsecutiveMistakeLimitReached:async(H)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:H},$.targetClientId))?.result}}:{},...X?{userInstructionService:RM($.sessionId,$.targetClientId,X,$.requestCapability)}:{}}}}var TV="hubCapabilityOwnerClientId";function NV($,J){$[TV]=J}function zM($){let J=$?.[TV];return typeof J==="string"&&J.trim()?J.trim():void 0}async function MV($,J,Z){let Q=performance.now(),W={command:J.command,requestId:J.requestId,clientId:J.clientId,sessionId:J.sessionId};g("info","session.create.begin",W);let f=J.payload&&typeof J.payload==="object"?J.payload:{},j=f.metadata&&typeof f.metadata==="object"?JSON.parse(JSON.stringify(f.metadata)):{},X=f.sessionConfig&&typeof f.sessionConfig==="object"?JSON.parse(JSON.stringify(f.sessionConfig)):void 0,H=f.runtimeOptions&&typeof f.runtimeOptions==="object"?f.runtimeOptions:{};if(typeof X?.mode==="string")j.mode=X.mode;else if(typeof H.mode==="string")j.mode=H.mode;if(typeof X?.systemPrompt==="string")j.systemPrompt=X.systemPrompt;else if(typeof H.systemPrompt==="string")j.systemPrompt=H.systemPrompt;if(X?.checkpoint?.enabled===!0)j.checkpointEnabled=!0;else if(H.checkpointEnabled===!0)j.checkpointEnabled=!0;let Y=f.modelSelection&&typeof f.modelSelection==="object"?f.modelSelection:{},A=typeof f.workspaceRoot==="string"&&f.workspaceRoot.trim()?f.workspaceRoot.trim():typeof f.cwd==="string"&&f.cwd.trim()?f.cwd.trim():"";if(!A)return g("warn","session.create.invalid",{...W,reason:"missing_workspace_root"}),m(J,"invalid_session_create","session.create requires workspaceRoot or cwd");let V=J.clientId?.trim()||"hub-client",B=L7(H.clientContributions);if(g("info","session.create.contributions_parsed",{...W,clientId:V,workspaceRoot:A,cwd:typeof f.cwd==="string"?f.cwd:void 0,contributionCount:B.length}),B.length>0)NV(j,V);let G=(typeof X?.sessionId==="string"?X.sessionId.trim():"")||OV(),D=_V(H.configExtensions);g("info","session.create.runtime_build.begin",{...W,sessionId:G,configExtensionCount:D?.length??0});let F=z7({sessionId:G,targetClientId:V,contributions:B,sessionConfig:X,requestCapability:$.requestCapability});g("info","session.create.start_session.begin",{...W,sessionId:G,provider:X?.providerId??(typeof Y.provider==="string"?Y.provider:typeof j.provider==="string"?j.provider:"hub"),model:X?.modelId??(typeof Y.model==="string"?Y.model:typeof j.model==="string"?j.model:"hub")});let U=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(f.initialMessages)?f.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:D,...F.localRuntime},capabilities:{toolExecutors:F.toolExecutors,requestToolApproval:Z},config:{...X??{},sessionId:G,providerId:X?.providerId??(typeof Y.provider==="string"?Y.provider:typeof j.provider==="string"?j.provider:"hub"),modelId:X?.modelId??(typeof Y.model==="string"?Y.model:typeof j.model==="string"?j.model:"hub"),apiKey:X?.apiKey??(typeof Y.apiKey==="string"?Y.apiKey:void 0),cwd:X?.cwd??(typeof f.cwd==="string"&&f.cwd.trim()?f.cwd.trim():A),workspaceRoot:X?.workspaceRoot??A,systemPrompt:X?.systemPrompt??(typeof H.systemPrompt==="string"?H.systemPrompt:""),mode:X?.mode??(H.mode==="plan"||H.mode==="yolo"?H.mode:"act"),maxIterations:X?.maxIterations??(typeof H.maxIterations==="number"?H.maxIterations:void 0),enableTools:X?.enableTools??H.enableTools!==!1,enableSpawnAgent:X?.enableSpawnAgent??H.enableSpawn!==!1,enableAgentTeams:X?.enableAgentTeams??H.enableTeams!==!1,checkpoint:X?.checkpoint??(H.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:X?.teamName??(typeof j.teamName==="string"?j.teamName:void 0)},toolPolicies:f.toolPolicies&&typeof f.toolPolicies==="object"&&!Array.isArray(f.toolPolicies)?JSON.parse(JSON.stringify(f.toolPolicies)):H.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});g("info","session.create.start_session.end",{...W,sessionId:U.sessionId,elapsedMs:Math.round(performance.now()-Q),hasImmediateResult:!!U.result}),TZ($,U.sessionId,V,"creator",{interactive:j.interactive!==!1}),g("info","session.create.read_records.begin",{...W,sessionId:U.sessionId});let[R,O]=await Promise.all([l0($,U.sessionId),p0($,U.sessionId)]);if(g("info","session.create.read_records.end",{...W,sessionId:U.sessionId,hasSession:!!R,hasSnapshot:!!O,elapsedMs:Math.round(performance.now()-Q)}),R)$.publish($.buildEvent("session.created",{session:R,...O?{snapshot:O}:{}},U.sessionId));return g("info","session.create.reply",{...W,sessionId:U.sessionId,elapsedMs:Math.round(performance.now()-Q)}),u(J,{session:R,...O?{snapshot:O}:{}})}async function qV($,J,Z){let Q=J.payload&&typeof J.payload==="object"?J.payload:{},W=typeof Q.sessionId==="string"?Q.sessionId.trim():J.sessionId?.trim()||"",f=Q.checkpointRunCount;if(!W)return m(J,"invalid_restore","session.restore requires a session id");let j=Q.restore&&typeof Q.restore==="object"?Q.restore:{},X=j.messages!==!1;if(typeof f!=="number")return m(J,"invalid_restore","checkpointRunCount must be a positive integer");try{let H=Q.sessionConfig&&typeof Q.sessionConfig==="object"?JSON.parse(JSON.stringify(Q.sessionConfig)):void 0;if(X&&!H)return m(J,"invalid_restore","sessionConfig is required when restore.messages is true");let Y=Q.runtimeOptions&&typeof Q.runtimeOptions==="object"?Q.runtimeOptions:{},A=Q.metadata&&typeof Q.metadata==="object"?JSON.parse(JSON.stringify(Q.metadata)):{};if(typeof H?.mode==="string")A.mode=H.mode;else if(typeof Y.mode==="string")A.mode=Y.mode;if(typeof H?.systemPrompt==="string")A.systemPrompt=H.systemPrompt;else if(typeof Y.systemPrompt==="string")A.systemPrompt=Y.systemPrompt;if(H?.checkpoint?.enabled===!0)A.checkpointEnabled=!0;else if(Y.checkpointEnabled===!0)A.checkpointEnabled=!0;let V=Q.modelSelection&&typeof Q.modelSelection==="object"?Q.modelSelection:{},B=J.clientId?.trim()||"hub-client",K=L7(Y.clientContributions);if(K.length>0)NV(A,B);let D=(typeof H?.sessionId==="string"?H.sessionId.trim():"")||OV(),F=_V(Y.configExtensions),U=z7({sessionId:D,targetClientId:B,contributions:K,sessionConfig:H,requestCapability:$.requestCapability}),O=await new U1().restoreCheckpoint({sessionId:W,checkpointRunCount:f,restore:{messages:j.messages,workspace:j.workspace,omitCheckpointMessageFromSession:j.omitCheckpointMessageFromSession===!0},start:H,cwd:typeof H?.cwd==="string"&&H.cwd.trim()||typeof H?.workspaceRoot==="string"&&H.workspaceRoot.trim()||void 0,getSession:(T)=>$.sessionHost.getSession(T),readMessages:(T)=>$.sessionHost.readSessionMessages(T),buildStartInput:(T)=>{if(T.restoredCheckpointMetadata)A.checkpoint=T.restoredCheckpointMetadata;let y=typeof Q.workspaceRoot==="string"&&Q.workspaceRoot.trim()?Q.workspaceRoot.trim():typeof Q.cwd==="string"&&Q.cwd.trim()?Q.cwd.trim():T.sourceSession.workspaceRoot||T.sourceSession.cwd;return{source:typeof A.source==="string"?A.source:void 0,interactive:A.interactive!==!1,sessionMetadata:{...A,restoredFromSessionId:W,restoredCheckpointRunCount:f},initialMessages:T.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:F,...U.localRuntime},capabilities:{toolExecutors:U.toolExecutors,requestToolApproval:Z},config:{...H??{},sessionId:D,providerId:H?.providerId??(typeof V.provider==="string"?V.provider:T.sourceSession.provider),modelId:H?.modelId??(typeof V.model==="string"?V.model:T.sourceSession.model),apiKey:H?.apiKey??(typeof V.apiKey==="string"?V.apiKey:""),cwd:H?.cwd??T.plan.cwd,workspaceRoot:H?.workspaceRoot??y,systemPrompt:H?.systemPrompt??(typeof Y.systemPrompt==="string"?Y.systemPrompt:""),mode:H?.mode??(Y.mode==="plan"||Y.mode==="yolo"?Y.mode:"act"),maxIterations:H?.maxIterations??(typeof Y.maxIterations==="number"?Y.maxIterations:void 0),enableTools:H?.enableTools??Y.enableTools!==!1,enableSpawnAgent:H?.enableSpawnAgent??Y.enableSpawn!==!1,enableAgentTeams:H?.enableAgentTeams??Y.enableTeams!==!1,checkpoint:H?.checkpoint??(Y.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:H?.teamName??(typeof A.teamName==="string"?A.teamName:void 0)},toolPolicies:Q.toolPolicies&&typeof Q.toolPolicies==="object"&&!Array.isArray(Q.toolPolicies)?JSON.parse(JSON.stringify(Q.toolPolicies)):Y.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(T)=>$.sessionHost.startSession(T),getStartedSessionId:(T)=>T.sessionId,readRestoredSession:(T)=>$.sessionHost.getSession(T)});if(!X)return u(J,{checkpoint:O.checkpoint});let _=O.startResult;if(!_)return m(J,"restore_failed","Checkpoint restore did not start a session");TZ($,_.sessionId,B,"creator",{interactive:A.interactive!==!1});let[P,z]=await Promise.all([l0($,_.sessionId),p0($,_.sessionId)]);if(P)$.publish($.buildEvent("session.created",{session:P,...z?{snapshot:z}:{}},_.sessionId));return u(J,{session:P,...z?{snapshot:z}:{},messages:O.messages??[],checkpoint:O.checkpoint})}catch(H){if(H instanceof w0)return m(J,H.code,H.code==="session_not_found"?`Unknown session: ${W}`:H.message);return m(J,"restore_failed",H instanceof Error?H.message:String(H))}}async function yV($,J){let Z=y0(J);if(!Z)return m(J,"invalid_session_attach","session.attach requires a session id");TZ($,Z,J.clientId?.trim()||"hub-client","participant");let Q=await l0($,Z);if(Q)$.publish($.buildEvent("session.attached",{session:Q},Z));return Q?u(J,{session:Q}):m(J,"session_not_found",`Unknown session: ${Z}`)}async function wV($,J){let Z=y0(J);if(!Z)return m(J,"invalid_session_detach","session.detach requires a session id");let Q=J.clientId?.trim()||"hub-client",[W]=await Promise.all([l0($,Z)]),f=zM(W?.metadata)??Q,j=$.sessionState.get(Z);if(j){if(j.participants.delete(Q),j.createdByClientId===Q)j.createdByClientId=f;if(j.participants.size===0)$.sessionState.delete(Z)}F1($,(Y)=>Y.sessionId===Z&&Y.targetClientId===Q,`Capability owner client ${Q} detached before request was resolved.`);let[X,H]=await Promise.all([l0($,Z),p0($,Z)]);return $.publish($.buildEvent("session.detached",X?{session:X,...H?{snapshot:H}:{},clientId:Q}:{clientId:Q},Z)),u(J)}async function SV($,J){let Z=y0(J),Q=J.payload?.includeSnapshot===!0,[W,f]=await Promise.all([l0($,Z),Q?p0($,Z):Promise.resolve(void 0)]);return W?u(J,{session:W,...f?{snapshot:f}:{}}):m(J,"session_not_found",`Unknown session: ${Z}`)}async function CV($,J){let Z=y0(J);if(!Z)return m(J,"invalid_session_id","session.messages requires a session id");if(!await l0($,Z))return m(J,"session_not_found",`Unknown session: ${Z}`);let W=await $.sessionHost.readSessionMessages(Z);return u(J,{sessionId:Z,messages:W})}async function EV($,J){let Z=typeof J.payload?.limit==="number"?J.payload.limit:200,W=(await $.sessionHost.listSessions(Z)).map((f)=>OZ(f,$.sessionState.get(f.sessionId)));return u(J,{sessions:W})}async function hV($,J){let Z=y0(J),Q=_Z(J.payload?.metadata),W=await $.sessionHost.updateSession(Z,{metadata:Q}),[f,j]=await Promise.all([l0($,Z),p0($,Z)]);if(f)$.publish($.buildEvent("session.updated",{session:f,...j?{snapshot:j}:{}},Z));return{version:J.version,requestId:J.requestId,ok:W.updated,payload:{updated:W.updated,session:f,...j?{snapshot:j}:{}}}}async function bV($,J){let Z=y0(J),Q=await $.sessionHost.deleteSession(Z);return $.sessionState.delete(Z),u(J,{deleted:Q})}async function kV($,J){let Z=y0(J),Q=$.sessionHost.pendingPrompts;if(!Q)return m(J,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await Q.list({sessionId:Z});return u(J,{sessionId:Z,prompts:W})}async function IV($,J){let Z=y0(J),Q=typeof J.payload?.promptId==="string"?J.payload.promptId.trim():"",W=typeof J.payload?.prompt==="string"?J.payload.prompt:void 0,f=J.payload?.delivery==="queue"||J.payload?.delivery==="steer"?J.payload.delivery:void 0,j=$.sessionHost.pendingPrompts;if(!j)return m(J,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await j.update({sessionId:Z,promptId:Q,prompt:W,delivery:f});return u(J,X)}async function xV($,J){let Z=y0(J),Q=typeof J.payload?.promptId==="string"?J.payload.promptId.trim():"",W=$.sessionHost.pendingPrompts;if(!W)return m(J,"pending_prompts_unavailable","Pending prompt service is not available.");let f=await W.delete({sessionId:Z,promptId:Q});return u(J,f)}function mV($){switch($){case"schedule.create":return"schedule.created";case"schedule.update":case"schedule.enable":case"schedule.disable":return"schedule.updated";case"schedule.delete":return"schedule.deleted";case"schedule.trigger":return"schedule.triggered";default:return}}var _M=new Set(["skills","workflows","rules","tools","mcp"]);function O7($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function l4($,J){let Z=$[J];if(Z===void 0)return;if(typeof Z!=="string")throw Error(`settings payload '${J}' must be a string.`);return Z}function TM($,J){let Z=$[J];if(Z===void 0)return;if(typeof Z!=="boolean")throw Error(`settings payload '${J}' must be a boolean.`);return Z}function gV($){if($===void 0)return{};if(!O7($))throw Error("settings.list payload must be an object.");return{cwd:l4($,"cwd"),workspaceRoot:l4($,"workspaceRoot"),availabilityContext:O7($.availabilityContext)?$.availabilityContext:void 0}}function NM($){if(!O7($))throw Error("settings.toggle payload must be an object.");let{type:J}=$;if(typeof J!=="string"||!_M.has(J))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...gV($),type:J,id:l4($,"id"),path:l4($,"path"),name:l4($,"name"),enabled:TM($,"enabled")}}class y8{options;clients=new Map;listeners=new Map;sessionState=new Map;pendingApprovals=new Map;pendingCapabilityRequests=new Map;suppressNextTerminalEventBySession=new Map;schedules;scheduleCommands;settings;cronService;sessionHost;hubId=OM("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new G$({sessionService:new K$(new V$),fetch:$.fetch,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(J)=>this.publish(J),buildEvent:Y2,requestCapability:(J,Z,Q,W,f)=>fV(this.ctx,J,Z,Q,W,f)},this.schedules=new _8({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(J,Z)=>{let Q=J==="schedule.execution.completed"?"schedule.execution_completed":J==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!Q)return;this.publish(Y2(Q,Z&&typeof Z==="object"?Z:void 0))}}),this.scheduleCommands=new O8(this.schedules),this.settings=$.settingsService??new j1,$.cronOptions)this.cronService=new z4({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((J)=>{UV(this.ctx,J).catch((Z)=>{G7("session event handling failed",Z),NZ(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Z,severity:"error",handled:!0,context:{eventType:J.type,sessionId:J.payload.sessionId}})})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}}async stop(){for(let $ of this.pendingApprovals.keys())B7(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(F1(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.sessionHost.dispose("hub_server_stop"),await this.schedules.dispose(),this.cronService)try{await this.cronService.dispose()}catch($){console.error("[hub] cron service stop failed",$)}}async handleCommand($){try{let J=await this.dispatchCommand($);return this.captureFailedReply($,J),J}catch(J){throw NZ(this.options.telemetry,{component:"core",operation:"hub.command",error:J,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),J}}async dispatchCommand($){switch($.command){case"client.register":return YV(this.ctx,$);case"client.update":return AV(this.ctx,$);case"client.unregister":return VV(this.ctx,$,(J)=>{this.listeners.delete(J),this.detachClientFromSessions(J)});case"client.list":return BV(this.ctx,$);case"session.create":return await MV(this.ctx,$,(J)=>V7(this.ctx,J));case"session.restore":return await qV(this.ctx,$,(J)=>V7(this.ctx,J));case"session.attach":return await yV(this.ctx,$);case"session.detach":return await wV(this.ctx,$);case"session.get":return await SV(this.ctx,$);case"session.messages":return await CV(this.ctx,$);case"session.list":return await EV(this.ctx,$);case"session.update":return await hV(this.ctx,$);case"session.pending_prompts":return await kV(this.ctx,$);case"session.update_pending_prompt":return await IV(this.ctx,$);case"session.remove_pending_prompt":return await xV(this.ctx,$);case"session.delete":return await bV(this.ctx,$);case"session.hook":return await FV(this.ctx,$);case"run.start":case"session.send_input":return await KV(this.ctx,$);case"run.abort":return await GV(this.ctx,$);case"capability.request":return await XV(this.ctx,$);case"approval.respond":return await QV(this.ctx,$);case"capability.respond":return HV(this.ctx,$);case"capability.progress":return jV(this.ctx,$);case"ui.notify":return this.publish(Y2("ui.notify",$.payload??{})),u($);case"ui.show_window":return this.publish(Y2("ui.show_window",$.payload??{})),u($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let J=await this.scheduleCommands.handleCommand($);if(J.ok){let Z=mV($.command);if(Z)this.publish(Y2(Z,J.payload))}return J}}}captureFailedReply($,J){if(J.ok||!J.error||!MM(J.error.code))return;NZ(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(J.error.message),severity:J.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:J.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let J=await this.settings.list(gV($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:J}}}catch(J){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:J instanceof Error?J.message:String(J)}}}}async handleSettingsToggle($){try{let J=await this.settings.toggle(NM($.payload));return this.publish(Y2("settings.changed",{types:J.changedTypes,snapshot:J.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:J.snapshot,changedTypes:J.changedTypes}}}catch(J){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:J instanceof Error?J.message:String(J)}}}}subscribe($,J,Z){let Q=this.listeners.get($)??new Set,W={sessionId:Z?.sessionId,listener:J};return Q.add(W),this.listeners.set($,Q),()=>{let f=this.listeners.get($);if(!f)return;if(f.delete(W),f.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[J,Z]of this.sessionState.entries())if(Z.participants.delete($),Z.participants.size===0)this.sessionState.delete(J);F1(this.ctx,(J)=>J.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let J of this.listeners.values())for(let Z of J){if(Z.sessionId&&Z.sessionId!==$.sessionId)continue;try{Z.listener($)}catch(Q){G7(`listener threw while publishing ${$.event}`,Q),NZ(this.options.telemetry,{component:"core",operation:"hub.publish",error:Q,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function MM($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as SM}from"node:crypto";import CM from"node:http";import EM from"node:net";import{URL as cV}from"node:url";import{WebSocketServer as hM}from"ws";import{captureSdkError as vV,HUB_COMMAND_SLOW_LOG_MS as qM,resolveHubCommandTimeoutMs as yM,safeJsonParse as wM}from"@cline/shared";function _7($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function uV($,J,Z){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:J,message:Z}}}class p4{transport;telemetry;constructor($,J){this.transport=$;this.telemetry=J}attach($){let J=new Map,Z=new Set,Q=!1,W=(H)=>{try{$.send(JSON.stringify(H))}catch(Y){console.error(`[hub] failed to send websocket frame: ${Y instanceof Error?Y.stack||Y.message:String(Y)}`)}},f=(H)=>{W({kind:"event",envelope:H})},j=async(H)=>{try{let Y=JSON.parse(H.data);switch(Y.kind){case"command":{let A=performance.now(),V=!1,B=_7(Y);g("info","command.start",B);let K=setTimeout(()=>{if(V)return;g("warn","command.slow",{...B,elapsedMs:Math.round(performance.now()-A)})},qM),G=this.transport.command(Y.envelope);G.then((_)=>{if(!V)return;g(_.ok?"warn":"error","command.late_end",{...B,elapsedMs:Math.round(performance.now()-A),ok:_.ok,errorCode:_.error?.code,errorMessage:_.error?.message})},(_)=>{if(!V)return;g("error","command.late_error",{...B,elapsedMs:Math.round(performance.now()-A),error:_})});let D=!1,F,U,R=yM(Y.envelope.command,Y.envelope.timeoutMs);try{U=R===null?await G:await Promise.race([G,new Promise((_)=>{F=setTimeout(()=>{D=!0,vV(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${Y.envelope.command} did not complete within ${R}ms.`),severity:"error",handled:!0,context:{...B,timeoutMs:R}}),_(uV(Y,"hub_command_timeout",`Hub command ${Y.envelope.command} did not complete within ${R}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${Y.envelope.requestId}.`))},R)})])}catch(_){if(clearTimeout(K),F)clearTimeout(F);throw _}if(V=D,clearTimeout(K),F)clearTimeout(F);let O=Math.round(performance.now()-A);if(D)g("error","command.timeout",{...B,durationMs:O,timeoutMs:R});else g(U.ok?"info":"warn","command.end",{...B,durationMs:O,ok:U.ok,errorCode:U.error?.code,errorMessage:U.error?.message});if(Y.envelope.command==="client.register"&&U.ok){let P=(Y.envelope.payload??{}).clientId?.trim()||Y.envelope.clientId?.trim();if(P)Z.add(P)}else if(Y.envelope.command==="client.unregister"&&U.ok){let _=Y.envelope.clientId?.trim();if(_)Z.delete(_)}W({kind:"reply",envelope:U});break}case"stream.subscribe":{let A=`${Y.clientId}:${Y.sessionId??"*"}`;if(J.has(A))break;let V=await this.transport.subscribe(Y.clientId,f,{sessionId:Y.sessionId});J.set(A,V);break}case"stream.unsubscribe":{let A=`${Y.clientId}:${Y.sessionId??"*"}`;J.get(A)?.(),J.delete(A);break}case"reply":case"event":break}}catch(Y){let A=typeof H.data==="string"?wM(H.data):void 0;if(!A||A.kind!=="command"){g("error","rejected malformed websocket frame",{error:Y});return}g("error","command.error",{..._7(A),error:Y}),vV(this.telemetry,{component:"core",operation:"hub.websocket_command",error:Y,severity:"error",handled:!0,context:_7(A)}),W({kind:"reply",envelope:uV(A,"command_failed",Y instanceof Error?Y.message:"Unknown hub error")})}},X=()=>{if(Q)return;Q=!0;for(let H of J.values())H();J.clear();for(let H of Z)this.transport.command({version:"v1",command:"client.unregister",clientId:H});Z.clear(),$.removeEventListener("message",j),$.removeEventListener("close",X)};return $.addEventListener("message",j),$.addEventListener("close",X),X}}class r4{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,J,Z){return this.transport.subscribe($,J,Z)}}function bM($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((J)=>Buffer.from(J))).toString();return String($)}function kM($){return{send(J){$.send(J)},addEventListener(J,Z){if(J==="message"){$.on("message",(Q)=>{Z({data:bM(Q)})});return}$.on("close",Z)},removeEventListener(){}}}function IM($){try{$.write(`HTTP/1.1 400 Bad Request\r
569
+ ${A}`:H.instructions}})}})}}function uM($,f,J,Z){let Q=J.map((W)=>[W.executor,async(...j)=>{let X=j.at(-1),H=j.slice(0,-1);return(await Z($,W.capabilityName,{executor:W.executor,args:H,context:gV(X)},f))?.result}]);return Q.length>0?Object.fromEntries(Q):void 0}function cM($,f,J,Z){if(J.length===0)return;return J.map((Q)=>({name:Q.name,description:Q.description,inputSchema:Q.inputSchema,lifecycle:Q.lifecycle,async execute(W,j){return(await Z($,Q.capabilityName,{toolName:Q.name,input:W,context:gV(j)},f,j.emitUpdate?(H)=>{j.emitUpdate?.(IM(H))}:void 0))?.result}}))}function dM($,f,J,Z){let Q=new Map(J.map((j)=>[j.name,j])),W={};for(let j of bM){let X=Q.get(j);if(!X)continue;W[j]=async(H)=>{return(await Z($,X.capabilityName,{context:H},f))?.control}}return Object.keys(W).length>0?W:void 0}function CW($){let f=$.contributions.filter((H)=>H.kind==="toolExecutor"),J=$.contributions.filter((H)=>H.kind==="tool"),Z=$.contributions.filter((H)=>H.kind==="hook"),Q=$.contributions.find((H)=>H.kind==="compaction"),W=$.contributions.find((H)=>H.kind==="checkpoint"),j=$.contributions.find((H)=>H.kind==="mistakeLimit"),X=$.contributions.find((H)=>H.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:uM($.sessionId,$.targetClientId,f,$.requestCapability),localRuntime:{...Z.length>0?{hooks:dM($.sessionId,$.targetClientId,Z,$.requestCapability)}:{},...J.length>0?{extraTools:cM($.sessionId,$.targetClientId,J,$.requestCapability)}:{},...Q?{compaction:{...$.sessionConfig?.compaction??{},...Q.config,compact:async(H)=>{return(await $.requestCapability($.sessionId,Q.capabilityName,{context:H},$.targetClientId))?.result}}}:{},...W?{checkpoint:{...$.sessionConfig?.checkpoint??{},...W.config,createCheckpoint:async(H)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:H},$.targetClientId))?.result}}}:{},...j?{onConsecutiveMistakeLimitReached:async(H)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:H},$.targetClientId))?.result}}:{},...X?{userInstructionService:vM($.sessionId,$.targetClientId,X,$.requestCapability)}:{}}}}var cV="hubCapabilityOwnerClientId";function dV($,f){$[cV]=f}function lM($){let f=$?.[cV];return typeof f==="string"&&f.trim()?f.trim():void 0}async function lV($,f,J){let Z=performance.now(),Q={command:f.command,requestId:f.requestId,clientId:f.clientId,sessionId:f.sessionId};g("info","session.create.begin",Q);let W=f.payload&&typeof f.payload==="object"?f.payload:{},j=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{},X=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0,H=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{};if(typeof X?.mode==="string")j.mode=X.mode;else if(typeof H.mode==="string")j.mode=H.mode;if(typeof X?.systemPrompt==="string")j.systemPrompt=X.systemPrompt;else if(typeof H.systemPrompt==="string")j.systemPrompt=H.systemPrompt;if(X?.checkpoint?.enabled===!0)j.checkpointEnabled=!0;else if(H.checkpointEnabled===!0)j.checkpointEnabled=!0;let Y=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},A=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():"";if(!A)return g("warn","session.create.invalid",{...Q,reason:"missing_workspace_root"}),m(f,"invalid_session_create","session.create requires workspaceRoot or cwd");let V=f.clientId?.trim()||"hub-client",B=hW(H.clientContributions);if(g("info","session.create.contributions_parsed",{...Q,clientId:V,workspaceRoot:A,cwd:typeof W.cwd==="string"?W.cwd:void 0,contributionCount:B.length}),B.length>0)dV(j,V);let G=(typeof X?.sessionId==="string"?X.sessionId.trim():"")||vV(),R=uV(H.configExtensions);g("info","session.create.runtime_build.begin",{...Q,sessionId:G,configExtensionCount:R?.length??0});let P=CW({sessionId:G,targetClientId:V,contributions:B,sessionConfig:X,requestCapability:$.requestCapability});g("info","session.create.start_session.begin",{...Q,sessionId:G,provider:X?.providerId??(typeof Y.provider==="string"?Y.provider:typeof j.provider==="string"?j.provider:"hub"),model:X?.modelId??(typeof Y.model==="string"?Y.model:typeof j.model==="string"?j.model:"hub")});let F=await $.sessionHost.startSession({source:typeof j.source==="string"?j.source:void 0,interactive:j.interactive!==!1,sessionMetadata:Object.keys(j).length>0?j:void 0,initialMessages:Array.isArray(W.initialMessages)?W.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:R,...P.localRuntime},capabilities:{toolExecutors:P.toolExecutors,requestToolApproval:J},config:{...X??{},sessionId:G,providerId:X?.providerId??(typeof Y.provider==="string"?Y.provider:typeof j.provider==="string"?j.provider:"hub"),modelId:X?.modelId??(typeof Y.model==="string"?Y.model:typeof j.model==="string"?j.model:"hub"),apiKey:X?.apiKey??(typeof Y.apiKey==="string"?Y.apiKey:void 0),cwd:X?.cwd??(typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():A),workspaceRoot:X?.workspaceRoot??A,systemPrompt:X?.systemPrompt??(typeof H.systemPrompt==="string"?H.systemPrompt:""),mode:X?.mode??(H.mode==="plan"||H.mode==="yolo"?H.mode:"act"),maxIterations:X?.maxIterations??(typeof H.maxIterations==="number"?H.maxIterations:void 0),enableTools:X?.enableTools??H.enableTools!==!1,enableSpawnAgent:X?.enableSpawnAgent??H.enableSpawn!==!1,enableAgentTeams:X?.enableAgentTeams??H.enableTeams!==!1,checkpoint:X?.checkpoint??(H.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:X?.teamName??(typeof j.teamName==="string"?j.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):H.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});g("info","session.create.start_session.end",{...Q,sessionId:F.sessionId,elapsedMs:Math.round(performance.now()-Z),hasImmediateResult:!!F.result}),b5($,F.sessionId,V,"creator",{interactive:j.interactive!==!1}),g("info","session.create.read_records.begin",{...Q,sessionId:F.sessionId});let[U,z]=await Promise.all([p0($,F.sessionId),r0($,F.sessionId)]);if(g("info","session.create.read_records.end",{...Q,sessionId:F.sessionId,hasSession:!!U,hasSnapshot:!!z,elapsedMs:Math.round(performance.now()-Z)}),U)$.publish($.buildEvent("session.created",{session:U,...z?{snapshot:z}:{}},F.sessionId));return g("info","session.create.reply",{...Q,sessionId:F.sessionId,elapsedMs:Math.round(performance.now()-Z)}),u(f,{session:U,...z?{snapshot:z}:{}})}async function pV($,f,J){let Z=f.payload&&typeof f.payload==="object"?f.payload:{},Q=typeof Z.sessionId==="string"?Z.sessionId.trim():f.sessionId?.trim()||"",W=Z.checkpointRunCount;if(!Q)return m(f,"invalid_restore","session.restore requires a session id");let j=Z.restore&&typeof Z.restore==="object"?Z.restore:{},X=j.messages!==!1;if(typeof W!=="number")return m(f,"invalid_restore","checkpointRunCount must be a positive integer");try{let H=Z.sessionConfig&&typeof Z.sessionConfig==="object"?JSON.parse(JSON.stringify(Z.sessionConfig)):void 0;if(X&&!H)return m(f,"invalid_restore","sessionConfig is required when restore.messages is true");let Y=Z.runtimeOptions&&typeof Z.runtimeOptions==="object"?Z.runtimeOptions:{},A=Z.metadata&&typeof Z.metadata==="object"?JSON.parse(JSON.stringify(Z.metadata)):{};if(typeof H?.mode==="string")A.mode=H.mode;else if(typeof Y.mode==="string")A.mode=Y.mode;if(typeof H?.systemPrompt==="string")A.systemPrompt=H.systemPrompt;else if(typeof Y.systemPrompt==="string")A.systemPrompt=Y.systemPrompt;if(H?.checkpoint?.enabled===!0)A.checkpointEnabled=!0;else if(Y.checkpointEnabled===!0)A.checkpointEnabled=!0;let V=Z.modelSelection&&typeof Z.modelSelection==="object"?Z.modelSelection:{},B=f.clientId?.trim()||"hub-client",K=hW(Y.clientContributions);if(K.length>0)dV(A,B);let R=(typeof H?.sessionId==="string"?H.sessionId.trim():"")||vV(),P=uV(Y.configExtensions),F=CW({sessionId:R,targetClientId:B,contributions:K,sessionConfig:H,requestCapability:$.requestCapability}),z=await new z1().restoreCheckpoint({sessionId:Q,checkpointRunCount:W,restore:{messages:j.messages,workspace:j.workspace,omitCheckpointMessageFromSession:j.omitCheckpointMessageFromSession===!0},start:H,cwd:typeof H?.cwd==="string"&&H.cwd.trim()||typeof H?.workspaceRoot==="string"&&H.workspaceRoot.trim()||void 0,getSession:(N)=>$.sessionHost.getSession(N),readMessages:(N)=>$.sessionHost.readSessionMessages(N),buildStartInput:(N)=>{if(N.restoredCheckpointMetadata)A.checkpoint=N.restoredCheckpointMetadata;let q=typeof Z.workspaceRoot==="string"&&Z.workspaceRoot.trim()?Z.workspaceRoot.trim():typeof Z.cwd==="string"&&Z.cwd.trim()?Z.cwd.trim():N.sourceSession.workspaceRoot||N.sourceSession.cwd;return{source:typeof A.source==="string"?A.source:void 0,interactive:A.interactive!==!1,sessionMetadata:{...A,restoredFromSessionId:Q,restoredCheckpointRunCount:W},initialMessages:N.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:P,...F.localRuntime},capabilities:{toolExecutors:F.toolExecutors,requestToolApproval:J},config:{...H??{},sessionId:R,providerId:H?.providerId??(typeof V.provider==="string"?V.provider:N.sourceSession.provider),modelId:H?.modelId??(typeof V.model==="string"?V.model:N.sourceSession.model),apiKey:H?.apiKey??(typeof V.apiKey==="string"?V.apiKey:""),cwd:H?.cwd??N.plan.cwd,workspaceRoot:H?.workspaceRoot??q,systemPrompt:H?.systemPrompt??(typeof Y.systemPrompt==="string"?Y.systemPrompt:""),mode:H?.mode??(Y.mode==="plan"||Y.mode==="yolo"?Y.mode:"act"),maxIterations:H?.maxIterations??(typeof Y.maxIterations==="number"?Y.maxIterations:void 0),enableTools:H?.enableTools??Y.enableTools!==!1,enableSpawnAgent:H?.enableSpawnAgent??Y.enableSpawn!==!1,enableAgentTeams:H?.enableAgentTeams??Y.enableTeams!==!1,checkpoint:H?.checkpoint??(Y.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:H?.teamName??(typeof A.teamName==="string"?A.teamName:void 0)},toolPolicies:Z.toolPolicies&&typeof Z.toolPolicies==="object"&&!Array.isArray(Z.toolPolicies)?JSON.parse(JSON.stringify(Z.toolPolicies)):Y.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(N)=>$.sessionHost.startSession(N),getStartedSessionId:(N)=>N.sessionId,readRestoredSession:(N)=>$.sessionHost.getSession(N)});if(!X)return u(f,{checkpoint:z.checkpoint});let O=z.startResult;if(!O)return m(f,"restore_failed","Checkpoint restore did not start a session");b5($,O.sessionId,B,"creator",{interactive:A.interactive!==!1});let[D,_]=await Promise.all([p0($,O.sessionId),r0($,O.sessionId)]);if(D)$.publish($.buildEvent("session.created",{session:D,..._?{snapshot:_}:{}},O.sessionId));return u(f,{session:D,..._?{snapshot:_}:{},messages:z.messages??[],checkpoint:z.checkpoint})}catch(H){if(H instanceof w0)return m(f,H.code,H.code==="session_not_found"?`Unknown session: ${Q}`:H.message);return m(f,"restore_failed",H instanceof Error?H.message:String(H))}}async function rV($,f){let J=q0(f);if(!J)return m(f,"invalid_session_attach","session.attach requires a session id");b5($,J,f.clientId?.trim()||"hub-client","participant");let Z=await p0($,J);if(Z)$.publish($.buildEvent("session.attached",{session:Z},J));return Z?u(f,{session:Z}):m(f,"session_not_found",`Unknown session: ${J}`)}async function iV($,f){let J=q0(f);if(!J)return m(f,"invalid_session_detach","session.detach requires a session id");let Z=f.clientId?.trim()||"hub-client",[Q]=await Promise.all([p0($,J)]),W=lM(Q?.metadata)??Z,j=$.sessionState.get(J);if(j){if(j.participants.delete(Z),j.createdByClientId===Z)j.createdByClientId=W;if(j.participants.size===0)$.sessionState.delete(J)}_1($,(Y)=>Y.sessionId===J&&Y.targetClientId===Z,`Capability owner client ${Z} detached before request was resolved.`);let[X,H]=await Promise.all([p0($,J),r0($,J)]);return $.publish($.buildEvent("session.detached",X?{session:X,...H?{snapshot:H}:{},clientId:Z}:{clientId:Z},J)),u(f)}async function nV($,f){let J=q0(f),Z=f.payload?.includeSnapshot===!0,[Q,W]=await Promise.all([p0($,J),Z?r0($,J):Promise.resolve(void 0)]);return Q?u(f,{session:Q,...W?{snapshot:W}:{}}):m(f,"session_not_found",`Unknown session: ${J}`)}async function aV($,f){let J=q0(f);if(!J)return m(f,"invalid_session_id","session.messages requires a session id");if(!await p0($,J))return m(f,"session_not_found",`Unknown session: ${J}`);let Q=await $.sessionHost.readSessionMessages(J);return u(f,{sessionId:J,messages:Q})}async function tV($,f){let J=typeof f.payload?.limit==="number"?f.payload.limit:200,Q=(await $.sessionHost.listSessions(J)).map((W)=>C5(W,$.sessionState.get(W.sessionId)));return u(f,{sessions:Q})}async function sV($,f){let J=q0(f),Z=E5(f.payload?.metadata),Q=await $.sessionHost.updateSession(J,{metadata:Z}),[W,j]=await Promise.all([p0($,J),r0($,J)]);if(W)$.publish($.buildEvent("session.updated",{session:W,...j?{snapshot:j}:{}},J));return{version:f.version,requestId:f.requestId,ok:Q.updated,payload:{updated:Q.updated,session:W,...j?{snapshot:j}:{}}}}async function oV($,f){let J=q0(f),Z=await $.sessionHost.deleteSession(J);return $.sessionState.delete(J),u(f,{deleted:Z})}async function eV($,f){let J=q0(f),Z=$.sessionHost.pendingPrompts;if(!Z)return m(f,"pending_prompts_unavailable","Pending prompt service is not available.");let Q=await Z.list({sessionId:J});return u(f,{sessionId:J,prompts:Q})}async function $B($,f){let J=q0(f),Z=typeof f.payload?.promptId==="string"?f.payload.promptId.trim():"",Q=typeof f.payload?.prompt==="string"?f.payload.prompt:void 0,W=f.payload?.delivery==="queue"||f.payload?.delivery==="steer"?f.payload.delivery:void 0,j=$.sessionHost.pendingPrompts;if(!j)return m(f,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await j.update({sessionId:J,promptId:Z,prompt:Q,delivery:W});return u(f,X)}async function fB($,f){let J=q0(f),Z=typeof f.payload?.promptId==="string"?f.payload.promptId.trim():"",Q=$.sessionHost.pendingPrompts;if(!Q)return m(f,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await Q.delete({sessionId:J,promptId:Z});return u(f,W)}function JB($){switch($){case"schedule.create":return"schedule.created";case"schedule.update":case"schedule.enable":case"schedule.disable":return"schedule.updated";case"schedule.delete":return"schedule.deleted";case"schedule.trigger":return"schedule.triggered";default:return}}var rM=new Set(["skills","workflows","rules","tools","mcp"]);function EW($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function $4($,f){let J=$[f];if(J===void 0)return;if(typeof J!=="string")throw Error(`settings payload '${f}' must be a string.`);return J}function iM($,f){let J=$[f];if(J===void 0)return;if(typeof J!=="boolean")throw Error(`settings payload '${f}' must be a boolean.`);return J}function ZB($){if($===void 0)return{};if(!EW($))throw Error("settings.list payload must be an object.");return{cwd:$4($,"cwd"),workspaceRoot:$4($,"workspaceRoot"),availabilityContext:EW($.availabilityContext)?$.availabilityContext:void 0}}function nM($){if(!EW($))throw Error("settings.toggle payload must be an object.");let{type:f}=$;if(typeof f!=="string"||!rM.has(f))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...ZB($),type:f,id:$4($,"id"),path:$4($,"path"),name:$4($,"name"),enabled:iM($,"enabled")}}class I2{options;clients=new Map;listeners=new Map;sessionState=new Map;pendingApprovals=new Map;pendingCapabilityRequests=new Map;suppressNextTerminalEventBySession=new Map;schedules;scheduleCommands;settings;cronService;sessionHost;hubId=pM("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new U$({sessionService:new F$(new G$),fetch:$.fetch,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(f)=>this.publish(f),buildEvent:Uf,requestCapability:(f,J,Z,Q,W)=>OV(this.ctx,f,J,Z,Q,W)},this.schedules=new h2({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(f,J)=>{let Z=f==="schedule.execution.completed"?"schedule.execution_completed":f==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!Z)return;this.publish(Uf(Z,J&&typeof J==="object"?J:void 0))}}),this.scheduleCommands=new S2(this.schedules),this.settings=$.settingsService??new B1,$.cronOptions)this.cronService=new hJ({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((f)=>{bV(this.ctx,f).catch((J)=>{NW("session event handling failed",J),k5(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:J,severity:"error",handled:!0,context:{eventType:f.type,sessionId:f.payload.sessionId}})})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}}async stop(){for(let $ of this.pendingApprovals.keys())OW(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(_1(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.sessionHost.dispose("hub_server_stop"),await this.schedules.dispose(),this.cronService)try{await this.cronService.dispose()}catch($){console.error("[hub] cron service stop failed",$)}}async handleCommand($){try{let f=await this.dispatchCommand($);return this.captureFailedReply($,f),f}catch(f){throw k5(this.options.telemetry,{component:"core",operation:"hub.command",error:f,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),f}}async dispatchCommand($){switch($.command){case"client.register":return yV(this.ctx,$);case"client.update":return qV(this.ctx,$);case"client.unregister":return wV(this.ctx,$,(f)=>{this.listeners.delete(f),this.detachClientFromSessions(f)});case"client.list":return SV(this.ctx,$);case"session.create":return await lV(this.ctx,$,(f)=>zW(this.ctx,f));case"session.restore":return await pV(this.ctx,$,(f)=>zW(this.ctx,f));case"session.attach":return await rV(this.ctx,$);case"session.detach":return await iV(this.ctx,$);case"session.get":return await nV(this.ctx,$);case"session.messages":return await aV(this.ctx,$);case"session.list":return await tV(this.ctx,$);case"session.update":return await sV(this.ctx,$);case"session.pending_prompts":return await eV(this.ctx,$);case"session.update_pending_prompt":return await $B(this.ctx,$);case"session.remove_pending_prompt":return await fB(this.ctx,$);case"session.delete":return await oV(this.ctx,$);case"session.hook":return await EV(this.ctx,$);case"run.start":case"session.send_input":return await hV(this.ctx,$);case"run.abort":return await CV(this.ctx,$);case"capability.request":return await NV(this.ctx,$);case"approval.respond":return await _V(this.ctx,$);case"capability.respond":return MV(this.ctx,$);case"capability.progress":return TV(this.ctx,$);case"ui.notify":return this.publish(Uf("ui.notify",$.payload??{})),u($);case"ui.show_window":return this.publish(Uf("ui.show_window",$.payload??{})),u($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let f=await this.scheduleCommands.handleCommand($);if(f.ok){let J=JB($.command);if(J)this.publish(Uf(J,f.payload))}return f}}}captureFailedReply($,f){if(f.ok||!f.error||!aM(f.error.code))return;k5(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(f.error.message),severity:f.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:f.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let f=await this.settings.list(ZB($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:f}}}catch(f){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:f instanceof Error?f.message:String(f)}}}}async handleSettingsToggle($){try{let f=await this.settings.toggle(nM($.payload));return this.publish(Uf("settings.changed",{types:f.changedTypes,snapshot:f.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:f.snapshot,changedTypes:f.changedTypes}}}catch(f){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:f instanceof Error?f.message:String(f)}}}}subscribe($,f,J){let Z=this.listeners.get($)??new Set,Q={sessionId:J?.sessionId,listener:f};return Z.add(Q),this.listeners.set($,Z),()=>{let W=this.listeners.get($);if(!W)return;if(W.delete(Q),W.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[f,J]of this.sessionState.entries())if(J.participants.delete($),J.participants.size===0)this.sessionState.delete(f);_1(this.ctx,(f)=>f.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let f of this.listeners.values())for(let J of f){if(J.sessionId&&J.sessionId!==$.sessionId)continue;try{J.listener($)}catch(Z){NW(`listener threw while publishing ${$.event}`,Z),k5(this.options.telemetry,{component:"core",operation:"hub.publish",error:Z,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function aM($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as eM}from"node:crypto";import $y from"node:http";import fy from"node:net";import{URL as jB}from"node:url";import{WebSocketServer as Jy}from"ws";import{captureSdkError as QB,HUB_COMMAND_SLOW_LOG_MS as tM,resolveHubCommandTimeoutMs as sM,safeJsonParse as oM}from"@cline/shared";function bW($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function WB($,f,J){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:f,message:J}}}class f4{transport;telemetry;constructor($,f){this.transport=$;this.telemetry=f}attach($){let f=new Map,J=new Set,Z=!1,Q=(H)=>{try{$.send(JSON.stringify(H))}catch(Y){console.error(`[hub] failed to send websocket frame: ${Y instanceof Error?Y.stack||Y.message:String(Y)}`)}},W=(H)=>{Q({kind:"event",envelope:H})},j=async(H)=>{try{let Y=JSON.parse(H.data);switch(Y.kind){case"command":{let A=performance.now(),V=!1,B=bW(Y);g("info","command.start",B);let K=setTimeout(()=>{if(V)return;g("warn","command.slow",{...B,elapsedMs:Math.round(performance.now()-A)})},tM),G=this.transport.command(Y.envelope);G.then((O)=>{if(!V)return;g(O.ok?"warn":"error","command.late_end",{...B,elapsedMs:Math.round(performance.now()-A),ok:O.ok,errorCode:O.error?.code,errorMessage:O.error?.message})},(O)=>{if(!V)return;g("error","command.late_error",{...B,elapsedMs:Math.round(performance.now()-A),error:O})});let R=!1,P,F,U=sM(Y.envelope.command,Y.envelope.timeoutMs);try{F=U===null?await G:await Promise.race([G,new Promise((O)=>{P=setTimeout(()=>{R=!0,QB(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${Y.envelope.command} did not complete within ${U}ms.`),severity:"error",handled:!0,context:{...B,timeoutMs:U}}),O(WB(Y,"hub_command_timeout",`Hub command ${Y.envelope.command} did not complete within ${U}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${Y.envelope.requestId}.`))},U)})])}catch(O){if(clearTimeout(K),P)clearTimeout(P);throw O}if(V=R,clearTimeout(K),P)clearTimeout(P);let z=Math.round(performance.now()-A);if(R)g("error","command.timeout",{...B,durationMs:z,timeoutMs:U});else g(F.ok?"info":"warn","command.end",{...B,durationMs:z,ok:F.ok,errorCode:F.error?.code,errorMessage:F.error?.message});if(Y.envelope.command==="client.register"&&F.ok){let D=(Y.envelope.payload??{}).clientId?.trim()||Y.envelope.clientId?.trim();if(D)J.add(D)}else if(Y.envelope.command==="client.unregister"&&F.ok){let O=Y.envelope.clientId?.trim();if(O)J.delete(O)}Q({kind:"reply",envelope:F});break}case"stream.subscribe":{let A=`${Y.clientId}:${Y.sessionId??"*"}`;if(f.has(A))break;let V=await this.transport.subscribe(Y.clientId,W,{sessionId:Y.sessionId});f.set(A,V);break}case"stream.unsubscribe":{let A=`${Y.clientId}:${Y.sessionId??"*"}`;f.get(A)?.(),f.delete(A);break}case"reply":case"event":break}}catch(Y){let A=typeof H.data==="string"?oM(H.data):void 0;if(!A||A.kind!=="command"){g("error","rejected malformed websocket frame",{error:Y});return}g("error","command.error",{...bW(A),error:Y}),QB(this.telemetry,{component:"core",operation:"hub.websocket_command",error:Y,severity:"error",handled:!0,context:bW(A)}),Q({kind:"reply",envelope:WB(A,"command_failed",Y instanceof Error?Y.message:"Unknown hub error")})}},X=()=>{if(Z)return;Z=!0;for(let H of f.values())H();f.clear();for(let H of J)this.transport.command({version:"v1",command:"client.unregister",clientId:H});J.clear(),$.removeEventListener("message",j),$.removeEventListener("close",X)};return $.addEventListener("message",j),$.addEventListener("close",X),X}}class J4{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,f,J){return this.transport.subscribe($,f,J)}}function Zy($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((f)=>Buffer.from(f))).toString();return String($)}function Qy($){return{send(f){$.send(f)},addEventListener(f,J){if(f==="message"){$.on("message",(Z)=>{J({data:Zy(Z)})});return}$.on("close",J)},removeEventListener(){}}}function Wy($){try{$.write(`HTTP/1.1 400 Bad Request\r
570
570
  Connection: close\r
571
571
  Content-Length: 0\r
572
572
  \r
573
- `),$.end()}catch{$.destroy()}}function xM($){try{$.write(`HTTP/1.1 401 Unauthorized\r
573
+ `),$.end()}catch{$.destroy()}}function jy($){try{$.write(`HTTP/1.1 401 Unauthorized\r
574
574
  Connection: close\r
575
575
  Content-Length: 0\r
576
576
  \r
577
- `),$.end()}catch{$.destroy()}}function dV($,J){if(!$||!J)return!1;let Z=Buffer.from($,"utf8"),Q=Buffer.from(J,"utf8");return Z.length===Q.length&&SM(Z,Q)}function lV($,J){let Z=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,Q=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",W=`Failed to start hub server on ${J.host}:${J.port}${J.pathname}: ${Q}`,f=Error(Z?`${W} (${Z})`:W);if(Z)$.code=Z,f.code=Z;if($ instanceof Error&&$.stack)f.stack=`${f.name}: ${f.message}
578
- Caused by: ${$.stack}`;return f}async function mM($){return await new Promise((J,Z)=>{let Q=EM.createServer();Q.once("error",Z),Q.listen(0,$,()=>{let W=Q.address();if(!W||typeof W==="string"){Q.close(()=>Z(Error("Failed to resolve free port")));return}let f=W.port;Q.close((j)=>{if(j){Z(j);return}J(f)})})})}function gM($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var T7=new Map,pV="cline-hub-auth.",vM=30000;function rV($){return Array.isArray($)?$.join(","):$??""}function uM($){let J=rV($).trim();return/^Bearer\s+(.+)$/i.exec(J)?.[1]?.trim()||null}function cM($){for(let J of rV($).split(",")){let Z=J.trim();if(Z.startsWith(pV))return Z.slice(pV.length).trim()||null}return null}async function V2($){let J=$.owner??E$(),Z=$.host??"127.0.0.1",Q=$.pathname??"/hub",W=$.port??Y8(),f=W===0?await mM(Z):W,j=f,X=o0(Z,f,Q),H=A1(),Y=ZZ(),A=new y8($);await A.start();let V=new p4(new r4(A),$.telemetry),B=new Set,K=new Date().toISOString(),G={protocolVersion:"v1",coreVersion:T4.version,buildId:H,pid:process.pid,startedAt:K},D=new Set,F,U,R=async()=>{if(U)return U;return U=(async()=>{if(F)clearInterval(F),F=void 0;for(let z of D)z.terminate?.();D.clear();for(let z of B)z();if(B.clear(),await new Promise((z,T)=>{_.close((y)=>{if(y){T(y);return}z()})}),await new Promise((z,T)=>{O.close((y)=>{if(y){T(y);return}z()})}),await A.stop(),(await K0(J.discoveryPath))?.url===X)await u0(J.discoveryPath)})(),U},O=CM.createServer((P,z)=>{if((P.url??"/")==="/health"){let y=JSON.stringify({hubId:A.getHubId(),...G,authToken:"",host:Z,port:j,url:X,updatedAt:new Date().toISOString()});z.statusCode=200,z.setHeader("content-type","application/json"),z.end(y);return}if((P.url??"/")==="/version"){z.statusCode=200,z.setHeader("content-type","application/json"),z.end(JSON.stringify(G));return}if(new cV(P.url??"/",`http://${Z}:${j}`).pathname==="/shutdown"&&P.method==="POST"){if(!dV(uM(P.headers.authorization),Y)){z.statusCode=401,z.end("Unauthorized");return}z.statusCode=202,z.setHeader("content-type","application/json"),z.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{R()});return}z.statusCode=404,z.end("Not found")}),_=new hM({noServer:!0});F=setInterval(()=>{for(let P of D){if(P.isAlive===!1){try{P.terminate?.()}catch{}D.delete(P);continue}P.isAlive=!1;try{P.ping?.()}catch{try{P.terminate?.()}catch{}D.delete(P)}}},vM),O.on("upgrade",(P,z,T)=>{if(new cV(P.url??"/",`http://${Z}:${j}`).pathname!==Q){z.destroy();return}if(!dV(cM(P.headers["sec-websocket-protocol"]),Y)){xM(z);return}try{_.handleUpgrade(P,z,T,($0)=>{let A0=$0;A0.isAlive=!0,A0.on("pong",()=>{A0.isAlive=!0}),D.add(A0);let o=V.attach(kM($0));B.add(o),$0.once("close",()=>{D.delete(A0),o(),B.delete(o)})})}catch{IM(z)}});try{await new Promise((P,z)=>{O.once("error",(T)=>{z(lV(T,{host:Z,port:f,pathname:Q}))}),O.listen(f,Z,()=>{let T=O.address();if(!T||typeof T==="string"){z(lV(Error("Failed to resolve hub port"),{host:Z,port:f,pathname:Q}));return}j=T.port,X=o0(Z,j,Q),P()})})}catch(P){if(F)clearInterval(F),F=void 0;throw await A.stop().catch(()=>{return}),P}return await QZ(J.discoveryPath,{hubId:A.getHubId(),protocolVersion:"v1",coreVersion:T4.version,buildId:H,authToken:Y,host:Z,port:j,url:X,pid:process.pid,startedAt:K,updatedAt:K}),{host:Z,port:j,url:X,authToken:Y,close:R}}async function MZ($){let J=$.owner??E$(),Z=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=$.host??"127.0.0.1",W=$.port??Y8(),f=$.pathname??"/hub",j=o0(Q,W,f),X=J.discoveryPath,H=(A)=>{if(!Z)V1(A.url,A.authToken);return A},Y=T7.get(X);if(Y){let A=await Y;if(A.url===j)return H({server:A,url:A.url,authToken:A.authToken,action:"reuse"})}return await WZ(J.discoveryPath,async()=>{let A=await K0(J.discoveryPath);if(A?.url&&(A.url===j||$.allowPortFallback===!0)){let G=await X$(A.url);if(G?.url&&await H$(G.url,{authToken:A.authToken}))return H({url:G.url,authToken:A.authToken,action:"reuse"})}if((await X$(j))?.url||A?.url)await u0(J.discoveryPath);let K=async(G)=>{let D=V2({...G,owner:J});T7.set(X,D);try{let F=await D;return H({server:F,url:F.url,authToken:F.authToken,action:"started"})}catch(F){throw T7.delete(X),F}};try{return await K($)}catch(G){if(!$.allowPortFallback||!gM(G))throw G;return await K({...$,port:0})}})}async function iV($){let J=c0({host:$.host,port:$.port,pathname:$.pathname});return await V2({...$,...J,owner:Y0()})}async function nV($){let J=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=c0({host:$.host,port:$.port,pathname:$.pathname});return await MZ({...$,...Z,allowPortFallback:$.allowPortFallback??!J,owner:Y0()})}N7();var sV={};w(sV,{registerRemoteConfigSessionBlobUpload:()=>SZ,readRemoteConfigSessionBlobUploadMetadata:()=>M7,prepareRemoteConfigCoreIntegration:()=>y7,createRemoteConfigSessionMessagesArtifactUploader:()=>q7,buildRemoteConfigSessionBlobUploadMetadata:()=>yZ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>wZ});import{buildRemoteConfigSessionBlobUploadMetadata as yZ,clearRemoteConfigSessionBlobUpload as dM,createClineTelemetryServiceConfig as lM,createSessionId as pM,createRemoteConfigSessionMessagesArtifactUploader as rM,prepareRemoteConfigRuntime as iM,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as wZ,readRemoteConfigSessionBlobUploadMetadata as M7,registerRemoteConfigSessionBlobUpload as SZ}from"@cline/shared";function nM($,J){let Z=$.telemetry||J.telemetryService?{...J.telemetryService??{},...$.telemetry??{}}:void 0;if(!Z)return;return x$(lM(Z)).telemetry}function q7(){let $=rM();return{async uploadMessagesFile(J){await $.uploadMessagesFile(J)}}}async function y7($){let J=await iM($),Z=nM(J,$),Q=[J.pluginDefinition],W=J.claims?.subject,f=yZ(J.bundle?.remoteConfig,W),j;return{prepared:J,extensions:Q,telemetry:Z,applyToStartSessionInput(X){let H=X.config.extensions??[],Y=X.config.telemetry,A=f?X.config.sessionId?.trim()||pM():X.config.sessionId;if(A&&f)j=A;let V=A&&f?SZ(A,J.bundle?.remoteConfig,W):void 0,B=V?{...X.sessionMetadata??{},[wZ]:V}:X.sessionMetadata;return{...X,...B?{sessionMetadata:B}:{},config:{...X.config,...A?{sessionId:A}:{},extensions:[...H,...Q],telemetry:Z??Y}}},async dispose(){if(j)dM(j)}}}var fB={};w(fB,{createTeamName:()=>EZ,DefaultRuntimeBuilder:()=>C8});import{hasRuntimeConfigExtension as Hq}from"@cline/shared";import{nanoid as Yq}from"nanoid";y$();var QB={};w(QB,{createLocalTeamStore:()=>E7,SqliteTeamStore:()=>B2,FileTeamStore:()=>i4});import{appendFileSync as aM,existsSync as w8,mkdirSync as oV,readdirSync as tM,readFileSync as eV,renameSync as sM,writeFileSync as oM}from"node:fs";import{join as w7}from"node:path";import{resolveTeamDataDir as eM}from"@cline/shared/storage";function $B(){return new Date().toISOString()}function S7($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function JB($){return{...$,tasks:$.tasks.map((J)=>({...J,createdAt:new Date(J.createdAt),updatedAt:new Date(J.updatedAt)})),mailbox:$.mailbox.map((J)=>({...J,sentAt:new Date(J.sentAt),readAt:J.readAt?new Date(J.readAt):void 0})),missionLog:$.missionLog.map((J)=>({...J,ts:new Date(J.ts)})),runs:($.runs??[]).map((J)=>({...J,startedAt:new Date(J.startedAt),endedAt:J.endedAt?new Date(J.endedAt):void 0,nextAttemptAt:J.nextAttemptAt?new Date(J.nextAttemptAt):void 0,heartbeatAt:J.heartbeatAt?new Date(J.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),finalizedAt:J.finalizedAt?new Date(J.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),reviewedAt:J.reviewedAt?new Date(J.reviewedAt):void 0}))}}class i4{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??eM()}init(){this.ensureTeamDir()}listTeamNames(){if(!w8(this.teamDirPath))return[];return tM(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>w8(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let J=this.readEnvelope($);return J?.teamState?JB(J.teamState):void 0}readHistory($,J=200){let Z=this.historyPath($);if(!w8(Z))return[];return eV(Z,"utf8").split(`
579
- `).map((Q)=>Q.trim()).filter(Boolean).map((Q)=>{try{return JSON.parse(Q)}catch{return}}).filter((Q)=>Q!==void 0).reverse().slice(0,J)}loadRuntime($){let J=this.readEnvelope($);return{state:J?.teamState?JB(J.teamState):void 0,teammates:J?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,J){this.ensureTeamSubdir($),aM(this.historyPath($),`${JSON.stringify({ts:$B(),eventType:J.type,payload:J})}
580
- `,"utf8")}persistRuntime($,J,Z){this.ensureTeamSubdir($);let Q={version:1,updatedAt:$B(),teamState:J,teammates:Z},W=this.statePath($),f=`${W}.tmp`;oM(f,`${JSON.stringify(Q,null,2)}
581
- `,"utf8"),sM(f,W)}markInProgressRunsInterrupted($,J){let Z=this.readEnvelope($);if(!Z?.teamState?.runs?.length)return[];let Q=Z.teamState.runs.filter((f)=>f.status==="queued"||f.status==="running").map((f)=>f.id);if(Q.length===0)return[];let W=new Date;return Z.teamState={...Z.teamState,runs:Z.teamState.runs.map((f)=>f.status==="queued"||f.status==="running"?{...f,status:"interrupted",error:J,endedAt:W}:f)},this.persistRuntime($,Z.teamState,Z.teammates),Q}ensureTeamDir(){if(!w8(this.teamDirPath))oV(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let J=w7(this.ensureTeamDir(),S7($));if(!w8(J))oV(J,{recursive:!0});return J}statePath($){return w7(this.ensureTeamDir(),S7($),"state.json")}historyPath($){return w7(this.ensureTeamDir(),S7($),"task-history.jsonl")}readEnvelope($){let J=this.statePath($);if(!w8(J))return;try{let Z=JSON.parse(eV(J,"utf8"));if(Z?.version===1&&Z.teamState)return Z}catch{}return}}import{existsSync as $q,mkdirSync as Jq}from"node:fs";import{join as Zq}from"node:path";import{safeJsonParse as ZB}from"@cline/shared";import{loadSqliteDb as Qq,nowIso as C7}from"@cline/shared/db";import{resolveDbDataDir as Wq}from"@cline/shared/storage";function fq(){return Wq()}function S8($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function jq($){let J=ZB($);if(!Array.isArray(J))return[];let Z=[];for(let Q of J){if(!Q||typeof Q!=="object")continue;let W=Q,f=W.agentId,j=W.rolePrompt;if(typeof f!=="string"||!f.trim())continue;if(typeof j!=="string"||!j.trim())continue;let X={agentId:f.trim(),rolePrompt:j};if(typeof W.modelId==="string"&&W.modelId.trim())X.modelId=W.modelId.trim();if(typeof W.maxIterations==="number"&&Number.isFinite(W.maxIterations))X.maxIterations=Math.max(1,Math.floor(W.maxIterations));Z.push(X)}return Z}function Xq($){return{...$,tasks:$.tasks.map((J)=>({...J,createdAt:new Date(J.createdAt),updatedAt:new Date(J.updatedAt)})),mailbox:$.mailbox.map((J)=>({...J,sentAt:new Date(J.sentAt),readAt:J.readAt?new Date(J.readAt):void 0})),missionLog:$.missionLog.map((J)=>({...J,ts:new Date(J.ts)})),runs:($.runs??[]).map((J)=>({...J,startedAt:new Date(J.startedAt),endedAt:J.endedAt?new Date(J.endedAt):void 0,nextAttemptAt:J.nextAttemptAt?new Date(J.nextAttemptAt):void 0,heartbeatAt:J.heartbeatAt?new Date(J.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),finalizedAt:J.finalizedAt?new Date(J.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),reviewedAt:J.reviewedAt?new Date(J.reviewedAt):void 0}))}}class B2{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??fq()}init(){this.getRawDb()}ensureTeamDir(){if(!$q(this.teamDirPath))Jq(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return Zq(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=Qq(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
577
+ `),$.end()}catch{$.destroy()}}function XB($,f){if(!$||!f)return!1;let J=Buffer.from($,"utf8"),Z=Buffer.from(f,"utf8");return J.length===Z.length&&eM(J,Z)}function HB($,f){let J=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,Z=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",Q=`Failed to start hub server on ${f.host}:${f.port}${f.pathname}: ${Z}`,W=Error(J?`${Q} (${J})`:Q);if(J)$.code=J,W.code=J;if($ instanceof Error&&$.stack)W.stack=`${W.name}: ${W.message}
578
+ Caused by: ${$.stack}`;return W}async function Xy($){return await new Promise((f,J)=>{let Z=fy.createServer();Z.once("error",J),Z.listen(0,$,()=>{let Q=Z.address();if(!Q||typeof Q==="string"){Z.close(()=>J(Error("Failed to resolve free port")));return}let W=Q.port;Z.close((j)=>{if(j){J(j);return}f(W)})})})}function Hy($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var kW=new Map,YB="cline-hub-auth.",Yy=30000;function AB($){return Array.isArray($)?$.join(","):$??""}function Ay($){let f=AB($).trim();return/^Bearer\s+(.+)$/i.exec(f)?.[1]?.trim()||null}function Vy($){for(let f of AB($).split(",")){let J=f.trim();if(J.startsWith(YB))return J.slice(YB.length).trim()||null}return null}async function Df($){let f=$.owner??I$(),J=$.host??"127.0.0.1",Z=$.pathname??"/hub",Q=$.port??U2(),W=Q===0?await Xy(J):Q,j=W,X=$$(J,W,Z),H=F1(),Y=B5(),A=new I2($);await A.start();let V=new f4(new J4(A),$.telemetry),B=new Set,K=new Date().toISOString(),G={protocolVersion:"v1",coreVersion:bJ.version,buildId:H,pid:process.pid,startedAt:K},R=new Set,P,F,U=async()=>{if(F)return F;return F=(async()=>{if(P)clearInterval(P),P=void 0;for(let _ of R)_.terminate?.();R.clear();for(let _ of B)_();if(B.clear(),await new Promise((_,N)=>{O.close((q)=>{if(q){N(q);return}_()})}),await new Promise((_,N)=>{z.close((q)=>{if(q){N(q);return}_()})}),await A.stop(),(await K0(f.discoveryPath))?.url===X)await c0(f.discoveryPath)})(),F},z=$y.createServer((D,_)=>{if((D.url??"/")==="/health"){let q=JSON.stringify({hubId:A.getHubId(),...G,authToken:"",host:J,port:j,url:X,updatedAt:new Date().toISOString()});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(q);return}if((D.url??"/")==="/version"){_.statusCode=200,_.setHeader("content-type","application/json"),_.end(JSON.stringify(G));return}if(new jB(D.url??"/",`http://${J}:${j}`).pathname==="/shutdown"&&D.method==="POST"){if(!XB(Ay(D.headers.authorization),Y)){_.statusCode=401,_.end("Unauthorized");return}_.statusCode=202,_.setHeader("content-type","application/json"),_.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{U()});return}_.statusCode=404,_.end("Not found")}),O=new Jy({noServer:!0});P=setInterval(()=>{for(let D of R){if(D.isAlive===!1){try{D.terminate?.()}catch{}R.delete(D);continue}D.isAlive=!1;try{D.ping?.()}catch{try{D.terminate?.()}catch{}R.delete(D)}}},Yy),z.on("upgrade",(D,_,N)=>{if(new jB(D.url??"/",`http://${J}:${j}`).pathname!==Z){_.destroy();return}if(!XB(Vy(D.headers["sec-websocket-protocol"]),Y)){jy(_);return}try{O.handleUpgrade(D,_,N,($0)=>{let A0=$0;A0.isAlive=!0,A0.on("pong",()=>{A0.isAlive=!0}),R.add(A0);let o=V.attach(Qy($0));B.add(o),$0.once("close",()=>{R.delete(A0),o(),B.delete(o)})})}catch{Wy(_)}});try{await new Promise((D,_)=>{z.once("error",(N)=>{_(HB(N,{host:J,port:W,pathname:Z}))}),z.listen(W,J,()=>{let N=z.address();if(!N||typeof N==="string"){_(HB(Error("Failed to resolve hub port"),{host:J,port:W,pathname:Z}));return}j=N.port,X=$$(J,j,Z),D()})})}catch(D){if(P)clearInterval(P),P=void 0;throw await A.stop().catch(()=>{return}),D}return await K5(f.discoveryPath,{hubId:A.getHubId(),protocolVersion:"v1",coreVersion:bJ.version,buildId:H,authToken:Y,host:J,port:j,url:X,pid:process.pid,startedAt:K,updatedAt:K}),{host:J,port:j,url:X,authToken:Y,close:U}}async function I5($){let f=$.owner??I$(),J=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=$.host??"127.0.0.1",Q=$.port??U2(),W=$.pathname??"/hub",j=$$(Z,Q,W),X=f.discoveryPath,H=(A)=>{if(!J)U1(A.url,A.authToken);return A},Y=kW.get(X);if(Y){let A=await Y;if(A.url===j)return H({server:A,url:A.url,authToken:A.authToken,action:"reuse"})}return await G5(f.discoveryPath,async()=>{let A=await K0(f.discoveryPath);if(A?.url&&(A.url===j||$.allowPortFallback===!0)){let G=await A$(A.url);if(G?.url&&await V$(G.url,{authToken:A.authToken}))return H({url:G.url,authToken:A.authToken,action:"reuse"})}if((await A$(j))?.url||A?.url)await c0(f.discoveryPath);let K=async(G)=>{let R=Df({...G,owner:f});kW.set(X,R);try{let P=await R;return H({server:P,url:P.url,authToken:P.authToken,action:"started"})}catch(P){throw kW.delete(X),P}};try{return await K($)}catch(G){if(!$.allowPortFallback||!Hy(G))throw G;return await K({...$,port:0})}})}async function VB($){let f=d0({host:$.host,port:$.port,pathname:$.pathname});return await Df({...$,...f,owner:Y0()})}async function BB($){let f=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=d0({host:$.host,port:$.port,pathname:$.pathname});return await I5({...$,...J,allowPortFallback:$.allowPortFallback??!f,owner:Y0()})}IW();var PB={};w(PB,{registerRemoteConfigSessionBlobUpload:()=>v5,readRemoteConfigSessionBlobUploadMetadata:()=>xW,prepareRemoteConfigCoreIntegration:()=>gW,createRemoteConfigSessionMessagesArtifactUploader:()=>mW,buildRemoteConfigSessionBlobUploadMetadata:()=>m5,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>g5});import{buildRemoteConfigSessionBlobUploadMetadata as m5,clearRemoteConfigSessionBlobUpload as By,createClineTelemetryServiceConfig as Ky,createSessionId as Gy,createRemoteConfigSessionMessagesArtifactUploader as Py,prepareRemoteConfigRuntime as Fy,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as g5,readRemoteConfigSessionBlobUploadMetadata as xW,registerRemoteConfigSessionBlobUpload as v5}from"@cline/shared";function Uy($,f){let J=$.telemetry||f.telemetryService?{...f.telemetryService??{},...$.telemetry??{}}:void 0;if(!J)return;return u$(Ky(J)).telemetry}function mW(){let $=Py();return{async uploadMessagesFile(f){await $.uploadMessagesFile(f)}}}async function gW($){let f=await Fy($),J=Uy(f,$),Z=[f.pluginDefinition],Q=f.claims?.subject,W=m5(f.bundle?.remoteConfig,Q),j;return{prepared:f,extensions:Z,telemetry:J,applyToStartSessionInput(X){let H=X.config.extensions??[],Y=X.config.telemetry,A=W?X.config.sessionId?.trim()||Gy():X.config.sessionId;if(A&&W)j=A;let V=A&&W?v5(A,f.bundle?.remoteConfig,Q):void 0,B=V?{...X.sessionMetadata??{},[g5]:V}:X.sessionMetadata;return{...X,...B?{sessionMetadata:B}:{},config:{...X.config,...A?{sessionId:A}:{},extensions:[...H,...Z],telemetry:J??Y}}},async dispose(){if(j)By(j)}}}var OB={};w(OB,{createTeamName:()=>c5,DefaultRuntimeBuilder:()=>g2});import{hasRuntimeConfigExtension as hy}from"@cline/shared";import{nanoid as Cy}from"nanoid";X$();var _B={};w(_B,{createLocalTeamStore:()=>dW,SqliteTeamStore:()=>Lf,FileTeamStore:()=>Z4});import{appendFileSync as Ry,existsSync as x2,mkdirSync as FB,readdirSync as Dy,readFileSync as UB,renameSync as Ly,writeFileSync as _y}from"node:fs";import{join as vW}from"node:path";import{resolveTeamDataDir as zy}from"@cline/shared/storage";function RB(){return new Date().toISOString()}function uW($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function DB($){return{...$,tasks:$.tasks.map((f)=>({...f,createdAt:new Date(f.createdAt),updatedAt:new Date(f.updatedAt)})),mailbox:$.mailbox.map((f)=>({...f,sentAt:new Date(f.sentAt),readAt:f.readAt?new Date(f.readAt):void 0})),missionLog:$.missionLog.map((f)=>({...f,ts:new Date(f.ts)})),runs:($.runs??[]).map((f)=>({...f,startedAt:new Date(f.startedAt),endedAt:f.endedAt?new Date(f.endedAt):void 0,nextAttemptAt:f.nextAttemptAt?new Date(f.nextAttemptAt):void 0,heartbeatAt:f.heartbeatAt?new Date(f.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),finalizedAt:f.finalizedAt?new Date(f.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),reviewedAt:f.reviewedAt?new Date(f.reviewedAt):void 0}))}}class Z4{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??zy()}init(){this.ensureTeamDir()}listTeamNames(){if(!x2(this.teamDirPath))return[];return Dy(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>x2(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let f=this.readEnvelope($);return f?.teamState?DB(f.teamState):void 0}readHistory($,f=200){let J=this.historyPath($);if(!x2(J))return[];return UB(J,"utf8").split(`
579
+ `).map((Z)=>Z.trim()).filter(Boolean).map((Z)=>{try{return JSON.parse(Z)}catch{return}}).filter((Z)=>Z!==void 0).reverse().slice(0,f)}loadRuntime($){let f=this.readEnvelope($);return{state:f?.teamState?DB(f.teamState):void 0,teammates:f?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,f){this.ensureTeamSubdir($),Ry(this.historyPath($),`${JSON.stringify({ts:RB(),eventType:f.type,payload:f})}
580
+ `,"utf8")}persistRuntime($,f,J){this.ensureTeamSubdir($);let Z={version:1,updatedAt:RB(),teamState:f,teammates:J},Q=this.statePath($),W=`${Q}.tmp`;_y(W,`${JSON.stringify(Z,null,2)}
581
+ `,"utf8"),Ly(W,Q)}markInProgressRunsInterrupted($,f){let J=this.readEnvelope($);if(!J?.teamState?.runs?.length)return[];let Z=J.teamState.runs.filter((W)=>W.status==="queued"||W.status==="running").map((W)=>W.id);if(Z.length===0)return[];let Q=new Date;return J.teamState={...J.teamState,runs:J.teamState.runs.map((W)=>W.status==="queued"||W.status==="running"?{...W,status:"interrupted",error:f,endedAt:Q}:W)},this.persistRuntime($,J.teamState,J.teammates),Z}ensureTeamDir(){if(!x2(this.teamDirPath))FB(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let f=vW(this.ensureTeamDir(),uW($));if(!x2(f))FB(f,{recursive:!0});return f}statePath($){return vW(this.ensureTeamDir(),uW($),"state.json")}historyPath($){return vW(this.ensureTeamDir(),uW($),"task-history.jsonl")}readEnvelope($){let f=this.statePath($);if(!x2(f))return;try{let J=JSON.parse(UB(f,"utf8"));if(J?.version===1&&J.teamState)return J}catch{}return}}import{existsSync as Oy,mkdirSync as Ty}from"node:fs";import{join as Ny}from"node:path";import{safeJsonParse as LB}from"@cline/shared";import{loadSqliteDb as My,nowIso as cW}from"@cline/shared/db";import{resolveDbDataDir as yy}from"@cline/shared/storage";function qy(){return yy()}function m2($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function wy($){let f=LB($);if(!Array.isArray(f))return[];let J=[];for(let Z of f){if(!Z||typeof Z!=="object")continue;let Q=Z,W=Q.agentId,j=Q.rolePrompt;if(typeof W!=="string"||!W.trim())continue;if(typeof j!=="string"||!j.trim())continue;let X={agentId:W.trim(),rolePrompt:j};if(typeof Q.modelId==="string"&&Q.modelId.trim())X.modelId=Q.modelId.trim();if(typeof Q.maxIterations==="number"&&Number.isFinite(Q.maxIterations))X.maxIterations=Math.max(1,Math.floor(Q.maxIterations));J.push(X)}return J}function Sy($){return{...$,tasks:$.tasks.map((f)=>({...f,createdAt:new Date(f.createdAt),updatedAt:new Date(f.updatedAt)})),mailbox:$.mailbox.map((f)=>({...f,sentAt:new Date(f.sentAt),readAt:f.readAt?new Date(f.readAt):void 0})),missionLog:$.missionLog.map((f)=>({...f,ts:new Date(f.ts)})),runs:($.runs??[]).map((f)=>({...f,startedAt:new Date(f.startedAt),endedAt:f.endedAt?new Date(f.endedAt):void 0,nextAttemptAt:f.nextAttemptAt?new Date(f.nextAttemptAt):void 0,heartbeatAt:f.heartbeatAt?new Date(f.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),finalizedAt:f.finalizedAt?new Date(f.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),reviewedAt:f.reviewedAt?new Date(f.reviewedAt):void 0}))}}class Lf{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??qy()}init(){this.getRawDb()}ensureTeamDir(){if(!Oy(this.teamDirPath))Ty(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return Ny(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=My(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
582
582
  CREATE TABLE IF NOT EXISTS team_store_schema_version (
583
583
  lock INTEGER PRIMARY KEY CHECK (lock = 1),
584
584
  version INTEGER NOT NULL
@@ -662,13 +662,13 @@ Caused by: ${$.stack}`;return f}async function mM($){return await new Promise((J
662
662
  version INTEGER NOT NULL DEFAULT 1,
663
663
  PRIMARY KEY(team_name, fragment_id)
664
664
  );
665
- `)}run($,J=[]){return this.getRawDb().prepare($).run(...J)}queryOne($,J=[]){return this.getRawDb().prepare($).get(...J)??void 0}queryAll($,J=[]){return this.getRawDb().prepare($).all(...J)}withTransaction($){let J=this.getRawDb();J.exec("BEGIN IMMEDIATE;");try{$(),J.exec("COMMIT;")}catch(Z){try{J.exec("ROLLBACK;")}catch{}throw Z}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let J=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[S8($)]);if(!J)return;let Z=ZB(J.state_json);if(!Z)return;try{return Xq(Z)}catch{return}}readHistory($,J=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[S8($),J]).flatMap((Z)=>{try{return[{eventType:Z.event_type,payload:JSON.parse(Z.payload_json),ts:Z.ts}]}catch{return[]}})}loadRuntime($){let J=S8($),Z=this.readState(J),Q=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[J]),W=Q?jq(Q.teammates_json):[];return{state:Z,teammates:W,interruptedRunIds:[]}}appendTeamEvent($,J,Z,Q){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
666
- VALUES (?, ?, ?, ?, NULL, ?)`,[S8($),C7(),J,JSON.stringify(Z),Q??null])}persistRuntime($,J,Z){let Q=S8($),W=C7();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
665
+ `)}run($,f=[]){return this.getRawDb().prepare($).run(...f)}queryOne($,f=[]){return this.getRawDb().prepare($).get(...f)??void 0}queryAll($,f=[]){return this.getRawDb().prepare($).all(...f)}withTransaction($){let f=this.getRawDb();f.exec("BEGIN IMMEDIATE;");try{$(),f.exec("COMMIT;")}catch(J){try{f.exec("ROLLBACK;")}catch{}throw J}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let f=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[m2($)]);if(!f)return;let J=LB(f.state_json);if(!J)return;try{return Sy(J)}catch{return}}readHistory($,f=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[m2($),f]).flatMap((J)=>{try{return[{eventType:J.event_type,payload:JSON.parse(J.payload_json),ts:J.ts}]}catch{return[]}})}loadRuntime($){let f=m2($),J=this.readState(f),Z=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[f]),Q=Z?wy(Z.teammates_json):[];return{state:J,teammates:Q,interruptedRunIds:[]}}appendTeamEvent($,f,J,Z){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
666
+ VALUES (?, ?, ?, ?, NULL, ?)`,[m2($),cW(),f,JSON.stringify(J),Z??null])}persistRuntime($,f,J){let Z=m2($),Q=cW();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
667
667
  VALUES (?, ?, ?, ?)
668
668
  ON CONFLICT(team_name) DO UPDATE SET
669
669
  state_json = excluded.state_json,
670
670
  teammates_json = excluded.teammates_json,
671
- updated_at = excluded.updated_at`,[Q,JSON.stringify(J),JSON.stringify(Z),W]);for(let f of J.tasks)this.run(`INSERT INTO team_tasks (team_name, task_id, title, description, status, assignee, depends_on_json, summary, version, updated_at)
671
+ updated_at = excluded.updated_at`,[Z,JSON.stringify(f),JSON.stringify(J),Q]);for(let W of f.tasks)this.run(`INSERT INTO team_tasks (team_name, task_id, title, description, status, assignee, depends_on_json, summary, version, updated_at)
672
672
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, ?)
673
673
  ON CONFLICT(team_name, task_id) DO UPDATE SET
674
674
  title = excluded.title,
@@ -678,7 +678,7 @@ Caused by: ${$.stack}`;return f}async function mM($){return await new Promise((J
678
678
  depends_on_json = excluded.depends_on_json,
679
679
  summary = excluded.summary,
680
680
  version = team_tasks.version + 1,
681
- updated_at = excluded.updated_at`,[Q,f.id,f.title,f.description,f.status,f.assignee??null,JSON.stringify(f.dependsOn??[]),f.summary??null,f.updatedAt.toISOString()]);for(let f of J.runs??[])this.run(`INSERT INTO team_runs (team_name, run_id, agent_id, task_id, status, message, started_at, ended_at, error, lease_owner, heartbeat_at, version)
681
+ updated_at = excluded.updated_at`,[Z,W.id,W.title,W.description,W.status,W.assignee??null,JSON.stringify(W.dependsOn??[]),W.summary??null,W.updatedAt.toISOString()]);for(let W of f.runs??[])this.run(`INSERT INTO team_runs (team_name, run_id, agent_id, task_id, status, message, started_at, ended_at, error, lease_owner, heartbeat_at, version)
682
682
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1)
683
683
  ON CONFLICT(team_name, run_id) DO UPDATE SET
684
684
  agent_id = excluded.agent_id,
@@ -690,14 +690,14 @@ Caused by: ${$.stack}`;return f}async function mM($){return await new Promise((J
690
690
  error = excluded.error,
691
691
  lease_owner = excluded.lease_owner,
692
692
  heartbeat_at = excluded.heartbeat_at,
693
- version = team_runs.version + 1`,[Q,f.id,f.agentId,f.taskId??null,f.status,f.message,f.startedAt?f.startedAt.toISOString():null,f.endedAt?f.endedAt.toISOString():null,f.error??null,f.leaseOwner??null,f.heartbeatAt?f.heartbeatAt.toISOString():null]);for(let f of J.outcomes??[])this.run(`INSERT INTO team_outcomes (team_name, outcome_id, title, status, schema_json, finalized_at, version)
693
+ version = team_runs.version + 1`,[Z,W.id,W.agentId,W.taskId??null,W.status,W.message,W.startedAt?W.startedAt.toISOString():null,W.endedAt?W.endedAt.toISOString():null,W.error??null,W.leaseOwner??null,W.heartbeatAt?W.heartbeatAt.toISOString():null]);for(let W of f.outcomes??[])this.run(`INSERT INTO team_outcomes (team_name, outcome_id, title, status, schema_json, finalized_at, version)
694
694
  VALUES (?, ?, ?, ?, ?, ?, 1)
695
695
  ON CONFLICT(team_name, outcome_id) DO UPDATE SET
696
696
  title = excluded.title,
697
697
  status = excluded.status,
698
698
  schema_json = excluded.schema_json,
699
699
  finalized_at = excluded.finalized_at,
700
- version = team_outcomes.version + 1`,[Q,f.id,f.title,f.status,JSON.stringify({requiredSections:f.requiredSections}),f.finalizedAt?f.finalizedAt.toISOString():null]);for(let f of J.outcomeFragments??[])this.run(`INSERT INTO team_outcome_fragments (team_name, outcome_id, fragment_id, section, source_agent_id, source_run_id, content, status, reviewed_by, reviewed_at, version)
700
+ version = team_outcomes.version + 1`,[Z,W.id,W.title,W.status,JSON.stringify({requiredSections:W.requiredSections}),W.finalizedAt?W.finalizedAt.toISOString():null]);for(let W of f.outcomeFragments??[])this.run(`INSERT INTO team_outcome_fragments (team_name, outcome_id, fragment_id, section, source_agent_id, source_run_id, content, status, reviewed_by, reviewed_at, version)
701
701
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1)
702
702
  ON CONFLICT(team_name, fragment_id) DO UPDATE SET
703
703
  outcome_id = excluded.outcome_id,
@@ -708,15 +708,16 @@ Caused by: ${$.stack}`;return f}async function mM($){return await new Promise((J
708
708
  status = excluded.status,
709
709
  reviewed_by = excluded.reviewed_by,
710
710
  reviewed_at = excluded.reviewed_at,
711
- version = team_outcome_fragments.version + 1`,[Q,f.outcomeId,f.id,f.section,f.sourceAgentId,f.sourceRunId??null,f.content,f.status,f.reviewedBy??null,f.reviewedAt?f.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,J){let Z=S8($),Q=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[Z]);if(Q.length===0)return[];let W=C7();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
712
- WHERE team_name = ? AND status IN ('queued', 'running')`,[J,W,Z]),Q.map((f)=>f.run_id)}handleTeamEvent($,J){this.appendTeamEvent($,J.type,J)}}function E7($={}){try{let J=new B2($);return J.init(),J}catch{let J=new i4({teamDir:$.teamDir});return J.init(),J}}function CZ($,J){return Hq($,J)}function Aq($,J){let Z=J?.["*"]??{},Q=J?.[$]??{};return{...Z,...Q}.enabled!==!1}function Vq($,J){return $.filter((Z)=>Aq(Z.name,J))}function WB($,J){return k1(Vq($,J))}function EZ(){return`team-${Yq(5)}`}function h7($,J,Z,Q,W,f,j,X){let H=k0[N$({mode:Z})],Y=_2(J,Q,Z,W??O2);return WB(S1({cwd:$,...H,enableSkills:!!j,...Y,executors:{...j?{skills:j}:{},...X??{}}}),f)}function Bq($){return h7($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,Kq,$.toolExecutors).some((J)=>J.name==="skills")}var Kq=async()=>"";async function Gq($){let J=O0();if(!C$({filePath:J}))return{tools:[]};let Z=new s1({clientFactory:j8({settingsPath:J})}),Q;try{Q=await t1(Z,{filePath:J})}catch(X){await Z.dispose().catch(()=>{});let H=X instanceof Error?X.message:String(X);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${H}`),{tools:[]}}let W=Q.filter((X)=>X.disabled!==!0),f=await Promise.allSettled(W.map((X)=>X8({serverName:X.name,provider:Z}))),j=[];for(let[X,H]of f.entries())if(H.status==="fulfilled")j.push(...H.value);else{let Y=H.reason instanceof Error?H.reason.message:String(H.reason);$?.log(`[mcp] Failed to load tools from MCP server "${W[X].name}", skipping: ${Y}`)}return{tools:j,shutdown:async()=>{await Z.dispose()}}}function Fq($,J){if(!$)return;for(let Z of $.getTeammateIds())try{$.shutdownTeammate(Z,J)}catch{}}function Uq($){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 Rq($){let J=k0[N$({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??J.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??J.enableAgentTeams??!0,disableMcpSettingsTools:$.disableMcpSettingsTools===!0,yolo:$.yolo===!0,missionLogIntervalSteps:typeof $.missionLogIntervalSteps==="number"&&Number.isFinite($.missionLogIntervalSteps)?$.missionLogIntervalSteps:3,missionLogIntervalMs:typeof $.missionLogIntervalMs==="number"&&Number.isFinite($.missionLogIntervalMs)?$.missionLogIntervalMs:120000}}class C8{teamRuntimeEntries=new Map;async build($){let{config:J,hooks:Z,extensions:Q,logger:W,telemetry:f,createSpawnTool:j,onTeamRestored:X,userInstructionService:H,configExtensions:Y,toolExecutors:A}=$,V=$.onTeamEvent??(()=>{}),B=Rq(J),K=W$(),G=[],D=J.teamName?.trim()||EZ(),F=J.sessionId?.trim()||D,U=CZ(Y,"rules"),R=CZ(Y,"skills"),O=CZ(Y,"workflows"),_=CZ(Y,"plugins"),P=U||R||O,z=!1,T=Boolean(H),y=H,$0;if(!y&&P)y=f1({skills:R?{workspacePath:J.cwd,includePluginSkills:_,pluginSkillDirectories:_?$.pluginSkillDirectories:void 0,pluginPaths:J.pluginPaths,cwd:J.cwd}:{workspacePath:J.cwd},rules:{workspacePath:J.cwd},workflows:{workspacePath:J.cwd}});if(y)await y.start().catch(()=>{});let A0=B.enableTools&&R&&Boolean(y)&&y?.hasConfiguredSkills(J.skills)===!0&&Bq({cwd:J.cwd,providerId:J.providerId,mode:B.mode,modelId:J.modelId,toolRoutingRules:J.toolRoutingRules,toolPolicies:J.toolPolicies,toolExecutors:A}),o=y&&P?y.createExtension({includeRules:U,includeSkills:R,includeWorkflows:O,registerSkillsTool:A0,allowedSkillNames:J.skills}):void 0,V0=o?[...Q??J.extensions??[],o]:Q??J.extensions;if(B.enableTools){if(G.push(...h7(J.cwd,J.providerId,B.mode,J.modelId,J.toolRoutingRules,J.toolPolicies,void 0,A)),!B.disableMcpSettingsTools){let r=await Gq(J.logger);G.push(...r.tools),$0=r.shutdown}}let i,$$=B.enableAgentTeams?E7():void 0,p=$$?.loadRuntime(F),i0=p?.state,k=p?.teammates??[],P0=new Map(k.map((r)=>[r.agentId,r])),n=J.sessionId||D,n0,R1=[],D1=!1,F2=N2({providerId:J.providerId,modelId:J.modelId,cwd:J.cwd,apiKey:J.apiKey??"",baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking,maxIterations:J.maxIterations,hooks:Z,extensions:V0,logger:W??J.logger,telemetry:$.telemetry??J.telemetry,workspaceMetadata:J.workspaceMetadata});if(!this.teamRuntimeEntries.has(n))this.teamRuntimeEntries.set(n,{delegatedAgentConfigProvider:F2});let h8=()=>{if(!B.enableAgentTeams)return;let r=this.teamRuntimeEntries.get(n)??{delegatedAgentConfigProvider:F2};if(this.teamRuntimeEntries.set(n,r),i=r.runtime,!i){if(i=new j2({teamName:D,leadAgentId:J.sessionId||"lead",missionLogIntervalSteps:B.missionLogIntervalSteps,missionLogIntervalMs:B.missionLogIntervalMs,onTeamEvent:(J0)=>{if(V(J0),i&&$$){if(J0.type==="teammate_spawned"&&J0.teammate?.rolePrompt){let U$={agentId:J0.agentId,rolePrompt:J0.teammate.rolePrompt,modelId:J0.teammate.modelId,maxIterations:J0.teammate.maxIterations};P0.set(U$.agentId,U$)}if(J0.type==="teammate_shutdown"&&!Uq(J0.reason))P0.delete(J0.agentId);$$.handleTeamEvent(F,J0),$$.persistRuntime(F,i.exportState(),Array.from(P0.values()))}}}),i0)i.hydrateState(i0),D1=!0;r.runtime=i}if(!z){if(!i)return;z=!0;let J0=y2({runtime:i,leadAgentId:J.sessionId||"lead",restoredFromPersistence:Boolean(i0),restoredTeammates:k,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(U$)=>{R1=U$,n0?.addTools(U$)},createBaseTools:B.enableTools?()=>h7(J.cwd,J.providerId,B.mode,J.modelId,J.toolRoutingRules,J.toolPolicies,void 0,A):void 0,teammateConfigProvider:F2});if(D1)i.recoverActiveRuns("runtime_recovered");if(J0.restoredFromPersistence)X?.();G.push(...J0.tools)}return i};if(B.enableSpawnAgent&&j){let r=j();G.push({...r,execute:async(J0,U$)=>{return h8(),r.execute(J0,U$)}})}if(B.enableAgentTeams)h8();let o4=WB(G,J.toolPolicies),$Q=o4.some((r)=>r.name===Z0.SUBMIT_AND_EXIT&&r.lifecycle?.completesRun===!0),U2=B.enableAgentTeams?()=>{let r=this.teamRuntimeEntries.get(n)?.runtime;if(!r)return;let J0=r.listTasks(),U$=J0.some((m$)=>m$.status==="in_progress"||m$.status==="pending"),L3=r.listRuns({}),JK=L3.some((m$)=>m$.status==="running"||m$.status==="queued");if(U$||JK){let m$=J0.filter((C0)=>C0.status==="in_progress"||C0.status==="pending").map((C0)=>`${C0.id} (${C0.status}): ${C0.title}`).join(", "),z3=L3.filter((C0)=>C0.status==="running"||C0.status==="queued").map((C0)=>`${C0.id} (${C0.status})`).join(", "),JQ=[];if(m$)JQ.push(`Unfinished tasks: ${m$}`);if(z3)JQ.push(`Active runs: ${z3}`);return`[SYSTEM] You still have team obligations. ${JQ.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,b8=$Q?{requireCompletionTool:!0,...U2?{completionGuard:U2}:{}}:U2?{completionGuard:U2}:void 0;return{tools:o4,logger:W??J.logger,telemetry:f??J.telemetry,teamRuntime:i,teamRestoredFromPersistence:Boolean(i0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(n)?.delegatedAgentConfigProvider??F2,extensions:V0,completionPolicy:b8,registerLeadAgent:(r)=>{if(n0=r,R1.length>0)r.addTools(k1(R1,[...K]))},shutdown:async(r)=>{if(Fq(i,r),this.teamRuntimeEntries.delete(n),await $0?.(),!T)y?.stop()}}}}var XB={};w(XB,{requestDesktopToolApproval:()=>k7});import{mkdir as Dq,readFile as Pq,unlink as Lq,writeFile as zq}from"node:fs/promises";import{join as jB}from"node:path";function Oq($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function _q($){return new Promise((J)=>setTimeout(J,$))}async function b7($){try{await Lq($)}catch{}}async function k7($,J={}){let Z=J.approvalDir?.trim(),Q=J.sessionId?.trim();if(!Z||!Q)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await Dq(Z,{recursive:!0});let W=Oq(`${$.toolCallId}`),f=jB(Z,`${Q}.request.${W}.json`),j=jB(Z,`${Q}.decision.${W}.json`),X=J.nowIso??(()=>new Date().toISOString());await zq(f,`${JSON.stringify({requestId:W,sessionId:Q,createdAt:X(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
713
- `,"utf8");let H=J.timeoutMs??300000,Y=J.pollIntervalMs??200,A=Date.now();while(Date.now()-A<H){try{let V=await Pq(j,"utf8"),B=JSON.parse(V),K={approved:B.approved===!0,reason:typeof B.reason==="string"?B.reason:void 0};return await Promise.all([b7(j),b7(f)]),K}catch{}await _q(Y)}return await b7(f),{approved:!1,reason:"Tool approval request timed out"}}y$();var qB={};w(qB,{updateLocalProvider:()=>vZ,saveLocalProviderSettings:()=>d7,saveLocalProviderOAuthCredentials:()=>i7,resolveLocalClineAuthToken:()=>n7,refreshProviderModelsFromSource:()=>l7,normalizeOAuthProvider:()=>p7,loginLocalProvider:()=>r7,listLocalProviders:()=>u7,getLocalProviderModels:()=>c7,ensureCustomProvidersLoaded:()=>xZ,deleteLocalProvider:()=>uZ,addLocalProvider:()=>v7});import*as T0 from"@cline/llms";import{getClineEnvironmentConfig as lq}from"@cline/shared";import{existsSync as Tq,mkdirSync as Nq,readFileSync as Mq,writeFileSync as qq}from"node:fs";import{mkdir as yq,readFile as wq,writeFile as Sq}from"node:fs/promises";import{dirname as I7,join as Cq}from"node:path";import*as S0 from"@cline/llms";import{ModelCapabilitySchema as Eq,ProviderCapabilitySchema as hq,ProviderClientSchema as bq,ProviderProtocolSchema as kq}from"@cline/shared";import{z as l}from"zod";var Iq=l.object({id:l.string().optional(),name:l.string().optional(),maxTokens:l.number().optional(),contextWindow:l.number().optional(),maxInputTokens:l.number().optional(),capabilities:l.array(Eq).optional(),supportsVision:l.boolean().optional(),supportsAttachments:l.boolean().optional(),supportsReasoning:l.boolean().optional()}).passthrough(),xq=l.object({name:l.string(),baseUrl:l.string(),defaultModelId:l.string().optional(),protocol:kq.optional(),client:bq.optional(),capabilities:l.array(hq).optional(),modelsSourceUrl:l.string().optional()}).passthrough(),HB=l.object({provider:xq.optional(),models:l.record(l.string(),Iq).optional()}).passthrough(),YB=l.object({version:l.literal(1),providers:l.record(l.string(),HB)}),mq=l.object({version:l.literal(1),providers:l.record(l.string(),l.unknown())}),hZ=new Set;function AB($){return $.split(/[-_]/).filter(Boolean).map((J)=>J.charAt(0).toUpperCase()+J.slice(1)).join(" ")}function K2($){return Cq(I7($.getFilePath()),"models.json")}function bZ(){return{version:1,providers:{}}}function VB($){let J=mq.safeParse($);if(!J.success)return bZ();let Z={};for(let[Q,W]of Object.entries(J.data.providers)){let f=HB.safeParse(W);if(f.success)Z[Q]=f.data}return{version:1,providers:Z}}function x7($){if(!Tq($))return bZ();try{let J=Mq($,"utf8");return VB(JSON.parse(J))}catch{}return bZ()}async function E8($){try{let J=await wq($,"utf8");return VB(JSON.parse(J))}catch{}return bZ()}function BB($,J){Nq(I7($),{recursive:!0});let Z=YB.parse(J);qq($,`${JSON.stringify(Z,null,2)}
714
- `,"utf8")}async function kZ($,J){await yq(I7($),{recursive:!0});let Z=YB.parse(J);await Sq($,`${JSON.stringify(Z,null,2)}
715
- `,"utf8")}function KB($,J){return{id:$,name:J.name??$,supportsAttachments:J.capabilities?.includes("files"),supportsVision:J.capabilities?.includes("images"),supportsReasoning:J.capabilities?.includes("reasoning")||J.thinkingConfig!=null}}function GB($){if(!$||$.length===0)return;let J=new Set;if($.includes("reasoning"))J.add("reasoning");if($.includes("prompt-cache"))J.add("prompt-cache");if($.includes("tools"))J.add("tools");return J.size>0?[...J]:void 0}function FB($){let J=new Set;if(!$||$.length===0)return[...J];if($.includes("streaming"))J.add("streaming");if($.includes("tools"))J.add("tools");if($.includes("reasoning"))J.add("reasoning");if($.includes("prompt-cache"))J.add("prompt-cache");if($.includes("vision"))J.add("images"),J.add("files");return[...J]}function gq($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function UB($,J){return $??J??"openai-chat"}function RB($,J,Z){return $??Z??(J==="openai-responses"?"openai":"openai-compatible")}function DB($,J,Z){let Q=new Set(J?.capabilities??Z??[]);if(J?.supportsVision)Q.add("images");if(J?.supportsAttachments)Q.add("files");if(J?.supportsReasoning)Q.add("reasoning");return{id:$,name:J?.name??$,maxTokens:J?.maxTokens,contextWindow:J?.contextWindow,maxInputTokens:J?.maxInputTokens,capabilities:Q.size>0?[...Q]:void 0}}function vq($,J){for(let[Z,Q]of Object.entries(J??{})){let W=Q.id?.trim()||Z.trim();if(!W)continue;S0.registerModel($,W,DB(W,Q))}}function uq($,J,Z){return{...J??{},id:$,name:J?.name??$,capabilities:J?.capabilities??Z}}function cq($){return Object.assign({},...S0.resolveProviderModelCatalogKeys($).map((Z)=>S0.getGeneratedModelsForProvider(Z)))}function dq($){let J=$.provider.trim();if(!J||S0.isBuiltInProviderId(J))return;let Z=$.baseUrl?.trim();if(!Z)return;let Q=S0.MODEL_COLLECTIONS_BY_PROVIDER_ID[J],W=cq(J),f=FB($.capabilities),j=f.length>0?f:void 0,X=$.model?.trim(),H={...W,...Q?.models??{}};if(X)H[X]=uq(X,H[X],j);let Y=Object.keys(H).filter(Boolean),A=X||Y[0];if(!A)return;let V=UB($.protocol,Q?.provider.protocol),B=RB($.client,V,Q?.provider.client);S0.registerProvider({provider:{id:J,name:Q?.provider.name??AB(J),description:Q?.provider.description,protocol:V,client:B,baseUrl:Z,modelsSourceUrl:Q?.provider.modelsSourceUrl,defaultModelId:A,capabilities:GB($.capabilities)??Q?.provider.capabilities,source:"file"},models:H})}function IZ($){for(let J of Object.values($.providers))dq(J.settings)}function n4($,J){let Z=J.models??{};if(!gq(J.provider)){vq($,Z);return}let Q=FB(J.provider.capabilities),W=Object.entries(Z).map(([Y,A])=>({id:A.id?.trim()||Y.trim(),model:A})).filter(({id:Y})=>Y.length>0),f=J.provider.defaultModelId?.trim()||W[0]?.id||"default",j=UB(J.provider.protocol,void 0),X=RB(J.provider.client,j,void 0),H=Object.fromEntries(W.map(({id:Y,model:A})=>[Y,{...DB(Y,A,Q.length>0?Q:void 0),status:"active"}]));S0.registerProvider({provider:{id:$,name:J.provider.name.trim()||AB($),protocol:j,client:X,baseUrl:J.provider.baseUrl,modelsSourceUrl:J.provider.modelsSourceUrl,defaultModelId:f,capabilities:GB(J.provider.capabilities),source:"file"},models:H})}function PB($){let J=K2($);if(hZ.has(J))return;let Z=x7(J);for(let[Q,W]of Object.entries(Z.providers))n4(Q,W);hZ.add(J)}async function xZ($){let J=K2($);if(hZ.has(J))return;let Z=await E8(J);for(let[Q,W]of Object.entries(Z.providers))n4(Q,W);hZ.add(J)}function pq($){return $.apiKey??$.auth?.apiKey}function rq($){return($.auth?.accessToken?.trim()??"").length>0}function zB($){return $.split(/[-_]/).filter(Boolean).map((J)=>J.charAt(0).toUpperCase()+J.slice(1)).join(" ")}function iq($){let J=$.split(/\s+/).filter(Boolean);if(J.length===0)return"?";if(J.length===1)return J[0].slice(0,2).toUpperCase();return`${J[0][0]}${J[1][0]}`.toUpperCase()}function nq($){let J=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Z=0;for(let Q of $)Z=Z*31+Q.charCodeAt(0)>>>0;return J[Z%J.length]}function OB($){return Object.entries($).sort(([J],[Z])=>J.localeCompare(Z)).map(([J,Z])=>KB(J,Z))}async function aq($,J){let Z=await T0.getModelsForProvider($);if(!J)return Z;let Q=await bJ($,{loadPrivateOnAuth:!0,failOnError:!1},J);return Q?.knownModels?{...Z,...Q.knownModels}:Z}function m7($){return[...new Set(($??[]).map((J)=>J.trim()).filter(Boolean))]}function tq($){if(!$?.length)return;return[...new Set($)]}function sq($,J){return tq([...$??[],...J??[]])}function oq($){let J=$?.popularRank;return typeof J==="number"&&Number.isFinite(J)?J:Number.MAX_SAFE_INTEGER}function eq($){if(!$||typeof $!=="object")return!1;let J=$;return typeof J.path==="string"&&J.path.trim().length>0&&typeof J.label==="string"&&J.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(J.type))}function $y($){let J=$?.configFields;if(!Array.isArray(J))return;return J.filter(eq)}var mZ={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},LB={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function Jy($){if(!$)return[mZ];if($.source!=="system")return $.baseUrl?[mZ,LB]:[mZ];let J=[];if($.env?.length)J.push(mZ);if($.baseUrl)J.push(LB);return J}function Zy($,J){return J.split(".").reduce((Z,Q)=>{if(!Z||typeof Z!=="object")return;return Z[Q]},$)}function Qy($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function Wy($,J,Z){if(!$?.length)return;let Q={};for(let W of $){let j=Qy(W.path==="baseUrl"&&J?.baseUrl===void 0?Z?.baseUrl:Zy(J,W.path))??W.defaultValue;if(j!==void 0)Q[W.path]=j}return Q}function _B($){let J=Object.entries($??{}).filter(([Z])=>Z.trim().length>0);return J.length>0?Object.fromEntries(J):void 0}function g7($,J){let Z=J?.includes("vision")??!1,Q=J?.includes("reasoning")??!1;return Object.fromEntries($.map((W)=>[W,{id:W,name:W,supportsVision:Z,supportsAttachments:Z,supportsReasoning:Q}]))}async function TB($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let J=$.modelsSourceUrl?await Z5($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...J])]}function NB($,J){let Z=$.read(),Q=!1;if(Z.providers[J])delete Z.providers[J],Q=!0;if(Z.lastUsedProvider===J)delete Z.lastUsedProvider,Q=!0;if(Q)$.write(Z);T0.unregisterProvider(J)}async function v7($,J){let Z=J.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=J.baseUrl.trim(),W=J.apiKey?.trim()??"";if(!Q&&!W){let G=K2($);if((await E8(G)).providers[Z]){let F=await uZ($,{providerId:Z});return{providerId:Z,settingsPath:F.settingsPath,modelsPath:F.modelsPath,modelsCount:0}}return NB($,Z),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:G,modelsCount:0}}if(T0.hasProvider(Z))throw Error(`provider "${Z}" already exists`);let f=J.name.trim();if(!f)throw Error("name is required");if(!Q)throw Error("baseUrl is required");let j=m7(J.models),X=J.modelsSourceUrl?.trim(),H=await TB({providerId:Z,explicitModels:j,modelsSourceUrl:X,shouldRecompute:!0});if(H.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let Y=J.defaultModelId?.trim()&&H.includes(J.defaultModelId.trim())?J.defaultModelId.trim():H[0],A=J.capabilities?.length?[...new Set(J.capabilities)]:void 0,V=_B(J.headers);$.saveProviderSettings({provider:Z,apiKey:W||void 0,baseUrl:Q,headers:V,timeout:J.timeoutMs,model:Y,protocol:J.protocol,client:J.client},{setLastUsed:!1});let B=K2($),K=await E8(B);return K.providers[Z]={provider:{name:f,baseUrl:Q,defaultModelId:Y,protocol:J.protocol,client:J.client,capabilities:A,modelsSourceUrl:X},models:g7(H,A)},await kZ(B,K),n4(Z,K.providers[Z]),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:B,modelsCount:H.length}}async function vZ($,J){let Z=J.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=K2($),W=await E8(Q),f=W.providers[Z];if(!f){let _=$.getProviderSettings(Z);if(!_)throw Error(`provider "${Z}" does not exist`);let P=J.modelsSourceUrl?.trim(),z=m7(J.models)[0]??_.model?.trim();if(!z&&!P)throw Error(`provider "${Z}" cannot be updated because no model is configured`);f={provider:{name:J.name?.trim()||zB(Z),baseUrl:J.baseUrl?.trim()??_.baseUrl?.trim()??"",defaultModelId:z,protocol:_.protocol,client:_.client,capabilities:_.capabilities},models:z?g7([z],_.capabilities):{}}}if(!f.provider)throw Error(`provider "${Z}" cannot be updated because it is a model overlay (no provider metadata)`);let j=J.name?.trim()??f.provider.name.trim();if(!j)throw Error("name is required");let X=J.baseUrl?.trim()??f.provider.baseUrl.trim();if(!X)throw Error("baseUrl is required");let H=J.capabilities===void 0?f.provider.capabilities:J.capabilities===null?void 0:[...new Set(J.capabilities)],Y=J.protocol===void 0?f.provider.protocol:J.protocol??void 0,A=J.client===void 0?f.provider.client:J.client??void 0,V=m7(J.models),B=J.modelsSourceUrl===void 0?f.provider.modelsSourceUrl:J.modelsSourceUrl?.trim()||void 0,K=J.models!==void 0||J.modelsSourceUrl!==void 0&&!!B,G=Object.keys(f.models??{}).map((_)=>_.trim()).filter(Boolean),D=await TB({providerId:Z,explicitModels:V,modelsSourceUrl:B,fallbackModelIds:G,shouldRecompute:K});if(D.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let F=J.defaultModelId===void 0?f.provider.defaultModelId?.trim():J.defaultModelId?.trim(),U=F&&D.includes(F)?F:D[0],O={...$.getProviderSettings(Z)??{},provider:Z,baseUrl:X,model:U};if(Y)O.protocol=Y;else delete O.protocol;if(A)O.client=A;else delete O.client;if(J.apiKey!==void 0){let _=J.apiKey?.trim()??"";if(_)O.apiKey=_;else delete O.apiKey}if(J.headers!==void 0){let _=_B(J.headers);if(_)O.headers=_;else delete O.headers}if(J.timeoutMs!==void 0)if(typeof J.timeoutMs==="number")O.timeout=J.timeoutMs;else delete O.timeout;return $.saveProviderSettings(O,{setLastUsed:!1}),W.providers[Z]={provider:{name:j,baseUrl:X,defaultModelId:U,protocol:Y,client:A,capabilities:H,modelsSourceUrl:B},models:g7(D,H)},await kZ(Q,W),n4(Z,W.providers[Z]),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:Q,modelsCount:D.length}}async function uZ($,J){let Z=J.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=K2($),W=await E8(Q);if(!W.providers[Z])throw Error(`provider "${Z}" does not exist`);return delete W.providers[Z],await kZ(Q,W),T0.unregisterProvider(Z),NB($,Z),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:Q}}async function u7($){let J=$.read(),Z=T0.getProviderIds(),Q=await Promise.all(Z.map(async(f)=>{let[j,X]=await Promise.all([T0.getProvider(f),T0.getModelsForProvider(f)]),H=OB(X),Y=J.providers[f]?.settings,A=j?.name??zB(f),V=sq(j?.capabilities,Y?.capabilities),B=$y(j?.metadata)??Jy(j);return{provider:{id:f,name:A,models:H.length,color:nq(f),letter:iq(A),enabled:Boolean(Y),apiKey:Y?pq(Y):void 0,oauthAccessTokenPresent:Y?rq(Y):void 0,baseUrl:Y?.baseUrl??j?.baseUrl,defaultModelId:j?.defaultModelId,protocol:Y?.protocol??j?.protocol,client:Y?.client??j?.client,capabilities:V,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:B,configValues:Wy(B,Y,j),modelList:H},rank:oq(j?.metadata)}}));return Q.sort((f,j)=>{if(f.rank!==j.rank)return f.rank-j.rank;return f.provider.name.localeCompare(j.provider.name)||f.provider.id.localeCompare(j.provider.id)}),{providers:Q.map((f)=>f.provider),settingsPath:$.getFilePath()}}async function c7($,J){let Z=$.trim(),Q=await aq(Z,J),W=OB(Q);return{providerId:Z,models:W}}function gZ($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function MB($,J){if(!gZ(J))return gZ($)?{...$}:void 0;let Z=gZ($)?{...$}:{};for(let[Q,W]of Object.entries(J)){if(W==null||W===""){delete Z[Q];continue}if(gZ(W)){let f=MB(Z[Q],W);if(f&&Object.keys(f).length>0)Z[Q]=f;else delete Z[Q];continue}Z[Q]=W}return Object.keys(Z).length>0?Z:void 0}function d7($,J){let Z=J.providerId.trim();if(J.enabled===!1){let f=$.read();if(delete f.providers[Z],f.lastUsedProvider===Z)delete f.lastUsedProvider;return $.write(f),{providerId:Z,enabled:!1,settingsPath:$.getFilePath()}}let W={...$.getProviderSettings(Z)??{},provider:Z};for(let f of["apiKey","baseUrl","model","region"])if(Object.hasOwn(J,f)&&typeof J[f]==="string")if(J[f].trim().length===0)delete W[f];else W[f]=J[f];for(let f of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(J,f))W[f]=J[f];for(let f of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(J,f)&&J[f]!=null){let j=MB(W[f],J[f]);if(j)W[f]=j;else delete W[f]}return $.saveProviderSettings(W,{setLastUsed:!1}),{providerId:Z,enabled:!0,settingsPath:$.getFilePath()}}async function l7($,J){let Z=J.trim(),Q=$.getProviderSettings(Z),f=T0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z]?.provider,j=Q?.baseUrl?.trim()||f?.baseUrl?.trim(),X=Q5(j,f?.baseUrl,f?.modelsSourceUrl);if(!Q||!f||!j||!X)return{providerId:Z,refreshed:!1};let H=await vZ($,{providerId:Z,name:f.name,baseUrl:j,apiKey:Q.apiKey,headers:Q.headers??null,timeoutMs:Q.timeout??null,modelsSourceUrl:X,protocol:Q.protocol??f.protocol??null,client:Q.client??f.client??null,capabilities:Q.capabilities??null});return{providerId:Z,refreshed:!0,modelsCount:H.modelsCount}}function p7($){let J=$.trim().toLowerCase();if(J==="codex"||J==="openai-codex")return"openai-codex";if(J==="cline"||J==="oca")return J;throw Error(`provider "${$}" does not support OAuth login (supported: cline, oca, openai-codex)`)}function fy($,J){if($==="cline")return J.access.startsWith("workos:")?J.access:`workos:${J.access}`;return J.access}async function r7($,J,Z,Q){let W=dJ({onPrompt:async(f)=>f.defaultValue??"",openUrl:Z,onOpenUrlError:({error:f})=>{throw f instanceof Error?f:Error(String(f))}});if($==="cline")return e2({apiBaseUrl:J?.baseUrl?.trim()||lq().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:W,telemetry:Q});if($==="oca")return r2({mode:J?.oca?.mode,callbacks:W,telemetry:Q});return $8({onAuth:W.onAuth,onPrompt:W.onPrompt,onProgress:W.onProgress,onManualCodeInput:W.onManualCodeInput,telemetry:Q})}function i7($,J,Z,Q){let W={...Z?.auth??{},accessToken:fy(J,Q),refreshToken:Q.refresh,accountId:Q.accountId,expiresAt:Q.expires},f={...Z??{provider:J},provider:J,auth:W};return $.saveProviderSettings(f,{tokenSource:"oauth"}),f}function n7($){let J=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return J&&J.length>0?J:void 0}var yB={};w(yB,{getProviderConfigFields:()=>a7});import*as cZ from"@cline/llms";import{isOAuthProviderId as jy}from"@cline/shared";var Xy=["apiKey","baseUrl","awsRegion","awsProfile","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],Hy={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 Yy($,J){let Z={};for(let Q of Xy){let W=$[Q],f=J[Q];if(W||f)Z[Q]={...W,...f}}return Z}function Ay($){let J=Hy[$.providerId];if(!J)return $;return{...$,description:J.description??$.description,fields:J.mode==="replace"?J.fields:Yy($.fields,J.fields)}}var Vy=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function By($,J){if(!J?.provider.baseUrl)return!1;if(J.provider.source!=="system")return!0;return Vy.has($)}function a7($){let J=cZ.normalizeProviderId($);if(jy(J))return{providerId:J,authMethod:"oauth",fields:{}};let Z=cZ.MODEL_COLLECTIONS_BY_PROVIDER_ID[J];if(Z?.provider.capabilities?.includes("local-auth"))return{providerId:J,authMethod:"local",fields:{}};let Q=Z?.provider.baseUrl,W={apiKey:{}};if(By(J,Z))W.baseUrl={defaultValue:Q};return Ay({providerId:J,authMethod:"api-key",fields:W})}var EB={};w(EB,{resolveLegacyClineAuth:()=>o7,migrateLegacyProviderSettings:()=>a4});import{existsSync as Ky,readFileSync as Gy}from"node:fs";import{dirname as Fy,join as t7}from"node:path";import*as lZ from"@cline/llms";import{resolveClineDataDir as Uy}from"@cline/shared/storage";var dZ="openai",CB=lZ.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,wB=128000;function o7($){let J=$?.trim();if(!J)return;try{let Z=JSON.parse(J);if(!Z)return;let Q=typeof Z.expiresAt==="number"&&Number.isFinite(Z.expiresAt)?Z.expiresAt<10000000000?Z.expiresAt*1000:Z.expiresAt:void 0;return{accessToken:Z.idToken,refreshToken:Z.refreshToken,expiresAt:Q,accountId:Z.userInfo?.id}}catch{return}}function C($){let J=$?.trim();return J?J:void 0}function SB($){if(!Ky($))return;try{let J=Gy($,"utf8"),Z=JSON.parse(J);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function Ry($){let J=$.dataDir??Uy(),Z=$.globalStatePath??t7(J,"globalState.json"),Q=$.secretsPath??t7(J,"secrets.json"),W=SB(Z),f=SB(Q);if(!W&&!f)return;return{globalState:W??{},secrets:f??{}}}function s7($){if($===dZ)return CB;return $}function Dy($,J,Z,Q){let W=Z==="plan"?"planMode":"actMode",f=J===Q?C(Z==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,X={openrouter:`${W}OpenRouterModelId`,cline:`${W}ClineModelId`,openai:`${W}OpenAiModelId`,ollama:`${W}OllamaModelId`,lmstudio:`${W}LmStudioModelId`,litellm:`${W}LiteLlmModelId`,requesty:`${W}RequestyModelId`,together:`${W}TogetherModelId`,fireworks:`${W}FireworksModelId`,sapaicore:`${W}SapAiCoreModelId`,groq:`${W}GroqModelId`,baseten:`${W}BasetenModelId`,huggingface:`${W}HuggingFaceModelId`,"huawei-cloud-maas":`${W}HuaweiCloudMaasModelId`,oca:`${W}OcaModelId`,aihubmix:`${W}AihubmixModelId`,hicap:`${W}HicapModelId`,nousResearch:`${W}NousResearchModelId`,"vercel-ai-gateway":`${W}VercelAiGatewayModelId`}[J];return(X?C(typeof $[X]==="string"?$[X]:void 0):void 0)??f}function Py($,J,Z){let Q=Z==="plan"?$.planModeReasoningEffort:$.actModeReasoningEffort,W=Z==="plan"?$.geminiPlanModeThinkingLevel:$.geminiActModeThinkingLevel,f=Z==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,j=(J==="gemini"?W:void 0)??Q,X=j==="none"||j==="low"||j==="medium"||j==="high"?j:void 0,H=typeof f==="number"&&Number.isInteger(f)&&f>0?f:void 0;if(!X&&H===void 0)return;return{...X?{effort:X}:{},...H!==void 0?{budgetTokens:H}:{}}}function Ly($){let J=$["openai-codex-oauth-credentials"];if(!J)return;try{let Z=JSON.parse(J),Q=C(Z.access_token),W=C(Z.refresh_token),f=C(Z.accountId);if(!Q&&!W&&!f)return;return{...Q?{apiKey:Q}:{},auth:{...Q?{accessToken:Q}:{},...W?{refreshToken:W}:{},...f?{accountId:f}:{}}}}catch{return}}function zy($){let J=lZ.getGeneratedModelsForProvider($);return Object.keys(J)[0]??void 0}function Oy($,J,Z,Q){let W=s7($),f=C(Q==="plan"?J.planModeApiProvider:J.actModeApiProvider),j=Dy(J,$,Q,f)??zy(W),X=Py(J,W,Q),H=typeof J.requestTimeoutMs==="number"&&Number.isInteger(J.requestTimeoutMs)&&J.requestTimeoutMs>0?J.requestTimeoutMs:void 0,Y={anthropic:Z.apiKey,cline:Z.clineApiKey,openai:Z.openAiApiKey,"openai-native":Z.openAiNativeApiKey,openrouter:Z.openRouterApiKey,bedrock:Z.awsBedrockApiKey,gemini:Z.geminiApiKey,ollama:Z.ollamaApiKey,deepseek:Z.deepSeekApiKey,requesty:Z.requestyApiKey,together:Z.togetherApiKey,fireworks:Z.fireworksApiKey,qwen:Z.qwenApiKey,doubao:Z.doubaoApiKey,mistral:Z.mistralApiKey,litellm:Z.liteLlmApiKey,asksage:Z.asksageApiKey,xai:Z.xaiApiKey,moonshot:Z.moonshotApiKey,zai:Z.zaiApiKey,huggingface:Z.huggingFaceApiKey,nebius:Z.nebiusApiKey,sambanova:Z.sambanovaApiKey,cerebras:Z.cerebrasApiKey,groq:Z.groqApiKey,"huawei-cloud-maas":Z.huaweiCloudMaasApiKey,baseten:Z.basetenApiKey,"vercel-ai-gateway":Z.vercelAiGatewayApiKey,dify:Z.difyApiKey,minimax:Z.minimaxApiKey,hicap:Z.hicapApiKey,aihubmix:Z.aihubmixApiKey,nousResearch:Z.nousResearchApiKey,oca:Z.ocaApiKey},A={};if($==="openai-codex")Object.assign(A,Ly(Z));if($==="cline")try{let U=C(Z["cline:clineAccountId"]);if(U)A.auth={...A.auth??{},...o7(U)}}catch{}if($===dZ&&J.openAiHeaders)A.headers=J.openAiHeaders;if($==="bedrock"){let U=J.awsAuthentication==="profile"||J.awsUseProfile===!0;A.aws={accessKey:C(Z.awsAccessKey),secretKey:C(Z.awsSecretKey),sessionToken:C(Z.awsSessionToken),region:C(J.awsRegion),authentication:J.awsAuthentication,profile:U?C(J.awsProfile):void 0,usePromptCache:J.awsBedrockUsePromptCache,useCrossRegionInference:J.awsUseCrossRegionInference,useGlobalInference:J.awsUseGlobalInference,endpoint:C(J.awsBedrockEndpoint),customModelBaseId:C(Q==="plan"?J.planModeAwsBedrockCustomModelBaseId:J.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")A.gcp={projectId:C(J.vertexProjectId),region:C(J.vertexRegion)};if($===dZ&&(J.azureApiVersion||J.azureIdentity!==void 0))A.azure={apiVersion:C(J.azureApiVersion),useIdentity:J.azureIdentity};if($==="sapaicore")A.sap={clientId:C(Z.sapAiCoreClientId),clientSecret:C(Z.sapAiCoreClientSecret),tokenUrl:C(J.sapAiCoreTokenUrl),resourceGroup:C(J.sapAiResourceGroup),deploymentId:C(Q==="plan"?J.planModeSapAiCoreDeploymentId:J.actModeSapAiCoreDeploymentId),useOrchestrationMode:J.sapAiCoreUseOrchestrationMode};if($==="oca"){A.oca={mode:J.ocaMode};let U=C(Z.ocaRefreshToken);if(U)A.auth={...A.auth??{},refreshToken:U}}if($==="qwen")A.apiLine=J.qwenApiLine;if($==="moonshot")A.apiLine=J.moonshotApiLine;if($==="zai")A.apiLine=J.zaiApiLine;if($==="minimax")A.apiLine=J.minimaxApiLine;let V={anthropic:J.anthropicBaseUrl,openai:J.openAiBaseUrl,ollama:J.ollamaBaseUrl,lmstudio:J.lmStudioBaseUrl,litellm:J.liteLlmBaseUrl,gemini:J.geminiBaseUrl,requesty:J.requestyBaseUrl,asksage:J.asksageApiUrl,dify:J.difyBaseUrl,oca:J.ocaBaseUrl,aihubmix:J.aihubmixBaseUrl,sapaicore:J.sapAiCoreBaseUrl},B=C(Y[$]),K=C(V[$]),G={provider:W,...B?{apiKey:B}:{},...j?{model:j}:{},...K?{baseUrl:K}:{},...X?{reasoning:X}:{},...H?{timeout:H}:{},...A},D=xJ.safeParse(G);if(!D.success)return;return Object.keys(G).filter((U)=>U!=="provider").length>0?D.data:void 0}function _y($,J){if($!==CB)return;if(!J.baseUrl||!J.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:J.baseUrl,defaultModelId:J.model},models:{[J.model]:{id:J.model,name:J.model,contextWindow:wB,maxInputTokens:wB,capabilities:["streaming","tools","images"]}}}}function Ty($,J){let Z=new Set;for(let W of[$.actModeApiProvider,$.planModeApiProvider]){let f=C(W);if(f)Z.add(f)}if(C(J.apiKey))Z.add("anthropic");if(C(J.openRouterApiKey))Z.add("openrouter");if(C(J.openAiApiKey))Z.add(dZ);if(C(J.openAiNativeApiKey))Z.add("openai-native");if(C(J["openai-codex-oauth-credentials"]))Z.add("openai-codex");if(C(J.geminiApiKey))Z.add("gemini");if(C(J.ollamaApiKey))Z.add("ollama");if(C(J.awsAccessKey)||C(J.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||C($.awsProfile))Z.add("bedrock");if(C($.vertexProjectId)||C($.vertexRegion))Z.add("vertex");if(C(J.clineApiKey))Z.add("cline");let Q=o7(C(J["cline:clineAccountId"]));if(Q?.accessToken||Q?.refreshToken||Q?.accountId)Z.add("cline");if(C(J.ocaApiKey))Z.add("oca");if(C(J.sapAiCoreClientId)||C(J.sapAiCoreClientSecret)||C($.sapAiCoreTokenUrl)||C($.sapAiCoreBaseUrl)||C($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Z.add("sapaicore");return Z}function a4($){let J=$.providerSettingsManager.read(),Z=Ry($);if(!Z)return{migrated:!1,providerCount:Object.keys(J.providers).length,lastUsedProvider:J.lastUsedProvider};let{globalState:Q,secrets:W}=Z,f=Q.mode==="plan"?"plan":"act",j=Ty(Q,W),X=Q1();X.providers={...J.providers},X.lastUsedProvider=J.lastUsedProvider;let H=new Date().toISOString(),Y=0,A=t7(Fy($.providerSettingsManager.getFilePath()),"models.json"),V=x7(A),B=0;for(let D of j){let F=s7(D);if(X.providers[F])continue;let U=Oy(D,Q,W,f);if(!U)continue;X.providers[F]={settings:U,updatedAt:H,tokenSource:"migration"},Y+=1;let R=_y(F,U);if(R&&!V.providers[F])V.providers[F]=R,B+=1}if(Y===0&&B===0)return{migrated:!1,providerCount:Object.keys(J.providers).length,lastUsedProvider:J.lastUsedProvider};let K=C(f==="plan"?Q.planModeApiProvider:Q.actModeApiProvider),G=K?s7(K):void 0;if(X.lastUsedProvider=J.lastUsedProvider??(G&&X.providers[G]?G:Object.keys(X.providers)[0]),$.providerSettingsManager.write(X),B>0)BB(A,V);return{migrated:Y>0||B>0,providerCount:Object.keys(X.providers).length,lastUsedProvider:X.lastUsedProvider}}L0();PZ();var hB={};w(hB,{FileTeamPersistenceStore:()=>pZ});import{appendFileSync as Ny,existsSync as e7,mkdirSync as My,readFileSync as qy,renameSync as yy,unlinkSync as wy,writeFileSync as Sy}from"node:fs";import{join as $3}from"node:path";import{resolveTeamDataDir as Cy}from"@cline/shared/storage";function Ey($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class pZ{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let J=Ey($.teamName),Z=$.baseDir?.trim()||Cy();this.dirPath=$3(Z,J),this.statePath=$3(this.dirPath,"state.json"),this.taskHistoryPath=$3(this.dirPath,"task-history.jsonl")}loadState(){if(!e7(this.statePath))return;try{let $=qy(this.statePath,"utf8"),J=JSON.parse($);if(J.version!==1||!J.teamState)return;for(let Z of J.teammates??[])this.teammateSpecs.set(Z.agentId,Z);return IA(J.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec($){this.teammateSpecs.set($.agentId,$)}removeTeammateSpec($){this.teammateSpecs.delete($)}persist($){if(!this.hasPersistableState($)){this.clearPersistedState();return}this.ensureDir();let J={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Z=`${this.statePath}.tmp`;Sy(Z,`${JSON.stringify(J,null,2)}
716
- `,"utf8"),yy(Z,this.statePath)}appendTaskHistory($){let J={};switch($.type){case"team_task_updated":J=$.task;break;case"team_message":J={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":J={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":J={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":J={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":J={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),Ny(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:J})}
717
- `,"utf8")}ensureDir(){if(!e7(this.dirPath))My(this.dirPath,{recursive:!0})}hasPersistableState($){let J=$.exportState();if(this.teammateSpecs.size>0)return!0;if(J.members.some((Z)=>Z.role==="teammate"))return!0;return J.tasks.length>0||J.mailbox.length>0||J.missionLog.length>0}clearPersistedState(){if(e7(this.statePath))wy(this.statePath)}}var bB={};w(bB,{ChatViewStateSchema:()=>J3,ChatSummarySchema:()=>tZ,ChatSessionStatusSchema:()=>iZ,ChatSessionConfigSchema:()=>rZ,ChatMessageSchema:()=>aZ,ChatMessageRoleSchema:()=>nZ});import{z as E}from"zod";var rZ=E.object({workspaceRoot:E.string().min(1),cwd:E.string().optional(),provider:E.string().min(1),model:E.string().min(1),mode:E.enum(["act","plan"]).default("act"),apiKey:E.string(),systemPrompt:E.string().optional(),rules:E.string().optional(),maxIterations:E.number().int().positive().optional(),enableTools:E.boolean(),enableSpawn:E.boolean().optional(),enableTeams:E.boolean().optional(),autoApproveTools:E.boolean().optional(),missionStepInterval:E.number().int().positive().optional(),missionTimeIntervalMs:E.number().int().positive().optional()}),iZ=E.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),nZ=E.enum(["user","assistant","tool","system","status","error"]),aZ=E.object({id:E.string().min(1),sessionId:E.string().nullable(),role:nZ,content:E.string(),createdAt:E.number().int().nonnegative(),meta:E.object({stream:E.enum(["stdout","stderr"]).optional(),toolName:E.string().optional(),iteration:E.number().int().nonnegative().optional(),agentId:E.string().optional(),conversationId:E.string().optional(),hookEventName:E.string().optional(),inputTokens:E.number().int().nonnegative().optional(),outputTokens:E.number().int().nonnegative().optional(),checkpoint:E.object({ref:E.string(),createdAt:E.number().int().nonnegative(),runCount:E.number().int().positive(),kind:E.enum(["stash","commit"]).optional()}).optional()}).optional()}),tZ=E.object({toolCalls:E.number().int().nonnegative(),tokensIn:E.number().int().nonnegative(),tokensOut:E.number().int().nonnegative()}),J3=E.object({sessionId:E.string().nullable(),status:iZ,config:rZ,messages:E.array(aZ),rawTranscript:E.string(),error:E.string().nullable(),summary:tZ});var kB={};w(kB,{CORE_BUILD_VERSION:()=>Z3});var Z3=vY;import{Agent as Gw,createAgentRuntime as Fw}from"@cline/agents";var xB={};w(xB,{fetchClineRecommendedModels:()=>Q3,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>sZ});import{getClineEnvironmentConfig as hy}from"@cline/shared";var by=5000,sZ={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}]};function ky($){return{recommended:$.recommended.map((J)=>({...J,tags:[...J.tags]})),free:$.free.map((J)=>({...J,tags:[...J.tags]}))}}function IB($){if(!$||typeof $!=="object")return null;let J=$;if(typeof J.id!=="string"||J.id.length===0)return null;return{id:J.id,name:typeof J.name==="string"&&J.name.length>0?J.name:J.id,description:typeof J.description==="string"?J.description:"",tags:Array.isArray(J.tags)?J.tags.filter((Z)=>typeof Z==="string"):[]}}function Iy($){if(!$||typeof $!=="object")return null;let J=$,Z=Array.isArray(J.recommended)?J.recommended:[],Q=Array.isArray(J.free)?J.free:[],W=Z.map(IB).filter((j)=>j!==null),f=Q.map(IB).filter((j)=>j!==null);if(W.length===0&&f.length===0)return null;return{recommended:W,free:f}}function xy($){let J=$.baseUrl?.trim();if(J)return J;let Z=hy().apiBaseUrl;try{return($.providerSettingsManager??new F$).getProviderSettings("cline")?.baseUrl?.trim()||Z}catch{return Z}}async function my($,J,Z){let Q=new AbortController,W=setTimeout(()=>Q.abort(),Z);try{return await $(J,{signal:Q.signal})}finally{clearTimeout(W)}}async function Q3($={}){try{let J=xy($),Z=$.fetchImpl??fetch,Q=await my(Z,`${J}/api/v1/ai/cline/recommended-models`,$.timeoutMs??by);if(!Q.ok)throw Error(`HTTP ${Q.status}`);let W=await Q.json(),f=Iy(W);if(f)return f}catch{}return ky(sZ)}var mB={};w(mB,{loadLlmsConfigFromFile:()=>f3,defineLlmsConfig:()=>W3});import{readFile as gy}from"node:fs/promises";import vy from"node:path";function W3($){return $}async function f3($){let J=vy.resolve($),Z=await gy(J,"utf8"),Q;try{Q=JSON.parse(Z)}catch(W){let f=W instanceof Error?W.message:String(W);throw Error(`Failed to parse JSON config at "${J}": ${f}`)}return uy(Q,J)}function uy($,J){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${J}": expected an object.`);let Q=$.providers;if(!Array.isArray(Q))throw Error(`Invalid llms config in "${J}": "providers" must be an array.`);if(!Q.length)throw Error(`Invalid llms config in "${J}": "providers" cannot be empty.`);return $}var lB={};w(lB,{createLlmsSdk:()=>X3,DefaultLlmsSdk:()=>t4});import{BUILT_IN_PROVIDER_IDS as uB,createHandler as ly,createHandlerAsync as py,getProviderCollection as ry,hasProvider as cB,registerAsyncHandler as iy,registerHandler as ny,registerModel as ay,registerProvider as dB}from"@cline/llms";function gB($){return $?{...$}:{}}function cy($,J){if($)return $;if(!J)return;let Z=globalThis.process;if(!Z?.env)return;return Z.env[J]}function dy($,J){if(!J.length)throw Error(`Provider "${$}" must include at least one model.`)}function vB($){let J=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:J,defaultModel:$.collection.provider.defaultModelId,modelCount:J.length}}class j3{providers=new Map;register($){dy($.id,$.models);let J=$.defaultModel??$.models[0];if(!J)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(J))throw Error(`Default model "${J}" is not included in configured models for "${$.id}".`);let Z=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Z?.models??[],...$.models]),defaultModel:J,defaults:{...Z?.defaults??{},...gB($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:cy($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...gB($.settings)}})}registerModel($,J){let Z=this.providers.get($);if(!Z){this.providers.set($,{id:$,models:new Set([J]),defaultModel:J,defaults:{}});return}Z.models.add(J)}createHandlerConfig($){let J=this.require($.providerId),Z=$.modelId??J.defaultModel;if(!J.models.has(Z))throw Error(`Model "${Z}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Z,...J.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,J){return this.providers.get($)?.models.has(J)??!1}require($){let J=this.providers.get($);if(!J)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return J}}class t4{configuredProviders=new j3;constructor($){this.applyConfig($)}createHandler($){return ly(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return py(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(dB($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)ny($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)iy($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let J=$.exposeModels??Object.keys($.models),Z=$.defaultModel??J[0];if(!Z)throw Error(`Provider "${$.id}" must define a default model.`);dB({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Z,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:J,defaultModel:Z,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){ay($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...uB]}async getBuiltInProviders(){return(await Promise.all(uB.map((J)=>ry(J)))).filter((J)=>J!==void 0).map((J)=>vB({collection:J}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,J){return this.configuredProviders.hasModel($,J)}applyConfig($){for(let J of $.providers)this.configuredProviders.registerSelectionConfig(J);for(let J of $.models??[])this.registerModel(J);for(let J of $.customProviders??[])this.registerProvider(J);for(let J of this.configuredProviders.list()){let Z=cB(J.id),Q=this.configuredProviders.createHandlerConfig({providerId:J.id,modelId:J.defaultModel}).routingProviderId,W=typeof Q==="string"&&cB(Q);if(!Z&&!W)throw Error(`Provider "${J.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function X3($){return new t4($)}Q7();async function ty(){return Promise.resolve().then(() => (N7(),tV))}function Lw(){return new Date().toISOString()}function zw($){if(nB($)!=="providers.json")return;let J=Y3($);if(nB(J)!=="settings")return;return Y3(J)}class F${filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??Pw(),this.dataDir=$.dataDir??zw(this.filePath),this.dataDir||!$.filePath)a4({providerSettingsManager:this,dataDir:this.dataDir});if(PB(this),IZ(this.read()),H3(this.filePath))try{iB(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!H3(this.filePath))return Q1();try{let $=Rw(this.filePath,"utf8"),J=JSON.parse($),Z=a2.safeParse(J);if(Z.success)return IZ(Z.data),Z.data}catch{}return Q1()}write($){let J=a2.parse($),Z=Y3(this.filePath);if(!H3(Z))Uw(Z,{recursive:!0,mode:448});Dw(this.filePath,`${JSON.stringify(J,null,2)}
718
- `,"utf8");try{iB(this.filePath,384)}catch{}IZ(J)}saveProviderSettings($,J={}){let Z=xJ.parse($),Q=this.read(),W=Z.provider,f=J.setLastUsed!==!1,j=Q.providers[W],X=J.tokenSource??j?.tokenSource??"manual",H={...Q,providers:{...Q.providers,[W]:{settings:Z,updatedAt:Lw(),tokenSource:X}},lastUsedProvider:f?W:Q.lastUsedProvider};return this.write(H),H}getProviderSettings($){return this.read().providers[$]?.settings}getLastUsedProviderSettings(){let $=this.read(),J=$.lastUsedProvider;if(!J)return;return $.providers[J]?.settings}getProviderConfig($,J){let Z=this.getProviderSettings($);if(!Z)return;return x0(Z,J)}getLastUsedProviderConfig($){let J=this.getLastUsedProviderSettings();if(!J)return;return x0(J,$)}async refreshCatalog(){try{await i2({})}catch{}}}L0();VZ();import{getClineEnvironmentConfig as Ow,isOAuthProviderId as _w}from"@cline/shared";var A3="workos:";function Tw($,J){if($==="cline")return`${A3}${J}`;return J}function Nw($,J){if($==="cline"&&J.toLowerCase().startsWith(A3))return J.slice(A3.length);return J}function Mw($){let Z=z0($)?.exp;if(typeof Z==="number"&&Z>0)return Z*1000;return null}function qw($,J){let Z=$.auth?.expiresAt;if(typeof Z==="number"&&Number.isFinite(Z)&&Z>0)return Z;let Q=Mw(J);if(Q)return Q;return Date.now()-1}function yw($,J){let Z=J.auth?.accessToken?.trim(),Q=J.auth?.refreshToken?.trim();if(!Z||!Q)return null;let W=Nw($,Z);if(!W)return null;return{access:W,refresh:Q,expires:qw(J,W),accountId:J.auth?.accountId}}function ww($,J){let Z=$?.expiresAt,Q=J?.expiresAt;return $?.accessToken===J?.accessToken&&$?.refreshToken===J?.refreshToken&&$?.accountId===J?.accountId&&Z===Q}class oZ 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 V3{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new F$,this.telemetry=$?.telemetry}async resolveProviderApiKey($){if(!_w($.providerId))return null;return this.resolveWithSingleFlight($.providerId,$.forceRefresh)}async resolveWithSingleFlight($,J=!1){let Z=this.refreshInFlight.get($);if(Z)return Z;let Q=this.resolveProviderApiKeyInternal($,J).catch((W)=>{throw W}).finally(()=>{this.refreshInFlight.delete($)});return this.refreshInFlight.set($,Q),Q}async resolveProviderApiKeyInternal($,J){let Z=this.providerSettingsManager.getProviderSettings($);if(!Z)return null;let Q=yw($,Z);if(!Q)return null;let W=await this.resolveCredentials($,Z,Q,J);if(!W)throw new oZ($);let f=Tw($,W.access),j={...Z.auth??{},accessToken:f,refreshToken:W.refresh,accountId:W.accountId};j.expiresAt=W.expires;let X={...Z,auth:j},H=!ww(Z.auth,X.auth);if(H)this.providerSettingsManager.saveProviderSettings(X,{setLastUsed:!1,tokenSource:"oauth"});return{providerId:$,apiKey:f,accountId:W.accountId,refreshed:H}}async resolveCredentials($,J,Z,Q){if($==="cline")return pJ(Z,{apiBaseUrl:J.baseUrl?.trim()||Ow().apiBaseUrl,telemetry:this.telemetry},{forceRefresh:Q});if($==="oca")return CJ(Z,{forceRefresh:Q,telemetry:this.telemetry},{mode:J.oca?.mode,telemetry:this.telemetry});return iJ(Z,{forceRefresh:Q,telemetry:this.telemetry})}}import{normalizeUserInput as Sw}from"@cline/shared";import{nanoid as Cw}from"nanoid";class aB{list($){return $?r0($):[]}update($,J){if(!$)return{sessionId:J.sessionId,prompts:[],updated:!1};let Z=J.promptId.trim(),Q=$.pendingPrompts.findIndex((H)=>H.id===Z);if(Q<0)return{sessionId:J.sessionId,prompts:r0($),updated:!1};let W=$.pendingPrompts[Q];if(!W)return{sessionId:J.sessionId,prompts:r0($),updated:!1};let f=J.prompt===void 0?W.prompt:Sw(J.prompt).trim();if(!f)throw Error("prompt cannot be empty");let j=J.delivery??W.delivery,X={...W,prompt:f,mode:J.mode??W.mode,delivery:j};return $.pendingPrompts.splice(Q,1),Ew($,X,Q,W.delivery),{sessionId:J.sessionId,prompts:r0($),prompt:eZ(X),updated:!0}}delete($,J){if(!$)return{sessionId:J.sessionId,prompts:[],removed:!1};let Z=J.promptId.trim(),Q=$.pendingPrompts.findIndex((f)=>f.id===Z);if(Q<0)return{sessionId:J.sessionId,prompts:r0($),removed:!1};let[W]=$.pendingPrompts.splice(Q,1);return{sessionId:J.sessionId,prompts:r0($),prompt:W?eZ(W):void 0,removed:!0}}enqueue($,J){let{prompt:Z,mode:Q,delivery:W,userImages:f,userFiles:j}=J,X=$.pendingPrompts.findIndex((H)=>H.prompt===Z);if(X>=0){let[H]=$.pendingPrompts.splice(X,1),Y={...H,prompt:Z,mode:Q??H.mode,userImages:f??H.userImages,userFiles:j??H.userFiles};if(W==="steer"||H.delivery==="steer")$.pendingPrompts.unshift({...Y,delivery:"steer"});else $.pendingPrompts.push(Y)}else{let H={id:`pending_${Date.now()}_${Cw(5)}`,prompt:Z,mode:Q,delivery:W,userImages:f,userFiles:j};if(W==="steer")$.pendingPrompts.unshift(H);else $.pendingPrompts.push(H)}return r0($)}consumeSteer($){let J=$.pendingPrompts.findIndex((Q)=>Q.delivery==="steer");if(J<0)return{prompts:r0($)};let[Z]=$.pendingPrompts.splice(J,1);return{entry:Z,prompts:r0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:r0($)}}requeueFront($,J){return $.pendingPrompts.unshift(J),r0($)}clear($){return $.pendingPrompts.length=0,[]}}class B3{deps;service=new aB;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let J=this.deps.getSession($.sessionId);if(!J||J.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Z=this.service.update(J,$);return this.emitPrompts(J),this.scheduleDrain($.sessionId,J),Z}delete($){let J=this.deps.getSession($.sessionId);if(!J||J.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Z=this.service.delete(J,$);return this.emitPrompts(J),this.scheduleDrain($.sessionId,J),Z}enqueue($,J){let Z=this.deps.getSession($);if(!Z||Z.aborting)return;this.service.enqueue(Z,J),this.emitPrompts(Z),this.scheduleDrain($,Z)}consumeSteer($){let J=this.deps.getSession($);if(!J)return;let{entry:Z}=this.service.consumeSteer(J);if(!Z)return;return this.emitPrompts(J),this.emitSubmitted(J,Z),Z}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:r0($)}})}scheduleDrain($,J){if(J.pendingPrompts.length===0||J.aborting||J.drainingPendingPrompts||!J.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let J=this.deps.getSession($);if(!J)return;if(J.aborting||J.drainingPendingPrompts)return;if(!J.agent.canStartRun())return;let{entry:Z}=this.service.shiftNext(J);if(!Z)return;this.emitPrompts(J),this.emitSubmitted(J,Z),J.drainingPendingPrompts=!0;let Q=!0;try{await this.deps.send({sessionId:$,prompt:Z.prompt,...Z.mode?{mode:Z.mode}:{},userImages:Z.userImages,userFiles:Z.userFiles})}catch{Q=!1,this.service.requeueFront(J,Z),this.emitPrompts(J)}finally{if(J.drainingPendingPrompts=!1,Q&&J.pendingPrompts.length>0&&J.status!=="failed"&&J.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,J){let Z=eZ(J);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Z.id,prompt:Z.prompt,delivery:Z.delivery,attachmentCount:Z.attachmentCount}})}}function eZ($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0)}}function r0($){return $.pendingPrompts.map(eZ)}function Ew($,J,Z,Q){if(J.delivery==="steer")$.pendingPrompts.unshift(J);else if(Q==="steer")$.pendingPrompts.push(J);else $.pendingPrompts.splice(Z,0,J)}L0();class G3{deps;constructor($){this.deps=$}dispatchAgentEvent($,J,Z){let Q=this.deps.getSession($),W={sessionId:$,config:J,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},f=lQ(Z),j=!!Q&&(!f.agentId||f.agentId===K3(Q.agent));pQ(W,Z,j?{isPrimaryAgentEvent:!0,agentId:K3(Q.agent),conversationId:Q.agent.getConversationId(),...Q?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,J){let Z=this.deps.getSession($);if(Z){if(cW(Z,J),J.type==="agent_event"){let Q={sessionId:$,config:Z.config,liveSession:Z,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};pQ(Q,J.event,{agentId:J.agentId,teamRole:"teammate",teamAgentId:J.agentId,isPrimaryAgentEvent:!1})}if(J.type==="teammate_spawned"){let Q=q$({agentId:J.teammate.runtimeAgentId??J.agentId,conversationId:J.teammate.conversationId,parentAgentId:J.teammate.parentAgentId,createdByAgentId:K3(Z.agent),teamId:Z.runtime.teamRuntime?.getTeamId(),teamName:Z.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:J.agentId});if(Q)v$(Z.config.telemetry,{ulid:$,modelId:J.teammate.modelId??Z.config.modelId,provider:Z.config.providerId,...Q})}}if(await dW($,J,this.deps.invokeBackendOptional),Z)lW(Z,$,J,this.deps.emit)}async handlePluginEvent($,J,Z){if(J.name==="plugin_log"){this.handlePluginLog($,J.payload);return}if(J.name==="automation_event"){let H=this.deps.getSession($)?.config.extensionContext?.automation??Z;if(!H)return;let Y=J.payload&&typeof J.payload==="object"?J.payload:void 0;if(!Y)return;await H.ingestEvent(Y);return}if(J.name!=="steer_message"&&J.name!=="queue_message"&&J.name!=="pending_prompt")return;let Q=J.payload&&typeof J.payload==="object"?J.payload:void 0,W=typeof Q?.sessionId==="string"&&Q.sessionId.trim().length>0?Q.sessionId.trim():$,f=typeof Q?.prompt==="string"?Q.prompt.trim():"";if(!f)return;let j=J.name==="steer_message"?"steer":J.name==="queue_message"?"queue":Q?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(W,{prompt:f,delivery:j})}handlePluginLog($,J,Z){let Q=this.deps.getSession($),W=Z??Q?.config.extensionContext?.logger??Q?.config.logger;if(!W||!J||typeof J!=="object")return;let f=J,j=typeof f.message==="string"?f.message:"";if(!j)return;let X=f.metadata&&typeof f.metadata==="object"?{...f.metadata}:{};if(X.sessionId??=$,typeof f.pluginName==="string"&&f.pluginName)X.pluginName=f.pluginName;if(f.level==="debug"){W.debug(j,X);return}if(f.level==="error"){if(W.error)W.error(j,X);else W.log(j,{...X,severity:"error"});return}W.log(j,X)}}function K3($){return $.getAgentId()}function F3($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:t$($.config),teamName:$.config.teamName?.trim()||void 0,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,parentSessionId:typeof $.sessionMetadata?.parentSessionId==="string"?$.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof $.sessionMetadata?.parentAgentId==="string"?$.sessionMetadata.parentAgentId:void 0,agentId:typeof $.sessionMetadata?.agentId==="string"?$.sessionMetadata.agentId:void 0,conversationId:typeof $.sessionMetadata?.conversationId==="string"?$.sessionMetadata.conversationId:void 0,isSubagent:typeof $.sessionMetadata?.isSubagent==="boolean"?$.sessionMetadata.isSubagent:!1,prompt:$.pendingPrompt,metadata:$.sessionMetadata,messagesPath:$.artifacts?.messagesPath,updatedAt:$.updatedAt??$.endedAt??$.startedAt}}function U3($,J){let Z=$[J];return typeof Z==="function"?Z:null}async function tB($,J,...Z){let Q=U3($,J);if(!Q)throw Error(`session service method not available: ${J}`);return Promise.resolve(Q.apply($,Z))}async function sB($,J,...Z){let Q=U3($,J);if(!Q)return;await Promise.resolve(Q.apply($,Z))}async function oB($,J,...Z){let Q=U3($,J);if(!Q)return;return await Promise.resolve(Q.apply($,Z))}y$();L0();function R3($,J,Z,Q){return n$({configProvider:{getRuntimeConfig:()=>$.getSession(Z)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:J.providerId,modelId:J.modelId,cwd:J.cwd,apiKey:J.apiKey,baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking,maxIterations:J.maxIterations,hooks:J.hooks,extensions:J.extensions,logger:J.logger,telemetry:J.telemetry},getConnectionConfig:()=>$.getSession(Z)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:J.providerId,modelId:J.modelId,apiKey:J.apiKey,baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let f=J.enableTools?S1({cwd:J.cwd,...k0[N$({mode:J.mode})],executors:Q}):[];if(J.enableSpawnAgent)f.push(R3($,J,Z,Q));return k1(f)},onSubAgentEvent:(f)=>$.onAgentEvent(Z,J,f),onSubAgentStart:(f)=>{let j=$.getSession(Z)?.runtime.teamRuntime;$.subAgentStarts.set(f.subAgentId,{startedAt:Date.now(),rootSessionId:Z});let X=q$({agentId:f.subAgentId,conversationId:f.conversationId,parentAgentId:f.parentAgentId,teamId:j?.getTeamId(),teamName:j?.getTeamName(),createdByAgentId:f.parentAgentId});if(X)v$(J.telemetry,{ulid:Z,modelId:J.modelId,provider:J.providerId,...X});x8(J.telemetry,{event:"started",ulid:Z,durationMs:0,parentId:f.parentAgentId,agentId:f.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",Z,f)},onSubAgentEnd:(f)=>{let j=$.getSession(Z)?.runtime.teamRuntime,X=$.subAgentStarts.get(f.subAgentId),H=X?Date.now()-X.startedAt:0,Y=f.result?.text?f.result.text.split(`
719
- `).length:0;x8(J.telemetry,{event:"ended",ulid:Z,durationMs:H,outputLines:Y,errorMessage:f.error?String(f.error):void 0,agentId:f.subAgentId,parentId:f.parentAgentId,...q$({agentId:f.subAgentId,conversationId:f.conversationId,parentAgentId:f.parentAgentId,teamId:j?.getTeamId(),teamName:j?.getTeamName(),createdByAgentId:f.parentAgentId})}),$.subAgentStarts.delete(f.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Z,f)}})}import{readFile as hw,stat as bw}from"node:fs/promises";var kw=20480000;async function eB($){let J=await bw($);if(!J.isFile())throw Error("Path is not a file");if(J.size>kw)throw Error("File is too large to read into context.");let Z=await hw($,"utf8");if(Z.includes("\x00"))throw Error("Cannot read binary file into context.");return Z}var $K=5000;function s4($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function dw($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$,Z=s4(J.inputTokens),Q=s4(J.outputTokens),W=s4(J.cacheReadTokens),f=s4(J.cacheWriteTokens),j=s4(J.totalCost);if(Z===void 0||Q===void 0||W===void 0||f===void 0||j===void 0)return;return{inputTokens:Z,outputTokens:Q,cacheReadTokens:W,cacheWriteTokens:f,totalCost:j}}function lw($,J){return{inputTokens:Math.max($.inputTokens,J.inputTokens),outputTokens:Math.max($.outputTokens,J.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,J.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,J.cacheWriteTokens),totalCost:Math.max($.totalCost,J.totalCost)}}class G${runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new O4;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new U1;constructor($){let J=xw();if(J)cw(J);let Z=f2($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new C8,this.createAgentInstance=$.createAgent??((Q)=>new i$(Q)),this.defaultCapabilities=R0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new F$,this.oauthTokenManager=$.oauthTokenManager??new V3({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Z),this.defaultFetch=$.fetch,this.pendingPromptsController=new B3({getSession:(Q)=>this.sessions.get(Q),emit:(Q)=>this.emit(Q),send:(Q)=>this.runTurn(Q)}),this.pendingPrompts={list:async(Q)=>this.pendingPromptsController.list(Q.sessionId),update:async(Q)=>this.pendingPromptsController.update(Q),delete:async(Q)=>this.pendingPromptsController.delete(Q)},this.eventBridge=new G3({getSession:(Q)=>this.sessions.get(Q),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(Q)=>this.emit(Q),persistMessages:(Q,W,f)=>{this.invoke("persistSessionMessages",Q,W,f)},enqueuePendingPrompt:(Q,W)=>this.pendingPromptsController.enqueue(Q,W),invokeBackendOptional:(Q,...W)=>this.invokeOptional(Q,...W)})}async startSession($){let J=$.source??G0.CLI,Z=s(),Q=$.config.sessionId?.trim()??"",W=Q||gw(),f=$,j=f.initialMessages??[],X=j.length>0?E2(j):B0(),H=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!H)throw Error("session service method not available: ensureSessionsDir");let Y=D3(H,W),A=D3(Y,`${W}.messages.json`),V=D3(Y,`${W}.json`),B=t$($.config),K=M0.parse({version:1,session_id:W,source:J,pid:process.pid,started_at:Z,status:"running",interactive:$.interactive===!0,provider:f.config.providerId,model:f.config.modelId,cwd:f.config.cwd,workspace_root:B,team_name:f.config.teamName,enable_tools:f.config.enableTools,enable_spawn:f.config.enableSpawnAgent,enable_teams:f.config.enableAgentTeams,prompt:f.prompt?.trim()||void 0,messages_path:A}),G;if(Q.length>0&&j.length>0&&!f.prompt?.trim()){let k=await this.invokeOptionalValue("readSessionManifest",W);if(k)K=k,G={manifestPath:V,messagesPath:k.messages_path||A,manifest:k}}let F=await this.seedAggregateUsageFromArtifacts({initialUsage:X,sessionDir:Y,rootMessagesPath:G?.messagesPath??A,manifest:K});this.usageBySession.set(W,X),this.aggregateUsageBySession.set(W,F);let U=R0(this.defaultCapabilities,$.capabilities),R=U?.toolExecutors??this.toolExecutors,O=$.localRuntime,_=O?.extensionContext?.logger??O?.logger,P=O?.extensionContext?.automation,z;z=await oX({input:f,localRuntime:$.localRuntime,sessionId:W,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:U,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(k)=>{if(k.name==="plugin_log"){this.eventBridge.handlePluginLog(W,k.payload,_);return}this.eventBridge.handlePluginEvent(W,k,P)},onTeamEvent:(k)=>{this.eventBridge.handleTeamEvent(W,k),z.config.onTeamEvent?.(k)},createSpawnTool:()=>R3({getSession:(k)=>this.sessions.get(k),subAgentStarts:this.subAgentStarts,onAgentEvent:(k,P0,n)=>this.eventBridge.dispatchAgentEvent(k,P0,n),invokeBackendOptional:(k,...P0)=>this.invokeOptional(k,...P0)},z.config,W,R),readSessionMetadata:async()=>(await this.getSession(W))?.metadata,writeSessionMetadata:async(k)=>{await this.persistSessionMetadata(W,()=>k)}});let T=await this.runtimeBuilder.build(z.runtimeBuilderInput),y=z.config,$0=z.providerConfig;if(T.teamRuntime&&!y.teamName?.trim())y.teamName=T.teamRuntime.getTeamName();let A0=[...T.tools,...y.extraTools??[]],o=T.extensions??z.extensions,V0={sessionId:W,providerId:$0.providerId,modelId:$0.modelId,apiKey:$0.apiKey,baseUrl:$0.baseUrl,headers:$0.headers,knownModels:$0.knownModels,providerConfig:$0,thinking:y.thinking,reasoningEffort:y.reasoningEffort??$0.reasoningEffort,systemPrompt:y.systemPrompt,maxIterations:y.maxIterations,execution:y.execution,prepareTurn:d8(y),tools:A0,hooks:z.hooks,extensions:o,hookErrorMode:y.hookErrorMode,initialMessages:z.effectiveInput.initialMessages,userFileContentLoader:eB,toolPolicies:z.toolPolicies,requestToolApproval:z.requestToolApproval?async(k)=>{let P0=z.requestToolApproval,n=this.sessions.get(W);if(n)await this.markTurnPending(n);try{if(!P0)return{approved:!1,reason:"Tool approval callback is not configured."};return await P0(k)}finally{let n0=this.sessions.get(W);if(n0?.status==="pending")await this.markTurnRunning(n0)}}:void 0,telemetry:y.telemetry,onConsecutiveMistakeLimitReached:y.onConsecutiveMistakeLimitReached,completionPolicy:T.completionPolicy,consumePendingUserMessage:()=>{let k=this.pendingPromptsController.consumeSteer(W);return k?b4(k.prompt,k.mode??y.mode):void 0},logger:T.logger??y.logger,extensionContext:y.extensionContext,onEvent:(k)=>this.eventBridge.dispatchAgentEvent(W,y,k)};V0.hooks={...V0.hooks,onEvent:async(k)=>{if(await z.hooks?.onEvent?.(k),k.type!=="assistant-message")return;let P0=this.sessions.get(W);if(!P0)return;let n=P0.agent.getMessages();try{await this.invoke("persistSessionMessages",W,n,y.systemPrompt)}catch(n0){y.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:W,error:n0}),G2(y.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:n0,severity:"warn",handled:!0,context:{sessionId:W,providerId:y.providerId,modelId:y.modelId}})}}};let i=this.createAgentInstance(V0);if(V0.onEvent)i.subscribeEvents(V0.onEvent);T.registerLeadAgent?.(i);let $$=q$({agentId:i.getAgentId(),conversationId:i.getConversationId(),teamId:T.teamRuntime?.getTeamId(),teamName:T.teamRuntime?.getTeamName(),teamRole:T.teamRuntime?"lead":void 0});if($H(y,W,Q.length>0,B,$$),$$)v$(y.telemetry,{ulid:W,modelId:y.modelId,provider:y.providerId,...$$});if(T.teamRuntime)B6(y.telemetry,{ulid:W,teamId:T.teamRuntime.getTeamId(),teamName:T.teamRuntime.getTeamName(),leadAgentId:i.getAgentId(),restoredFromPersistence:T.teamRestoredFromPersistence===!0});let p={sessionId:W,config:y,sessionMetadata:f.sessionMetadata,...G?{artifacts:G}:{},source:J,startedAt:G?.manifest.started_at??Z,updatedAt:G?.manifest.ended_at??G?.manifest.started_at??Z,pendingPrompt:K.prompt,runtime:T,agent:i,started:!1,status:G?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:j,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:z.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(this.sessions.set(W,p),this.emitStatus(W,"running"),j.length>0&&!G){if(await this.ensureSessionPersisted(p),await this.invoke("persistSessionMessages",p.sessionId,j,p.config.systemPrompt),!f.prompt?.trim())await this.updateStatus(p,"completed",0)}let i0;try{if(f.prompt?.trim())if(i0=await this.executeTurn(p,{prompt:f.prompt,userImages:f.userImages,userFiles:f.userFiles}),!p.interactive)await this.finalizeSingleRun(p,i0.finishReason);else await this.completeInteractiveTurn(p,i0.finishReason)}catch(k){if(p.interactive&&p.aborting)i0=await this.completeAbortedInteractiveTurn(p);else throw G2(p.config.telemetry,{component:"core",operation:"session.start",error:k,severity:"error",handled:!1,context:{sessionId:p.sessionId,providerId:p.config.providerId,modelId:p.config.modelId}}),await this.failSession(p),k}return{sessionId:W,manifest:K,manifestPath:V,messagesPath:A,result:i0}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(J)=>this.getSession(J),readMessages:(J)=>this.readSessionMessages(J),buildStartInput:(J,Z)=>{let Q=J.restoredCheckpointMetadata?{...Z.sessionMetadata??{},checkpoint:J.restoredCheckpointMetadata}:Z.sessionMetadata;return{...Z,...Q?{sessionMetadata:Q}:{},initialMessages:J.initialMessages}},startSession:(J)=>this.startSession(J),getStartedSessionId:(J)=>J.sessionId,readRestoredSession:(J)=>this.getSession(J)})}async runTurn($){let J=this.getSessionOrThrow($.sessionId),Z=J.agent.canStartRun(),Q=$.delivery??(J.interactive&&!Z?"queue":void 0);if(J.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:Q??"immediate"}}),Q==="queue"||Q==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:Q,userImages:$.userImages,userFiles:$.userFiles});return}try{let W=await this.executeTurn(J,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!J.interactive)await this.finalizeSingleRun(J,W.finishReason);else await this.completeInteractiveTurn(J,W.finishReason);if(W.finishReason==="error"||W.finishReason==="aborted")return W;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),W}catch(W){if(J.interactive&&J.aborting)return await this.completeAbortedInteractiveTurn(J);throw G2(J.config.telemetry,{component:"core",operation:"session.submit",error:W,severity:"error",handled:!1,context:{sessionId:J.sessionId,providerId:J.config.providerId,modelId:J.config.modelId}}),await this.failSession(J),W}}async getAccumulatedUsage($){let J=RW(this.usageBySession.get($)),Z=RW(this.aggregateUsageBySession.get($));return J||Z?{usage:J,aggregateUsage:Z}:void 0}async abort($,J){let Z=this.sessions.get($);if(!Z)return;Z.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Z.aborting=!0,this.pendingPromptsController.clearAborted(Z),Z.agent.abort(J)}async stopSession($){let J=this.sessions.get($);if(!J)return;if(J.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),J.interactive&&!Q0(J.status)){await this.releaseSessionRuntime(J,"session_stop");return}if(J.interactive&&J.agent.canStartRun()){await this.shutdownSession(J,{status:this.resolveInteractiveStopStatus(J),exitCode:this.resolveInteractiveStopExitCode(J),shutdownReason:"session_stop",endReason:"stopped"});return}J.aborting=!0,J.agent.abort(Error("session_stop")),await this.shutdownSession(J,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let J=[...this.sessions.values()];if(J.length===0)return;await Promise.allSettled(J.map((Z)=>Z.interactive&&!Q0(Z.status)?this.releaseSessionRuntime(Z,$):Z.interactive&&Z.agent.canStartRun()?this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let J=this.sessions.get($);if(J)return F3(J);let Z=$.trim();if(!Z)return;let Q=await this.getRow(Z);if(Q)return KJ(Q);let W=await this.readManifest(Z);return W?$Z(W):void 0}async listSessions($=200){let Z=(await this.listRows($)).map(KJ),Q=new Set(Z.map((W)=>W.sessionId));for(let W of this.sessions.values()){if(Q.has(W.sessionId))continue;Z.unshift(F3(W))}return Z.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let J=await this.invoke("deleteSession",$);if(J.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return J.deleted}async updateSession($,J){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:J.prompt,metadata:J.metadata,title:J.title}))?.updated===!0}}async readSessionMessages($){let J=$.trim();if(!J)return[];let Z=await this.getRow(J);if(Z?.messagesPath)return Y1(Z.messagesPath);let Q=await this.readManifest(J);return Y1(Q?.messages_path)}async dispatchHookEvent($){await EY($,{queueSpawnRequest:(J)=>this.invokeOptional("queueSpawnRequest",J),upsertSubagentSessionFromHook:(J)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",J),appendSubagentHookAudit:(J,Z)=>this.invokeOptional("appendSubagentHookAudit",J,Z),applySubagentStatus:(J,Z)=>this.invokeOptional("applySubagentStatus",J,Z)})}subscribe($,J){return this.events.subscribe($,J)}async updateSessionModel($,J){let Z=this.getSessionOrThrow($);Z.config.modelId=J,Z.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:J}),Z.agent.updateConnection({modelId:J})}handlePluginEvent($,J,Z){return this.eventBridge.handlePluginEvent($,J,Z)}async executeTurn($,J){let Z=await this.prepareTurnInput($,J),Q=Z.prompt.trim();if(!Q)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=Q;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let W=await this.executeAgentTurn($,Q,Z.userImages,Z.userFiles);while(pW($,W.finishReason)){let f=await rW($);if(f.length===0)break;let j=iW($,f);W=await this.executeAgentTurn($,j)}return W}async completeInteractiveTurn($,J){if(h4($))return;$.lastInteractiveTurnFinishReason=J,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let J=$.lastInteractiveTurnFinishReason;if(!J)return"cancelled";switch(J){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return J}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let J=new Date,Z=$.agent.getMessages(),Q=B0();return $.persistedMessages=Z,$.started=$.started||Z.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:Q}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:Q,messages:Z,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:J,endedAt:J,durationMs:0}}async executeAgentTurn($,J,Z,Q){let W=$.started||$.agent.getMessages().length>0,f=$.persistedMessages??$.agent.getMessages(),j=this.usageBySession.get($.sessionId)??B0(),X=this.aggregateUsageBySession.get($.sessionId)??j;$.turnUsageBaseline=j,$.turnAggregateUsageBaseline=X,$.turnPrimaryUsage=B0(),$.turnUsageByAgent=new Map,f6($.config.telemetry,$.sessionId,$.config.mode),R2($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let H=W?()=>$.agent.continue(J,Z,Q):()=>$.agent.run(J,Z,Q),Y=await this.runWithAuthRetry($,H,f);$.started=!0;let A=E6(Y.messages,Y,f);$.persistedMessages=A;let V=FJ($.turnUsageByAgent?.values()??[]),B=X0(j,Y.usage),K=X0(X0(B0(),Y.usage),V),G=X0(X,K);return this.usageBySession.set($.sessionId,B),this.aggregateUsageBySession.set($.sessionId,G),await this.persistSessionMetadata($.sessionId,(D)=>({...D??{},totalCost:B.totalCost,aggregatedAgentsCost:G.totalCost,usage:B,aggregateUsage:G})),await this.invoke("persistSessionMessages",$.sessionId,A,$.config.systemPrompt),this.observeTaskCompletionTool($,Y),Y}catch(H){throw G2($.config.telemetry,{component:"core",operation:"session.turn",error:H,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),H}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,J){if($.submitAndExitObserved)return;if(!J.toolCalls.some((Q)=>Q.name===Z0.SUBMIT_AND_EXIT&&Q.error===void 0))return;$.submitAndExitObserved=!0,k8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,J){let Z=t$($.config),Q=uw(J.prompt).trim();if(!Q)return{prompt:"",userImages:J.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,J.userFiles)};let W=await L2(Q,Z);JH($.config.telemetry,W);let f=b4(W.prompt,J.mode??$.config.mode),j=this.resolveAbsoluteFilePaths($.config.cwd,J.userFiles),X=this.resolveAbsoluteFilePaths(Z,W.matchedFiles),H=Array.from(new Set([...j,...X]));return{prompt:f,userImages:J.userImages,userFiles:H.length>0?H:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let J=t$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:J,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,J){let Z=this.sessions.get($),Q=await this.invokeOptionalValue("readSessionManifest",$)??Z?.artifacts?.manifest,W=J(Q?.metadata);if(!Z?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:W}))?.updated===!1)return;Z.sessionMetadata=W,Z.artifacts.manifest.metadata=W}async finalizeSingleRun($,J){if(h4($))return;let Z=J==="aborted"||$.aborting,Q=J==="error";await this.shutdownSession($,{status:Z?"cancelled":Q?"failed":"completed",exitCode:Q?1:0,shutdownReason:Q?"session_error":"session_complete",endReason:J})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,J){if(J.status==="completed"&&!$.submitAndExitObserved)k8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});KZ($);let Z=[],Q=(W,f)=>{Z.push(f),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:W,error:f,severity:"warn"}),G2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:f,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,status:J.status,shutdownReason:J.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,J.status,J.exitCode)}catch(W){Q("update_status",W)}try{await $.agent.shutdown(J.shutdownReason)}catch(W){Q("agent_shutdown",W)}}try{await Promise.resolve($.runtime.shutdown(J.shutdownReason))}catch(W){Q("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){Q("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:J.endReason,ts:Date.now()}}),Z.length>0&&J.status==="failed")throw Z[0]}async releaseSessionRuntime($,J){let Z=[],Q=(W,f)=>{Z.push(f),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:W,error:f,severity:"warn"}),G2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:f,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,reason:J,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(J)}catch(W){Q("agent_shutdown",W)}try{await Promise.resolve($.runtime.shutdown(J))}catch(W){Q("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){Q("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),Z.length>0)throw Z[0]}async updateStatus($,J,Z){if(!$.artifacts)return;let Q=await this.invoke("updateSessionStatus",$.sessionId,J,Z);if(!Q.updated)return;let W=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(W.status=J,Q0(J))delete W.ended_at,W.exit_code=null;else W.ended_at=Q.endedAt??s(),W.exit_code=typeof Z==="number"?Z:null;$.artifacts.manifest=W,$.status=J,$.updatedAt=Q.endedAt??s(),$.endedAt=Q0(J)?null:W.ended_at,$.exitCode=W.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,W),this.emitStatus($.sessionId,J)}async runWithAuthRetry($,J,Z){try{return await J()}catch(Q){if(!vw(Q,$.config.providerId))throw Q;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Z),J()}}async syncOAuthCredentials($,J){let Z=null;try{Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:J?.forceRefresh})}catch(Q){if(Q instanceof oZ)throw Error(`${Q.providerId} requires re-authentication.`);throw Q}if(!Z?.apiKey||$.config.apiKey===Z.apiKey)return;$.config.apiKey=Z.apiKey,$.agent.updateConnection({apiKey:Z.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Z.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Z.apiKey})}getSessionOrThrow($){let J=this.sessions.get($);if(!J){let Z=Error(`session not found: ${$}`);throw G2(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Z,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Z}return J}resolveAbsoluteFilePaths($,J){if(!J||J.length===0)return[];let Z=J.map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>mw(Q)?Q:P3($,Q));return Array.from(new Set(Z))}getSessionAgentTelemetryIdentity($){return q$({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let J=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Z=X0($.initialUsage,J);return this.withPersistedAggregateUsageFloor(Z,$.manifest)}async summarizePersistedTeammateUsage($,J,Z){let Q=P3(J),W=`${Z}.messages.json`,f;try{f=Iw($)}catch{return B0()}let j=B0();for(let X of f){if(!X.endsWith(".messages.json"))continue;if(X===W)continue;let H=P3($,X);if(H===Q)continue;let Y=await Y1(H);if(Y.length===0)continue;j=X0(j,E2(Y))}return j}withPersistedAggregateUsageFloor($,J){let Z=dw(J.metadata?.aggregateUsage);if(Z)return lw($,Z);let Q=J.metadata?.aggregatedAgentsCost;if(typeof Q!=="number"||!Number.isFinite(Q)||Q<=$.totalCost)return $;return{...$,totalCost:Q}}emitStatus($,J){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:J}})}async emitSessionSnapshot($){let J=await this.getSession($);if(!J)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:Y$({session:J,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),$K))}async getRow($){let J=$.trim();if(!J)return;return(await this.listRows($K)).find((Q)=>Q.sessionId===J)}async readManifest($){let J=$.trim();if(!J)return;return await this.invokeOptionalValue("readSessionManifest",J)}invoke($,...J){return tB(this.sessionService,$,...J)}invokeOptional($,...J){return sB(this.sessionService,$,...J)}invokeOptionalValue($,...J){return oB(this.sessionService,$,...J)}}function rw($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((J)=>({name:J.name,input:J.input,output:J.output,error:J.error,durationMs:J.durationMs}))}}function iw($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function qZ($={}){let J=new G$({sessionService:new K$(new V$),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Z){let Q=(Z.cwd?.trim()||Z.workspaceRoot).trim(),W=await J.startSession({source:Z.source?.trim()||G0.CLI,interactive:!1,config:{providerId:pw(Z.provider),modelId:Z.model,apiKey:Z.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:iw(Z),maxIterations:Z.maxIterations,enableTools:Z.enableTools!==!1,enableSpawnAgent:Z.enableSpawn!==!1,enableAgentTeams:Z.enableTeams!==!1,disableMcpSettingsTools:Z.disableMcpSettingsTools,missionLogIntervalSteps:Z.missionStepInterval,missionLogIntervalMs:Z.missionTimeIntervalMs},toolPolicies:Z.toolPolicies??{"*":{autoApprove:Z.autoApproveTools!==!1}},localRuntime:{configExtensions:Z.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(Z,Q){let W=await J.runTurn({sessionId:Z,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((f)=>f.content)});if(!W)throw Error("local hub schedule runtime returned no turn result");return{result:rw(W)}},async abortSession(Z){return await J.abort(Z,Error("hub schedule abort")),{applied:!0}},async stopSession(Z){return await J.stopSession(Z),{applied:!0}}}}nw(process.env.CLINE_VCR);function aw($){let J=process.cwd(),Z,Q,W;for(let f=0;f<$.length;f+=1){let j=$[f],X=$[f+1];if(j==="--cwd"&&X){J=X,f+=1;continue}if(j==="--host"&&X){Z=X,f+=1;continue}if(j==="--port"&&X){let H=Number(X);if(Number.isFinite(H))Q=H;f+=1;continue}if(j==="--pathname"&&X)W=X,f+=1}return{cwd:J,host:Z,port:Q,pathname:W}}async function tw(){let $=aw(process.argv.slice(2));process.chdir($.cwd);let J=c0({host:$.host,port:$.port,pathname:$.pathname}),Z=await V2({host:J.host,port:J.port,pathname:J.pathname,owner:Y0(),runtimeHandlers:qZ(),cronOptions:{workspaceRoot:$.cwd}}),Q=async()=>{await Z.close(),process.exit(0)},W=!1,f=(j,X)=>{if(W)return;W=!0;let H=X instanceof Error?X.stack||X.message:String(X);process.stderr.write(`[hub-daemon] ${j}: ${H}
720
- `),Z.close().catch((Y)=>{let A=Y instanceof Error?Y.stack||Y.message:String(Y);process.stderr.write(`[hub-daemon] shutdown after ${j} failed: ${A}
721
- `)}).finally(()=>{process.exit(1)})};process.on("SIGINT",()=>{Q()}),process.on("SIGTERM",()=>{Q()}),process.on("uncaughtException",(j)=>{f("uncaughtException",j)}),process.on("unhandledRejection",(j)=>{f("unhandledRejection",j)}),await new Promise(()=>{})}tw().catch(($)=>{let J=$ instanceof Error?$.stack||$.message:String($);process.stderr.write(`[hub-daemon] fatal: ${J}
711
+ version = team_outcome_fragments.version + 1`,[Z,W.outcomeId,W.id,W.section,W.sourceAgentId,W.sourceRunId??null,W.content,W.status,W.reviewedBy??null,W.reviewedAt?W.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,f){let J=m2($),Z=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[J]);if(Z.length===0)return[];let Q=cW();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
712
+ WHERE team_name = ? AND status IN ('queued', 'running')`,[f,Q,J]),Z.map((W)=>W.run_id)}handleTeamEvent($,f){this.appendTeamEvent($,f.type,f)}}function dW($={}){try{let f=new Lf($);return f.init(),f}catch{let f=new Z4({teamDir:$.teamDir});return f.init(),f}}function u5($,f){return hy($,f)}function Ey($,f){let J=f?.["*"]??{},Z=f?.[$]??{};return{...J,...Z}.enabled!==!1}function by($,f){return $.filter((J)=>Ey(J.name,f))}function zB($,f){return c1(by($,f))}function c5(){return`team-${Cy(5)}`}function lW($,f,J,Z,Q,W,j,X){let H=k0[q$({mode:J})],Y=hf(f,Z,J,Q??Sf);return zB(x1({cwd:$,...H,enableSkills:!!j,...Y,executors:{...j?{skills:j}:{},...X??{}}}),W)}function ky($){return lW($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,Iy,$.toolExecutors).some((f)=>f.name==="skills")}var Iy=async()=>"";async function xy($){let f=z0();if(!E$({filePath:f}))return{tools:[]};let J=new Qf({clientFactory:G2({settingsPath:f})}),Z;try{Z=await Zf(J,{filePath:f})}catch(X){await J.dispose().catch(()=>{});let H=X instanceof Error?X.message:String(X);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${H}`),{tools:[]}}let Q=Z.filter((X)=>X.disabled!==!0),W=await Promise.allSettled(Q.map((X)=>P2({serverName:X.name,provider:J}))),j=[];for(let[X,H]of W.entries())if(H.status==="fulfilled")j.push(...H.value);else{let Y=H.reason instanceof Error?H.reason.message:String(H.reason);$?.log(`[mcp] Failed to load tools from MCP server "${Q[X].name}", skipping: ${Y}`)}return{tools:j,shutdown:async()=>{await J.dispose()}}}function my($,f){if(!$)return;for(let J of $.getTeammateIds())try{$.shutdownTeammate(J,f)}catch{}}function gy($){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 vy($){let f=k0[q$({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??f.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??f.enableAgentTeams??!0,disableMcpSettingsTools:$.disableMcpSettingsTools===!0,yolo:$.yolo===!0,missionLogIntervalSteps:typeof $.missionLogIntervalSteps==="number"&&Number.isFinite($.missionLogIntervalSteps)?$.missionLogIntervalSteps:3,missionLogIntervalMs:typeof $.missionLogIntervalMs==="number"&&Number.isFinite($.missionLogIntervalMs)?$.missionLogIntervalMs:120000}}class g2{teamRuntimeEntries=new Map;async build($){let{config:f,hooks:J,extensions:Z,logger:Q,telemetry:W,createSpawnTool:j,onTeamRestored:X,userInstructionService:H,configExtensions:Y,toolExecutors:A}=$,V=$.onTeamEvent??(()=>{}),B=vy(f),K=j$(),G=[],R=f.teamName?.trim()||c5(),P=f.sessionId?.trim()||R,F=u5(Y,"rules"),U=u5(Y,"skills"),z=u5(Y,"workflows"),O=u5(Y,"plugins"),D=F||U||z,_=!1,N=Boolean(H),q=H,$0;if(!q&&D)q=V1({skills:U?{workspacePath:f.cwd,includePluginSkills:O,pluginSkillDirectories:O?$.pluginSkillDirectories:void 0,pluginPaths:f.pluginPaths,cwd:f.cwd}:{workspacePath:f.cwd},rules:{workspacePath:f.cwd},workflows:{workspacePath:f.cwd}});if(q)await q.start().catch(()=>{});let A0=B.enableTools&&U&&Boolean(q)&&q?.hasConfiguredSkills(f.skills)===!0&&ky({cwd:f.cwd,providerId:f.providerId,mode:B.mode,modelId:f.modelId,toolRoutingRules:f.toolRoutingRules,toolPolicies:f.toolPolicies,toolExecutors:A}),o=q&&D?q.createExtension({includeRules:F,includeSkills:U,includeWorkflows:z,registerSkillsTool:A0,allowedSkillNames:f.skills}):void 0,V0=o?[...Z??f.extensions??[],o]:Z??f.extensions;if(B.enableTools){if(G.push(...lW(f.cwd,f.providerId,B.mode,f.modelId,f.toolRoutingRules,f.toolPolicies,void 0,A)),!B.disableMcpSettingsTools){let r=await xy(f.logger);G.push(...r.tools),$0=r.shutdown}}let i,Z$=B.enableAgentTeams?dW():void 0,p=Z$?.loadRuntime(P),a0=p?.state,k=p?.teammates??[],D0=new Map(k.map((r)=>[r.agentId,r])),n=f.sessionId||R,t0,T1=[],N1=!1,Of=Ef({providerId:f.providerId,modelId:f.modelId,cwd:f.cwd,apiKey:f.apiKey??"",baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking,maxIterations:f.maxIterations,hooks:J,extensions:V0,logger:Q??f.logger,telemetry:$.telemetry??f.telemetry,workspaceMetadata:f.workspaceMetadata});if(!this.teamRuntimeEntries.has(n))this.teamRuntimeEntries.set(n,{delegatedAgentConfigProvider:Of});let d2=()=>{if(!B.enableAgentTeams)return;let r=this.teamRuntimeEntries.get(n)??{delegatedAgentConfigProvider:Of};if(this.teamRuntimeEntries.set(n,r),i=r.runtime,!i){if(i=new Gf({teamName:R,leadAgentId:f.sessionId||"lead",missionLogIntervalSteps:B.missionLogIntervalSteps,missionLogIntervalMs:B.missionLogIntervalMs,onTeamEvent:(f0)=>{if(V(f0),i&&Z$){if(f0.type==="teammate_spawned"&&f0.teammate?.rolePrompt){let D$={agentId:f0.agentId,rolePrompt:f0.teammate.rolePrompt,modelId:f0.teammate.modelId,maxIterations:f0.teammate.maxIterations};D0.set(D$.agentId,D$)}if(f0.type==="teammate_shutdown"&&!gy(f0.reason))D0.delete(f0.agentId);Z$.handleTeamEvent(P,f0),Z$.persistRuntime(P,i.exportState(),Array.from(D0.values()))}}}),a0)i.hydrateState(a0),N1=!0;r.runtime=i}if(!_){if(!i)return;_=!0;let f0=If({runtime:i,leadAgentId:f.sessionId||"lead",restoredFromPersistence:Boolean(a0),restoredTeammates:k,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(D$)=>{T1=D$,t0?.addTools(D$)},createBaseTools:B.enableTools?()=>lW(f.cwd,f.providerId,B.mode,f.modelId,f.toolRoutingRules,f.toolPolicies,void 0,A):void 0,teammateConfigProvider:Of});if(N1)i.recoverActiveRuns("runtime_recovered");if(f0.restoredFromPersistence)X?.();G.push(...f0.tools)}return i};if(B.enableSpawnAgent&&j){let r=j();G.push({...r,execute:async(f0,D$)=>{return d2(),r.execute(f0,D$)}})}if(B.enableAgentTeams)d2();let H4=zB(G,f.toolPolicies),VZ=H4.some((r)=>r.name===J0.SUBMIT_AND_EXIT&&r.lifecycle?.completesRun===!0),Tf=B.enableAgentTeams?()=>{let r=this.teamRuntimeEntries.get(n)?.runtime;if(!r)return;let f0=r.listTasks(),D$=f0.some((d$)=>d$.status==="in_progress"||d$.status==="pending"),g7=r.listRuns({}),OK=g7.some((d$)=>d$.status==="running"||d$.status==="queued");if(D$||OK){let d$=f0.filter((h0)=>h0.status==="in_progress"||h0.status==="pending").map((h0)=>`${h0.id} (${h0.status}): ${h0.title}`).join(", "),v7=g7.filter((h0)=>h0.status==="running"||h0.status==="queued").map((h0)=>`${h0.id} (${h0.status})`).join(", "),BZ=[];if(d$)BZ.push(`Unfinished tasks: ${d$}`);if(v7)BZ.push(`Active runs: ${v7}`);return`[SYSTEM] You still have team obligations. ${BZ.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,l2=VZ?{requireCompletionTool:!0,...Tf?{completionGuard:Tf}:{}}:Tf?{completionGuard:Tf}:void 0;return{tools:H4,logger:Q??f.logger,telemetry:W??f.telemetry,teamRuntime:i,teamRestoredFromPersistence:Boolean(a0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(n)?.delegatedAgentConfigProvider??Of,extensions:V0,completionPolicy:l2,registerLeadAgent:(r)=>{if(t0=r,T1.length>0)r.addTools(c1(T1,[...K]))},shutdown:async(r)=>{if(my(i,r),this.teamRuntimeEntries.delete(n),await $0?.(),!N)q?.stop()}}}}var NB={};w(NB,{requestDesktopToolApproval:()=>rW});import{mkdir as uy,readFile as cy,unlink as dy,writeFile as ly}from"node:fs/promises";import{join as TB}from"node:path";function py($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function ry($){return new Promise((f)=>setTimeout(f,$))}async function pW($){try{await dy($)}catch{}}async function rW($,f={}){let J=f.approvalDir?.trim(),Z=f.sessionId?.trim();if(!J||!Z)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await uy(J,{recursive:!0});let Q=py(`${$.toolCallId}`),W=TB(J,`${Z}.request.${Q}.json`),j=TB(J,`${Z}.decision.${Q}.json`),X=f.nowIso??(()=>new Date().toISOString());await ly(W,`${JSON.stringify({requestId:Q,sessionId:Z,createdAt:X(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
713
+ `,"utf8");let H=f.timeoutMs??300000,Y=f.pollIntervalMs??200,A=Date.now();while(Date.now()-A<H){try{let V=await cy(j,"utf8"),B=JSON.parse(V),K={approved:B.approved===!0,reason:typeof B.reason==="string"?B.reason:void 0};return await Promise.all([pW(j),pW(W)]),K}catch{}await ry(Y)}return await pW(W),{approved:!1,reason:"Tool approval request timed out"}}X$();X$();var wB={};w(wB,{uninstallPlugin:()=>$7});import{existsSync as u2,readdirSync as iy,readFileSync as ny,rmdirSync as ay,rmSync as ty,statSync as sy}from"node:fs";import{basename as i0,dirname as O1,extname as oy,isAbsolute as ey,join as c$,relative as $q,resolve as v2,sep as iW}from"node:path";import{discoverPluginModulePaths as fq,resolvePluginConfigSearchPaths as Jq}from"@cline/shared/storage";var oW="_installed",Zq="package",Qq=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function nW($){return $.trim().toLowerCase()}function J$($,f){let J=f?.trim();if(!J)return;$.add(J)}function Wq($){return $.replace(/-[0-9a-f]{12}$/i,"")}function aW($){let f=oy($);return f?$.slice(0,-f.length):$}function tW($){if(!u2($))return;try{let f=JSON.parse(ny($,"utf8"));return typeof f.name==="string"?f.name.trim():void 0}catch{return}}function eW($,f){let J=$q(f,$);return J===""||!J.startsWith("..")&&!ey(J)}function MB($){let J=v2($).split(iW),Z=J.lastIndexOf(oW);if(Z<0)return;let Q=J[Z+1];if(!Q)return;let W=Qq.get(Q)??1,j=Z+2+W;if(J.length<j)return;let X=J.slice(0,j).join(iW)||iW;return u2(X)?X:void 0}function d5($){try{return iy($,{withFileTypes:!0})}catch{return[]}}function jq($){let f=c$($,oW);if(!u2(f))return[];let J=[];for(let Z of d5(f)){if(!Z.isDirectory())continue;let Q=c$(f,Z.name);if(Z.name==="git"){for(let W of d5(Q)){if(!W.isDirectory())continue;let j=c$(Q,W.name);for(let X of d5(j))if(X.isDirectory())J.push(c$(j,X.name))}continue}for(let W of d5(Q))if(W.isDirectory())J.push(c$(Q,W.name))}return J.sort((Z,Q)=>Z.localeCompare(Q))}function yB($){try{return fq($)}catch{return[]}}function sW($){let f=yB($),J=new Set;J$(J,i0($)),J$(J,Wq(i0($))),J$(J,tW(c$($,"package.json"))),J$(J,tW(c$($,Zq,"package.json")));for(let Z of f)J$(J,i0(Z)),J$(J,aW(i0(Z)));return{installPath:$,entryPaths:f,names:[...J].sort((Z,Q)=>Z.localeCompare(Q)),installed:!0}}function Xq($,f){let J=v2($),Z=f.find((j)=>eW(J,j));if(!Z)return;let Q=O1(J);while(Q!==Z&&Q!==O1(Q)){if(u2(c$(Q,"package.json")))return Q;Q=O1(Q)}let W=i0(J);if((W==="index.ts"||W==="index.js")&&O1(J)!==Z)return O1(J);return J}function qB($,f){let J=Xq($,f);if(!J)return;let Z=new Set;return J$(Z,i0($)),J$(Z,aW(i0($))),J$(Z,i0(J)),J$(Z,aW(i0(J))),J$(Z,tW(c$(J,"package.json"))),{installPath:J,entryPaths:[$],names:[...Z].sort((Q,W)=>Q.localeCompare(W)),installed:!1}}function Hq($){let f=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return Jq(f).filter((J)=>u2(J))}function Yq($){let f=new Map;for(let J of $){for(let Z of jq(J))f.set(Z,sW(Z));for(let Z of yB(J)){let Q=MB(Z);if(Q){if(!f.has(Q))f.set(Q,sW(Q));continue}let W=qB(Z,$);if(W)f.set(W.installPath,W)}}return[...f.values()].sort((J,Z)=>J.installPath.localeCompare(Z.installPath))}function Aq($,f){let J=nW(f);if(!J)return!1;if(nW($.installPath)===J)return!0;return $.names.some((Z)=>nW(Z)===J)}function Vq($,f,J){let Z=v2($);for(let W of f){if(eW(Z,W.installPath))return W;if(W.entryPaths.some((j)=>v2(j)===Z))return W}let Q=MB(Z);if(Q)return sW(Q);if(u2(Z))return qB(Z,J);return}function Bq($){let f=I0(),J=f.disabledPlugins;if(!J?.length)return;let Z=J.filter((Q)=>{let W=v2(Q);if(eW(W,$.installPath))return!1;return!$.entryPaths.some((j)=>v2(j)===W)});if(Z.length===J.length)return;J1({...f,disabledPlugins:Z})}function Kq($){let f=O1($);while(f!==O1(f)&&i0(f)!==oW){try{ay(f)}catch{return}f=O1(f)}}function Gq($){return`${$.names[0]??i0($.installPath)} at ${$.installPath}`}async function $7($){let f=Hq($),J=Yq(f),Z=$.path?.trim(),Q=$.name?.trim(),W;if(Z){if(W=Vq(Z,J,f),!W)throw Error(`No plugin found at ${Z}`)}else{if(!Q)throw Error("plugin uninstall requires a plugin name");let X=J.filter((H)=>Aq(H,Q));if(X.length===0)throw Error(`No plugin found matching "${Q}"`);if(X.length>1)throw Error(`Multiple plugins match "${Q}": ${X.map(Gq).join(", ")}`);W=X[0]}let j=sy(W.installPath,{throwIfNoEntry:!1});if(!j)throw Error(`Plugin install path does not exist: ${W.installPath}`);if(ty(W.installPath,{recursive:j.isDirectory(),force:!0}),Bq(W),W.installed)Kq(W.installPath);return{name:Q||W.names[0]||i0(W.installPath),installPath:W.installPath,removedPaths:[W.installPath],entryPaths:W.entryPaths}}var aB={};w(aB,{updateLocalProvider:()=>s5,saveLocalProviderSettings:()=>H7,saveLocalProviderOAuthCredentials:()=>B7,resolveLocalClineAuthToken:()=>K7,refreshProviderModelsFromSource:()=>Y7,normalizeOAuthProvider:()=>A7,loginLocalProvider:()=>V7,listLocalProviders:()=>j7,getLocalProviderModels:()=>X7,ensureCustomProvidersLoaded:()=>n5,deleteLocalProvider:()=>o5,addLocalProvider:()=>W7});import*as T0 from"@cline/llms";import{getClineEnvironmentConfig as kq}from"@cline/shared";import{existsSync as Pq,mkdirSync as Fq,readFileSync as Uq,writeFileSync as Rq}from"node:fs";import{mkdir as Dq,readFile as Lq,writeFile as _q}from"node:fs/promises";import{dirname as f7,join as zq}from"node:path";import*as S0 from"@cline/llms";import{ModelCapabilitySchema as Oq,ProviderCapabilitySchema as Tq,ProviderClientSchema as Nq,ProviderProtocolSchema as Mq}from"@cline/shared";import{z as l}from"zod";var yq=l.object({id:l.string().optional(),name:l.string().optional(),maxTokens:l.number().optional(),contextWindow:l.number().optional(),maxInputTokens:l.number().optional(),capabilities:l.array(Oq).optional(),supportsVision:l.boolean().optional(),supportsAttachments:l.boolean().optional(),supportsReasoning:l.boolean().optional()}).passthrough(),qq=l.object({name:l.string(),baseUrl:l.string(),defaultModelId:l.string().optional(),protocol:Mq.optional(),client:Nq.optional(),capabilities:l.array(Tq).optional(),modelsSourceUrl:l.string().optional()}).passthrough(),SB=l.object({provider:qq.optional(),models:l.record(l.string(),yq).optional()}).passthrough(),hB=l.object({version:l.literal(1),providers:l.record(l.string(),SB)}),wq=l.object({version:l.literal(1),providers:l.record(l.string(),l.unknown())}),l5=new Set;function CB($){return $.split(/[-_]/).filter(Boolean).map((f)=>f.charAt(0).toUpperCase()+f.slice(1)).join(" ")}function _f($){return zq(f7($.getFilePath()),"models.json")}function p5(){return{version:1,providers:{}}}function EB($){let f=wq.safeParse($);if(!f.success)return p5();let J={};for(let[Z,Q]of Object.entries(f.data.providers)){let W=SB.safeParse(Q);if(W.success)J[Z]=W.data}return{version:1,providers:J}}function J7($){if(!Pq($))return p5();try{let f=Uq($,"utf8");return EB(JSON.parse(f))}catch{}return p5()}async function c2($){try{let f=await Lq($,"utf8");return EB(JSON.parse(f))}catch{}return p5()}function bB($,f){Fq(f7($),{recursive:!0});let J=hB.parse(f);Rq($,`${JSON.stringify(J,null,2)}
714
+ `,"utf8")}async function r5($,f){await Dq(f7($),{recursive:!0});let J=hB.parse(f);await _q($,`${JSON.stringify(J,null,2)}
715
+ `,"utf8")}function kB($,f){return{id:$,name:f.name??$,supportsAttachments:f.capabilities?.includes("files"),supportsVision:f.capabilities?.includes("images"),supportsReasoning:f.capabilities?.includes("reasoning")||f.thinkingConfig!=null}}function IB($){if(!$||$.length===0)return;let f=new Set;if($.includes("reasoning"))f.add("reasoning");if($.includes("prompt-cache"))f.add("prompt-cache");if($.includes("tools"))f.add("tools");return f.size>0?[...f]:void 0}function xB($){let f=new Set;if(!$||$.length===0)return[...f];if($.includes("streaming"))f.add("streaming");if($.includes("tools"))f.add("tools");if($.includes("reasoning"))f.add("reasoning");if($.includes("prompt-cache"))f.add("prompt-cache");if($.includes("vision"))f.add("images"),f.add("files");return[...f]}function Sq($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function mB($,f){return $??f??"openai-chat"}function gB($,f,J){return $??J??(f==="openai-responses"?"openai":"openai-compatible")}function vB($,f,J){let Z=new Set(f?.capabilities??J??[]);if(f?.supportsVision)Z.add("images");if(f?.supportsAttachments)Z.add("files");if(f?.supportsReasoning)Z.add("reasoning");return{id:$,name:f?.name??$,maxTokens:f?.maxTokens,contextWindow:f?.contextWindow,maxInputTokens:f?.maxInputTokens,capabilities:Z.size>0?[...Z]:void 0}}function hq($,f){for(let[J,Z]of Object.entries(f??{})){let Q=Z.id?.trim()||J.trim();if(!Q)continue;S0.registerModel($,Q,vB(Q,Z))}}function Cq($,f,J){return{...f??{},id:$,name:f?.name??$,capabilities:f?.capabilities??J}}function Eq($){return Object.assign({},...S0.resolveProviderModelCatalogKeys($).map((J)=>S0.getGeneratedModelsForProvider(J)))}function bq($){let f=$.provider.trim();if(!f||S0.isBuiltInProviderId(f))return;let J=$.baseUrl?.trim();if(!J)return;let Z=S0.MODEL_COLLECTIONS_BY_PROVIDER_ID[f],Q=Eq(f),W=xB($.capabilities),j=W.length>0?W:void 0,X=$.model?.trim(),H={...Q,...Z?.models??{}};if(X)H[X]=Cq(X,H[X],j);let Y=Object.keys(H).filter(Boolean),A=X||Y[0];if(!A)return;let V=mB($.protocol,Z?.provider.protocol),B=gB($.client,V,Z?.provider.client);S0.registerProvider({provider:{id:f,name:Z?.provider.name??CB(f),description:Z?.provider.description,protocol:V,client:B,baseUrl:J,modelsSourceUrl:Z?.provider.modelsSourceUrl,defaultModelId:A,capabilities:IB($.capabilities)??Z?.provider.capabilities,source:"file"},models:H})}function i5($){for(let f of Object.values($.providers))bq(f.settings)}function Q4($,f){let J=f.models??{};if(!Sq(f.provider)){hq($,J);return}let Z=xB(f.provider.capabilities),Q=Object.entries(J).map(([Y,A])=>({id:A.id?.trim()||Y.trim(),model:A})).filter(({id:Y})=>Y.length>0),W=f.provider.defaultModelId?.trim()||Q[0]?.id||"default",j=mB(f.provider.protocol,void 0),X=gB(f.provider.client,j,void 0),H=Object.fromEntries(Q.map(({id:Y,model:A})=>[Y,{...vB(Y,A,Z.length>0?Z:void 0),status:"active"}]));S0.registerProvider({provider:{id:$,name:f.provider.name.trim()||CB($),protocol:j,client:X,baseUrl:f.provider.baseUrl,modelsSourceUrl:f.provider.modelsSourceUrl,defaultModelId:W,capabilities:IB(f.provider.capabilities),source:"file"},models:H})}function uB($){let f=_f($);if(l5.has(f))return;let J=J7(f);for(let[Z,Q]of Object.entries(J.providers))Q4(Z,Q);l5.add(f)}async function n5($){let f=_f($);if(l5.has(f))return;let J=await c2(f);for(let[Z,Q]of Object.entries(J.providers))Q4(Z,Q);l5.add(f)}function Iq($){return $.apiKey??$.auth?.apiKey}function xq($){return($.auth?.accessToken?.trim()??"").length>0}function dB($){return $.split(/[-_]/).filter(Boolean).map((f)=>f.charAt(0).toUpperCase()+f.slice(1)).join(" ")}function mq($){let f=$.split(/\s+/).filter(Boolean);if(f.length===0)return"?";if(f.length===1)return f[0].slice(0,2).toUpperCase();return`${f[0][0]}${f[1][0]}`.toUpperCase()}function gq($){let f=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],J=0;for(let Z of $)J=J*31+Z.charCodeAt(0)>>>0;return f[J%f.length]}function lB($){return Object.entries($).sort(([f],[J])=>f.localeCompare(J)).map(([f,J])=>kB(f,J))}async function vq($,f){let J=await T0.getModelsForProvider($);if(!f)return J;let Z=await l8($,{loadPrivateOnAuth:!0,failOnError:!1},f);return Z?.knownModels?{...J,...Z.knownModels}:J}function Z7($){return[...new Set(($??[]).map((f)=>f.trim()).filter(Boolean))]}function uq($){if(!$?.length)return;return[...new Set($)]}function cq($,f){return uq([...$??[],...f??[]])}function dq($){let f=$?.popularRank;return typeof f==="number"&&Number.isFinite(f)?f:Number.MAX_SAFE_INTEGER}function lq($){if(!$||typeof $!=="object")return!1;let f=$;return typeof f.path==="string"&&f.path.trim().length>0&&typeof f.label==="string"&&f.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(f.type))}function pq($){let f=$?.configFields;if(!Array.isArray(f))return;return f.filter(lq)}var a5={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},cB={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function rq($){if(!$)return[a5];if($.source!=="system")return $.baseUrl?[a5,cB]:[a5];let f=[];if($.env?.length)f.push(a5);if($.baseUrl)f.push(cB);return f}function iq($,f){return f.split(".").reduce((J,Z)=>{if(!J||typeof J!=="object")return;return J[Z]},$)}function nq($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function aq($,f,J){if(!$?.length)return;let Z={};for(let Q of $){let j=nq(Q.path==="baseUrl"&&f?.baseUrl===void 0?J?.baseUrl:iq(f,Q.path))??Q.defaultValue;if(j!==void 0)Z[Q.path]=j}return Z}function pB($){let f=Object.entries($??{}).filter(([J])=>J.trim().length>0);return f.length>0?Object.fromEntries(f):void 0}function Q7($,f){let J=f?.includes("vision")??!1,Z=f?.includes("reasoning")??!1;return Object.fromEntries($.map((Q)=>[Q,{id:Q,name:Q,supportsVision:J,supportsAttachments:J,supportsReasoning:Z}]))}async function rB($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let f=$.modelsSourceUrl?await B6($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...f])]}function iB($,f){let J=$.read(),Z=!1;if(J.providers[f])delete J.providers[f],Z=!0;if(J.lastUsedProvider===f)delete J.lastUsedProvider,Z=!0;if(Z)$.write(J);T0.unregisterProvider(f)}async function W7($,f){let J=f.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let Z=f.baseUrl.trim(),Q=f.apiKey?.trim()??"";if(!Z&&!Q){let G=_f($);if((await c2(G)).providers[J]){let P=await o5($,{providerId:J});return{providerId:J,settingsPath:P.settingsPath,modelsPath:P.modelsPath,modelsCount:0}}return iB($,J),{providerId:J,settingsPath:$.getFilePath(),modelsPath:G,modelsCount:0}}if(T0.hasProvider(J))throw Error(`provider "${J}" already exists`);let W=f.name.trim();if(!W)throw Error("name is required");if(!Z)throw Error("baseUrl is required");let j=Z7(f.models),X=f.modelsSourceUrl?.trim(),H=await rB({providerId:J,explicitModels:j,modelsSourceUrl:X,shouldRecompute:!0});if(H.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let Y=f.defaultModelId?.trim()&&H.includes(f.defaultModelId.trim())?f.defaultModelId.trim():H[0],A=f.capabilities?.length?[...new Set(f.capabilities)]:void 0,V=pB(f.headers);$.saveProviderSettings({provider:J,apiKey:Q||void 0,baseUrl:Z,headers:V,timeout:f.timeoutMs,model:Y,protocol:f.protocol,client:f.client},{setLastUsed:!1});let B=_f($),K=await c2(B);return K.providers[J]={provider:{name:W,baseUrl:Z,defaultModelId:Y,protocol:f.protocol,client:f.client,capabilities:A,modelsSourceUrl:X},models:Q7(H,A)},await r5(B,K),Q4(J,K.providers[J]),{providerId:J,settingsPath:$.getFilePath(),modelsPath:B,modelsCount:H.length}}async function s5($,f){let J=f.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let Z=_f($),Q=await c2(Z),W=Q.providers[J];if(!W){let O=$.getProviderSettings(J);if(!O)throw Error(`provider "${J}" does not exist`);let D=f.modelsSourceUrl?.trim(),_=Z7(f.models)[0]??O.model?.trim();if(!_&&!D)throw Error(`provider "${J}" cannot be updated because no model is configured`);W={provider:{name:f.name?.trim()||dB(J),baseUrl:f.baseUrl?.trim()??O.baseUrl?.trim()??"",defaultModelId:_,protocol:O.protocol,client:O.client,capabilities:O.capabilities},models:_?Q7([_],O.capabilities):{}}}if(!W.provider)throw Error(`provider "${J}" cannot be updated because it is a model overlay (no provider metadata)`);let j=f.name?.trim()??W.provider.name.trim();if(!j)throw Error("name is required");let X=f.baseUrl?.trim()??W.provider.baseUrl.trim();if(!X)throw Error("baseUrl is required");let H=f.capabilities===void 0?W.provider.capabilities:f.capabilities===null?void 0:[...new Set(f.capabilities)],Y=f.protocol===void 0?W.provider.protocol:f.protocol??void 0,A=f.client===void 0?W.provider.client:f.client??void 0,V=Z7(f.models),B=f.modelsSourceUrl===void 0?W.provider.modelsSourceUrl:f.modelsSourceUrl?.trim()||void 0,K=f.models!==void 0||f.modelsSourceUrl!==void 0&&!!B,G=Object.keys(W.models??{}).map((O)=>O.trim()).filter(Boolean),R=await rB({providerId:J,explicitModels:V,modelsSourceUrl:B,fallbackModelIds:G,shouldRecompute:K});if(R.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let P=f.defaultModelId===void 0?W.provider.defaultModelId?.trim():f.defaultModelId?.trim(),F=P&&R.includes(P)?P:R[0],z={...$.getProviderSettings(J)??{},provider:J,baseUrl:X,model:F};if(Y)z.protocol=Y;else delete z.protocol;if(A)z.client=A;else delete z.client;if(f.apiKey!==void 0){let O=f.apiKey?.trim()??"";if(O)z.apiKey=O;else delete z.apiKey}if(f.headers!==void 0){let O=pB(f.headers);if(O)z.headers=O;else delete z.headers}if(f.timeoutMs!==void 0)if(typeof f.timeoutMs==="number")z.timeout=f.timeoutMs;else delete z.timeout;return $.saveProviderSettings(z,{setLastUsed:!1}),Q.providers[J]={provider:{name:j,baseUrl:X,defaultModelId:F,protocol:Y,client:A,capabilities:H,modelsSourceUrl:B},models:Q7(R,H)},await r5(Z,Q),Q4(J,Q.providers[J]),{providerId:J,settingsPath:$.getFilePath(),modelsPath:Z,modelsCount:R.length}}async function o5($,f){let J=f.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let Z=_f($),Q=await c2(Z);if(!Q.providers[J])throw Error(`provider "${J}" does not exist`);return delete Q.providers[J],await r5(Z,Q),T0.unregisterProvider(J),iB($,J),{providerId:J,settingsPath:$.getFilePath(),modelsPath:Z}}async function j7($){let f=$.read(),J=T0.getProviderIds(),Z=await Promise.all(J.map(async(W)=>{let[j,X]=await Promise.all([T0.getProvider(W),T0.getModelsForProvider(W)]),H=lB(X),Y=f.providers[W]?.settings,A=j?.name??dB(W),V=cq(j?.capabilities,Y?.capabilities),B=pq(j?.metadata)??rq(j);return{provider:{id:W,name:A,models:H.length,color:gq(W),letter:mq(A),enabled:Boolean(Y),apiKey:Y?Iq(Y):void 0,oauthAccessTokenPresent:Y?xq(Y):void 0,baseUrl:Y?.baseUrl??j?.baseUrl,defaultModelId:j?.defaultModelId,protocol:Y?.protocol??j?.protocol,client:Y?.client??j?.client,capabilities:V,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:B,configValues:aq(B,Y,j),modelList:H},rank:dq(j?.metadata)}}));return Z.sort((W,j)=>{if(W.rank!==j.rank)return W.rank-j.rank;return W.provider.name.localeCompare(j.provider.name)||W.provider.id.localeCompare(j.provider.id)}),{providers:Z.map((W)=>W.provider),settingsPath:$.getFilePath()}}async function X7($,f){let J=$.trim(),Z=await vq(J,f),Q=lB(Z);return{providerId:J,models:Q}}function t5($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function nB($,f){if(!t5(f))return t5($)?{...$}:void 0;let J=t5($)?{...$}:{};for(let[Z,Q]of Object.entries(f)){if(Q==null||Q===""){delete J[Z];continue}if(t5(Q)){let W=nB(J[Z],Q);if(W&&Object.keys(W).length>0)J[Z]=W;else delete J[Z];continue}J[Z]=Q}return Object.keys(J).length>0?J:void 0}function H7($,f){let J=f.providerId.trim();if(f.enabled===!1){let W=$.read();if(delete W.providers[J],W.lastUsedProvider===J)delete W.lastUsedProvider;return $.write(W),{providerId:J,enabled:!1,settingsPath:$.getFilePath()}}let Q={...$.getProviderSettings(J)??{},provider:J};for(let W of["apiKey","baseUrl","model","region"])if(Object.hasOwn(f,W)&&typeof f[W]==="string")if(f[W].trim().length===0)delete Q[W];else Q[W]=f[W];for(let W of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(f,W))Q[W]=f[W];for(let W of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(f,W)&&f[W]!=null){let j=nB(Q[W],f[W]);if(j)Q[W]=j;else delete Q[W]}return $.saveProviderSettings(Q,{setLastUsed:!1}),{providerId:J,enabled:!0,settingsPath:$.getFilePath()}}async function Y7($,f){let J=f.trim(),Z=$.getProviderSettings(J),W=T0.MODEL_COLLECTIONS_BY_PROVIDER_ID[J]?.provider,j=Z?.baseUrl?.trim()||W?.baseUrl?.trim(),X=K6(j,W?.baseUrl,W?.modelsSourceUrl);if(!Z||!W||!j||!X)return{providerId:J,refreshed:!1};let H=await s5($,{providerId:J,name:W.name,baseUrl:j,apiKey:Z.apiKey,headers:Z.headers??null,timeoutMs:Z.timeout??null,modelsSourceUrl:X,protocol:Z.protocol??W.protocol??null,client:Z.client??W.client??null,capabilities:Z.capabilities??null});return{providerId:J,refreshed:!0,modelsCount:H.modelsCount}}function A7($){let f=$.trim().toLowerCase();if(f==="codex"||f==="openai-codex")return"openai-codex";if(f==="cline"||f==="oca")return f;throw Error(`provider "${$}" does not support OAuth login (supported: cline, oca, openai-codex)`)}function tq($,f){if($==="cline")return f.access.startsWith("workos:")?f.access:`workos:${f.access}`;return f.access}async function V7($,f,J,Z){let Q=e8({onPrompt:async(W)=>W.defaultValue??"",openUrl:J,onOpenUrlError:({error:W})=>{throw W instanceof Error?W:Error(String(W))}});if($==="cline")return X2({apiBaseUrl:f?.baseUrl?.trim()||kq().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:Z});if($==="oca")return $2({mode:f?.oca?.mode,callbacks:Q,telemetry:Z});return H2({onAuth:Q.onAuth,onPrompt:Q.onPrompt,onProgress:Q.onProgress,onManualCodeInput:Q.onManualCodeInput,telemetry:Z})}function B7($,f,J,Z){let Q={...J?.auth??{},accessToken:tq(f,Z),refreshToken:Z.refresh,accountId:Z.accountId,expiresAt:Z.expires},W={...J??{provider:f},provider:f,auth:Q};return $.saveProviderSettings(W,{tokenSource:"oauth"}),W}function K7($){let f=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return f&&f.length>0?f:void 0}var tB={};w(tB,{getProviderConfigFields:()=>G7});import*as e5 from"@cline/llms";import{isOAuthProviderId as sq}from"@cline/shared";var oq=["apiKey","baseUrl","awsRegion","awsProfile","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],eq={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 $w($,f){let J={};for(let Z of oq){let Q=$[Z],W=f[Z];if(Q||W)J[Z]={...Q,...W}}return J}function fw($){let f=eq[$.providerId];if(!f)return $;return{...$,description:f.description??$.description,fields:f.mode==="replace"?f.fields:$w($.fields,f.fields)}}var Jw=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function Zw($,f){if(!f?.provider.baseUrl)return!1;if(f.provider.source!=="system")return!0;return Jw.has($)}function G7($){let f=e5.normalizeProviderId($);if(sq(f))return{providerId:f,authMethod:"oauth",fields:{}};let J=e5.MODEL_COLLECTIONS_BY_PROVIDER_ID[f];if(J?.provider.capabilities?.includes("local-auth"))return{providerId:f,authMethod:"local",fields:{}};let Z=J?.provider.baseUrl,Q={apiKey:{}};if(Zw(f,J))Q.baseUrl={defaultValue:Z};return fw({providerId:f,authMethod:"api-key",fields:Q})}var $K={};w($K,{resolveLegacyClineAuth:()=>U7,migrateLegacyProviderSettings:()=>W4});import{existsSync as Qw,readFileSync as Ww}from"node:fs";import{dirname as jw,join as P7}from"node:path";import*as fZ from"@cline/llms";import{resolveClineDataDir as Xw}from"@cline/shared/storage";var $Z="openai",eB=fZ.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,sB=128000;function U7($){let f=$?.trim();if(!f)return;try{let J=JSON.parse(f);if(!J)return;let Z=typeof J.expiresAt==="number"&&Number.isFinite(J.expiresAt)?J.expiresAt<10000000000?J.expiresAt*1000:J.expiresAt:void 0;return{accessToken:J.idToken,refreshToken:J.refreshToken,expiresAt:Z,accountId:J.userInfo?.id}}catch{return}}function h($){let f=$?.trim();return f?f:void 0}function oB($){if(!Qw($))return;try{let f=Ww($,"utf8"),J=JSON.parse(f);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return}function Hw($){let f=$.dataDir??Xw(),J=$.globalStatePath??P7(f,"globalState.json"),Z=$.secretsPath??P7(f,"secrets.json"),Q=oB(J),W=oB(Z);if(!Q&&!W)return;return{globalState:Q??{},secrets:W??{}}}function F7($){if($===$Z)return eB;return $}function Yw($,f,J,Z){let Q=J==="plan"?"planMode":"actMode",W=f===Z?h(J==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,X={openrouter:`${Q}OpenRouterModelId`,cline:`${Q}ClineModelId`,openai:`${Q}OpenAiModelId`,ollama:`${Q}OllamaModelId`,lmstudio:`${Q}LmStudioModelId`,litellm:`${Q}LiteLlmModelId`,requesty:`${Q}RequestyModelId`,together:`${Q}TogetherModelId`,fireworks:`${Q}FireworksModelId`,sapaicore:`${Q}SapAiCoreModelId`,groq:`${Q}GroqModelId`,baseten:`${Q}BasetenModelId`,huggingface:`${Q}HuggingFaceModelId`,"huawei-cloud-maas":`${Q}HuaweiCloudMaasModelId`,oca:`${Q}OcaModelId`,aihubmix:`${Q}AihubmixModelId`,hicap:`${Q}HicapModelId`,nousResearch:`${Q}NousResearchModelId`,"vercel-ai-gateway":`${Q}VercelAiGatewayModelId`}[f];return(X?h(typeof $[X]==="string"?$[X]:void 0):void 0)??W}function Aw($,f,J){let Z=J==="plan"?$.planModeReasoningEffort:$.actModeReasoningEffort,Q=J==="plan"?$.geminiPlanModeThinkingLevel:$.geminiActModeThinkingLevel,W=J==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,j=(f==="gemini"?Q:void 0)??Z,X=j==="none"||j==="low"||j==="medium"||j==="high"?j:void 0,H=typeof W==="number"&&Number.isInteger(W)&&W>0?W:void 0;if(!X&&H===void 0)return;return{...X?{effort:X}:{},...H!==void 0?{budgetTokens:H}:{}}}function Vw($){let f=$["openai-codex-oauth-credentials"];if(!f)return;try{let J=JSON.parse(f),Z=h(J.access_token),Q=h(J.refresh_token),W=h(J.accountId);if(!Z&&!Q&&!W)return;return{...Z?{apiKey:Z}:{},auth:{...Z?{accessToken:Z}:{},...Q?{refreshToken:Q}:{},...W?{accountId:W}:{}}}}catch{return}}function Bw($){let f=fZ.getGeneratedModelsForProvider($);return Object.keys(f)[0]??void 0}function Kw($,f,J,Z){let Q=F7($),W=h(Z==="plan"?f.planModeApiProvider:f.actModeApiProvider),j=Yw(f,$,Z,W)??Bw(Q),X=Aw(f,Q,Z),H=typeof f.requestTimeoutMs==="number"&&Number.isInteger(f.requestTimeoutMs)&&f.requestTimeoutMs>0?f.requestTimeoutMs:void 0,Y={anthropic:J.apiKey,cline:J.clineApiKey,openai:J.openAiApiKey,"openai-native":J.openAiNativeApiKey,openrouter:J.openRouterApiKey,bedrock:J.awsBedrockApiKey,gemini:J.geminiApiKey,ollama:J.ollamaApiKey,deepseek:J.deepSeekApiKey,requesty:J.requestyApiKey,together:J.togetherApiKey,fireworks:J.fireworksApiKey,qwen:J.qwenApiKey,doubao:J.doubaoApiKey,mistral:J.mistralApiKey,litellm:J.liteLlmApiKey,asksage:J.asksageApiKey,xai:J.xaiApiKey,moonshot:J.moonshotApiKey,zai:J.zaiApiKey,huggingface:J.huggingFaceApiKey,nebius:J.nebiusApiKey,sambanova:J.sambanovaApiKey,cerebras:J.cerebrasApiKey,groq:J.groqApiKey,"huawei-cloud-maas":J.huaweiCloudMaasApiKey,baseten:J.basetenApiKey,"vercel-ai-gateway":J.vercelAiGatewayApiKey,dify:J.difyApiKey,minimax:J.minimaxApiKey,hicap:J.hicapApiKey,aihubmix:J.aihubmixApiKey,nousResearch:J.nousResearchApiKey,oca:J.ocaApiKey},A={};if($==="openai-codex")Object.assign(A,Vw(J));if($==="cline")try{let F=h(J["cline:clineAccountId"]);if(F)A.auth={...A.auth??{},...U7(F)}}catch{}if($===$Z&&f.openAiHeaders)A.headers=f.openAiHeaders;if($==="bedrock"){let F=f.awsAuthentication==="profile"||f.awsUseProfile===!0;A.aws={accessKey:h(J.awsAccessKey),secretKey:h(J.awsSecretKey),sessionToken:h(J.awsSessionToken),region:h(f.awsRegion),authentication:f.awsAuthentication,profile:F?h(f.awsProfile):void 0,usePromptCache:f.awsBedrockUsePromptCache,useCrossRegionInference:f.awsUseCrossRegionInference,useGlobalInference:f.awsUseGlobalInference,endpoint:h(f.awsBedrockEndpoint),customModelBaseId:h(Z==="plan"?f.planModeAwsBedrockCustomModelBaseId:f.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")A.gcp={projectId:h(f.vertexProjectId),region:h(f.vertexRegion)};if($===$Z&&(f.azureApiVersion||f.azureIdentity!==void 0))A.azure={apiVersion:h(f.azureApiVersion),useIdentity:f.azureIdentity};if($==="sapaicore")A.sap={clientId:h(J.sapAiCoreClientId),clientSecret:h(J.sapAiCoreClientSecret),tokenUrl:h(f.sapAiCoreTokenUrl),resourceGroup:h(f.sapAiResourceGroup),deploymentId:h(Z==="plan"?f.planModeSapAiCoreDeploymentId:f.actModeSapAiCoreDeploymentId),useOrchestrationMode:f.sapAiCoreUseOrchestrationMode};if($==="oca"){A.oca={mode:f.ocaMode};let F=h(J.ocaRefreshToken);if(F)A.auth={...A.auth??{},refreshToken:F}}if($==="qwen")A.apiLine=f.qwenApiLine;if($==="moonshot")A.apiLine=f.moonshotApiLine;if($==="zai")A.apiLine=f.zaiApiLine;if($==="minimax")A.apiLine=f.minimaxApiLine;let V={anthropic:f.anthropicBaseUrl,openai:f.openAiBaseUrl,ollama:f.ollamaBaseUrl,lmstudio:f.lmStudioBaseUrl,litellm:f.liteLlmBaseUrl,gemini:f.geminiBaseUrl,requesty:f.requestyBaseUrl,asksage:f.asksageApiUrl,dify:f.difyBaseUrl,oca:f.ocaBaseUrl,aihubmix:f.aihubmixBaseUrl,sapaicore:f.sapAiCoreBaseUrl},B=h(Y[$]),K=h(V[$]),G={provider:Q,...B?{apiKey:B}:{},...j?{model:j}:{},...K?{baseUrl:K}:{},...X?{reasoning:X}:{},...H?{timeout:H}:{},...A},R=i8.safeParse(G);if(!R.success)return;return Object.keys(G).filter((F)=>F!=="provider").length>0?R.data:void 0}function Gw($,f){if($!==eB)return;if(!f.baseUrl||!f.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:f.baseUrl,defaultModelId:f.model},models:{[f.model]:{id:f.model,name:f.model,contextWindow:sB,maxInputTokens:sB,capabilities:["streaming","tools","images"]}}}}function Pw($,f){let J=new Set;for(let Q of[$.actModeApiProvider,$.planModeApiProvider]){let W=h(Q);if(W)J.add(W)}if(h(f.apiKey))J.add("anthropic");if(h(f.openRouterApiKey))J.add("openrouter");if(h(f.openAiApiKey))J.add($Z);if(h(f.openAiNativeApiKey))J.add("openai-native");if(h(f["openai-codex-oauth-credentials"]))J.add("openai-codex");if(h(f.geminiApiKey))J.add("gemini");if(h(f.ollamaApiKey))J.add("ollama");if(h(f.awsAccessKey)||h(f.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||h($.awsProfile))J.add("bedrock");if(h($.vertexProjectId)||h($.vertexRegion))J.add("vertex");if(h(f.clineApiKey))J.add("cline");let Z=U7(h(f["cline:clineAccountId"]));if(Z?.accessToken||Z?.refreshToken||Z?.accountId)J.add("cline");if(h(f.ocaApiKey))J.add("oca");if(h(f.sapAiCoreClientId)||h(f.sapAiCoreClientSecret)||h($.sapAiCoreTokenUrl)||h($.sapAiCoreBaseUrl)||h($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)J.add("sapaicore");return J}function W4($){let f=$.providerSettingsManager.read(),J=Hw($);if(!J)return{migrated:!1,providerCount:Object.keys(f.providers).length,lastUsedProvider:f.lastUsedProvider};let{globalState:Z,secrets:Q}=J,W=Z.mode==="plan"?"plan":"act",j=Pw(Z,Q),X=Y1();X.providers={...f.providers},X.lastUsedProvider=f.lastUsedProvider;let H=new Date().toISOString(),Y=0,A=P7(jw($.providerSettingsManager.getFilePath()),"models.json"),V=J7(A),B=0;for(let R of j){let P=F7(R);if(X.providers[P])continue;let F=Kw(R,Z,Q,W);if(!F)continue;X.providers[P]={settings:F,updatedAt:H,tokenSource:"migration"},Y+=1;let U=Gw(P,F);if(U&&!V.providers[P])V.providers[P]=U,B+=1}if(Y===0&&B===0)return{migrated:!1,providerCount:Object.keys(f.providers).length,lastUsedProvider:f.lastUsedProvider};let K=h(W==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),G=K?F7(K):void 0;if(X.lastUsedProvider=f.lastUsedProvider??(G&&X.providers[G]?G:Object.keys(X.providers)[0]),$.providerSettingsManager.write(X),B>0)bB(A,V);return{migrated:Y>0||B>0,providerCount:Object.keys(X.providers).length,lastUsedProvider:X.lastUsedProvider}}L0();w5();var fK={};w(fK,{FileTeamPersistenceStore:()=>JZ});import{appendFileSync as Fw,existsSync as R7,mkdirSync as Uw,readFileSync as Rw,renameSync as Dw,unlinkSync as Lw,writeFileSync as _w}from"node:fs";import{join as D7}from"node:path";import{resolveTeamDataDir as zw}from"@cline/shared/storage";function Ow($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class JZ{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let f=Ow($.teamName),J=$.baseDir?.trim()||zw();this.dirPath=D7(J,f),this.statePath=D7(this.dirPath,"state.json"),this.taskHistoryPath=D7(this.dirPath,"task-history.jsonl")}loadState(){if(!R7(this.statePath))return;try{let $=Rw(this.statePath,"utf8"),f=JSON.parse($);if(f.version!==1||!f.teamState)return;for(let J of f.teammates??[])this.teammateSpecs.set(J.agentId,J);return $V(f.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec($){this.teammateSpecs.set($.agentId,$)}removeTeammateSpec($){this.teammateSpecs.delete($)}persist($){if(!this.hasPersistableState($)){this.clearPersistedState();return}this.ensureDir();let f={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},J=`${this.statePath}.tmp`;_w(J,`${JSON.stringify(f,null,2)}
716
+ `,"utf8"),Dw(J,this.statePath)}appendTaskHistory($){let f={};switch($.type){case"team_task_updated":f=$.task;break;case"team_message":f={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":f={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":f={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":f={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":f={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),Fw(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:f})}
717
+ `,"utf8")}ensureDir(){if(!R7(this.dirPath))Uw(this.dirPath,{recursive:!0})}hasPersistableState($){let f=$.exportState();if(this.teammateSpecs.size>0)return!0;if(f.members.some((J)=>J.role==="teammate"))return!0;return f.tasks.length>0||f.mailbox.length>0||f.missionLog.length>0}clearPersistedState(){if(R7(this.statePath))Lw(this.statePath)}}var JK={};w(JK,{ChatViewStateSchema:()=>L7,ChatSummarySchema:()=>XZ,ChatSessionStatusSchema:()=>QZ,ChatSessionConfigSchema:()=>ZZ,ChatMessageSchema:()=>jZ,ChatMessageRoleSchema:()=>WZ});import{z as C}from"zod";var ZZ=C.object({workspaceRoot:C.string().min(1),cwd:C.string().optional(),provider:C.string().min(1),model:C.string().min(1),mode:C.enum(["act","plan"]).default("act"),apiKey:C.string(),systemPrompt:C.string().optional(),rules:C.string().optional(),maxIterations:C.number().int().positive().optional(),enableTools:C.boolean(),enableSpawn:C.boolean().optional(),enableTeams:C.boolean().optional(),autoApproveTools:C.boolean().optional(),missionStepInterval:C.number().int().positive().optional(),missionTimeIntervalMs:C.number().int().positive().optional()}),QZ=C.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),WZ=C.enum(["user","assistant","tool","system","status","error"]),jZ=C.object({id:C.string().min(1),sessionId:C.string().nullable(),role:WZ,content:C.string(),createdAt:C.number().int().nonnegative(),meta:C.object({stream:C.enum(["stdout","stderr"]).optional(),toolName:C.string().optional(),iteration:C.number().int().nonnegative().optional(),agentId:C.string().optional(),conversationId:C.string().optional(),hookEventName:C.string().optional(),inputTokens:C.number().int().nonnegative().optional(),outputTokens:C.number().int().nonnegative().optional(),checkpoint:C.object({ref:C.string(),createdAt:C.number().int().nonnegative(),runCount:C.number().int().positive(),kind:C.enum(["stash","commit"]).optional()}).optional()}).optional()}),XZ=C.object({toolCalls:C.number().int().nonnegative(),tokensIn:C.number().int().nonnegative(),tokensOut:C.number().int().nonnegative()}),L7=C.object({sessionId:C.string().nullable(),status:QZ,config:ZZ,messages:C.array(jZ),rawTranscript:C.string(),error:C.string().nullable(),summary:XZ});var ZK={};w(ZK,{CORE_BUILD_VERSION:()=>_7});var _7=QA;import{Agent as WS,createAgentRuntime as jS}from"@cline/agents";var WK={};w(WK,{fetchClineRecommendedModels:()=>z7,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>HZ});import{getClineEnvironmentConfig as Tw}from"@cline/shared";var Nw=5000,HZ={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}]};function Mw($){return{recommended:$.recommended.map((f)=>({...f,tags:[...f.tags]})),free:$.free.map((f)=>({...f,tags:[...f.tags]}))}}function QK($){if(!$||typeof $!=="object")return null;let f=$;if(typeof f.id!=="string"||f.id.length===0)return null;return{id:f.id,name:typeof f.name==="string"&&f.name.length>0?f.name:f.id,description:typeof f.description==="string"?f.description:"",tags:Array.isArray(f.tags)?f.tags.filter((J)=>typeof J==="string"):[]}}function yw($){if(!$||typeof $!=="object")return null;let f=$,J=Array.isArray(f.recommended)?f.recommended:[],Z=Array.isArray(f.free)?f.free:[],Q=J.map(QK).filter((j)=>j!==null),W=Z.map(QK).filter((j)=>j!==null);if(Q.length===0&&W.length===0)return null;return{recommended:Q,free:W}}function qw($){let f=$.baseUrl?.trim();if(f)return f;let J=Tw().apiBaseUrl;try{return($.providerSettingsManager??new R$).getProviderSettings("cline")?.baseUrl?.trim()||J}catch{return J}}async function ww($,f,J){let Z=new AbortController,Q=setTimeout(()=>Z.abort(),J);try{return await $(f,{signal:Z.signal})}finally{clearTimeout(Q)}}async function z7($={}){try{let f=qw($),J=$.fetchImpl??fetch,Z=await ww(J,`${f}/api/v1/ai/cline/recommended-models`,$.timeoutMs??Nw);if(!Z.ok)throw Error(`HTTP ${Z.status}`);let Q=await Z.json(),W=yw(Q);if(W)return W}catch{}return Mw(HZ)}var jK={};w(jK,{loadLlmsConfigFromFile:()=>T7,defineLlmsConfig:()=>O7});import{readFile as Sw}from"node:fs/promises";import hw from"node:path";function O7($){return $}async function T7($){let f=hw.resolve($),J=await Sw(f,"utf8"),Z;try{Z=JSON.parse(J)}catch(Q){let W=Q instanceof Error?Q.message:String(Q);throw Error(`Failed to parse JSON config at "${f}": ${W}`)}return Cw(Z,f)}function Cw($,f){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${f}": expected an object.`);let Z=$.providers;if(!Array.isArray(Z))throw Error(`Invalid llms config in "${f}": "providers" must be an array.`);if(!Z.length)throw Error(`Invalid llms config in "${f}": "providers" cannot be empty.`);return $}var BK={};w(BK,{createLlmsSdk:()=>M7,DefaultLlmsSdk:()=>j4});import{BUILT_IN_PROVIDER_IDS as YK,createHandler as kw,createHandlerAsync as Iw,getProviderCollection as xw,hasProvider as AK,registerAsyncHandler as mw,registerHandler as gw,registerModel as vw,registerProvider as VK}from"@cline/llms";function XK($){return $?{...$}:{}}function Ew($,f){if($)return $;if(!f)return;let J=globalThis.process;if(!J?.env)return;return J.env[f]}function bw($,f){if(!f.length)throw Error(`Provider "${$}" must include at least one model.`)}function HK($){let f=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:f,defaultModel:$.collection.provider.defaultModelId,modelCount:f.length}}class N7{providers=new Map;register($){bw($.id,$.models);let f=$.defaultModel??$.models[0];if(!f)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(f))throw Error(`Default model "${f}" is not included in configured models for "${$.id}".`);let J=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...J?.models??[],...$.models]),defaultModel:f,defaults:{...J?.defaults??{},...XK($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:Ew($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...XK($.settings)}})}registerModel($,f){let J=this.providers.get($);if(!J){this.providers.set($,{id:$,models:new Set([f]),defaultModel:f,defaults:{}});return}J.models.add(f)}createHandlerConfig($){let f=this.require($.providerId),J=$.modelId??f.defaultModel;if(!f.models.has(J))throw Error(`Model "${J}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:J,...f.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,f){return this.providers.get($)?.models.has(f)??!1}require($){let f=this.providers.get($);if(!f)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return f}}class j4{configuredProviders=new N7;constructor($){this.applyConfig($)}createHandler($){return kw(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return Iw(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(VK($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)gw($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)mw($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let f=$.exposeModels??Object.keys($.models),J=$.defaultModel??f[0];if(!J)throw Error(`Provider "${$.id}" must define a default model.`);VK({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:J,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:f,defaultModel:J,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){vw($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...YK]}async getBuiltInProviders(){return(await Promise.all(YK.map((f)=>xw(f)))).filter((f)=>f!==void 0).map((f)=>HK({collection:f}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,f){return this.configuredProviders.hasModel($,f)}applyConfig($){for(let f of $.providers)this.configuredProviders.registerSelectionConfig(f);for(let f of $.models??[])this.registerModel(f);for(let f of $.customProviders??[])this.registerProvider(f);for(let f of this.configuredProviders.list()){let J=AK(f.id),Z=this.configuredProviders.createHandlerConfig({providerId:f.id,modelId:f.defaultModel}).routingProviderId,Q=typeof Z==="string"&&AK(Z);if(!J&&!Q)throw Error(`Provider "${f.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function M7($){return new j4($)}GW();async function uw(){return Promise.resolve().then(() => (IW(),GB))}function VS(){return new Date().toISOString()}function BS($){if(FK($)!=="providers.json")return;let f=q7($);if(FK(f)!=="settings")return;return q7(f)}class R${filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??AS(),this.dataDir=$.dataDir??BS(this.filePath),this.dataDir||!$.filePath)W4({providerSettingsManager:this,dataDir:this.dataDir});if(uB(this),i5(this.read()),y7(this.filePath))try{PK(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!y7(this.filePath))return Y1();try{let $=HS(this.filePath,"utf8"),f=JSON.parse($),J=Z2.safeParse(f);if(J.success)return i5(J.data),J.data}catch{}return Y1()}write($){let f=Z2.parse($),J=q7(this.filePath);if(!y7(J))XS(J,{recursive:!0,mode:448});YS(this.filePath,`${JSON.stringify(f,null,2)}
718
+ `,"utf8");try{PK(this.filePath,384)}catch{}i5(f)}saveProviderSettings($,f={}){let J=i8.parse($),Z=this.read(),Q=J.provider,W=f.setLastUsed!==!1,j=Z.providers[Q],X=f.tokenSource??j?.tokenSource??"manual",H={...Z,providers:{...Z.providers,[Q]:{settings:J,updatedAt:VS(),tokenSource:X}},lastUsedProvider:W?Q:Z.lastUsedProvider};return this.write(H),H}getProviderSettings($){return this.read().providers[$]?.settings}getLastUsedProviderSettings(){let $=this.read(),f=$.lastUsedProvider;if(!f)return;return $.providers[f]?.settings}getProviderConfig($,f){let J=this.getProviderSettings($);if(!J)return;return m0(J,f)}getLastUsedProviderConfig($){let f=this.getLastUsedProviderSettings();if(!f)return;return m0(f,$)}async refreshCatalog(){try{await f2({})}catch{}}}L0();_5();import{getClineEnvironmentConfig as KS,isOAuthProviderId as GS}from"@cline/shared";var w7="workos:";function PS($,f){if($==="cline")return`${w7}${f}`;return f}function FS($,f){if($==="cline"&&f.toLowerCase().startsWith(w7))return f.slice(w7.length);return f}function US($){let J=_0($)?.exp;if(typeof J==="number"&&J>0)return J*1000;return null}function RS($,f){let J=$.auth?.expiresAt;if(typeof J==="number"&&Number.isFinite(J)&&J>0)return J;let Z=US(f);if(Z)return Z;return Date.now()-1}function DS($,f){let J=f.auth?.accessToken?.trim(),Z=f.auth?.refreshToken?.trim();if(!J||!Z)return null;let Q=FS($,J);if(!Q)return null;return{access:Q,refresh:Z,expires:RS(f,Q),accountId:f.auth?.accountId}}function LS($,f){let J=$?.expiresAt,Z=f?.expiresAt;return $?.accessToken===f?.accessToken&&$?.refreshToken===f?.refreshToken&&$?.accountId===f?.accountId&&J===Z}class YZ 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 S7{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new R$,this.telemetry=$?.telemetry}async resolveProviderApiKey($){if(!GS($.providerId))return null;return this.resolveWithSingleFlight($.providerId,$.forceRefresh)}async resolveWithSingleFlight($,f=!1){let J=this.refreshInFlight.get($);if(J)return J;let Z=this.resolveProviderApiKeyInternal($,f).catch((Q)=>{throw Q}).finally(()=>{this.refreshInFlight.delete($)});return this.refreshInFlight.set($,Z),Z}async resolveProviderApiKeyInternal($,f){let J=this.providerSettingsManager.getProviderSettings($);if(!J)return null;let Z=DS($,J);if(!Z)return null;let Q=await this.resolveCredentials($,J,Z,f);if(!Q)throw new YZ($);let W=PS($,Q.access),j={...J.auth??{},accessToken:W,refreshToken:Q.refresh,accountId:Q.accountId};j.expiresAt=Q.expires;let X={...J,auth:j},H=!LS(J.auth,X.auth);if(H)this.providerSettingsManager.saveProviderSettings(X,{setLastUsed:!1,tokenSource:"oauth"});return{providerId:$,apiKey:W,accountId:Q.accountId,refreshed:H}}async resolveCredentials($,f,J,Z){if($==="cline")return fJ(J,{apiBaseUrl:f.baseUrl?.trim()||KS().apiBaseUrl,telemetry:this.telemetry},{forceRefresh:Z});if($==="oca")return u8(J,{forceRefresh:Z,telemetry:this.telemetry},{mode:f.oca?.mode,telemetry:this.telemetry});return ZJ(J,{forceRefresh:Z,telemetry:this.telemetry})}}import{normalizeUserInput as _S}from"@cline/shared";import{nanoid as zS}from"nanoid";class UK{list($){return $?n0($):[]}update($,f){if(!$)return{sessionId:f.sessionId,prompts:[],updated:!1};let J=f.promptId.trim(),Z=$.pendingPrompts.findIndex((H)=>H.id===J);if(Z<0)return{sessionId:f.sessionId,prompts:n0($),updated:!1};let Q=$.pendingPrompts[Z];if(!Q)return{sessionId:f.sessionId,prompts:n0($),updated:!1};let W=f.prompt===void 0?Q.prompt:_S(f.prompt).trim();if(!W)throw Error("prompt cannot be empty");let j=f.delivery??Q.delivery,X={...Q,prompt:W,mode:f.mode??Q.mode,delivery:j};return $.pendingPrompts.splice(Z,1),OS($,X,Z,Q.delivery),{sessionId:f.sessionId,prompts:n0($),prompt:AZ(X),updated:!0}}delete($,f){if(!$)return{sessionId:f.sessionId,prompts:[],removed:!1};let J=f.promptId.trim(),Z=$.pendingPrompts.findIndex((W)=>W.id===J);if(Z<0)return{sessionId:f.sessionId,prompts:n0($),removed:!1};let[Q]=$.pendingPrompts.splice(Z,1);return{sessionId:f.sessionId,prompts:n0($),prompt:Q?AZ(Q):void 0,removed:!0}}enqueue($,f){let{prompt:J,mode:Z,delivery:Q,userImages:W,userFiles:j}=f,X=$.pendingPrompts.findIndex((H)=>H.prompt===J);if(X>=0){let[H]=$.pendingPrompts.splice(X,1),Y={...H,prompt:J,mode:Z??H.mode,userImages:W??H.userImages,userFiles:j??H.userFiles};if(Q==="steer"||H.delivery==="steer")$.pendingPrompts.unshift({...Y,delivery:"steer"});else $.pendingPrompts.push(Y)}else{let H={id:`pending_${Date.now()}_${zS(5)}`,prompt:J,mode:Z,delivery:Q,userImages:W,userFiles:j};if(Q==="steer")$.pendingPrompts.unshift(H);else $.pendingPrompts.push(H)}return n0($)}consumeSteer($){let f=$.pendingPrompts.findIndex((Z)=>Z.delivery==="steer");if(f<0)return{prompts:n0($)};let[J]=$.pendingPrompts.splice(f,1);return{entry:J,prompts:n0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:n0($)}}requeueFront($,f){return $.pendingPrompts.unshift(f),n0($)}clear($){return $.pendingPrompts.length=0,[]}}class h7{deps;service=new UK;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let f=this.deps.getSession($.sessionId);if(!f||f.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let J=this.service.update(f,$);return this.emitPrompts(f),this.scheduleDrain($.sessionId,f),J}delete($){let f=this.deps.getSession($.sessionId);if(!f||f.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let J=this.service.delete(f,$);return this.emitPrompts(f),this.scheduleDrain($.sessionId,f),J}enqueue($,f){let J=this.deps.getSession($);if(!J||J.aborting)return;this.service.enqueue(J,f),this.emitPrompts(J),this.scheduleDrain($,J)}consumeSteer($){let f=this.deps.getSession($);if(!f)return;let{entry:J}=this.service.consumeSteer(f);if(!J)return;return this.emitPrompts(f),this.emitSubmitted(f,J),J}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:n0($)}})}scheduleDrain($,f){if(f.pendingPrompts.length===0||f.aborting||f.drainingPendingPrompts||!f.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let f=this.deps.getSession($);if(!f)return;if(f.aborting||f.drainingPendingPrompts)return;if(!f.agent.canStartRun())return;let{entry:J}=this.service.shiftNext(f);if(!J)return;this.emitPrompts(f),this.emitSubmitted(f,J),f.drainingPendingPrompts=!0;let Z=!0;try{await this.deps.send({sessionId:$,prompt:J.prompt,...J.mode?{mode:J.mode}:{},userImages:J.userImages,userFiles:J.userFiles})}catch{Z=!1,this.service.requeueFront(f,J),this.emitPrompts(f)}finally{if(f.drainingPendingPrompts=!1,Z&&f.pendingPrompts.length>0&&f.status!=="failed"&&f.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,f){let J=AZ(f);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:J.id,prompt:J.prompt,delivery:J.delivery,attachmentCount:J.attachmentCount}})}}function AZ($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0)}}function n0($){return $.pendingPrompts.map(AZ)}function OS($,f,J,Z){if(f.delivery==="steer")$.pendingPrompts.unshift(f);else if(Z==="steer")$.pendingPrompts.push(f);else $.pendingPrompts.splice(J,0,f)}L0();class E7{deps;constructor($){this.deps=$}dispatchAgentEvent($,f,J){let Z=this.deps.getSession($),Q={sessionId:$,config:f,liveSession:Z,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},W=f9(J),j=!!Z&&(!W.agentId||W.agentId===C7(Z.agent));J9(Q,J,j?{isPrimaryAgentEvent:!0,agentId:C7(Z.agent),conversationId:Z.agent.getConversationId(),...Z?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,f){let J=this.deps.getSession($);if(J){if(eQ(J,f),f.type==="agent_event"){let Z={sessionId:$,config:J.config,liveSession:J,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};J9(Z,f.event,{agentId:f.agentId,teamRole:"teammate",teamAgentId:f.agentId,isPrimaryAgentEvent:!1})}if(f.type==="teammate_spawned"){let Z=S$({agentId:f.teammate.runtimeAgentId??f.agentId,conversationId:f.teammate.conversationId,parentAgentId:f.teammate.parentAgentId,createdByAgentId:C7(J.agent),teamId:J.runtime.teamRuntime?.getTeamId(),teamName:J.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:f.agentId});if(Z)p$(J.config.telemetry,{ulid:$,modelId:f.teammate.modelId??J.config.modelId,provider:J.config.providerId,...Z})}}if(await $W($,f,this.deps.invokeBackendOptional),J)fW(J,$,f,this.deps.emit)}async handlePluginEvent($,f,J){if(f.name==="plugin_log"){this.handlePluginLog($,f.payload);return}if(f.name==="automation_event"){let H=this.deps.getSession($)?.config.extensionContext?.automation??J;if(!H)return;let Y=f.payload&&typeof f.payload==="object"?f.payload:void 0;if(!Y)return;await H.ingestEvent(Y);return}if(f.name!=="steer_message"&&f.name!=="queue_message"&&f.name!=="pending_prompt")return;let Z=f.payload&&typeof f.payload==="object"?f.payload:void 0,Q=typeof Z?.sessionId==="string"&&Z.sessionId.trim().length>0?Z.sessionId.trim():$,W=typeof Z?.prompt==="string"?Z.prompt.trim():"";if(!W)return;let j=f.name==="steer_message"?"steer":f.name==="queue_message"?"queue":Z?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(Q,{prompt:W,delivery:j})}handlePluginLog($,f,J){let Z=this.deps.getSession($),Q=J??Z?.config.extensionContext?.logger??Z?.config.logger;if(!Q||!f||typeof f!=="object")return;let W=f,j=typeof W.message==="string"?W.message:"";if(!j)return;let X=W.metadata&&typeof W.metadata==="object"?{...W.metadata}:{};if(X.sessionId??=$,typeof W.pluginName==="string"&&W.pluginName)X.pluginName=W.pluginName;if(W.level==="debug"){Q.debug(j,X);return}if(W.level==="error"){if(Q.error)Q.error(j,X);else Q.log(j,{...X,severity:"error"});return}Q.log(j,X)}}function C7($){return $.getAgentId()}function b7($){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:f1($.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 k7($,f){let J=$[f];return typeof J==="function"?J:null}async function RK($,f,...J){let Z=k7($,f);if(!Z)throw Error(`session service method not available: ${f}`);return Promise.resolve(Z.apply($,J))}async function DK($,f,...J){let Z=k7($,f);if(!Z)return;await Promise.resolve(Z.apply($,J))}async function LK($,f,...J){let Z=k7($,f);if(!Z)return;return await Promise.resolve(Z.apply($,J))}X$();L0();function I7($,f,J,Z){return e$({configProvider:{getRuntimeConfig:()=>$.getSession(J)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:f.providerId,modelId:f.modelId,cwd:f.cwd,apiKey:f.apiKey,baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking,maxIterations:f.maxIterations,hooks:f.hooks,extensions:f.extensions,logger:f.logger,telemetry:f.telemetry},getConnectionConfig:()=>$.getSession(J)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:f.providerId,modelId:f.modelId,apiKey:f.apiKey,baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let W=f.enableTools?x1({cwd:f.cwd,...k0[q$({mode:f.mode})],executors:Z}):[];if(f.enableSpawnAgent)W.push(I7($,f,J,Z));return c1(W)},onSubAgentEvent:(W)=>$.onAgentEvent(J,f,W),onSubAgentStart:(W)=>{let j=$.getSession(J)?.runtime.teamRuntime;$.subAgentStarts.set(W.subAgentId,{startedAt:Date.now(),rootSessionId:J});let X=S$({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:j?.getTeamId(),teamName:j?.getTeamName(),createdByAgentId:W.parentAgentId});if(X)p$(f.telemetry,{ulid:J,modelId:f.modelId,provider:f.providerId,...X});i2(f.telemetry,{event:"started",ulid:J,durationMs:0,parentId:W.parentAgentId,agentId:W.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",J,W)},onSubAgentEnd:(W)=>{let j=$.getSession(J)?.runtime.teamRuntime,X=$.subAgentStarts.get(W.subAgentId),H=X?Date.now()-X.startedAt:0,Y=W.result?.text?W.result.text.split(`
719
+ `).length:0;i2(f.telemetry,{event:"ended",ulid:J,durationMs:H,outputLines:Y,errorMessage:W.error?String(W.error):void 0,agentId:W.subAgentId,parentId:W.parentAgentId,...S$({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:j?.getTeamId(),teamName:j?.getTeamName(),createdByAgentId:W.parentAgentId})}),$.subAgentStarts.delete(W.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",J,W)}})}import{readFile as TS,stat as NS}from"node:fs/promises";var MS=20480000;async function _K($){let f=await NS($);if(!f.isFile())throw Error("Path is not a file");if(f.size>MS)throw Error("File is too large to read into context.");let J=await TS($,"utf8");if(J.includes("\x00"))throw Error("Cannot read binary file into context.");return J}var zK=5000;function X4($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function bS($){if(!$||typeof $!=="object"||Array.isArray($))return;let f=$,J=X4(f.inputTokens),Z=X4(f.outputTokens),Q=X4(f.cacheReadTokens),W=X4(f.cacheWriteTokens),j=X4(f.totalCost);if(J===void 0||Z===void 0||Q===void 0||W===void 0||j===void 0)return;return{inputTokens:J,outputTokens:Z,cacheReadTokens:Q,cacheWriteTokens:W,totalCost:j}}function kS($,f){return{inputTokens:Math.max($.inputTokens,f.inputTokens),outputTokens:Math.max($.outputTokens,f.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,f.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,f.cacheWriteTokens),totalCost:Math.max($.totalCost,f.totalCost)}}class U${runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new CJ;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new z1;constructor($){let f=qS();if(f)ES(f);let J=Kf($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new g2,this.createAgentInstance=$.createAgent??((Z)=>new o$(Z)),this.defaultCapabilities=U0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new R$,this.oauthTokenManager=$.oauthTokenManager??new S7({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(J),this.defaultFetch=$.fetch,this.pendingPromptsController=new h7({getSession:(Z)=>this.sessions.get(Z),emit:(Z)=>this.emit(Z),send:(Z)=>this.runTurn(Z)}),this.pendingPrompts={list:async(Z)=>this.pendingPromptsController.list(Z.sessionId),update:async(Z)=>this.pendingPromptsController.update(Z),delete:async(Z)=>this.pendingPromptsController.delete(Z)},this.eventBridge=new E7({getSession:(Z)=>this.sessions.get(Z),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(Z)=>this.emit(Z),persistMessages:(Z,Q,W)=>{this.invoke("persistSessionMessages",Z,Q,W)},enqueuePendingPrompt:(Z,Q)=>this.pendingPromptsController.enqueue(Z,Q),invokeBackendOptional:(Z,...Q)=>this.invokeOptional(Z,...Q)})}async startSession($){let f=$.source??G0.CLI,J=s(),Z=$.config.sessionId?.trim()??"",Q=Z||SS(),W=$,j=W.initialMessages??[],X=j.length>0?vf(j):B0(),H=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!H)throw Error("session service method not available: ensureSessionsDir");let Y=x7(H,Q),A=x7(Y,`${Q}.messages.json`),V=x7(Y,`${Q}.json`),B=f1($.config),K=M0.parse({version:1,session_id:Q,source:f,pid:process.pid,started_at:J,status:"running",interactive:$.interactive===!0,provider:W.config.providerId,model:W.config.modelId,cwd:W.config.cwd,workspace_root:B,team_name:W.config.teamName,enable_tools:W.config.enableTools,enable_spawn:W.config.enableSpawnAgent,enable_teams:W.config.enableAgentTeams,prompt:W.prompt?.trim()||void 0,messages_path:A}),G;if(Z.length>0&&j.length>0&&!W.prompt?.trim()){let k=await this.invokeOptionalValue("readSessionManifest",Q);if(k)K=k,G={manifestPath:V,messagesPath:k.messages_path||A,manifest:k}}let P=await this.seedAggregateUsageFromArtifacts({initialUsage:X,sessionDir:Y,rootMessagesPath:G?.messagesPath??A,manifest:K});this.usageBySession.set(Q,X),this.aggregateUsageBySession.set(Q,P);let F=U0(this.defaultCapabilities,$.capabilities),U=F?.toolExecutors??this.toolExecutors,z=$.localRuntime,O=z?.extensionContext?.logger??z?.logger,D=z?.extensionContext?.automation,_;_=await FH({input:W,localRuntime:$.localRuntime,sessionId:Q,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:F,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(k)=>{if(k.name==="plugin_log"){this.eventBridge.handlePluginLog(Q,k.payload,O);return}this.eventBridge.handlePluginEvent(Q,k,D)},onTeamEvent:(k)=>{this.eventBridge.handleTeamEvent(Q,k),_.config.onTeamEvent?.(k)},createSpawnTool:()=>I7({getSession:(k)=>this.sessions.get(k),subAgentStarts:this.subAgentStarts,onAgentEvent:(k,D0,n)=>this.eventBridge.dispatchAgentEvent(k,D0,n),invokeBackendOptional:(k,...D0)=>this.invokeOptional(k,...D0)},_.config,Q,U),readSessionMetadata:async()=>(await this.getSession(Q))?.metadata,writeSessionMetadata:async(k)=>{await this.persistSessionMetadata(Q,()=>k)}});let N=await this.runtimeBuilder.build(_.runtimeBuilderInput),q=_.config,$0=_.providerConfig;if(N.teamRuntime&&!q.teamName?.trim())q.teamName=N.teamRuntime.getTeamName();let A0=[...N.tools,...q.extraTools??[]],o=N.extensions??_.extensions,V0={sessionId:Q,providerId:$0.providerId,modelId:$0.modelId,apiKey:$0.apiKey,baseUrl:$0.baseUrl,headers:$0.headers,knownModels:$0.knownModels,providerConfig:$0,thinking:q.thinking,reasoningEffort:q.reasoningEffort??$0.reasoningEffort,systemPrompt:q.systemPrompt,maxIterations:q.maxIterations,execution:q.execution,prepareTurn:e2(q),tools:A0,hooks:_.hooks,extensions:o,hookErrorMode:q.hookErrorMode,initialMessages:_.effectiveInput.initialMessages,userFileContentLoader:_K,toolPolicies:_.toolPolicies,requestToolApproval:_.requestToolApproval?async(k)=>{let D0=_.requestToolApproval,n=this.sessions.get(Q);if(n)await this.markTurnPending(n);try{if(!D0)return{approved:!1,reason:"Tool approval callback is not configured."};return await D0(k)}finally{let t0=this.sessions.get(Q);if(t0?.status==="pending")await this.markTurnRunning(t0)}}:void 0,telemetry:q.telemetry,onConsecutiveMistakeLimitReached:q.onConsecutiveMistakeLimitReached,completionPolicy:N.completionPolicy,consumePendingUserMessage:()=>{let k=this.pendingPromptsController.consumeSteer(Q);return k?lJ(k.prompt,k.mode??q.mode):void 0},logger:N.logger??q.logger,extensionContext:q.extensionContext,onEvent:(k)=>this.eventBridge.dispatchAgentEvent(Q,q,k)};V0.hooks={...V0.hooks,onEvent:async(k)=>{if(await _.hooks?.onEvent?.(k),k.type!=="assistant-message")return;let D0=this.sessions.get(Q);if(!D0)return;let n=D0.agent.getMessages();try{await this.invoke("persistSessionMessages",Q,n,q.systemPrompt)}catch(t0){q.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:Q,error:t0}),zf(q.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:t0,severity:"warn",handled:!0,context:{sessionId:Q,providerId:q.providerId,modelId:q.modelId}})}}};let i=this.createAgentInstance(V0);if(V0.onEvent)i.subscribeEvents(V0.onEvent);N.registerLeadAgent?.(i);let Z$=S$({agentId:i.getAgentId(),conversationId:i.getConversationId(),teamId:N.teamRuntime?.getTeamId(),teamName:N.teamRuntime?.getTeamName(),teamRole:N.teamRuntime?"lead":void 0});if(RH(q,Q,Z.length>0,B,Z$),Z$)p$(q.telemetry,{ulid:Q,modelId:q.modelId,provider:q.providerId,...Z$});if(N.teamRuntime)z4(q.telemetry,{ulid:Q,teamId:N.teamRuntime.getTeamId(),teamName:N.teamRuntime.getTeamName(),leadAgentId:i.getAgentId(),restoredFromPersistence:N.teamRestoredFromPersistence===!0});let p={sessionId:Q,config:q,sessionMetadata:W.sessionMetadata,...G?{artifacts:G}:{},source:f,startedAt:G?.manifest.started_at??J,updatedAt:G?.manifest.ended_at??G?.manifest.started_at??J,pendingPrompt:K.prompt,runtime:N,agent:i,started:!1,status:G?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:j,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:_.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(this.sessions.set(Q,p),this.emitStatus(Q,"running"),j.length>0&&!G){if(await this.ensureSessionPersisted(p),await this.invoke("persistSessionMessages",p.sessionId,j,p.config.systemPrompt),!W.prompt?.trim())await this.updateStatus(p,"completed",0)}let a0;try{if(W.prompt?.trim())if(a0=await this.executeTurn(p,{prompt:W.prompt,userImages:W.userImages,userFiles:W.userFiles}),!p.interactive)await this.finalizeSingleRun(p,a0.finishReason);else await this.completeInteractiveTurn(p,a0.finishReason)}catch(k){if(p.interactive&&p.aborting)a0=await this.completeAbortedInteractiveTurn(p);else throw zf(p.config.telemetry,{component:"core",operation:"session.start",error:k,severity:"error",handled:!1,context:{sessionId:p.sessionId,providerId:p.config.providerId,modelId:p.config.modelId}}),await this.failSession(p),k}return{sessionId:Q,manifest:K,manifestPath:V,messagesPath:A,result:a0}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(f)=>this.getSession(f),readMessages:(f)=>this.readSessionMessages(f),buildStartInput:(f,J)=>{let Z=f.restoredCheckpointMetadata?{...J.sessionMetadata??{},checkpoint:f.restoredCheckpointMetadata}:J.sessionMetadata;return{...J,...Z?{sessionMetadata:Z}:{},initialMessages:f.initialMessages}},startSession:(f)=>this.startSession(f),getStartedSessionId:(f)=>f.sessionId,readRestoredSession:(f)=>this.getSession(f)})}async runTurn($){let f=this.getSessionOrThrow($.sessionId),J=f.agent.canStartRun(),Z=$.delivery??(f.interactive&&!J?"queue":void 0);if(f.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:Z??"immediate"}}),Z==="queue"||Z==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:Z,userImages:$.userImages,userFiles:$.userFiles});return}try{let Q=await this.executeTurn(f,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!f.interactive)await this.finalizeSingleRun(f,Q.finishReason);else await this.completeInteractiveTurn(f,Q.finishReason);if(Q.finishReason==="error"||Q.finishReason==="aborted")return Q;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),Q}catch(Q){if(f.interactive&&f.aborting)return await this.completeAbortedInteractiveTurn(f);throw zf(f.config.telemetry,{component:"core",operation:"session.submit",error:Q,severity:"error",handled:!1,context:{sessionId:f.sessionId,providerId:f.config.providerId,modelId:f.config.modelId}}),await this.failSession(f),Q}}async getAccumulatedUsage($){let f=qQ(this.usageBySession.get($)),J=qQ(this.aggregateUsageBySession.get($));return f||J?{usage:f,aggregateUsage:J}:void 0}async abort($,f){let J=this.sessions.get($);if(!J)return;J.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),J.aborting=!0,this.pendingPromptsController.clearAborted(J),J.agent.abort(f)}async stopSession($){let f=this.sessions.get($);if(!f)return;if(f.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),f.interactive&&!Z0(f.status)){await this.releaseSessionRuntime(f,"session_stop");return}if(f.interactive&&f.agent.canStartRun()){await this.shutdownSession(f,{status:this.resolveInteractiveStopStatus(f),exitCode:this.resolveInteractiveStopExitCode(f),shutdownReason:"session_stop",endReason:"stopped"});return}f.aborting=!0,f.agent.abort(Error("session_stop")),await this.shutdownSession(f,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let f=[...this.sessions.values()];if(f.length===0)return;await Promise.allSettled(f.map((J)=>J.interactive&&!Z0(J.status)?this.releaseSessionRuntime(J,$):J.interactive&&J.agent.canStartRun()?this.shutdownSession(J,{status:this.resolveInteractiveStopStatus(J),exitCode:this.resolveInteractiveStopExitCode(J),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(J,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let f=this.sessions.get($);if(f)return b7(f);let J=$.trim();if(!J)return;let Z=await this.getRow(J);if(Z)return O8(Z);let Q=await this.readManifest(J);return Q?A5(Q):void 0}async listSessions($=200){let J=(await this.listRows($)).map(O8),Z=new Set(J.map((Q)=>Q.sessionId));for(let Q of this.sessions.values()){if(Z.has(Q.sessionId))continue;J.unshift(b7(Q))}return J.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let f=await this.invoke("deleteSession",$);if(f.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return f.deleted}async updateSession($,f){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:f.prompt,metadata:f.metadata,title:f.title}))?.updated===!0}}async readSessionMessages($){let f=$.trim();if(!f)return[];let J=await this.getRow(f);if(J?.messagesPath)return P1(J.messagesPath);let Z=await this.readManifest(f);return P1(Z?.messages_path)}async dispatchHookEvent($){await tY($,{queueSpawnRequest:(f)=>this.invokeOptional("queueSpawnRequest",f),upsertSubagentSessionFromHook:(f)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",f),appendSubagentHookAudit:(f,J)=>this.invokeOptional("appendSubagentHookAudit",f,J),applySubagentStatus:(f,J)=>this.invokeOptional("applySubagentStatus",f,J)})}subscribe($,f){return this.events.subscribe($,f)}async updateSessionModel($,f){let J=this.getSessionOrThrow($);J.config.modelId=f,J.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:f}),J.agent.updateConnection({modelId:f})}handlePluginEvent($,f,J){return this.eventBridge.handlePluginEvent($,f,J)}async executeTurn($,f){let J=await this.prepareTurnInput($,f),Z=J.prompt.trim();if(!Z)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=Z;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let Q=await this.executeAgentTurn($,Z,J.userImages,J.userFiles);while(JW($,Q.finishReason)){let W=await ZW($);if(W.length===0)break;let j=QW($,W);Q=await this.executeAgentTurn($,j)}return Q}async completeInteractiveTurn($,f){if(dJ($))return;$.lastInteractiveTurnFinishReason=f,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let f=$.lastInteractiveTurnFinishReason;if(!f)return"cancelled";switch(f){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return f}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let f=new Date,J=$.agent.getMessages(),Z=B0();return $.persistedMessages=J,$.started=$.started||J.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:Z}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:Z,messages:J,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:f,endedAt:f,durationMs:0}}async executeAgentTurn($,f,J,Z){let Q=$.started||$.agent.getMessages().length>0,W=$.persistedMessages??$.agent.getMessages(),j=this.usageBySession.get($.sessionId)??B0(),X=this.aggregateUsageBySession.get($.sessionId)??j;$.turnUsageBaseline=j,$.turnAggregateUsageBaseline=X,$.turnPrimaryUsage=B0(),$.turnUsageByAgent=new Map,P4($.config.telemetry,$.sessionId,$.config.mode),Nf($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let H=Q?()=>$.agent.continue(f,J,Z):()=>$.agent.run(f,J,Z),Y=await this.runWithAuthRetry($,H,W);$.started=!0;let A=c4(Y.messages,Y,W);$.persistedMessages=A;let V=N8($.turnUsageByAgent?.values()??[]),B=X0(j,Y.usage),K=X0(X0(B0(),Y.usage),V),G=X0(X,K);return this.usageBySession.set($.sessionId,B),this.aggregateUsageBySession.set($.sessionId,G),await this.persistSessionMetadata($.sessionId,(R)=>({...R??{},totalCost:B.totalCost,aggregatedAgentsCost:G.totalCost,usage:B,aggregateUsage:G})),await this.invoke("persistSessionMessages",$.sessionId,A,$.config.systemPrompt),this.observeTaskCompletionTool($,Y),Y}catch(H){throw zf($.config.telemetry,{component:"core",operation:"session.turn",error:H,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),H}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,f){if($.submitAndExitObserved)return;if(!f.toolCalls.some((Z)=>Z.name===J0.SUBMIT_AND_EXIT&&Z.error===void 0))return;$.submitAndExitObserved=!0,p2($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,f){let J=f1($.config),Z=CS(f.prompt).trim();if(!Z)return{prompt:"",userImages:f.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,f.userFiles)};let Q=await qf(Z,J);DH($.config.telemetry,Q);let W=lJ(Q.prompt,f.mode??$.config.mode),j=this.resolveAbsoluteFilePaths($.config.cwd,f.userFiles),X=this.resolveAbsoluteFilePaths(J,Q.matchedFiles),H=Array.from(new Set([...j,...X]));return{prompt:W,userImages:f.userImages,userFiles:H.length>0?H:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let f=f1($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:f,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,f){let J=this.sessions.get($),Z=await this.invokeOptionalValue("readSessionManifest",$)??J?.artifacts?.manifest,Q=f(Z?.metadata);if(!J?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:Q}))?.updated===!1)return;J.sessionMetadata=Q,J.artifacts.manifest.metadata=Q}async finalizeSingleRun($,f){if(dJ($))return;let J=f==="aborted"||$.aborting,Z=f==="error";await this.shutdownSession($,{status:J?"cancelled":Z?"failed":"completed",exitCode:Z?1:0,shutdownReason:Z?"session_error":"session_complete",endReason:f})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,f){if(f.status==="completed"&&!$.submitAndExitObserved)p2($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});O5($);let J=[],Z=(Q,W)=>{J.push(W),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:Q,error:W,severity:"warn"}),zf($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:Q,status:f.status,shutdownReason:f.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,f.status,f.exitCode)}catch(Q){Z("update_status",Q)}try{await $.agent.shutdown(f.shutdownReason)}catch(Q){Z("agent_shutdown",Q)}}try{await Promise.resolve($.runtime.shutdown(f.shutdownReason))}catch(Q){Z("runtime_shutdown",Q)}try{await $.pluginSandboxShutdown?.()}catch(Q){Z("plugin_sandbox_shutdown",Q)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:f.endReason,ts:Date.now()}}),J.length>0&&f.status==="failed")throw J[0]}async releaseSessionRuntime($,f){let J=[],Z=(Q,W)=>{J.push(W),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:Q,error:W,severity:"warn"}),zf($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:Q,reason:f,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(f)}catch(Q){Z("agent_shutdown",Q)}try{await Promise.resolve($.runtime.shutdown(f))}catch(Q){Z("runtime_shutdown",Q)}try{await $.pluginSandboxShutdown?.()}catch(Q){Z("plugin_sandbox_shutdown",Q)}if(this.sessions.delete($.sessionId),J.length>0)throw J[0]}async updateStatus($,f,J){if(!$.artifacts)return;let Z=await this.invoke("updateSessionStatus",$.sessionId,f,J);if(!Z.updated)return;let Q=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(Q.status=f,Z0(f))delete Q.ended_at,Q.exit_code=null;else Q.ended_at=Z.endedAt??s(),Q.exit_code=typeof J==="number"?J:null;$.artifacts.manifest=Q,$.status=f,$.updatedAt=Z.endedAt??s(),$.endedAt=Z0(f)?null:Q.ended_at,$.exitCode=Q.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,Q),this.emitStatus($.sessionId,f)}async runWithAuthRetry($,f,J){try{return await f()}catch(Z){if(!hS(Z,$.config.providerId))throw Z;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(J),f()}}async syncOAuthCredentials($,f){let J=null;try{J=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:f?.forceRefresh})}catch(Z){if(Z instanceof YZ)throw Error(`${Z.providerId} requires re-authentication.`);throw Z}if(!J?.apiKey||$.config.apiKey===J.apiKey)return;$.config.apiKey=J.apiKey,$.agent.updateConnection({apiKey:J.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:J.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:J.apiKey})}getSessionOrThrow($){let f=this.sessions.get($);if(!f){let J=new b$($);throw zf(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:J,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),J}return f}resolveAbsoluteFilePaths($,f){if(!f||f.length===0)return[];let J=f.map((Z)=>Z.trim()).filter((Z)=>Z.length>0).map((Z)=>wS(Z)?Z:m7($,Z));return Array.from(new Set(J))}getSessionAgentTelemetryIdentity($){return S$({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let f=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),J=X0($.initialUsage,f);return this.withPersistedAggregateUsageFloor(J,$.manifest)}async summarizePersistedTeammateUsage($,f,J){let Z=m7(f),Q=`${J}.messages.json`,W;try{W=yS($)}catch{return B0()}let j=B0();for(let X of W){if(!X.endsWith(".messages.json"))continue;if(X===Q)continue;let H=m7($,X);if(H===Z)continue;let Y=await P1(H);if(Y.length===0)continue;j=X0(j,vf(Y))}return j}withPersistedAggregateUsageFloor($,f){let J=bS(f.metadata?.aggregateUsage);if(J)return kS($,J);let Z=f.metadata?.aggregatedAgentsCost;if(typeof Z!=="number"||!Number.isFinite(Z)||Z<=$.totalCost)return $;return{...$,totalCost:Z}}emitStatus($,f){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:f}})}async emitSessionSnapshot($){let f=await this.getSession($);if(!f)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:B$({session:f,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),zK))}async getRow($){let f=$.trim();if(!f)return;return(await this.listRows(zK)).find((Z)=>Z.sessionId===f)}async readManifest($){let f=$.trim();if(!f)return;return await this.invokeOptionalValue("readSessionManifest",f)}invoke($,...f){return RK(this.sessionService,$,...f)}invokeOptional($,...f){return DK(this.sessionService,$,...f)}invokeOptionalValue($,...f){return LK(this.sessionService,$,...f)}}function xS($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((f)=>({name:f.name,input:f.input,output:f.output,error:f.error,durationMs:f.durationMs}))}}function mS($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function x5($={}){let f=new U$({sessionService:new F$(new G$),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(J){let Z=(J.cwd?.trim()||J.workspaceRoot).trim(),Q=await f.startSession({source:J.source?.trim()||G0.CLI,interactive:!1,config:{providerId:IS(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:Z,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:mS(J),maxIterations:J.maxIterations,enableTools:J.enableTools!==!1,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},toolPolicies:J.toolPolicies??{"*":{autoApprove:J.autoApproveTools!==!1}},localRuntime:{configExtensions:J.configExtensions}});return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:Q.manifestPath,messagesPath:Q.messagesPath}}},async sendSession(J,Z){let Q=await f.runTurn({sessionId:J,prompt:Z.prompt,userImages:Z.attachments?.userImages,userFiles:Z.attachments?.userFiles?.map((W)=>W.content)});if(!Q)throw Error("local hub schedule runtime returned no turn result");return{result:xS(Q)}},async abortSession(J){return await f.abort(J,Error("hub schedule abort")),{applied:!0}},async stopSession(J){return await f.stopSession(J),{applied:!0}}}}vS(process.env.CLINE_VCR);function uS($){let f=process.cwd(),J,Z,Q;for(let W=0;W<$.length;W+=1){let j=$[W],X=$[W+1];if(j==="--cwd"&&X){f=X,W+=1;continue}if(j==="--host"&&X){J=X,W+=1;continue}if(j==="--port"&&X){let H=Number(X);if(Number.isFinite(H))Z=H;W+=1;continue}if(j==="--pathname"&&X)Q=X,W+=1}return{cwd:f,host:J,port:Z,pathname:Q}}async function cS(){let $=uS(process.argv.slice(2));process.chdir($.cwd);let f=d0({host:$.host,port:$.port,pathname:$.pathname}),J=await Df({host:f.host,port:f.port,pathname:f.pathname,owner:Y0(),runtimeHandlers:x5(),cronOptions:{workspaceRoot:$.cwd}}),Z=async()=>{await J.close(),process.exit(0)},Q=!1,W=(j,X)=>{if(Q)return;Q=!0;let H=X instanceof Error?X.stack||X.message:String(X);process.stderr.write(`[hub-daemon] ${j}: ${H}
720
+ `),J.close().catch((Y)=>{let A=Y instanceof Error?Y.stack||Y.message:String(Y);process.stderr.write(`[hub-daemon] shutdown after ${j} failed: ${A}
721
+ `)}).finally(()=>{process.exit(1)})};process.on("SIGINT",()=>{Z()}),process.on("SIGTERM",()=>{Z()}),process.on("uncaughtException",(j)=>{W("uncaughtException",j)}),process.on("unhandledRejection",(j)=>{if(j instanceof gS){process.stderr.write(`[hub-daemon] ignored agent runtime abort rejection: ${j.message}
722
+ `);return}W("unhandledRejection",j)}),await new Promise(()=>{})}cS().catch(($)=>{let f=$ instanceof Error?$.stack||$.message:String($);process.stderr.write(`[hub-daemon] fatal: ${f}
722
723
  `),process.exit(1)});