@cline/core 0.0.56 → 0.0.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/hub/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import{createRequire as MD}from"node:module";var{defineProperty:QW,getOwnPropertyNames:TD}=Object;var Wj=Object.prototype.hasOwnProperty;function Jj($){return this[$]}var R=($,Z,Q)=>{var W=TD(Z);for(let J of W)if(!Wj.call($,J)&&J!=="default")QW($,J,{get:Jj.bind(Z,J),enumerable:!0});if(Q){for(let J of W)if(!Wj.call(Q,J)&&J!=="default")QW(Q,J,{get:Jj.bind(Z,J),enumerable:!0});return Q}};var OD=($)=>$;function qD($,Z){this[$]=OD.bind(null,Z)}var N=($,Z)=>{for(var Q in Z)QW($,Q,{get:Z[Q],enumerable:!0,configurable:!0,set:qD.bind(Z,Q)})};var p$=($,Z)=>()=>($&&(Z=$($=0)),Z);var Xj=MD(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as jL,captureAgentUnexpectedReasoningTokens as Rj,SDK_ERROR_TELEMETRY_EVENT as VL}from"@cline/shared";function i($,Z,Q){$?.capture({event:Z,properties:Q})}function z9($){if(!$)return;return $.substring(0,HL)}function BL($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function GL($){return typeof $==="string"?$:$.message}function Mj($,Z){return $.some((Q)=>Z.has(Q.trim().toLowerCase()))}function Ej($){i($,m.CLIENT.EXTENSION_ACTIVATED)}function T9($,Z){let Q=[...Z.vcs_types],W={root_count:Z.root_count,vcs_types:Q,is_multi_root:Z.root_count>1,has_git:Mj(Q,new Set(["git"])),has_mercurial:Mj(Q,new Set(["mercurial","hg"]))};if(Z.init_duration_ms!==void 0)W.init_duration_ms=Z.init_duration_ms;if(Z.feature_flag_enabled!==void 0)W.feature_flag_enabled=Z.feature_flag_enabled;if(Z.is_remote_workspace!==void 0)W.is_remote_workspace=Z.is_remote_workspace;i($,m.WORKSPACE.INITIALIZED,W)}function O9($,Z,Q){i($,m.WORKSPACE.INIT_ERROR,{error_type:BL(Z),error_message:z9(GL(Z)),fallback_to_single_root:Q.fallback_to_single_root,workspace_count:Q.workspace_count??0})}function Nj($,Z){i($,m.WORKSPACE.PATH_RESOLVED,{...Z})}function C1($,Z){i($,m.USER.AUTH_STARTED,{provider:Z})}function P1($,Z){i($,m.USER.AUTH_SUCCEEDED,{provider:Z})}function S1($,Z,Q){i($,m.USER.AUTH_FAILED,{provider:Z,errorMessage:z9(Q)})}function V$($,Z,Q){i($,m.USER.AUTH_LOGGED_OUT,{provider:Z,reason:Q})}function wj($,Z){i($,m.USER.PROVIDER_CONFIGURED,{provider:Z})}function Cj($,Z){$?.captureRequired(m.USER.TELEMETRY_OPT_OUT,Z)}function b1($,Z){let Q=Z.id?.trim();if(Q)$?.setDistinctId(Q);$?.updateCommonProperties({account_id:Z.id,account_email:Z.email,provider:Z.provider,organization_id:Z.organizationId,organization_name:Z.organizationName,member_id:Z.memberId})}function q9($,Z){i($,m.TASK.CREATED,Z)}function M9($,Z){i($,m.TASK.RESTARTED,Z)}function g4($,Z){i($,m.TASK.COMPLETED,Z)}function Q8($,Z){i($,m.TASK.CONVERSATION_TURN,{...Z,timestamp:new Date().toISOString()})}function R9($,Z){i($,m.TASK.TOKEN_USAGE,Z)}function E9($,Z,Q){i($,m.TASK.MODE_SWITCH,{ulid:Z,mode:Q})}function W8($,Z){i($,m.TASK.TOOL_USED,Z)}function N9($,Z){i($,m.TASK.SKILL_USED,Z)}function w9($,Z){i($,m.TASK.DIFF_EDIT_FAILED,Z)}function m4($,Z){i($,m.TASK.PROVIDER_API_ERROR,{...Z,errorMessage:z9(Z.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function Pj($,Z){i($,m.SDK.TOOL_TIMEOUT,KL(Z))}function KL($){let Z={};for(let[Q,W]of Object.entries($))if(W!==void 0)Z[Q]=W;return Z}function C9($,Z,Q){i($,m.TASK.MENTION_USED,{mentionType:Z,contentLength:Q,timestamp:new Date().toISOString()})}function P9($,Z,Q,W){i($,m.TASK.MENTION_FAILED,{mentionType:Z,errorType:Q,errorMessage:z9(W),timestamp:new Date().toISOString()})}function S9($,Z,Q,W,J){i($,m.TASK.MENTION_SEARCH_RESULTS,{queryLength:Z.length,resultCount:Q,searchType:W,isEmpty:J,timestamp:new Date().toISOString()})}function H$($,Z){i($,m.TASK.AGENT_CREATED,{...Z,timestamp:new Date().toISOString()})}function b9($,Z){i($,m.TASK.AGENT_TEAM_CREATED,{...Z,timestamp:new Date().toISOString()})}function v4($,Z){i($,Z.event==="ended"?m.TASK.SUBAGENT_COMPLETED:m.TASK.SUBAGENT_STARTED,{...Z,timestamp:new Date().toISOString()})}function y9($,Z,Q,W){i($,m.HOOKS.DISCOVERY_COMPLETED,{hookName:Z,globalCount:Q,workspaceCount:W,totalCount:Q+W,timestamp:new Date().toISOString()})}function h9($,Z){i($,m.TASK.COMPACTION_EXECUTED,{...Z,timestamp:new Date().toISOString()})}function k9($,Z){i($,m.TASK.COMPACTION_SKIPPED,{...Z,timestamp:new Date().toISOString()})}var HL=500,m;var _0=p$(()=>{m={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:jL},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:VL,TOOL_TIMEOUT:"sdk.tool_timeout"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as FL,readFileSync as AL,statSync as fL,writeFileSync as UL}from"node:fs";import{dirname as DL}from"node:path";import{resolveGlobalSettingsPath as bj}from"@cline/shared/storage";import{z as a$}from"zod";function I9(){return c4.parse({})}function _L(){x9=void 0}function zL($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function TL($){let Z;try{Z=AL($,"utf8")}catch{return I9()}try{let Q=c4.safeParse(JSON.parse(Z));return Q.success?Q.data:I9()}catch{return I9()}}function OL(){let $=bj(),Z=fL($,{throwIfNoEntry:!1}),Q=Z?.mtimeMs??0,W=Z?.size??0,J=x9;if(J&&J.path===$&&J.mtimeMs===Q&&J.size===W)return J;let X=zL(Z?TL($):I9());return x9={path:$,mtimeMs:Q,size:W,value:X},x9}function z0(){return OL().value}function B1($,Z={}){let Q=bj(),W=z0();FL(DL(Q),{recursive:!0});let J=c4.parse($);if(!W.telemetryOptOut&&J.telemetryOptOut)Cj(Z.telemetry);UL(Q,`${JSON.stringify(J,null,2)}
2
- `,"utf8"),_L()}function g9(){return z0().telemetryOptOut}function yj($,Z={}){B1({...z0(),telemetryOptOut:$},Z)}function hj(){return z0().autoUpdateEnabled}function kj($,Z={}){B1({...z0(),autoUpdateEnabled:$},Z)}function Ij(){return z0().compactionStrategy??"basic"}function xj($){B1({...z0(),compactionStrategy:$})}function G1($){return new Set($??z0().disabledTools??[])}function u4($){return new Set($??z0().disabledPlugins??[])}function gj($){return G1().has($)}function m9($){let Z=z0(),Q=new Set(Z.disabledTools??[]),W=Q.has($);if(W)Q.delete($);else Q.add($);return B1({...Z,disabledTools:[...Q]}),!W}function fW($,Z){let Q=[...new Set($.map((X)=>X.trim()).filter(Boolean))];if(Q.length===0)return;let W=z0(),J=G1(W.disabledTools);for(let X of Q)if(Z)J.add(X);else J.delete(X);B1({...W,disabledTools:[...J]})}function mj($,Z){return fW([$],Z),Z}function vj($){return u4().has($)}function cj($,Z){let Q=$.trim();if(!Q)return;let W=z0(),J=u4(W.disabledPlugins);if(Z)J.add(Q);else J.delete(Q);B1({...W,disabledPlugins:[...J]})}function v9($,Z){let Q=u4(Z);if(Q.size===0)return[...$];return $.filter((W)=>!Q.has(W))}function y1($,Z){let Q=G1(Z);if(Q.size===0)return[...$];return $.filter((W)=>!Q.has(W.name))}function c9($,Z){if(!$||$.length===0)return $;let Q=G1(Z);if(Q.size===0)return $;return $.map((W)=>{if(!W.setup)return W;return{...W,setup:(J,X)=>W.setup?.({...J,registerTool:(Y)=>{if(!Q.has(Y.name))J.registerTool(Y)}},X)}})}var Sj,LL,c4,x9;var $1=p$(()=>{_0();Sj=a$.preprocess(($)=>Array.isArray($)?$.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter(Boolean):void 0,a$.array(a$.string()).optional()).transform(($)=>{if(!$)return;let Z=[...new Set($)].sort((Q,W)=>Q.localeCompare(W));return Z.length>0?Z:void 0}),LL=a$.enum(["basic","agentic"]).catch("basic"),c4=a$.object({telemetryOptOut:a$.boolean().default(!1).catch(!1),autoUpdateEnabled:a$.boolean().default(!0).catch(!0),compactionStrategy:LL.optional(),disabledTools:Sj.optional(),disabledPlugins:Sj.optional()}).strip().transform(($)=>{let Z={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.compactionStrategy)Z.compactionStrategy=$.compactionStrategy;if($.disabledTools?.length)Z.disabledTools=$.disabledTools;if($.disabledPlugins?.length)Z.disabledPlugins=$.disabledPlugins;return Z})});import{existsSync as qL,mkdirSync as ML,readFileSync as RL,writeFileSync as EL}from"node:fs";import{resolve as NL}from"node:path";import{resolveSessionDataDir as wL}from"@cline/shared/storage";import{nanoid as CL}from"nanoid";import*as PL from"node-machine-id";function P0($){let Z=$?.trim();if(Z)return Z;let Q=yL();if(Q)return Q;return hL()}function bL(){let $=PL;return $.machineIdSync??$.default?.machineIdSync}function yL(){try{let $=bL();if(!$)return;return $().trim()||void 0}catch{return}}function hL(){let $=wL(),Z=NL($,SL);try{if(qL(Z)){let W=RL(Z,"utf8").trim();if(W.length>0)return W}}catch{}let Q=`cl-${CL()}`;try{ML($,{recursive:!0}),EL(Z,Q,"utf8")}catch{}return Q}var SL="machine-id";var J8=()=>{};class l4{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,Z){if(!this.isEnabled())return;this.emitLog($,Z,!1)}emitRequired($,Z){this.emitLog($,Z,!0)}recordCounter($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.counters.get($);if(!X)X=this.meter.createCounter($,W?{description:W}:void 0),this.counters.set($,X);X.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.histograms.get($);if(!X)X=this.meter.createHistogram($,W?{description:W}:void 0),this.histograms.set($,X);X.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.buildAttributes(Q),Y=JSON.stringify(X),j=this.gaugeValues.get($);if(Z===null){if(j){if(j.delete(Y),j.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=j;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let H=this.meter.createObservableGauge($,W?{description:W}:void 0);H.addCallback((B)=>{for(let G of this.snapshotGaugeSeries($))B.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set($,H)}V.set(Y,{value:Z,attributes:X})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,Z,Q){if(!this.logger)return;let W=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:W})}buildAttributes($,Z=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...Z?{_required:!0}:{}}}snapshotGaugeSeries($){let Z=this.gaugeValues.get($);if(!Z)return[];return Array.from(Z.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,Z="",Q=new WeakSet,W=0){if(!$)return{};let J={},X=100,Y=10;for(let[j,V]of Object.entries($)){if(j==="__proto__"||j==="constructor"||j==="prototype")continue;let H=Z?`${Z}.${j}`:j;if(V===null||V===void 0){J[H]=String(V);continue}if(Array.isArray(V)){let B=V.length>X?V.slice(0,X):V;try{J[H]=JSON.stringify(B)}catch{J[H]="[UnserializableArray]"}if(V.length>X)J[`${H}_truncated`]=!0,J[`${H}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){J[H]=V.toISOString();continue}if(V instanceof Error){J[H]=V.message;continue}if(Q.has(V)){J[H]="[Circular]";continue}if(W>=Y){J[H]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(J,this.flattenProperties(V,H,Q,W+1));continue}if(kL(V)){J[H]=V;continue}try{J[H]=JSON.stringify(V)}catch{J[H]=String(V)}}return J}}function kL($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class p4{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,Z){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:Z})}emitRequired($,Z){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:Z})}recordCounter($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordHistogram($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordGauge($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:W,required:J===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class X8{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new p4({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let Z=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,Z)}captureRequired($,Z){let Q=this.buildAttributes(Z);for(let W of this.adapters)W.emitRequired($,Q)}recordCounter($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordCounter($,Z,X,W,J)}recordHistogram($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordHistogram($,Z,X,W,J)}recordGauge($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordGauge($,Z,X,W,J)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var UW=()=>{};import{metrics as IL,trace as xL}from"@opentelemetry/api";import{logs as gL}from"@opentelemetry/api-logs";import{OTLPLogExporter as mL}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as vL}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as cL}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as uL}from"@opentelemetry/resources";import{BatchLogRecordProcessor as dL,ConsoleLogRecordExporter as lL,LoggerProvider as pL}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as rL,MeterProvider as iL,PeriodicExportingMetricReader as uj}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as nL,ConsoleSpanExporter as aL,SimpleSpanProcessor as sL}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as oL}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as tL,ATTR_SERVICE_VERSION as eL}from"@opentelemetry/semantic-conventions";class dj{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,Z){this.resolveProperties(Z)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class Y8{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=uL({[tL]:$.serviceName??"cline",...$.serviceVersion?{[eL]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)IL.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)gL.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return xL.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new l4({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new X8({...$,adapters:[Z],distinctId:P0($.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider($){let Z=DW(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),W=Math.min(30000,Math.floor(Q*0.8)),J=Z.map((X)=>Q_(X,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:W})).filter((X)=>X!==null);if(J.length===0)return null;return new iL({resource:$,readers:J})}createTracerProvider($){let Z=DW(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,W=this.options.otlpTracesHeaders??this.options.otlpHeaders,J=[];for(let X of Z){let Y=Z_(X,{endpoint:Q,headers:W,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(Y)J.push(Y)}if(J.length===0)return null;return new oL({resource:$,spanProcessors:J})}createLoggerProvider($){let Z=DW(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((W)=>{let J=$_(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new dL(J,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((W)=>W!==null);if(Q.length===0)return null;return new pL({resource:$,processors:Q})}}function r4($){let Z=new Y8($),Q=Z.createTelemetryService($);return Q.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion}),{provider:Z,telemetry:Q}}function h1($){if(g9())return{telemetry:new dj($)};if($.enabled!==!0)return{telemetry:new X8({...$,distinctId:P0($.distinctId)})};return r4($)}function j8($){let{telemetry:Z,provider:Q}=h1($);return{telemetry:Z,provider:Q,flush:async()=>{let X=Q;if(X&&typeof X.forceFlush==="function")try{await X.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])}}}function DW($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function $_($,Z){if($==="console")return new lL;if(!Z.endpoint)return null;let Q=LW(Z.endpoint,"/v1/logs");return new mL({url:Q,headers:Z.headers})}function Z_($,Z){if($==="console")return new sL(new aL);if(!Z.endpoint)return null;let Q=LW(Z.endpoint,"/v1/traces");return new nL(new cL({url:Q,headers:Z.headers}))}function Q_($,Z){if($==="console")return new uj({exporter:new rL,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=LW(Z.endpoint,"/v1/metrics");return new uj({exporter:new vL({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function LW($,Z){let Q=new URL($),W=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=W.endsWith(Z)?W:`${W}${Z}`,Q.toString()}var u9=p$(()=>{$1();J8();UW()});var _B={};N(_B,{normalizeUserMessage:()=>nq,buildInitialUserContent:()=>iq});async function iq($,Z,Q,W){let J=aq(Z),X=await oq(Q,W);if(J.length===0&&!X)return $;let Y=[{type:"text",text:$},...J];if(X)Y.push(...X);return Y}function nq($){if($==null)return"";if(typeof $==="string")return $;let Z=$.content;if(typeof Z==="string")return Z;if(!Array.isArray(Z))return"";let Q=[];for(let W of Z)if(W&&typeof W==="object"&&W.type==="text"){let J=W.text;if(typeof J==="string")Q.push(J)}return Q.join(`
3
- `)}function aq($){if(!$||$.length===0)return[];let Z=[];for(let Q of $){let W=sq(Q);if(W)Z.push(W)}return Z}function sq($){let Z=$.trim();if(!Z)return;let Q=Z.match(/^data:([^;,]+);base64,(.+)$/);if(Q){let W=Q[1],J=Q[2];if(!W||!J)return;return{type:"image",mediaType:W,data:J}}return{type:"image",mediaType:"image/png",data:Z}}async function oq($,Z){if(!$||$.length===0)return;let Q=Z??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),W=await Promise.all($.map(async(J)=>{let X=J.replace(/\\/g,"/");try{let Y=await Q(J);return{type:"file",path:X,content:Y}}catch(Y){let j=Y instanceof Error?Y.message:String(Y);return{type:"file",path:X,content:`Error fetching content: ${j}`}}}));if(W.length===0)return;return W}var pK={};N(pK,{updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>t8,updateMcpServerOAuthStateAsync:()=>O5,updateMcpServerOAuthState:()=>P2,setMcpServerDisabled:()=>w2,resolveMcpServerRegistrations:()=>p0,resolveDefaultMcpSettingsPath:()=>Z0,registerMcpServersFromSettingsFile:()=>S2,normalizeMcpServerOAuthState:()=>e8,loadMcpSettingsFile:()=>N2,listMcpServerOAuthStatuses:()=>q5,hasMcpSettingsFile:()=>s1,getMcpServerOAuthState:()=>C2,McpSettingsUpdateSkippedError:()=>o8,McpSettingsMutatorPurityError:()=>y$,McpSettingsLockTimeoutError:()=>h$});import{existsSync as PK,mkdirSync as qJ,readFileSync as SK,renameSync as EJ,rmdirSync as aN,rmSync as MJ,statSync as sN,unlinkSync as bK,writeFileSync as yK}from"node:fs";import{randomUUID as oN}from"node:crypto";import{dirname as hK,join as CK}from"node:path";import{setTimeout as tN}from"node:timers/promises";import{resolveMcpSettingsPath as eN}from"@cline/shared/storage";import{z as S}from"zod";function RJ($){if(!$)return;if($==="http")return"streamableHttp";return $}function Z0(){return eN()}function Bw($,Z){qJ(hK($),{recursive:!0});let Q=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{yK(Q,Z,{encoding:"utf8",flag:"wx"}),EJ(Q,$)}catch(W){try{bK(Q)}catch{}throw W}}function Kw($){Atomics.wait(Gw,0,0,$)}function Fw($){return`${$}.lock`}function gK(){return`${process.pid}.${Date.now()}.${oN()}`}function mK($,Z){qJ(hK($),{recursive:!0});let Q=`${$}.tmp.${Z}`;MJ(Q,{recursive:!0,force:!0}),qJ(Q,{recursive:!0}),yK(CK(Q,`owner.${Z}`),Z,{encoding:"utf8",flag:"wx"});try{return EJ(Q,$),{lockDir:$,ownerFile:CK($,`owner.${Z}`)}}catch(W){if(MJ(Q,{recursive:!0,force:!0}),PK($))return;throw W}}function vK($,Z){let Q;try{Q=Date.now()-sN($).mtimeMs}catch(J){if(J.code==="ENOENT")return;throw J}if(Q<wJ)return;Z.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Q}ms); reclaiming.`,{severity:"warn"});let W=`${$}.stale.${gK()}`;try{EJ($,W)}catch(J){if(J.code==="ENOENT")return;throw J}MJ(W,{recursive:!0,force:!0})}function Aw($){try{bK($.ownerFile)}catch(Z){if(Z.code!=="ENOENT")throw Z}try{aN($.lockDir)}catch(Z){let Q=Z.code;if(Q!=="ENOENT"&&Q!=="ENOTEMPTY"&&Q!=="EEXIST")throw Z}}function cK($){let Z=Fw($);if(wQ.has(Z))throw Error(`Reentrant MCP settings update for ${$}. Keep mutators pure: compute values up front and do not call back into the settings API.`);return{lockDir:Z,token:gK()}}function fw($,Z){let{lockDir:Q,token:W}=cK($),J=Z.timeoutMs??wJ,X=Date.now();while(!0){let Y=mK(Q,W);if(Y)return wQ.add(Q),Y;if(Date.now()-X>J)throw new h$(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);vK(Q,Z),Kw(xK)}}async function Uw($,Z){let{lockDir:Q,token:W}=cK($),J=Z.timeoutMs??wJ,X=Date.now();while(!0){let Y=mK(Q,W);if(Y)return wQ.add(Q),Y;if(Date.now()-X>J)throw new h$(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);vK(Q,Z),await tN(xK)}}function uK($,Z,Q){try{let W=Dw(Z),J=Lw(W,Q);return Bw(Z,`${JSON.stringify(W,null,2)}
4
- `),J}finally{wQ.delete($.lockDir),Aw($)}}function j1($,Z,Q={}){let W=fw($,Q);return uK(W,$,Z)}async function t8($,Z,Q={}){let W=await Uw($,Q);return uK(W,$,Z)}function Dw($){let Z=zw($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function Lw($,Z){let Q=JSON.stringify($),W=JSON.parse(Q),J=Z(W),X=JSON.stringify(W),Y=Z($);if(JSON.stringify($)!==X)throw new y$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(Y)!==JSON.stringify(J))throw new y$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return Y}function _w($){let Z=SK($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(W){let J=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${$}": ${J}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function zw($){try{return _w($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function dK($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function Tw($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function N2($={}){let Z=$.filePath??Z0(),Q=SK(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(X){let Y=X instanceof Error?X.message:String(X);throw Error(`Failed to parse MCP settings JSON at "${Z}": ${Y}`)}let J=Hw.safeParse(W);if(!J.success){let X=J.error.issues.map((Y)=>{let j=Y.path.join(".");return j?`${j}: ${Y.message}`:Y.message}).join("; ");throw Error(`Invalid MCP settings at "${Z}": ${X}`)}return J.data}function e8($){if(!$)return;let Z={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(Z).length>0?Z:void 0}function Ow($){if($===void 0)return;let Z=NJ.safeParse($);if(!Z.success)return;return e8(Z.data)}function s1($={}){let Z=$.filePath??Z0();return PK(Z)}function p0($={}){let Z=N2($);return Object.entries(Z.mcpServers).map(([Q,W])=>({name:Q,transport:W.transport,disabled:W.disabled,metadata:W.metadata,oauth:W.oauth}))}function w2($){let Z=$.filePath??Z0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");j1(Z,(W)=>{let J=W.mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let X={...J},Y=dK(X,Q);if(!Y)throw Error(`Unknown MCP server: ${Q}`);let j={...Y};if($.disabled)j.disabled=!0;else delete j.disabled;Tw(X,Q,j),W.mcpServers=X})}function C2($,Z={}){let Q=N2(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return e8(Q.mcpServers[$]?.oauth)}function lK($,Z){return(Q)=>{let W=Q.mcpServers,J=dK(W,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let X=Ow(J.oauth)??{},Y=e8(Z(X));if(Y)J.oauth=Y;else delete J.oauth;return Y??{}}}function P2($,Z,Q={}){let W=Q.filePath??Z0();return j1(W,lK($,Z))}async function O5($,Z,Q={}){let W=Q.filePath??Z0();return t8(W,lK($,Z))}function q5($={}){return p0($).map((Q)=>{let W=Q.transport.type!=="stdio",J=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:W,oauthConfigured:W&&typeof J==="string"&&J.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,W)=>Q.serverName.localeCompare(W.serverName))}async function S2($,Z={}){let Q=p0(Z);for(let W of Q)await $.registerServer(W);return Q}var T5,kK,NJ,$w,Zw,Qw,Ww,Jw,Xw,IK,Yw,jw,Vw,Hw,o8,h$,y$,wJ=1e4,xK=25,Gw,wQ;var CQ=p$(()=>{T5=S.record(S.string(),S.string()),kK=S.record(S.string(),S.unknown()),NJ=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(),$w=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:T5.optional()}),Zw=S.object({type:S.literal("sse"),url:S.string().url(),headers:T5.optional()}),Qw=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:T5.optional()}),Ww=S.discriminatedUnion("type",[$w,Zw,Qw]),Jw=S.object({transport:Ww,disabled:S.boolean().optional(),metadata:kK.optional(),oauth:NJ.optional()}),Xw=S.enum(["stdio","sse","http","streamableHttp"]).optional(),IK=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:Xw,disabled:S.boolean().optional(),metadata:kK.optional(),oauth:NJ.optional()});Yw=IK.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:T5.optional()}).superRefine(($,Z)=>{let Q=$.type??RJ($.transportType);if(Q&&Q!=="stdio")Z.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})),jw=IK.extend({url:S.string().url(),headers:T5.optional()}).superRefine(($,Z)=>{let Q=$.type??RJ($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??RJ($.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}}),Vw=S.union([Jw,Yw,jw]),Hw=S.object({mcpServers:S.record(S.string(),Vw)}).passthrough();o8=class o8 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};h$=class h$ extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};y$=class y$ extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};Gw=new Int32Array(new SharedArrayBuffer(4)),wQ=new Set});var IA={};N(IA,{resolveCoreDistinctId:()=>P0,createOpenTelemetryTelemetryService:()=>r4,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>j8,OpenTelemetryProvider:()=>Y8,OpenTelemetryAdapter:()=>l4});var $7=p$(()=>{J8();u9()});var GU={};N(GU,{writeHubDiscovery:()=>p9,withHubStartupLock:()=>r9,verifyHubConnection:()=>A1,truncateNotificationBody:()=>J9,toHubStatusUrl:()=>OW,toHubHealthUrl:()=>i9,stopLocalHubServerGracefully:()=>hW,startHubWebSocketServer:()=>j9,startHubServer:()=>HU,spawnDetachedHubServerWithRetry:()=>H8,spawnDetachedHubServer:()=>wW,sendHubCommand:()=>_V,restartLocalHubIfIdleAfterStartupTimeout:()=>t9,resolveWorkspaceHubOwnerContext:()=>QV,resolveSharedHubOwnerContext:()=>Q1,resolveProductionHubOwnerContext:()=>F1,resolveHubUrl:()=>kW,resolveHubOwnerContext:()=>x1,resolveHubEndpointOptions:()=>K1,resolveHubBuildId:()=>l9,resolveDefaultHubPort:()=>V8,resolveDefaultHubPathname:()=>NW,resolveDefaultHubHost:()=>EW,resolveCompatibleLocalHubUrl:()=>o4,resolveClineDir:()=>tj,resolveClineDataDir:()=>o$,requestHubShutdown:()=>s4,rememberRecoverableLocalHubUrl:()=>B$,readHubDiscovery:()=>K0,readBearerToken:()=>l7,probeHubServer:()=>g1,probeHubConnection:()=>LV,prewarmDetachedHubServer:()=>a9,normalizeHubWebSocketUrl:()=>G$,isLocalHubOrigin:()=>MY,isLocalHubHostName:()=>p7,isHubReconnectableTransportError:()=>bW,isHubCommandTimeoutError:()=>o9,isDiscoveryFilePresent:()=>$V,ensureHubWebSocketServer:()=>r7,ensureHubServer:()=>BU,ensureDetachedHubServer:()=>VV,ensureCompatibleLocalHubUrl:()=>$2,createLocalHubScheduleRuntimeHandlers:()=>VU,createInMemoryHubOwnerContext:()=>ej,createHubServerUrl:()=>Z1,createHubAuthToken:()=>d9,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>j8,connectToHub:()=>e9,clearHubDiscovery:()=>S0,NodeHubClient:()=>W1,NativeHubTransportAdapter:()=>Y9,HubUIClient:()=>gW,HubTransportError:()=>R0,HubSessionClient:()=>xW,HubServerTransport:()=>w4,HubScheduleService:()=>Z8,HubScheduleCommandService:()=>o2,HubCommandError:()=>B8,DEFAULT_HUB_PORT:()=>MW,DEFAULT_HUB_PATHNAME:()=>RW,DEFAULT_HUB_HOST:()=>qW,BrowserWebSocketHubAdapter:()=>X9});import{createSessionId as RD}from"@cline/shared";function g0($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function Yj($,Z,Q){return{version:$.version,requestId:$.requestId??RD("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class o2{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return g0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return g0($,{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 g0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return g0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return g0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return g0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return g0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return g0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return g0($,{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 g0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return g0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return g0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return Yj($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Z){return Yj($,"schedule_command_failed",Z instanceof Error?Z.message:String(Z))}}toCreateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:Z}}toUpdateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:Z}}}class P4{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},Z=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let W of Z)if(this.materializeOneOff(W))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let W of Q)try{if(this.materializeSchedule(W))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as kD}from"node:path";import{buildClineSystemPrompt as ID}from"@cline/shared";import{nowIso as Kj}from"@cline/shared/db";var U0={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"},X$=[U0.READ_FILES,U0.SEARCH_CODEBASE,U0.RUN_COMMANDS,U0.FETCH_WEB_CONTENT,U0.APPLY_PATCH,U0.EDITOR,U0.SKILLS,U0.ASK,U0.SUBMIT_AND_EXIT];var Vj={};N(Vj,{mergeRulesForSystemPrompt:()=>e2,loadRulesForSystemPromptFromWatcher:()=>WW,listEnabledRulesFromWatcher:()=>jj,isRuleEnabled:()=>f9,formatRulesForSystemPrompt:()=>t2});function f9($){return $.disabled!==!0}function t2($){if($.length===0)return"";return`
1
+ import{createRequire as OD}from"node:module";var{defineProperty:QW,getOwnPropertyNames:_D}=Object;var Wj=Object.prototype.hasOwnProperty;function Jj($){return this[$]}var R=($,Z,Q)=>{var W=_D(Z);for(let J of W)if(!Wj.call($,J)&&J!=="default")QW($,J,{get:Jj.bind(Z,J),enumerable:!0});if(Q){for(let J of W)if(!Wj.call(Q,J)&&J!=="default")QW(Q,J,{get:Jj.bind(Z,J),enumerable:!0});return Q}};var zD=($)=>$;function TD($,Z){this[$]=zD.bind(null,Z)}var N=($,Z)=>{for(var Q in Z)QW($,Q,{get:Z[Q],enumerable:!0,configurable:!0,set:TD.bind(Z,Q)})};var p$=($,Z)=>()=>($&&(Z=$($=0)),Z);var Xj=OD(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as XL,captureAgentUnexpectedReasoningTokens as Rj,SDK_ERROR_TELEMETRY_EVENT as YL}from"@cline/shared";function i($,Z,Q){$?.capture({event:Z,properties:Q})}function z9($){if(!$)return;return $.substring(0,jL)}function VL($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function BL($){return typeof $==="string"?$:$.message}function Mj($,Z){return $.some((Q)=>Z.has(Q.trim().toLowerCase()))}function Ej($){i($,m.CLIENT.EXTENSION_ACTIVATED)}function T9($,Z){let Q=[...Z.vcs_types],W={root_count:Z.root_count,vcs_types:Q,is_multi_root:Z.root_count>1,has_git:Mj(Q,new Set(["git"])),has_mercurial:Mj(Q,new Set(["mercurial","hg"]))};if(Z.init_duration_ms!==void 0)W.init_duration_ms=Z.init_duration_ms;if(Z.feature_flag_enabled!==void 0)W.feature_flag_enabled=Z.feature_flag_enabled;if(Z.is_remote_workspace!==void 0)W.is_remote_workspace=Z.is_remote_workspace;i($,m.WORKSPACE.INITIALIZED,W)}function O9($,Z,Q){i($,m.WORKSPACE.INIT_ERROR,{error_type:VL(Z),error_message:z9(BL(Z)),fallback_to_single_root:Q.fallback_to_single_root,workspace_count:Q.workspace_count??0})}function Nj($,Z){i($,m.WORKSPACE.PATH_RESOLVED,{...Z})}function w1($,Z){i($,m.USER.AUTH_STARTED,{provider:Z})}function P1($,Z){i($,m.USER.AUTH_SUCCEEDED,{provider:Z})}function S1($,Z,Q){i($,m.USER.AUTH_FAILED,{provider:Z,errorMessage:z9(Q)})}function V$($,Z,Q){i($,m.USER.AUTH_LOGGED_OUT,{provider:Z,reason:Q})}function Cj($,Z){i($,m.USER.PROVIDER_CONFIGURED,{provider:Z})}function wj($,Z){$?.captureRequired(m.USER.TELEMETRY_OPT_OUT,Z)}function b1($,Z){let Q=Z.id?.trim();if(Q)$?.setDistinctId(Q);$?.updateCommonProperties({account_id:Z.id,account_email:Z.email,provider:Z.provider,organization_id:Z.organizationId,organization_name:Z.organizationName,member_id:Z.memberId})}function q9($,Z){i($,m.TASK.CREATED,Z)}function M9($,Z){i($,m.TASK.RESTARTED,Z)}function g4($,Z){i($,m.TASK.COMPLETED,Z)}function Q8($,Z){i($,m.TASK.CONVERSATION_TURN,{...Z,timestamp:new Date().toISOString()})}function R9($,Z){i($,m.TASK.TOKEN_USAGE,Z)}function E9($,Z,Q){i($,m.TASK.MODE_SWITCH,{ulid:Z,mode:Q})}function W8($,Z){i($,m.TASK.TOOL_USED,Z)}function N9($,Z){i($,m.TASK.SKILL_USED,Z)}function C9($,Z){i($,m.TASK.DIFF_EDIT_FAILED,Z)}function m4($,Z){i($,m.TASK.PROVIDER_API_ERROR,{...Z,errorMessage:z9(Z.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function Pj($,Z){i($,m.SDK.TOOL_TIMEOUT,HL(Z))}function HL($){let Z={};for(let[Q,W]of Object.entries($))if(W!==void 0)Z[Q]=W;return Z}function w9($,Z,Q){i($,m.TASK.MENTION_USED,{mentionType:Z,contentLength:Q,timestamp:new Date().toISOString()})}function P9($,Z,Q,W){i($,m.TASK.MENTION_FAILED,{mentionType:Z,errorType:Q,errorMessage:z9(W),timestamp:new Date().toISOString()})}function S9($,Z,Q,W,J){i($,m.TASK.MENTION_SEARCH_RESULTS,{queryLength:Z.length,resultCount:Q,searchType:W,isEmpty:J,timestamp:new Date().toISOString()})}function B$($,Z){i($,m.TASK.AGENT_CREATED,{...Z,timestamp:new Date().toISOString()})}function b9($,Z){i($,m.TASK.AGENT_TEAM_CREATED,{...Z,timestamp:new Date().toISOString()})}function v4($,Z){i($,Z.event==="ended"?m.TASK.SUBAGENT_COMPLETED:m.TASK.SUBAGENT_STARTED,{...Z,timestamp:new Date().toISOString()})}function y9($,Z,Q,W){i($,m.HOOKS.DISCOVERY_COMPLETED,{hookName:Z,globalCount:Q,workspaceCount:W,totalCount:Q+W,timestamp:new Date().toISOString()})}function h9($,Z){i($,m.TASK.COMPACTION_EXECUTED,{...Z,timestamp:new Date().toISOString()})}function k9($,Z){i($,m.TASK.COMPACTION_SKIPPED,{...Z,timestamp:new Date().toISOString()})}var jL=500,m;var _0=p$(()=>{m={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:XL},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:YL,TOOL_TIMEOUT:"sdk.tool_timeout"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as GL,readFileSync as KL,statSync as FL,writeFileSync as AL}from"node:fs";import{dirname as fL}from"node:path";import{resolveGlobalSettingsPath as bj}from"@cline/shared/storage";import{z as a$}from"zod";function I9(){return c4.parse({})}function DL(){x9=void 0}function LL($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function _L($){let Z;try{Z=KL($,"utf8")}catch{return I9()}try{let Q=c4.safeParse(JSON.parse(Z));return Q.success?Q.data:I9()}catch{return I9()}}function zL(){let $=bj(),Z=FL($,{throwIfNoEntry:!1}),Q=Z?.mtimeMs??0,W=Z?.size??0,J=x9;if(J&&J.path===$&&J.mtimeMs===Q&&J.size===W)return J;let X=LL(Z?_L($):I9());return x9={path:$,mtimeMs:Q,size:W,value:X},x9}function z0(){return zL().value}function H1($,Z={}){let Q=bj(),W=z0();GL(fL(Q),{recursive:!0});let J=c4.parse($);if(!W.telemetryOptOut&&J.telemetryOptOut)wj(Z.telemetry);AL(Q,`${JSON.stringify(J,null,2)}
2
+ `,"utf8"),DL()}function g9(){return z0().telemetryOptOut}function yj($,Z={}){H1({...z0(),telemetryOptOut:$},Z)}function hj(){return z0().autoUpdateEnabled}function kj($,Z={}){H1({...z0(),autoUpdateEnabled:$},Z)}function Ij(){return z0().compactionStrategy??"basic"}function xj($){H1({...z0(),compactionStrategy:$})}function G1($){return new Set($??z0().disabledTools??[])}function u4($){return new Set($??z0().disabledPlugins??[])}function gj($){return G1().has($)}function m9($){let Z=z0(),Q=new Set(Z.disabledTools??[]),W=Q.has($);if(W)Q.delete($);else Q.add($);return H1({...Z,disabledTools:[...Q]}),!W}function fW($,Z){let Q=[...new Set($.map((X)=>X.trim()).filter(Boolean))];if(Q.length===0)return;let W=z0(),J=G1(W.disabledTools);for(let X of Q)if(Z)J.add(X);else J.delete(X);H1({...W,disabledTools:[...J]})}function mj($,Z){return fW([$],Z),Z}function vj($){return u4().has($)}function cj($,Z){let Q=$.trim();if(!Q)return;let W=z0(),J=u4(W.disabledPlugins);if(Z)J.add(Q);else J.delete(Q);H1({...W,disabledPlugins:[...J]})}function v9($,Z){let Q=u4(Z);if(Q.size===0)return[...$];return $.filter((W)=>!Q.has(W))}function y1($,Z){let Q=G1(Z);if(Q.size===0)return[...$];return $.filter((W)=>!Q.has(W.name))}function c9($,Z){if(!$||$.length===0)return $;let Q=G1(Z);if(Q.size===0)return $;return $.map((W)=>{if(!W.setup)return W;return{...W,setup:(J,X)=>W.setup?.({...J,registerTool:(Y)=>{if(!Q.has(Y.name))J.registerTool(Y)}},X)}})}var Sj,UL,c4,x9;var $1=p$(()=>{_0();Sj=a$.preprocess(($)=>Array.isArray($)?$.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter(Boolean):void 0,a$.array(a$.string()).optional()).transform(($)=>{if(!$)return;let Z=[...new Set($)].sort((Q,W)=>Q.localeCompare(W));return Z.length>0?Z:void 0}),UL=a$.enum(["basic","agentic"]).catch("basic"),c4=a$.object({telemetryOptOut:a$.boolean().default(!1).catch(!1),autoUpdateEnabled:a$.boolean().default(!0).catch(!0),compactionStrategy:UL.optional(),disabledTools:Sj.optional(),disabledPlugins:Sj.optional()}).strip().transform(($)=>{let Z={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.compactionStrategy)Z.compactionStrategy=$.compactionStrategy;if($.disabledTools?.length)Z.disabledTools=$.disabledTools;if($.disabledPlugins?.length)Z.disabledPlugins=$.disabledPlugins;return Z})});import{existsSync as TL,mkdirSync as OL,readFileSync as qL,writeFileSync as ML}from"node:fs";import{resolve as RL}from"node:path";import{resolveSessionDataDir as EL}from"@cline/shared/storage";import{nanoid as NL}from"nanoid";import*as CL from"node-machine-id";function P0($){let Z=$?.trim();if(Z)return Z;let Q=SL();if(Q)return Q;return bL()}function PL(){let $=CL;return $.machineIdSync??$.default?.machineIdSync}function SL(){try{let $=PL();if(!$)return;return $().trim()||void 0}catch{return}}function bL(){let $=EL(),Z=RL($,wL);try{if(TL(Z)){let W=qL(Z,"utf8").trim();if(W.length>0)return W}}catch{}let Q=`cl-${NL()}`;try{OL($,{recursive:!0}),ML(Z,Q,"utf8")}catch{}return Q}var wL="machine-id";var J8=()=>{};class l4{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,Z){if(!this.isEnabled())return;this.emitLog($,Z,!1)}emitRequired($,Z){this.emitLog($,Z,!0)}recordCounter($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.counters.get($);if(!X)X=this.meter.createCounter($,W?{description:W}:void 0),this.counters.set($,X);X.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.histograms.get($);if(!X)X=this.meter.createHistogram($,W?{description:W}:void 0),this.histograms.set($,X);X.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.buildAttributes(Q),Y=JSON.stringify(X),j=this.gaugeValues.get($);if(Z===null){if(j){if(j.delete(Y),j.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=j;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let B=this.meter.createObservableGauge($,W?{description:W}:void 0);B.addCallback((H)=>{for(let G of this.snapshotGaugeSeries($))H.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set($,B)}V.set(Y,{value:Z,attributes:X})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,Z,Q){if(!this.logger)return;let W=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:W})}buildAttributes($,Z=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...Z?{_required:!0}:{}}}snapshotGaugeSeries($){let Z=this.gaugeValues.get($);if(!Z)return[];return Array.from(Z.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,Z="",Q=new WeakSet,W=0){if(!$)return{};let J={},X=100,Y=10;for(let[j,V]of Object.entries($)){if(j==="__proto__"||j==="constructor"||j==="prototype")continue;let B=Z?`${Z}.${j}`:j;if(V===null||V===void 0){J[B]=String(V);continue}if(Array.isArray(V)){let H=V.length>X?V.slice(0,X):V;try{J[B]=JSON.stringify(H)}catch{J[B]="[UnserializableArray]"}if(V.length>X)J[`${B}_truncated`]=!0,J[`${B}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){J[B]=V.toISOString();continue}if(V instanceof Error){J[B]=V.message;continue}if(Q.has(V)){J[B]="[Circular]";continue}if(W>=Y){J[B]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(J,this.flattenProperties(V,B,Q,W+1));continue}if(yL(V)){J[B]=V;continue}try{J[B]=JSON.stringify(V)}catch{J[B]=String(V)}}return J}}function yL($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class p4{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,Z){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:Z})}emitRequired($,Z){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:Z})}recordCounter($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordHistogram($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordGauge($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:W,required:J===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class X8{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new p4({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let Z=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,Z)}captureRequired($,Z){let Q=this.buildAttributes(Z);for(let W of this.adapters)W.emitRequired($,Q)}recordCounter($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordCounter($,Z,X,W,J)}recordHistogram($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordHistogram($,Z,X,W,J)}recordGauge($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordGauge($,Z,X,W,J)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var UW=()=>{};import{metrics as hL,trace as kL}from"@opentelemetry/api";import{logs as IL}from"@opentelemetry/api-logs";import{OTLPLogExporter as xL}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as gL}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as mL}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as vL}from"@opentelemetry/resources";import{BatchLogRecordProcessor as cL,ConsoleLogRecordExporter as uL,LoggerProvider as dL}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as lL,MeterProvider as pL,PeriodicExportingMetricReader as uj}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as rL,ConsoleSpanExporter as iL,SimpleSpanProcessor as nL}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as aL}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as sL,ATTR_SERVICE_VERSION as oL}from"@opentelemetry/semantic-conventions";class dj{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,Z){this.resolveProperties(Z)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class Y8{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=vL({[sL]:$.serviceName??"cline",...$.serviceVersion?{[oL]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)hL.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)IL.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return kL.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new l4({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new X8({...$,adapters:[Z],distinctId:P0($.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider($){let Z=DW(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),W=Math.min(30000,Math.floor(Q*0.8)),J=Z.map((X)=>$_(X,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:W})).filter((X)=>X!==null);if(J.length===0)return null;return new pL({resource:$,readers:J})}createTracerProvider($){let Z=DW(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,W=this.options.otlpTracesHeaders??this.options.otlpHeaders,J=[];for(let X of Z){let Y=eL(X,{endpoint:Q,headers:W,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(Y)J.push(Y)}if(J.length===0)return null;return new aL({resource:$,spanProcessors:J})}createLoggerProvider($){let Z=DW(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((W)=>{let J=tL(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new cL(J,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((W)=>W!==null);if(Q.length===0)return null;return new dL({resource:$,processors:Q})}}function r4($){let Z=new Y8($),Q=Z.createTelemetryService($);return Q.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion}),{provider:Z,telemetry:Q}}function h1($){if(g9())return{telemetry:new dj($)};if($.enabled!==!0)return{telemetry:new X8({...$,distinctId:P0($.distinctId)})};return r4($)}function j8($){let{telemetry:Z,provider:Q}=h1($);return{telemetry:Z,provider:Q,flush:async()=>{let X=Q;if(X&&typeof X.forceFlush==="function")try{await X.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])}}}function DW($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function tL($,Z){if($==="console")return new uL;if(!Z.endpoint)return null;let Q=LW(Z.endpoint,"/v1/logs");return new xL({url:Q,headers:Z.headers})}function eL($,Z){if($==="console")return new nL(new iL);if(!Z.endpoint)return null;let Q=LW(Z.endpoint,"/v1/traces");return new rL(new mL({url:Q,headers:Z.headers}))}function $_($,Z){if($==="console")return new uj({exporter:new lL,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=LW(Z.endpoint,"/v1/metrics");return new uj({exporter:new gL({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function LW($,Z){let Q=new URL($),W=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=W.endsWith(Z)?W:`${W}${Z}`,Q.toString()}var u9=p$(()=>{$1();J8();UW()});var _H={};N(_H,{normalizeUserMessage:()=>rq,buildInitialUserContent:()=>pq});async function pq($,Z,Q,W){let J=iq(Z),X=await aq(Q,W);if(J.length===0&&!X)return $;let Y=[{type:"text",text:$},...J];if(X)Y.push(...X);return Y}function rq($){if($==null)return"";if(typeof $==="string")return $;let Z=$.content;if(typeof Z==="string")return Z;if(!Array.isArray(Z))return"";let Q=[];for(let W of Z)if(W&&typeof W==="object"&&W.type==="text"){let J=W.text;if(typeof J==="string")Q.push(J)}return Q.join(`
3
+ `)}function iq($){if(!$||$.length===0)return[];let Z=[];for(let Q of $){let W=nq(Q);if(W)Z.push(W)}return Z}function nq($){let Z=$.trim();if(!Z)return;let Q=Z.match(/^data:([^;,]+);base64,(.+)$/);if(Q){let W=Q[1],J=Q[2];if(!W||!J)return;return{type:"image",mediaType:W,data:J}}return{type:"image",mediaType:"image/png",data:Z}}async function aq($,Z){if(!$||$.length===0)return;let Q=Z??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),W=await Promise.all($.map(async(J)=>{let X=J.replace(/\\/g,"/");try{let Y=await Q(J);return{type:"file",path:X,content:Y}}catch(Y){let j=Y instanceof Error?Y.message:String(Y);return{type:"file",path:X,content:`Error fetching content: ${j}`}}}));if(W.length===0)return;return W}var pK={};N(pK,{updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>t8,updateMcpServerOAuthStateAsync:()=>O5,updateMcpServerOAuthState:()=>P2,setMcpServerDisabled:()=>C2,resolveMcpServerRegistrations:()=>p0,resolveDefaultMcpSettingsPath:()=>Z0,registerMcpServersFromSettingsFile:()=>S2,normalizeMcpServerOAuthState:()=>e8,loadMcpSettingsFile:()=>N2,listMcpServerOAuthStatuses:()=>q5,hasMcpSettingsFile:()=>s1,getMcpServerOAuthState:()=>w2,McpSettingsUpdateSkippedError:()=>o8,McpSettingsMutatorPurityError:()=>y$,McpSettingsLockTimeoutError:()=>h$});import{existsSync as PK,mkdirSync as qJ,readFileSync as SK,renameSync as EJ,rmdirSync as iN,rmSync as MJ,statSync as nN,unlinkSync as bK,writeFileSync as yK}from"node:fs";import{randomUUID as aN}from"node:crypto";import{dirname as hK,join as wK}from"node:path";import{setTimeout as sN}from"node:timers/promises";import{resolveMcpSettingsPath as oN}from"@cline/shared/storage";import{z as S}from"zod";function RJ($){if(!$)return;if($==="http")return"streamableHttp";return $}function Z0(){return oN()}function VC($,Z){qJ(hK($),{recursive:!0});let Q=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{yK(Q,Z,{encoding:"utf8",flag:"wx"}),EJ(Q,$)}catch(W){try{bK(Q)}catch{}throw W}}function HC($){Atomics.wait(BC,0,0,$)}function GC($){return`${$}.lock`}function gK(){return`${process.pid}.${Date.now()}.${aN()}`}function mK($,Z){qJ(hK($),{recursive:!0});let Q=`${$}.tmp.${Z}`;MJ(Q,{recursive:!0,force:!0}),qJ(Q,{recursive:!0}),yK(wK(Q,`owner.${Z}`),Z,{encoding:"utf8",flag:"wx"});try{return EJ(Q,$),{lockDir:$,ownerFile:wK($,`owner.${Z}`)}}catch(W){if(MJ(Q,{recursive:!0,force:!0}),PK($))return;throw W}}function vK($,Z){let Q;try{Q=Date.now()-nN($).mtimeMs}catch(J){if(J.code==="ENOENT")return;throw J}if(Q<CJ)return;Z.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Q}ms); reclaiming.`,{severity:"warn"});let W=`${$}.stale.${gK()}`;try{EJ($,W)}catch(J){if(J.code==="ENOENT")return;throw J}MJ(W,{recursive:!0,force:!0})}function KC($){try{bK($.ownerFile)}catch(Z){if(Z.code!=="ENOENT")throw Z}try{iN($.lockDir)}catch(Z){let Q=Z.code;if(Q!=="ENOENT"&&Q!=="ENOTEMPTY"&&Q!=="EEXIST")throw Z}}function cK($){let Z=GC($);if(CQ.has(Z))throw Error(`Reentrant MCP settings update for ${$}. Keep mutators pure: compute values up front and do not call back into the settings API.`);return{lockDir:Z,token:gK()}}function FC($,Z){let{lockDir:Q,token:W}=cK($),J=Z.timeoutMs??CJ,X=Date.now();while(!0){let Y=mK(Q,W);if(Y)return CQ.add(Q),Y;if(Date.now()-X>J)throw new h$(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);vK(Q,Z),HC(xK)}}async function AC($,Z){let{lockDir:Q,token:W}=cK($),J=Z.timeoutMs??CJ,X=Date.now();while(!0){let Y=mK(Q,W);if(Y)return CQ.add(Q),Y;if(Date.now()-X>J)throw new h$(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);vK(Q,Z),await sN(xK)}}function uK($,Z,Q){try{let W=fC(Z),J=UC(W,Q);return VC(Z,`${JSON.stringify(W,null,2)}
4
+ `),J}finally{CQ.delete($.lockDir),KC($)}}function j1($,Z,Q={}){let W=FC($,Q);return uK(W,$,Z)}async function t8($,Z,Q={}){let W=await AC($,Q);return uK(W,$,Z)}function fC($){let Z=LC($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function UC($,Z){let Q=JSON.stringify($),W=JSON.parse(Q),J=Z(W),X=JSON.stringify(W),Y=Z($);if(JSON.stringify($)!==X)throw new y$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(Y)!==JSON.stringify(J))throw new y$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return Y}function DC($){let Z=SK($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(W){let J=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${$}": ${J}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function LC($){try{return DC($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function dK($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function _C($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function N2($={}){let Z=$.filePath??Z0(),Q=SK(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(X){let Y=X instanceof Error?X.message:String(X);throw Error(`Failed to parse MCP settings JSON at "${Z}": ${Y}`)}let J=jC.safeParse(W);if(!J.success){let X=J.error.issues.map((Y)=>{let j=Y.path.join(".");return j?`${j}: ${Y.message}`:Y.message}).join("; ");throw Error(`Invalid MCP settings at "${Z}": ${X}`)}return J.data}function e8($){if(!$)return;let Z={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(Z).length>0?Z:void 0}function zC($){if($===void 0)return;let Z=NJ.safeParse($);if(!Z.success)return;return e8(Z.data)}function s1($={}){let Z=$.filePath??Z0();return PK(Z)}function p0($={}){let Z=N2($);return Object.entries(Z.mcpServers).map(([Q,W])=>({name:Q,transport:W.transport,disabled:W.disabled,metadata:W.metadata,oauth:W.oauth}))}function C2($){let Z=$.filePath??Z0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");j1(Z,(W)=>{let J=W.mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let X={...J},Y=dK(X,Q);if(!Y)throw Error(`Unknown MCP server: ${Q}`);let j={...Y};if($.disabled)j.disabled=!0;else delete j.disabled;_C(X,Q,j),W.mcpServers=X})}function w2($,Z={}){let Q=N2(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return e8(Q.mcpServers[$]?.oauth)}function lK($,Z){return(Q)=>{let W=Q.mcpServers,J=dK(W,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let X=zC(J.oauth)??{},Y=e8(Z(X));if(Y)J.oauth=Y;else delete J.oauth;return Y??{}}}function P2($,Z,Q={}){let W=Q.filePath??Z0();return j1(W,lK($,Z))}async function O5($,Z,Q={}){let W=Q.filePath??Z0();return t8(W,lK($,Z))}function q5($={}){return p0($).map((Q)=>{let W=Q.transport.type!=="stdio",J=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:W,oauthConfigured:W&&typeof J==="string"&&J.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,W)=>Q.serverName.localeCompare(W.serverName))}async function S2($,Z={}){let Q=p0(Z);for(let W of Q)await $.registerServer(W);return Q}var T5,kK,NJ,tN,eN,$C,ZC,QC,WC,IK,JC,XC,YC,jC,o8,h$,y$,CJ=1e4,xK=25,BC,CQ;var wQ=p$(()=>{T5=S.record(S.string(),S.string()),kK=S.record(S.string(),S.unknown()),NJ=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(),tN=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:T5.optional()}),eN=S.object({type:S.literal("sse"),url:S.string().url(),headers:T5.optional()}),$C=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:T5.optional()}),ZC=S.discriminatedUnion("type",[tN,eN,$C]),QC=S.object({transport:ZC,disabled:S.boolean().optional(),metadata:kK.optional(),oauth:NJ.optional()}),WC=S.enum(["stdio","sse","http","streamableHttp"]).optional(),IK=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:WC,disabled:S.boolean().optional(),metadata:kK.optional(),oauth:NJ.optional()});JC=IK.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:T5.optional()}).superRefine(($,Z)=>{let Q=$.type??RJ($.transportType);if(Q&&Q!=="stdio")Z.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})),XC=IK.extend({url:S.string().url(),headers:T5.optional()}).superRefine(($,Z)=>{let Q=$.type??RJ($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??RJ($.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}}),YC=S.union([QC,JC,XC]),jC=S.object({mcpServers:S.record(S.string(),YC)}).passthrough();o8=class o8 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};h$=class h$ extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};y$=class y$ extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};BC=new Int32Array(new SharedArrayBuffer(4)),CQ=new Set});var hA={};N(hA,{resolveCoreDistinctId:()=>P0,createOpenTelemetryTelemetryService:()=>r4,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>j8,OpenTelemetryProvider:()=>Y8,OpenTelemetryAdapter:()=>l4});var $7=p$(()=>{J8();u9()});var BU={};N(BU,{writeHubDiscovery:()=>p9,withHubStartupLock:()=>r9,verifyHubConnection:()=>A1,truncateNotificationBody:()=>J9,toHubStatusUrl:()=>OW,toHubHealthUrl:()=>i9,stopLocalHubServerGracefully:()=>hW,startHubWebSocketServer:()=>j9,startHubServer:()=>jU,spawnDetachedHubServerWithRetry:()=>B8,spawnDetachedHubServer:()=>CW,sendHubCommand:()=>_V,restartLocalHubIfIdleAfterStartupTimeout:()=>t9,resolveWorkspaceHubOwnerContext:()=>QV,resolveSharedHubOwnerContext:()=>Q1,resolveProductionHubOwnerContext:()=>F1,resolveHubUrl:()=>kW,resolveHubOwnerContext:()=>x1,resolveHubEndpointOptions:()=>K1,resolveHubBuildId:()=>l9,resolveDefaultHubPort:()=>V8,resolveDefaultHubPathname:()=>NW,resolveDefaultHubHost:()=>EW,resolveCompatibleLocalHubUrl:()=>o4,resolveClineDir:()=>tj,resolveClineDataDir:()=>o$,requestHubShutdown:()=>s4,rememberRecoverableLocalHubUrl:()=>H$,readHubDiscovery:()=>K0,readBearerToken:()=>l7,probeHubServer:()=>g1,probeHubConnection:()=>LV,prewarmDetachedHubServer:()=>a9,normalizeHubWebSocketUrl:()=>G$,isLocalHubOrigin:()=>MY,isLocalHubHostName:()=>p7,isHubReconnectableTransportError:()=>bW,isHubCommandTimeoutError:()=>o9,isDiscoveryFilePresent:()=>$V,ensureHubWebSocketServer:()=>r7,ensureHubServer:()=>VU,ensureDetachedHubServer:()=>VV,ensureCompatibleLocalHubUrl:()=>$2,createLocalHubScheduleRuntimeHandlers:()=>YU,createInMemoryHubOwnerContext:()=>ej,createHubServerUrl:()=>Z1,createHubAuthToken:()=>d9,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>j8,connectToHub:()=>e9,clearHubDiscovery:()=>S0,NodeHubClient:()=>W1,NativeHubTransportAdapter:()=>Y9,HubUIClient:()=>gW,HubTransportError:()=>R0,HubSessionClient:()=>xW,HubServerTransport:()=>C4,HubScheduleService:()=>Z8,HubScheduleCommandService:()=>o2,HubCommandError:()=>H8,DEFAULT_HUB_PORT:()=>MW,DEFAULT_HUB_PATHNAME:()=>RW,DEFAULT_HUB_HOST:()=>qW,BrowserWebSocketHubAdapter:()=>X9});import{createSessionId as qD}from"@cline/shared";function g0($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function Yj($,Z,Q){return{version:$.version,requestId:$.requestId??qD("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class o2{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return g0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return g0($,{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 g0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return g0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return g0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return g0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return g0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return g0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return g0($,{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 g0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return g0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return g0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return Yj($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Z){return Yj($,"schedule_command_failed",Z instanceof Error?Z.message:String(Z))}}toCreateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:Z}}toUpdateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:Z}}}class P4{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},Z=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let W of Z)if(this.materializeOneOff(W))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let W of Q)try{if(this.materializeSchedule(W))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as yD}from"node:path";import{buildClineSystemPrompt as hD}from"@cline/shared";import{nowIso as Kj}from"@cline/shared/db";var U0={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"},X$=[U0.READ_FILES,U0.SEARCH_CODEBASE,U0.RUN_COMMANDS,U0.FETCH_WEB_CONTENT,U0.APPLY_PATCH,U0.EDITOR,U0.SKILLS,U0.ASK,U0.SUBMIT_AND_EXIT];var Vj={};N(Vj,{mergeRulesForSystemPrompt:()=>e2,loadRulesForSystemPromptFromWatcher:()=>WW,listEnabledRulesFromWatcher:()=>jj,isRuleEnabled:()=>f9,formatRulesForSystemPrompt:()=>t2});function f9($){return $.disabled!==!0}function t2($){if($.length===0)return"";return`
5
5
 
6
6
  # Rules
7
7
  ${$.map((Q)=>`## ${Q.name}
@@ -9,11 +9,11 @@ ${Q.instructions}`).join(`
9
9
 
10
10
  `)}`}function e2($,Z){let Q=$?.trim(),W=Z?.trim();if(Q&&W)return`${Q}
11
11
 
12
- ${W}`;return Q||W||void 0}function jj($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(f9).sort((Q,W)=>Q.name.localeCompare(W.name))}function WW($){return t2(jj($))}var Gj={};N(Gj,{normalizeWorkspacePath:()=>w1,generateWorkspaceInfoWithDiagnostics:()=>S4,generateWorkspaceInfo:()=>$8,buildWorkspaceMetadataWithInfo:()=>JW,buildWorkspaceMetadata:()=>b4});import{basename as ED,resolve as ND}from"node:path";import{performance as Hj}from"node:perf_hooks";import{processWorkspaceInfo as Bj}from"@cline/shared";import wD from"simple-git";function w1($){return ND($)}async function $8($){return(await S4($)).info}function U9($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function S4($){let Z=w1($),Q={rootPath:Z,hint:ED(Z)},W;try{let J=wD({baseDir:Z});if(!await J.checkIsRepo())return{info:Q,vcsType:"none"};try{let Y=await J.getRemotes(!0);if(Y.length>0){let j=Y.map((V)=>{let H=V.refs.fetch||V.refs.push;return`${V.name}: ${H}`});Q.associatedRemoteUrls=j}}catch(Y){W??=U9(Y)}try{let Y=(await J.revparse(["HEAD"])).trim();if(Y.length>0)Q.latestGitCommitHash=Y}catch(Y){W??=U9(Y)}try{let Y=(await J.branch()).current.trim();if(Y.length>0)Q.latestGitBranchName=Y}catch(Y){W??=U9(Y)}return{info:Q,vcsType:"git",error:W}}catch(J){return{info:Q,vcsType:"none",error:U9(J)}}}async function b4($){let Z=await $8($);return Bj(Z)}async function JW($){let Z=Hj.now(),Q=await S4($),W=Hj.now()-Z,J=Q.info;return{workspaceInfo:J,workspaceMetadata:Bj(J),durationMs:W,vcsType:Q.vcsType,initError:Q.error}}import{mkdirSync as CD,writeFileSync as PD}from"node:fs";import{join as SD}from"node:path";import{resolveCronReportsDir as bD}from"@cline/shared/storage";function Y$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function r$($,Z){if(Z===void 0||Z===null)return;return`${$}: ${Y$(Z)}`}function yD($,Z,Q){let W=[`runId: ${Y$($.runId)}`,`specId: ${Y$(Z.specId)}`,`externalId: ${Y$(Z.externalId)}`,`title: ${Y$(Z.title)}`,`triggerKind: ${Y$($.triggerKind)}`,`status: ${Y$($.status)}`,`sourcePath: ${Y$(Z.sourcePath)}`],J=[r$("sessionId",$.sessionId),r$("startedAt",$.startedAt),r$("completedAt",$.completedAt),r$("triggerEventId",$.triggerEventId),r$("triggerEventType",Q?.eventType),r$("triggerEventSource",Q?.source),r$("triggerEventSubject",Q?.subject)];for(let X of J)if(X)W.push(X);return`---
12
+ ${W}`;return Q||W||void 0}function jj($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(f9).sort((Q,W)=>Q.name.localeCompare(W.name))}function WW($){return t2(jj($))}var Gj={};N(Gj,{normalizeWorkspacePath:()=>C1,generateWorkspaceInfoWithDiagnostics:()=>S4,generateWorkspaceInfo:()=>$8,buildWorkspaceMetadataWithInfo:()=>JW,buildWorkspaceMetadata:()=>b4});import{basename as MD,resolve as RD}from"node:path";import{performance as Bj}from"node:perf_hooks";import{processWorkspaceInfo as Hj}from"@cline/shared";import ED from"simple-git";function C1($){return RD($)}async function $8($){return(await S4($)).info}function U9($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function S4($){let Z=C1($),Q={rootPath:Z,hint:MD(Z)},W;try{let J=ED({baseDir:Z});if(!await J.checkIsRepo())return{info:Q,vcsType:"none"};try{let Y=await J.getRemotes(!0);if(Y.length>0){let j=Y.map((V)=>{let B=V.refs.fetch||V.refs.push;return`${V.name}: ${B}`});Q.associatedRemoteUrls=j}}catch(Y){W??=U9(Y)}try{let Y=(await J.revparse(["HEAD"])).trim();if(Y.length>0)Q.latestGitCommitHash=Y}catch(Y){W??=U9(Y)}try{let Y=(await J.branch()).current.trim();if(Y.length>0)Q.latestGitBranchName=Y}catch(Y){W??=U9(Y)}return{info:Q,vcsType:"git",error:W}}catch(J){return{info:Q,vcsType:"none",error:U9(J)}}}async function b4($){let Z=await $8($);return Hj(Z)}async function JW($){let Z=Bj.now(),Q=await S4($),W=Bj.now()-Z,J=Q.info;return{workspaceInfo:J,workspaceMetadata:Hj(J),durationMs:W,vcsType:Q.vcsType,initError:Q.error}}import{mkdirSync as ND,writeFileSync as CD}from"node:fs";import{join as wD}from"node:path";import{resolveCronReportsDir as PD}from"@cline/shared/storage";function Y$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function r$($,Z){if(Z===void 0||Z===null)return;return`${$}: ${Y$(Z)}`}function SD($,Z,Q){let W=[`runId: ${Y$($.runId)}`,`specId: ${Y$(Z.specId)}`,`externalId: ${Y$(Z.externalId)}`,`title: ${Y$(Z.title)}`,`triggerKind: ${Y$($.triggerKind)}`,`status: ${Y$($.status)}`,`sourcePath: ${Y$(Z.sourcePath)}`],J=[r$("sessionId",$.sessionId),r$("startedAt",$.startedAt),r$("completedAt",$.completedAt),r$("triggerEventId",$.triggerEventId),r$("triggerEventType",Q?.eventType),r$("triggerEventSource",Q?.source),r$("triggerEventSubject",Q?.subject)];for(let X of J)if(X)W.push(X);return`---
13
13
  ${W.join(`
14
14
  `)}
15
15
  ---
16
- `}function hD($){let Z=[];if($.triggerEvent){let Q=$.triggerEvent,W=[`- eventId: ${Q.eventId}`,`- eventType: ${Q.eventType}`,`- source: ${Q.source}`,Q.subject?`- subject: ${Q.subject}`:"",`- occurredAt: ${Q.occurredAt}`,Q.dedupeKey?`- dedupeKey: ${Q.dedupeKey}`:"",Q.attributes?`- attributes: ${JSON.stringify(Q.attributes)}`:""].filter((J)=>J.length>0);Z.push(`## Trigger Event
16
+ `}function bD($){let Z=[];if($.triggerEvent){let Q=$.triggerEvent,W=[`- eventId: ${Q.eventId}`,`- eventType: ${Q.eventType}`,`- source: ${Q.source}`,Q.subject?`- subject: ${Q.subject}`:"",`- occurredAt: ${Q.occurredAt}`,Q.dedupeKey?`- dedupeKey: ${Q.dedupeKey}`:"",Q.attributes?`- attributes: ${JSON.stringify(Q.attributes)}`:""].filter((J)=>J.length>0);Z.push(`## Trigger Event
17
17
 
18
18
  ${W.join(`
19
19
  `)}
@@ -32,12 +32,12 @@ ${W.join(`
32
32
  ${Q.join(`
33
33
  `)}
34
34
  `)}return Z.join(`
35
- `)}function XW($){let Z=bD($.specs);CD(Z,{recursive:!0});let Q=SD(Z,`${$.run.runId}.md`),W=`${yD($.run,$.spec,$.data.triggerEvent)}
36
- ${hD($.data)}`;return PD(Q,W,"utf8"),Q}class YW{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,Z,Q){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let W=Math.max(1,Math.floor(Q)),J=this.activeExecutions.get($)??new Set;if(J.size>=W)return!1;return J.add(Z),this.activeExecutions.set($,J),!0}release($,Z){let Q=this.activeExecutions.get($);if(!Q)return;if(Q.delete(Z),Q.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let Z of this.activeExecutions.values())$+=Z.size;return $}}var xD=15000,gD=90,Fj=["rules","skills","plugins"];function mD($,Z){return new Set($.extensions??Fj).has(Z)}function vD($,Z){if($.tools===void 0)return{"*":{autoApprove:!0}};let Q={"*":{enabled:!1,autoApprove:!0}};for(let W of $.tools)Q[W]={enabled:!0,autoApprove:!0};if(Z==="yolo")Q[U0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Q}function cD($){let Z=$?.trim();if(!Z)return;return["# Notes Directory",`Use ${Z} for durable notes related to this automation.`,"Before starting, inspect relevant existing notes there when useful. During or after the run, write concise notes there when they would help future runs continue with context."].join(`
37
- `)}class jW extends Error{constructor($){super($);this.name="TimeoutError"}}async function uD($,Z){if(Z<=0)return $;let Q,W=new Promise((J,X)=>{Q=setTimeout(()=>{X(new jW("cron run timed out"))},Z)});try{return await Promise.race([$,W])}finally{if(Q)clearTimeout(Q)}}class y4{store;materializer;options;limiter;claimLeaseMs;timer;started=!1;ticking=!1;disposed=!1;stopping=!1;activeRuns=new Map;constructor($){this.store=$.store,this.materializer=$.materializer,this.options=$,this.limiter=new YW($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??gD)*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??xD);await this.tick(),this.timer=setInterval(()=>void this.tick(),$)}async stop(){let $=this.started;if(this.started=!1,this.stopping=!0,this.timer)clearInterval(this.timer),this.timer=void 0;if(!$)return;let Z=[...this.activeRuns.entries()];await Promise.all(Z.map(async([Q,W])=>{if(W.sessionId)try{await this.options.runtimeHandlers.abortSession(W.sessionId)}catch{}try{this.store.requeueRun({runId:Q,claimToken:W.claimToken,error:"runner stopped before completion"})}catch{}}))}async dispose(){if(this.disposed)return;this.disposed=!0,await this.stop()}async tick(){if(this.ticking)return;this.ticking=!0;try{this.materializer.materializeAll();let $=this.store.claimDueRuns({nowIso:Kj(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((Z)=>this.executeClaim(Z)))}catch($){let Z=this.options.logger;if(Z)if(Z.error)Z.error("cron.runner.tick.failed",{error:$});else Z.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,Z])=>{let Q=this.store.getRun($);return Q?[{...Q,...Z}]:[]})}async executeClaim($){let Z=$.run,Q=this.store.getSpec(Z.specId);if(!Q){this.store.completeRun(Z.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!Q.enabled||Q.removed){this.store.completeRun(Z.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let W=Q.maxParallel&&Q.maxParallel>0?Q.maxParallel:1;if(!this.limiter.acquire(Q.specId,Z.runId,W)){this.store.requeueRun({runId:Z.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(Q.specId,Z.runId),this.store.requeueRun({runId:Z.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(Z.runId,{claimToken:$.claimToken});let X=Z.triggerEventId?this.store.getEventLog(Z.triggerEventId):void 0,Y,j,V=Date.now(),H;if(Q.timeoutSeconds&&Q.timeoutSeconds>0)H=V+Q.timeoutSeconds*1000;try{j=this.startClaimLeaseHeartbeat($);let B=await this.buildStartRequest(Q);if(Y=(await this.options.runtimeHandlers.startSession(B)).sessionId.trim(),!Y)throw Error("runtime returned empty sessionId");this.activeRuns.set(Z.runId,{claimToken:$.claimToken,sessionId:Y}),this.store.attachSessionIdToRun(Z.runId,Y);let K={config:B,prompt:this.buildPrompt(Q,X)},F=this.options.runtimeHandlers.sendSession(Y,K),A=H?Math.max(1,H-Date.now()):0,f=(await uD(F,A)).result,D=Date.now(),U=XW({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:Y,status:"done"},spec:Q,data:{finalText:f.text,usage:f.usage,toolCalls:f.toolCalls,durationMs:D-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"done",sessionId:Y,reportPath:U,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",Q,Z.runId),this.store.updateSpecLastRunAt(Q.specId,Kj())}catch(B){let G=B instanceof jW;if(Y&&G)try{await this.options.runtimeHandlers.abortSession(Y)}catch{}let K=B instanceof Error?B.message:String(B),F=Date.now(),A=XW({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:Y,status:"failed"},spec:Q,data:{error:K,durationMs:F-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"failed",sessionId:Y,reportPath:A,error:K,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.failed",Q,Z.runId)}finally{if(j?.(),Y)try{await this.options.runtimeHandlers.stopSession(Y)}catch{}this.activeRuns.delete(Z.runId),this.limiter.release(Q.specId,Z.runId)}}publishScheduleExecutionEvent($,Z,Q){if(Z.source!=="hub-schedule"||!this.options.eventPublisher)return;let W=this.store.getRun(Q);if(!W)return;let J=W.status==="done"?"success":W.status==="cancelled"?"aborted":W.status==="running"?"running":W.status==="queued"?"pending":"failed";this.options.eventPublisher($,{scheduleId:Z.externalId,executionId:W.runId,sessionId:W.sessionId,triggeredAt:new Date(W.scheduledFor??W.createdAt).getTime(),startedAt:W.startedAt?new Date(W.startedAt).getTime():void 0,endedAt:W.completedAt?new Date(W.completedAt).getTime():void 0,status:J,errorMessage:W.error})}buildPrompt($,Z){let Q=$.prompt??"";if(!Z)return Q;let W={eventId:Z.eventId,eventType:Z.eventType,source:Z.source,subject:Z.subject,occurredAt:Z.occurredAt,workspaceRoot:Z.workspaceRoot,dedupeKey:Z.dedupeKey,attributes:Z.attributes,payload:Z.payload};return`${Q}
35
+ `)}function XW($){let Z=PD($.specs);ND(Z,{recursive:!0});let Q=wD(Z,`${$.run.runId}.md`),W=`${SD($.run,$.spec,$.data.triggerEvent)}
36
+ ${bD($.data)}`;return CD(Q,W,"utf8"),Q}class YW{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,Z,Q){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let W=Math.max(1,Math.floor(Q)),J=this.activeExecutions.get($)??new Set;if(J.size>=W)return!1;return J.add(Z),this.activeExecutions.set($,J),!0}release($,Z){let Q=this.activeExecutions.get($);if(!Q)return;if(Q.delete(Z),Q.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let Z of this.activeExecutions.values())$+=Z.size;return $}}var kD=15000,ID=90,Fj=["rules","skills","plugins"];function xD($,Z){return new Set($.extensions??Fj).has(Z)}function gD($,Z){if($.tools===void 0)return{"*":{autoApprove:!0}};let Q={"*":{enabled:!1,autoApprove:!0}};for(let W of $.tools)Q[W]={enabled:!0,autoApprove:!0};if(Z==="yolo")Q[U0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Q}function mD($){let Z=$?.trim();if(!Z)return;return["# Notes Directory",`Use ${Z} for durable notes related to this automation.`,"Before starting, inspect relevant existing notes there when useful. During or after the run, write concise notes there when they would help future runs continue with context."].join(`
37
+ `)}class jW extends Error{constructor($){super($);this.name="TimeoutError"}}async function vD($,Z){if(Z<=0)return $;let Q,W=new Promise((J,X)=>{Q=setTimeout(()=>{X(new jW("cron run timed out"))},Z)});try{return await Promise.race([$,W])}finally{if(Q)clearTimeout(Q)}}class y4{store;materializer;options;limiter;claimLeaseMs;timer;started=!1;ticking=!1;disposed=!1;stopping=!1;activeRuns=new Map;constructor($){this.store=$.store,this.materializer=$.materializer,this.options=$,this.limiter=new YW($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??ID)*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??kD);await this.tick(),this.timer=setInterval(()=>void this.tick(),$)}async stop(){let $=this.started;if(this.started=!1,this.stopping=!0,this.timer)clearInterval(this.timer),this.timer=void 0;if(!$)return;let Z=[...this.activeRuns.entries()];await Promise.all(Z.map(async([Q,W])=>{if(W.sessionId)try{await this.options.runtimeHandlers.abortSession(W.sessionId)}catch{}try{this.store.requeueRun({runId:Q,claimToken:W.claimToken,error:"runner stopped before completion"})}catch{}}))}async dispose(){if(this.disposed)return;this.disposed=!0,await this.stop()}async tick(){if(this.ticking)return;this.ticking=!0;try{this.materializer.materializeAll();let $=this.store.claimDueRuns({nowIso:Kj(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((Z)=>this.executeClaim(Z)))}catch($){let Z=this.options.logger;if(Z)if(Z.error)Z.error("cron.runner.tick.failed",{error:$});else Z.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,Z])=>{let Q=this.store.getRun($);return Q?[{...Q,...Z}]:[]})}async executeClaim($){let Z=$.run,Q=this.store.getSpec(Z.specId);if(!Q){this.store.completeRun(Z.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!Q.enabled||Q.removed){this.store.completeRun(Z.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let W=Q.maxParallel&&Q.maxParallel>0?Q.maxParallel:1;if(!this.limiter.acquire(Q.specId,Z.runId,W)){this.store.requeueRun({runId:Z.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(Q.specId,Z.runId),this.store.requeueRun({runId:Z.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(Z.runId,{claimToken:$.claimToken});let X=Z.triggerEventId?this.store.getEventLog(Z.triggerEventId):void 0,Y,j,V=Date.now(),B;if(Q.timeoutSeconds&&Q.timeoutSeconds>0)B=V+Q.timeoutSeconds*1000;try{j=this.startClaimLeaseHeartbeat($);let H=await this.buildStartRequest(Q);if(Y=(await this.options.runtimeHandlers.startSession(H)).sessionId.trim(),!Y)throw Error("runtime returned empty sessionId");this.activeRuns.set(Z.runId,{claimToken:$.claimToken,sessionId:Y}),this.store.attachSessionIdToRun(Z.runId,Y);let K={config:H,prompt:this.buildPrompt(Q,X)},F=this.options.runtimeHandlers.sendSession(Y,K),A=B?Math.max(1,B-Date.now()):0,f=(await vD(F,A)).result,D=Date.now(),U=XW({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:Y,status:"done"},spec:Q,data:{finalText:f.text,usage:f.usage,toolCalls:f.toolCalls,durationMs:D-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"done",sessionId:Y,reportPath:U,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",Q,Z.runId),this.store.updateSpecLastRunAt(Q.specId,Kj())}catch(H){let G=H instanceof jW;if(Y&&G)try{await this.options.runtimeHandlers.abortSession(Y)}catch{}let K=H instanceof Error?H.message:String(H),F=Date.now(),A=XW({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:Y,status:"failed"},spec:Q,data:{error:K,durationMs:F-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"failed",sessionId:Y,reportPath:A,error:K,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.failed",Q,Z.runId)}finally{if(j?.(),Y)try{await this.options.runtimeHandlers.stopSession(Y)}catch{}this.activeRuns.delete(Z.runId),this.limiter.release(Q.specId,Z.runId)}}publishScheduleExecutionEvent($,Z,Q){if(Z.source!=="hub-schedule"||!this.options.eventPublisher)return;let W=this.store.getRun(Q);if(!W)return;let J=W.status==="done"?"success":W.status==="cancelled"?"aborted":W.status==="running"?"running":W.status==="queued"?"pending":"failed";this.options.eventPublisher($,{scheduleId:Z.externalId,executionId:W.runId,sessionId:W.sessionId,triggeredAt:new Date(W.scheduledFor??W.createdAt).getTime(),startedAt:W.startedAt?new Date(W.startedAt).getTime():void 0,endedAt:W.completedAt?new Date(W.completedAt).getTime():void 0,status:J,errorMessage:W.error})}buildPrompt($,Z){let Q=$.prompt??"";if(!Z)return Q;let W={eventId:Z.eventId,eventType:Z.eventType,source:Z.source,subject:Z.subject,occurredAt:Z.occurredAt,workspaceRoot:Z.workspaceRoot,dedupeKey:Z.dedupeKey,attributes:Z.attributes,payload:Z.payload};return`${Q}
38
38
 
39
39
  Trigger event:
40
- ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Q=setInterval(()=>{let W=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,W))clearInterval(Q)},Z);return()=>clearInterval(Q)}async buildSystemPrompt($,Z,Q,W){let J=cD($.notesDirectory),X=e2(void 0,J),Y=await b4(Z),j=ID({ide:"Cline Cron",workspaceRoot:Z,workspaceName:kD(Z),metadata:Y,rules:$.systemPrompt?void 0:X,mode:Q,providerId:W,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?e2(j,X)??j:j}async buildStartRequest($){let Z=($.workspaceRoot??"").trim(),Q=($.providerId??"").trim(),W=($.modelId??"").trim(),J=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,X=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():Z;if(!Z)throw Error("cron spec requires workspaceRoot");let Y=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:Z,cwd:X,provider:Q,model:W,mode:Y,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,Z,Y,Q),maxIterations:$.maxIterations,enableTools:J?.enableTools??!0,enableSpawn:J?.enableSpawn??!0,enableTeams:J?.enableTeams??!0,autoApproveTools:J?.autoApproveTools??!0,toolPolicies:vD($,Y),configExtensions:Fj.filter((j)=>mD($,j))}}}function h4($,Z,Q,W){let J=new Set;function X(Y){let j=Y.toLowerCase();if(W){let H=W.indexOf(j);if(H!==-1)return H+Z}let V=Number(Y);if(!Number.isInteger(V)||V<Z||V>Q)throw Error(`Invalid cron value "${Y}" for range [${Z}-${Q}]`);return V}for(let Y of $.split(",")){if(Y==="*"){for(let H=Z;H<=Q;H+=1)J.add(H);continue}let j=Y.indexOf("/");if(j!==-1){let H=Y.slice(0,j),B=Number(Y.slice(j+1));if(!Number.isInteger(B)||B<1)throw Error(`Invalid step "${Y.slice(j+1)}"`);let G=Z,K=Q;if(H!=="*"){let F=H.indexOf("-");if(F!==-1)G=X(H.slice(0,F)),K=X(H.slice(F+1));else G=X(H)}if(G>K)throw Error(`Invalid cron range "${H}"`);for(let F=G;F<=K;F+=B)J.add(F);continue}let V=Y.indexOf("-");if(V!==-1){let H=X(Y.slice(0,V)),B=X(Y.slice(V+1));if(H>B)throw Error(`Invalid cron range "${Y}"`);for(let G=H;G<=B;G+=1)J.add(G);continue}J.add(X(Y))}return[...J].sort((Y,j)=>Y-j)}var dD=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],fj=["sun","mon","tue","wed","thu","fri","sat"];function k4($,Z,Q){let W=$[Z];if(typeof W!=="string")throw Error(`Invalid cron pattern "${Q}": missing field ${Z+1}`);return W}function VW($,Z){let Q=$[0];if(typeof Q!=="number")throw Error(`Invalid cron pattern: no values parsed for ${Z}`);return Q}function HW($){let Z=$.trim().split(/\s+/);if(Z.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${Z.length}`);return{minutes:h4(k4(Z,0,$),0,59),hours:h4(k4(Z,1,$),0,23),daysOfMonth:h4(k4(Z,2,$),1,31),months:h4(k4(Z,3,$),1,12,dD),daysOfWeek:h4(k4(Z,4,$),0,6,fj)}}function BW($){HW($)}function Uj($,Z,Q=Date.now()){i$($,Q,Z)}var Aj=new Map,lD=new Map(fj.map(($,Z)=>[$,Z]));function Dj($){let Z=$?.trim();return Z?Z:void 0}function Lj($){let Z=Aj.get($);if(Z)return Z;let Q=new Intl.DateTimeFormat("en-US",{timeZone:$,calendar:"gregory",numberingSystem:"latn",year:"numeric",month:"2-digit",day:"2-digit",weekday:"short",hour:"2-digit",minute:"2-digit",hourCycle:"h23"});return Aj.set($,Q),Q}function pD($){let Z=Dj($);if(!Z)return;Lj(Z).format(new Date)}function rD($,Z){let Q=Lj(Z).formatToParts(new Date($)),W=new Map(Q.map((Y)=>[Y.type,Y.value])),J=W.get("weekday")?.toLowerCase().slice(0,3)??"",X=lD.get(J);if(X===void 0)throw Error(`Unable to resolve weekday for timezone "${Z}"`);return{month:Number(W.get("month")),dayOfMonth:Number(W.get("day")),dayOfWeek:X,hour:Number(W.get("hour")),minute:Number(W.get("minute"))}}function iD($){let Z=new Date($);return{month:Z.getMonth()+1,dayOfMonth:Z.getDate(),dayOfWeek:Z.getDay(),hour:Z.getHours(),minute:Z.getMinutes()}}function nD($,Z){return $.months.includes(Z.month)&&$.daysOfMonth.includes(Z.dayOfMonth)&&$.daysOfWeek.includes(Z.dayOfWeek)&&$.hours.includes(Z.hour)&&$.minutes.includes(Z.minute)}function aD($,Z,Q){let W=HW($),J=new Date(Z);J.setSeconds(0,0);let X=J.getTime()+60000,Y=new Date(Z);Y.setFullYear(Y.getFullYear()+4);let j=Y.getTime();while(X<=j){if(nD(W,rD(X,Q)))return X;X+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Q}"`)}function i$($,Z,Q){let W=Dj(Q);if(W)return pD(W),aD($,Z,W);let J=HW($),X=new Date(Z);X.setSeconds(0,0),X=new Date(X.getTime()+60000);let Y=new Date(Z);Y.setFullYear(Y.getFullYear()+4);while(X<=Y){let{month:j,dayOfMonth:V,dayOfWeek:H,hour:B,minute:G}=iD(X.getTime());if(!J.months.includes(j)){let K=J.months.find((A)=>A>j)??VW(J.months,"months"),F=K<=j?1:0;X=new Date(X.getFullYear()+F,K-1,1,0,0,0,0);continue}if(!J.daysOfMonth.includes(V)||!J.daysOfWeek.includes(H)){X=new Date(X.getFullYear(),X.getMonth(),V+1,0,0,0,0);continue}if(!J.hours.includes(B)){let K=J.hours.find((A)=>A>B)??VW(J.hours,"hours"),F=K<=B?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate()+F,K,0,0,0);continue}if(!J.minutes.includes(G)){let K=J.minutes.find((A)=>A>G)??VW(J.minutes,"minutes"),F=K<=G?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate(),X.getHours()+F,K,0,0);continue}return X.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{randomUUID as I4}from"node:crypto";import{asOptionalString as g,asString as e,loadSqliteDb as oD,nowIso as L0}from"@cline/shared/db";import{resolveCronDbPath as tD}from"@cline/shared/storage";var sD=[`CREATE TABLE IF NOT EXISTS cron_specs (
40
+ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Q=setInterval(()=>{let W=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,W))clearInterval(Q)},Z);return()=>clearInterval(Q)}async buildSystemPrompt($,Z,Q,W){let J=mD($.notesDirectory),X=e2(void 0,J),Y=await b4(Z),j=hD({ide:"Cline Cron",workspaceRoot:Z,workspaceName:yD(Z),metadata:Y,rules:$.systemPrompt?void 0:X,mode:Q,providerId:W,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?e2(j,X)??j:j}async buildStartRequest($){let Z=($.workspaceRoot??"").trim(),Q=($.providerId??"").trim(),W=($.modelId??"").trim(),J=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,X=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():Z;if(!Z)throw Error("cron spec requires workspaceRoot");let Y=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:Z,cwd:X,provider:Q,model:W,mode:Y,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,Z,Y,Q),maxIterations:$.maxIterations,enableTools:J?.enableTools??!0,enableSpawn:J?.enableSpawn??!0,enableTeams:J?.enableTeams??!0,autoApproveTools:J?.autoApproveTools??!0,toolPolicies:gD($,Y),configExtensions:Fj.filter((j)=>xD($,j))}}}function h4($,Z,Q,W){let J=new Set;function X(Y){let j=Y.toLowerCase();if(W){let B=W.indexOf(j);if(B!==-1)return B+Z}let V=Number(Y);if(!Number.isInteger(V)||V<Z||V>Q)throw Error(`Invalid cron value "${Y}" for range [${Z}-${Q}]`);return V}for(let Y of $.split(",")){if(Y==="*"){for(let B=Z;B<=Q;B+=1)J.add(B);continue}let j=Y.indexOf("/");if(j!==-1){let B=Y.slice(0,j),H=Number(Y.slice(j+1));if(!Number.isInteger(H)||H<1)throw Error(`Invalid step "${Y.slice(j+1)}"`);let G=Z,K=Q;if(B!=="*"){let F=B.indexOf("-");if(F!==-1)G=X(B.slice(0,F)),K=X(B.slice(F+1));else G=X(B)}if(G>K)throw Error(`Invalid cron range "${B}"`);for(let F=G;F<=K;F+=H)J.add(F);continue}let V=Y.indexOf("-");if(V!==-1){let B=X(Y.slice(0,V)),H=X(Y.slice(V+1));if(B>H)throw Error(`Invalid cron range "${Y}"`);for(let G=B;G<=H;G+=1)J.add(G);continue}J.add(X(Y))}return[...J].sort((Y,j)=>Y-j)}var cD=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],fj=["sun","mon","tue","wed","thu","fri","sat"];function k4($,Z,Q){let W=$[Z];if(typeof W!=="string")throw Error(`Invalid cron pattern "${Q}": missing field ${Z+1}`);return W}function VW($,Z){let Q=$[0];if(typeof Q!=="number")throw Error(`Invalid cron pattern: no values parsed for ${Z}`);return Q}function BW($){let Z=$.trim().split(/\s+/);if(Z.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${Z.length}`);return{minutes:h4(k4(Z,0,$),0,59),hours:h4(k4(Z,1,$),0,23),daysOfMonth:h4(k4(Z,2,$),1,31),months:h4(k4(Z,3,$),1,12,cD),daysOfWeek:h4(k4(Z,4,$),0,6,fj)}}function HW($){BW($)}function Uj($,Z,Q=Date.now()){i$($,Q,Z)}var Aj=new Map,uD=new Map(fj.map(($,Z)=>[$,Z]));function Dj($){let Z=$?.trim();return Z?Z:void 0}function Lj($){let Z=Aj.get($);if(Z)return Z;let Q=new Intl.DateTimeFormat("en-US",{timeZone:$,calendar:"gregory",numberingSystem:"latn",year:"numeric",month:"2-digit",day:"2-digit",weekday:"short",hour:"2-digit",minute:"2-digit",hourCycle:"h23"});return Aj.set($,Q),Q}function dD($){let Z=Dj($);if(!Z)return;Lj(Z).format(new Date)}function lD($,Z){let Q=Lj(Z).formatToParts(new Date($)),W=new Map(Q.map((Y)=>[Y.type,Y.value])),J=W.get("weekday")?.toLowerCase().slice(0,3)??"",X=uD.get(J);if(X===void 0)throw Error(`Unable to resolve weekday for timezone "${Z}"`);return{month:Number(W.get("month")),dayOfMonth:Number(W.get("day")),dayOfWeek:X,hour:Number(W.get("hour")),minute:Number(W.get("minute"))}}function pD($){let Z=new Date($);return{month:Z.getMonth()+1,dayOfMonth:Z.getDate(),dayOfWeek:Z.getDay(),hour:Z.getHours(),minute:Z.getMinutes()}}function rD($,Z){return $.months.includes(Z.month)&&$.daysOfMonth.includes(Z.dayOfMonth)&&$.daysOfWeek.includes(Z.dayOfWeek)&&$.hours.includes(Z.hour)&&$.minutes.includes(Z.minute)}function iD($,Z,Q){let W=BW($),J=new Date(Z);J.setSeconds(0,0);let X=J.getTime()+60000,Y=new Date(Z);Y.setFullYear(Y.getFullYear()+4);let j=Y.getTime();while(X<=j){if(rD(W,lD(X,Q)))return X;X+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Q}"`)}function i$($,Z,Q){let W=Dj(Q);if(W)return dD(W),iD($,Z,W);let J=BW($),X=new Date(Z);X.setSeconds(0,0),X=new Date(X.getTime()+60000);let Y=new Date(Z);Y.setFullYear(Y.getFullYear()+4);while(X<=Y){let{month:j,dayOfMonth:V,dayOfWeek:B,hour:H,minute:G}=pD(X.getTime());if(!J.months.includes(j)){let K=J.months.find((A)=>A>j)??VW(J.months,"months"),F=K<=j?1:0;X=new Date(X.getFullYear()+F,K-1,1,0,0,0,0);continue}if(!J.daysOfMonth.includes(V)||!J.daysOfWeek.includes(B)){X=new Date(X.getFullYear(),X.getMonth(),V+1,0,0,0,0);continue}if(!J.hours.includes(H)){let K=J.hours.find((A)=>A>H)??VW(J.hours,"hours"),F=K<=H?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate()+F,K,0,0,0);continue}if(!J.minutes.includes(G)){let K=J.minutes.find((A)=>A>G)??VW(J.minutes,"minutes"),F=K<=G?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate(),X.getHours()+F,K,0,0);continue}return X.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{randomUUID as I4}from"node:crypto";import{asOptionalString as g,asString as e,loadSqliteDb as aD,nowIso as L0}from"@cline/shared/db";import{resolveCronDbPath as sD}from"@cline/shared/storage";var nD=[`CREATE TABLE IF NOT EXISTS cron_specs (
41
41
  spec_id TEXT PRIMARY KEY,
42
42
  external_id TEXT NOT NULL,
43
43
  source_path TEXT NOT NULL UNIQUE,
@@ -128,17 +128,17 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
128
128
  ON cron_specs(trigger_kind, enabled, next_run_at);`,`CREATE INDEX IF NOT EXISTS cron_specs_event_match_idx
129
129
  ON cron_specs(trigger_kind, event_type, enabled);`,`CREATE INDEX IF NOT EXISTS cron_specs_parse_status_idx
130
130
  ON cron_specs(parse_status, updated_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_source_path_idx
131
- ON cron_specs(source_path);`];function _j($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let Z of sD)$.exec(Z)}function D9($){if(!$)return;try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function GW($,Z={}){if(!$)return;try{let Q=JSON.parse($);if(!Array.isArray(Q))return;let W=Q.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0);if(Z.preserveEmpty)return W;return W.length>0?W:void 0}catch{return}}function n$($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function j$($){return{specId:e($.spec_id),externalId:e($.external_id),sourcePath:e($.source_path),triggerKind:e($.trigger_kind),sourceMtimeMs:n$($.source_mtime_ms),sourceHash:g($.source_hash),parseStatus:e($.parse_status)==="invalid"?"invalid":"valid",parseError:g($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:e($.title),prompt:g($.prompt),workspaceRoot:g($.workspace_root),scheduleExpr:g($.schedule_expr),timezone:g($.timezone),eventType:g($.event_type),filters:D9(g($.filters_json)),debounceSeconds:n$($.debounce_seconds),dedupeWindowSeconds:n$($.dedupe_window_seconds),cooldownSeconds:n$($.cooldown_seconds),mode:g($.mode),systemPrompt:g($.system_prompt),providerId:g($.provider_id),modelId:g($.model_id),maxIterations:n$($.max_iterations),timeoutSeconds:n$($.timeout_seconds),maxParallel:n$($.max_parallel),tools:GW(g($.tools_json),{preserveEmpty:!0}),notesDirectory:g($.notes_directory),extensions:GW(g($.extensions_json),{preserveEmpty:!0}),source:g($.source),tags:GW(g($.tags_json)),metadata:D9(g($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:g($.last_materialized_run_id),lastRunAt:g($.last_run_at),nextRunAt:g($.next_run_at),createdAt:e($.created_at),updatedAt:e($.updated_at)}}function KW($){return{runId:e($.run_id),specId:e($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:e($.trigger_kind),status:e($.status),claimToken:g($.claim_token),claimStartedAt:g($.claim_started_at),claimUntilAt:g($.claim_until_at),scheduledFor:g($.scheduled_for),triggerEventId:g($.trigger_event_id),startedAt:g($.started_at),completedAt:g($.completed_at),sessionId:g($.session_id),reportPath:g($.report_path),error:g($.error),attemptCount:Number($.attempt_count??0),createdAt:e($.created_at),updatedAt:e($.updated_at)}}function zj($){return{eventId:e($.event_id),eventType:e($.event_type),source:e($.source),subject:g($.subject),occurredAt:e($.occurred_at),receivedAt:e($.received_at),workspaceRoot:g($.workspace_root),dedupeKey:g($.dedupe_key),payload:D9(g($.payload_json)),attributes:D9(g($.attributes_json)),processingStatus:e($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:g($.error),createdAt:e($.created_at),updatedAt:e($.updated_at)}}function Tj($){return $?JSON.stringify($):null}var eD=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function Oj($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function $L($,Z,Q,W){for(let J of eD){let X=$[J],Y=Z[J];if(Oj(X)!==Oj(Y))return!0}if(Q===!1&&W===!0)return!0;return!1}function ZL($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function QL($){return`hub/schedules/${$}.cron.md`}function WL($){let Z={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(Z).length>0?Z:void 0}function FW($){return{triggerKind:"schedule",title:$.name.trim(),prompt:$.prompt,workspaceRoot:$.workspaceRoot.trim(),schedule:$.cronPattern.trim(),mode:$.mode??"act",systemPrompt:$.systemPrompt,modelSelection:$.modelSelection?JSON.parse(JSON.stringify($.modelSelection)):void 0,maxIterations:typeof $.maxIterations==="number"?Math.floor($.maxIterations):void 0,timeoutSeconds:typeof $.timeoutSeconds==="number"?Math.floor($.timeoutSeconds):void 0,maxParallel:typeof $.maxParallel==="number"?Math.max(1,Math.floor($.maxParallel)):1,source:"hub-schedule",tags:$.tags?.filter((Z)=>Z.trim().length>0),enabled:$.enabled!==!1,metadata:WL($)}}function qj($){return JSON.stringify(FW($))}function JL($,Z){let Q=$.metadata?{...$.metadata}:{},W=Z.createdBy===null?void 0:Z.createdBy!==void 0?Z.createdBy:typeof Q.__hubScheduleCreatedBy==="string"?Q.__hubScheduleCreatedBy:void 0,J=Z.cwd!==void 0?Z.cwd:typeof Q.__hubScheduleCwd==="string"?Q.__hubScheduleCwd:void 0,X=Z.runtimeOptions!==void 0?Z.runtimeOptions:Q.__hubRuntimeOptions&&typeof Q.__hubRuntimeOptions==="object"&&!Array.isArray(Q.__hubRuntimeOptions)?Q.__hubRuntimeOptions:void 0;return delete Q.__hubScheduleCreatedBy,delete Q.__hubScheduleCwd,delete Q.__hubRuntimeOptions,{name:Z.name??$.title,cronPattern:Z.cronPattern??$.scheduleExpr??"",prompt:Z.prompt??$.prompt??"",workspaceRoot:Z.workspaceRoot??$.workspaceRoot??"",cwd:J,modelSelection:Z.modelSelection!==void 0?Z.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:Z.enabled??$.enabled,mode:Z.mode??($.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"),systemPrompt:Z.systemPrompt===null?void 0:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,maxIterations:Z.maxIterations===null?void 0:Z.maxIterations!==void 0?Z.maxIterations:$.maxIterations,timeoutSeconds:Z.timeoutSeconds===null?void 0:Z.timeoutSeconds!==void 0?Z.timeoutSeconds:$.timeoutSeconds,maxParallel:Z.maxParallel??$.maxParallel??1,createdBy:W,tags:Z.tags??$.tags,runtimeOptions:X,metadata:Z.metadata!==void 0?Z.metadata:Object.keys(Q).length>0?Q:void 0}}class x4{db;constructor($={}){let Z=$.dbPath??tD();this.db=oD(Z),_j(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return Z?j$(Z):void 0}getSpec($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return Z?j$(Z):void 0}getSpecByExternalId($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return Z?j$(Z):void 0}listSpecs($={}){let Z=[],Q=[];if($.triggerKind)Z.push("trigger_kind = ?"),Q.push($.triggerKind);if(typeof $.enabled==="boolean")Z.push("enabled = ?"),Q.push($.enabled?1:0);if($.parseStatus)Z.push("parse_status = ?"),Q.push($.parseStatus);if(!$.includeRemoved)Z.push("removed = 0");let W=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${W} ORDER BY created_at DESC LIMIT ?`).all(...Q,J).map((Y)=>j$(Y))}createHubSchedule($){let Z=`sched_${I4()}`,Q=this.upsertSpec({externalId:Z,sourcePath:QL(Z),triggerKind:"schedule",sourceHash:qj($),parseStatus:"valid",spec:FW($)});this.initializeScheduleNextRun(Q.record.specId);let W=this.getSpec(Q.record.specId);if(!W)throw Error("failed to create hub schedule");return W}getHubSchedule($){let Z=this.db.prepare(`SELECT * FROM cron_specs
131
+ ON cron_specs(source_path);`];function _j($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let Z of nD)$.exec(Z)}function D9($){if(!$)return;try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function GW($,Z={}){if(!$)return;try{let Q=JSON.parse($);if(!Array.isArray(Q))return;let W=Q.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0);if(Z.preserveEmpty)return W;return W.length>0?W:void 0}catch{return}}function n$($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function j$($){return{specId:e($.spec_id),externalId:e($.external_id),sourcePath:e($.source_path),triggerKind:e($.trigger_kind),sourceMtimeMs:n$($.source_mtime_ms),sourceHash:g($.source_hash),parseStatus:e($.parse_status)==="invalid"?"invalid":"valid",parseError:g($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:e($.title),prompt:g($.prompt),workspaceRoot:g($.workspace_root),scheduleExpr:g($.schedule_expr),timezone:g($.timezone),eventType:g($.event_type),filters:D9(g($.filters_json)),debounceSeconds:n$($.debounce_seconds),dedupeWindowSeconds:n$($.dedupe_window_seconds),cooldownSeconds:n$($.cooldown_seconds),mode:g($.mode),systemPrompt:g($.system_prompt),providerId:g($.provider_id),modelId:g($.model_id),maxIterations:n$($.max_iterations),timeoutSeconds:n$($.timeout_seconds),maxParallel:n$($.max_parallel),tools:GW(g($.tools_json),{preserveEmpty:!0}),notesDirectory:g($.notes_directory),extensions:GW(g($.extensions_json),{preserveEmpty:!0}),source:g($.source),tags:GW(g($.tags_json)),metadata:D9(g($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:g($.last_materialized_run_id),lastRunAt:g($.last_run_at),nextRunAt:g($.next_run_at),createdAt:e($.created_at),updatedAt:e($.updated_at)}}function KW($){return{runId:e($.run_id),specId:e($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:e($.trigger_kind),status:e($.status),claimToken:g($.claim_token),claimStartedAt:g($.claim_started_at),claimUntilAt:g($.claim_until_at),scheduledFor:g($.scheduled_for),triggerEventId:g($.trigger_event_id),startedAt:g($.started_at),completedAt:g($.completed_at),sessionId:g($.session_id),reportPath:g($.report_path),error:g($.error),attemptCount:Number($.attempt_count??0),createdAt:e($.created_at),updatedAt:e($.updated_at)}}function zj($){return{eventId:e($.event_id),eventType:e($.event_type),source:e($.source),subject:g($.subject),occurredAt:e($.occurred_at),receivedAt:e($.received_at),workspaceRoot:g($.workspace_root),dedupeKey:g($.dedupe_key),payload:D9(g($.payload_json)),attributes:D9(g($.attributes_json)),processingStatus:e($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:g($.error),createdAt:e($.created_at),updatedAt:e($.updated_at)}}function Tj($){return $?JSON.stringify($):null}var oD=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function Oj($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function tD($,Z,Q,W){for(let J of oD){let X=$[J],Y=Z[J];if(Oj(X)!==Oj(Y))return!0}if(Q===!1&&W===!0)return!0;return!1}function eD($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function $L($){return`hub/schedules/${$}.cron.md`}function ZL($){let Z={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(Z).length>0?Z:void 0}function FW($){return{triggerKind:"schedule",title:$.name.trim(),prompt:$.prompt,workspaceRoot:$.workspaceRoot.trim(),schedule:$.cronPattern.trim(),mode:$.mode??"act",systemPrompt:$.systemPrompt,modelSelection:$.modelSelection?JSON.parse(JSON.stringify($.modelSelection)):void 0,maxIterations:typeof $.maxIterations==="number"?Math.floor($.maxIterations):void 0,timeoutSeconds:typeof $.timeoutSeconds==="number"?Math.floor($.timeoutSeconds):void 0,maxParallel:typeof $.maxParallel==="number"?Math.max(1,Math.floor($.maxParallel)):1,source:"hub-schedule",tags:$.tags?.filter((Z)=>Z.trim().length>0),enabled:$.enabled!==!1,metadata:ZL($)}}function qj($){return JSON.stringify(FW($))}function QL($,Z){let Q=$.metadata?{...$.metadata}:{},W=Z.createdBy===null?void 0:Z.createdBy!==void 0?Z.createdBy:typeof Q.__hubScheduleCreatedBy==="string"?Q.__hubScheduleCreatedBy:void 0,J=Z.cwd!==void 0?Z.cwd:typeof Q.__hubScheduleCwd==="string"?Q.__hubScheduleCwd:void 0,X=Z.runtimeOptions!==void 0?Z.runtimeOptions:Q.__hubRuntimeOptions&&typeof Q.__hubRuntimeOptions==="object"&&!Array.isArray(Q.__hubRuntimeOptions)?Q.__hubRuntimeOptions:void 0;return delete Q.__hubScheduleCreatedBy,delete Q.__hubScheduleCwd,delete Q.__hubRuntimeOptions,{name:Z.name??$.title,cronPattern:Z.cronPattern??$.scheduleExpr??"",prompt:Z.prompt??$.prompt??"",workspaceRoot:Z.workspaceRoot??$.workspaceRoot??"",cwd:J,modelSelection:Z.modelSelection!==void 0?Z.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:Z.enabled??$.enabled,mode:Z.mode??($.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"),systemPrompt:Z.systemPrompt===null?void 0:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,maxIterations:Z.maxIterations===null?void 0:Z.maxIterations!==void 0?Z.maxIterations:$.maxIterations,timeoutSeconds:Z.timeoutSeconds===null?void 0:Z.timeoutSeconds!==void 0?Z.timeoutSeconds:$.timeoutSeconds,maxParallel:Z.maxParallel??$.maxParallel??1,createdBy:W,tags:Z.tags??$.tags,runtimeOptions:X,metadata:Z.metadata!==void 0?Z.metadata:Object.keys(Q).length>0?Q:void 0}}class x4{db;constructor($={}){let Z=$.dbPath??sD();this.db=aD(Z),_j(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return Z?j$(Z):void 0}getSpec($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return Z?j$(Z):void 0}getSpecByExternalId($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return Z?j$(Z):void 0}listSpecs($={}){let Z=[],Q=[];if($.triggerKind)Z.push("trigger_kind = ?"),Q.push($.triggerKind);if(typeof $.enabled==="boolean")Z.push("enabled = ?"),Q.push($.enabled?1:0);if($.parseStatus)Z.push("parse_status = ?"),Q.push($.parseStatus);if(!$.includeRemoved)Z.push("removed = 0");let W=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${W} ORDER BY created_at DESC LIMIT ?`).all(...Q,J).map((Y)=>j$(Y))}createHubSchedule($){let Z=`sched_${I4()}`,Q=this.upsertSpec({externalId:Z,sourcePath:$L(Z),triggerKind:"schedule",sourceHash:qj($),parseStatus:"valid",spec:FW($)});this.initializeScheduleNextRun(Q.record.specId);let W=this.getSpec(Q.record.specId);if(!W)throw Error("failed to create hub schedule");return W}getHubSchedule($){let Z=this.db.prepare(`SELECT * FROM cron_specs
132
132
  WHERE external_id = ? AND source = 'hub-schedule' AND removed = 0
133
133
  ORDER BY created_at ASC LIMIT 1`).get($);return Z?j$(Z):void 0}listHubSchedules($={}){let Z=["source = 'hub-schedule'","trigger_kind = 'schedule'","removed = 0"],Q=[];if(typeof $.enabled==="boolean")Z.push("enabled = ?"),Q.push($.enabled?1:0);if($.tags&&$.tags.length>0)for(let X of $.tags)Z.push("tags_json LIKE ?"),Q.push(`%"${X.trim()}"%`);let W=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_specs
134
134
  WHERE ${Z.join(" AND ")}
135
- ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((X)=>j$(X))}updateHubSchedule($,Z){let Q=this.getHubSchedule($);if(!Q)return;let W=JL(Q,Z),J=this.upsertSpec({externalId:$,sourcePath:Q.sourcePath,triggerKind:"schedule",sourceHash:qj(W),parseStatus:"valid",spec:FW(W)});if(Z.cronPattern!==void 0||Z.enabled!==void 0)this.initializeScheduleNextRun(J.record.specId);return this.getSpec(J.record.specId)}deleteHubSchedule($){let Z=this.getHubSchedule($);if(!Z)return!1;return this.markSpecRemoved(Z.specId),this.cancelQueuedRunsForSpec(Z.specId),!0}enqueueHubScheduleRun($,Z="manual"){let Q=this.getHubSchedule($);if(!Q||!Q.enabled||Q.removed||Q.parseStatus!=="valid")return;return this.enqueueRun({specId:Q.specId,specRevision:Q.revision,triggerKind:Z,scheduledFor:L0()})}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
135
+ ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((X)=>j$(X))}updateHubSchedule($,Z){let Q=this.getHubSchedule($);if(!Q)return;let W=QL(Q,Z),J=this.upsertSpec({externalId:$,sourcePath:Q.sourcePath,triggerKind:"schedule",sourceHash:qj(W),parseStatus:"valid",spec:FW(W)});if(Z.cronPattern!==void 0||Z.enabled!==void 0)this.initializeScheduleNextRun(J.record.specId);return this.getSpec(J.record.specId)}deleteHubSchedule($){let Z=this.getHubSchedule($);if(!Z)return!1;return this.markSpecRemoved(Z.specId),this.cancelQueuedRunsForSpec(Z.specId),!0}enqueueHubScheduleRun($,Z="manual"){let Q=this.getHubSchedule($);if(!Q||!Q.enabled||Q.removed||Q.parseStatus!=="valid")return;return this.enqueueRun({specId:Q.specId,specRevision:Q.revision,triggerKind:Z,scheduledFor:L0()})}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
136
136
  WHERE trigger_kind = 'event'
137
137
  AND event_type = ?
138
138
  AND enabled = 1
139
139
  AND removed = 0
140
140
  AND parse_status = 'valid'
141
- ORDER BY created_at ASC`).all($).map((Q)=>j$(Q))}upsertSpec($){let Z=L0(),Q=this.getSpecBySourcePath($.sourcePath),W=$.spec,J={title:W?.title??Q?.title??ZL($.sourcePath),prompt:W?.prompt,workspaceRoot:W?.workspaceRoot,scheduleExpr:W?.triggerKind==="schedule"?W.schedule:void 0,timezone:W?.triggerKind==="schedule"?W.timezone:void 0,eventType:W?.triggerKind==="event"?W.event:void 0,filters:W?.triggerKind==="event"?W.filters:void 0,debounceSeconds:W?.triggerKind==="event"?W.debounceSeconds:void 0,dedupeWindowSeconds:W?.triggerKind==="event"?W.dedupeWindowSeconds:void 0,cooldownSeconds:W?.triggerKind==="event"?W.cooldownSeconds:void 0,mode:W?.mode,systemPrompt:W?.systemPrompt,providerId:W?.modelSelection?.providerId,modelId:W?.modelSelection?.modelId,maxIterations:W?.maxIterations,timeoutSeconds:W?.timeoutSeconds,maxParallel:W&&"maxParallel"in W?W.maxParallel:void 0,tools:W?.tools,notesDirectory:W?.notesDirectory,extensions:W?.extensions,source:W?.source},X=$.parseStatus==="valid"&&(W?.enabled??!0);if(!Q){let B=`cspec_${I4()}`;this.insertSpecRow(B,$,J,X,Z);let G=this.getSpec(B);if(!G)throw Error("failed to insert cron_spec row");return{record:G,created:!0,revisionChanged:!0}}let j=Q.sourceHash!==$.sourceHash&&$L(Q,J,Q.enabled,X),V=j?Q.revision+1:Q.revision;this.updateSpecRow(Q.specId,$,J,X,V,Z);let H=this.getSpec(Q.specId);if(!H)throw Error("failed to reload cron_spec after update");return{record:H,created:!1,revisionChanged:j}}insertSpecRow($,Z,Q,W,J){let X=Z.spec;this.db.prepare(`INSERT INTO cron_specs (
141
+ ORDER BY created_at ASC`).all($).map((Q)=>j$(Q))}upsertSpec($){let Z=L0(),Q=this.getSpecBySourcePath($.sourcePath),W=$.spec,J={title:W?.title??Q?.title??eD($.sourcePath),prompt:W?.prompt,workspaceRoot:W?.workspaceRoot,scheduleExpr:W?.triggerKind==="schedule"?W.schedule:void 0,timezone:W?.triggerKind==="schedule"?W.timezone:void 0,eventType:W?.triggerKind==="event"?W.event:void 0,filters:W?.triggerKind==="event"?W.filters:void 0,debounceSeconds:W?.triggerKind==="event"?W.debounceSeconds:void 0,dedupeWindowSeconds:W?.triggerKind==="event"?W.dedupeWindowSeconds:void 0,cooldownSeconds:W?.triggerKind==="event"?W.cooldownSeconds:void 0,mode:W?.mode,systemPrompt:W?.systemPrompt,providerId:W?.modelSelection?.providerId,modelId:W?.modelSelection?.modelId,maxIterations:W?.maxIterations,timeoutSeconds:W?.timeoutSeconds,maxParallel:W&&"maxParallel"in W?W.maxParallel:void 0,tools:W?.tools,notesDirectory:W?.notesDirectory,extensions:W?.extensions,source:W?.source},X=$.parseStatus==="valid"&&(W?.enabled??!0);if(!Q){let H=`cspec_${I4()}`;this.insertSpecRow(H,$,J,X,Z);let G=this.getSpec(H);if(!G)throw Error("failed to insert cron_spec row");return{record:G,created:!0,revisionChanged:!0}}let j=Q.sourceHash!==$.sourceHash&&tD(Q,J,Q.enabled,X),V=j?Q.revision+1:Q.revision;this.updateSpecRow(Q.specId,$,J,X,V,Z);let B=this.getSpec(Q.specId);if(!B)throw Error("failed to reload cron_spec after update");return{record:B,created:!1,revisionChanged:j}}insertSpecRow($,Z,Q,W,J){let X=Z.spec;this.db.prepare(`INSERT INTO cron_specs (
142
142
  spec_id, external_id, source_path, trigger_kind,
143
143
  source_mtime_ms, source_hash, parse_status, parse_error,
144
144
  enabled, removed, title, prompt, workspace_root,
@@ -176,7 +176,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
176
176
  payload_json, attributes_json, processing_status,
177
177
  matched_spec_count, queued_run_count, suppressed_count,
178
178
  error, created_at, updated_at
179
- ) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(J,X,Y,$.subject?.trim()||null,j,W,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,Tj($.payload),Tj($.attributes),"received",0,0,0,null,Q,Q).changes??0,H=this.getEventLog(J);if(!H)throw Error("failed to insert cron_event_log row");return{record:H,created:V===1}}getEventLog($){let Z=this.db.prepare("SELECT * FROM cron_event_log WHERE event_id = ?").get($);return Z?zj(Z):void 0}listEventLogs($={}){let Z=[],Q=[];if($.eventType)Z.push("event_type = ?"),Q.push($.eventType);if($.source)Z.push("source = ?"),Q.push($.source);if($.processingStatus)Z.push("processing_status = ?"),Q.push($.processingStatus);let W=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_event_log ${W}
179
+ ) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(J,X,Y,$.subject?.trim()||null,j,W,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,Tj($.payload),Tj($.attributes),"received",0,0,0,null,Q,Q).changes??0,B=this.getEventLog(J);if(!B)throw Error("failed to insert cron_event_log row");return{record:B,created:V===1}}getEventLog($){let Z=this.db.prepare("SELECT * FROM cron_event_log WHERE event_id = ?").get($);return Z?zj(Z):void 0}listEventLogs($={}){let Z=[],Q=[];if($.eventType)Z.push("event_type = ?"),Q.push($.eventType);if($.source)Z.push("source = ?"),Q.push($.source);if($.processingStatus)Z.push("processing_status = ?"),Q.push($.processingStatus);let W=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_event_log ${W}
180
180
  ORDER BY received_at DESC, created_at DESC
181
181
  LIMIT ?`).all(...Q,J).map((Y)=>zj(Y))}updateEventLogProcessing($,Z){return(this.db.prepare(`UPDATE cron_event_log SET
182
182
  processing_status = ?,
@@ -229,7 +229,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
229
229
  )
230
230
  AND (scheduled_for IS NULL OR scheduled_for <= ?)
231
231
  ORDER BY COALESCE(scheduled_for, created_at) ASC
232
- LIMIT ?`).all(Z,Z,J);for(let j of Y){let V=e(j.run_id);if(!V)continue;let H=`cclaim_${I4()}`;if((this.db.prepare(`UPDATE cron_runs SET
232
+ LIMIT ?`).all(Z,Z,J);for(let j of Y){let V=e(j.run_id);if(!V)continue;let B=`cclaim_${I4()}`;if((this.db.prepare(`UPDATE cron_runs SET
233
233
  status = 'running',
234
234
  claim_token = ?,
235
235
  claim_started_at = ?,
@@ -250,7 +250,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
250
250
  AND claim_until_at <= ?
251
251
  AND completed_at IS NULL
252
252
  )
253
- )`).run(H,Z,W,Z,Z,V,Z).changes??0)!==1)continue;let G=this.getRun(V);if(!G)continue;X.push({run:G,claimToken:H,claimUntilAt:W})}this.db.exec("COMMIT;")}catch(Y){throw this.db.exec("ROLLBACK;"),Y}return X}renewClaim($,Z,Q){return(this.db.prepare(`UPDATE cron_runs SET claim_until_at = ?, updated_at = ?
253
+ )`).run(B,Z,W,Z,Z,V,Z).changes??0)!==1)continue;let G=this.getRun(V);if(!G)continue;X.push({run:G,claimToken:B,claimUntilAt:W})}this.db.exec("COMMIT;")}catch(Y){throw this.db.exec("ROLLBACK;"),Y}return X}renewClaim($,Z,Q){return(this.db.prepare(`UPDATE cron_runs SET claim_until_at = ?, updated_at = ?
254
254
  WHERE run_id = ? AND claim_token = ?`).run(Q,L0(),$,Z).changes??0)===1}completeRun($,Z){let Q=Z.completedAtIso??L0(),W=Z.claimToken?"WHERE run_id = ? AND claim_token = ?":"WHERE run_id = ?";return(this.db.prepare(`UPDATE cron_runs SET
255
255
  status = ?,
256
256
  session_id = COALESCE(?, session_id),
@@ -273,9 +273,9 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
273
273
  error = ?,
274
274
  scheduled_for = COALESCE(?, scheduled_for),
275
275
  updated_at = ?
276
- WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,Z,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,Z){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(Z,L0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,L0(),$)}}function _9($){return $?new Date($).getTime():void 0}function XL($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function L9($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof Z?.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:_9($.nextRunAt),lastRunAt:_9($.lastRunAt),createdBy:typeof Z?.__hubScheduleCreatedBy==="string"?Z.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:Z?.__hubRuntimeOptions&&typeof Z.__hubRuntimeOptions==="object"&&!Array.isArray(Z.__hubRuntimeOptions)?Z.__hubRuntimeOptions:void 0,metadata:XL($)}}function YL($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function AW($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:_9($.startedAt),endedAt:_9($.completedAt),status:YL($.status),errorMessage:$.error}}class Z8{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new x4({dbPath:$.dbPath}),this.materializer=new P4({store:this.store}),this.runner=new y4({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(BW($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return L9(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?L9(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>L9(Z))}updateSchedule($,Z){if(Z.cronPattern!==void 0)BW(Z.cronPattern);let Q=this.store.getHubSchedule($);if(!Q)return;let W=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot;if((Z.enabled??Q.enabled)&&!W)throw Error("workspaceRoot is required for enabled schedules");let X=this.store.updateHubSchedule($,{...Z,scheduleId:$});return X?L9(X):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;await this.runner.tick();let Q=this.store.getRun(Z.runId)??Z;return AW(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),AW(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((J)=>{let X=Z??this.store.getSpec(J.specId);if(!X||X.source!=="hub-schedule")return;return AW(J,X.externalId)}).filter((J)=>{if(!J)return!1;return!$.status||J.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,W=0,J=0,X;for(let Y of Z){if(Y.status==="success"||Y.status==="completed")Q+=1;if(!X&&Y.status!=="success"&&Y.status!=="completed")X=Y;if(Y.startedAt&&Y.endedAt)J+=Y.endedAt-Y.startedAt,W+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:W>0?J/W/1000:0,lastFailure:X}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let Z=this.store.getSpec($.specId);if(!Z||Z.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:Z.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:Z.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+Z.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let Z={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(Z).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,W)=>String(Q.nextRunAt).localeCompare(String(W.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:W})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:W}))}}u9();import{createSessionId as s_,isHubProtocolCompatible as o_,resolveClineBuildEnv as t_,resolveHubCommandTimeoutMs as e_}from"@cline/shared";var lj={};N(lj,{splitCoreSessionConfig:()=>i4,isSessionNotFoundError:()=>I1,SessionNotFoundError:()=>k1,SESSION_NOT_FOUND_ERROR_CODE:()=>s$});var s$="session_not_found";class k1 extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function I1($){return $ instanceof k1||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function i4($){let{hooks:Z,logger:Q,telemetry:W,extensionContext:J,extraTools:X,extensions:Y,onTeamEvent:j,onConsecutiveMistakeLimitReached:V,checkpoint:H,compaction:B,...G}=$,K={};if(Z)K.hooks=Z;if(Q)K.logger=Q;if(W)K.telemetry=W;if(J)K.extensionContext=J;if(X)K.extraTools=X;if(Y)K.extensions=Y;if(j)K.onTeamEvent=j;if(V)K.onConsecutiveMistakeLimitReached=V;if(H?.createCheckpoint)K.checkpoint=H;if(B?.compact)K.compaction=B;let F=Object.keys(K).length>0?K:void 0;return{config:{...G,...H?{checkpoint:{enabled:H.enabled}}:{},...B?{compaction:{enabled:B.enabled,strategy:B.strategy,thresholdRatio:B.thresholdRatio,reserveTokens:B.reserveTokens,preserveRecentTokens:B.preserveRecentTokens,maxInputTokens:B.maxInputTokens,summarizer:B.summarizer}}:{}},...F?{localRuntime:F}:{}}}import{spawn as N_}from"node:child_process";import{closeSync as w_,mkdirSync as C_,openSync as P_}from"node:fs";import{basename as S_,dirname as b_,join as y_}from"node:path";import{fileURLToPath as h_}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as k_,isHubDaemonProcess as JV,isHubProtocolCompatible as I_,resolveClineBuildEnv as XV,withResolvedClineBuildEnv as x_}from"@cline/shared";import{createHash as W_,randomBytes as J_}from"node:crypto";import{existsSync as X_}from"node:fs";import{chmod as Y_,mkdir as _W,readFile as aj,rm as zW,writeFile as sj}from"node:fs/promises";import{dirname as oj,join as TW}from"node:path";import{resolveClineDataDir as o$,resolveClineDir as tj}from"@cline/shared/storage";var rj="0.0.56";var n4={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:rj,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var j_="CLINE_HUB_DISCOVERY_PATH",V_="CLINE_HUB_BUILD_ID",ij=30000,H_=15000,B_=100;function G_($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function K_($){return W_("sha256").update($).digest("hex").slice(0,12)}function F_($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(Z){return Z instanceof Error&&"code"in Z?String(Z.code)==="EPERM":!1}}function d9(){return J_(32).toString("hex")}function A_($){return new Promise((Z)=>setTimeout(Z,$))}function f_($){return`${$}.lock`}async function U_($){try{let Z=JSON.parse(await aj(TW($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function nj($){await zW($,{recursive:!0,force:!0}).catch(()=>{return})}function l9(){return process.env[V_]?.trim()||String(n4.version)}function x1($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${K_($)}`,Q=process.env[j_]?.trim()||TW(o$(),"locks","hub","owners",`${G_(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function ej($=`hub-${Date.now().toString(36)}`){return x1($)}async function K0($){try{let Z=JSON.parse(await aj($,"utf8"));if(typeof Z.hubId!=="string"||typeof Z.protocolVersion!=="string"||typeof Z.authToken!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string"||typeof Z.startedAt!=="string"||typeof Z.updatedAt!=="string")return;return{hubId:Z.hubId,protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,authToken:Z.authToken,host:Z.host,port:Z.port,url:Z.url,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:Z.startedAt,updatedAt:Z.updatedAt}}catch{return}}async function p9($,Z){await _W(oj($),{recursive:!0}),await zW($,{force:!0}).catch(()=>{return}),await sj($,`${JSON.stringify(Z,null,2)}
277
- `,{encoding:"utf8",mode:384}),await Y_($,384)}async function S0($){await zW($,{force:!0}).catch(()=>{return})}async function r9($,Z){let Q=f_($);await _W(oj(Q),{recursive:!0});let W=Date.now()+H_;while(!0)try{await _W(Q,{recursive:!1}),await sj(TW(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
278
- `,"utf8");try{return await Z()}finally{await nj(Q)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let Y=await U_(Q),j=Y?Date.now()-Date.parse(Y.acquiredAt):ij+1;if(!Y||!F_(Y.pid)||j>ij){await nj(Q);continue}if(Date.now()>=W)throw Error(`Timed out waiting for hub startup lock ${Q}`);await A_(B_)}}async function g1($,Z){try{let Q=await fetch(Z?.authToken?OW($):i9($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let W=await Q.json();if(typeof W.protocolVersion!=="string"||typeof W.host!=="string"||typeof W.port!=="number"||typeof W.url!=="string")return;return{protocolVersion:W.protocolVersion,minClientProtocolVersion:typeof W.minClientProtocolVersion==="string"?W.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof W.maxClientProtocolVersion==="string"?W.maxClientProtocolVersion:void 0,capabilities:Array.isArray(W.capabilities)?W.capabilities.filter((J)=>typeof J==="string"):void 0,coreVersion:typeof W.coreVersion==="string"?W.coreVersion:void 0,buildId:typeof W.buildId==="string"?W.buildId:void 0,host:W.host,port:W.port,url:W.url,hubId:typeof W.hubId==="string"?W.hubId:void 0,authToken:typeof W.authToken==="string"?W.authToken:void 0,pid:typeof W.pid==="number"?W.pid:void 0,startedAt:typeof W.startedAt==="string"?W.startedAt:void 0,updatedAt:typeof W.updatedAt==="string"?W.updatedAt:void 0}}catch{return}}function Z1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function i9($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function OW($){let Z=new URL(i9($));return Z.pathname="/status",Z.toString()}function $V($){return X_($)}import{CLINE_HUB_DEV_PORT as D_,CLINE_HUB_PORT as L_,resolveClineBuildEnv as __}from"@cline/shared";var z_="CLINE_HUB_HOST",T_="CLINE_HUB_PORT",O_="CLINE_HUB_PATHNAME",qW="127.0.0.1",MW=L_,RW="/hub";function ZV($){return __($)==="development"?D_:MW}function EW($={}){return($.env??process.env)[z_]?.trim()||qW}function V8($={}){let Q=($.env??process.env)[T_]?.trim();if(!Q)return ZV($);let W=Number.parseInt(Q,10);if(!Number.isInteger(W)||W<1||W>65535)return ZV($);return W}function NW($={}){return($.env??process.env)[O_]?.trim()||RW}function K1($={},Z={}){return{host:$.host??EW(Z),port:$.port??V8(Z),pathname:$.pathname??NW(Z)}}import{join as q_}from"node:path";var M_="shared:cline",R_="CLINE_HUB_DISCOVERY_PATH",E_="hub-production";function QV($){let Z=w1($.trim());return x1(`workspace:${Z||$.trim()}`)}function Q1($=M_){return x1($)}function F1(){return{ownerId:E_,discoveryPath:process.env[R_]?.trim()||q_(o$(),"locks","hub","production.json")}}var g_=8000,m_=200,v_=3000,c_=100,u_=[100,250,500,1000,2000],d_="--cline-hub-daemon";function l_($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function p_(){try{let $=y_(o$(),"logs","hub-daemon.log");return C_(b_($),{recursive:!0}),{fd:P_($,"a"),logPath:$}}catch{return}}function YV(){return XV()==="production"?F1():Q1()}function t$($){return I_($).compatible}function WV($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function e$($,Z){try{return await g1($,{authToken:Z})}catch{return}}async function r_($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await e$($))?.url)return!0;await new Promise((J)=>setTimeout(J,c_))}return!1}async function n9($,Z){if(await s4($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await r_($.url,v_);return await S0(Z).catch(()=>{return}),Q}async function a4($,Z){if(t$($))return!0;return n9($,Z)}async function jV($){if(XV()!=="production")return;let Z=Q1();if(Z.discoveryPath===$.discoveryPath)return;let Q=await K0(Z.discoveryPath);if(Q?.url)await n9(Q,Z.discoveryPath);else await S0(Z.discoveryPath).catch(()=>{return})}function i_(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return h_(new URL(`./entry.${$}`,import.meta.url))}function n_($,Z){let Q=i_(),W=process.execPath?.trim();if(!W)throw Error("unable to resolve runtime executable for hub daemon");let J=S_(W).toLowerCase().includes("bun"),X=Q.startsWith("/$bunfs/"),Y=J&&Q.toLowerCase().endsWith(".ts"),j=X?[d_]:[...Y?["--conditions=development"]:[],Q];return{launcher:W,args:[...j,"--cwd",$,...l_(Z)],cwd:$,env:{...x_(process.env),CLINE_NO_INTERACTIVE:"1",[k_]:"1"}}}function a_($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Q="message"in $?$.message:void 0;return typeof Q==="string"&&Q.includes("ETXTBSY")}function wW($,Z={}){if(JV())return;let Q=n_($,Z),W=p_();try{N_(Q.launcher,Q.args,{detached:!0,stdio:W?["ignore",W.fd,W.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(W)w_(W.fd)}}async function H8($,Z={}){for(let Q=0;;Q++)try{wW($,Z);return}catch(W){let J=u_[Q];if(!a_(W)||J===void 0)throw W;await new Promise((X)=>setTimeout(X,J))}}function a9($,Z={}){if(JV())return;let Q=YV(),W=K1(Z),J=Z1(W.host,W.port,W.pathname),X=Z.allowPortFallback===!0&&W.port!==0;jV(Q).catch(()=>{return}).then(()=>K0(Q.discoveryPath)).then(async(Y)=>{let j=!1;if(Y?.url)if(!Y.authToken){if(j=!0,!await n9(Y,Q.discoveryPath)&&!X)return}else{let B=await e$(Y.url,Y.authToken);if(B?.url&&t$(B)&&await A1(B.url,{authToken:Y.authToken}))return;if(B?.url)await a4({...B,authToken:Y.authToken},Q.discoveryPath);else await S0(Q.discoveryPath).catch(()=>{return})}let V=await e$(J);if(V?.url){if(t$(V)){if(!X||!j)return}else if(!await a4({...V,authToken:void 0},Q.discoveryPath)&&!X)return}let H=X?{...W,port:0}:W;await H8($,H)}).catch(()=>{})}async function VV($,Z={}){let Q=YV(),W=Z.host!==void 0||Z.port!==void 0||Z.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=K1(Z),X=Z1(J.host,J.port,J.pathname),Y=(F)=>{if(!W)B$(F.url,F.authToken);return F};await jV(Q).catch(()=>{return});let j=await K0(Q.discoveryPath),V=!1;if(j?.url){let F=j.authToken;if(!F)V=!0,await n9(j,Q.discoveryPath);else{let A=await e$(j.url,F);if(A?.url&&t$(A)&&await A1(A.url,{authToken:F}))return Y({url:A.url,authToken:F});if(A?.url)await a4({...A,authToken:F},Q.discoveryPath);else await S0(Q.discoveryPath).catch(()=>{return})}}let H=await e$(X);if(H?.url){let F=WV(H,j,X);if(t$(H))throw Error(`A compatible Cline Hub is already running at ${X}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${V?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`);if(!await a4(F,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is already running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let G=Z.allowPortFallback===!0&&J.port!==0?{...J,port:0}:J;await H8($,G);let K=Date.now()+g_;while(Date.now()<K){let F=await K0(Q.discoveryPath);if(F?.url&&F.authToken){let L=await e$(F.url,F.authToken);if(L?.url&&t$(L)&&await A1(L.url,{authToken:F.authToken}))return Y({url:L.url,authToken:F.authToken})}let A=await e$(X);if(A?.url&&!t$(A)){let L=WV(A,F,X);if(!await a4(L,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is still running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((L)=>setTimeout(L,m_))}throw Error("Timed out waiting for detached hub startup.")}function s9(){return t_()==="production"?F1():Q1()}function $z(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function FV($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return FV($.data);return String($)}function Zz($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function HV($){let Z=$,Q=Zz(Z.reason);return new R0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:CW,{closeCode:Z.code,closeReason:Q||void 0})}function Qz($,Z){if($ instanceof R0)return $;if($ instanceof Error)return new R0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new R0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new R0("hub_connect_failed",Q);let W=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new R0("hub_connect_failed",W?`Failed to connect to hub at ${Z.toString()} (${W} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var Wz=8000,Jz=200,BV="*",GV=8000,Xz="cline-hub-auth.",AV=new Map,fV=new Set,Yz=3000,jz=3000,Vz=100,CW="Hub connection closed",Hz=250,Bz=5000,KV=0.5;class R0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function bW($){return $ instanceof R0}class B8 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function o9($,Z){return $ instanceof B8&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function UV($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=yW($.toString());return Q?AV.get(Q):void 0}function Gz($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function yW($){if(!Gz($))return;let Z=new URL(G$($));return Z.search="",Z.hash="",Z.toString()}function PW($){let Z=yW($);return!!Z&&fV.has(Z)}function B$($,Z){let Q=yW($);if(Q){if(fV.add(Q),Z?.trim())AV.set(Q,Z)}return $}class W1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new R0("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),Z=this.options.authToken?.trim()||UV($);$.hash="";let W=new($z())($.toString(),Z?[`${Xz}${Z}`]:void 0);this.socket=W;let J=!1;this.connectPromise=new Promise((X,Y)=>{let j=!1,V=setTimeout(()=>{if(j)return;j=!0,J=!0,this.lastCloseError=new R0("hub_connect_timeout",`Timed out connecting to hub after ${GV}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{W.close()}catch{}Y(this.lastCloseError)},GV);W.addEventListener("open",()=>{if(j)return;j=!0,clearTimeout(V),X()}),W.addEventListener("error",(H)=>{if(j)return;j=!0,clearTimeout(V),this.lastCloseError=Qz(H,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)}),W.addEventListener("close",(H)=>{if(j)return;if(j=!0,clearTimeout(V),!J)this.lastCloseError=HV(H),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)})}),W.addEventListener("message",(X)=>{this.handleFrame(JSON.parse(FV(X)))}),W.addEventListener("close",(X)=>{if(this.socket!==W)return;if(!J)this.lastCloseError=HV(X),this.sawSocketClose=!0;this.registered=!1;for(let Y of this.pendingReplies.values())Y.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let X of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(X));this.reconnectAttempt=0}subscribe($,Z){let Q=Z?.sessionId?.trim()||void 0,W={listener:$,sessionId:Q};return this.listeners.add(W),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(W))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,W){let J=0,X=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,W)}catch(Y){if(!X||J>=1||!await this.recoverLocalHubTransport(Y))throw Y;J+=1}}async commandOnce($,Z,Q,W){await this.connect();let J=s_("hubreq_"),X=e_($,W?.timeoutMs),Y=new Promise((V,H)=>{let B=X===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;H(new B8($,"hub_command_timeout",`Hub command ${$} timed out after ${X}ms (hub=${this.currentUrl}, requestId=${J}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},X);this.pendingReplies.set(J,{resolve:(G)=>{if(B)clearTimeout(B);V(G)},reject:(G)=>{if(B)clearTimeout(B);H(G)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:J,clientId:this.clientId,sessionId:Q,timeoutMs:X,payload:Z}})}catch(V){throw this.pendingReplies.delete(J),V}let j=await Y;if(!j.ok){if(j.error?.code===s$){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new k1(V,j.error.message)}throw new B8($,j.error?.code,j.error?.message??`Hub command ${$} failed`)}return j}async recoverLocalHubTransport($){if(!PW(this.currentUrl)||!bW($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await $2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!Z)return!1;return this.currentUrl=Z,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(Hz*2**this.reconnectAttempt,Bz),Z=Math.round($*(1-KV)+Math.random()*$*KV);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},Z)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!PW(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await $2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if($){this.currentUrl=$,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let $=this.socket;if(this.closedByClient=!0,this.clearReconnectTimer(),this.registered=!1,!$)return;this.lastCloseError=new R0("hub_connection_closed",CW),this.sawSocketClose=!1;for(let Z of this.pendingReplies.values())Z.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new R0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,Z){this.sendFrame({kind:$,clientId:this.clientId,...Z?{sessionId:Z}:{}})}adjustSubscriptionCount($,Z){let Q=this.subscriptionKeyForSessionId($),W=(this.subscriptionCounts.get(Q)??0)+Z;if(W<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(Z<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,W),Z>0&&W===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??BV}subscriptionSessionIdFromKey($){return $===BV?void 0:$}handleFrame($){switch($.kind){case"reply":{let Z=$.envelope.requestId;if(!Z)return;let Q=this.pendingReplies.get(Z);if(!Q)return;this.pendingReplies.delete(Z),Q.resolve($.envelope);return}case"event":for(let Z of this.listeners){if(Z.sessionId&&Z.sessionId!==$.envelope.sessionId?.trim())continue;Z.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function G$($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function A1($,Z){let Q=new W1({url:$,authToken:Z?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function SW($,Z){let Q=G$($),W=await g1(Q,{authToken:Z?.authToken});if(!W)return{status:"unreachable",url:Q};if(!o_(W).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await A1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function Kz($){let Z=Date.now()+Wz;while(Date.now()<Z){let Q=await K0($.discoveryPath);if(Q?.url){let W=await SW(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(W.status==="compatible")return B$(W.url,Q.authToken)}await new Promise((W)=>setTimeout(W,Jz))}return}async function Fz($){let Z=Date.now()+jz;while(Date.now()<Z){if(!(await g1($).catch(()=>{return}))?.url)return!0;await new Promise((W)=>setTimeout(W,Vz))}return!1}function Az($,Z){try{return G$($)===G$(Z)}catch{return!1}}function fz($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let W=Q;if(W.status==="running"||W.status==="idle"||W.status==="pending")return!0;return Array.isArray(W.participants)&&W.participants.length>0})}async function Uz($,Z,Q){let W=new W1({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let J=await W.command("session.list",{limit:500},void 0,{timeoutMs:Yz});return!fz(J.payload)}catch{return!1}finally{await W.dispose().catch(()=>{return})}}async function o4($={}){if($.endpoint?.trim()){let J=await SW($.endpoint);return J.status==="compatible"?J.url:void 0}let Z=s9(),Q=await K0(Z.discoveryPath);if(!Q?.url)return;let W=await SW(Q.url,{authToken:Q.authToken});if(W.status==="compatible")return B$(W.url,Q.authToken);if(W.status==="protocol_mismatch")await S0(Z.discoveryPath).catch(()=>{return});return}async function $2($={}){let Z=await o4($);if(Z&&await A1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;let Q=s9();return await H8($.workspaceRoot??process.cwd()),await Kz(Q)}async function s4($,Z){let Q=new URL($),W=Z?.trim()||UV(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:W?{authorization:`Bearer ${W}`}:void 0})).ok}async function hW($=s9()){let Z=await K0($.discoveryPath);if(!Z?.url)return!1;try{if(await s4(Z.url,Z.authToken))return!0}catch{}return!1}async function t9($){if(!PW($.url))return;let Z=s9(),Q=await K0(Z.discoveryPath);if(!Q?.url||!Az(Q.url,$.url))return;if(!await Uz(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await hW())return;if(!await Fz(Q.url))return;return await S0(Z.discoveryPath).catch(()=>{return}),await $2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{resolveClineBuildEnv as Dz}from"@cline/shared";function Lz($,Z){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Q?`Failed to connect to hub at ${Z} (${Q} event before socket open).`:`Failed to connect to hub at ${Z}.`)}var _z="cline-hub-auth.";function zz($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function Tz($,Z){let Q=new URL($),W=new URL(Z);return Q.search="",Q.hash="",W.search="",W.hash="",Q.toString()===W.toString()}function DV(){return Dz()==="production"?F1():Q1()}async function Oz($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=DV(),W=await K0(Q.discoveryPath);if(W?.url&&Tz($.toString(),W.url))return W.authToken;return}async function kW($={}){let Z=K1($);if(!zz($)){let Q=DV(),W=await K0(Q.discoveryPath);if(W?.url)return W.url}return Z1(Z.host,Z.port,Z.pathname)}async function e9($){return await new Promise((Z,Q)=>{(async()=>{let W=new URL($),J=await Oz(W);W.hash="";let X=new WebSocket(W.toString(),J?[`${_z}${J}`]:void 0),Y=new Map,j=0;X.addEventListener("open",()=>{Z({send(V){let H=V.requestId??`hub-client-${++j}`;return new Promise((B,G)=>{Y.set(H,{resolve:B,reject:G});let K={kind:"command",envelope:{...V,requestId:H}};X.send(JSON.stringify(K))})},close(){X.close()}})}),X.addEventListener("message",(V)=>{let H=JSON.parse(String(V.data));if(H.kind==="reply"&&H.envelope.requestId){let B=Y.get(H.envelope.requestId);if(B)Y.delete(H.envelope.requestId),B.resolve(H.envelope)}}),X.addEventListener("close",()=>{for(let V of Y.values())V.reject(Error("Hub connection closed"));Y.clear()}),X.addEventListener("error",(V)=>{Q(Lz(V,$))})})().catch(Q)})}async function LV($){try{return(await e9($)).close(),!0}catch{return!1}}async function _V($,Z){let Q=await kW($),W=await e9(Q);try{return await W.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{W.close()}}function IW($){return $?JSON.parse(JSON.stringify($)):{}}function $Z($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?IW(Z.metadata):void 0;return{sessionId:typeof Z.sessionId==="string"?Z.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function zV($,Z){return $.error?.message??`hub command failed: ${Z}`}function qz($){let Z=IW($);if(typeof Z.error==="string"&&Z.error.trim())return{...Z,error:Z.error.trim()};let Q=Z.result&&typeof Z.result==="object"?Z.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...Z,error:Q.text.trim()};let W=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof W?.message==="string"&&W.message.trim())return{...Z,error:W.message.trim()};return Z}function TV($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function Mz($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error("hub checkpoint restore returned no checkpoint");let Q=Z;if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Q}function Rz($){let Z=IW($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||TV(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||TV(Z)||"",eventType:"schedule.execution.failed",payload:Z};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:Z};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:Z};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:Z};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:Z};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:Z};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:Z};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:Z};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:Z};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:qz($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class xW{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new W1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-session-client",displayName:$.displayName??"hub session client",workspaceRoot:$.workspaceRoot,cwd:$.cwd})}async ensureMetadataApplied(){if(this.metadataApplied||!this.options.metadata){if(!this.options.metadata)await this.client.connect();return}await this.client.connect(),await this.client.command("client.update",{metadata:this.options.metadata}),this.metadataApplied=!0}async connect(){await this.ensureMetadataApplied()}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession($){await this.ensureMetadataApplied();let Z=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),Q=$Z(Z.payload);if(!Q?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}}}async sendRuntimeSession($,Z,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:Z.prompt,mode:Z.config.mode,attachments:Z.attachments,delivery:Z.delivery,timeoutSeconds:Z.config.timeoutSeconds},$,Q)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(I1(Q))return;throw Q}return $Z(Z.payload)}async readMessages($){let Z=$.trim();if(!Z)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw Error(zV(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async restore($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let W=$.config,J=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.workspaceRoot,cwd:W.cwd,sessionConfig:{providerId:W.provider,modelId:W.model,apiKey:W.apiKey,cwd:W.cwd??W.workspaceRoot,workspaceRoot:W.workspaceRoot,systemPrompt:W.systemPrompt??"",mode:W.mode??"act",rules:W.rules,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawnAgent:W.enableSpawn!==!1,enableAgentTeams:W.enableTeams!==!1,disableMcpSettingsTools:W.disableMcpSettingsTools,missionLogIntervalSteps:W.missionStepInterval,missionLogIntervalMs:W.missionTimeIntervalMs},metadata:{source:W.source??"cli",provider:W.provider,model:W.model,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,prompt:void 0,interactive:W.interactive!==!1},runtimeOptions:{mode:W.mode,systemPrompt:W.systemPrompt,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,autoApproveTools:W.autoApproveTools,configExtensions:W.configExtensions},modelSelection:{provider:W.provider,model:W.model,apiKey:W.apiKey},toolPolicies:W.toolPolicies}:{}},Z);if(!J.ok)throw Error(zV(J,"session.restore"));let X=$Z(J.payload);if(Q&&!X?.sessionId)throw Error("hub checkpoint restore returned no session id");let Y=Array.isArray(J.payload?.messages)?J.payload.messages:void 0,j=Mz(J.payload);return{sessionId:X?.sessionId,startResult:X?.sessionId?{sessionId:X.sessionId,manifestPath:"",messagesPath:X.messagesPath??""}:void 0,...Y?{messages:Y}:{},checkpoint:j}}async listSessions($){await this.ensureMetadataApplied();let Z=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(Z.payload?.sessions)?Z.payload?.sessions:[]).map((W)=>$Z({session:W})).filter((W)=>Boolean(W?.sessionId))}async deleteSession($,Z=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:Z})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,Z){let Q=new Set(($.sessionIds??[]).map((J)=>J.trim()).filter(Boolean)),W=this.client.subscribe((J)=>{let X=Rz(J);if(!X)return;if(Q.size>0&&!Q.has(X.sessionId))return;Z.onEvent?.(X)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),W}streamTeamProgress($,Z){let Q=this.client.subscribe((W)=>{if(W.event!=="team.progress"||!W.payload)return;Z.onProjection?.(W.payload)});return this.ensureMetadataApplied().catch((W)=>{Z.onError?.(W instanceof Error?W:Error(String(W)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list");return Array.isArray(Z.payload?.schedules)?Z.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,Z){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...Z})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,Z){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:Z});return Array.isArray(Q.payload?.executions)?Q.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(Z.payload?.upcoming)?Z.payload?.upcoming:[]}}class gW{client;constructor($){this.client=new W1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let Z=await this.client.command("session.list",{limit:$});return Array.isArray(Z.payload?.sessions)?Z.payload.sessions:[]}subscribeUI($){return this.client.subscribe((Z)=>{switch(Z.event){case"ui.notify":$.onNotify?.(Z.payload);break;case"ui.show_window":$.onShowWindow?.(Z.payload);break;case"hub.client.registered":$.onClientRegistered?.(Z.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(Z.payload??{});break;case"session.created":$.onSessionCreated?.(Z.payload??{});break;case"session.updated":$.onSessionUpdated?.(Z.payload??{});break;case"session.detached":$.onSessionDetached?.(Z.payload??{});break}})}}import{normalizeProviderId as Vx}from"@cline/llms";var jU={};N(jU,{LocalRuntimeHost:()=>T1});import{readdirSync as eI}from"node:fs";import{homedir as $x}from"node:os";import{isAbsolute as Zx,join as kY,resolve as IY}from"node:path";import{captureSdkError as p2,createSessionId as Qx,isLikelyAuthError as Wx,normalizeUserInput as Jx}from"@cline/shared";import{setHomeDirIfUnset as Xx}from"@cline/shared/storage";var sV={};N(sV,{saveProviderOAuthCredentials:()=>W2,resolveProviderApiKeyFromSettings:()=>sW,loginAndSaveProviderOAuthCredentials:()=>X6,isOAuthProvider:()=>Q2,getProviderOAuthCredentialsFromSettings:()=>Y6,getProviderAuthStorageId:()=>aW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>U8,formatProviderOAuthApiKey:()=>oW});import{getClineEnvironmentConfig as nV}from"@cline/shared";_0();var SV={};N(SV,{startClineDeviceAuth:()=>lW,refreshClineToken:()=>JZ,loginClineOAuth:()=>t4,getValidClineCredentials:()=>e4,completeClineDeviceAuth:()=>pW});import{getClineEnvironmentConfig as mW}from"@cline/shared";var OV={};N(OV,{startLocalOAuthServer:()=>J1});function Ez(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function J1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",W=$.timeoutMs??300000,J=$.successHtml??Nz,X=Ez(),Y=!1,j=null,V=null,H=null,B=(F)=>{if(Y)return;Y=!0,X.resolve(F)},G=()=>{if(j)clearTimeout(j),j=null;let F=H;if(H=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:F})).catch(()=>{})},K=async()=>{return j=setTimeout(()=>{G(),B(null)},W),X.promise};for(let F of $.ports){let A=Z.createServer((f,D)=>{try{let U=new URL(f.url||"",`http://${Q}:${F}`);if(U.pathname!==$.callbackPath){D.statusCode=404,D.end("Not found");return}let T={url:U,code:U.searchParams.get("code")??void 0,state:U.searchParams.get("state")??void 0,provider:U.searchParams.get("provider")??void 0,error:U.searchParams.get("error")??void 0};if(T.error){D.statusCode=400,D.end(`Authentication failed: ${T.error}`),G(),B(T);return}if(!T.code){D.statusCode=400,D.end("Missing authorization code");return}if($.expectedState&&T.state!==$.expectedState){D.statusCode=400,D.end("State mismatch");return}D.statusCode=200,D.setHeader("Content-Type","text/html; charset=utf-8"),D.end(J),G(),B(T)}catch{D.statusCode=500,D.end("Internal error")}}),L=await new Promise((f)=>{let D=(U)=>{A.off("error",D),f({bound:!1,error:U})};A.once("error",D),A.listen(F,Q,()=>{A.off("error",D),V=A,f({bound:!0})})});if(L.error){if(L.error.code==="EADDRINUSE")continue;throw G(),L.error}if(L.bound){H=F;let f=`http://${Q}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:F,callbackUrl:f})).catch(()=>{});return{callbackUrl:f,waitForCallback:K,cancelWait:()=>{G(),B(null)},close:()=>{G(),B(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var Nz=`<!DOCTYPE html>
276
+ WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,Z,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,Z){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(Z,L0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,L0(),$)}}function _9($){return $?new Date($).getTime():void 0}function WL($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function L9($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof Z?.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:_9($.nextRunAt),lastRunAt:_9($.lastRunAt),createdBy:typeof Z?.__hubScheduleCreatedBy==="string"?Z.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:Z?.__hubRuntimeOptions&&typeof Z.__hubRuntimeOptions==="object"&&!Array.isArray(Z.__hubRuntimeOptions)?Z.__hubRuntimeOptions:void 0,metadata:WL($)}}function JL($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function AW($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:_9($.startedAt),endedAt:_9($.completedAt),status:JL($.status),errorMessage:$.error}}class Z8{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new x4({dbPath:$.dbPath}),this.materializer=new P4({store:this.store}),this.runner=new y4({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(HW($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return L9(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?L9(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>L9(Z))}updateSchedule($,Z){if(Z.cronPattern!==void 0)HW(Z.cronPattern);let Q=this.store.getHubSchedule($);if(!Q)return;let W=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot;if((Z.enabled??Q.enabled)&&!W)throw Error("workspaceRoot is required for enabled schedules");let X=this.store.updateHubSchedule($,{...Z,scheduleId:$});return X?L9(X):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;await this.runner.tick();let Q=this.store.getRun(Z.runId)??Z;return AW(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),AW(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((J)=>{let X=Z??this.store.getSpec(J.specId);if(!X||X.source!=="hub-schedule")return;return AW(J,X.externalId)}).filter((J)=>{if(!J)return!1;return!$.status||J.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,W=0,J=0,X;for(let Y of Z){if(Y.status==="success"||Y.status==="completed")Q+=1;if(!X&&Y.status!=="success"&&Y.status!=="completed")X=Y;if(Y.startedAt&&Y.endedAt)J+=Y.endedAt-Y.startedAt,W+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:W>0?J/W/1000:0,lastFailure:X}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let Z=this.store.getSpec($.specId);if(!Z||Z.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:Z.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:Z.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+Z.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let Z={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(Z).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,W)=>String(Q.nextRunAt).localeCompare(String(W.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:W})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:W}))}}u9();import{createSessionId as n_,isHubProtocolCompatible as a_,resolveClineBuildEnv as s_,resolveHubCommandTimeoutMs as o_}from"@cline/shared";var lj={};N(lj,{splitCoreSessionConfig:()=>i4,isSessionNotFoundError:()=>I1,SessionNotFoundError:()=>k1,SESSION_NOT_FOUND_ERROR_CODE:()=>s$});var s$="session_not_found";class k1 extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function I1($){return $ instanceof k1||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function i4($){let{hooks:Z,logger:Q,telemetry:W,extensionContext:J,extraTools:X,extensions:Y,onTeamEvent:j,onConsecutiveMistakeLimitReached:V,checkpoint:B,compaction:H,...G}=$,K={};if(Z)K.hooks=Z;if(Q)K.logger=Q;if(W)K.telemetry=W;if(J)K.extensionContext=J;if(X)K.extraTools=X;if(Y)K.extensions=Y;if(j)K.onTeamEvent=j;if(V)K.onConsecutiveMistakeLimitReached=V;if(B?.createCheckpoint)K.checkpoint=B;if(H?.compact)K.compaction=H;let F=Object.keys(K).length>0?K:void 0;return{config:{...G,...B?{checkpoint:{enabled:B.enabled}}:{},...H?{compaction:{enabled:H.enabled,strategy:H.strategy,thresholdRatio:H.thresholdRatio,reserveTokens:H.reserveTokens,preserveRecentTokens:H.preserveRecentTokens,maxInputTokens:H.maxInputTokens,summarizer:H.summarizer}}:{}},...F?{localRuntime:F}:{}}}import{spawn as R_}from"node:child_process";import{closeSync as E_,mkdirSync as N_,openSync as C_}from"node:fs";import{basename as w_,dirname as P_,join as S_}from"node:path";import{fileURLToPath as b_}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as y_,isHubDaemonProcess as JV,isHubProtocolCompatible as h_,resolveClineBuildEnv as XV,withResolvedClineBuildEnv as k_}from"@cline/shared";import{createHash as Z_,randomBytes as Q_}from"node:crypto";import{existsSync as W_}from"node:fs";import{chmod as J_,mkdir as _W,readFile as aj,rm as zW,writeFile as sj}from"node:fs/promises";import{dirname as oj,join as TW}from"node:path";import{resolveClineDataDir as o$,resolveClineDir as tj}from"@cline/shared/storage";var rj="0.0.57";var n4={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:rj,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var X_="CLINE_HUB_DISCOVERY_PATH",Y_="CLINE_HUB_BUILD_ID",ij=30000,j_=15000,V_=100;function B_($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function H_($){return Z_("sha256").update($).digest("hex").slice(0,12)}function G_($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(Z){return Z instanceof Error&&"code"in Z?String(Z.code)==="EPERM":!1}}function d9(){return Q_(32).toString("hex")}function K_($){return new Promise((Z)=>setTimeout(Z,$))}function F_($){return`${$}.lock`}async function A_($){try{let Z=JSON.parse(await aj(TW($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function nj($){await zW($,{recursive:!0,force:!0}).catch(()=>{return})}function l9(){return process.env[Y_]?.trim()||String(n4.version)}function x1($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${H_($)}`,Q=process.env[X_]?.trim()||TW(o$(),"locks","hub","owners",`${B_(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function ej($=`hub-${Date.now().toString(36)}`){return x1($)}async function K0($){try{let Z=JSON.parse(await aj($,"utf8"));if(typeof Z.hubId!=="string"||typeof Z.protocolVersion!=="string"||typeof Z.authToken!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string"||typeof Z.startedAt!=="string"||typeof Z.updatedAt!=="string")return;return{hubId:Z.hubId,protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,authToken:Z.authToken,host:Z.host,port:Z.port,url:Z.url,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:Z.startedAt,updatedAt:Z.updatedAt}}catch{return}}async function p9($,Z){await _W(oj($),{recursive:!0}),await zW($,{force:!0}).catch(()=>{return}),await sj($,`${JSON.stringify(Z,null,2)}
277
+ `,{encoding:"utf8",mode:384}),await J_($,384)}async function S0($){await zW($,{force:!0}).catch(()=>{return})}async function r9($,Z){let Q=F_($);await _W(oj(Q),{recursive:!0});let W=Date.now()+j_;while(!0)try{await _W(Q,{recursive:!1}),await sj(TW(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
278
+ `,"utf8");try{return await Z()}finally{await nj(Q)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let Y=await A_(Q),j=Y?Date.now()-Date.parse(Y.acquiredAt):ij+1;if(!Y||!G_(Y.pid)||j>ij){await nj(Q);continue}if(Date.now()>=W)throw Error(`Timed out waiting for hub startup lock ${Q}`);await K_(V_)}}async function g1($,Z){try{let Q=await fetch(Z?.authToken?OW($):i9($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let W=await Q.json();if(typeof W.protocolVersion!=="string"||typeof W.host!=="string"||typeof W.port!=="number"||typeof W.url!=="string")return;return{protocolVersion:W.protocolVersion,minClientProtocolVersion:typeof W.minClientProtocolVersion==="string"?W.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof W.maxClientProtocolVersion==="string"?W.maxClientProtocolVersion:void 0,capabilities:Array.isArray(W.capabilities)?W.capabilities.filter((J)=>typeof J==="string"):void 0,coreVersion:typeof W.coreVersion==="string"?W.coreVersion:void 0,buildId:typeof W.buildId==="string"?W.buildId:void 0,host:W.host,port:W.port,url:W.url,hubId:typeof W.hubId==="string"?W.hubId:void 0,authToken:typeof W.authToken==="string"?W.authToken:void 0,pid:typeof W.pid==="number"?W.pid:void 0,startedAt:typeof W.startedAt==="string"?W.startedAt:void 0,updatedAt:typeof W.updatedAt==="string"?W.updatedAt:void 0}}catch{return}}function Z1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function i9($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function OW($){let Z=new URL(i9($));return Z.pathname="/status",Z.toString()}function $V($){return W_($)}import{CLINE_HUB_DEV_PORT as f_,CLINE_HUB_PORT as U_,resolveClineBuildEnv as D_}from"@cline/shared";var L_="CLINE_HUB_HOST",__="CLINE_HUB_PORT",z_="CLINE_HUB_PATHNAME",qW="127.0.0.1",MW=U_,RW="/hub";function ZV($){return D_($)==="development"?f_:MW}function EW($={}){return($.env??process.env)[L_]?.trim()||qW}function V8($={}){let Q=($.env??process.env)[__]?.trim();if(!Q)return ZV($);let W=Number.parseInt(Q,10);if(!Number.isInteger(W)||W<1||W>65535)return ZV($);return W}function NW($={}){return($.env??process.env)[z_]?.trim()||RW}function K1($={},Z={}){return{host:$.host??EW(Z),port:$.port??V8(Z),pathname:$.pathname??NW(Z)}}import{join as T_}from"node:path";var O_="shared:cline",q_="CLINE_HUB_DISCOVERY_PATH",M_="hub-production";function QV($){let Z=C1($.trim());return x1(`workspace:${Z||$.trim()}`)}function Q1($=O_){return x1($)}function F1(){return{ownerId:M_,discoveryPath:process.env[q_]?.trim()||T_(o$(),"locks","hub","production.json")}}var I_=8000,x_=200,g_=3000,m_=100,v_=[100,250,500,1000,2000],c_="--cline-hub-daemon";function u_($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function d_(){try{let $=S_(o$(),"logs","hub-daemon.log");return N_(P_($),{recursive:!0}),{fd:C_($,"a"),logPath:$}}catch{return}}function YV(){return XV()==="production"?F1():Q1()}function t$($){return h_($).compatible}function WV($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function e$($,Z){try{return await g1($,{authToken:Z})}catch{return}}async function l_($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await e$($))?.url)return!0;await new Promise((J)=>setTimeout(J,m_))}return!1}async function n9($,Z){if(await s4($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await l_($.url,g_);return await S0(Z).catch(()=>{return}),Q}async function a4($,Z){if(t$($))return!0;return n9($,Z)}async function jV($){if(XV()!=="production")return;let Z=Q1();if(Z.discoveryPath===$.discoveryPath)return;let Q=await K0(Z.discoveryPath);if(Q?.url)await n9(Q,Z.discoveryPath);else await S0(Z.discoveryPath).catch(()=>{return})}function p_(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return b_(new URL(`./entry.${$}`,import.meta.url))}function r_($,Z){let Q=p_(),W=process.execPath?.trim();if(!W)throw Error("unable to resolve runtime executable for hub daemon");let J=w_(W).toLowerCase().includes("bun"),X=Q.startsWith("/$bunfs/"),Y=J&&Q.toLowerCase().endsWith(".ts"),j=X?[c_]:[...Y?["--conditions=development"]:[],Q];return{launcher:W,args:[...j,"--cwd",$,...u_(Z)],cwd:$,env:{...k_(process.env),CLINE_NO_INTERACTIVE:"1",[y_]:"1"}}}function i_($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Q="message"in $?$.message:void 0;return typeof Q==="string"&&Q.includes("ETXTBSY")}function CW($,Z={}){if(JV())return;let Q=r_($,Z),W=d_();try{R_(Q.launcher,Q.args,{detached:!0,stdio:W?["ignore",W.fd,W.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(W)E_(W.fd)}}async function B8($,Z={}){for(let Q=0;;Q++)try{CW($,Z);return}catch(W){let J=v_[Q];if(!i_(W)||J===void 0)throw W;await new Promise((X)=>setTimeout(X,J))}}function a9($,Z={}){if(JV())return;let Q=YV(),W=K1(Z),J=Z1(W.host,W.port,W.pathname),X=Z.allowPortFallback===!0&&W.port!==0;jV(Q).catch(()=>{return}).then(()=>K0(Q.discoveryPath)).then(async(Y)=>{let j=!1;if(Y?.url)if(!Y.authToken){if(j=!0,!await n9(Y,Q.discoveryPath)&&!X)return}else{let H=await e$(Y.url,Y.authToken);if(H?.url&&t$(H)&&await A1(H.url,{authToken:Y.authToken}))return;if(H?.url)await a4({...H,authToken:Y.authToken},Q.discoveryPath);else await S0(Q.discoveryPath).catch(()=>{return})}let V=await e$(J);if(V?.url){if(t$(V)){if(!X||!j)return}else if(!await a4({...V,authToken:void 0},Q.discoveryPath)&&!X)return}let B=X?{...W,port:0}:W;await B8($,B)}).catch(()=>{})}async function VV($,Z={}){let Q=YV(),W=Z.host!==void 0||Z.port!==void 0||Z.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=K1(Z),X=Z1(J.host,J.port,J.pathname),Y=(F)=>{if(!W)H$(F.url,F.authToken);return F};await jV(Q).catch(()=>{return});let j=await K0(Q.discoveryPath),V=!1;if(j?.url){let F=j.authToken;if(!F)V=!0,await n9(j,Q.discoveryPath);else{let A=await e$(j.url,F);if(A?.url&&t$(A)&&await A1(A.url,{authToken:F}))return Y({url:A.url,authToken:F});if(A?.url)await a4({...A,authToken:F},Q.discoveryPath);else await S0(Q.discoveryPath).catch(()=>{return})}}let B=await e$(X);if(B?.url){let F=WV(B,j,X);if(t$(B))throw Error(`A compatible Cline Hub is already running at ${X}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${V?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`);if(!await a4(F,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is already running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let G=Z.allowPortFallback===!0&&J.port!==0?{...J,port:0}:J;await B8($,G);let K=Date.now()+I_;while(Date.now()<K){let F=await K0(Q.discoveryPath);if(F?.url&&F.authToken){let L=await e$(F.url,F.authToken);if(L?.url&&t$(L)&&await A1(L.url,{authToken:F.authToken}))return Y({url:L.url,authToken:F.authToken})}let A=await e$(X);if(A?.url&&!t$(A)){let L=WV(A,F,X);if(!await a4(L,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is still running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((L)=>setTimeout(L,x_))}throw Error("Timed out waiting for detached hub startup.")}function s9(){return s_()==="production"?F1():Q1()}function t_(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function FV($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return FV($.data);return String($)}function e_($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function BV($){let Z=$,Q=e_(Z.reason);return new R0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:wW,{closeCode:Z.code,closeReason:Q||void 0})}function $z($,Z){if($ instanceof R0)return $;if($ instanceof Error)return new R0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new R0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new R0("hub_connect_failed",Q);let W=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new R0("hub_connect_failed",W?`Failed to connect to hub at ${Z.toString()} (${W} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var Zz=8000,Qz=200,HV="*",GV=8000,Wz="cline-hub-auth.",AV=new Map,fV=new Set,Jz=3000,Xz=3000,Yz=100,wW="Hub connection closed",jz=250,Vz=5000,KV=0.5;class R0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function bW($){return $ instanceof R0}class H8 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function o9($,Z){return $ instanceof H8&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function UV($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=yW($.toString());return Q?AV.get(Q):void 0}function Bz($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function yW($){if(!Bz($))return;let Z=new URL(G$($));return Z.search="",Z.hash="",Z.toString()}function PW($){let Z=yW($);return!!Z&&fV.has(Z)}function H$($,Z){let Q=yW($);if(Q){if(fV.add(Q),Z?.trim())AV.set(Q,Z)}return $}class W1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new R0("hub_connection_closed",wW);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),Z=this.options.authToken?.trim()||UV($);$.hash="";let W=new(t_())($.toString(),Z?[`${Wz}${Z}`]:void 0);this.socket=W;let J=!1;this.connectPromise=new Promise((X,Y)=>{let j=!1,V=setTimeout(()=>{if(j)return;j=!0,J=!0,this.lastCloseError=new R0("hub_connect_timeout",`Timed out connecting to hub after ${GV}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{W.close()}catch{}Y(this.lastCloseError)},GV);W.addEventListener("open",()=>{if(j)return;j=!0,clearTimeout(V),X()}),W.addEventListener("error",(B)=>{if(j)return;j=!0,clearTimeout(V),this.lastCloseError=$z(B,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)}),W.addEventListener("close",(B)=>{if(j)return;if(j=!0,clearTimeout(V),!J)this.lastCloseError=BV(B),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)})}),W.addEventListener("message",(X)=>{this.handleFrame(JSON.parse(FV(X)))}),W.addEventListener("close",(X)=>{if(this.socket!==W)return;if(!J)this.lastCloseError=BV(X),this.sawSocketClose=!0;this.registered=!1;for(let Y of this.pendingReplies.values())Y.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let X of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(X));this.reconnectAttempt=0}subscribe($,Z){let Q=Z?.sessionId?.trim()||void 0,W={listener:$,sessionId:Q};return this.listeners.add(W),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(W))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,W){let J=0,X=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,W)}catch(Y){if(!X||J>=1||!await this.recoverLocalHubTransport(Y))throw Y;J+=1}}async commandOnce($,Z,Q,W){await this.connect();let J=n_("hubreq_"),X=o_($,W?.timeoutMs),Y=new Promise((V,B)=>{let H=X===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;B(new H8($,"hub_command_timeout",`Hub command ${$} timed out after ${X}ms (hub=${this.currentUrl}, requestId=${J}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},X);this.pendingReplies.set(J,{resolve:(G)=>{if(H)clearTimeout(H);V(G)},reject:(G)=>{if(H)clearTimeout(H);B(G)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:J,clientId:this.clientId,sessionId:Q,timeoutMs:X,payload:Z}})}catch(V){throw this.pendingReplies.delete(J),V}let j=await Y;if(!j.ok){if(j.error?.code===s$){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new k1(V,j.error.message)}throw new H8($,j.error?.code,j.error?.message??`Hub command ${$} failed`)}return j}async recoverLocalHubTransport($){if(!PW(this.currentUrl)||!bW($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await $2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!Z)return!1;return this.currentUrl=Z,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(jz*2**this.reconnectAttempt,Vz),Z=Math.round($*(1-KV)+Math.random()*$*KV);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},Z)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!PW(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await $2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if($){this.currentUrl=$,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let $=this.socket;if(this.closedByClient=!0,this.clearReconnectTimer(),this.registered=!1,!$)return;this.lastCloseError=new R0("hub_connection_closed",wW),this.sawSocketClose=!1;for(let Z of this.pendingReplies.values())Z.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new R0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,Z){this.sendFrame({kind:$,clientId:this.clientId,...Z?{sessionId:Z}:{}})}adjustSubscriptionCount($,Z){let Q=this.subscriptionKeyForSessionId($),W=(this.subscriptionCounts.get(Q)??0)+Z;if(W<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(Z<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,W),Z>0&&W===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??HV}subscriptionSessionIdFromKey($){return $===HV?void 0:$}handleFrame($){switch($.kind){case"reply":{let Z=$.envelope.requestId;if(!Z)return;let Q=this.pendingReplies.get(Z);if(!Q)return;this.pendingReplies.delete(Z),Q.resolve($.envelope);return}case"event":for(let Z of this.listeners){if(Z.sessionId&&Z.sessionId!==$.envelope.sessionId?.trim())continue;Z.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function G$($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function A1($,Z){let Q=new W1({url:$,authToken:Z?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function SW($,Z){let Q=G$($),W=await g1(Q,{authToken:Z?.authToken});if(!W)return{status:"unreachable",url:Q};if(!a_(W).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await A1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function Hz($){let Z=Date.now()+Zz;while(Date.now()<Z){let Q=await K0($.discoveryPath);if(Q?.url){let W=await SW(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(W.status==="compatible")return H$(W.url,Q.authToken)}await new Promise((W)=>setTimeout(W,Qz))}return}async function Gz($){let Z=Date.now()+Xz;while(Date.now()<Z){if(!(await g1($).catch(()=>{return}))?.url)return!0;await new Promise((W)=>setTimeout(W,Yz))}return!1}function Kz($,Z){try{return G$($)===G$(Z)}catch{return!1}}function Fz($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let W=Q;if(W.status==="running"||W.status==="idle"||W.status==="pending")return!0;return Array.isArray(W.participants)&&W.participants.length>0})}async function Az($,Z,Q){let W=new W1({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let J=await W.command("session.list",{limit:500},void 0,{timeoutMs:Jz});return!Fz(J.payload)}catch{return!1}finally{await W.dispose().catch(()=>{return})}}async function o4($={}){if($.endpoint?.trim()){let J=await SW($.endpoint);return J.status==="compatible"?J.url:void 0}let Z=s9(),Q=await K0(Z.discoveryPath);if(!Q?.url)return;let W=await SW(Q.url,{authToken:Q.authToken});if(W.status==="compatible")return H$(W.url,Q.authToken);if(W.status==="protocol_mismatch")await S0(Z.discoveryPath).catch(()=>{return});return}async function $2($={}){let Z=await o4($);if(Z&&await A1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;let Q=s9();return await B8($.workspaceRoot??process.cwd()),await Hz(Q)}async function s4($,Z){let Q=new URL($),W=Z?.trim()||UV(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:W?{authorization:`Bearer ${W}`}:void 0})).ok}async function hW($=s9()){let Z=await K0($.discoveryPath);if(!Z?.url)return!1;try{if(await s4(Z.url,Z.authToken))return!0}catch{}return!1}async function t9($){if(!PW($.url))return;let Z=s9(),Q=await K0(Z.discoveryPath);if(!Q?.url||!Kz(Q.url,$.url))return;if(!await Az(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await hW())return;if(!await Gz(Q.url))return;return await S0(Z.discoveryPath).catch(()=>{return}),await $2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{resolveClineBuildEnv as fz}from"@cline/shared";function Uz($,Z){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Q?`Failed to connect to hub at ${Z} (${Q} event before socket open).`:`Failed to connect to hub at ${Z}.`)}var Dz="cline-hub-auth.";function Lz($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function _z($,Z){let Q=new URL($),W=new URL(Z);return Q.search="",Q.hash="",W.search="",W.hash="",Q.toString()===W.toString()}function DV(){return fz()==="production"?F1():Q1()}async function zz($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=DV(),W=await K0(Q.discoveryPath);if(W?.url&&_z($.toString(),W.url))return W.authToken;return}async function kW($={}){let Z=K1($);if(!Lz($)){let Q=DV(),W=await K0(Q.discoveryPath);if(W?.url)return W.url}return Z1(Z.host,Z.port,Z.pathname)}async function e9($){return await new Promise((Z,Q)=>{(async()=>{let W=new URL($),J=await zz(W);W.hash="";let X=new WebSocket(W.toString(),J?[`${Dz}${J}`]:void 0),Y=new Map,j=0;X.addEventListener("open",()=>{Z({send(V){let B=V.requestId??`hub-client-${++j}`;return new Promise((H,G)=>{Y.set(B,{resolve:H,reject:G});let K={kind:"command",envelope:{...V,requestId:B}};X.send(JSON.stringify(K))})},close(){X.close()}})}),X.addEventListener("message",(V)=>{let B=JSON.parse(String(V.data));if(B.kind==="reply"&&B.envelope.requestId){let H=Y.get(B.envelope.requestId);if(H)Y.delete(B.envelope.requestId),H.resolve(B.envelope)}}),X.addEventListener("close",()=>{for(let V of Y.values())V.reject(Error("Hub connection closed"));Y.clear()}),X.addEventListener("error",(V)=>{Q(Uz(V,$))})})().catch(Q)})}async function LV($){try{return(await e9($)).close(),!0}catch{return!1}}async function _V($,Z){let Q=await kW($),W=await e9(Q);try{return await W.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{W.close()}}function IW($){return $?JSON.parse(JSON.stringify($)):{}}function $Z($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?IW(Z.metadata):void 0;return{sessionId:typeof Z.sessionId==="string"?Z.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function zV($,Z){return $.error?.message??`hub command failed: ${Z}`}function Tz($){let Z=IW($);if(typeof Z.error==="string"&&Z.error.trim())return{...Z,error:Z.error.trim()};let Q=Z.result&&typeof Z.result==="object"?Z.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...Z,error:Q.text.trim()};let W=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof W?.message==="string"&&W.message.trim())return{...Z,error:W.message.trim()};return Z}function TV($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function Oz($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error("hub checkpoint restore returned no checkpoint");let Q=Z;if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Q}function qz($){let Z=IW($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||TV(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||TV(Z)||"",eventType:"schedule.execution.failed",payload:Z};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:Z};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:Z};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:Z};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:Z};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:Z};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:Z};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:Z};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:Z};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:Tz($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class xW{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new W1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-session-client",displayName:$.displayName??"hub session client",workspaceRoot:$.workspaceRoot,cwd:$.cwd})}async ensureMetadataApplied(){if(this.metadataApplied||!this.options.metadata){if(!this.options.metadata)await this.client.connect();return}await this.client.connect(),await this.client.command("client.update",{metadata:this.options.metadata}),this.metadataApplied=!0}async connect(){await this.ensureMetadataApplied()}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession($){await this.ensureMetadataApplied();let Z=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),Q=$Z(Z.payload);if(!Q?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}}}async sendRuntimeSession($,Z,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:Z.prompt,mode:Z.config.mode,attachments:Z.attachments,delivery:Z.delivery,timeoutSeconds:Z.config.timeoutSeconds},$,Q)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(I1(Q))return;throw Q}return $Z(Z.payload)}async readMessages($){let Z=$.trim();if(!Z)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw Error(zV(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async restore($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let W=$.config,J=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.workspaceRoot,cwd:W.cwd,sessionConfig:{providerId:W.provider,modelId:W.model,apiKey:W.apiKey,cwd:W.cwd??W.workspaceRoot,workspaceRoot:W.workspaceRoot,systemPrompt:W.systemPrompt??"",mode:W.mode??"act",rules:W.rules,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawnAgent:W.enableSpawn!==!1,enableAgentTeams:W.enableTeams!==!1,disableMcpSettingsTools:W.disableMcpSettingsTools,missionLogIntervalSteps:W.missionStepInterval,missionLogIntervalMs:W.missionTimeIntervalMs},metadata:{source:W.source??"cli",provider:W.provider,model:W.model,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,prompt:void 0,interactive:W.interactive!==!1},runtimeOptions:{mode:W.mode,systemPrompt:W.systemPrompt,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,autoApproveTools:W.autoApproveTools,configExtensions:W.configExtensions},modelSelection:{provider:W.provider,model:W.model,apiKey:W.apiKey},toolPolicies:W.toolPolicies}:{}},Z);if(!J.ok)throw Error(zV(J,"session.restore"));let X=$Z(J.payload);if(Q&&!X?.sessionId)throw Error("hub checkpoint restore returned no session id");let Y=Array.isArray(J.payload?.messages)?J.payload.messages:void 0,j=Oz(J.payload);return{sessionId:X?.sessionId,startResult:X?.sessionId?{sessionId:X.sessionId,manifestPath:"",messagesPath:X.messagesPath??""}:void 0,...Y?{messages:Y}:{},checkpoint:j}}async listSessions($){await this.ensureMetadataApplied();let Z=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(Z.payload?.sessions)?Z.payload?.sessions:[]).map((W)=>$Z({session:W})).filter((W)=>Boolean(W?.sessionId))}async deleteSession($,Z=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:Z})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,Z){let Q=new Set(($.sessionIds??[]).map((J)=>J.trim()).filter(Boolean)),W=this.client.subscribe((J)=>{let X=qz(J);if(!X)return;if(Q.size>0&&!Q.has(X.sessionId))return;Z.onEvent?.(X)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),W}streamTeamProgress($,Z){let Q=this.client.subscribe((W)=>{if(W.event!=="team.progress"||!W.payload)return;Z.onProjection?.(W.payload)});return this.ensureMetadataApplied().catch((W)=>{Z.onError?.(W instanceof Error?W:Error(String(W)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list");return Array.isArray(Z.payload?.schedules)?Z.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,Z){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...Z})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,Z){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:Z});return Array.isArray(Q.payload?.executions)?Q.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(Z.payload?.upcoming)?Z.payload?.upcoming:[]}}class gW{client;constructor($){this.client=new W1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let Z=await this.client.command("session.list",{limit:$});return Array.isArray(Z.payload?.sessions)?Z.payload.sessions:[]}subscribeUI($){return this.client.subscribe((Z)=>{switch(Z.event){case"ui.notify":$.onNotify?.(Z.payload);break;case"ui.show_window":$.onShowWindow?.(Z.payload);break;case"hub.client.registered":$.onClientRegistered?.(Z.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(Z.payload??{});break;case"session.created":$.onSessionCreated?.(Z.payload??{});break;case"session.updated":$.onSessionUpdated?.(Z.payload??{});break;case"session.detached":$.onSessionDetached?.(Z.payload??{});break}})}}import{normalizeProviderId as Xx}from"@cline/llms";var XU={};N(XU,{LocalRuntimeHost:()=>T1});import{readdirSync as sI}from"node:fs";import{homedir as oI}from"node:os";import{isAbsolute as tI,join as kY,resolve as IY}from"node:path";import{captureSdkError as p2,createSessionId as eI,isLikelyAuthError as $x,normalizeUserInput as Zx}from"@cline/shared";import{setHomeDirIfUnset as Qx}from"@cline/shared/storage";var sV={};N(sV,{saveProviderOAuthCredentials:()=>W2,resolveProviderApiKeyFromSettings:()=>sW,loginAndSaveProviderOAuthCredentials:()=>X6,isOAuthProvider:()=>Q2,getProviderOAuthCredentialsFromSettings:()=>Y6,getProviderAuthStorageId:()=>aW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>U8,formatProviderOAuthApiKey:()=>oW});import{getClineEnvironmentConfig as nV}from"@cline/shared";_0();var SV={};N(SV,{startClineDeviceAuth:()=>lW,refreshClineToken:()=>JZ,loginClineOAuth:()=>t4,getValidClineCredentials:()=>e4,completeClineDeviceAuth:()=>pW});import{getClineEnvironmentConfig as mW}from"@cline/shared";var OV={};N(OV,{startLocalOAuthServer:()=>J1});function Mz(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function J1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",W=$.timeoutMs??300000,J=$.successHtml??Rz,X=Mz(),Y=!1,j=null,V=null,B=null,H=(F)=>{if(Y)return;Y=!0,X.resolve(F)},G=()=>{if(j)clearTimeout(j),j=null;let F=B;if(B=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:F})).catch(()=>{})},K=async()=>{return j=setTimeout(()=>{G(),H(null)},W),X.promise};for(let F of $.ports){let A=Z.createServer((f,D)=>{try{let U=new URL(f.url||"",`http://${Q}:${F}`);if(U.pathname!==$.callbackPath){D.statusCode=404,D.end("Not found");return}let T={url:U,code:U.searchParams.get("code")??void 0,state:U.searchParams.get("state")??void 0,provider:U.searchParams.get("provider")??void 0,error:U.searchParams.get("error")??void 0};if(T.error){D.statusCode=400,D.end(`Authentication failed: ${T.error}`),G(),H(T);return}if(!T.code){D.statusCode=400,D.end("Missing authorization code");return}if($.expectedState&&T.state!==$.expectedState){D.statusCode=400,D.end("State mismatch");return}D.statusCode=200,D.setHeader("Content-Type","text/html; charset=utf-8"),D.end(J),G(),H(T)}catch{D.statusCode=500,D.end("Internal error")}}),L=await new Promise((f)=>{let D=(U)=>{A.off("error",D),f({bound:!1,error:U})};A.once("error",D),A.listen(F,Q,()=>{A.off("error",D),V=A,f({bound:!0})})});if(L.error){if(L.error.code==="EADDRINUSE")continue;throw G(),L.error}if(L.bound){B=F;let f=`http://${Q}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:F,callbackUrl:f})).catch(()=>{});return{callbackUrl:f,waitForCallback:K,cancelWait:()=>{G(),H(null)},close:()=>{G(),H(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var Rz=`<!DOCTYPE html>
279
279
  <html lang="en">
280
280
  <head>
281
281
  <meta charset="utf-8">
@@ -316,22 +316,22 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
316
316
  </div>
317
317
  <script>setTimeout(() => window.close(), 3000);</script>
318
318
  </body>
319
- </html>`;function qV($){let Z="";for(let Q=0;Q<$.length;Q+=1)Z+=String.fromCharCode($[Q]??0);return btoa(Z).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function wz($){let Q=new TextEncoder().encode($),W=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(W)}function Cz($=32){let Z=new Uint8Array($);return crypto.getRandomValues(Z),qV(Z)}async function ZZ(){let $=Cz(),Z=qV(await wz($));return{verifier:$,challenge:Z}}function QZ($){return $.endsWith("/")?$.slice(0,-1):$}function Z2($,Z){return new URL(Z,`${QZ($)}/`).toString()}function G8($,Z={}){let Q=$.trim();if(!Q)return{};try{let W=new URL(Q);return{code:W.searchParams.get("code")??void 0,state:W.searchParams.get("state")??void 0,provider:Z.includeProvider?W.searchParams.get("provider")??void 0:void 0}}catch{}if(Z.allowHashCodeState&&Q.includes("#")){let[W,J]=Q.split("#",2);return{code:W||void 0,state:J||void 0}}if(Q.includes("code=")){let W=new URLSearchParams(Q);return{code:W.get("code")??void 0,state:W.get("state")??void 0,provider:Z.includeProvider?W.get("provider")??void 0:void 0}}return{code:Q}}function Pz($){if(typeof atob==="function")try{return atob($)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from($,"base64").toString("utf8")}catch{return null}return null}function E0($){if(!$)return null;try{let Z=$.split(".");if(Z.length!==3)return null;let Q=Z[1];if(!Q)return null;let W=Q.replace(/-/g,"+").replace(/_/g,"/"),J=W.padEnd(W.length+(4-W.length%4)%4,"="),X=Pz(J);if(!X)return null;return JSON.parse(X)}catch{return null}}function K8($){try{let Z=JSON.parse($),Q=Z.error,W=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,J=typeof Z.error_description==="string"?Z.error_description:typeof Z.message==="string"?Z.message:Q&&typeof Q==="object"&&typeof Q.message==="string"?Q.message:void 0;return{code:W,message:J}}catch{return{}}}function F8($,Z){return Date.now()>=$.expires-Z}async function A8($){if(!$.onManualCodeInput){let X=await $.waitForCallback();return{code:X?.code,state:X?.state,provider:X?.provider,error:X?.error}}let Z,Q,W=$.onManualCodeInput().then((X)=>{Z=X,$.cancelWait()}).catch((X)=>{Q=X instanceof Error?X:Error(String(X)),$.cancelWait()}),J=await $.waitForCallback();if(Q)throw Q;if(J?.code||J?.error)return{code:J.code,state:J.state,provider:J.provider,error:J.error};if(Z)return G8(Z,$.parseOptions);if(await W,Q)throw Q;if(Z)return G8(Z,$.parseOptions);return{}}var WZ={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},NV={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},vW="https://api.workos.com",Sz="/auth",MV=Array.from({length:11},($,Z)=>48801+Z),bz=300000,yz=30000,f8=30000,hz=300,kz=5;class K$ extends Error{status;errorCode;constructor($,Z){super($);this.name="ClineOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function Iz($){let Z=Date.parse($);if(Number.isNaN(Z))throw Error(`Invalid expiresAt value: ${$}`);return Z}function cW($,Z,Q={}){let W=$.userInfo.clineUserId??Q.accountId,J=$.refreshToken??Q.refresh;if(!J)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:J,expires:Iz($.expiresAt),accountId:W??void 0,email:$.userInfo.email||Q.email,metadata:{provider:Z,tokenType:$.tokenType,userInfo:$.userInfo}}}async function uW($){if(!$)return{};return typeof $==="function"?await $():$}function RV($,Z){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return Z;return Math.floor($)}async function EV($){await new Promise((Z)=>setTimeout(Z,$))}function dW($,Z){if(!$.success||!$.data?.accessToken)throw Error(Z);return $.data}async function wV($,Z){let Q=await fetch(Z2(vW,NV.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(Z?.requestTimeoutMs??f8)}),W=await Q.json().catch(()=>({}));if(!Q.ok)throw new K$(`Device authorization failed: ${Q.status}${W.error_description?` - ${W.error_description}`:""}`,{status:Q.status,errorCode:W.error});if(!W.device_code||!W.user_code||!W.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:W.device_code,userCode:W.user_code,verificationUri:W.verification_uri,verificationUriComplete:W.verification_uri_complete,expiresInSeconds:RV(W.expires_in,hz),pollIntervalSeconds:RV(W.interval,kz)}}async function CV($){let Z=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=Z){let W=await fetch(Z2($.workosApiBaseUrl,NV.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),J=await W.json().catch(()=>({}));if(W.ok){if(!J.access_token||!J.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:J.access_token,refreshToken:J.refresh_token,tokenType:J.token_type??"Bearer"}}switch(J.error){case"authorization_pending":{await EV(Q*1000);break}case"slow_down":{Q+=1,await EV(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new K$(J.error_description||"WorkOS authorization failed",{status:W.status,errorCode:J.error});default:throw new K$(`WorkOS token polling failed: ${W.status}${J.error_description?` - ${J.error_description}`:""}`,{status:W.status,errorCode:J.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function PV($,Z,Q){let W={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(Z2(Z.apiBaseUrl,WZ.register),{method:"POST",headers:{"Content-Type":"application/json",...await uW(Z.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Z.requestTimeoutMs??f8)});if(!J.ok){let Y=await J.text().catch(()=>""),j=K8(Y);throw new K$(`Token registration failed: ${J.status}${j.message?` - ${j.message}`:""}`,{status:J.status,errorCode:j.code})}let X=await J.json();return cW(dW(X,"Invalid token exchange response"),Q??Z.provider)}async function xz($,Z,Q,W){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:Z,provider:W??Q.provider},X=await fetch(Z2(Q.apiBaseUrl,WZ.token),{method:"POST",headers:{"Content-Type":"application/json",...await uW(Q.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Q.requestTimeoutMs??f8)});if(!X.ok){let j=await X.text().catch(()=>""),V=K8(j);throw new K$(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let Y=await X.json();return cW(dW(Y,"Invalid token exchange response"),W??Q.provider)}async function t4($){C1($.telemetry,$.provider??"cline");let Z=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:MV,W=$.callbackPath??Sz,J=Z?null:await J1({ports:Q,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=J?.callbackUrl||`http://127.0.0.1:${Q[0]??MV[0]}${W}`;try{let Y;if(Z){let j=mW().workOsClientId,V=await wV(j,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let H=await CV({clientId:j,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??f8,workosApiBaseUrl:vW,onProgress:$.callbacks.onProgress});Y=await PV(H,$,$.provider)}else{let j=new URL(Z2($.apiBaseUrl,WZ.authorize));j.searchParams.set("client_type","extension"),j.searchParams.set("callback_url",X),j.searchParams.set("redirect_uri",X),$.callbacks.onAuth({url:j.toString(),instructions:"Continue the authentication process in your browser."});let V,H=$.provider,B=await A8({waitForCallback:J?.waitForCallback??(async()=>null),cancelWait:J?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(B.error)throw Error(`OAuth error: ${B.error}`);if(V=B.code,H=B.provider??H,!V){let G=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=G8(G,{includeProvider:!0});V=K.code,H=K.provider??H}if(!V)throw Error("Missing authorization code");Y=await xz(V,X,$,H)}return P1($.telemetry,$.provider??"cline"),b1($.telemetry,{id:Y.accountId,email:Y.email,provider:$.provider??"cline"}),Y}catch(Y){throw S1($.telemetry,$.provider??"cline",Y instanceof Error?Y.message:String(Y)),Y}finally{J?.close()}}async function lW($){return await wV(mW().workOsClientId,$)}async function pW($){let Z=$.provider??"cline";C1($.telemetry,Z);try{let Q=await CV({clientId:mW().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??f8,workosApiBaseUrl:vW}),W=await PV(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return P1($.telemetry,Z),b1($.telemetry,{id:W.accountId,email:W.email,provider:Z}),W}catch(Q){throw S1($.telemetry,Z,Q instanceof Error?Q.message:String(Q)),Q}}async function JZ($,Z){let Q=await fetch(Z2(Z.apiBaseUrl,WZ.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await uW(Z.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(Z.requestTimeoutMs??f8)});if(!Q.ok){let X=await Q.text().catch(()=>""),Y=K8(X);throw new K$(`Token refresh failed: ${Q.status}${Y.message?` - ${Y.message}`:""}`,{status:Q.status,errorCode:Y.code})}let W=await Q.json(),J=$.metadata?.provider??Z.provider;return cW(dW(W,"Invalid token refresh response"),J,$)}async function e4($,Z,Q){if(!$)return null;let W=Q?.refreshBufferMs??bz,J=Q?.retryableTokenGraceMs??yz;if(Q?.forceRefresh!==!0&&!F8($,W))return $;try{return await JZ($,Z)}catch(Y){if(Y instanceof K$&&Y.isLikelyInvalidGrant())return V$(Z.telemetry,Z.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}_0();var yV={};N(yV,{refreshOpenAICodexToken:()=>YZ,loginOpenAICodex:()=>$6,getValidOpenAICodexCredentials:()=>Z6,OPENAI_CODEX_OAUTH_CONFIG:()=>X0});import{nanoid as gz}from"nanoid";var X0={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class XZ extends Error{status;errorCode;constructor($,Z){super($);this.name="OpenAICodexOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function mz($,Z,Q=X0.redirectUri){let W=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:X0.clientId,code:$,code_verifier:Z,redirect_uri:Q}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!W.ok)return{type:"failed"};let J=await W.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}async function vz($){try{let Z=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:X0.clientId}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!Z.ok){let W=await Z.text().catch(()=>""),J=K8(W);throw new XZ(`Token refresh failed: ${Z.status}${J.message?` - ${J.message}`:""}`,{status:Z.status,errorCode:J.code})}let Q=await Z.json();if(!Q.access_token||!Q.refresh_token||typeof Q.expires_in!=="number")return{type:"failed"};return{type:"success",access:Q.access_token,refresh:Q.refresh_token,expires:Date.now()+Q.expires_in*1000,email:Q.email,idToken:Q.id_token}}catch(Z){if(Z instanceof XZ)throw Z;return{type:"failed"}}}async function cz($="pi"){let{verifier:Z,challenge:Q}=await ZZ(),W=gz(32),J=new URL(X0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",X0.clientId),J.searchParams.set("redirect_uri",X0.redirectUri),J.searchParams.set("scope",X0.scopes),J.searchParams.set("code_challenge",Q),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("state",W),J.searchParams.set("id_token_add_organizations","true"),J.searchParams.set("codex_cli_simplified_flow","true"),J.searchParams.set("originator",$),{verifier:Z,state:W,url:J.toString()}}function uz(){try{let $=new URL(X0.redirectUri),Z=$.port.length>0?Number.parseInt($.port,10):X0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(Z)?Z:X0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:X0.callbackPort,callbackPath:"/auth/callback",redirectUri:X0.redirectUri}}}function dz($,Z){let Q=Z?E0(Z):E0($),W=Q?Q:E0($),X=W?.[X0.jwtClaimPath]?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;let Y=W?.organizations;if(Array.isArray(Y)&&Y.length>0){let V=Y[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let j=W?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return null}function bV($,Z){let Q=dz($.access,$.idToken)??Z?.accountId;if(!Q)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||Z?.refresh||"",expires:$.expires,accountId:Q,email:$.email??Z?.email,metadata:{...Z?.metadata??{},provider:"openai-codex"}}}async function $6($){C1($.telemetry,"openai-codex");let Z=uz(),{verifier:Q,state:W,url:J}=await cz($.originator),X=await J1({host:Z.host,ports:[Z.port],callbackPath:Z.callbackPath,expectedState:W});$.onAuth({url:J,instructions:"Continue the authentication process in your browser."});let Y;try{let j=await A8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(j.state&&j.state!==W)throw Error("State mismatch");if(Y=j.code,!Y){let B=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=G8(B,{allowHashCodeState:!0});if(G.state&&G.state!==W)throw Error("State mismatch");Y=G.code}if(!Y)throw Error("Missing authorization code");let V=await mz(Y,Q,Z.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let H=bV(V);return P1($.telemetry,"openai-codex"),b1($.telemetry,{id:H.accountId,email:H.email,provider:"openai-codex"}),H}catch(j){throw S1($.telemetry,"openai-codex",j instanceof Error?j.message:String(j)),j}finally{X.close()}}async function YZ($,Z){let Q=await vz($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let W=bV(Q,Z);if(!W.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return W}async function Z6($,Z){if(!$)return null;let Q=Z?.refreshBufferMs??X0.refreshBufferMs,W=Z?.retryableTokenGraceMs??X0.retryableTokenGraceMs;if(Z?.forceRefresh!==!0&&!F8($,Q))return $;try{return await YZ($.refresh,$)}catch(X){if(X instanceof XZ&&X.isLikelyInvalidGrant())return V$(Z?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}_0();var iV={};N(iV,{refreshOcaToken:()=>BZ,loginOcaOAuth:()=>W6,getValidOcaCredentials:()=>J6,OCI_HEADER_OPC_REQUEST_ID:()=>lz,DEFAULT_INTERNAL_OCA_BASE_URL:()=>jZ,DEFAULT_INTERNAL_IDCS_URL:()=>IV,DEFAULT_INTERNAL_IDCS_SCOPES:()=>xV,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>kV,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>VZ,DEFAULT_EXTERNAL_IDCS_URL:()=>mV,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>vV,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>gV});import{nanoid as hV}from"nanoid";class rW{ttlMs;maxEntries;entries=new Map;constructor($,Z){this.ttlMs=$;this.maxEntries=Z}get($,Z=Date.now()){this.pruneExpired(Z);let Q=this.entries.get($);if(!Q)return;return this.entries.delete($),this.entries.set($,Q),Q.value}set($,Z,Q=Date.now(),W=this.ttlMs){this.pruneExpired(Q),this.entries.delete($);while(this.entries.size>=this.maxEntries){let J=this.entries.keys().next().value;if(J===void 0)break;this.entries.delete(J)}this.entries.set($,{value:Z,expiresAt:Q+W})}pruneExpired($){for(let[Z,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(Z)}}var kV="a8331954c0cf48ba99b5dd223a14c6ea",IV="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",xV="openid offline_access",jZ="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",gV="c1aba3deed5740659981a752714eba33",mV="https://login-ext.identity.oraclecloud.com",vV="openid offline_access",VZ="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",lz="opc-request-id",pz="/auth/oca",rz=Array.from({length:11},($,Z)=>48801+Z),iz=300000,nz=30000,cV=30000,az=600000;class HZ extends Error{status;errorCode;constructor($,Z){super($);this.name="OcaOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var F$={internal:{clientId:kV,idcsUrl:IV,scopes:xV,baseUrl:jZ},external:{clientId:gV,idcsUrl:mV,scopes:vV,baseUrl:VZ}},Q6=new Map,sz=86400000,oz=300000,tz=32,iW=new rW(sz,tz);function uV($){if(typeof $==="function")return $();return $??"internal"}function dV($){return{internal:{clientId:$?.internal?.clientId??F$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??F$.internal.idcsUrl,scopes:$?.internal?.scopes??F$.internal.scopes,baseUrl:$?.internal?.baseUrl??F$.internal.baseUrl},external:{clientId:$?.external?.clientId??F$.external.clientId,idcsUrl:$?.external?.idcsUrl??F$.external.idcsUrl,scopes:$?.external?.scopes??F$.external.scopes,baseUrl:$?.external?.baseUrl??F$.external.baseUrl}}}function ez($=Date.now()){let Z=$-az;for(let[Q,W]of Q6.entries())if(W.createdAt<Z)Q6.delete(Q)}function $T($,Z,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=E0(Z)?.exp;if(typeof J==="number"&&J>0)return J*1000;let Y=E0(Q)?.exp;if(typeof Y==="number"&&Y>0)return Y*1000;return Date.now()+3600000}function lV($,Z,Q){let W=$.access_token;if(!W)throw Error("Token response did not include an access token");let J=$.refresh_token??Q?.refresh;if(!J)throw Error("Token response did not include a refresh token");let X=E0($.id_token),Y=E0(W),j=X?.sub??Y?.sub,V=X?.email??Y?.email;return{access:W,refresh:J,expires:$T($,W,$.id_token),accountId:j??Q?.accountId,email:V??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:Z,subject:j,idToken:$.id_token}}}async function pV($,Z){let Q=QZ($),W=iW.get(Q);if(W)return W;let J=`${Q}/.well-known/openid-configuration`,X=await fetch(J,{method:"GET",signal:AbortSignal.timeout(Z)});if(!X.ok){let V=`${Q}/oauth2/v1/token`;return iW.set(Q,V,Date.now(),oz),V}let j=(await X.json()).token_endpoint||`${Q}/oauth2/v1/token`;return iW.set(Q,j),j}function rV($){return{code:$.error,message:$.error_description}}async function ZT($){let Z=Q6.get($.state);if(!Z)throw Error("No PKCE verifier found for this state");Q6.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,W=await pV(Q.idcsUrl,$.requestTimeoutMs),J=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:Z.redirectUri,client_id:Q.clientId,code_verifier:Z.verifier}),X=await fetch(W,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:J,signal:AbortSignal.timeout($.requestTimeoutMs)}),Y=await X.json();if(!X.ok){let V=rV(Y);throw new HZ(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let j=E0(Y.id_token);if(!Y.id_token||!j)throw Error("No ID token received from OCA");if(j.nonce!==Z.nonce)throw Error("OIDC nonce verification failed");return lV(Y,$.mode)}function QT($){let Z=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${QZ(Z.idcsUrl)}/oauth2/v1/authorize`);return Q.searchParams.set("client_id",Z.clientId),Q.searchParams.set("response_type","code"),Q.searchParams.set("scope",Z.scopes),Q.searchParams.set("code_challenge",$.challenge),Q.searchParams.set("code_challenge_method","S256"),Q.searchParams.set("redirect_uri",$.callbackUrl),Q.searchParams.set("state",$.state),Q.searchParams.set("nonce",$.nonce),Q.toString()}async function W6($){C1($.telemetry,"oca");let Z=dV($.config),Q=uV($.mode),W=$.callbackPorts?.length?$.callbackPorts:rz,J=$.callbackPath??pz,X=$.requestTimeoutMs??cV,Y=await J1({ports:W,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=Y.callbackUrl;if(!j)throw Error("Unable to bind local OAuth callback server");let V=hV(16),H=hV(16),{verifier:B,challenge:G}=await ZZ();ez(),Q6.set(V,{verifier:B,nonce:H,mode:Q,redirectUri:j,createdAt:Date.now()});let K=QT({callbackUrl:j,mode:Q,state:V,nonce:H,challenge:G,config:Z});$.callbacks.onAuth({url:K,instructions:"Continue the authentication process in your browser."});try{let F=await A8({waitForCallback:Y.waitForCallback,cancelWait:Y.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),A=F.code,L=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!A){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!L||L!==V)throw Error("State mismatch");let f=await ZT({code:A,state:L,mode:Q,config:Z,requestTimeoutMs:X});return P1($.telemetry,"oca"),b1($.telemetry,{id:f.accountId,email:f.email,provider:"oca"}),f}catch(F){throw S1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{Y.close()}}async function BZ($,Z={}){let Q=dV(Z.config),W=Z.requestTimeoutMs??cV,J=$.metadata?.mode,X=J==="internal"||J==="external"?J:uV(Z.mode),Y=X==="external"?Q.external:Q.internal,j=await pV(Y.idcsUrl,W),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:Y.clientId}),H=await fetch(j,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(W)}),B=await H.json();if(!H.ok){let G=rV(B);throw new HZ(`Token refresh failed: ${H.status}${G.message?` - ${G.message}`:""}`,{status:H.status,errorCode:G.code})}return lV(B,X,$)}async function J6($,Z,Q){if(!$)return null;let W=Z?.refreshBufferMs??Q?.refreshBufferMs??iz,J=Z?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??nz;if(Z?.forceRefresh!==!0&&!F8($,W))return $;try{return await BZ($,Q)}catch(Y){if(Y instanceof HZ&&Y.isLikelyInvalidGrant())return V$(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}var GZ="workos:";function WT($){let Z=$.trim();return Z.toLowerCase().startsWith(GZ)?Z:`${GZ}${Z}`}function JT($){let Z=$.trim();return Z.toLowerCase().startsWith(GZ)?Z.slice(GZ.length):Z}function XT($){let Q=E0($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function YT($,Z){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let W=XT(Z);if(W)return W;return Date.now()-1}function jT($,Z){let Q=$.auth?.accessToken?.trim(),W=$.auth?.refreshToken?.trim();if(!Q||!W)return null;let J=Z?.normalizeAccessToken?.(Q)??Q;if(!J)return null;return{access:J,refresh:W,expires:YT($,J),accountId:$.auth?.accountId}}function VT($){let Z=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:Z,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},W={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(W,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return W}function nW($){let Z=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:Z,getApiKey(Q){let W=Q?.auth?.accessToken?.trim();if(W)return $.formatAccessToken?.(W)??W;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return VT({...Q,storageProviderId:Z,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function aV($){return nW({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:WT,normalizeStoredAccessToken:JT,login:({settings:Z,callbacks:Q,telemetry:W})=>t4({apiBaseUrl:Z?.baseUrl?.trim()||nV().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:W}),refresh:({settings:Z,credentials:Q,forceRefresh:W,telemetry:J})=>e4(Q,{apiBaseUrl:Z.baseUrl?.trim()||nV().apiBaseUrl,telemetry:J},{forceRefresh:W})})}var HT=[aV({providerId:"cline"}),aV({providerId:"cline-pass",storageProviderId:"cline"}),nW({providerId:"oca",login:({settings:$,callbacks:Z,telemetry:Q})=>W6({mode:$?.oca?.mode,callbacks:Z,telemetry:Q}),refresh:({settings:$,credentials:Z,forceRefresh:Q,telemetry:W})=>J6(Z,{forceRefresh:Q,telemetry:W},{mode:$.oca?.mode,telemetry:W})}),nW({providerId:"openai-codex",login:({callbacks:$,telemetry:Z})=>$6({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:Z}),refresh:({credentials:$,forceRefresh:Z,telemetry:Q})=>Z6($,{forceRefresh:Z,telemetry:Q})})],BT=new Map(HT.map(($)=>[$.providerId,$]));function j0($){return BT.get($.trim().toLowerCase())}function Q2($){return j0($)!==void 0}function aW($){return j0($)?.storageProviderId}function sW($,Z){let Q=j0(Z),W=Q?.storageProviderId??Z,J=$.getProviderSettings(W);return Q?.getApiKey(J)??U8(Z,J)}async function X6($,Z,Q){let W=j0(Z);if(!W)throw Error(`Provider "${Z}" does not support OAuth login`);let J=$.getProviderSettings(W.storageProviderId),X=await W.login({settings:J,callbacks:Q.callbacks,telemetry:Q.telemetry});return W.saveCredentials({manager:$,settings:J,credentials:X})}function Y6($,Z){let Q=j0($);if(!Q)return null;return jT(Z,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function W2($){let Z=j0($.providerId);if(!Z)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return Z.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function U8($,Z){let Q=j0($);if(Q)return Q.getApiKey(Z);return Z?.auth?.accessToken?.trim()||Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0}function oW($,Z){let Q=j0($);if(!Q)return Z.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:Z.access}})??Z.access}_0();var qH={};N(qH,{createContextCompactionPrepareTurn:()=>F6});import{createHandlerAsync as fT}from"@cline/llms";import{CHARS_PER_TOKEN as Zc,estimateTokens as tW}from"@cline/shared";var eV=200000,$H=0.9,KZ=0.7,ZH=16384,eW=20000,oV=1024,tV=2000,QH=2000,WH=8;function H6($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
320
- ...[truncated ${$.length-Z} chars]`}function GT($){let Z=$3($);if(typeof Z==="string")return Z;return Z.map((Q)=>{switch(Q.type){case"text":return Q.text;case"file":return`<file path="${Q.path}">
319
+ </html>`;function qV($){let Z="";for(let Q=0;Q<$.length;Q+=1)Z+=String.fromCharCode($[Q]??0);return btoa(Z).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function Ez($){let Q=new TextEncoder().encode($),W=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(W)}function Nz($=32){let Z=new Uint8Array($);return crypto.getRandomValues(Z),qV(Z)}async function ZZ(){let $=Nz(),Z=qV(await Ez($));return{verifier:$,challenge:Z}}function QZ($){return $.endsWith("/")?$.slice(0,-1):$}function Z2($,Z){return new URL(Z,`${QZ($)}/`).toString()}function G8($,Z={}){let Q=$.trim();if(!Q)return{};try{let W=new URL(Q);return{code:W.searchParams.get("code")??void 0,state:W.searchParams.get("state")??void 0,provider:Z.includeProvider?W.searchParams.get("provider")??void 0:void 0}}catch{}if(Z.allowHashCodeState&&Q.includes("#")){let[W,J]=Q.split("#",2);return{code:W||void 0,state:J||void 0}}if(Q.includes("code=")){let W=new URLSearchParams(Q);return{code:W.get("code")??void 0,state:W.get("state")??void 0,provider:Z.includeProvider?W.get("provider")??void 0:void 0}}return{code:Q}}function Cz($){if(typeof atob==="function")try{return atob($)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from($,"base64").toString("utf8")}catch{return null}return null}function E0($){if(!$)return null;try{let Z=$.split(".");if(Z.length!==3)return null;let Q=Z[1];if(!Q)return null;let W=Q.replace(/-/g,"+").replace(/_/g,"/"),J=W.padEnd(W.length+(4-W.length%4)%4,"="),X=Cz(J);if(!X)return null;return JSON.parse(X)}catch{return null}}function K8($){try{let Z=JSON.parse($),Q=Z.error,W=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,J=typeof Z.error_description==="string"?Z.error_description:typeof Z.message==="string"?Z.message:Q&&typeof Q==="object"&&typeof Q.message==="string"?Q.message:void 0;return{code:W,message:J}}catch{return{}}}function F8($,Z){return Date.now()>=$.expires-Z}async function A8($){if(!$.onManualCodeInput){let X=await $.waitForCallback();return{code:X?.code,state:X?.state,provider:X?.provider,error:X?.error}}let Z,Q,W=$.onManualCodeInput().then((X)=>{Z=X,$.cancelWait()}).catch((X)=>{Q=X instanceof Error?X:Error(String(X)),$.cancelWait()}),J=await $.waitForCallback();if(Q)throw Q;if(J?.code||J?.error)return{code:J.code,state:J.state,provider:J.provider,error:J.error};if(Z)return G8(Z,$.parseOptions);if(await W,Q)throw Q;if(Z)return G8(Z,$.parseOptions);return{}}var WZ={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},NV={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},vW="https://api.workos.com",wz="/auth",MV=Array.from({length:11},($,Z)=>48801+Z),Pz=300000,Sz=30000,f8=30000,bz=300,yz=5;class K$ extends Error{status;errorCode;constructor($,Z){super($);this.name="ClineOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function hz($){let Z=Date.parse($);if(Number.isNaN(Z))throw Error(`Invalid expiresAt value: ${$}`);return Z}function cW($,Z,Q={}){let W=$.userInfo.clineUserId??Q.accountId,J=$.refreshToken??Q.refresh;if(!J)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:J,expires:hz($.expiresAt),accountId:W??void 0,email:$.userInfo.email||Q.email,metadata:{provider:Z,tokenType:$.tokenType,userInfo:$.userInfo}}}async function uW($){if(!$)return{};return typeof $==="function"?await $():$}function RV($,Z){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return Z;return Math.floor($)}async function EV($){await new Promise((Z)=>setTimeout(Z,$))}function dW($,Z){if(!$.success||!$.data?.accessToken)throw Error(Z);return $.data}async function CV($,Z){let Q=await fetch(Z2(vW,NV.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(Z?.requestTimeoutMs??f8)}),W=await Q.json().catch(()=>({}));if(!Q.ok)throw new K$(`Device authorization failed: ${Q.status}${W.error_description?` - ${W.error_description}`:""}`,{status:Q.status,errorCode:W.error});if(!W.device_code||!W.user_code||!W.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:W.device_code,userCode:W.user_code,verificationUri:W.verification_uri,verificationUriComplete:W.verification_uri_complete,expiresInSeconds:RV(W.expires_in,bz),pollIntervalSeconds:RV(W.interval,yz)}}async function wV($){let Z=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=Z){let W=await fetch(Z2($.workosApiBaseUrl,NV.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),J=await W.json().catch(()=>({}));if(W.ok){if(!J.access_token||!J.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:J.access_token,refreshToken:J.refresh_token,tokenType:J.token_type??"Bearer"}}switch(J.error){case"authorization_pending":{await EV(Q*1000);break}case"slow_down":{Q+=1,await EV(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new K$(J.error_description||"WorkOS authorization failed",{status:W.status,errorCode:J.error});default:throw new K$(`WorkOS token polling failed: ${W.status}${J.error_description?` - ${J.error_description}`:""}`,{status:W.status,errorCode:J.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function PV($,Z,Q){let W={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(Z2(Z.apiBaseUrl,WZ.register),{method:"POST",headers:{"Content-Type":"application/json",...await uW(Z.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Z.requestTimeoutMs??f8)});if(!J.ok){let Y=await J.text().catch(()=>""),j=K8(Y);throw new K$(`Token registration failed: ${J.status}${j.message?` - ${j.message}`:""}`,{status:J.status,errorCode:j.code})}let X=await J.json();return cW(dW(X,"Invalid token exchange response"),Q??Z.provider)}async function kz($,Z,Q,W){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:Z,provider:W??Q.provider},X=await fetch(Z2(Q.apiBaseUrl,WZ.token),{method:"POST",headers:{"Content-Type":"application/json",...await uW(Q.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Q.requestTimeoutMs??f8)});if(!X.ok){let j=await X.text().catch(()=>""),V=K8(j);throw new K$(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let Y=await X.json();return cW(dW(Y,"Invalid token exchange response"),W??Q.provider)}async function t4($){w1($.telemetry,$.provider??"cline");let Z=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:MV,W=$.callbackPath??wz,J=Z?null:await J1({ports:Q,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=J?.callbackUrl||`http://127.0.0.1:${Q[0]??MV[0]}${W}`;try{let Y;if(Z){let j=mW().workOsClientId,V=await CV(j,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let B=await wV({clientId:j,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??f8,workosApiBaseUrl:vW,onProgress:$.callbacks.onProgress});Y=await PV(B,$,$.provider)}else{let j=new URL(Z2($.apiBaseUrl,WZ.authorize));j.searchParams.set("client_type","extension"),j.searchParams.set("callback_url",X),j.searchParams.set("redirect_uri",X),$.callbacks.onAuth({url:j.toString(),instructions:"Continue the authentication process in your browser."});let V,B=$.provider,H=await A8({waitForCallback:J?.waitForCallback??(async()=>null),cancelWait:J?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(H.error)throw Error(`OAuth error: ${H.error}`);if(V=H.code,B=H.provider??B,!V){let G=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=G8(G,{includeProvider:!0});V=K.code,B=K.provider??B}if(!V)throw Error("Missing authorization code");Y=await kz(V,X,$,B)}return P1($.telemetry,$.provider??"cline"),b1($.telemetry,{id:Y.accountId,email:Y.email,provider:$.provider??"cline"}),Y}catch(Y){throw S1($.telemetry,$.provider??"cline",Y instanceof Error?Y.message:String(Y)),Y}finally{J?.close()}}async function lW($){return await CV(mW().workOsClientId,$)}async function pW($){let Z=$.provider??"cline";w1($.telemetry,Z);try{let Q=await wV({clientId:mW().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??f8,workosApiBaseUrl:vW}),W=await PV(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return P1($.telemetry,Z),b1($.telemetry,{id:W.accountId,email:W.email,provider:Z}),W}catch(Q){throw S1($.telemetry,Z,Q instanceof Error?Q.message:String(Q)),Q}}async function JZ($,Z){let Q=await fetch(Z2(Z.apiBaseUrl,WZ.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await uW(Z.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(Z.requestTimeoutMs??f8)});if(!Q.ok){let X=await Q.text().catch(()=>""),Y=K8(X);throw new K$(`Token refresh failed: ${Q.status}${Y.message?` - ${Y.message}`:""}`,{status:Q.status,errorCode:Y.code})}let W=await Q.json(),J=$.metadata?.provider??Z.provider;return cW(dW(W,"Invalid token refresh response"),J,$)}async function e4($,Z,Q){if(!$)return null;let W=Q?.refreshBufferMs??Pz,J=Q?.retryableTokenGraceMs??Sz;if(Q?.forceRefresh!==!0&&!F8($,W))return $;try{return await JZ($,Z)}catch(Y){if(Y instanceof K$&&Y.isLikelyInvalidGrant())return V$(Z.telemetry,Z.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}_0();var yV={};N(yV,{refreshOpenAICodexToken:()=>YZ,loginOpenAICodex:()=>$6,getValidOpenAICodexCredentials:()=>Z6,OPENAI_CODEX_OAUTH_CONFIG:()=>X0});import{nanoid as Iz}from"nanoid";var X0={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class XZ extends Error{status;errorCode;constructor($,Z){super($);this.name="OpenAICodexOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function xz($,Z,Q=X0.redirectUri){let W=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:X0.clientId,code:$,code_verifier:Z,redirect_uri:Q}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!W.ok)return{type:"failed"};let J=await W.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}async function gz($){try{let Z=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:X0.clientId}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!Z.ok){let W=await Z.text().catch(()=>""),J=K8(W);throw new XZ(`Token refresh failed: ${Z.status}${J.message?` - ${J.message}`:""}`,{status:Z.status,errorCode:J.code})}let Q=await Z.json();if(!Q.access_token||!Q.refresh_token||typeof Q.expires_in!=="number")return{type:"failed"};return{type:"success",access:Q.access_token,refresh:Q.refresh_token,expires:Date.now()+Q.expires_in*1000,email:Q.email,idToken:Q.id_token}}catch(Z){if(Z instanceof XZ)throw Z;return{type:"failed"}}}async function mz($="pi"){let{verifier:Z,challenge:Q}=await ZZ(),W=Iz(32),J=new URL(X0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",X0.clientId),J.searchParams.set("redirect_uri",X0.redirectUri),J.searchParams.set("scope",X0.scopes),J.searchParams.set("code_challenge",Q),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("state",W),J.searchParams.set("id_token_add_organizations","true"),J.searchParams.set("codex_cli_simplified_flow","true"),J.searchParams.set("originator",$),{verifier:Z,state:W,url:J.toString()}}function vz(){try{let $=new URL(X0.redirectUri),Z=$.port.length>0?Number.parseInt($.port,10):X0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(Z)?Z:X0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:X0.callbackPort,callbackPath:"/auth/callback",redirectUri:X0.redirectUri}}}function cz($,Z){let Q=Z?E0(Z):E0($),W=Q?Q:E0($),X=W?.[X0.jwtClaimPath]?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;let Y=W?.organizations;if(Array.isArray(Y)&&Y.length>0){let V=Y[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let j=W?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return null}function bV($,Z){let Q=cz($.access,$.idToken)??Z?.accountId;if(!Q)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||Z?.refresh||"",expires:$.expires,accountId:Q,email:$.email??Z?.email,metadata:{...Z?.metadata??{},provider:"openai-codex"}}}async function $6($){w1($.telemetry,"openai-codex");let Z=vz(),{verifier:Q,state:W,url:J}=await mz($.originator),X=await J1({host:Z.host,ports:[Z.port],callbackPath:Z.callbackPath,expectedState:W});$.onAuth({url:J,instructions:"Continue the authentication process in your browser."});let Y;try{let j=await A8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(j.state&&j.state!==W)throw Error("State mismatch");if(Y=j.code,!Y){let H=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=G8(H,{allowHashCodeState:!0});if(G.state&&G.state!==W)throw Error("State mismatch");Y=G.code}if(!Y)throw Error("Missing authorization code");let V=await xz(Y,Q,Z.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let B=bV(V);return P1($.telemetry,"openai-codex"),b1($.telemetry,{id:B.accountId,email:B.email,provider:"openai-codex"}),B}catch(j){throw S1($.telemetry,"openai-codex",j instanceof Error?j.message:String(j)),j}finally{X.close()}}async function YZ($,Z){let Q=await gz($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let W=bV(Q,Z);if(!W.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return W}async function Z6($,Z){if(!$)return null;let Q=Z?.refreshBufferMs??X0.refreshBufferMs,W=Z?.retryableTokenGraceMs??X0.retryableTokenGraceMs;if(Z?.forceRefresh!==!0&&!F8($,Q))return $;try{return await YZ($.refresh,$)}catch(X){if(X instanceof XZ&&X.isLikelyInvalidGrant())return V$(Z?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}_0();var iV={};N(iV,{refreshOcaToken:()=>HZ,loginOcaOAuth:()=>W6,getValidOcaCredentials:()=>J6,OCI_HEADER_OPC_REQUEST_ID:()=>uz,DEFAULT_INTERNAL_OCA_BASE_URL:()=>jZ,DEFAULT_INTERNAL_IDCS_URL:()=>IV,DEFAULT_INTERNAL_IDCS_SCOPES:()=>xV,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>kV,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>VZ,DEFAULT_EXTERNAL_IDCS_URL:()=>mV,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>vV,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>gV});import{nanoid as hV}from"nanoid";class rW{ttlMs;maxEntries;entries=new Map;constructor($,Z){this.ttlMs=$;this.maxEntries=Z}get($,Z=Date.now()){this.pruneExpired(Z);let Q=this.entries.get($);if(!Q)return;return this.entries.delete($),this.entries.set($,Q),Q.value}set($,Z,Q=Date.now(),W=this.ttlMs){this.pruneExpired(Q),this.entries.delete($);while(this.entries.size>=this.maxEntries){let J=this.entries.keys().next().value;if(J===void 0)break;this.entries.delete(J)}this.entries.set($,{value:Z,expiresAt:Q+W})}pruneExpired($){for(let[Z,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(Z)}}var kV="a8331954c0cf48ba99b5dd223a14c6ea",IV="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",xV="openid offline_access",jZ="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",gV="c1aba3deed5740659981a752714eba33",mV="https://login-ext.identity.oraclecloud.com",vV="openid offline_access",VZ="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",uz="opc-request-id",dz="/auth/oca",lz=Array.from({length:11},($,Z)=>48801+Z),pz=300000,rz=30000,cV=30000,iz=600000;class BZ extends Error{status;errorCode;constructor($,Z){super($);this.name="OcaOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var F$={internal:{clientId:kV,idcsUrl:IV,scopes:xV,baseUrl:jZ},external:{clientId:gV,idcsUrl:mV,scopes:vV,baseUrl:VZ}},Q6=new Map,nz=86400000,az=300000,sz=32,iW=new rW(nz,sz);function uV($){if(typeof $==="function")return $();return $??"internal"}function dV($){return{internal:{clientId:$?.internal?.clientId??F$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??F$.internal.idcsUrl,scopes:$?.internal?.scopes??F$.internal.scopes,baseUrl:$?.internal?.baseUrl??F$.internal.baseUrl},external:{clientId:$?.external?.clientId??F$.external.clientId,idcsUrl:$?.external?.idcsUrl??F$.external.idcsUrl,scopes:$?.external?.scopes??F$.external.scopes,baseUrl:$?.external?.baseUrl??F$.external.baseUrl}}}function oz($=Date.now()){let Z=$-iz;for(let[Q,W]of Q6.entries())if(W.createdAt<Z)Q6.delete(Q)}function tz($,Z,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=E0(Z)?.exp;if(typeof J==="number"&&J>0)return J*1000;let Y=E0(Q)?.exp;if(typeof Y==="number"&&Y>0)return Y*1000;return Date.now()+3600000}function lV($,Z,Q){let W=$.access_token;if(!W)throw Error("Token response did not include an access token");let J=$.refresh_token??Q?.refresh;if(!J)throw Error("Token response did not include a refresh token");let X=E0($.id_token),Y=E0(W),j=X?.sub??Y?.sub,V=X?.email??Y?.email;return{access:W,refresh:J,expires:tz($,W,$.id_token),accountId:j??Q?.accountId,email:V??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:Z,subject:j,idToken:$.id_token}}}async function pV($,Z){let Q=QZ($),W=iW.get(Q);if(W)return W;let J=`${Q}/.well-known/openid-configuration`,X=await fetch(J,{method:"GET",signal:AbortSignal.timeout(Z)});if(!X.ok){let V=`${Q}/oauth2/v1/token`;return iW.set(Q,V,Date.now(),az),V}let j=(await X.json()).token_endpoint||`${Q}/oauth2/v1/token`;return iW.set(Q,j),j}function rV($){return{code:$.error,message:$.error_description}}async function ez($){let Z=Q6.get($.state);if(!Z)throw Error("No PKCE verifier found for this state");Q6.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,W=await pV(Q.idcsUrl,$.requestTimeoutMs),J=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:Z.redirectUri,client_id:Q.clientId,code_verifier:Z.verifier}),X=await fetch(W,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:J,signal:AbortSignal.timeout($.requestTimeoutMs)}),Y=await X.json();if(!X.ok){let V=rV(Y);throw new BZ(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let j=E0(Y.id_token);if(!Y.id_token||!j)throw Error("No ID token received from OCA");if(j.nonce!==Z.nonce)throw Error("OIDC nonce verification failed");return lV(Y,$.mode)}function $T($){let Z=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${QZ(Z.idcsUrl)}/oauth2/v1/authorize`);return Q.searchParams.set("client_id",Z.clientId),Q.searchParams.set("response_type","code"),Q.searchParams.set("scope",Z.scopes),Q.searchParams.set("code_challenge",$.challenge),Q.searchParams.set("code_challenge_method","S256"),Q.searchParams.set("redirect_uri",$.callbackUrl),Q.searchParams.set("state",$.state),Q.searchParams.set("nonce",$.nonce),Q.toString()}async function W6($){w1($.telemetry,"oca");let Z=dV($.config),Q=uV($.mode),W=$.callbackPorts?.length?$.callbackPorts:lz,J=$.callbackPath??dz,X=$.requestTimeoutMs??cV,Y=await J1({ports:W,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=Y.callbackUrl;if(!j)throw Error("Unable to bind local OAuth callback server");let V=hV(16),B=hV(16),{verifier:H,challenge:G}=await ZZ();oz(),Q6.set(V,{verifier:H,nonce:B,mode:Q,redirectUri:j,createdAt:Date.now()});let K=$T({callbackUrl:j,mode:Q,state:V,nonce:B,challenge:G,config:Z});$.callbacks.onAuth({url:K,instructions:"Continue the authentication process in your browser."});try{let F=await A8({waitForCallback:Y.waitForCallback,cancelWait:Y.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),A=F.code,L=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!A){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!L||L!==V)throw Error("State mismatch");let f=await ez({code:A,state:L,mode:Q,config:Z,requestTimeoutMs:X});return P1($.telemetry,"oca"),b1($.telemetry,{id:f.accountId,email:f.email,provider:"oca"}),f}catch(F){throw S1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{Y.close()}}async function HZ($,Z={}){let Q=dV(Z.config),W=Z.requestTimeoutMs??cV,J=$.metadata?.mode,X=J==="internal"||J==="external"?J:uV(Z.mode),Y=X==="external"?Q.external:Q.internal,j=await pV(Y.idcsUrl,W),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:Y.clientId}),B=await fetch(j,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(W)}),H=await B.json();if(!B.ok){let G=rV(H);throw new BZ(`Token refresh failed: ${B.status}${G.message?` - ${G.message}`:""}`,{status:B.status,errorCode:G.code})}return lV(H,X,$)}async function J6($,Z,Q){if(!$)return null;let W=Z?.refreshBufferMs??Q?.refreshBufferMs??pz,J=Z?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??rz;if(Z?.forceRefresh!==!0&&!F8($,W))return $;try{return await HZ($,Q)}catch(Y){if(Y instanceof BZ&&Y.isLikelyInvalidGrant())return V$(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}var GZ="workos:";function ZT($){let Z=$.trim();return Z.toLowerCase().startsWith(GZ)?Z:`${GZ}${Z}`}function QT($){let Z=$.trim();return Z.toLowerCase().startsWith(GZ)?Z.slice(GZ.length):Z}function WT($){let Q=E0($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function JT($,Z){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let W=WT(Z);if(W)return W;return Date.now()-1}function XT($,Z){let Q=$.auth?.accessToken?.trim(),W=$.auth?.refreshToken?.trim();if(!Q||!W)return null;let J=Z?.normalizeAccessToken?.(Q)??Q;if(!J)return null;return{access:J,refresh:W,expires:JT($,J),accountId:$.auth?.accountId}}function YT($){let Z=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:Z,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},W={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(W,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return W}function nW($){let Z=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:Z,getApiKey(Q){let W=Q?.auth?.accessToken?.trim();if(W)return $.formatAccessToken?.(W)??W;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return YT({...Q,storageProviderId:Z,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function aV($){return nW({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:ZT,normalizeStoredAccessToken:QT,login:({settings:Z,callbacks:Q,telemetry:W})=>t4({apiBaseUrl:Z?.baseUrl?.trim()||nV().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:W}),refresh:({settings:Z,credentials:Q,forceRefresh:W,telemetry:J})=>e4(Q,{apiBaseUrl:Z.baseUrl?.trim()||nV().apiBaseUrl,telemetry:J},{forceRefresh:W})})}var jT=[aV({providerId:"cline"}),aV({providerId:"cline-pass",storageProviderId:"cline"}),nW({providerId:"oca",login:({settings:$,callbacks:Z,telemetry:Q})=>W6({mode:$?.oca?.mode,callbacks:Z,telemetry:Q}),refresh:({settings:$,credentials:Z,forceRefresh:Q,telemetry:W})=>J6(Z,{forceRefresh:Q,telemetry:W},{mode:$.oca?.mode,telemetry:W})}),nW({providerId:"openai-codex",login:({callbacks:$,telemetry:Z})=>$6({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:Z}),refresh:({credentials:$,forceRefresh:Z,telemetry:Q})=>Z6($,{forceRefresh:Z,telemetry:Q})})],VT=new Map(jT.map(($)=>[$.providerId,$]));function j0($){return VT.get($.trim().toLowerCase())}function Q2($){return j0($)!==void 0}function aW($){return j0($)?.storageProviderId}function sW($,Z){let Q=j0(Z),W=Q?.storageProviderId??Z,J=$.getProviderSettings(W);return Q?.getApiKey(J)??U8(Z,J)}async function X6($,Z,Q){let W=j0(Z);if(!W)throw Error(`Provider "${Z}" does not support OAuth login`);let J=$.getProviderSettings(W.storageProviderId),X=await W.login({settings:J,callbacks:Q.callbacks,telemetry:Q.telemetry});return W.saveCredentials({manager:$,settings:J,credentials:X})}function Y6($,Z){let Q=j0($);if(!Q)return null;return XT(Z,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function W2($){let Z=j0($.providerId);if(!Z)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return Z.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function U8($,Z){let Q=j0($);if(Q)return Q.getApiKey(Z);return Z?.auth?.accessToken?.trim()||Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0}function oW($,Z){let Q=j0($);if(!Q)return Z.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:Z.access}})??Z.access}_0();var qB={};N(qB,{createContextCompactionPrepareTurn:()=>F6});import{createHandlerAsync as FT}from"@cline/llms";import{CHARS_PER_TOKEN as tv,estimateTokens as tW}from"@cline/shared";var eV=128000,$B=0.9,KZ=0.7,ZB=16384,eW=20000,oV=1024,tV=2000,QB=2000,WB=8;function B6($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
320
+ ...[truncated ${$.length-Z} chars]`}function BT($){let Z=$3($);if(typeof Z==="string")return Z;return Z.map((Q)=>{switch(Q.type){case"text":return Q.text;case"file":return`<file path="${Q.path}">
321
321
  ${Q.content}
322
322
  </file>`;case"image":return`[image:${Q.mediaType}]`;default:return""}}).join(`
323
- `)}function $3($){if(typeof $==="string")return H6($,tV);return $.map((Z)=>{switch(Z.type){case"text":return{...Z,text:H6(Z.text,tV)};case"file":return{...Z,content:H6(Z.content,QH)};case"image":return Z;default:return Z}})}function KT($){return Object.entries($).map(([Z,Q])=>`${Z}=${JSON.stringify(Q)}`).join(", ")}function JH($){if(typeof $.content==="string")return`[${$.role==="user"?"User":"Bot"}]: ${$.content}`;let Z=[];for(let Q of $.content)switch(Q.type){case"text":Z.push(`[${$.role==="user"?"User":"Bot"}]: ${Q.text}`);break;case"thinking":Z.push(`[Bot thinking]: ${H6(Q.thinking,2000)}`);break;case"redacted_thinking":Z.push("[Bot thinking]: [redacted]");break;case"tool_use":Z.push(`[Bot tool calls]: ${Q.name}(${KT(Q.input)})`);break;case"tool_result":Z.push(`[Tool result]: ${GT(Q.content)}`);break;case"file":Z.push(`[${$.role==="user"?"User":"Bot"} file ${Q.path}]: ${H6(Q.content,QH)}`);break;case"image":Z.push(`[${$.role==="user"?"User":"Bot"} image]: ${Q.mediaType}`);break}return Z.join(`
324
- `)}function XH($){return $.map(JH).join(`
323
+ `)}function $3($){if(typeof $==="string")return B6($,tV);return $.map((Z)=>{switch(Z.type){case"text":return{...Z,text:B6(Z.text,tV)};case"file":return{...Z,content:B6(Z.content,QB)};case"image":return Z;default:return Z}})}function HT($){return Object.entries($).map(([Z,Q])=>`${Z}=${JSON.stringify(Q)}`).join(", ")}function JB($){if(typeof $.content==="string")return`[${$.role==="user"?"User":"Bot"}]: ${$.content}`;let Z=[];for(let Q of $.content)switch(Q.type){case"text":Z.push(`[${$.role==="user"?"User":"Bot"}]: ${Q.text}`);break;case"thinking":Z.push(`[Bot thinking]: ${B6(Q.thinking,2000)}`);break;case"redacted_thinking":Z.push("[Bot thinking]: [redacted]");break;case"tool_use":Z.push(`[Bot tool calls]: ${Q.name}(${HT(Q.input)})`);break;case"tool_result":Z.push(`[Tool result]: ${BT(Q.content)}`);break;case"file":Z.push(`[${$.role==="user"?"User":"Bot"} file ${Q.path}]: ${B6(Q.content,QB)}`);break;case"image":Z.push(`[${$.role==="user"?"User":"Bot"} image]: ${Q.mediaType}`);break}return Z.join(`
324
+ `)}function XB($){return $.map(JB).join(`
325
325
 
326
- `).trim()}function YH(){let $=new WeakMap;return(Z)=>{let Q=Z,W=$.get(Q);if(typeof W==="number")return W;let J;try{J=JSON.stringify(Z)}catch{J=JH(Z)}let X=tW(J.length);return $.set(Q,X),X}}function B6($){return $.metadata?.kind==="compaction_summary"}function Z3($){if(!B6($))return;let Z=$.metadata;if(!Z)return;let Q=Z.details;return{kind:"compaction_summary",summary:String(Z.summary??""),details:{readFiles:Array.isArray(Q?.readFiles)?Q.readFiles.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter((W)=>W.length>0):[],modifiedFiles:Array.isArray(Q?.modifiedFiles)?Q.modifiedFiles.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter((W)=>W.length>0):[]},tokensBefore:Number(Z.tokensBefore??0),generatedAt:Number(Z.generatedAt??0)}}function FT($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}function G6($){return $.role==="user"&&!FT($)&&!B6($)}function jH($){for(let Z=0;Z<$.length;Z+=1)if(G6($[Z]))return Z;return-1}function FZ($){for(let Z=$.length-1;Z>=0;Z-=1)if(G6($[Z]))return Z;return 0}function VH($){for(let Z=$.length-1;Z>=0;Z-=1)if($[Z].role==="assistant")return Z;return-1}function HH($){for(let Z=$.length-1;Z>=0;Z-=1)if(B6($[Z]))return Z;return-1}function BH($,Z,Q){let W=FZ($);if(W<=0)return 0;let J=0,X=$.length;for(let j=$.length-1;j>=0;j-=1)if(J+=Q($[j]),X=j,J>=Z)break;if(X<=0)return 0;let Y=Math.min(X,W);while(Y>0&&!G6($[Y]))Y-=1;return Y}function V6($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((Z)=>V6(Z));if($&&typeof $==="object"){let Z=$,Q=[];for(let W of["path","file_path","target_file","new_file_path","old_file_path"])Q.push(...V6(Z[W]));if(Array.isArray(Z.files)){for(let W of Z.files)if(W&&typeof W==="object")Q.push(...V6(W.path))}if(Array.isArray(Z.file_paths))Q.push(...V6(Z.file_paths));return Q}return[]}function j6($,Z){let Q=new Set($);for(let W of Z){let J=W.trim();if(!J)continue;Q.add(J)}return[...Q].sort((W,J)=>W.localeCompare(J))}function GH($){let Z=[],Q=[];for(let W of $){let J=Z3(W);if(J){Z=j6(Z,J.details.readFiles),Q=j6(Q,J.details.modifiedFiles);continue}if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type==="file"){Z=j6(Z,[X.path]);continue}if(X.type!=="tool_use")continue;let Y=V6(X.input);if(X.name==="read_files"){Z=j6(Z,Y);continue}if(X.name==="editor"||X.name==="apply_patch")Q=j6(Q,Y)}}return{readFiles:Z,modifiedFiles:Q}}function AT($){let Z=$.readFiles.length>0?$.readFiles.map((W)=>`- ${W}`).join(`
326
+ `).trim()}function YB(){let $=new WeakMap;return(Z)=>{let Q=Z,W=$.get(Q);if(typeof W==="number")return W;let J;try{J=JSON.stringify(Z)}catch{J=JB(Z)}let X=tW(J.length);return $.set(Q,X),X}}function H6($){return $.metadata?.kind==="compaction_summary"}function Z3($){if(!H6($))return;let Z=$.metadata;if(!Z)return;let Q=Z.details;return{kind:"compaction_summary",summary:String(Z.summary??""),details:{readFiles:Array.isArray(Q?.readFiles)?Q.readFiles.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter((W)=>W.length>0):[],modifiedFiles:Array.isArray(Q?.modifiedFiles)?Q.modifiedFiles.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter((W)=>W.length>0):[]},tokensBefore:Number(Z.tokensBefore??0),generatedAt:Number(Z.generatedAt??0)}}function GT($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}function G6($){return $.role==="user"&&!GT($)&&!H6($)}function jB($){for(let Z=0;Z<$.length;Z+=1)if(G6($[Z]))return Z;return-1}function FZ($){for(let Z=$.length-1;Z>=0;Z-=1)if(G6($[Z]))return Z;return 0}function VB($){for(let Z=$.length-1;Z>=0;Z-=1)if($[Z].role==="assistant")return Z;return-1}function BB($){for(let Z=$.length-1;Z>=0;Z-=1)if(H6($[Z]))return Z;return-1}function HB($,Z,Q){let W=FZ($);if(W<=0)return 0;let J=0,X=$.length;for(let j=$.length-1;j>=0;j-=1)if(J+=Q($[j]),X=j,J>=Z)break;if(X<=0)return 0;let Y=Math.min(X,W);while(Y>0&&!G6($[Y]))Y-=1;return Y}function V6($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((Z)=>V6(Z));if($&&typeof $==="object"){let Z=$,Q=[];for(let W of["path","file_path","target_file","new_file_path","old_file_path"])Q.push(...V6(Z[W]));if(Array.isArray(Z.files)){for(let W of Z.files)if(W&&typeof W==="object")Q.push(...V6(W.path))}if(Array.isArray(Z.file_paths))Q.push(...V6(Z.file_paths));return Q}return[]}function j6($,Z){let Q=new Set($);for(let W of Z){let J=W.trim();if(!J)continue;Q.add(J)}return[...Q].sort((W,J)=>W.localeCompare(J))}function GB($){let Z=[],Q=[];for(let W of $){let J=Z3(W);if(J){Z=j6(Z,J.details.readFiles),Q=j6(Q,J.details.modifiedFiles);continue}if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type==="file"){Z=j6(Z,[X.path]);continue}if(X.type!=="tool_use")continue;let Y=V6(X.input);if(X.name==="read_files"){Z=j6(Z,Y);continue}if(X.name==="editor"||X.name==="apply_patch")Q=j6(Q,Y)}}return{readFiles:Z,modifiedFiles:Q}}function KT($){let Z=$.readFiles.length>0?$.readFiles.map((W)=>`- ${W}`).join(`
327
327
  `):"- none",Q=$.modifiedFiles.length>0?$.modifiedFiles.map((W)=>`- ${W}`).join(`
328
328
  `):"- none";return`## Files
329
329
  Read:
330
330
  ${Z}
331
331
  Modified:
332
- ${Q}`}function KH($,Z){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
332
+ ${Q}`}function KB($,Z){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
333
333
 
334
- ${AT(Z)}`.trim()}function FH($){let Z=[`Summarize this session for continuation. Be concise and factual.
334
+ ${KT(Z)}`.trim()}function FB($){let Z=[`Summarize this session for continuation. Be concise and factual.
335
335
 
336
336
  ## Goal
337
337
  One sentence: what is being built or fixed.
@@ -353,20 +353,20 @@ Edited: ${$.fileOps.modifiedFiles.join(", ")||"none"}`];if($.previousSummary?.tr
353
353
  ${$.previousSummary.trim()}`);return Z.push(`Conversation:
354
354
  ${$.conversationText||"(empty)"}`),Z.join(`
355
355
 
356
- `)}function AH($){let Z=$.summarizer,Q=(J)=>{if(J.providerId==="openai-codex"){let{maxOutputTokens:X,...Y}=J;return{...Y,thinking:!1}}return{...J,maxOutputTokens:J.maxOutputTokens??oV,thinking:!1}};if(!Z)return Q($.activeProviderConfig);let W=Z.providerConfig?.providerId===Z.providerId?Z.providerConfig:void 0;return Q({...W??{},providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey??W?.apiKey,baseUrl:Z.baseUrl??W?.baseUrl,headers:Z.headers??W?.headers,knownModels:Z.knownModels??W?.knownModels,maxOutputTokens:Z.maxOutputTokens??oV})}function fH($){return{role:"user",content:`Context summary:
356
+ `)}function AB($){let Z=$.summarizer,Q=(J)=>{if(J.providerId==="openai-codex"){let{maxOutputTokens:X,...Y}=J;return{...Y,thinking:!1}}return{...J,maxOutputTokens:J.maxOutputTokens??oV,thinking:!1}};if(!Z)return Q($.activeProviderConfig);let W=Z.providerConfig?.providerId===Z.providerId?Z.providerConfig:void 0;return Q({...W??{},providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey??W?.apiKey,baseUrl:Z.baseUrl??W?.baseUrl,headers:Z.headers??W?.headers,knownModels:Z.knownModels??W?.knownModels,maxOutputTokens:Z.maxOutputTokens??oV})}function fB($){return{role:"user",content:`Context summary:
357
357
 
358
- ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}async function UT($){let Z=await fT($.providerConfig),Q="";for await(let W of Z.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(W.type==="text"){Q+=W.text;continue}if(W.type==="done"&&!W.success&&W.error)throw Error(W.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Q.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Q.trim()}function DT($){try{return JSON.stringify($).length}catch{return String($).length}}async function UH($){let Z=$.context.messages;if(Z.length<2)return;let Q=BH(Z,$.preserveRecentTokens,$.estimateMessageTokens);if(Q<=0||Q>=Z.length)return;let W=Z.slice(0,Q),J=HH(W),X=J>=0?Z3(W[J])?.summary:void 0,Y=J>=0?W.slice(J+1):W;if(Y.length===0)return;let j=GH(W),V=XH(Y),H=FH({previousSummary:X,conversationText:V,fileOps:j});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:W.length,newMessagesToFold:Y.length,preservedMessages:Z.length-Q,previousSummaryChars:X?.length??0,conversationTextChars:V.length,summaryRequestChars:H.length,summaryRequestEstimatedTokens:tW(H.length),newMessagesJsonChars:DT(Y),maxInputTokens:$.context.maxInputTokens,triggerTokens:$.context.triggerTokens});let B=await UT({providerConfig:AH({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),request:H,logger:$.logger});if(!B.trim())return;let G=KH(B,j),K=Z.reduce((L,f)=>L+$.estimateMessageTokens(f),0),F=[fH({summary:G,fileOps:j,tokensBefore:K}),...Z.slice(Q)],A=F.reduce((L,f)=>L+$.estimateMessageTokens(f),0);return $.logger?.debug("Performed agentic compaction",{messagesBefore:Z.length,messagesAfter:F.length,messagesSummarized:Q,messagesPreserved:Z.length-Q,tokensBefore:K,tokensAfter:A,maxInputTokens:$.context.maxInputTokens}),{messages:F}}import{CHARS_PER_TOKEN as LT}from"@cline/shared";function _T($){if(B6($))return;if(typeof $.content==="string"){let Q=$.content.trim();return Q?{...$,content:Q}:void 0}let Z=$.content.filter((Q)=>Q.type!=="text"||Q.text.trim());if(Z.length===0)return;return{...$,content:Z.map((Q)=>Q.type==="text"?{...Q,text:Q.text.trim()}:Q.type==="tool_result"?{...Q,content:$3(Q.content)}:Q)}}function zT($,Z){return $.reduce((Q,W)=>Q+Z(W),0)}function DH($,Z){if($.length<=Z)return $;let Q=`
359
- ...`,W=Math.max(1,Z-Q.length);return`${$.slice(0,W)}${Q}`}function LH($,Z){let Q=Number.isFinite(Z)?Math.max(1,Z):1,W=Math.max(16,Q*LT);if(typeof $.content==="string"){let Y=DH($.content,W).trim();return{...$,content:Y||"..."}}let J=W,X=$.content.map((Y)=>{if(Y.type!=="text"||J<=0)return Y;let j=DH(Y.text,J).trim();return J-=j.length,{...Y,text:j||"..."}});return{...$,content:X}}function TT($,Z){let Q=jH($),W=FZ($),J=VH($),X=[],Y=0;for(let j=0;j<$.length;j+=1){let V=_T($[j]);if(!V)continue;let H=Z(V);Y+=H,X.push({index:j,message:V,estimatedTokens:H,toolPairIds:zH(V),isFirstUser:j===Q,isLastUser:j===W,isLastAssistant:j===J})}return{candidates:X,totalTokens:Y}}function _H($,Z,Q,W){let J=$[Z],X=J.estimatedTokens;return J.message=Q,J.estimatedTokens=W(Q),J.toolPairIds=zH(Q),J.estimatedTokens-X}function zH($){if(!Array.isArray($.content))return[];let Z=[];for(let Q of $.content)if(Q.type==="tool_use")Z.push(Q.id);else if(Q.type==="tool_result")Z.push(Q.tool_use_id);return Z}function OT($){let Z=new Map;for(let Q of $)for(let W of Q.toolPairIds){let J=Z.get(W);if(J)J.add(Q);else Z.set(W,new Set([Q]))}return Z}function qT($,Z,Q){let W=new Set,J=[Q],X=0;while(X<J.length){let Y=J[X];if(X+=1,Y===void 0||!$.has(Y)||W.has(Y))continue;W.add(Y);for(let j of Y.toolPairIds)for(let V of Z.get(j)??[])if(!W.has(V))J.push(V)}return W}function MT($,Z){let Q=0;for(let W of $){if(Z.has(W))continue;$[Q]=W,Q+=1}$.length=Q}function AZ($,Z,Q,W){let J=new Set($),X=OT($);for(let Y=0;Y<$.length&&W>Q;){if(!Z($[Y])){Y+=1;continue}let j=qT(J,X,$[Y]);if(j.size===0){Y+=1;continue}let V=0;for(let H of j)V+=H.estimatedTokens,J.delete(H);W-=V,MT($,j)}return W}function RT($,Z,Q,W,J){if(Q<=Z)return Q;for(let Y=$.length-1;Y>=0&&Q>Z;Y-=1){let j=$[Y];if(j.isFirstUser)continue;let V=Math.max(WH,j.estimatedTokens-(Q-Z));if(V>=j.estimatedTokens)continue;Q+=_H($,Y,LH(j.message,V),J)}if(Q<=Z)return Q;let X=$.findIndex((Y)=>Y.isFirstUser);if(X>=0){if($[X].estimatedTokens<=W)return Q;while(Q>Z){let j=$[X],V=Math.max(1,j.estimatedTokens-(Q-Z));if(V>=j.estimatedTokens)break;let H=j.estimatedTokens;if(Q+=_H($,X,LH(j.message,V),J),j.estimatedTokens>=H)break}}return Q}function ET($,Z){return JSON.stringify($)!==JSON.stringify(Z)}function NT($){let Z=FZ($);if(Z<0||Z===0&&!G6($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,Z),protectedTail:$.slice(Z)}}function TH($){let Z=Math.max(1,Math.min($.context.targetTokens??Math.floor($.context.triggerTokens*KZ),$.context.maxInputTokens)),{compactable:Q,protectedTail:W}=NT($.context.messages);if(Q.length===0)return;let J=zT(W,$.estimateMessageTokens),X=Math.max(1,Z-J),Y=TT(Q,$.estimateMessageTokens),{candidates:j}=Y;if(j.length===0)return;let V=Y.totalTokens,H=V;H=AZ(j,(F)=>F.message.role==="assistant"&&!F.isLastAssistant,X,H),H=AZ(j,(F)=>F.message.role==="user"&&!F.isFirstUser&&!F.isLastUser,X,H),H=AZ(j,(F)=>F.message.role==="assistant"&&F.isLastAssistant,X,H),H=AZ(j,(F)=>F.message.role==="user"&&F.isLastUser&&!F.isFirstUser,X,H),H=RT(j,X,H,$.context.triggerTokens,$.estimateMessageTokens);let B=[...j.map((F)=>F.message),...W];if(!ET($.context.messages,B))return;let G=V+J,K=H+J;return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:B.length,messagesRemoved:$.context.messages.length-B.length,tokensBefore:G,tokensAfter:K,targetTokens:Z,maxInputTokens:$.context.maxInputTokens}),{messages:B}}var wT=0.5,CT=0.5;function OH($){try{return JSON.stringify($).length}catch{return String($).length}}function K6($){return typeof $==="number"&&Number.isFinite($)&&$>0}function PT($){let Z=[];if(K6($.configMaxInputTokens))Z.push($.configMaxInputTokens);if(K6($.modelMaxInputTokens))Z.push($.modelMaxInputTokens);if(K6($.contextWindow)){Z.push($.contextWindow);let Q=K6($.modelMaxTokens)?$.contextWindow-$.modelMaxTokens:void 0;if(K6(Q)&&Q>=$.contextWindow*wT)Z.push(Q)}return Z.length>0?Math.min(...Z):eV}function ST($){let Z=0,Q=0,W=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type!=="tool_result")continue;let Y=OH(X.content);Z+=1,Q+=Y,W=Math.max(W,Y)}}return{toolResultCount:Z,toolResultSerializedChars:Q,maxToolResultSerializedChars:W}}var bT={basic:({context:$,estimateMessageTokens:Z,logger:Q})=>TH({context:$,estimateMessageTokens:Z,logger:Q}),agentic:({context:$,providerConfig:Z,compaction:Q,mode:W,estimateMessageTokens:J,logger:X})=>UH({context:$,providerConfig:Z,summarizer:Q?.summarizer,preserveRecentTokens:W==="manual"?Math.min(Q?.preserveRecentTokens??eW,$.triggerTokens):Q?.preserveRecentTokens??eW,estimateMessageTokens:J,logger:X})};function yT($){if(typeof $.config.reserveTokens==="number"){let Q=Math.max(0,$.config.reserveTokens),W=Math.max(0,$.maxInputTokens-Q);return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio==="number"){let Q=$.config.thresholdRatio,W=$.maxInputTokens*Q;return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:Q}}let Z=Math.max(0,Math.min($.maxInputTokens-ZH,$.maxInputTokens*$H));return{shouldCompact:$.inputTokens>Z,triggerTokens:Z,thresholdRatio:$.maxInputTokens>0?Z/$.maxInputTokens:0}}function hT($){let Z=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,Z)),W=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*Q)));return{triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}function kT($){let Z=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*CT):Math.floor($.triggerTokens*KZ),Q=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(Z,$.maxInputTokens,Q))}function IT($){let Z=0,Q=!1;for(let W of $)if(W.role==="user")Q=!0;else if(W.role==="assistant"&&Q)Z+=1,Q=!1;return Z}function F6($,Z={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let W=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=YH(),X=Q?.strategy??"basic",Y=bT[X],j=Z.mode??"auto",V=Q?.compact?"custom":X;return async(H)=>{let B=H.apiMessages.reduce((E,C)=>E+J(C),0),G=PT({configMaxInputTokens:Q?.maxInputTokens,modelMaxInputTokens:H.model.info?.maxInputTokens,contextWindow:H.model.info?.contextWindow,modelMaxTokens:H.model.info?.maxTokens}),K=yT({inputTokens:B,maxInputTokens:G,config:{maxInputTokens:Q?.maxInputTokens,reserveTokens:Q?.reserveTokens,thresholdRatio:Q?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:j,strategy:X,iteration:H.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:B,maxInputTokens:G,triggerTokens:K.triggerTokens,thresholdRatio:K.thresholdRatio,shouldCompact:K.shouldCompact,messageCount:H.messages.length,apiMessageCount:H.apiMessages.length,apiMessagesJsonChars:OH(H.apiMessages),...ST(H.apiMessages)}),j==="auto"&&!K.shouldCompact)return;let F=j==="manual"?hT({inputTokens:B,maxInputTokens:G,autoTriggerTokens:K.triggerTokens,manualTargetRatio:Z.manualTargetRatio}):K,A=j==="auto"?kT({maxInputTokens:G,modelMaxTokens:H.model.info?.maxTokens,triggerTokens:F.triggerTokens,messagePairCount:IT(H.messages)}):void 0,L={agentId:H.agentId,conversationId:H.conversationId,parentAgentId:H.parentAgentId,iteration:H.iteration,messages:H.messages,model:H.model,maxInputTokens:G,triggerTokens:F.triggerTokens,targetTokens:A,thresholdRatio:F.thresholdRatio,utilizationRatio:G>0?B/G:0},f=j==="manual"?"manual_compaction":"auto_compaction";H.emitStatusNotice?.(j==="manual"?"compacting":"auto-compacting",{kind:f,reason:f,iteration:H.iteration,triggerTokens:F.triggerTokens,maxInputTokens:G});let D=H.messages.length,U=Date.now(),T=Q?.compact?await Q.compact(L):await Y({context:L,providerConfig:{...W,abortSignal:H.abortSignal},compaction:Q,mode:j,estimateMessageTokens:J,logger:$.logger}),q=Date.now()-U,z=$.sessionId??H.conversationId,_={agentId:H.agentId,conversationId:H.conversationId,parentAgentId:H.parentAgentId??void 0};if(T?.messages){let E=T.messages.reduce((C,y)=>C+J(y),0);$.logger?.log("Context compaction completed",{severity:"info",strategy:X,maxInputTokens:G,inputTokens:B,afterTokens:E,tokensSaved:B-E,utilizationBefore:`${(B/G*100).toFixed(1)}%`,utilizationAfter:`${(E/G*100).toFixed(1)}%`,thresholdTrigger:`${(F.thresholdRatio*100).toFixed(1)}%`,messagesBefore:D,messagesAfter:T.messages.length,messagesRemoved:D-T.messages.length}),h9($.telemetry,{ulid:z,strategy:V,mode:j,messagesBefore:D,messagesAfter:T.messages.length,messagesRemoved:D-T.messages.length,tokensBefore:B,tokensAfter:E,tokensSaved:B-E,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:q,provider:$.providerId,modelId:$.modelId,..._})}else k9($.telemetry,{ulid:z,strategy:V,mode:j,reason:"no_result",tokensBefore:B,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:q,provider:$.providerId,modelId:$.modelId,..._});return T}}var sB={};N(sB,{zodToJsonSchema:()=>hM,validateWithZod:()=>yM,truncateCommandOutput:()=>Y2,resolveToolRoutingConfig:()=>M8,resolveToolPresetName:()=>l1,resolveCoreSelectedToolIds:()=>yZ,getCoreHeadlessToolNames:()=>k6,getCoreDefaultEnabledToolIds:()=>bZ,getCoreBuiltinToolCatalog:()=>f2,getCoreAcpToolNames:()=>hZ,createWebFetchTool:()=>j3,createWebFetchExecutor:()=>C6,createToolPoliciesWithPreset:()=>qZ,createSubmitAndExitTool:()=>G3,createSkillsTool:()=>V2,createShellTool:()=>M6,createShellExecutor:()=>j2,createSearchTool:()=>Y3,createSearchExecutor:()=>w6,createReadFilesTool:()=>X3,createFileReadExecutor:()=>N6,createEditorTool:()=>H3,createEditorExecutor:()=>E6,createDefaultToolsWithPreset:()=>MZ,createDefaultTools:()=>D$,createDefaultShellExecutor:()=>P6,createDefaultExecutors:()=>O8,createBuiltinTools:()=>U2,createAskQuestionTool:()=>B3,createApplyPatchTool:()=>V3,createApplyPatchExecutor:()=>R6,WebFetchRequestSchema:()=>Q3,ToolPresets:()=>u0,TEAM_TOOL_NAMES:()=>N8,SubmitInputSchema:()=>q6,StructuredCommandInputSchema:()=>J2,SkillsInputSchema:()=>T6,SearchCodebaseInputSchema:()=>U6,RunCommandsInputSchema:()=>D6,ReadFilesInputSchema:()=>f6,ReadFileRequestSchema:()=>m1,MAX_COMMAND_OUTPUT_CHARS:()=>c1,FetchWebContentInputSchema:()=>L6,EditFileInputSchema:()=>_6,DefaultToolNames:()=>U0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>q8,AskQuestionInputSchema:()=>O6,ApplyPatchInputSchema:()=>z6,ALL_DEFAULT_TOOL_NAMES:()=>X$});import{validateWithZod as yM,zodToJsonSchema as hM}from"@cline/shared";_0();import{createTool as f$,validateWithZod as U$,zodToJsonSchema as u1}from"@cline/shared";var MH="__clineInternalTelemetry";function RH($){let Z=$?.__clineInternalTelemetry;return Z&&typeof Z==="object"&&"capture"in Z&&typeof Z.capture==="function"?Z:void 0}import{spawn as IH}from"node:child_process";import{StringDecoder as vT}from"node:string_decoder";import{getDefaultShell as cT,getShellArgs as uT}from"@cline/shared";import{validateWithZod as gT}from"@cline/shared";import{z as O}from"zod";var A$=6000,A6=O.string().describe("The absolute file path of a text file to read content from"),EH=O.object({start_line:O.number().int().positive().nullable().optional().describe("Optional one-based starting line number to read from; use null or omit for the start of the file"),end_line:O.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit to read to the end of the file or the read cap, whichever comes first")}).describe("Optional inclusive one-based file line range"),m1=O.object({path:A6,start_line:EH.shape.start_line,end_line:EH.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),f6=O.object({files:O.array(m1).describe("Array of file read requests. Omit start_line/end_line or set them to null to read from the start; provide integers to return only that inclusive one-based line range. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),NH=O.union([f6,m1,O.array(m1),O.array(O.string()),O.string(),O.object({files:O.array(O.union([A6,m1]))}),O.object({files:m1}),O.object({files:A6}),O.object({file_paths:O.array(A6)}),O.object({file_paths:O.string()}),O.object({paths:O.array(O.union([A6,m1]))}),O.object({paths:m1}),O.object({paths:O.string()})]),U6=O.object({queries:O.array(O.string()).describe("Array of regex search queries to execute")}),wH=O.union([U6,O.array(O.string()),O.string(),O.object({queries:O.string()})]),fZ=O.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${A$*2} characters) to avoid timeouts.`),J2=O.object({command:O.string().min(1).describe("The executable to run directly without shell parsing."),args:O.array(O.string()).optional().describe("Optional argv list passed directly to the executable.")}),CH=O.union([fZ,J2]),D6=O.object({commands:O.array(fZ).describe("Array of complete shell command strings to execute.")}),xT=O.object({commands:O.array(CH)}),PH=O.union([D6,xT,O.object({commands:CH}),O.array(J2),J2,O.object({command:fZ}),O.object({cmd:fZ}),O.array(O.string()),O.string()]),Q3=O.object({url:O.string().describe("The URL to fetch"),prompt:O.string().min(2).describe("Analysis prompt for the fetched content")}),L6=O.object({requests:O.array(Q3).describe("Array of the URLs for the web fetch requests")}),_6=O.object({path:O.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:O.string().nullable().optional().describe(`Exact text to replace (must match exactly once). Omit this when creating a missing file or inserting via insert_line. Keep this at or below ${A$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:O.string().describe(`The new content to write when creating a missing file, the replacement text for edits, or the inserted text when insert_line is provided. Keep this at or below ${A$} characters when possible; for large edits, use multiple calls with small chunks of old_text and new_text to iteratively edit the file.`),insert_line:O.number().int().nullable().optional().describe("Optional positive one-based boundary line. When provided, the tool inserts new_text before that line instead of performing a replacement edit; use line_count + 1 to append at EOF.")}).describe("Edit a text file by replacing old_text with new_text, create the file with new_text if it does not exist, or insert new_text at insert_line when insert_line is provided. Prefer using this tool for file edits over shell commands. IMPORTANT: large edits can time out, so use small chunks and multiple calls when possible."),z6=O.object({input:O.string().min(1).describe("The freeform apply_patch payload in the canonical patch grammar (e.g *** Begin Patch, *** Update File:, @@, and *** End Patch).")}).describe("Modify or create a text file by applying patches using the canonical apply_patch diff grammar. Prefer sending the patch body directly rather than wrapping it in shell syntax. IMPORTANT: large patches can time out, so use small chunks and multiple calls when possible."),SH=O.union([z6,O.string()]),T6=O.object({skill:O.string().min(1).describe("Name of the skill to execute."),args:O.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),O6=O.object({question:O.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:O.array(O.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),q6=O.object({summary:O.string().min(10).describe("Summarization of the investigation, steps taken, and resolution status to submit at the end of the session. Before submitting, read the problem again along with any provided test's assertions carefully and confirm your fix produces the expected output."),verified:O.boolean().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and taken all necessary steps to resolve the issue.
358
+ ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}async function AT($){let Z=await FT($.providerConfig),Q="";for await(let W of Z.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(W.type==="text"){Q+=W.text;continue}if(W.type==="done"&&!W.success&&W.error)throw Error(W.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Q.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Q.trim()}function fT($){try{return JSON.stringify($).length}catch{return String($).length}}async function UB($){let Z=$.context.messages;if(Z.length<2)return;let Q=HB(Z,$.preserveRecentTokens,$.estimateMessageTokens);if(Q<=0||Q>=Z.length)return;let W=Z.slice(0,Q),J=BB(W),X=J>=0?Z3(W[J])?.summary:void 0,Y=J>=0?W.slice(J+1):W;if(Y.length===0)return;let j=GB(W),V=XB(Y),B=FB({previousSummary:X,conversationText:V,fileOps:j});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:W.length,newMessagesToFold:Y.length,preservedMessages:Z.length-Q,previousSummaryChars:X?.length??0,conversationTextChars:V.length,summaryRequestChars:B.length,summaryRequestEstimatedTokens:tW(B.length),newMessagesJsonChars:fT(Y),maxInputTokens:$.context.maxInputTokens,triggerTokens:$.context.triggerTokens});let H=await AT({providerConfig:AB({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),request:B,logger:$.logger});if(!H.trim())return;let G=KB(H,j),K=Z.reduce((L,f)=>L+$.estimateMessageTokens(f),0),F=[fB({summary:G,fileOps:j,tokensBefore:K}),...Z.slice(Q)],A=F.reduce((L,f)=>L+$.estimateMessageTokens(f),0);return $.logger?.debug("Performed agentic compaction",{messagesBefore:Z.length,messagesAfter:F.length,messagesSummarized:Q,messagesPreserved:Z.length-Q,tokensBefore:K,tokensAfter:A,maxInputTokens:$.context.maxInputTokens}),{messages:F}}import{CHARS_PER_TOKEN as UT}from"@cline/shared";function DT($){if(H6($))return;if(typeof $.content==="string"){let Q=$.content.trim();return Q?{...$,content:Q}:void 0}let Z=$.content.filter((Q)=>Q.type!=="text"||Q.text.trim());if(Z.length===0)return;return{...$,content:Z.map((Q)=>Q.type==="text"?{...Q,text:Q.text.trim()}:Q.type==="tool_result"?{...Q,content:$3(Q.content)}:Q)}}function LT($,Z){return $.reduce((Q,W)=>Q+Z(W),0)}function DB($,Z){if($.length<=Z)return $;let Q=`
359
+ ...`,W=Math.max(1,Z-Q.length);return`${$.slice(0,W)}${Q}`}function LB($,Z){let Q=Number.isFinite(Z)?Math.max(1,Z):1,W=Math.max(16,Q*UT);if(typeof $.content==="string"){let Y=DB($.content,W).trim();return{...$,content:Y||"..."}}let J=W,X=$.content.map((Y)=>{if(Y.type!=="text"||J<=0)return Y;let j=DB(Y.text,J).trim();return J-=j.length,{...Y,text:j||"..."}});return{...$,content:X}}function _T($,Z){let Q=jB($),W=FZ($),J=VB($),X=[],Y=0;for(let j=0;j<$.length;j+=1){let V=DT($[j]);if(!V)continue;let B=Z(V);Y+=B,X.push({index:j,message:V,estimatedTokens:B,toolPairIds:zB(V),isFirstUser:j===Q,isLastUser:j===W,isLastAssistant:j===J})}return{candidates:X,totalTokens:Y}}function _B($,Z,Q,W){let J=$[Z],X=J.estimatedTokens;return J.message=Q,J.estimatedTokens=W(Q),J.toolPairIds=zB(Q),J.estimatedTokens-X}function zB($){if(!Array.isArray($.content))return[];let Z=[];for(let Q of $.content)if(Q.type==="tool_use")Z.push(Q.id);else if(Q.type==="tool_result")Z.push(Q.tool_use_id);return Z}function zT($){let Z=new Map;for(let Q of $)for(let W of Q.toolPairIds){let J=Z.get(W);if(J)J.add(Q);else Z.set(W,new Set([Q]))}return Z}function TT($,Z,Q){let W=new Set,J=[Q],X=0;while(X<J.length){let Y=J[X];if(X+=1,Y===void 0||!$.has(Y)||W.has(Y))continue;W.add(Y);for(let j of Y.toolPairIds)for(let V of Z.get(j)??[])if(!W.has(V))J.push(V)}return W}function OT($,Z){let Q=0;for(let W of $){if(Z.has(W))continue;$[Q]=W,Q+=1}$.length=Q}function AZ($,Z,Q,W){let J=new Set($),X=zT($);for(let Y=0;Y<$.length&&W>Q;){if(!Z($[Y])){Y+=1;continue}let j=TT(J,X,$[Y]);if(j.size===0){Y+=1;continue}let V=0;for(let B of j)V+=B.estimatedTokens,J.delete(B);W-=V,OT($,j)}return W}function qT($,Z,Q,W,J){if(Q<=Z)return Q;for(let Y=$.length-1;Y>=0&&Q>Z;Y-=1){let j=$[Y];if(j.isFirstUser)continue;let V=Math.max(WB,j.estimatedTokens-(Q-Z));if(V>=j.estimatedTokens)continue;Q+=_B($,Y,LB(j.message,V),J)}if(Q<=Z)return Q;let X=$.findIndex((Y)=>Y.isFirstUser);if(X>=0){if($[X].estimatedTokens<=W)return Q;while(Q>Z){let j=$[X],V=Math.max(1,j.estimatedTokens-(Q-Z));if(V>=j.estimatedTokens)break;let B=j.estimatedTokens;if(Q+=_B($,X,LB(j.message,V),J),j.estimatedTokens>=B)break}}return Q}function MT($,Z){return JSON.stringify($)!==JSON.stringify(Z)}function RT($){let Z=FZ($);if(Z<0||Z===0&&!G6($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,Z),protectedTail:$.slice(Z)}}function TB($){let Z=Math.max(1,Math.min($.context.targetTokens??Math.floor($.context.triggerTokens*KZ),$.context.maxInputTokens)),{compactable:Q,protectedTail:W}=RT($.context.messages);if(Q.length===0)return;let J=LT(W,$.estimateMessageTokens),X=Math.max(1,Z-J),Y=_T(Q,$.estimateMessageTokens),{candidates:j}=Y;if(j.length===0)return;let V=Y.totalTokens,B=V;B=AZ(j,(F)=>F.message.role==="assistant"&&!F.isLastAssistant,X,B),B=AZ(j,(F)=>F.message.role==="user"&&!F.isFirstUser&&!F.isLastUser,X,B),B=AZ(j,(F)=>F.message.role==="assistant"&&F.isLastAssistant,X,B),B=AZ(j,(F)=>F.message.role==="user"&&F.isLastUser&&!F.isFirstUser,X,B),B=qT(j,X,B,$.context.triggerTokens,$.estimateMessageTokens);let H=[...j.map((F)=>F.message),...W];if(!MT($.context.messages,H))return;let G=V+J,K=B+J;return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:H.length,messagesRemoved:$.context.messages.length-H.length,tokensBefore:G,tokensAfter:K,targetTokens:Z,maxInputTokens:$.context.maxInputTokens}),{messages:H}}var ET=0.5,NT=0.5;function OB($){try{return JSON.stringify($).length}catch{return String($).length}}function K6($){return typeof $==="number"&&Number.isFinite($)&&$>0}function CT($){let Z=[];if(K6($.configMaxInputTokens))Z.push($.configMaxInputTokens);if(K6($.modelMaxInputTokens))Z.push($.modelMaxInputTokens);if(K6($.contextWindow)){Z.push($.contextWindow);let Q=K6($.modelMaxTokens)?$.contextWindow-$.modelMaxTokens:void 0;if(K6(Q)&&Q>=$.contextWindow*ET)Z.push(Q)}return Z.length>0?Math.min(...Z):eV}function wT($){let Z=0,Q=0,W=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type!=="tool_result")continue;let Y=OB(X.content);Z+=1,Q+=Y,W=Math.max(W,Y)}}return{toolResultCount:Z,toolResultSerializedChars:Q,maxToolResultSerializedChars:W}}var PT={basic:({context:$,estimateMessageTokens:Z,logger:Q})=>TB({context:$,estimateMessageTokens:Z,logger:Q}),agentic:({context:$,providerConfig:Z,compaction:Q,mode:W,estimateMessageTokens:J,logger:X})=>UB({context:$,providerConfig:Z,summarizer:Q?.summarizer,preserveRecentTokens:W==="manual"?Math.min(Q?.preserveRecentTokens??eW,$.triggerTokens):Q?.preserveRecentTokens??eW,estimateMessageTokens:J,logger:X})};function ST($){if(typeof $.config.reserveTokens==="number"){let Q=Math.max(0,$.config.reserveTokens),W=Math.max(0,$.maxInputTokens-Q);return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio==="number"){let Q=$.config.thresholdRatio,W=$.maxInputTokens*Q;return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:Q}}let Z=Math.max(0,Math.min($.maxInputTokens-ZB,$.maxInputTokens*$B));return{shouldCompact:$.inputTokens>Z,triggerTokens:Z,thresholdRatio:$.maxInputTokens>0?Z/$.maxInputTokens:0}}function bT($){let Z=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,Z)),W=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*Q)));return{triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}function yT($){let Z=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*NT):Math.floor($.triggerTokens*KZ),Q=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(Z,$.maxInputTokens,Q))}function hT($){let Z=0,Q=!1;for(let W of $)if(W.role==="user")Q=!0;else if(W.role==="assistant"&&Q)Z+=1,Q=!1;return Z}function F6($,Z={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let W=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=YB(),X=Q?.strategy??"basic",Y=PT[X],j=Z.mode??"auto",V=Q?.compact?"custom":X;return async(B)=>{let H=B.apiMessages.reduce((E,w)=>E+J(w),0),G=CT({configMaxInputTokens:Q?.maxInputTokens,modelMaxInputTokens:B.model.info?.maxInputTokens,contextWindow:B.model.info?.contextWindow,modelMaxTokens:B.model.info?.maxTokens}),K=ST({inputTokens:H,maxInputTokens:G,config:{maxInputTokens:Q?.maxInputTokens,reserveTokens:Q?.reserveTokens,thresholdRatio:Q?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:j,strategy:X,iteration:B.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:H,maxInputTokens:G,triggerTokens:K.triggerTokens,thresholdRatio:K.thresholdRatio,shouldCompact:K.shouldCompact,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:OB(B.apiMessages),...wT(B.apiMessages)}),j==="auto"&&!K.shouldCompact)return;let F=j==="manual"?bT({inputTokens:H,maxInputTokens:G,autoTriggerTokens:K.triggerTokens,manualTargetRatio:Z.manualTargetRatio}):K,A=j==="auto"?yT({maxInputTokens:G,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:F.triggerTokens,messagePairCount:hT(B.messages)}):void 0,L={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId,iteration:B.iteration,messages:B.messages,model:B.model,maxInputTokens:G,triggerTokens:F.triggerTokens,targetTokens:A,thresholdRatio:F.thresholdRatio,utilizationRatio:G>0?H/G:0},f=j==="manual"?"manual_compaction":"auto_compaction";B.emitStatusNotice?.(j==="manual"?"compacting":"auto-compacting",{kind:f,reason:f,iteration:B.iteration,triggerTokens:F.triggerTokens,maxInputTokens:G});let D=B.messages.length,U=Date.now(),T=Q?.compact?await Q.compact(L):await Y({context:L,providerConfig:{...W,abortSignal:B.abortSignal},compaction:Q,mode:j,estimateMessageTokens:J,logger:$.logger}),q=Date.now()-U,z=$.sessionId??B.conversationId,_={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId??void 0};if(T?.messages){let E=T.messages.reduce((w,y)=>w+J(y),0);$.logger?.log("Context compaction completed",{severity:"info",strategy:X,maxInputTokens:G,inputTokens:H,afterTokens:E,tokensSaved:H-E,utilizationBefore:`${(H/G*100).toFixed(1)}%`,utilizationAfter:`${(E/G*100).toFixed(1)}%`,thresholdTrigger:`${(F.thresholdRatio*100).toFixed(1)}%`,messagesBefore:D,messagesAfter:T.messages.length,messagesRemoved:D-T.messages.length}),h9($.telemetry,{ulid:z,strategy:V,mode:j,messagesBefore:D,messagesAfter:T.messages.length,messagesRemoved:D-T.messages.length,tokensBefore:H,tokensAfter:E,tokensSaved:H-E,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:q,provider:$.providerId,modelId:$.modelId,..._})}else k9($.telemetry,{ulid:z,strategy:V,mode:j,reason:"no_result",tokensBefore:H,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:q,provider:$.providerId,modelId:$.modelId,..._});return T}}var sH={};N(sH,{zodToJsonSchema:()=>bM,validateWithZod:()=>SM,truncateCommandOutput:()=>Y2,resolveToolRoutingConfig:()=>M8,resolveToolPresetName:()=>l1,resolveCoreSelectedToolIds:()=>yZ,getCoreHeadlessToolNames:()=>k6,getCoreDefaultEnabledToolIds:()=>bZ,getCoreBuiltinToolCatalog:()=>f2,getCoreAcpToolNames:()=>hZ,createWebFetchTool:()=>j3,createWebFetchExecutor:()=>w6,createToolPoliciesWithPreset:()=>qZ,createSubmitAndExitTool:()=>G3,createSkillsTool:()=>V2,createShellTool:()=>M6,createShellExecutor:()=>j2,createSearchTool:()=>Y3,createSearchExecutor:()=>C6,createReadFilesTool:()=>X3,createFileReadExecutor:()=>N6,createEditorTool:()=>B3,createEditorExecutor:()=>E6,createDefaultToolsWithPreset:()=>MZ,createDefaultTools:()=>D$,createDefaultShellExecutor:()=>P6,createDefaultExecutors:()=>O8,createBuiltinTools:()=>U2,createAskQuestionTool:()=>H3,createApplyPatchTool:()=>V3,createApplyPatchExecutor:()=>R6,WebFetchRequestSchema:()=>Q3,ToolPresets:()=>u0,TEAM_TOOL_NAMES:()=>N8,SubmitInputSchema:()=>q6,StructuredCommandInputSchema:()=>J2,SkillsInputSchema:()=>T6,SearchCodebaseInputSchema:()=>U6,RunCommandsInputSchema:()=>D6,ReadFilesInputSchema:()=>f6,ReadFileRequestSchema:()=>m1,MAX_COMMAND_OUTPUT_CHARS:()=>c1,FetchWebContentInputSchema:()=>L6,EditFileInputSchema:()=>_6,DefaultToolNames:()=>U0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>q8,AskQuestionInputSchema:()=>O6,ApplyPatchInputSchema:()=>z6,ALL_DEFAULT_TOOL_NAMES:()=>X$});import{validateWithZod as SM,zodToJsonSchema as bM}from"@cline/shared";_0();import{createTool as f$,validateWithZod as U$,zodToJsonSchema as u1}from"@cline/shared";var MB="__clineInternalTelemetry";function RB($){let Z=$?.__clineInternalTelemetry;return Z&&typeof Z==="object"&&"capture"in Z&&typeof Z.capture==="function"?Z:void 0}import{spawn as IB}from"node:child_process";import{StringDecoder as gT}from"node:string_decoder";import{getDefaultShell as mT,getShellArgs as vT}from"@cline/shared";import{validateWithZod as IT}from"@cline/shared";import{z as O}from"zod";var A$=6000,A6=O.string().describe("The absolute file path of a text file to read content from"),EB=O.object({start_line:O.number().int().positive().nullable().optional().describe("Optional one-based starting line number to read from; use null or omit for the start of the file"),end_line:O.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit to read to the end of the file or the read cap, whichever comes first")}).describe("Optional inclusive one-based file line range"),m1=O.object({path:A6,start_line:EB.shape.start_line,end_line:EB.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),f6=O.object({files:O.array(m1).describe("Array of file read requests. Omit start_line/end_line or set them to null to read from the start; provide integers to return only that inclusive one-based line range. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),NB=O.union([f6,m1,O.array(m1),O.array(O.string()),O.string(),O.object({files:O.array(O.union([A6,m1]))}),O.object({files:m1}),O.object({files:A6}),O.object({file_paths:O.array(A6)}),O.object({file_paths:O.string()}),O.object({paths:O.array(O.union([A6,m1]))}),O.object({paths:m1}),O.object({paths:O.string()})]),U6=O.object({queries:O.array(O.string()).describe("Array of regex search queries to execute")}),CB=O.union([U6,O.array(O.string()),O.string(),O.object({queries:O.string()})]),fZ=O.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${A$*2} characters) to avoid timeouts.`),J2=O.object({command:O.string().min(1).describe("The executable to run directly without shell parsing."),args:O.array(O.string()).optional().describe("Optional argv list passed directly to the executable.")}),wB=O.union([fZ,J2]),D6=O.object({commands:O.array(fZ).describe("Array of complete shell command strings to execute.")}),kT=O.object({commands:O.array(wB)}),PB=O.union([D6,kT,O.object({commands:wB}),O.array(J2),J2,O.object({command:fZ}),O.object({cmd:fZ}),O.array(O.string()),O.string()]),Q3=O.object({url:O.string().describe("The URL to fetch"),prompt:O.string().min(2).describe("Analysis prompt for the fetched content")}),L6=O.object({requests:O.array(Q3).describe("Array of the URLs for the web fetch requests")}),_6=O.object({path:O.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:O.string().nullable().optional().describe(`Exact text to replace (must match exactly once). Omit this when creating a missing file or inserting via insert_line. Keep this at or below ${A$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:O.string().describe(`The new content to write when creating a missing file, the replacement text for edits, or the inserted text when insert_line is provided. Keep this at or below ${A$} characters when possible; for large edits, use multiple calls with small chunks of old_text and new_text to iteratively edit the file.`),insert_line:O.number().int().nullable().optional().describe("Optional positive one-based boundary line. When provided, the tool inserts new_text before that line instead of performing a replacement edit; use line_count + 1 to append at EOF.")}).describe("Edit a text file by replacing old_text with new_text, create the file with new_text if it does not exist, or insert new_text at insert_line when insert_line is provided. Prefer using this tool for file edits over shell commands. IMPORTANT: large edits can time out, so use small chunks and multiple calls when possible."),z6=O.object({input:O.string().min(1).describe("The freeform apply_patch payload in the canonical patch grammar (e.g *** Begin Patch, *** Update File:, @@, and *** End Patch).")}).describe("Modify or create a text file by applying patches using the canonical apply_patch diff grammar. Prefer sending the patch body directly rather than wrapping it in shell syntax. IMPORTANT: large patches can time out, so use small chunks and multiple calls when possible."),SB=O.union([z6,O.string()]),T6=O.object({skill:O.string().min(1).describe("Name of the skill to execute."),args:O.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),O6=O.object({question:O.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:O.array(O.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),q6=O.object({summary:O.string().min(10).describe("Summarization of the investigation, steps taken, and resolution status to submit at the end of the session. Before submitting, read the problem again along with any provided test's assertions carefully and confirm your fix produces the expected output."),verified:O.boolean().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and taken all necessary steps to resolve the issue.
360
360
  'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
361
- 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 X2($){if($ instanceof Error)return $.message;return String($)}function bH($){if(typeof $.old_text==="string"&&$.old_text.length>A$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${A$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>A$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${A$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class D8 extends Error{timeoutMs;constructor($,Z){super($);this.name="TimeoutError",this.timeoutMs=Z}}function v1($,Z,Q){return Promise.race([$,new Promise((W,J)=>{setTimeout(()=>J(new D8(Q,Z)),Z)})])}function UZ($){let{path:Z,start_line:Q,end_line:W}=$;if(Q==null&&W==null)return Z;return`${Z}:${Q??1}-${W??"EOF"}`}function yH($){let{start_line:Z,end_line:Q}=$;if(Z==null||Q==null||Z<=Q)return null;return`start_line must be less than or equal to end_line (received start_line: ${Z}, end_line: ${Q})`}function hH($){let Z=gT(PH,$);if(typeof Z==="string")return[Z];if(Array.isArray(Z))return Z;if("commands"in Z)return Array.isArray(Z.commands)?Z.commands:[Z.commands];if("command"in Z)return"args"in Z?[Z]:[Z.command];if("cmd"in Z)return[Z.cmd];return[Z]}function mT($){if(typeof $==="string")return $;let Z=$.args??[];if(Z.length===0)return $.command;let Q=Z.map((W)=>/[\s"]/u.test(W)?JSON.stringify(W):W);return`${$.command} ${Q.join(" ")}`}var W3=200;function kH($){let Z=mT($);if(Z.length<=W3)return Z;let Q=Z.length-W3;return`${Z.slice(0,W3)} ... [command truncated: ${Q} more chars; full command is in the tool call input]`}var c1=48000;function Y2($,Z={}){let Q=Z.maxChars??48000,W=Z.totalChars??$.length;if($.length<=Q&&W<=Q)return $;let J=Math.ceil(Q/2),X=Math.max(1,Q-J);return`${$.slice(0,J)}
361
+ 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 X2($){if($ instanceof Error)return $.message;return String($)}function bB($){if(typeof $.old_text==="string"&&$.old_text.length>A$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${A$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>A$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${A$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class D8 extends Error{timeoutMs;constructor($,Z){super($);this.name="TimeoutError",this.timeoutMs=Z}}function v1($,Z,Q){return Promise.race([$,new Promise((W,J)=>{setTimeout(()=>J(new D8(Q,Z)),Z)})])}function UZ($){let{path:Z,start_line:Q,end_line:W}=$;if(Q==null&&W==null)return Z;return`${Z}:${Q??1}-${W??"EOF"}`}function yB($){let{start_line:Z,end_line:Q}=$;if(Z==null||Q==null||Z<=Q)return null;return`start_line must be less than or equal to end_line (received start_line: ${Z}, end_line: ${Q})`}function hB($){let Z=IT(PB,$);if(typeof Z==="string")return[Z];if(Array.isArray(Z))return Z;if("commands"in Z)return Array.isArray(Z.commands)?Z.commands:[Z.commands];if("command"in Z)return"args"in Z?[Z]:[Z.command];if("cmd"in Z)return[Z.cmd];return[Z]}function xT($){if(typeof $==="string")return $;let Z=$.args??[];if(Z.length===0)return $.command;let Q=Z.map((W)=>/[\s"]/u.test(W)?JSON.stringify(W):W);return`${$.command} ${Q.join(" ")}`}var W3=200;function kB($){let Z=xT($);if(Z.length<=W3)return Z;let Q=Z.length-W3;return`${Z.slice(0,W3)} ... [command truncated: ${Q} more chars; full command is in the tool call input]`}var c1=48000;function Y2($,Z={}){let Q=Z.maxChars??48000,W=Z.totalChars??$.length;if($.length<=Q&&W<=Q)return $;let J=Math.ceil(Q/2),X=Math.max(1,Q-J);return`${$.slice(0,J)}
362
362
  [... output truncated: ${W} chars total. Refine the command (grep, head, tail) to view the elided middle ...]
363
- `+$.slice(-X)}var L8=2000,J3=2000,DZ=48000,_8=48000;class LZ extends Error{exitCode;output;constructor($,Z){super(`Command exited with code ${$}`);this.exitCode=$;this.output=Z;this.name="CommandExitError"}}function xH($){let Z=Math.ceil($/2),Q=Math.max(1,$-Z),W=new vT("utf8"),J="",X="",Y=0,j=(V)=>{if(!V)return;Y+=V.length;let H=Z-J.length;if(H>0){J+=V.slice(0,H),X=(X+V.slice(H)).slice(-Q);return}X=(X+V).slice(-Q)};return{append(V){j(W.write(V))},snapshot(){return j(W.end()),{text:J+X,totalChars:Y,dropped:Y>J.length+X.length}}}}function dT($,Z,Q,W,J){return new Promise((X,Y)=>{let j=process.platform==="win32",V=IH($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!j,windowsHide:!0}),H=V.pid,B=xH(W),G=xH(W),K=!1,F=!1,A=(q)=>{if(F)return;F=!0,q()},L=()=>{if(!H)return;if(j){IH("taskkill",["/pid",String(H),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-H,"SIGKILL")}catch{V.kill("SIGKILL")}},f=(q)=>{K=!0,L(),A(()=>Y(q))},D=setTimeout(()=>f(new D8(`Command timed out after ${Q}ms`,Q)),Q),U=()=>f(Error("Command was aborted"));if(Z.signal)Z.signal.addEventListener("abort",U);let T=()=>{clearTimeout(D),Z.signal?.removeEventListener("abort",U)};V.stdout?.on("data",(q)=>{B.append(q)}),V.stderr?.on("data",(q)=>{G.append(q)}),V.on("close",(q)=>{if(T(),K)return;let z=B.snapshot(),_=G.snapshot();if(q!==0){let E=q??1,C=J?z.text+(_.text?`
363
+ `+$.slice(-X)}var L8=2000,J3=2000,DZ=48000,_8=48000;class LZ extends Error{exitCode;output;constructor($,Z){super(`Command exited with code ${$}`);this.exitCode=$;this.output=Z;this.name="CommandExitError"}}function xB($){let Z=Math.ceil($/2),Q=Math.max(1,$-Z),W=new gT("utf8"),J="",X="",Y=0,j=(V)=>{if(!V)return;Y+=V.length;let B=Z-J.length;if(B>0){J+=V.slice(0,B),X=(X+V.slice(B)).slice(-Q);return}X=(X+V).slice(-Q)};return{append(V){j(W.write(V))},snapshot(){return j(W.end()),{text:J+X,totalChars:Y,dropped:Y>J.length+X.length}}}}function cT($,Z,Q,W,J){return new Promise((X,Y)=>{let j=process.platform==="win32",V=IB($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!j,windowsHide:!0}),B=V.pid,H=xB(W),G=xB(W),K=!1,F=!1,A=(q)=>{if(F)return;F=!0,q()},L=()=>{if(!B)return;if(j){IB("taskkill",["/pid",String(B),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-B,"SIGKILL")}catch{V.kill("SIGKILL")}},f=(q)=>{K=!0,L(),A(()=>Y(q))},D=setTimeout(()=>f(new D8(`Command timed out after ${Q}ms`,Q)),Q),U=()=>f(Error("Command was aborted"));if(Z.signal)Z.signal.addEventListener("abort",U);let T=()=>{clearTimeout(D),Z.signal?.removeEventListener("abort",U)};V.stdout?.on("data",(q)=>{H.append(q)}),V.stderr?.on("data",(q)=>{G.append(q)}),V.on("close",(q)=>{if(T(),K)return;let z=H.snapshot(),_=G.snapshot();if(q!==0){let E=q??1,w=J?z.text+(_.text?`
364
364
  [stderr]
365
- ${_.text}`:""):z.text,y=z.dropped||J&&_.dropped,l=J?z.totalChars+_.totalChars:z.totalChars;if(y||C.length>W)C=Y2(C,{maxChars:W,totalChars:l});let o=C.length>0?`[Command exited with code ${E}]
366
- ${C}`:`[Command exited with code ${E}]`;A(()=>Y(new LZ(E,o)))}else{let E=J?z.text+(_.text?`
365
+ ${_.text}`:""):z.text,y=z.dropped||J&&_.dropped,l=J?z.totalChars+_.totalChars:z.totalChars;if(y||w.length>W)w=Y2(w,{maxChars:W,totalChars:l});let o=w.length>0?`[Command exited with code ${E}]
366
+ ${w}`:`[Command exited with code ${E}]`;A(()=>Y(new LZ(E,o)))}else{let E=J?z.text+(_.text?`
367
367
  [stderr]
368
- ${_.text}`:""):z.text;if(z.dropped||J&&_.dropped||E.length>W){let y=J?z.totalChars+_.totalChars:z.totalChars;E=Y2(E,{maxChars:W,totalChars:y})}A(()=>X(E))}}),V.on("error",(q)=>{T(),A(()=>Y(Error(`Failed to execute command: ${q.message}`)))})})}function j2($={}){let{shell:Z=cT(process.platform),timeoutMs:Q=30000,env:W={},combineOutput:J=!0}=$,X=$.maxOutputChars??$.maxOutputBytes??c1;return(Y,j,V)=>{let H=typeof Y!=="string";return dT({executable:H?Y.command:Z,args:H?Y.args??[]:uT(Z,Y),cwd:j,env:W},V,Q,X,J)}}function gH($,Z){let Q=$.metadata?.[Z];return typeof Q==="string"?Q:void 0}function lT($,Z){Pj(RH($.metadata),{tool_name:"run_commands",effective_timeout_ms:Z.effectiveTimeoutMs,timeout_source:Z.timeoutSource,command_count:Z.commandCount,duration_ms:Z.durationMs,ulid:$.sessionId,mode:gH($,"mode"),source:gH($,"source"),session_id:$.sessionId,agent_id:$.agentId,conversation_id:$.conversationId,run_id:$.runId,iteration:$.iteration,tool_call_id:$.toolCallId})}function pT($){let Z=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return Z?.[1]??Z?.[2]??Z?.[3]}function rT($){let Z=[];for(let Q=0;Q<$.length;Q+=1){let W=$[Q],J=pT(W);if(!J){Z.push(W);continue}let X=$.findIndex((j,V)=>V>Q&&j.trim()===J);if(X===-1){Z.push(W);continue}let Y=[W];while(Q<X){Q+=1;let j=$[Q];Y.push(j)}Z.push(Y.join(`
369
- `))}return Z}function iT($){let Z=[],Q=[],W=()=>{if(Q.length>0)Z.push(...rT(Q)),Q=[]};for(let J of $){if(typeof J==="string"){Q.push(J);continue}W(),Z.push(J)}return W(),Z}async function nT($,Z){let{executor:Q,cwd:W,context:J,timeoutMs:X,timeoutSource:Y}=Z;return Promise.all($.map(async(j)=>{let V=Date.now(),H=kH(j);try{let B=await v1(Q(j,W,J),X,`Command timed out after ${X}ms`);return{query:H,result:B,success:!0}}catch(B){if(B instanceof D8)lT(J,{effectiveTimeoutMs:B.timeoutMs,timeoutSource:Y,commandCount:$.length,durationMs:Date.now()-V});if(B instanceof LZ)return{query:H,result:B.output,error:B.message,success:!1};let G=X2(B);return{query:H,result:"",error:`Command failed: ${G}`,success:!1}}}))}function X3($,Z={}){let Q=Z.fileReadTimeoutMs??1e4;return f$({name:"read_files",description:`Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. When you already know multiple files you need, read them together in one call, and call this tool in the same response as other independent tool calls. Each read returns at most ${L8} lines / ~${Math.round(DZ/1024)}k characters; longer files report their total line count, page through them with start_line/end_line. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. `,inputSchema:u1(f6),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(W,J)=>{let X=U$(NH,W),Y;if(typeof X==="string")Y=[{path:X}];else if(Array.isArray(X))Y=X.map((j)=>typeof j==="string"?{path:j}:j);else if("files"in X)Y=(Array.isArray(X.files)?X.files:[X.files]).map((V)=>typeof V==="string"?{path:V}:V);else if("file_paths"in X)Y=(Array.isArray(X.file_paths)?X.file_paths:[X.file_paths]).map((V)=>({path:V}));else if("paths"in X)Y=(Array.isArray(X.paths)?X.paths:[X.paths]).map((V)=>typeof V==="string"?{path:V}:V);else Y=[X];return Promise.all(Y.map(async(j)=>{let V=yH(j);if(V)return{query:UZ(j),result:"",error:`Invalid file range: ${V}`,success:!1};try{let H=await v1($(j,J),Q,`File read timed out after ${Q}ms`);return{query:UZ(j),result:H,success:!0}}catch(H){let B=X2(H);return{query:UZ(j),result:"",error:`Error reading file: ${B}`,success:!1}}}))}})}function Y3($,Z={}){let Q=Z.searchTimeoutMs??30000,W=Z.cwd??process.cwd();return f$({name:"search_codebase",description:`Perform regex pattern searches across the codebase. Supports multiple parallel searches. When several search patterns could be useful and do not depend on each other, run them together in one call, and call this tool in the same response as other independent tool calls. Use for finding code patterns, function definitions, class names, imports, etc. Output beyond ~${Math.round(_8/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:u1(U6),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(J,X)=>{let Y=U$(wH,J),j=Array.isArray(Y)?Y:typeof Y==="object"?Array.isArray(Y.queries)?Y.queries:[Y.queries]:[Y];return Promise.all(j.map(async(V)=>{try{let H=await v1($(V,W,X),Q,`Search timed out after ${Q}ms`);return{query:V,result:H,success:!0}}catch(H){let B=X2(H);return{query:V,result:"",error:`Search failed: ${B}`,success:!1}}}))}})}var mH="Use for listing files, checking git status, running builds, executing tests, etc. Commands must be non-interactive. Commands that require follow-up input like pagers should be skipped or used with supported flags/env (e.g. git --no-pager, --non-interactive) to bypass the interaction steps. ";function M6($,Z={}){let Q=Z.bashTimeoutMs??30000,W=Z.bashTimeoutMs===void 0?"default_setting":"configured_setting",J=Z.cwd??process.cwd(),X=process.platform==="win32";return f$({name:"run_commands",description:X?"Run non-interactive shell commands from the root of the workspace in Windows environment. "+mH+`Output beyond ~${Math.round(c1/1000)}k characters is middle-truncated (start and end preserved); filter output when you need specific sections. Commands run through PowerShell; quote paths and arguments for PowerShell and use ';' to sequence commands. Include multiple commands in the same call when they are independent and safe to run concurrently. When independent reads, searches, or edits are also needed, call those tools in the same response.`:"Run non-interactive shell commands from the root of the workspace. "+mH+`Commands should be properly shell-escaped and targeted to avoid error or timeout. Include multiple commands in the same call when they are independent complete shell commands and safe to run concurrently; multiline scripts and heredocs must be a single command string. When independent reads, searches, or edits are also needed, call those tools in the same response. Output beyond ~${Math.round(c1/1000)}k characters is middle-truncated (start and end preserved); pipe through grep/head/tail when you need specific sections of large output. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.`,inputSchema:u1(D6),timeoutMs:Q*2,retryable:!1,maxRetries:0,execute:async(Y,j)=>{let V=iT(hH(Y));return nT(V,{executor:$,cwd:J,context:j,timeoutMs:Q,timeoutSource:W})}})}function j3($,Z={}){let Q=Z.webFetchTimeoutMs??30000;return f$({name:"fetch_web_content",description:"Fetch content from URLs and analyze them using the provided prompts. Use for retrieving documentation, API references, or any web content. Each request includes a URL and a prompt describing what information to extract. Fetch independent URLs together in one call, and call this tool in the same response as other independent tool calls.",inputSchema:u1(L6),timeoutMs:Q*2,retryable:!0,maxRetries:2,execute:async(W,J)=>{let X=U$(L6,W);return Promise.all(X.requests.map(async(Y)=>{try{let j=await v1($(Y.url,Y.prompt,J),Q,`Web fetch timed out after ${Q}ms`);return{query:Y.url,result:j,success:!0}}catch(j){let V=X2(j);return{query:Y.url,result:"",error:`Error fetching web content: ${V}`,success:!1}}}))}})}var aT=`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:
368
+ ${_.text}`:""):z.text;if(z.dropped||J&&_.dropped||E.length>W){let y=J?z.totalChars+_.totalChars:z.totalChars;E=Y2(E,{maxChars:W,totalChars:y})}A(()=>X(E))}}),V.on("error",(q)=>{T(),A(()=>Y(Error(`Failed to execute command: ${q.message}`)))})})}function j2($={}){let{shell:Z=mT(process.platform),timeoutMs:Q=30000,env:W={},combineOutput:J=!0}=$,X=$.maxOutputChars??$.maxOutputBytes??c1;return(Y,j,V)=>{let B=typeof Y!=="string";return cT({executable:B?Y.command:Z,args:B?Y.args??[]:vT(Z,Y),cwd:j,env:W},V,Q,X,J)}}function gB($,Z){let Q=$.metadata?.[Z];return typeof Q==="string"?Q:void 0}function uT($,Z){Pj(RB($.metadata),{tool_name:"run_commands",effective_timeout_ms:Z.effectiveTimeoutMs,timeout_source:Z.timeoutSource,command_count:Z.commandCount,duration_ms:Z.durationMs,ulid:$.sessionId,mode:gB($,"mode"),source:gB($,"source"),session_id:$.sessionId,agent_id:$.agentId,conversation_id:$.conversationId,run_id:$.runId,iteration:$.iteration,tool_call_id:$.toolCallId})}function dT($){let Z=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return Z?.[1]??Z?.[2]??Z?.[3]}function lT($){let Z=[];for(let Q=0;Q<$.length;Q+=1){let W=$[Q],J=dT(W);if(!J){Z.push(W);continue}let X=$.findIndex((j,V)=>V>Q&&j.trim()===J);if(X===-1){Z.push(W);continue}let Y=[W];while(Q<X){Q+=1;let j=$[Q];Y.push(j)}Z.push(Y.join(`
369
+ `))}return Z}function pT($){let Z=[],Q=[],W=()=>{if(Q.length>0)Z.push(...lT(Q)),Q=[]};for(let J of $){if(typeof J==="string"){Q.push(J);continue}W(),Z.push(J)}return W(),Z}async function rT($,Z){let{executor:Q,cwd:W,context:J,timeoutMs:X,timeoutSource:Y}=Z;return Promise.all($.map(async(j)=>{let V=Date.now(),B=kB(j);try{let H=await v1(Q(j,W,J),X,`Command timed out after ${X}ms`);return{query:B,result:H,success:!0}}catch(H){if(H instanceof D8)uT(J,{effectiveTimeoutMs:H.timeoutMs,timeoutSource:Y,commandCount:$.length,durationMs:Date.now()-V});if(H instanceof LZ)return{query:B,result:H.output,error:H.message,success:!1};let G=X2(H);return{query:B,result:"",error:`Command failed: ${G}`,success:!1}}}))}function X3($,Z={}){let Q=Z.fileReadTimeoutMs??1e4;return f$({name:"read_files",description:`Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. When you already know multiple files you need, read them together in one call, and call this tool in the same response as other independent tool calls. Each read returns at most ${L8} lines / ~${Math.round(DZ/1024)}k characters; longer files report their total line count, page through them with start_line/end_line. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. `,inputSchema:u1(f6),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(W,J)=>{let X=U$(NB,W),Y;if(typeof X==="string")Y=[{path:X}];else if(Array.isArray(X))Y=X.map((j)=>typeof j==="string"?{path:j}:j);else if("files"in X)Y=(Array.isArray(X.files)?X.files:[X.files]).map((V)=>typeof V==="string"?{path:V}:V);else if("file_paths"in X)Y=(Array.isArray(X.file_paths)?X.file_paths:[X.file_paths]).map((V)=>({path:V}));else if("paths"in X)Y=(Array.isArray(X.paths)?X.paths:[X.paths]).map((V)=>typeof V==="string"?{path:V}:V);else Y=[X];return Promise.all(Y.map(async(j)=>{let V=yB(j);if(V)return{query:UZ(j),result:"",error:`Invalid file range: ${V}`,success:!1};try{let B=await v1($(j,J),Q,`File read timed out after ${Q}ms`);return{query:UZ(j),result:B,success:!0}}catch(B){let H=X2(B);return{query:UZ(j),result:"",error:`Error reading file: ${H}`,success:!1}}}))}})}function Y3($,Z={}){let Q=Z.searchTimeoutMs??30000,W=Z.cwd??process.cwd();return f$({name:"search_codebase",description:`Perform regex pattern searches across the codebase. Supports multiple parallel searches. When several search patterns could be useful and do not depend on each other, run them together in one call, and call this tool in the same response as other independent tool calls. Use for finding code patterns, function definitions, class names, imports, etc. Output beyond ~${Math.round(_8/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:u1(U6),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(J,X)=>{let Y=U$(CB,J),j=Array.isArray(Y)?Y:typeof Y==="object"?Array.isArray(Y.queries)?Y.queries:[Y.queries]:[Y];return Promise.all(j.map(async(V)=>{try{let B=await v1($(V,W,X),Q,`Search timed out after ${Q}ms`);return{query:V,result:B,success:!0}}catch(B){let H=X2(B);return{query:V,result:"",error:`Search failed: ${H}`,success:!1}}}))}})}var mB="Use for listing files, checking git status, running builds, executing tests, etc. Commands must be non-interactive. Commands that require follow-up input like pagers should be skipped or used with supported flags/env (e.g. git --no-pager, --non-interactive) to bypass the interaction steps. ";function M6($,Z={}){let Q=Z.bashTimeoutMs??30000,W=Z.bashTimeoutMs===void 0?"default_setting":"configured_setting",J=Z.cwd??process.cwd(),X=process.platform==="win32";return f$({name:"run_commands",description:X?"Run non-interactive shell commands from the root of the workspace in Windows environment. "+mB+`Output beyond ~${Math.round(c1/1000)}k characters is middle-truncated (start and end preserved); filter output when you need specific sections. Commands run through PowerShell; quote paths and arguments for PowerShell and use ';' to sequence commands. Include multiple commands in the same call when they are independent and safe to run concurrently. When independent reads, searches, or edits are also needed, call those tools in the same response.`:"Run non-interactive shell commands from the root of the workspace. "+mB+`Commands should be properly shell-escaped and targeted to avoid error or timeout. Include multiple commands in the same call when they are independent complete shell commands and safe to run concurrently; multiline scripts and heredocs must be a single command string. When independent reads, searches, or edits are also needed, call those tools in the same response. Output beyond ~${Math.round(c1/1000)}k characters is middle-truncated (start and end preserved); pipe through grep/head/tail when you need specific sections of large output. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.`,inputSchema:u1(D6),timeoutMs:Q*2,retryable:!1,maxRetries:0,execute:async(Y,j)=>{let V=pT(hB(Y));return rT(V,{executor:$,cwd:J,context:j,timeoutMs:Q,timeoutSource:W})}})}function j3($,Z={}){let Q=Z.webFetchTimeoutMs??30000;return f$({name:"fetch_web_content",description:"Fetch content from URLs and analyze them using the provided prompts. Use for retrieving documentation, API references, or any web content. Each request includes a URL and a prompt describing what information to extract. Fetch independent URLs together in one call, and call this tool in the same response as other independent tool calls.",inputSchema:u1(L6),timeoutMs:Q*2,retryable:!0,maxRetries:2,execute:async(W,J)=>{let X=U$(L6,W);return Promise.all(X.requests.map(async(Y)=>{try{let j=await v1($(Y.url,Y.prompt,J),Q,`Web fetch timed out after ${Q}ms`);return{query:Y.url,result:j,success:!0}}catch(j){let V=X2(j);return{query:Y.url,result:"",error:`Error fetching web content: ${V}`,success:!1}}}))}})}var iT=`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:
370
370
 
371
371
  *** Begin Patch
372
372
  *** Update File: path/to/file.ts
@@ -402,48 +402,48 @@ Example:
402
402
  </div>
403
403
  );
404
404
  }
405
- *** End Patch`;function V3($,Z={}){let Q=Z.applyPatchTimeoutMs??30000,W=Z.cwd??process.cwd();return f$({name:"apply_patch",description:aT,inputSchema:u1(z6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(J,X)=>{let Y=U$(SH,J),j=typeof Y==="string"?Y:Y.input;try{return{query:"apply_patch",result:await v1($({input:j},W,X),Q,`apply_patch timed out after ${Q}ms`),success:!0}}catch(V){return{query:"apply_patch",result:"",error:`apply_patch failed: ${X2(V)}`,success:!1}}}})}function H3($,Z={}){let Q=Z.editorTimeoutMs??30000,W=Z.cwd??process.cwd();return f$({name:"editor",description:"An editor for controlled filesystem edits on the text file at the provided path. Provide `insert_line` to insert `new_text` at a specific line number. Otherwise, the tool replaces `old_text` with `new_text`, or creates the file with `new_text` if file does not exist. Use this tool for making small, precise edits to existing files or creating new files over shell commands. If several edits to different files or non-overlapping regions are already known, emit multiple editor tool calls in the same response instead of serializing them across turns.",inputSchema:u1(_6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(J,X)=>{let Y=U$(_6,J),j=Y.insert_line==null?"edit":"insert",V=bH(Y);if(V)return{query:`${j}:${Y.path}`,result:"",error:V,success:!1};try{let H=await v1($(Y,W,X),Q,`Editor operation timed out after ${Q}ms`);return{query:`${j}:${Y.path}`,result:H,success:!0}}catch(H){let B=X2(H);return{query:`${j}:${Y.path}`,result:"",error:`Editor operation failed: ${B}`,success:!1}}}})}function V2($,Z={}){let Q=Z.skillsTimeoutMs??15000,W='Execute a skill within the main conversation. When users ask you to perform tasks, check if any available skills match. When users reference a slash command, invoke it with this tool. Input: `skill` (required) and optional `args`. Example: `skill: "pdf"`, `skill: "commit", args: "-m \\"Fix bug\\""`, `skill: "review-pr", args: "123"`, `skill: "ms-office-suite:pdf"`. When a skill matches the user\'s request, invoking this tool is a blocking requirement before any other response. Never mention a skill without invoking this tool.',J=f$({name:"skills",description:W,inputSchema:u1(T6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(X,Y)=>{let j=U$(T6,X);return v1($(j.skill,j.args||void 0,Y),Q,`Skills operation timed out after ${Q}ms`)}});return Object.defineProperty(J,"description",{get(){let X=$.configuredSkills?.filter((Y)=>!Y.disabled).map((Y)=>Y.name);if(X&&X.length>0)return`${W} Available skills: ${X.join(", ")}.`;return W},enumerable:!0,configurable:!0}),J}function B3($){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:u1(O6),retryable:!1,maxRetries:0,execute:async(Z,Q)=>{let W=U$(O6,Z);return $(W.question,W.options,Q)}}}function G3($,Z={}){let Q=Z.submitTimeoutMs??15000;return f$({name:"submit_and_exit",description:"Submit the final answer and exit the conversation. For example, submit a summary of the investigation and confirm the issue is resolved. You should only submit once all necessary steps are completed. 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:u1(q6),lifecycle:{completesRun:!0},timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(W,J)=>{let X=U$(q6,W);return v1($(X.summary,X.verified,J),Q,`submit_and_exit timed out after ${Q}ms`)}})}function D$($){let{executors:Z,enableReadFiles:Q=!0,enableSearch:W=!0,enableBash:J=!0,enableWebFetch:X=!0,enableApplyPatch:Y=!1,enableEditor:j=!0,enableSkills:V=!0,enableAskQuestion:H=!0,enableSubmitAndExit:B=!1,...G}=$,K=[];if(Q&&Z.readFile)K.push(X3(Z.readFile,G));if(W&&Z.search)K.push(Y3(Z.search,G));if(J&&Z.bash)K.push(M6(Z.bash,G));if(X&&Z.webFetch)K.push(j3(Z.webFetch,G));if(j&&Z.editor)K.push(H3(Z.editor,G));else if(Y&&Z.applyPatch)K.push(V3(Z.applyPatch,G));if(V&&Z.skills)K.push(V2(Z.skills,G));let F=B?Z.submit:void 0;if(H&&Z.askQuestion&&!F)K.push(B3(Z.askQuestion));if(F)K.push(G3(F,G));return K}import*as v0 from"node:fs/promises";import*as c0 from"node:path";var d={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},cH=["%%bash","apply_patch","EOF","```"];class V0 extends Error{constructor($){super($);this.name="DiffError"}}function m0($){let Z={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(Q)=>Z[Q]??Q).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class K3{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor($,Z){this.lines=$;this.currentFiles=Z}parse(){this.skipBeginSentinel();while(this.hasMoreLines()&&!this.isEndMarker())this.parseNextAction();if(this.patch.warnings?.length===0)delete this.patch.warnings;return{patch:this.patch,fuzz:this.fuzz}}addWarning($){if(!this.patch.warnings)this.patch.warnings=[];this.patch.warnings.push($)}skipBeginSentinel(){if(this.lines[this.index]?.startsWith(d.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(d.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(d.UPDATE)){this.parseUpdate($.substring(d.UPDATE.length).trim());return}if($?.startsWith(d.DELETE)){this.parseDelete($.substring(d.DELETE.length).trim());return}if($?.startsWith(d.ADD)){this.parseAdd($.substring(d.ADD.length).trim());return}throw new V0(`Unknown line while parsing: ${$}`)}checkDuplicate($,Z){if($ in this.patch.actions)throw new V0(`Duplicate ${Z} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let Z=this.lines[this.index]?.startsWith(d.MOVE)?(this.lines[this.index++]??"").substring(d.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new V0(`Update File Error: Missing File: ${$}`);let Q=this.currentFiles[$]??"",W=this.parseUpdateFile(Q,$);W.movePath=Z,this.patch.actions[$]=W,this.currentPath=void 0}parseUpdateFile($,Z){let Q={type:"update",chunks:[]},W=$.split(`
405
+ *** End Patch`;function V3($,Z={}){let Q=Z.applyPatchTimeoutMs??30000,W=Z.cwd??process.cwd();return f$({name:"apply_patch",description:iT,inputSchema:u1(z6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(J,X)=>{let Y=U$(SB,J),j=typeof Y==="string"?Y:Y.input;try{return{query:"apply_patch",result:await v1($({input:j},W,X),Q,`apply_patch timed out after ${Q}ms`),success:!0}}catch(V){return{query:"apply_patch",result:"",error:`apply_patch failed: ${X2(V)}`,success:!1}}}})}function B3($,Z={}){let Q=Z.editorTimeoutMs??30000,W=Z.cwd??process.cwd();return f$({name:"editor",description:"An editor for controlled filesystem edits on the text file at the provided path. Provide `insert_line` to insert `new_text` at a specific line number. Otherwise, the tool replaces `old_text` with `new_text`, or creates the file with `new_text` if file does not exist. Use this tool for making small, precise edits to existing files or creating new files over shell commands. If several edits to different files or non-overlapping regions are already known, emit multiple editor tool calls in the same response instead of serializing them across turns.",inputSchema:u1(_6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(J,X)=>{let Y=U$(_6,J),j=Y.insert_line==null?"edit":"insert",V=bB(Y);if(V)return{query:`${j}:${Y.path}`,result:"",error:V,success:!1};try{let B=await v1($(Y,W,X),Q,`Editor operation timed out after ${Q}ms`);return{query:`${j}:${Y.path}`,result:B,success:!0}}catch(B){let H=X2(B);return{query:`${j}:${Y.path}`,result:"",error:`Editor operation failed: ${H}`,success:!1}}}})}function V2($,Z={}){let Q=Z.skillsTimeoutMs??15000,W='Execute a skill within the main conversation. When users ask you to perform tasks, check if any available skills match. When users reference a slash command, invoke it with this tool. Input: `skill` (required) and optional `args`. Example: `skill: "pdf"`, `skill: "commit", args: "-m \\"Fix bug\\""`, `skill: "review-pr", args: "123"`, `skill: "ms-office-suite:pdf"`. When a skill matches the user\'s request, invoking this tool is a blocking requirement before any other response. Never mention a skill without invoking this tool.',J=f$({name:"skills",description:W,inputSchema:u1(T6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(X,Y)=>{let j=U$(T6,X);return v1($(j.skill,j.args||void 0,Y),Q,`Skills operation timed out after ${Q}ms`)}});return Object.defineProperty(J,"description",{get(){let X=$.configuredSkills?.filter((Y)=>!Y.disabled).map((Y)=>Y.name);if(X&&X.length>0)return`${W} Available skills: ${X.join(", ")}.`;return W},enumerable:!0,configurable:!0}),J}function H3($){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:u1(O6),retryable:!1,maxRetries:0,execute:async(Z,Q)=>{let W=U$(O6,Z);return $(W.question,W.options,Q)}}}function G3($,Z={}){let Q=Z.submitTimeoutMs??15000;return f$({name:"submit_and_exit",description:"Submit the final answer and exit the conversation. For example, submit a summary of the investigation and confirm the issue is resolved. You should only submit once all necessary steps are completed. 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:u1(q6),lifecycle:{completesRun:!0},timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(W,J)=>{let X=U$(q6,W);return v1($(X.summary,X.verified,J),Q,`submit_and_exit timed out after ${Q}ms`)}})}function D$($){let{executors:Z,enableReadFiles:Q=!0,enableSearch:W=!0,enableBash:J=!0,enableWebFetch:X=!0,enableApplyPatch:Y=!1,enableEditor:j=!0,enableSkills:V=!0,enableAskQuestion:B=!0,enableSubmitAndExit:H=!1,...G}=$,K=[];if(Q&&Z.readFile)K.push(X3(Z.readFile,G));if(W&&Z.search)K.push(Y3(Z.search,G));if(J&&Z.bash)K.push(M6(Z.bash,G));if(X&&Z.webFetch)K.push(j3(Z.webFetch,G));if(j&&Z.editor)K.push(B3(Z.editor,G));else if(Y&&Z.applyPatch)K.push(V3(Z.applyPatch,G));if(V&&Z.skills)K.push(V2(Z.skills,G));let F=H?Z.submit:void 0;if(B&&Z.askQuestion&&!F)K.push(H3(Z.askQuestion));if(F)K.push(G3(F,G));return K}import*as v0 from"node:fs/promises";import*as c0 from"node:path";var d={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},cB=["%%bash","apply_patch","EOF","```"];class V0 extends Error{constructor($){super($);this.name="DiffError"}}function m0($){let Z={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(Q)=>Z[Q]??Q).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class K3{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor($,Z){this.lines=$;this.currentFiles=Z}parse(){this.skipBeginSentinel();while(this.hasMoreLines()&&!this.isEndMarker())this.parseNextAction();if(this.patch.warnings?.length===0)delete this.patch.warnings;return{patch:this.patch,fuzz:this.fuzz}}addWarning($){if(!this.patch.warnings)this.patch.warnings=[];this.patch.warnings.push($)}skipBeginSentinel(){if(this.lines[this.index]?.startsWith(d.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(d.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(d.UPDATE)){this.parseUpdate($.substring(d.UPDATE.length).trim());return}if($?.startsWith(d.DELETE)){this.parseDelete($.substring(d.DELETE.length).trim());return}if($?.startsWith(d.ADD)){this.parseAdd($.substring(d.ADD.length).trim());return}throw new V0(`Unknown line while parsing: ${$}`)}checkDuplicate($,Z){if($ in this.patch.actions)throw new V0(`Duplicate ${Z} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let Z=this.lines[this.index]?.startsWith(d.MOVE)?(this.lines[this.index++]??"").substring(d.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new V0(`Update File Error: Missing File: ${$}`);let Q=this.currentFiles[$]??"",W=this.parseUpdateFile(Q,$);W.movePath=Z,this.patch.actions[$]=W,this.currentPath=void 0}parseUpdateFile($,Z){let Q={type:"update",chunks:[]},W=$.split(`
406
406
  `),J=0,X=[d.END,d.UPDATE,d.DELETE,d.ADD,d.END_FILE];while(!X.some((Y)=>this.lines[this.index]?.startsWith(Y.trim()))){let Y=this.lines[this.index],j=Y?.startsWith("@@ ")?Y.substring(3):void 0;if(j!==void 0||(Y==="@@"?Y:void 0)!==void 0)this.index++;else if(J!==0)throw new V0(`Invalid Line:
407
- ${this.lines[this.index]}`);if(j?.trim()){let f=m0(j.trim());for(let D=J;D<W.length;D++){let U=W[D];if(U&&(m0(U)===f||m0(U.trim())===f)){if(J=D+1,m0(U.trim())===f&&m0(U)!==f)this.fuzz++;break}}}let[H,B,G,K]=tT(this.lines,this.index),[F,A,L]=oT(W,H,J,K);if(F===-1){let f=H.join(`
408
- `);this.addWarning({path:this.currentPath||Z,chunkIndex:Q.chunks.length,message:`Could not find matching context (similarity: ${L.toFixed(2)}). Chunk skipped.`,context:f.length>200?`${f.substring(0,200)}...`:f}),this.index=G}else{this.fuzz+=A;for(let f of B)f.origIndex+=F,Q.chunks.push(f);J=F+H.length,this.index=G}}return Q}parseDelete($){if(this.checkDuplicate($,"delete"),!($ in this.currentFiles))throw new V0(`Delete File Error: Missing File: ${$}`);this.patch.actions[$]={type:"delete",chunks:[]},this.index++}parseAdd($){if(this.checkDuplicate($,"add"),$ in this.currentFiles)throw new V0(`Add File Error: File already exists: ${$}`);this.index++;let Z=[],Q=[d.END,d.UPDATE,d.DELETE,d.ADD];while(this.hasMoreLines()&&!Q.some((W)=>this.lines[this.index]?.startsWith(W.trim()))){let W=this.lines[this.index++];if(W===void 0)break;if(!W.startsWith("+"))throw new V0(`Invalid Add File line (missing '+'): ${W}`);Z.push(W.substring(1))}this.patch.actions[$]={type:"add",newFile:Z.join(`
409
- `),chunks:[]}}}function vH($,Z){let Q=$.length>Z.length?$:Z,W=$.length>Z.length?Z:$;if(Q.length===0)return 1;let J=sT(W,Q);return(Q.length-J)/Q.length}function sT($,Z){let Q=Z.length+1,W=$.length+1,J=Array(Q*W).fill(0),X=(j,V)=>J[j*W+V]??0,Y=(j,V,H)=>{J[j*W+V]=H};for(let j=0;j<=Z.length;j++)Y(j,0,j);for(let j=0;j<=$.length;j++)Y(0,j,j);for(let j=1;j<=Z.length;j++)for(let V=1;V<=$.length;V++)if(Z[j-1]===$[V-1])Y(j,V,X(j-1,V-1));else Y(j,V,1+Math.min(X(j-1,V-1),X(j,V-1),X(j-1,V)));return X(Z.length,$.length)}function oT($,Z,Q,W){if(Z.length===0)return[Q,0,1];let J=0,X=(Y)=>{let j=m0(Z.join(`
410
- `));for(let H=Y;H<$.length;H++){let B=m0($.slice(H,H+Z.length).join(`
411
- `));if(B===j)return[H,0,1];let G=vH(B,j);if(G>J)J=G}for(let H=Y;H<$.length;H++){let B=m0($.slice(H,H+Z.length).map((K)=>K.trimEnd()).join(`
407
+ ${this.lines[this.index]}`);if(j?.trim()){let f=m0(j.trim());for(let D=J;D<W.length;D++){let U=W[D];if(U&&(m0(U)===f||m0(U.trim())===f)){if(J=D+1,m0(U.trim())===f&&m0(U)!==f)this.fuzz++;break}}}let[B,H,G,K]=sT(this.lines,this.index),[F,A,L]=aT(W,B,J,K);if(F===-1){let f=B.join(`
408
+ `);this.addWarning({path:this.currentPath||Z,chunkIndex:Q.chunks.length,message:`Could not find matching context (similarity: ${L.toFixed(2)}). Chunk skipped.`,context:f.length>200?`${f.substring(0,200)}...`:f}),this.index=G}else{this.fuzz+=A;for(let f of H)f.origIndex+=F,Q.chunks.push(f);J=F+B.length,this.index=G}}return Q}parseDelete($){if(this.checkDuplicate($,"delete"),!($ in this.currentFiles))throw new V0(`Delete File Error: Missing File: ${$}`);this.patch.actions[$]={type:"delete",chunks:[]},this.index++}parseAdd($){if(this.checkDuplicate($,"add"),$ in this.currentFiles)throw new V0(`Add File Error: File already exists: ${$}`);this.index++;let Z=[],Q=[d.END,d.UPDATE,d.DELETE,d.ADD];while(this.hasMoreLines()&&!Q.some((W)=>this.lines[this.index]?.startsWith(W.trim()))){let W=this.lines[this.index++];if(W===void 0)break;if(!W.startsWith("+"))throw new V0(`Invalid Add File line (missing '+'): ${W}`);Z.push(W.substring(1))}this.patch.actions[$]={type:"add",newFile:Z.join(`
409
+ `),chunks:[]}}}function vB($,Z){let Q=$.length>Z.length?$:Z,W=$.length>Z.length?Z:$;if(Q.length===0)return 1;let J=nT(W,Q);return(Q.length-J)/Q.length}function nT($,Z){let Q=Z.length+1,W=$.length+1,J=Array(Q*W).fill(0),X=(j,V)=>J[j*W+V]??0,Y=(j,V,B)=>{J[j*W+V]=B};for(let j=0;j<=Z.length;j++)Y(j,0,j);for(let j=0;j<=$.length;j++)Y(0,j,j);for(let j=1;j<=Z.length;j++)for(let V=1;V<=$.length;V++)if(Z[j-1]===$[V-1])Y(j,V,X(j-1,V-1));else Y(j,V,1+Math.min(X(j-1,V-1),X(j,V-1),X(j-1,V)));return X(Z.length,$.length)}function aT($,Z,Q,W){if(Z.length===0)return[Q,0,1];let J=0,X=(Y)=>{let j=m0(Z.join(`
410
+ `));for(let B=Y;B<$.length;B++){let H=m0($.slice(B,B+Z.length).join(`
411
+ `));if(H===j)return[B,0,1];let G=vB(H,j);if(G>J)J=G}for(let B=Y;B<$.length;B++){let H=m0($.slice(B,B+Z.length).map((K)=>K.trimEnd()).join(`
412
412
  `)),G=m0(Z.map((K)=>K.trimEnd()).join(`
413
- `));if(B===G)return[H,1,1]}for(let H=Y;H<$.length;H++){let B=m0($.slice(H,H+Z.length).map((K)=>K.trim()).join(`
413
+ `));if(H===G)return[B,1,1]}for(let B=Y;B<$.length;B++){let H=m0($.slice(B,B+Z.length).map((K)=>K.trim()).join(`
414
414
  `)),G=m0(Z.map((K)=>K.trim()).join(`
415
- `));if(B===G)return[H,100,1]}let V=0.66;for(let H=Y;H<$.length;H++){let B=m0($.slice(H,H+Z.length).join(`
416
- `)),G=vH(B,j);if(G>=V)return[H,1000,G];if(G>J)J=G}return[-1,0,J]};if(W){let[Y,j,V]=X($.length-Z.length);if(Y!==-1)return[Y,j,V];return[Y,j,V]=X(Q),[Y,j+1e4,V]}return X(Q)}function tT($,Z){let Q=Z,W=[],J=[],X=[],Y=[],j="keep",V=["@@",d.END,d.UPDATE,d.DELETE,d.ADD,d.END_FILE];while(Q<$.length){let H=$[Q];if(!H||V.some((K)=>H.startsWith(K.trim())))break;if(H==="***")break;if(H.startsWith("***"))throw new V0(`Invalid line: ${H}`);Q++;let B=j,G=H;if(G[0]==="+")j="add";else if(G[0]==="-")j="delete";else if(G[0]===" ")j="keep";else j="keep",G=` ${G}`;if(G=G.slice(1),j==="keep"&&B!==j){if(X.length||J.length)Y.push({origIndex:W.length-J.length,delLines:J,insLines:X});J=[],X=[]}if(j==="delete")J.push(G),W.push(G);else if(j==="add")X.push(G);else W.push(G)}if(X.length||J.length)Y.push({origIndex:W.length-J.length,delLines:J,insLines:X});if(Q<$.length&&$[Q]===d.END_FILE)return Q++,[W,Y,Q,!0];return[W,Y,Q,!1]}function F3($,Z,Q){let W=c0.isAbsolute(Z),J=W?c0.normalize(Z):c0.resolve($,Z);if(!Q||W)return J;let X=c0.relative($,J);if(X.startsWith("..")||c0.isAbsolute(X))throw new V0(`Path must stay within cwd: ${Z}`);return J}function eT($){return $.split(`
417
- `).map((Z)=>Z.replace(/\r$/,""))}function uH($){if($.trim()==="")return!1;return cH.some((Z)=>$.startsWith(Z))}function $O($){let Z=0,Q=$.length;while(Z<Q&&uH($[Z]??""))Z++;while(Q>Z&&uH($[Q-1]??""))Q--;return $.slice(Z,Q)}function ZO($){let Z=eT($),Q=Z.findIndex((Y)=>Y.startsWith(d.BEGIN)),W=-1;for(let Y=Z.length-1;Y>=0;Y--)if(Z[Y]?.startsWith(d.END)){W=Y;break}if(Q!==-1||W!==-1){if(Q===-1||W===-1||W<Q)throw new V0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:Z.slice(Q,W+1)}}let J=$O(Z);while(J.length>0&&J[0]==="")J.shift();while(J.length>0&&J[J.length-1]==="")J.pop();return{lines:[d.BEGIN,...J,d.END]}}function QO($,Z){let Q=new Set;for(let W of $)for(let J of Z)if(W.startsWith(J)){Q.add(W.substring(J.length).trim());break}return[...Q]}function WO($,Z,Q){if(Z.length===0)return $;let W=$.split(`
415
+ `));if(H===G)return[B,100,1]}let V=0.66;for(let B=Y;B<$.length;B++){let H=m0($.slice(B,B+Z.length).join(`
416
+ `)),G=vB(H,j);if(G>=V)return[B,1000,G];if(G>J)J=G}return[-1,0,J]};if(W){let[Y,j,V]=X($.length-Z.length);if(Y!==-1)return[Y,j,V];return[Y,j,V]=X(Q),[Y,j+1e4,V]}return X(Q)}function sT($,Z){let Q=Z,W=[],J=[],X=[],Y=[],j="keep",V=["@@",d.END,d.UPDATE,d.DELETE,d.ADD,d.END_FILE];while(Q<$.length){let B=$[Q];if(!B||V.some((K)=>B.startsWith(K.trim())))break;if(B==="***")break;if(B.startsWith("***"))throw new V0(`Invalid line: ${B}`);Q++;let H=j,G=B;if(G[0]==="+")j="add";else if(G[0]==="-")j="delete";else if(G[0]===" ")j="keep";else j="keep",G=` ${G}`;if(G=G.slice(1),j==="keep"&&H!==j){if(X.length||J.length)Y.push({origIndex:W.length-J.length,delLines:J,insLines:X});J=[],X=[]}if(j==="delete")J.push(G),W.push(G);else if(j==="add")X.push(G);else W.push(G)}if(X.length||J.length)Y.push({origIndex:W.length-J.length,delLines:J,insLines:X});if(Q<$.length&&$[Q]===d.END_FILE)return Q++,[W,Y,Q,!0];return[W,Y,Q,!1]}function F3($,Z,Q){let W=c0.isAbsolute(Z),J=W?c0.normalize(Z):c0.resolve($,Z);if(!Q||W)return J;let X=c0.relative($,J);if(X.startsWith("..")||c0.isAbsolute(X))throw new V0(`Path must stay within cwd: ${Z}`);return J}function oT($){return $.split(`
417
+ `).map((Z)=>Z.replace(/\r$/,""))}function uB($){if($.trim()==="")return!1;return cB.some((Z)=>$.startsWith(Z))}function tT($){let Z=0,Q=$.length;while(Z<Q&&uB($[Z]??""))Z++;while(Q>Z&&uB($[Q-1]??""))Q--;return $.slice(Z,Q)}function eT($){let Z=oT($),Q=Z.findIndex((Y)=>Y.startsWith(d.BEGIN)),W=-1;for(let Y=Z.length-1;Y>=0;Y--)if(Z[Y]?.startsWith(d.END)){W=Y;break}if(Q!==-1||W!==-1){if(Q===-1||W===-1||W<Q)throw new V0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:Z.slice(Q,W+1)}}let J=tT(Z);while(J.length>0&&J[0]==="")J.shift();while(J.length>0&&J[J.length-1]==="")J.pop();return{lines:[d.BEGIN,...J,d.END]}}function $O($,Z){let Q=new Set;for(let W of $)for(let J of Z)if(W.startsWith(J)){Q.add(W.substring(J.length).trim());break}return[...Q]}function ZO($,Z,Q){if(Z.length===0)return $;let W=$.split(`
418
418
  `),J=[],X=0;for(let Y of Z){if(Y.origIndex>W.length)throw new V0(`${Q}: chunk.origIndex ${Y.origIndex} > lines.length ${W.length}`);if(X>Y.origIndex)throw new V0(`${Q}: currentIndex ${X} > chunk.origIndex ${Y.origIndex}`);J.push(...W.slice(X,Y.origIndex)),J.push(...Y.insLines),X=Y.origIndex+Y.delLines.length}return J.push(...W.slice(X)),J.join(`
419
- `)}async function JO($,Z,Q,W){let J=QO($,[d.UPDATE,d.DELETE]),X={};for(let Y of J){let j=F3(Z,Y,W),V;try{V=await v0.readFile(j,Q)}catch{throw new V0(`File not found: ${Y}`)}X[Y]=V.replace(/\r\n/g,`
420
- `)}return X}function XO($,Z){let Q={};for(let[W,J]of Object.entries($.actions))switch(J.type){case"delete":Q[W]={type:"delete",oldContent:Z[W]};break;case"add":if(J.newFile===void 0)throw new V0("ADD action without file content");Q[W]={type:"add",newContent:J.newFile};break;case"update":Q[W]={type:"update",oldContent:Z[W],newContent:WO(Z[W]??"",J.chunks,W),movePath:J.movePath};break}return Q}function YO($){let Z=[`Patch could not be applied because ${$.length} hunk${$.length===1?"":"s"} did not match the current file content.`];for(let Q of $){let W=Q.chunkIndex===void 0?"unknown":String(Q.chunkIndex+1);if(Z.push(`${Q.path}: hunk ${W}: ${Q.message}`),Q.context)Z.push(`Context:
419
+ `)}async function QO($,Z,Q,W){let J=$O($,[d.UPDATE,d.DELETE]),X={};for(let Y of J){let j=F3(Z,Y,W),V;try{V=await v0.readFile(j,Q)}catch{throw new V0(`File not found: ${Y}`)}X[Y]=V.replace(/\r\n/g,`
420
+ `)}return X}function WO($,Z){let Q={};for(let[W,J]of Object.entries($.actions))switch(J.type){case"delete":Q[W]={type:"delete",oldContent:Z[W]};break;case"add":if(J.newFile===void 0)throw new V0("ADD action without file content");Q[W]={type:"add",newContent:J.newFile};break;case"update":Q[W]={type:"update",oldContent:Z[W],newContent:ZO(Z[W]??"",J.chunks,W),movePath:J.movePath};break}return Q}function JO($){let Z=[`Patch could not be applied because ${$.length} hunk${$.length===1?"":"s"} did not match the current file content.`];for(let Q of $){let W=Q.chunkIndex===void 0?"unknown":String(Q.chunkIndex+1);if(Z.push(`${Q.path}: hunk ${W}: ${Q.message}`),Q.context)Z.push(`Context:
421
421
  ${Q.context}`)}return Z.join(`
422
- `)}async function jO($,Z,Q,W){let J=[];for(let[X,Y]of Object.entries($)){let j=F3(Z,X,W);switch(Y.type){case"delete":await v0.rm(j,{force:!0}),J.push(`${X}: [deleted]`);break;case"add":if(Y.newContent===void 0)throw new V0(`Cannot create ${X} with no content`);await v0.mkdir(c0.dirname(j),{recursive:!0}),await v0.writeFile(j,Y.newContent,{encoding:Q}),J.push(X);break;case"update":{if(Y.newContent===void 0)throw new V0(`UPDATE change for ${X} has no new content`);if(Y.movePath){let V=F3(Z,Y.movePath,W);await v0.mkdir(c0.dirname(V),{recursive:!0}),await v0.writeFile(V,Y.newContent,{encoding:Q}),await v0.rm(j,{force:!0}),J.push(`${X} -> ${Y.movePath}`)}else await v0.writeFile(j,Y.newContent,{encoding:Q}),J.push(X);break}}}return J}function R6($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0}=$;return async(W,J,X)=>{let Y=ZO(W.input),j=await JO(Y.lines,J,Z,Q),V=new K3(Y.lines,j),{patch:H,fuzz:B}=V.parse();if(H.warnings&&H.warnings.length>0)throw new V0(YO(H.warnings));let G=XO(H,j),K=await jO(G,J,Z,Q),F=["Successfully applied patch to the following files:"];for(let A of K)F.push(A);if(B>0)F.push(`Note: Patch applied with fuzz factor ${B}`);return F.join(`
423
- `)}}import*as Y1 from"node:fs/promises";import*as X1 from"node:path";function VO($,Z,Q){let W=X1.isAbsolute(Z),J=W?X1.normalize(Z):X1.resolve($,Z);if(!Q)return J;if(W)return J;let X=X1.relative($,J);if(X.startsWith("..")||X1.isAbsolute(X))throw Error(`Path must stay within cwd: ${Z}`);return J}function HO($,Z){if(Z.length===0)return 0;return $.split(Z).length-1}function BO($,Z,Q){let W=$.split(`
422
+ `)}async function XO($,Z,Q,W){let J=[];for(let[X,Y]of Object.entries($)){let j=F3(Z,X,W);switch(Y.type){case"delete":await v0.rm(j,{force:!0}),J.push(`${X}: [deleted]`);break;case"add":if(Y.newContent===void 0)throw new V0(`Cannot create ${X} with no content`);await v0.mkdir(c0.dirname(j),{recursive:!0}),await v0.writeFile(j,Y.newContent,{encoding:Q}),J.push(X);break;case"update":{if(Y.newContent===void 0)throw new V0(`UPDATE change for ${X} has no new content`);if(Y.movePath){let V=F3(Z,Y.movePath,W);await v0.mkdir(c0.dirname(V),{recursive:!0}),await v0.writeFile(V,Y.newContent,{encoding:Q}),await v0.rm(j,{force:!0}),J.push(`${X} -> ${Y.movePath}`)}else await v0.writeFile(j,Y.newContent,{encoding:Q}),J.push(X);break}}}return J}function R6($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0}=$;return async(W,J,X)=>{let Y=eT(W.input),j=await QO(Y.lines,J,Z,Q),V=new K3(Y.lines,j),{patch:B,fuzz:H}=V.parse();if(B.warnings&&B.warnings.length>0)throw new V0(JO(B.warnings));let G=WO(B,j),K=await XO(G,J,Z,Q),F=["Successfully applied patch to the following files:"];for(let A of K)F.push(A);if(H>0)F.push(`Note: Patch applied with fuzz factor ${H}`);return F.join(`
423
+ `)}}import*as Y1 from"node:fs/promises";import*as X1 from"node:path";function YO($,Z,Q){let W=X1.isAbsolute(Z),J=W?X1.normalize(Z):X1.resolve($,Z);if(!Q)return J;if(W)return J;let X=X1.relative($,J);if(X.startsWith("..")||X1.isAbsolute(X))throw Error(`Path must stay within cwd: ${Z}`);return J}function jO($,Z){if(Z.length===0)return 0;return $.split(Z).length-1}function VO($,Z,Q){let W=$.split(`
424
424
  `),J=Z.split(`
425
- `),X=Math.max(W.length,J.length),Y=["```diff"],j=0;for(let V=0;V<X;V++){if(j>=Q){Y.push("... diff truncated ...");break}let H=W[V],B=J[V];if(H===B)continue;let G=V+1;if(H!==void 0)Y.push(`-${G}: ${H}`),j++;if(B!==void 0&&j<Q)Y.push(`+${G}: ${B}`),j++}return Y.push("```"),Y.join(`
426
- `)}async function GO($,Z,Q){return await Y1.mkdir(X1.dirname($),{recursive:!0}),await Y1.writeFile($,Z,{encoding:Q}),`File created successfully at: ${$}`}async function KO($){try{return await Y1.access($),!0}catch{return!1}}async function FO($,Z,Q,W,J){let X=await Y1.readFile($,W),Y=HO(X,Z);if(Y===0)throw Error(`No replacement performed: text not found in ${$}.`);if(Y>1)throw Error(`No replacement performed: multiple occurrences of text found in ${$}.`);let j=X.replace(Z,Q??"");await Y1.writeFile($,j,{encoding:W});let V=BO(X,j,J);return`Edited ${$}
427
- ${V}`}async function AO($,Z,Q,W){let X=(await Y1.readFile($,W)).split(`
425
+ `),X=Math.max(W.length,J.length),Y=["```diff"],j=0;for(let V=0;V<X;V++){if(j>=Q){Y.push("... diff truncated ...");break}let B=W[V],H=J[V];if(B===H)continue;let G=V+1;if(B!==void 0)Y.push(`-${G}: ${B}`),j++;if(H!==void 0&&j<Q)Y.push(`+${G}: ${H}`),j++}return Y.push("```"),Y.join(`
426
+ `)}async function BO($,Z,Q){return await Y1.mkdir(X1.dirname($),{recursive:!0}),await Y1.writeFile($,Z,{encoding:Q}),`File created successfully at: ${$}`}async function HO($){try{return await Y1.access($),!0}catch{return!1}}async function GO($,Z,Q,W,J){let X=await Y1.readFile($,W),Y=jO(X,Z);if(Y===0)throw Error(`No replacement performed: text not found in ${$}.`);if(Y>1)throw Error(`No replacement performed: multiple occurrences of text found in ${$}.`);let j=X.replace(Z,Q??"");await Y1.writeFile($,j,{encoding:W});let V=VO(X,j,J);return`Edited ${$}
427
+ ${V}`}async function KO($,Z,Q,W){let X=(await Y1.readFile($,W)).split(`
428
428
  `),Y=X.length+1;if(Z<1||Z>Y)throw Error(`Invalid insert_line: ${Z}. insert_line must be a positive one-based boundary line in the range 1-${Y}. Use ${Y} to append at EOF.`);let j=Z-1;return X.splice(j,0,...Q.split(`
429
429
  `)),await Y1.writeFile($,X.join(`
430
- `),{encoding:W}),`Inserted content at line ${Z} in ${$}.`}function E6($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0,maxDiffLines:W=200}=$;return async(J,X,Y)=>{let j=VO(X,J.path,Q);if(J.insert_line!=null)return AO(j,J.insert_line,J.new_text,Z);if(!await KO(j))return GO(j,J.new_text,Z);if(J.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return FO(j,J.old_text,J.new_text,Z,W)}}import{createReadStream as fO}from"node:fs";import*as _Z from"node:fs/promises";import*as L$ from"node:path";import{createInterface as UO}from"node:readline";import{resolveExistingFilePath as DO}from"@cline/shared/storage";var LO=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),_O={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},dH=1e8,zO=50000;function lH($){let{reason:Z}=$;if(Z instanceof Error)return Z;if(Z!==void 0)return Error(String(Z));return Error("File read was aborted")}async function TO($,Z,Q,W,J,X){if(X?.aborted)throw lH(X);let Y=Math.max(W??1,1),j=J??Number.POSITIVE_INFINITY,V=Number.isFinite(j),H=V?j:Y+zO-1,B=[],G=0,K=0,F=!1,A=!1,L=Number.isFinite(j)?Math.min(j,Y+L8-1):Y+L8-1,f=Q?String(L).length+3:0,D=fO($,{encoding:Z}),U=UO({input:D,crlfDelay:Number.POSITIVE_INFINITY}),T=X?()=>D.destroy(lH(X)):void 0;if(X&&T)X.addEventListener("abort",T,{once:!0});try{for await(let y of U){if(K+=1,K>j){K=j;break}if(!V&&F&&K>=H){A=!0;break}if(K<Y||F)continue;if(B.length>=L8){F=!0;continue}let l=y;if(l.length>J3)l=`${l.slice(0,J3)} [line truncated]`;let o=G+l.length+f+1;if(o>DZ&&B.length>0){F=!0;continue}B.push({lineNumber:K,text:l}),G=o}}finally{if(X&&T)X.removeEventListener("abort",T);U.close(),D.destroy()}let q=String(B[B.length-1]?.lineNumber??K).length,z=B.map(({lineNumber:y,text:l})=>Q?`${String(y).padStart(q," ")} | ${l}`:l).join(`
431
- `),_=B[B.length-1]?.lineNumber;if(_===void 0)return z;let E=Math.min(j,K);if(_>=E)return z;let C=A?`${K}+ lines`:E;return`${z}
432
-
433
- [Showing lines ${Y}-${_} of ${C}. Use start_line/end_line to read other sections.]`}function N6($={}){let{maxFileSizeBytes:Z,encoding:Q,includeLineNumbers:W}={..._O,...$};return async(J,X)=>{let{path:Y,start_line:j,end_line:V}=J,H=L$.isAbsolute(Y)?L$.normalize(Y):L$.resolve(process.cwd(),Y),B=DO(H)??H,G=L$.extname(B).toLowerCase(),K=LO.get(G),F=await _Z.stat(B);if(!F.isFile())throw Error(`Path is not a file: ${B}`);if(K){if(F.size>Z)throw Error(`Image file too large: ${F.size} bytes (max: ${Z} bytes).`);if(X.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let A=await _Z.readFile(B);return[{type:"text",text:"Successfully read image"},{type:"image",data:A.toString("base64"),mediaType:K}]}if(F.size>dH)throw Error(`Text file too large to stream safely: ${F.size} bytes (max: ${dH} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return TO(B,Q,W,j,V,X.signal)}}import{spawn as tH}from"node:child_process";import*as eH from"node:fs/promises";import*as OZ from"node:path";var sH={};N(sH,{prewarmFileIndex:()=>TZ,getFileIndex:()=>d1,enrichPromptWithMentions:()=>T8});import{spawn as OO}from"node:child_process";import{readdir as qO}from"node:fs/promises";import f3 from"node:path";import{isMainThread as iH,parentPort as pH,Worker as MO}from"node:worker_threads";var RO=15000,EO=600000,NO=1000,wO=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function rH($){let Z=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return Z==="EACCES"||Z==="EPERM"||Z==="ENOENT"}var z8=new Map;function CO(){if(!iH)return!1;return!0}function PO($){if(z8.size<=1)return;for(let[Z,Q]of z8.entries()){if(Q.pending)continue;if($-Q.lastAccessedAt>EO)z8.delete(Z)}}function SO($,Z){return f3.relative($,Z).split(f3.sep).join("/")}async function bO($){let Q=(await new Promise((W,J)=>{let X=OO("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"],windowsHide:!0}),Y="",j="";X.stdout.on("data",(V)=>{Y+=V.toString()}),X.stderr.on("data",(V)=>{j+=V.toString()}),X.on("error",J),X.on("close",(V)=>{if(V===0){W(Y);return}J(Error(j||`rg exited with code ${V}`))})})).split(/\r?\n/).map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>W.replace(/\\/g,"/"));return new Set(Q)}async function nH($,Z,Q){let W;try{W=await qO(Z,{withFileTypes:!0})}catch(J){if(rH(J))return;throw J}for(let J of W){let X=f3.join(Z,J.name);if(J.isDirectory()){if(wO.has(J.name))continue;try{await nH($,X,Q)}catch(Y){if(rH(Y))continue;throw Y}continue}if(J.isFile())Q.add(SO($,X))}}async function yO($){let Z=new Set;return await nH($,$,Z),Z}async function zZ($){try{return await bO($)}catch{return yO($)}}function hO(){if(iH||!pH)return;let $=pH;$.on("message",(Z)=>{if(Z.type!=="index")return;zZ(Z.cwd).then((Q)=>{let W={type:"indexResult",requestId:Z.requestId,files:Array.from(Q)};$.postMessage(W)}).catch((Q)=>{let W={type:"indexResult",requestId:Z.requestId,error:Q instanceof Error?Q.message:"Failed to build file index"};$.postMessage(W)})})}class aH{worker=new MO(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",($)=>{if($.type!=="indexResult")return;let Z=this.pending.get($.requestId);if(!Z)return;if(this.pending.delete($.requestId),$.error){Z.reject(Error($.error));return}Z.resolve($.files??[])}),this.worker.on("error",($)=>{this.flushPending($)}),this.worker.on("exit",($)=>{if($!==0)this.flushPending(Error(`File index worker exited with code ${$}`))})}requestIndex($){let Z=++this.nextRequestId,Q=new Promise((J,X)=>{let Y=setTimeout(()=>{this.pending.delete(Z),J(null)},NO);Y.unref(),this.pending.set(Z,{resolve:(j)=>{clearTimeout(Y),J(j)},reject:(j)=>{clearTimeout(Y),X(j)}})}),W={type:"index",requestId:Z,cwd:$};return this.worker.postMessage(W),Q}flushPending($){for(let[Z,Q]of this.pending.entries())Q.reject($),this.pending.delete(Z)}}hO();var A3;function kO(){if(!CO())return null;if(A3===void 0)A3=new aH;return A3}async function IO($){let Z=kO();if(!Z)return zZ($);try{let Q=await Z.requestIndex($);if(Q===null)return zZ($);return new Set(Q)}catch{return zZ($)}}async function d1($,Z={}){let Q=Z.ttlMs??RO,W=Date.now();PO(W);let J=z8.get($);if(J&&Q>0&&W-J.lastBuiltAt<=Q&&J.files.size>0)return J.lastAccessedAt=W,J.files;if(J?.pending)return J.lastAccessedAt=W,J.pending;let X=IO($).then((Y)=>{return z8.set($,{files:Y,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),Y});return z8.set($,{files:J?.files??new Set,lastBuiltAt:J?.lastBuiltAt??0,lastAccessedAt:W,pending:X}),X}async function TZ($,Z={}){await d1($,{...Z,ttlMs:0})}import{stat as xO}from"node:fs/promises";import H2 from"node:path";var gO=/[),.:;!?`'"]+$/,mO=/^[(`'"]+/;function vO($){let Z=$.matchAll(/(^|[\s])@([^\s]+)/g),Q=[];for(let W of Z){let J=(W[2]??"").trim();if(J.length===0)continue;let X=J.replace(mO,"").replace(gO,"");if(X.length===0||X.includes("@"))continue;Q.push(X)}return Array.from(new Set(Q))}function cO($,Z){let Q=$.replace(/\\/g,"/"),W=H2.isAbsolute(Q)?H2.resolve(Q):H2.resolve(Z,Q),J=H2.relative(Z,W);if(J.startsWith("..")||H2.isAbsolute(J))return;return J.split(H2.sep).join("/")}async function T8($,Z,Q={}){let W=vO($);if(W.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:J,maxFileBytes:X,maxTotalBytes:Y}=Q,j=await d1(Z,{ttlMs:Q.ttlMs}),V=[],H=[],B=[],G=0;for(let K of W){if(J&&B.length>=J){H.push(K);continue}let F=cO(K,Z);if(!F||!j.has(F)){H.push(K);continue}if(!X||!Y){V.push(F);continue}let A=H2.join(Z,F);try{if(!(await xO(A)).isFile()){H.push(K);continue}let f=G+X;if(f>Y){H.push(K);continue}G=f,V.push(F)}catch{H.push(K)}}return{prompt:$,mentions:W,matchedFiles:V,ignoredMentions:H}}var uO=["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"],dO=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],B2=null;function lO(){if(B2!==null)return Promise.resolve(B2);return new Promise(($)=>{let Z=tH("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});Z.on("close",(Q)=>{B2=Q===0,$(B2)}),Z.on("error",()=>{B2=!1,$(!1)}),setTimeout(()=>{if(!Z.killed)Z.kill("SIGTERM");if(B2===null)B2=!1,$(!1)},1000)})}function pO($,Z,Q,W,J=5000,X){return new Promise((Y)=>{let j=tH("rg",["--json",`--context=${W}`,"--max-count=1","-i",$],{cwd:Z,stdio:["ignore","pipe","pipe"],windowsHide:!0}),V="",H=!1,B=()=>{if(!j.killed)j.kill("SIGTERM")},G=setTimeout(()=>{if(!H)H=!0,B(),Y(null)},J),K=(F)=>{if(!H)H=!0,clearTimeout(G),B(),Y(F)};if(X?.aborted){B(),Y(null);return}X?.addEventListener("abort",()=>{K(null)}),j.stdout.on("data",(F)=>{V+=F.toString()}),j.stderr.on("data",()=>{}),j.on("close",(F)=>{if(F===0||F===1){try{let A=[],L=V.split(`
434
- `).filter((f)=>f.trim());for(let f of L){if(A.length>=Q)break;let D=JSON.parse(f);if(D.type==="match"){let U=D.data,T=[];if(D.data.submatches&&D.data.submatches.length>0){let q=D.data.submatches[0];A.push({file:U.path.text,line:U.line_number,column:(q?.start??0)+1,match:q?.match?.text??"",context:T})}}else if(D.type==="context"&&A.length>0){let U=A[A.length-1],T=D.data.line_number===U.line?">":" ";U.context.push(`${T} ${D.data.line_number}: ${D.data.lines?.text??D.data.line?.text??""}`)}}K(A.length>0?A:null)}catch{K(null)}return}K(null)}),j.on("error",()=>{K(null)})})}function rO($,Z,Q,W){let J=$.split("/"),X=J[J.length-1]??"";if(J.length-1>W)return!1;for(let V=0;V<J.length-1;V++)if(Z.has(J[V]??""))return!1;let j=OZ.posix.extname(X).slice(1).toLowerCase();return Q.has(j)||!j&&!X.startsWith(".")}function w6($={}){let{includeExtensions:Z=uO,excludeDirs:Q=dO,maxResults:W=100,contextLines:J=2,maxDepth:X=20}=$,Y=new Set(Q),j=new Set(Z.map((V)=>V.toLowerCase()));return async(V,H,B)=>{if(B.signal?.aborted)throw Error("Search operation aborted");let G=await lO(),K=null;if(G)K=await pO(V,H,W,J,5000,B.signal);if(K){let U=[`Found ${K.length} result${K.length===1?"":"s"} for pattern: ${V}`,""];for(let T of K)U.push(`${T.file}:${T.line}:${T.column}`),U.push(...T.context),U.push("");if(K.length>=W)U.push(`(Showing first ${W} results. Refine your search for more specific results.)`);return oH(U.join(`
435
- `))}let F;try{F=new RegExp(V,"gim")}catch(U){throw Error(`Invalid regex pattern: ${V}. ${U instanceof Error?U.message:""}`)}let A=[],L=0,f=await d1(H);for(let U of f){if(B.signal?.aborted)throw Error("Search operation aborted");if(!rO(U,Y,j,X))continue;if(A.length>=W)break;L++;let T=OZ.join(H,U);try{let z=(await eH.readFile(T,"utf-8")).split(`
436
- `);for(let _=0;_<z.length;_++){let E=z[_];F.lastIndex=0;let C=F.exec(E);while(C!==null){if(A.length>=W)break;let y=Math.max(0,_-J),l=Math.min(z.length-1,_+J),o=[];for(let t=y;t<=l;t++){let Q0=t===_?">":" ";o.push(`${Q0} ${t+1}: ${z[t]}`)}if(A.push({file:U,line:_+1,column:C.index+1,match:C[0],context:o}),C.index===F.lastIndex)F.lastIndex++;C=F.exec(E)}}}catch{}}if(A.length===0)return`No results found for pattern: ${V}
437
- Searched ${L} files.`;let D=[`Found ${A.length} result${A.length===1?"":"s"} for pattern: ${V}`,`Searched ${L} files.`,""];for(let U of A)D.push(`${U.file}:${U.line}:${U.column}`),D.push(...U.context),D.push("");if(A.length>=W)D.push(`(Showing first ${W} results. Refine your search for more specific results.)`);return oH(D.join(`
438
- `))}}function oH($){if($.length<=_8)return $;let Z=Math.ceil(_8/2),Q=Math.max(1,_8-Z);return`${$.slice(0,Z)}
430
+ `),{encoding:W}),`Inserted content at line ${Z} in ${$}.`}function E6($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0,maxDiffLines:W=200}=$;return async(J,X,Y)=>{let j=YO(X,J.path,Q);if(J.insert_line!=null)return KO(j,J.insert_line,J.new_text,Z);if(!await HO(j))return BO(j,J.new_text,Z);if(J.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return GO(j,J.old_text,J.new_text,Z,W)}}import{createReadStream as FO}from"node:fs";import*as _Z from"node:fs/promises";import*as L$ from"node:path";import{createInterface as AO}from"node:readline";import{resolveExistingFilePath as fO}from"@cline/shared/storage";var UO=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),DO={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},dB=1e8,LO=50000;function lB($){let{reason:Z}=$;if(Z instanceof Error)return Z;if(Z!==void 0)return Error(String(Z));return Error("File read was aborted")}async function _O($,Z,Q,W,J,X){if(X?.aborted)throw lB(X);let Y=Math.max(W??1,1),j=J??Number.POSITIVE_INFINITY,V=Number.isFinite(j),B=V?j:Y+LO-1,H=[],G=0,K=0,F=!1,A=!1,L=Number.isFinite(j)?Math.min(j,Y+L8-1):Y+L8-1,f=Q?String(L).length+3:0,D=FO($,{encoding:Z}),U=AO({input:D,crlfDelay:Number.POSITIVE_INFINITY}),T=X?()=>D.destroy(lB(X)):void 0;if(X&&T)X.addEventListener("abort",T,{once:!0});try{for await(let y of U){if(K+=1,K>j){K=j;break}if(!V&&F&&K>=B){A=!0;break}if(K<Y||F)continue;if(H.length>=L8){F=!0;continue}let l=y;if(l.length>J3)l=`${l.slice(0,J3)} [line truncated]`;let o=G+l.length+f+1;if(o>DZ&&H.length>0){F=!0;continue}H.push({lineNumber:K,text:l}),G=o}}finally{if(X&&T)X.removeEventListener("abort",T);U.close(),D.destroy()}let q=String(H[H.length-1]?.lineNumber??K).length,z=H.map(({lineNumber:y,text:l})=>Q?`${String(y).padStart(q," ")} | ${l}`:l).join(`
431
+ `),_=H[H.length-1]?.lineNumber;if(_===void 0)return z;let E=Math.min(j,K);if(_>=E)return z;let w=A?`${K}+ lines`:E;return`${z}
432
+
433
+ [Showing lines ${Y}-${_} of ${w}. Use start_line/end_line to read other sections.]`}function N6($={}){let{maxFileSizeBytes:Z,encoding:Q,includeLineNumbers:W}={...DO,...$};return async(J,X)=>{let{path:Y,start_line:j,end_line:V}=J,B=L$.isAbsolute(Y)?L$.normalize(Y):L$.resolve(process.cwd(),Y),H=fO(B)??B,G=L$.extname(H).toLowerCase(),K=UO.get(G),F=await _Z.stat(H);if(!F.isFile())throw Error(`Path is not a file: ${H}`);if(K){if(F.size>Z)throw Error(`Image file too large: ${F.size} bytes (max: ${Z} bytes).`);if(X.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let A=await _Z.readFile(H);return[{type:"text",text:"Successfully read image"},{type:"image",data:A.toString("base64"),mediaType:K}]}if(F.size>dB)throw Error(`Text file too large to stream safely: ${F.size} bytes (max: ${dB} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return _O(H,Q,W,j,V,X.signal)}}import{spawn as tB}from"node:child_process";import*as eB from"node:fs/promises";import*as OZ from"node:path";var sB={};N(sB,{prewarmFileIndex:()=>TZ,getFileIndex:()=>d1,enrichPromptWithMentions:()=>T8});import{spawn as zO}from"node:child_process";import{readdir as TO}from"node:fs/promises";import f3 from"node:path";import{isMainThread as iB,parentPort as pB,Worker as OO}from"node:worker_threads";var qO=15000,MO=600000,RO=1000,EO=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function rB($){let Z=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return Z==="EACCES"||Z==="EPERM"||Z==="ENOENT"}var z8=new Map;function NO(){if(!iB)return!1;return!0}function CO($){if(z8.size<=1)return;for(let[Z,Q]of z8.entries()){if(Q.pending)continue;if($-Q.lastAccessedAt>MO)z8.delete(Z)}}function wO($,Z){return f3.relative($,Z).split(f3.sep).join("/")}async function PO($){let Q=(await new Promise((W,J)=>{let X=zO("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"],windowsHide:!0}),Y="",j="";X.stdout.on("data",(V)=>{Y+=V.toString()}),X.stderr.on("data",(V)=>{j+=V.toString()}),X.on("error",J),X.on("close",(V)=>{if(V===0){W(Y);return}J(Error(j||`rg exited with code ${V}`))})})).split(/\r?\n/).map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>W.replace(/\\/g,"/"));return new Set(Q)}async function nB($,Z,Q){let W;try{W=await TO(Z,{withFileTypes:!0})}catch(J){if(rB(J))return;throw J}for(let J of W){let X=f3.join(Z,J.name);if(J.isDirectory()){if(EO.has(J.name))continue;try{await nB($,X,Q)}catch(Y){if(rB(Y))continue;throw Y}continue}if(J.isFile())Q.add(wO($,X))}}async function SO($){let Z=new Set;return await nB($,$,Z),Z}async function zZ($){try{return await PO($)}catch{return SO($)}}function bO(){if(iB||!pB)return;let $=pB;$.on("message",(Z)=>{if(Z.type!=="index")return;zZ(Z.cwd).then((Q)=>{let W={type:"indexResult",requestId:Z.requestId,files:Array.from(Q)};$.postMessage(W)}).catch((Q)=>{let W={type:"indexResult",requestId:Z.requestId,error:Q instanceof Error?Q.message:"Failed to build file index"};$.postMessage(W)})})}class aB{worker=new OO(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",($)=>{if($.type!=="indexResult")return;let Z=this.pending.get($.requestId);if(!Z)return;if(this.pending.delete($.requestId),$.error){Z.reject(Error($.error));return}Z.resolve($.files??[])}),this.worker.on("error",($)=>{this.flushPending($)}),this.worker.on("exit",($)=>{if($!==0)this.flushPending(Error(`File index worker exited with code ${$}`))})}requestIndex($){let Z=++this.nextRequestId,Q=new Promise((J,X)=>{let Y=setTimeout(()=>{this.pending.delete(Z),J(null)},RO);Y.unref(),this.pending.set(Z,{resolve:(j)=>{clearTimeout(Y),J(j)},reject:(j)=>{clearTimeout(Y),X(j)}})}),W={type:"index",requestId:Z,cwd:$};return this.worker.postMessage(W),Q}flushPending($){for(let[Z,Q]of this.pending.entries())Q.reject($),this.pending.delete(Z)}}bO();var A3;function yO(){if(!NO())return null;if(A3===void 0)A3=new aB;return A3}async function hO($){let Z=yO();if(!Z)return zZ($);try{let Q=await Z.requestIndex($);if(Q===null)return zZ($);return new Set(Q)}catch{return zZ($)}}async function d1($,Z={}){let Q=Z.ttlMs??qO,W=Date.now();CO(W);let J=z8.get($);if(J&&Q>0&&W-J.lastBuiltAt<=Q&&J.files.size>0)return J.lastAccessedAt=W,J.files;if(J?.pending)return J.lastAccessedAt=W,J.pending;let X=hO($).then((Y)=>{return z8.set($,{files:Y,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),Y});return z8.set($,{files:J?.files??new Set,lastBuiltAt:J?.lastBuiltAt??0,lastAccessedAt:W,pending:X}),X}async function TZ($,Z={}){await d1($,{...Z,ttlMs:0})}import{stat as kO}from"node:fs/promises";import B2 from"node:path";var IO=/[),.:;!?`'"]+$/,xO=/^[(`'"]+/;function gO($){let Z=$.matchAll(/(^|[\s])@([^\s]+)/g),Q=[];for(let W of Z){let J=(W[2]??"").trim();if(J.length===0)continue;let X=J.replace(xO,"").replace(IO,"");if(X.length===0||X.includes("@"))continue;Q.push(X)}return Array.from(new Set(Q))}function mO($,Z){let Q=$.replace(/\\/g,"/"),W=B2.isAbsolute(Q)?B2.resolve(Q):B2.resolve(Z,Q),J=B2.relative(Z,W);if(J.startsWith("..")||B2.isAbsolute(J))return;return J.split(B2.sep).join("/")}async function T8($,Z,Q={}){let W=gO($);if(W.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:J,maxFileBytes:X,maxTotalBytes:Y}=Q,j=await d1(Z,{ttlMs:Q.ttlMs}),V=[],B=[],H=[],G=0;for(let K of W){if(J&&H.length>=J){B.push(K);continue}let F=mO(K,Z);if(!F||!j.has(F)){B.push(K);continue}if(!X||!Y){V.push(F);continue}let A=B2.join(Z,F);try{if(!(await kO(A)).isFile()){B.push(K);continue}let f=G+X;if(f>Y){B.push(K);continue}G=f,V.push(F)}catch{B.push(K)}}return{prompt:$,mentions:W,matchedFiles:V,ignoredMentions:B}}var vO=["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"],cO=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],H2=null;function uO(){if(H2!==null)return Promise.resolve(H2);return new Promise(($)=>{let Z=tB("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});Z.on("close",(Q)=>{H2=Q===0,$(H2)}),Z.on("error",()=>{H2=!1,$(!1)}),setTimeout(()=>{if(!Z.killed)Z.kill("SIGTERM");if(H2===null)H2=!1,$(!1)},1000)})}function dO($,Z,Q,W,J=5000,X){return new Promise((Y)=>{let j=tB("rg",["--json",`--context=${W}`,"--max-count=1","-i",$],{cwd:Z,stdio:["ignore","pipe","pipe"],windowsHide:!0}),V="",B=!1,H=()=>{if(!j.killed)j.kill("SIGTERM")},G=setTimeout(()=>{if(!B)B=!0,H(),Y(null)},J),K=(F)=>{if(!B)B=!0,clearTimeout(G),H(),Y(F)};if(X?.aborted){H(),Y(null);return}X?.addEventListener("abort",()=>{K(null)}),j.stdout.on("data",(F)=>{V+=F.toString()}),j.stderr.on("data",()=>{}),j.on("close",(F)=>{if(F===0||F===1){try{let A=[],L=V.split(`
434
+ `).filter((f)=>f.trim());for(let f of L){if(A.length>=Q)break;let D=JSON.parse(f);if(D.type==="match"){let U=D.data,T=[];if(D.data.submatches&&D.data.submatches.length>0){let q=D.data.submatches[0];A.push({file:U.path.text,line:U.line_number,column:(q?.start??0)+1,match:q?.match?.text??"",context:T})}}else if(D.type==="context"&&A.length>0){let U=A[A.length-1],T=D.data.line_number===U.line?">":" ";U.context.push(`${T} ${D.data.line_number}: ${D.data.lines?.text??D.data.line?.text??""}`)}}K(A.length>0?A:null)}catch{K(null)}return}K(null)}),j.on("error",()=>{K(null)})})}function lO($,Z,Q,W){let J=$.split("/"),X=J[J.length-1]??"";if(J.length-1>W)return!1;for(let V=0;V<J.length-1;V++)if(Z.has(J[V]??""))return!1;let j=OZ.posix.extname(X).slice(1).toLowerCase();return Q.has(j)||!j&&!X.startsWith(".")}function C6($={}){let{includeExtensions:Z=vO,excludeDirs:Q=cO,maxResults:W=100,contextLines:J=2,maxDepth:X=20}=$,Y=new Set(Q),j=new Set(Z.map((V)=>V.toLowerCase()));return async(V,B,H)=>{if(H.signal?.aborted)throw Error("Search operation aborted");let G=await uO(),K=null;if(G)K=await dO(V,B,W,J,5000,H.signal);if(K){let U=[`Found ${K.length} result${K.length===1?"":"s"} for pattern: ${V}`,""];for(let T of K)U.push(`${T.file}:${T.line}:${T.column}`),U.push(...T.context),U.push("");if(K.length>=W)U.push(`(Showing first ${W} results. Refine your search for more specific results.)`);return oB(U.join(`
435
+ `))}let F;try{F=new RegExp(V,"gim")}catch(U){throw Error(`Invalid regex pattern: ${V}. ${U instanceof Error?U.message:""}`)}let A=[],L=0,f=await d1(B);for(let U of f){if(H.signal?.aborted)throw Error("Search operation aborted");if(!lO(U,Y,j,X))continue;if(A.length>=W)break;L++;let T=OZ.join(B,U);try{let z=(await eB.readFile(T,"utf-8")).split(`
436
+ `);for(let _=0;_<z.length;_++){let E=z[_];F.lastIndex=0;let w=F.exec(E);while(w!==null){if(A.length>=W)break;let y=Math.max(0,_-J),l=Math.min(z.length-1,_+J),o=[];for(let t=y;t<=l;t++){let Q0=t===_?">":" ";o.push(`${Q0} ${t+1}: ${z[t]}`)}if(A.push({file:U,line:_+1,column:w.index+1,match:w[0],context:o}),w.index===F.lastIndex)F.lastIndex++;w=F.exec(E)}}}catch{}}if(A.length===0)return`No results found for pattern: ${V}
437
+ Searched ${L} files.`;let D=[`Found ${A.length} result${A.length===1?"":"s"} for pattern: ${V}`,`Searched ${L} files.`,""];for(let U of A)D.push(`${U.file}:${U.line}:${U.column}`),D.push(...U.context),D.push("");if(A.length>=W)D.push(`(Showing first ${W} results. Refine your search for more specific results.)`);return oB(D.join(`
438
+ `))}}function oB($){if($.length<=_8)return $;let Z=Math.ceil(_8/2),Q=Math.max(1,_8-Z);return`${$.slice(0,Z)}
439
439
  [... search output truncated: ${$.length} chars total. Narrow the pattern or scope to view the elided matches ...]
440
- `+$.slice(-Q)}function iO($){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,`
440
+ `+$.slice(-Q)}function pO($){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,`
441
441
  `).replace(/<[^>]+>/g," ").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#(\d+);/g,(Z,Q)=>String.fromCharCode(parseInt(Q,10))).replace(/\s+/g," ").replace(/\n\s+/g,`
442
442
  `).replace(/\n{3,}/g,`
443
443
 
444
- `).trim()}function C6($={}){let{timeoutMs:Z=30000,maxResponseBytes:Q=5000000,userAgent:W="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:J={},followRedirects:X=!0}=$;return async(Y,j,V)=>{let H;try{H=new URL(Y)}catch{throw Error(`Invalid URL: ${Y}`)}if(!["http:","https:"].includes(H.protocol))throw Error(`Invalid protocol: ${H.protocol}. Only http and https are supported.`);let B=new AbortController,G=setTimeout(()=>B.abort(),Z),K;if(V.signal)K=()=>B.abort(),V.signal.addEventListener("abort",K);try{let F=await fetch(Y,{method:"GET",headers:{"User-Agent":W,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...J},redirect:X?"follow":"manual",signal:B.signal});if(clearTimeout(G),!X&&F.status>=300&&F.status<400)return`Redirect to: ${F.headers.get("location")}`;if(!F.ok)throw Error(`HTTP ${F.status}: ${F.statusText}`);let A=F.headers.get("content-type")||"",L=F.body?.getReader();if(!L)throw Error("Failed to read response body");let f=[],D=0;while(!0){let{done:E,value:C}=await L.read();if(E)break;if(D+=C.length,D>Q)throw L.cancel(),Error(`Response too large: exceeded ${Q} bytes`);f.push(C)}let U=new Uint8Array(D),T=0;for(let E of f)U.set(E,T),T+=E.length;let q=new TextDecoder("utf-8").decode(U),z;if(A.includes("text/html")||A.includes("application/xhtml"))z=iO(q);else if(A.includes("application/json"))try{let E=JSON.parse(q);z=JSON.stringify(E,null,2)}catch{z=q}else z=q;let _=[`URL: ${Y}`,`Content-Type: ${A}`,`Size: ${D} bytes`,"","--- Content ---",z.slice(0,50000)];if(z.length>50000)_.push(`
444
+ `).trim()}function w6($={}){let{timeoutMs:Z=30000,maxResponseBytes:Q=5000000,userAgent:W="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:J={},followRedirects:X=!0}=$;return async(Y,j,V)=>{let B;try{B=new URL(Y)}catch{throw Error(`Invalid URL: ${Y}`)}if(!["http:","https:"].includes(B.protocol))throw Error(`Invalid protocol: ${B.protocol}. Only http and https are supported.`);let H=new AbortController,G=setTimeout(()=>H.abort(),Z),K;if(V.signal)K=()=>H.abort(),V.signal.addEventListener("abort",K);try{let F=await fetch(Y,{method:"GET",headers:{"User-Agent":W,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...J},redirect:X?"follow":"manual",signal:H.signal});if(clearTimeout(G),!X&&F.status>=300&&F.status<400)return`Redirect to: ${F.headers.get("location")}`;if(!F.ok)throw Error(`HTTP ${F.status}: ${F.statusText}`);let A=F.headers.get("content-type")||"",L=F.body?.getReader();if(!L)throw Error("Failed to read response body");let f=[],D=0;while(!0){let{done:E,value:w}=await L.read();if(E)break;if(D+=w.length,D>Q)throw L.cancel(),Error(`Response too large: exceeded ${Q} bytes`);f.push(w)}let U=new Uint8Array(D),T=0;for(let E of f)U.set(E,T),T+=E.length;let q=new TextDecoder("utf-8").decode(U),z;if(A.includes("text/html")||A.includes("application/xhtml"))z=pO(q);else if(A.includes("application/json"))try{let E=JSON.parse(q);z=JSON.stringify(E,null,2)}catch{z=q}else z=q;let _=[`URL: ${Y}`,`Content-Type: ${A}`,`Size: ${D} bytes`,"","--- Content ---",z.slice(0,50000)];if(z.length>50000)_.push(`
445
445
  [Content truncated: showing first 50000 of ${z.length} characters]`);return _.push("","--- Analysis Request ---",`Prompt: ${j}`),_.join(`
446
- `)}catch(F){if(clearTimeout(G),F instanceof Error){if(F.name==="AbortError")throw Error(`Request timed out after ${Z}ms`);throw F}throw Error(`Fetch failed: ${String(F)}`)}finally{if(V.signal&&K)V.signal.removeEventListener("abort",K)}}}function P6($={}){return j2($)}function O8($={}){return{readFile:N6($.fileRead),search:w6($.search),bash:P6($.bash),webFetch:C6($.webFetch),applyPatch:R6($.applyPatch),editor:E6($.editor)}}var nO={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"},q8=[{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 $B($,Z){if(!Z||Z.length===0)return!0;let Q=$.toLowerCase();return Z.some((W)=>Q.includes(W.toLowerCase()))}function aO($,Z,Q,W){if($.mode&&$.mode!=="any"&&$.mode!==W)return!1;return $B(Z,$.providerIdIncludes)&&$B(Q,$.modelIdIncludes)}function M8($,Z,Q,W){if(!W||W.length===0)return{};let J=new Map;for(let Y of W){if(!aO(Y,$,Z,Q))continue;for(let j of Y.disableTools??[])J.set(j,!1);for(let j of Y.enableTools??[])J.set(j,!0)}let X={};for(let[Y,j]of J.entries())X[nO[Y]]=j;return X}var u0={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 l1($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function qZ($){if($!=="yolo")return{};let Z={enabled:!0,autoApprove:!0},Q={"*":Z};for(let W of X$)Q[W]=Z;return Q}function MZ($,Z){let Q=u0[$],{enableSpawnAgent:W,enableAgentTeams:J,...X}=Q;return D$({...X,...Z})}import{createTool as BM,zodToJsonSchema as GM}from"@cline/shared";import{z as N3}from"zod";$1();import{createAgentRuntime as tq}from"@cline/agents";import{createContributionRegistry as eq,mergeModelOptions as zB}from"@cline/shared";import{createGateway as Xq,createHandlerAsync as Yq,hasRegisteredHandler as jq,MODEL_COLLECTIONS_BY_PROVIDER_ID as Vq,normalizeProviderId as Hq}from"@cline/llms";import{EMPTY_CONTENT_TEXT as sO}from"@cline/shared";function oO($){let Z=eO($.content),Q=[],W=$.id??Qq(),J=0,X=[],Y=()=>{if(X.length===0)return;let j=J===0?W:`${W}_part_${J}`;J+=1,Q.push({id:j,role:$.role,content:X.map($q),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:ZB($.metrics)}),X=[]};if(Z.length===0)return Q.push({id:W,role:$.role,content:[{type:"text",text:sO}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:ZB($.metrics)}),Q;for(let j of Z){if(j.type!=="tool_result"){X.push(j);continue}Y(),Q.push({id:`${W}_tool_${j.tool_use_id}`,role:"tool",content:[WB(j)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return Y(),Q}function RZ($){return $.flatMap(oO)}function tO($){let Z=$.content.map(JB).filter((Q)=>Q!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:Z,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:Zq($.metrics)}}function R8($){return $.map(tO)}function EZ($){let Z=[];for(let Q of $){let W=Q.content.map(JB).filter((Y)=>Y!==void 0),J=Q.role==="tool"?"user":Q.role,X=Z[Z.length-1];if(J==="user"&&W.length>0&&W.every((Y)=>Y.type==="tool_result")&&X?.role==="user"&&Array.isArray(X.content)&&X.content.every((Y)=>Y.type==="tool_result")){X.content.push(...W);continue}Z.push({role:J,content:W})}return Z}function eO($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function $q($){switch($.type){case"text":return{type:"text",text:$.text};case"thinking":return{type:"reasoning",text:$.thinking,metadata:$.signature?{signature:$.signature,details:$.details}:$.details?{details:$.details}:void 0};case"redacted_thinking":return{type:"reasoning",text:"",redacted:!0,metadata:{data:$.data}};case"image":return{type:"image",image:$.data,mediaType:$.mediaType};case"file":return{type:"file",path:$.path,content:$.content};case"tool_use":return{type:"tool-call",toolCallId:$.id,toolName:$.name,input:$.input,metadata:$.signature?{signature:$.signature}:void 0};case"tool_result":return WB($)}}function WB($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function JB($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let Z=$.metadata;return{type:"thinking",thinking:$.text,signature:Z?.signature,details:Z?.details}}case"image":return typeof $.image==="string"?{type:"image",data:$.image,mediaType:$.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:$.path,content:$.content};case"tool-call":{let Z=$.metadata;return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:Z?.thoughtSignature??Z?.signature}}case"tool-result":{let Z=$.output,Q=typeof Z==="string"?Z:Array.isArray(Z)?Z:JSON.stringify(Z);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:Q,is_error:$.isError}}}}function ZB($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function Zq($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var QB=0;function Qq(){return QB+=1,`msg_${Date.now().toString(36)}_${QB.toString(36)}`}function Wq($){switch($.type){case"text":return[{type:"text-delta",text:$.text}];case"reasoning":return[{type:"reasoning-delta",text:$.reasoning,metadata:$.signature?{thoughtSignature:$.signature,details:$.details}:{details:$.details}}];case"tool_calls":{let Z=$.tool_call.function,Q=Z.arguments;return[{type:"tool-call-delta",toolCallId:$.tool_call.call_id??Z.id,toolName:Z.name,inputText:typeof Q==="string"?Q:void 0,input:typeof Q==="string"?void 0:Q,...$.signature?{metadata:{thoughtSignature:$.signature}}:{}}]}case"usage":return[{type:"usage",usage:{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,reasoningTokenCount:$.thoughtsTokenCount,totalCost:$.totalCost}}];case"done":return[{type:"finish",reason:Jq($),error:$.error}];default:return[]}}function Jq($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function XB($){return{async*stream(Z){let Q=!1,W=!1;try{let J=typeof $==="function"?await $():$;J.setAbortSignal?.(Z.signal);let X=EZ(Z.messages),Y=Z.tools.map((j)=>({name:j.name,description:j.description,inputSchema:j.inputSchema}));for await(let j of J.createMessage(Z.systemPrompt??"",X,Y))for(let V of Wq(j)){if(V.type==="finish")Q=!0;else if(V.type==="tool-call-delta")W=!0;yield V}if(!Q)yield{type:"finish",reason:W?"tool-calls":"stop"}}catch(J){if(!Q)yield{type:"finish",reason:Z.signal?.aborted?"aborted":"error",error:J instanceof Error?J.message:String(J)}}}}}function Bq($){let Z=Object.fromEntries(Object.entries($).filter(([,Q])=>Q!==void 0));return Object.keys(Z).length>0?Z:void 0}function Gq($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function Kq($){let Z={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(Gq($))Object.assign(Z,{apiVersion:$.azure?.apiVersion,useIdentity:$.azure?.useIdentity});if($.providerId==="bedrock")Object.assign(Z,{authentication:$.aws?.authentication,profile:$.aws?.profile,accessKeyId:$.aws?.accessKey,secretAccessKey:$.aws?.secretKey,sessionToken:$.aws?.sessionToken,usePromptCache:$.aws?.usePromptCache,useCrossRegionInference:$.useCrossRegionInference,useGlobalInference:$.useGlobalInference,endpoint:$.aws?.endpoint,customModelBaseId:$.aws?.customModelBaseId});if($.providerId==="vertex"){let Q=$.gcp?.region??$.region;Object.assign(Z,{project:$.gcp?.projectId,projectId:$.gcp?.projectId,location:Q,region:Q})}if($.providerId==="sapaicore")Object.assign(Z,$.sap);return Bq(Z)}function U3($){let Z=$.providerConfig;if(Z?.knownModels)return Z.knownModels;if($.knownModels)return $.knownModels;return Vq[$.providerId]?.models??void 0}function Fq($){if(!$?.length)return;let Z=new Set;for(let Q of $)switch(Q){case"tools":case"reasoning":case"prompt-cache":case"images":Z.add(Q);break;case"structured_output":Z.add("structured-output");break;default:Z.add("text")}return Z.add("text"),[...Z]}function Aq($,Z){return{id:$,name:Z.name??$,description:Z.description,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxOutputTokens:Z.maxTokens,capabilities:Fq(Z.capabilities),metadata:{family:Z.family,pricing:Z.pricing,status:Z.status,releaseDate:Z.releaseDate}}}function YB($,Z,Q){let W=$.providerConfig,J=W?.providerId===$.providerId?W:void 0,X={...J??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??J?.apiKey,baseUrl:$.baseUrl??J?.baseUrl,headers:$.headers??J?.headers,knownModels:U3($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:Z,extensionContext:$.extensionContext};if(jq(Hq(X.providerId)))return XB(()=>Yq(X));return Xq({fetch:X.fetch,providerConfigs:[{providerId:X.providerId,apiKey:X.apiKey,baseUrl:X.baseUrl,headers:X.headers,fetch:X.fetch,options:Kq(X),models:X.knownModels?Object.entries(X.knownModels).map(([Y,j])=>Aq(Y,j)):void 0}],logger:Z,telemetry:Q??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:X.providerId,modelId:X.modelId},{maxTokens:X.maxOutputTokens})}import{createMediaBudgetState as fq,IMAGE_OMITTED_PLACEHOLDER as jB,normalizeUserInput as VB,resolveMediaBudget as Uq,validateAndReserveImageMedia as Dq}from"@cline/shared";var Lq=8000,_q=50000,zq=6000000,Tq=200000,Oq=12000,qq=65536,b6=2000,HB=40000,Mq=8,D3={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},Rq=new Set(["read","read_files"]),G2="[outdated - see the latest file content]",BB="Tool execution was interrupted before a result was produced.",GB=($)=>`
446
+ `)}catch(F){if(clearTimeout(G),F instanceof Error){if(F.name==="AbortError")throw Error(`Request timed out after ${Z}ms`);throw F}throw Error(`Fetch failed: ${String(F)}`)}finally{if(V.signal&&K)V.signal.removeEventListener("abort",K)}}}function P6($={}){return j2($)}function O8($={}){return{readFile:N6($.fileRead),search:C6($.search),bash:P6($.bash),webFetch:w6($.webFetch),applyPatch:R6($.applyPatch),editor:E6($.editor)}}var rO={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"},q8=[{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 $H($,Z){if(!Z||Z.length===0)return!0;let Q=$.toLowerCase();return Z.some((W)=>Q.includes(W.toLowerCase()))}function iO($,Z,Q,W){if($.mode&&$.mode!=="any"&&$.mode!==W)return!1;return $H(Z,$.providerIdIncludes)&&$H(Q,$.modelIdIncludes)}function M8($,Z,Q,W){if(!W||W.length===0)return{};let J=new Map;for(let Y of W){if(!iO(Y,$,Z,Q))continue;for(let j of Y.disableTools??[])J.set(j,!1);for(let j of Y.enableTools??[])J.set(j,!0)}let X={};for(let[Y,j]of J.entries())X[rO[Y]]=j;return X}var u0={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 l1($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function qZ($){if($!=="yolo")return{};let Z={enabled:!0,autoApprove:!0},Q={"*":Z};for(let W of X$)Q[W]=Z;return Q}function MZ($,Z){let Q=u0[$],{enableSpawnAgent:W,enableAgentTeams:J,...X}=Q;return D$({...X,...Z})}import{createTool as VM,zodToJsonSchema as BM}from"@cline/shared";import{z as N3}from"zod";$1();import{createAgentRuntime as sq}from"@cline/agents";import{createContributionRegistry as oq,mergeModelOptions as zH}from"@cline/shared";import{createGateway as Wq,createHandlerAsync as Jq,hasRegisteredHandler as Xq,MODEL_COLLECTIONS_BY_PROVIDER_ID as Yq,normalizeProviderId as jq}from"@cline/llms";import{EMPTY_CONTENT_TEXT as nO}from"@cline/shared";function aO($){let Z=oO($.content),Q=[],W=$.id??$q(),J=0,X=[],Y=()=>{if(X.length===0)return;let j=J===0?W:`${W}_part_${J}`;J+=1,Q.push({id:j,role:$.role,content:X.map(tO),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:ZH($.metrics)}),X=[]};if(Z.length===0)return Q.push({id:W,role:$.role,content:[{type:"text",text:nO}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:ZH($.metrics)}),Q;for(let j of Z){if(j.type!=="tool_result"){X.push(j);continue}Y(),Q.push({id:`${W}_tool_${j.tool_use_id}`,role:"tool",content:[WH(j)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return Y(),Q}function RZ($){return $.flatMap(aO)}function sO($){let Z=$.content.map(JH).filter((Q)=>Q!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:Z,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:eO($.metrics)}}function R8($){return $.map(sO)}function EZ($){let Z=[];for(let Q of $){let W=Q.content.map(JH).filter((Y)=>Y!==void 0),J=Q.role==="tool"?"user":Q.role,X=Z[Z.length-1];if(J==="user"&&W.length>0&&W.every((Y)=>Y.type==="tool_result")&&X?.role==="user"&&Array.isArray(X.content)&&X.content.every((Y)=>Y.type==="tool_result")){X.content.push(...W);continue}Z.push({role:J,content:W})}return Z}function oO($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function tO($){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 WH($)}}function WH($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function JH($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let Z=$.metadata;return{type:"thinking",thinking:$.text,signature:Z?.signature,details:Z?.details}}case"image":return typeof $.image==="string"?{type:"image",data:$.image,mediaType:$.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:$.path,content:$.content};case"tool-call":{let Z=$.metadata;return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:Z?.thoughtSignature??Z?.signature}}case"tool-result":{let Z=$.output,Q=typeof Z==="string"?Z:Array.isArray(Z)?Z:JSON.stringify(Z);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:Q,is_error:$.isError}}}}function ZH($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function eO($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var QH=0;function $q(){return QH+=1,`msg_${Date.now().toString(36)}_${QH.toString(36)}`}function Zq($){switch($.type){case"text":return[{type:"text-delta",text:$.text}];case"reasoning":return[{type:"reasoning-delta",text:$.reasoning,metadata:$.signature?{thoughtSignature:$.signature,details:$.details}:{details:$.details}}];case"tool_calls":{let Z=$.tool_call.function,Q=Z.arguments;return[{type:"tool-call-delta",toolCallId:$.tool_call.call_id??Z.id,toolName:Z.name,inputText:typeof Q==="string"?Q:void 0,input:typeof Q==="string"?void 0:Q,...$.signature?{metadata:{thoughtSignature:$.signature}}:{}}]}case"usage":return[{type:"usage",usage:{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,reasoningTokenCount:$.thoughtsTokenCount,totalCost:$.totalCost}}];case"done":return[{type:"finish",reason:Qq($),error:$.error}];default:return[]}}function Qq($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function XH($){return{async*stream(Z){let Q=!1,W=!1;try{let J=typeof $==="function"?await $():$;J.setAbortSignal?.(Z.signal);let X=EZ(Z.messages),Y=Z.tools.map((j)=>({name:j.name,description:j.description,inputSchema:j.inputSchema}));for await(let j of J.createMessage(Z.systemPrompt??"",X,Y))for(let V of Zq(j)){if(V.type==="finish")Q=!0;else if(V.type==="tool-call-delta")W=!0;yield V}if(!Q)yield{type:"finish",reason:W?"tool-calls":"stop"}}catch(J){if(!Q)yield{type:"finish",reason:Z.signal?.aborted?"aborted":"error",error:J instanceof Error?J.message:String(J)}}}}}function Vq($){let Z=Object.fromEntries(Object.entries($).filter(([,Q])=>Q!==void 0));return Object.keys(Z).length>0?Z:void 0}function Bq($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function Hq($){let Z={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(Bq($))Object.assign(Z,{apiVersion:$.azure?.apiVersion,useIdentity:$.azure?.useIdentity});if($.providerId==="bedrock")Object.assign(Z,{authentication:$.aws?.authentication,profile:$.aws?.profile,accessKeyId:$.aws?.accessKey,secretAccessKey:$.aws?.secretKey,sessionToken:$.aws?.sessionToken,usePromptCache:$.aws?.usePromptCache,useCrossRegionInference:$.useCrossRegionInference,useGlobalInference:$.useGlobalInference,endpoint:$.aws?.endpoint,customModelBaseId:$.aws?.customModelBaseId});if($.providerId==="vertex"){let Q=$.gcp?.region??$.region;Object.assign(Z,{project:$.gcp?.projectId,projectId:$.gcp?.projectId,location:Q,region:Q})}if($.providerId==="sapaicore")Object.assign(Z,$.sap);return Vq(Z)}function U3($){let Z=$.providerConfig;if(Z?.knownModels)return Z.knownModels;if($.knownModels)return $.knownModels;return Yq[$.providerId]?.models??void 0}function Gq($){if(!$?.length)return;let Z=new Set;for(let Q of $)switch(Q){case"tools":case"reasoning":case"prompt-cache":case"images":Z.add(Q);break;case"structured_output":Z.add("structured-output");break;default:Z.add("text")}return Z.add("text"),[...Z]}function Kq($,Z){return{id:$,name:Z.name??$,description:Z.description,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxOutputTokens:Z.maxTokens,capabilities:Gq(Z.capabilities),metadata:{family:Z.family,pricing:Z.pricing,status:Z.status,releaseDate:Z.releaseDate}}}function YH($,Z,Q){let W=$.providerConfig,J=W?.providerId===$.providerId?W:void 0,X={...J??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??J?.apiKey,baseUrl:$.baseUrl??J?.baseUrl,headers:$.headers??J?.headers,knownModels:U3($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:Z,extensionContext:$.extensionContext};if(Xq(jq(X.providerId)))return XH(()=>Jq(X));return Wq({fetch:X.fetch,providerConfigs:[{providerId:X.providerId,apiKey:X.apiKey,baseUrl:X.baseUrl,headers:X.headers,fetch:X.fetch,options:Hq(X),models:X.knownModels?Object.entries(X.knownModels).map(([Y,j])=>Kq(Y,j)):void 0}],logger:Z,telemetry:Q??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:X.providerId,modelId:X.modelId},{maxTokens:X.maxOutputTokens})}import{createMediaBudgetState as Fq,IMAGE_OMITTED_PLACEHOLDER as jH,normalizeUserInput as VH,resolveMediaBudget as Aq,validateAndReserveImageMedia as fq}from"@cline/shared";var Uq=8000,Dq=50000,Lq=6000000,_q=200000,zq=12000,Tq=65536,b6=2000,BH=40000,Oq=8,D3={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},qq=new Set(["read","read_files"]),G2="[outdated - see the latest file content]",HH="Tool execution was interrupted before a result was produced.",GH=($)=>`
447
447
 
448
448
  ...[truncated ${$} chars]...
449
449
 
@@ -451,84 +451,84 @@ Searched ${L} files.`;let D=[`Found ${A.length} result${A.length===1?"":"s"} for
451
451
 
452
452
  ...[truncated ${$} chars to fit provider request budget]...
453
453
 
454
- `,Eq=($)=>`
454
+ `,Mq=($)=>`
455
455
 
456
456
  ...[assistant text truncated: omitted ${$} chars]...
457
457
 
458
- `,KB=($)=>`
458
+ `,KH=($)=>`
459
459
 
460
460
  ...[assistant text truncated: omitted ${$} chars to fit provider request budget]...
461
461
 
462
- `,Nq=($)=>`
462
+ `,Rq=($)=>`
463
463
 
464
464
  ...[assistant text truncated: omitted ${$} chars due to repeated tool-call markup]...
465
465
 
466
- `;function fB($=process.env){return{maxToolResultChars:AB($[D3.maxToolResultChars]),maxTotalTextBytes:AB($[D3.maxTotalTextBytes]),minOutdatedRewriteBytes:Cq($[D3.minOutdatedRewriteBytes])}}class _3{indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor($={}){this.maxToolResultChars=S6($.maxToolResultChars,Lq),this.maxFileContentChars=S6($.maxFileContentChars,_q),this.maxTotalTextBytes=S6($.maxTotalTextBytes,zq),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=S6($.maxAssistantTextChars,Tq),this.maxAssistantToolMarkupChars=S6($.maxAssistantToolMarkupChars,Oq),this.minOutdatedRewriteBytes=Pq($.minOutdatedRewriteBytes,qq)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Q=this.addMissingToolResults($).map((J)=>{if(!Array.isArray(J.content)){if(J.role==="user"&&typeof J.content==="string"){let j=VB(J.content);if(j!==J.content)return{...J,content:j}}if(J.role==="assistant"&&typeof J.content==="string"){let j=this.truncateAssistantText(J.content);if(j!==J.content)return{...J,content:j}}return J}let X=!1,Y=J.content.map((j)=>{let V=this.transformBlock(j,J.role);if(V!==j)X=!0;return V});return X?{...J,content:Y}:J}),W=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(W)}transformBlock($,Z){if(Z==="user"&&$.type==="text"&&typeof $.text==="string"){let J=VB($.text);if(J!==$.text)return{...$,text:J};return $}if(Z==="assistant"&&$.type==="text"&&typeof $.text==="string"){let J=this.truncateAssistantText($.text);return J===$.text?$:{...$,text:J}}if($.type==="file"){let J=E8($.content,this.maxFileContentChars,GB);return J===$.content?$:{...$,content:J}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),W=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let J=this.committedOutdatedRewrites.get($.tool_use_id);if(J&&J.size>0){let Y=this.getReadLocators($).filter((j)=>J.has(this.toReadLocatorKey(j))&&this.isOutdatedReadLocator(j,$.tool_use_id));if(Y.length>0)W=this.replaceOutdatedReadContent(W,Y)}}return W=this.truncateToolResultContent(W),W===$.content?$:{...$,content:W}}reindex($){let Z=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!Z)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let W=$[Q];if(!Array.isArray(W.content))continue;for(let J=0;J<W.content.length;J++){let X=W.content[J];if(X.type==="file")this.latestFullContentOwnerByPathCache.set(X.path,`file:${Q}:${J}`);else if(X.type==="tool_use"){let Y=X.name.toLowerCase();if(this.toolNameByIdCache.set(X.id,Y),this.isReadTool(Y)){let j=this.extractLocatorsFromReadToolInput(X.input);if(j.length>0)this.readLocatorsByToolUseIdCache.set(X.id,j)}}else if(X.type==="tool_result"){let Y=this.resolveToolName(X);if(!this.isReadTool(Y)||X.is_error===!0)continue;let j=this.getReadLocators(X);for(let V of j)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),X.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,X.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let Z=new Map,Q=new Set,W=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type!=="tool_result"||X.is_error===!0)continue;let Y=this.resolveToolName(X);if(!this.isReadTool(Y))continue;Q.add(X.tool_use_id);let j=this.committedOutdatedRewrites.get(X.tool_use_id),V=new Set,H=new Set;for(let G of this.getReadLocators(X)){let K=this.toReadLocatorKey(G);if(!this.isOutdatedReadLocator(G,X.tool_use_id))continue;if(H.add(K),!j?.has(K))V.add(K)}if(j){for(let G of j)if(!H.has(G))j.delete(G);if(j.size===0)this.committedOutdatedRewrites.delete(X.tool_use_id)}if(V.size===0)continue;let B=Z.get(X.tool_use_id);if(!B)B=new Set,Z.set(X.tool_use_id,B);for(let G of V)B.add(G);W+=this.estimateOutdatedReclaimBytes(X.content,V)}}for(let J of this.committedOutdatedRewrites.keys())if(!Q.has(J))this.committedOutdatedRewrites.delete(J);if(Z.size===0||W<this.minOutdatedRewriteBytes)return;for(let[J,X]of Z){let Y=this.committedOutdatedRewrites.get(J);if(!Y)Y=new Set,this.committedOutdatedRewrites.set(J,Y);for(let j of X)Y.add(j)}}estimateOutdatedReclaimBytes($,Z){let Q=this.extractReadLocatorsFromToolResultContent($),W=Q.length>0&&Q.every((V)=>Z.has(this.toReadLocatorKey(V))),J=(V)=>{let H;try{H=JSON.parse(V)}catch{return W||Q.length===0?W0(this.truncateMiddle(V)):0}let B=Array.isArray(H)?H:[H],G=0;for(let K of B){let F=this.extractLocatorFromResultEntry(K);if(F&&Z.has(this.toReadLocatorKey(F)))G+=this.providerBoundEntryBytes(K)}return G};if(typeof $==="string")return J($);let X=new Set(Z),Y=0;for(let V of $)if(V.type==="text")Y+=this.countOutdatedImageEntries(V.text,X);let j=0;for(let V of $)if(V.type==="text")j+=J(V.text);else if(V.type==="image"){if(Y>0)Y-=1,j+=W0(V.data)}else if(_$(V)){let H=this.extractLocatorFromResultEntry(V);if(H&&Z.has(this.toReadLocatorKey(H)))j+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(Z.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))j+=W0(this.truncateMiddle(V.content))}return j}providerBoundEntryBytes($){let Z=this.truncateNestedStrings($);return W0(JSON.stringify(Z))}addMissingToolResults($){let Z=this.collectToolResultIds($),Q=[],W=new Map,J=!1,X=()=>{if(W.size===0)return;Y(this.createMissingToolResultMessage(W)),W.clear(),J=!0},Y=(j)=>{let V=Q.at(-1);if(this.shouldMergeUserAfterToolResults(V,j)){Q[Q.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(j.content)]},J=!0;return}Q.push(j)};for(let j of $){if(this.isToolResultOnlyMessage(j)){if(Y(this.appendMissingToolResults(j,W)),W.size>0)W.clear(),J=!0;continue}if(Array.isArray(j.content)){let V=j.content.filter((B)=>B.type==="tool_result"),H=j.content.filter((B)=>B.type!=="tool_result");if(V.length>0){let B=this.appendMissingToolResults({...j,role:"user",content:V},W);if(Y(B),W.size>0)W.clear();J=!0}if(H.length>0||V.length===0){if(V.length===0)X();let B=V.length>0?{...j,content:H}:j;if(Y(B),B.role==="assistant")this.trackMissingToolCalls(B,Z,W)}continue}X(),Y(j)}return X(),J?Q:$}appendMissingToolResults($,Z){if(Z.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(Z)]}}shouldMergeUserAfterToolResults($,Z){return $?.role==="user"&&Z.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(Z.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let W of Q.content)if(W.type==="tool_result")Z.add(W.tool_use_id)}return Z}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}trackMissingToolCalls($,Z,Q){if(!Array.isArray($.content))return;for(let W of $.content){if(W.type!=="tool_use"||Z.has(W.id))continue;Q.set(W.id,W.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([Z,Q])=>({type:"tool_result",tool_use_id:Z,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${BB} Tool: ${$}.`:BB}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let Z=$,Q=this.readResultLocatorCache.get(Z);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(Z,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let Z=$,Q=[],W=this.extractLocatorFromReadRequest(Z);if(W)Q.push(W);if(Array.isArray(Z.files))for(let J of Z.files){let X=this.extractLocatorFromReadRequest(J);if(X)Q.push(X)}if(Array.isArray(Z.file_paths)){for(let J of Z.file_paths)if(typeof J==="string"&&J.length>0)Q.push({path:J,startLine:null,endLine:null})}return this.dedupeReadLocators(Q)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);let Z=[];for(let Q of $){if(Q.type==="text"){Z.push(...this.tryParseReadLocators(Q.text));continue}if(_$(Q)){let W=this.extractLocatorFromResultEntry(Q);if(W)Z.push(W)}}return this.dedupeReadLocators(Z)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let W of $){let J=this.extractLocatorFromResultEntry(W);if(J)Q.push(J)}return this.dedupeReadLocators(Q)}let Z=this.extractLocatorFromResultEntry($);return Z?[Z]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(Q)return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)};if(typeof Z.query==="string"&&Z.query.length>0)return this.parseReadQuery(Z.query);return}extractPath($){let Z=[$.path,$.file_path,$.filePath];for(let Q of Z)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let Z=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!Z)return{path:$,startLine:null,endLine:null};return{path:Z[1],startLine:Number(Z[2]),endLine:Z[3]==="EOF"?null:Number(Z[3])}}dedupeReadLocators($){let Z=new Map;for(let Q of $)Z.set(this.toReadLocatorKey(Q),Q);return Array.from(Z.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,Z){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==Z)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==Z}replaceOutdatedReadContent($,Z){let Q=new Set(Z.map((X)=>this.toReadLocatorKey(X))),W=new Set(Z.map((X)=>X.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??G2;let J=0;for(let X of $)if(X.type==="text")J+=this.countOutdatedImageEntries(X.text,Q);return $.map((X)=>{if(X.type==="file"){if(!W.has(X.path))return X;return{...X,content:G2}}if(X.type==="image"){if(J===0)return X;return J-=1,{type:"text",text:G2}}if(_$(X))return this.replaceOutdatedReadEntry(X,Q);if(X.type!=="text")return X;let Y=this.replaceOutdatedInString(X.text,Q);if(Y===null)return{...X,text:G2};return Y===X.text?X:{...X,text:Y}})}countOutdatedImageEntries($,Z){let Q;try{Q=JSON.parse($)}catch{return 0}let W=Array.isArray(Q)?Q:[Q],J=0;for(let X of W){if(!X||typeof X!=="object")continue;let Y=X,j=this.extractLocatorFromResultEntry(Y);if(!j)continue;if(!Z.has(this.toReadLocatorKey(j)))continue;if(Y.result==="Successfully read image"||Y.content==="Successfully read image")J+=1}return J}replaceOutdatedInString($,Z){let Q;try{Q=JSON.parse($)}catch{return null}let W=Array.isArray(Q)?Q.map((J)=>this.replaceOutdatedReadEntry(J,Z)):this.replaceOutdatedReadEntry(Q,Z);return JSON.stringify(W)}replaceOutdatedReadEntry($,Z){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!Z.has(this.toReadLocatorKey(Q)))return $;let W={...$};if(typeof W.result==="string")W.result=G2;else if(typeof W.content==="string")W.content=G2;else W.result=G2;return W}isReadTool($){return!!$&&Rq.has($)}resolveToolName($){let Z=this.toolNameByIdCache.get($.tool_use_id);if(Z!==void 0)return Z;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((Z)=>{if(Z.type==="file"){let Q=this.truncateMiddle(Z.content);return Q===Z.content?Z:{...Z,content:Q}}if(Z.type==="text"){let Q=this.truncateMiddle(Z.text);return Q===Z.text?Z:{...Z,text:Q}}if(_$(Z))return this.truncateNestedStrings(Z);return Z})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let Z=!1,Q=$.map((W)=>{let J=this.truncateNestedStrings(W);if(J!==W)Z=!0;return J});return Z?Q:$}if($!==null&&typeof $==="object"){if(z3($))return $;let Z=!1,Q={};for(let[W,J]of Object.entries($)){let X=this.truncateNestedStrings(J);if(X!==J)Z=!0;Q[W]=X}return Z?Q:$}return $}truncateMiddle($){return E8($,this.maxToolResultChars,GB)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return E8($,this.maxAssistantToolMarkupChars,Nq);return E8($,this.maxAssistantTextChars,Eq)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let Z=0;for(let Q of $.matchAll(wq))if(Z+=1,Z>=Mq)return!0;return!1}truncateToTotalTextBudget($){let Z=this.countMessageTextBytes($);if(Z<=this.maxTotalTextBytes)return $;let Q=$.map((J)=>{if(!Array.isArray(J.content))return{...J};return{...J,content:J.content.map((X)=>bq(X))}}),W=this.collectTruncationCandidates(Q);for(let J of W){if(Z<=this.maxTotalTextBytes)break;let X=J.byteLength;if(X<=J.minBytes)continue;let Y=Z-this.maxTotalTextBytes,j=Math.max(J.minBytes,X-Y),V=Sq(J.get(),j,J.makeMarker);J.set(V),Z-=X-W0(V)}return Q}countMessageTextBytes($){let Z=0;for(let Q of $){if(typeof Q.content==="string"){Z+=W0(Q.content);continue}for(let W of Q.content)if(W.type==="text")Z+=W0(W.text);else if(W.type==="thinking")Z+=W0(W.thinking);else if(W.type==="file")Z+=W0(W.content);else if(W.type==="tool_use")Z+=NZ(W.input);else if(W.type==="tool_result"){if(typeof W.content==="string")Z+=W0(W.content);else for(let J of W.content)if(J.type==="text")Z+=W0(J.text);else if(J.type==="file")Z+=W0(J.content);else if(_$(J))Z+=NZ(J)}}return Z}collectTruncationCandidates($){let Z=[],Q=[];for(let W of $){if(W.role==="assistant"&&typeof W.content==="string"){Z.push({byteLength:W0(W.content),minBytes:HB,makeMarker:KB,get:()=>W.content,set:(J)=>{W.content=J}});continue}if(!Array.isArray(W.content))continue;for(let J of W.content){if(J.type==="tool_use"){wZ(J.input,Q);continue}if(W.role==="assistant"&&J.type==="text"){Z.push({byteLength:W0(J.text),minBytes:HB,makeMarker:KB,get:()=>J.text,set:(X)=>{J.text=X}});continue}if(J.type!=="tool_result")continue;if(typeof J.content==="string"){Z.push({byteLength:W0(J.content),minBytes:b6,makeMarker:y6,get:()=>J.content,set:(X)=>{J.content=X}});continue}for(let X of J.content)if(X.type==="text")Z.push({byteLength:W0(X.text),minBytes:b6,makeMarker:y6,get:()=>X.text,set:(Y)=>{X.text=Y}});else if(X.type==="file")Z.push({byteLength:W0(X.content),minBytes:b6,makeMarker:y6,get:()=>X.content,set:(Y)=>{X.content=Y}});else if(_$(X))wZ(X,Z)}}return Z.sort((W,J)=>J.byteLength-W.byteLength),Q.sort((W,J)=>J.byteLength-W.byteLength),[...Z,...Q]}applyMediaBudget($){let Z=this.resolveMediaBudget();if(Z.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&Z.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&Z.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=fq(),W=!1,J=$.map((X)=>{if(!Array.isArray(X.content))return X;let Y=!1,j=X.content.map((V)=>{let H=this.applyMediaBudgetToBlock(V,Z,Q);if(H!==V)Y=!0;return H});if(!Y)return X;return W=!0,{...X,content:j}});return W?J:$}resolveMediaBudget(){return Uq(this.mediaBudget)}applyMediaBudgetToBlock($,Z,Q){if(L3($))return this.limitImageContent($,Z,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let W=!1,J=$.content.map((X)=>{let Y=this.applyMediaBudgetToToolResultEntry(X,Z,Q);if(Y!==X)W=!0;return Y});return W?{...$,content:J}:$}applyMediaBudgetToToolResultEntry($,Z,Q){if(L3($))return this.limitImageContent($,Z,Q);if(_$($))return this.limitNestedMedia($,Z,Q);return $}limitNestedMedia($,Z,Q){if(L3($)){let W=this.limitImageContent($,Z,Q);return W.type==="text"?W.text:W}if(Array.isArray($)){let W=!1,J=$.map((X)=>{let Y=this.limitNestedMedia(X,Z,Q);if(Y!==X)W=!0;return Y});return W?J:$}if($!==null&&typeof $==="object"){let W=!1,J={};for(let[X,Y]of Object.entries($)){let j=this.limitNestedMedia(Y,Z,Q);if(j!==Y)W=!0;J[X]=j}return W?J:$}return $}limitImageContent($,Z,Q){if(!UB($))return{type:"text",text:jB};let W=Dq($.mediaType,$.data,{maxImageEncodedBytes:Z.maxImageEncodedBytes,maxImageDecodedBytes:Z.maxImageDecodedBytes,maxTotalMediaBytes:Z.maxTotalMediaBytes},Q);if(!W.ok)return{type:"text",text:jB};return{...$,data:W.base64,mediaType:W.mediaType}}}var FB=String.raw`[\|\uFF5C]`,wq=new RegExp(String.raw`<\s*(?:${FB}\s*)?DSML\s*(?:${FB}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function W0($){return Buffer.byteLength($,"utf8")}function AB($){if($===void 0)return;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>0?Z:void 0}function Cq($){if($===void 0)return;let Z=$.trim().toLowerCase();if(Z==="infinity"||Z==="disable")return Number.POSITIVE_INFINITY;let Q=Number.parseInt($,10);return Number.isFinite(Q)&&Q>=0?Q:void 0}function S6($,Z){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):Z}function Pq($,Z){if(typeof $!=="number"||Number.isNaN($)||$<0)return Z;return Number.isFinite($)?Math.floor($):$}function E8($,Z,Q){if($.length<=Z)return $;let W=Q($.length-Z),J=Math.max(0,Math.floor((Z-W.length)/2)),X=Math.max(0,$.length-J*2),Y=Q(X),j=Math.max(0,Math.floor((Z-Y.length)/2)),V=$.slice(0,j),H=j>0?$.slice(-j):"";return`${V}${Y}${H}`}function Sq($,Z,Q){if(W0($)<=Z)return $;let W=0,J=$.length,X=E8($,0,Q);while(W<=J){let Y=W+J>>>1,j=E8($,Y,Q);if(W0(j)<=Z)X=j,W=Y+1;else J=Y-1}return X}function bq($){if($.type==="tool_use")return{...$,input:CZ($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((Z)=>_$(Z)?CZ(Z):{...Z})}}function _$($){if($===null||typeof $!=="object")return!1;let Z=$.type;return Z!=="text"&&Z!=="image"&&Z!=="file"}function L3($){return $!==null&&typeof $==="object"&&$.type==="image"}function UB($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function z3($){return UB($)}function NZ($){if(typeof $==="string")return W0($);if(Array.isArray($)){let Z=0;for(let Q of $)Z+=NZ(Q);return Z}if($!==null&&typeof $==="object"){if(z3($))return 0;let Z=0;for(let Q of Object.values($))Z+=NZ(Q);return Z}return 0}function wZ($,Z){if(Array.isArray($)){$.forEach((Q,W)=>{if(typeof Q==="string")Z.push({byteLength:W0(Q),minBytes:b6,makeMarker:y6,get:()=>$[W],set:(J)=>{$[W]=J}});else wZ(Q,Z)});return}if($!==null&&typeof $==="object"){if(z3($))return;let Q=$;for(let W of Object.keys(Q)){let J=Q[W];if(typeof J==="string")Z.push({byteLength:W0(J),minBytes:b6,makeMarker:y6,get:()=>Q[W],set:(X)=>{Q[W]=X}});else wZ(J,Z)}}}function CZ($){if(Array.isArray($))return $.map(CZ);if($!==null&&typeof $==="object"){let Z={};for(let[Q,W]of Object.entries($))Z[Q]=CZ(W);return Z}return $}function T3(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class O3{messages=[];conversationId=T3();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=T3(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=T3(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function DB($){let{agentConfig:Z}=$,Q=yq(Z),W=hq(Z),J=$.hooks,X=kq(Z.maxParallelToolCalls);return{sessionId:$.sessionId??Z.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??Z.systemPrompt,messageModelInfo:W,model:$.model,modelOptions:Q,tools:$.tools,hooks:J,prepareTurn:$.prepareTurn,consumePendingUserMessage:Z.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??Z.logger,telemetry:$.telemetry??Z.telemetry,initialMessages:$.initialMessages,completionPolicy:Z.completionPolicy,maxIterations:Z.maxIterations,toolExecution:X,toolPolicies:Z.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:Z.requestToolApproval}}function yq($){let Z={};if($.thinking!==void 0)Z.thinking=$.thinking;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)Z.maxTokensPerTurn=$.maxTokensPerTurn;if($.apiTimeoutMs!==void 0)Z.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(Z).length>0?Z:void 0}function hq($){let Z=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:Z}}function kq($){if($===void 0)return;return $>=2?"parallel":"sequential"}function Iq(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function xq($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function q3($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(q3);let Z={};for(let Q of Object.keys($).sort())Z[Q]=q3($[Q]);return Z}function gq($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(q3($))}catch{return String($)}}function mq($,Z,Q,W){if(Z===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=Z,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===W.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=W.hardThreshold}}var LB={softThreshold:3,hardThreshold:5};class M3{config;state=Iq();constructor($){this.config={softThreshold:$?.softThreshold??LB.softThreshold,hardThreshold:$?.hardThreshold??LB.hardThreshold}}inspect($){let Z=gq($.input),Q=mq(this.state,$.name,Z,this.config);if(Q.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Q.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){xq(this.state)}}class R3{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let Z=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&Z?Z:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let W=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(W),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Q,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!Z||Q<Z)return{action:"continue"};let J=await cq({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details},this.options.onLimitReached);if(J.action==="continue"){let X=J.guidance?.trim();if(X)this.options.appendRecoveryNotice(X,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:X}}return{action:"stop",reason:J.reason?.trim()||void 0,message:vq({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details,stopReason:J.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function vq($){let Z=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)Z.push(`Error: ${Q}`);let W=$.stopReason?.trim();if(W)Z.push(`Decision: ${W}`);return Z.push("Session state was preserved. Send a new prompt to resume from the latest state."),Z.join(" ")}async function cq($,Z){if(!Z)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await Z($)}catch(Q){return{action:"stop",reason:Q instanceof Error?Q.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function uq($){let Z=$.content.filter((Q)=>Q.type==="text");if(Z.length===0)return;return Z.map((Q)=>Q.text).join("")}function dq($){let Z=$.content.filter((Q)=>Q.type==="reasoning");if(Z.length===0)return;return{reasoning:Z.map((Q)=>Q.text).join(""),redacted:Z.some((Q)=>Q.redacted===!0)}}function lq($){return $.content.find((Z)=>Z.type==="tool-result")}function pq($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function rq($){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 E3{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:$.metadata?.reason==="auto_compaction"?"auto_compaction":void 0,metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let Z=[],Q=uq($);if(Q!==void 0)Z.push({type:"content_end",contentType:"text",text:Q});let W=dq($);if(W!==void 0)Z.push({type:"content_end",contentType:"reasoning",reasoning:W.reasoning});return Z}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input}]}translateToolFinished($){let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=Z===void 0?void 0:Date.now()-Z;this.toolStartedAt.delete($.toolCall.toolCallId);let W=lq($.message),J=W?.output,X=rq(W);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:J,error:X,durationMs:Q}]}translateUsage($){let Z=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,W=$.cacheReadTokens-this.lastUsage.cacheReadTokens,J=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,X=this.lastUsage.totalCost??0,j=($.totalCost??0)-X;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,Z),outputTokens:Math.max(0,Q),cacheReadTokens:W===0?void 0:Math.max(0,W),cacheWriteTokens:J===0?void 0:Math.max(0,J),cost:j===0?void 0:j,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let Z={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:pq($.status),text:$.outputText,iterations:$.iterations,usage:Z}]}}function $M($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function ZM($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function QM($,Z){let Q=$.trim(),W=Z.map((J)=>J.trim()).filter(Boolean).join(`
466
+ `;function fH($=process.env){return{maxToolResultChars:AH($[D3.maxToolResultChars]),maxTotalTextBytes:AH($[D3.maxTotalTextBytes]),minOutdatedRewriteBytes:Nq($[D3.minOutdatedRewriteBytes])}}class _3{indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor($={}){this.maxToolResultChars=S6($.maxToolResultChars,Uq),this.maxFileContentChars=S6($.maxFileContentChars,Dq),this.maxTotalTextBytes=S6($.maxTotalTextBytes,Lq),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=S6($.maxAssistantTextChars,_q),this.maxAssistantToolMarkupChars=S6($.maxAssistantToolMarkupChars,zq),this.minOutdatedRewriteBytes=Cq($.minOutdatedRewriteBytes,Tq)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Q=this.addMissingToolResults($).map((J)=>{if(!Array.isArray(J.content)){if(J.role==="user"&&typeof J.content==="string"){let j=VH(J.content);if(j!==J.content)return{...J,content:j}}if(J.role==="assistant"&&typeof J.content==="string"){let j=this.truncateAssistantText(J.content);if(j!==J.content)return{...J,content:j}}return J}let X=!1,Y=J.content.map((j)=>{let V=this.transformBlock(j,J.role);if(V!==j)X=!0;return V});return X?{...J,content:Y}:J}),W=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(W)}transformBlock($,Z){if(Z==="user"&&$.type==="text"&&typeof $.text==="string"){let J=VH($.text);if(J!==$.text)return{...$,text:J};return $}if(Z==="assistant"&&$.type==="text"&&typeof $.text==="string"){let J=this.truncateAssistantText($.text);return J===$.text?$:{...$,text:J}}if($.type==="file"){let J=E8($.content,this.maxFileContentChars,GH);return J===$.content?$:{...$,content:J}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),W=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let J=this.committedOutdatedRewrites.get($.tool_use_id);if(J&&J.size>0){let Y=this.getReadLocators($).filter((j)=>J.has(this.toReadLocatorKey(j))&&this.isOutdatedReadLocator(j,$.tool_use_id));if(Y.length>0)W=this.replaceOutdatedReadContent(W,Y)}}return W=this.truncateToolResultContent(W),W===$.content?$:{...$,content:W}}reindex($){let Z=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!Z)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let W=$[Q];if(!Array.isArray(W.content))continue;for(let J=0;J<W.content.length;J++){let X=W.content[J];if(X.type==="file")this.latestFullContentOwnerByPathCache.set(X.path,`file:${Q}:${J}`);else if(X.type==="tool_use"){let Y=X.name.toLowerCase();if(this.toolNameByIdCache.set(X.id,Y),this.isReadTool(Y)){let j=this.extractLocatorsFromReadToolInput(X.input);if(j.length>0)this.readLocatorsByToolUseIdCache.set(X.id,j)}}else if(X.type==="tool_result"){let Y=this.resolveToolName(X);if(!this.isReadTool(Y)||X.is_error===!0)continue;let j=this.getReadLocators(X);for(let V of j)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),X.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,X.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let Z=new Map,Q=new Set,W=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type!=="tool_result"||X.is_error===!0)continue;let Y=this.resolveToolName(X);if(!this.isReadTool(Y))continue;Q.add(X.tool_use_id);let j=this.committedOutdatedRewrites.get(X.tool_use_id),V=new Set,B=new Set;for(let G of this.getReadLocators(X)){let K=this.toReadLocatorKey(G);if(!this.isOutdatedReadLocator(G,X.tool_use_id))continue;if(B.add(K),!j?.has(K))V.add(K)}if(j){for(let G of j)if(!B.has(G))j.delete(G);if(j.size===0)this.committedOutdatedRewrites.delete(X.tool_use_id)}if(V.size===0)continue;let H=Z.get(X.tool_use_id);if(!H)H=new Set,Z.set(X.tool_use_id,H);for(let G of V)H.add(G);W+=this.estimateOutdatedReclaimBytes(X.content,V)}}for(let J of this.committedOutdatedRewrites.keys())if(!Q.has(J))this.committedOutdatedRewrites.delete(J);if(Z.size===0||W<this.minOutdatedRewriteBytes)return;for(let[J,X]of Z){let Y=this.committedOutdatedRewrites.get(J);if(!Y)Y=new Set,this.committedOutdatedRewrites.set(J,Y);for(let j of X)Y.add(j)}}estimateOutdatedReclaimBytes($,Z){let Q=this.extractReadLocatorsFromToolResultContent($),W=Q.length>0&&Q.every((V)=>Z.has(this.toReadLocatorKey(V))),J=(V)=>{let B;try{B=JSON.parse(V)}catch{return W||Q.length===0?W0(this.truncateMiddle(V)):0}let H=Array.isArray(B)?B:[B],G=0;for(let K of H){let F=this.extractLocatorFromResultEntry(K);if(F&&Z.has(this.toReadLocatorKey(F)))G+=this.providerBoundEntryBytes(K)}return G};if(typeof $==="string")return J($);let X=new Set(Z),Y=0;for(let V of $)if(V.type==="text")Y+=this.countOutdatedImageEntries(V.text,X);let j=0;for(let V of $)if(V.type==="text")j+=J(V.text);else if(V.type==="image"){if(Y>0)Y-=1,j+=W0(V.data)}else if(_$(V)){let B=this.extractLocatorFromResultEntry(V);if(B&&Z.has(this.toReadLocatorKey(B)))j+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(Z.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))j+=W0(this.truncateMiddle(V.content))}return j}providerBoundEntryBytes($){let Z=this.truncateNestedStrings($);return W0(JSON.stringify(Z))}addMissingToolResults($){let Z=this.collectToolResultIds($),Q=[],W=new Map,J=!1,X=()=>{if(W.size===0)return;Y(this.createMissingToolResultMessage(W)),W.clear(),J=!0},Y=(j)=>{let V=Q.at(-1);if(this.shouldMergeUserAfterToolResults(V,j)){Q[Q.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(j.content)]},J=!0;return}Q.push(j)};for(let j of $){if(this.isToolResultOnlyMessage(j)){if(Y(this.appendMissingToolResults(j,W)),W.size>0)W.clear(),J=!0;continue}if(Array.isArray(j.content)){let V=j.content.filter((H)=>H.type==="tool_result"),B=j.content.filter((H)=>H.type!=="tool_result");if(V.length>0){let H=this.appendMissingToolResults({...j,role:"user",content:V},W);if(Y(H),W.size>0)W.clear();J=!0}if(B.length>0||V.length===0){if(V.length===0)X();let H=V.length>0?{...j,content:B}:j;if(Y(H),H.role==="assistant")this.trackMissingToolCalls(H,Z,W)}continue}X(),Y(j)}return X(),J?Q:$}appendMissingToolResults($,Z){if(Z.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(Z)]}}shouldMergeUserAfterToolResults($,Z){return $?.role==="user"&&Z.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(Z.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let W of Q.content)if(W.type==="tool_result")Z.add(W.tool_use_id)}return Z}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}trackMissingToolCalls($,Z,Q){if(!Array.isArray($.content))return;for(let W of $.content){if(W.type!=="tool_use"||Z.has(W.id))continue;Q.set(W.id,W.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([Z,Q])=>({type:"tool_result",tool_use_id:Z,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${HH} Tool: ${$}.`:HH}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let Z=$,Q=this.readResultLocatorCache.get(Z);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(Z,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let Z=$,Q=[],W=this.extractLocatorFromReadRequest(Z);if(W)Q.push(W);if(Array.isArray(Z.files))for(let J of Z.files){let X=this.extractLocatorFromReadRequest(J);if(X)Q.push(X)}if(Array.isArray(Z.file_paths)){for(let J of Z.file_paths)if(typeof J==="string"&&J.length>0)Q.push({path:J,startLine:null,endLine:null})}return this.dedupeReadLocators(Q)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);let Z=[];for(let Q of $){if(Q.type==="text"){Z.push(...this.tryParseReadLocators(Q.text));continue}if(_$(Q)){let W=this.extractLocatorFromResultEntry(Q);if(W)Z.push(W)}}return this.dedupeReadLocators(Z)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let W of $){let J=this.extractLocatorFromResultEntry(W);if(J)Q.push(J)}return this.dedupeReadLocators(Q)}let Z=this.extractLocatorFromResultEntry($);return Z?[Z]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(Q)return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)};if(typeof Z.query==="string"&&Z.query.length>0)return this.parseReadQuery(Z.query);return}extractPath($){let Z=[$.path,$.file_path,$.filePath];for(let Q of Z)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let Z=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!Z)return{path:$,startLine:null,endLine:null};return{path:Z[1],startLine:Number(Z[2]),endLine:Z[3]==="EOF"?null:Number(Z[3])}}dedupeReadLocators($){let Z=new Map;for(let Q of $)Z.set(this.toReadLocatorKey(Q),Q);return Array.from(Z.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,Z){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==Z)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==Z}replaceOutdatedReadContent($,Z){let Q=new Set(Z.map((X)=>this.toReadLocatorKey(X))),W=new Set(Z.map((X)=>X.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??G2;let J=0;for(let X of $)if(X.type==="text")J+=this.countOutdatedImageEntries(X.text,Q);return $.map((X)=>{if(X.type==="file"){if(!W.has(X.path))return X;return{...X,content:G2}}if(X.type==="image"){if(J===0)return X;return J-=1,{type:"text",text:G2}}if(_$(X))return this.replaceOutdatedReadEntry(X,Q);if(X.type!=="text")return X;let Y=this.replaceOutdatedInString(X.text,Q);if(Y===null)return{...X,text:G2};return Y===X.text?X:{...X,text:Y}})}countOutdatedImageEntries($,Z){let Q;try{Q=JSON.parse($)}catch{return 0}let W=Array.isArray(Q)?Q:[Q],J=0;for(let X of W){if(!X||typeof X!=="object")continue;let Y=X,j=this.extractLocatorFromResultEntry(Y);if(!j)continue;if(!Z.has(this.toReadLocatorKey(j)))continue;if(Y.result==="Successfully read image"||Y.content==="Successfully read image")J+=1}return J}replaceOutdatedInString($,Z){let Q;try{Q=JSON.parse($)}catch{return null}let W=Array.isArray(Q)?Q.map((J)=>this.replaceOutdatedReadEntry(J,Z)):this.replaceOutdatedReadEntry(Q,Z);return JSON.stringify(W)}replaceOutdatedReadEntry($,Z){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!Z.has(this.toReadLocatorKey(Q)))return $;let W={...$};if(typeof W.result==="string")W.result=G2;else if(typeof W.content==="string")W.content=G2;else W.result=G2;return W}isReadTool($){return!!$&&qq.has($)}resolveToolName($){let Z=this.toolNameByIdCache.get($.tool_use_id);if(Z!==void 0)return Z;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((Z)=>{if(Z.type==="file"){let Q=this.truncateMiddle(Z.content);return Q===Z.content?Z:{...Z,content:Q}}if(Z.type==="text"){let Q=this.truncateMiddle(Z.text);return Q===Z.text?Z:{...Z,text:Q}}if(_$(Z))return this.truncateNestedStrings(Z);return Z})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let Z=!1,Q=$.map((W)=>{let J=this.truncateNestedStrings(W);if(J!==W)Z=!0;return J});return Z?Q:$}if($!==null&&typeof $==="object"){if(z3($))return $;let Z=!1,Q={};for(let[W,J]of Object.entries($)){let X=this.truncateNestedStrings(J);if(X!==J)Z=!0;Q[W]=X}return Z?Q:$}return $}truncateMiddle($){return E8($,this.maxToolResultChars,GH)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return E8($,this.maxAssistantToolMarkupChars,Rq);return E8($,this.maxAssistantTextChars,Mq)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let Z=0;for(let Q of $.matchAll(Eq))if(Z+=1,Z>=Oq)return!0;return!1}truncateToTotalTextBudget($){let Z=this.countMessageTextBytes($);if(Z<=this.maxTotalTextBytes)return $;let Q=$.map((J)=>{if(!Array.isArray(J.content))return{...J};return{...J,content:J.content.map((X)=>Pq(X))}}),W=this.collectTruncationCandidates(Q);for(let J of W){if(Z<=this.maxTotalTextBytes)break;let X=J.byteLength;if(X<=J.minBytes)continue;let Y=Z-this.maxTotalTextBytes,j=Math.max(J.minBytes,X-Y),V=wq(J.get(),j,J.makeMarker);J.set(V),Z-=X-W0(V)}return Q}countMessageTextBytes($){let Z=0;for(let Q of $){if(typeof Q.content==="string"){Z+=W0(Q.content);continue}for(let W of Q.content)if(W.type==="text")Z+=W0(W.text);else if(W.type==="thinking")Z+=W0(W.thinking);else if(W.type==="file")Z+=W0(W.content);else if(W.type==="tool_use")Z+=NZ(W.input);else if(W.type==="tool_result"){if(typeof W.content==="string")Z+=W0(W.content);else for(let J of W.content)if(J.type==="text")Z+=W0(J.text);else if(J.type==="file")Z+=W0(J.content);else if(_$(J))Z+=NZ(J)}}return Z}collectTruncationCandidates($){let Z=[],Q=[];for(let W of $){if(W.role==="assistant"&&typeof W.content==="string"){Z.push({byteLength:W0(W.content),minBytes:BH,makeMarker:KH,get:()=>W.content,set:(J)=>{W.content=J}});continue}if(!Array.isArray(W.content))continue;for(let J of W.content){if(J.type==="tool_use"){CZ(J.input,Q);continue}if(W.role==="assistant"&&J.type==="text"){Z.push({byteLength:W0(J.text),minBytes:BH,makeMarker:KH,get:()=>J.text,set:(X)=>{J.text=X}});continue}if(J.type!=="tool_result")continue;if(typeof J.content==="string"){Z.push({byteLength:W0(J.content),minBytes:b6,makeMarker:y6,get:()=>J.content,set:(X)=>{J.content=X}});continue}for(let X of J.content)if(X.type==="text")Z.push({byteLength:W0(X.text),minBytes:b6,makeMarker:y6,get:()=>X.text,set:(Y)=>{X.text=Y}});else if(X.type==="file")Z.push({byteLength:W0(X.content),minBytes:b6,makeMarker:y6,get:()=>X.content,set:(Y)=>{X.content=Y}});else if(_$(X))CZ(X,Z)}}return Z.sort((W,J)=>J.byteLength-W.byteLength),Q.sort((W,J)=>J.byteLength-W.byteLength),[...Z,...Q]}applyMediaBudget($){let Z=this.resolveMediaBudget();if(Z.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&Z.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&Z.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=Fq(),W=!1,J=$.map((X)=>{if(!Array.isArray(X.content))return X;let Y=!1,j=X.content.map((V)=>{let B=this.applyMediaBudgetToBlock(V,Z,Q);if(B!==V)Y=!0;return B});if(!Y)return X;return W=!0,{...X,content:j}});return W?J:$}resolveMediaBudget(){return Aq(this.mediaBudget)}applyMediaBudgetToBlock($,Z,Q){if(L3($))return this.limitImageContent($,Z,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let W=!1,J=$.content.map((X)=>{let Y=this.applyMediaBudgetToToolResultEntry(X,Z,Q);if(Y!==X)W=!0;return Y});return W?{...$,content:J}:$}applyMediaBudgetToToolResultEntry($,Z,Q){if(L3($))return this.limitImageContent($,Z,Q);if(_$($))return this.limitNestedMedia($,Z,Q);return $}limitNestedMedia($,Z,Q){if(L3($)){let W=this.limitImageContent($,Z,Q);return W.type==="text"?W.text:W}if(Array.isArray($)){let W=!1,J=$.map((X)=>{let Y=this.limitNestedMedia(X,Z,Q);if(Y!==X)W=!0;return Y});return W?J:$}if($!==null&&typeof $==="object"){let W=!1,J={};for(let[X,Y]of Object.entries($)){let j=this.limitNestedMedia(Y,Z,Q);if(j!==Y)W=!0;J[X]=j}return W?J:$}return $}limitImageContent($,Z,Q){if(!UH($))return{type:"text",text:jH};let W=fq($.mediaType,$.data,{maxImageEncodedBytes:Z.maxImageEncodedBytes,maxImageDecodedBytes:Z.maxImageDecodedBytes,maxTotalMediaBytes:Z.maxTotalMediaBytes},Q);if(!W.ok)return{type:"text",text:jH};return{...$,data:W.base64,mediaType:W.mediaType}}}var FH=String.raw`[\|\uFF5C]`,Eq=new RegExp(String.raw`<\s*(?:${FH}\s*)?DSML\s*(?:${FH}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function W0($){return Buffer.byteLength($,"utf8")}function AH($){if($===void 0)return;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>0?Z:void 0}function Nq($){if($===void 0)return;let Z=$.trim().toLowerCase();if(Z==="infinity"||Z==="disable")return Number.POSITIVE_INFINITY;let Q=Number.parseInt($,10);return Number.isFinite(Q)&&Q>=0?Q:void 0}function S6($,Z){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):Z}function Cq($,Z){if(typeof $!=="number"||Number.isNaN($)||$<0)return Z;return Number.isFinite($)?Math.floor($):$}function E8($,Z,Q){if($.length<=Z)return $;let W=Q($.length-Z),J=Math.max(0,Math.floor((Z-W.length)/2)),X=Math.max(0,$.length-J*2),Y=Q(X),j=Math.max(0,Math.floor((Z-Y.length)/2)),V=$.slice(0,j),B=j>0?$.slice(-j):"";return`${V}${Y}${B}`}function wq($,Z,Q){if(W0($)<=Z)return $;let W=0,J=$.length,X=E8($,0,Q);while(W<=J){let Y=W+J>>>1,j=E8($,Y,Q);if(W0(j)<=Z)X=j,W=Y+1;else J=Y-1}return X}function Pq($){if($.type==="tool_use")return{...$,input:wZ($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((Z)=>_$(Z)?wZ(Z):{...Z})}}function _$($){if($===null||typeof $!=="object")return!1;let Z=$.type;return Z!=="text"&&Z!=="image"&&Z!=="file"}function L3($){return $!==null&&typeof $==="object"&&$.type==="image"}function UH($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function z3($){return UH($)}function NZ($){if(typeof $==="string")return W0($);if(Array.isArray($)){let Z=0;for(let Q of $)Z+=NZ(Q);return Z}if($!==null&&typeof $==="object"){if(z3($))return 0;let Z=0;for(let Q of Object.values($))Z+=NZ(Q);return Z}return 0}function CZ($,Z){if(Array.isArray($)){$.forEach((Q,W)=>{if(typeof Q==="string")Z.push({byteLength:W0(Q),minBytes:b6,makeMarker:y6,get:()=>$[W],set:(J)=>{$[W]=J}});else CZ(Q,Z)});return}if($!==null&&typeof $==="object"){if(z3($))return;let Q=$;for(let W of Object.keys(Q)){let J=Q[W];if(typeof J==="string")Z.push({byteLength:W0(J),minBytes:b6,makeMarker:y6,get:()=>Q[W],set:(X)=>{Q[W]=X}});else CZ(J,Z)}}}function wZ($){if(Array.isArray($))return $.map(wZ);if($!==null&&typeof $==="object"){let Z={};for(let[Q,W]of Object.entries($))Z[Q]=wZ(W);return Z}return $}function T3(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class O3{messages=[];conversationId=T3();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=T3(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=T3(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function DH($){let{agentConfig:Z}=$,Q=Sq(Z),W=bq(Z),J=$.hooks,X=yq(Z.maxParallelToolCalls);return{sessionId:$.sessionId??Z.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??Z.systemPrompt,messageModelInfo:W,model:$.model,modelOptions:Q,tools:$.tools,hooks:J,prepareTurn:$.prepareTurn,consumePendingUserMessage:Z.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??Z.logger,telemetry:$.telemetry??Z.telemetry,initialMessages:$.initialMessages,completionPolicy:Z.completionPolicy,maxIterations:Z.maxIterations,toolExecution:X,toolPolicies:Z.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:Z.requestToolApproval}}function Sq($){let Z={};if($.thinking!==void 0)Z.thinking=$.thinking;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)Z.maxTokensPerTurn=$.maxTokensPerTurn;if($.apiTimeoutMs!==void 0)Z.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(Z).length>0?Z:void 0}function bq($){let Z=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:Z}}function yq($){if($===void 0)return;return $>=2?"parallel":"sequential"}function hq(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function kq($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function q3($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(q3);let Z={};for(let Q of Object.keys($).sort())Z[Q]=q3($[Q]);return Z}function Iq($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(q3($))}catch{return String($)}}function xq($,Z,Q,W){if(Z===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=Z,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===W.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=W.hardThreshold}}var LH={softThreshold:3,hardThreshold:5};class M3{config;state=hq();constructor($){this.config={softThreshold:$?.softThreshold??LH.softThreshold,hardThreshold:$?.hardThreshold??LH.hardThreshold}}inspect($){let Z=Iq($.input),Q=xq(this.state,$.name,Z,this.config);if(Q.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Q.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){kq(this.state)}}class R3{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let Z=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&Z?Z:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let W=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(W),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Q,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!Z||Q<Z)return{action:"continue"};let J=await mq({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details},this.options.onLimitReached);if(J.action==="continue"){let X=J.guidance?.trim();if(X)this.options.appendRecoveryNotice(X,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:X}}return{action:"stop",reason:J.reason?.trim()||void 0,message:gq({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details,stopReason:J.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function gq($){let Z=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)Z.push(`Error: ${Q}`);let W=$.stopReason?.trim();if(W)Z.push(`Decision: ${W}`);return Z.push("Session state was preserved. Send a new prompt to resume from the latest state."),Z.join(" ")}async function mq($,Z){if(!Z)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await Z($)}catch(Q){return{action:"stop",reason:Q instanceof Error?Q.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function vq($){let Z=$.content.filter((Q)=>Q.type==="text");if(Z.length===0)return;return Z.map((Q)=>Q.text).join("")}function cq($){let Z=$.content.filter((Q)=>Q.type==="reasoning");if(Z.length===0)return;return{reasoning:Z.map((Q)=>Q.text).join(""),redacted:Z.some((Q)=>Q.redacted===!0)}}function uq($){return $.content.find((Z)=>Z.type==="tool-result")}function dq($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function lq($){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 E3{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:$.metadata?.reason==="auto_compaction"?"auto_compaction":void 0,metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let Z=[],Q=vq($);if(Q!==void 0)Z.push({type:"content_end",contentType:"text",text:Q});let W=cq($);if(W!==void 0)Z.push({type:"content_end",contentType:"reasoning",reasoning:W.reasoning});return Z}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input}]}translateToolFinished($){let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=Z===void 0?void 0:Date.now()-Z;this.toolStartedAt.delete($.toolCall.toolCallId);let W=uq($.message),J=W?.output,X=lq(W);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:J,error:X,durationMs:Q}]}translateUsage($){let Z=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,W=$.cacheReadTokens-this.lastUsage.cacheReadTokens,J=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,X=this.lastUsage.totalCost??0,j=($.totalCost??0)-X;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,Z),outputTokens:Math.max(0,Q),cacheReadTokens:W===0?void 0:Math.max(0,W),cacheWriteTokens:J===0?void 0:Math.max(0,J),cost:j===0?void 0:j,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let Z={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:dq($.status),text:$.outputText,iterations:$.iterations,usage:Z}]}}function tq($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function eq($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function $M($,Z){let Q=$.trim(),W=Z.map((J)=>J.trim()).filter(Boolean).join(`
467
467
 
468
468
  `);if(Q&&W)return`${Q}
469
469
 
470
- ${W}`;return Q||W}function WM($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function JM($,Z){return $.filter((Q)=>WM(Q.name,Z))}function XM($,Z){return y1(JM($,Z))}function YM($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return{};return{beforeRun:async(Q)=>{for(let W of Z){let J=await W.beforeRun?.(Q);if(J?.stop)return J}return},afterRun:async(Q)=>{for(let W of Z)await W.afterRun?.(Q)},beforeModel:async(Q)=>{let W=Q.request,J;for(let X of Z){let Y=await X.beforeModel?.({...Q,request:W});if(!Y)continue;if(Y.stop)return Y;J={...J,...Y,options:zB(J?.options,Y.options)},W={...W,...Y.messages?{messages:Y.messages}:{},...Y.tools?{tools:Y.tools}:{},...Y.options?{options:zB(W.options,Y.options)}:{}}}return J},afterModel:async(Q)=>{for(let W of Z){let J=await W.afterModel?.(Q);if(J?.stop)return J}return},beforeTool:async(Q)=>{let W=Q.input,J;for(let X of Z){let Y=await X.beforeTool?.({...Q,input:W});if(!Y)continue;if(Y.stop||Y.skip)return Y;if(J={...J,...Y},Object.hasOwn(Y,"input"))W=Y.input}return J},afterTool:async(Q)=>{let W=Q.result,J;for(let X of Z){let Y=await X.afterTool?.({...Q,result:W});if(!Y)continue;if(Y.stop)return Y;if(J={...J,...Y},Y.result)W=Y.result}return J},onEvent:async(Q)=>{for(let W of Z)await W.onEvent?.(Q)}}}class z${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 E3;shutdownCalled=!1;currentRunToolCalls=[];currentRunUsage={inputTokens:0,outputTokens:0};toolStartedAt=new Map;toolInputs=new Map;currentTurnSuccessfulTools=0;currentTurnFailedTools=0;currentTurnFailureDetails=[];activeTrackerWork=Promise.resolve();trackerAbortInFlight=!1;constructor($,Z={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=Z.logger??$.logger,this.telemetry=Z.telemetry??$.telemetry,this.createAgentRuntimeImpl=Z.createAgentRuntimeImpl??tq,this.conversation=new O3($.initialMessages),this.messageBuilder=new _3(fB()),this.contributionRegistry=eq({extensions:$.extensions?[...$.extensions]:[],setupContext:{session:$.extensionContext?.session,client:$.extensionContext?.client,user:$.extensionContext?.user,workspaceInfo:$.extensionContext?.workspace,automation:$.extensionContext?.automation,logger:$.extensionContext?.logger??this.logger,telemetry:$.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let Q=$.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new R3({maxConsecutiveMistakes:Q,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(X)=>this.emitLegacyEvent(X),log:(X,Y,j)=>jM(this.logger,X,Y,j),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(X,Y)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:X}]})}});let W=$.execution?.loopDetection;this.loopDetectionDisabled=W===!1;let J=W===!1||W===void 0?void 0:W;this.loopTracker=new M3(J)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools($){if($.length===0)return;let Z=new Set(this.config.tools.map((W)=>W.name)),Q=[...this.config.tools];for(let W of $)if(!Z.has(W.name))Q.push(W),Z.add(W.name);this.config={...this.config,tools:Q}}updateConnection($){let Z={...this.config};if($.providerId!==void 0)Z.providerId=$.providerId;if($.modelId!==void 0)Z.modelId=$.modelId;if($.apiKey!==void 0)Z.apiKey=$.apiKey;if($.baseUrl!==void 0)Z.baseUrl=$.baseUrl;if($.headers!==void 0)Z.headers=$.headers;if($.providerConfig!==void 0)Z.providerConfig=$.providerConfig;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinking!==void 0)Z.thinking=$.thinking;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;this.config=Z}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.messageBuilder.resetConversationState(),this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let Z=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=Z,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(Z)}async shutdown($,Z){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run($,Z,Q){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!1})}continue($,Z,Q){return this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let Z of this.contributionRegistry.getRegisteredRules()){let Q=await ZM(Z);if(Q)$.push(Q)}return QM(this.config.systemPrompt,$)}executeRun($){let Z;return Z=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===Z)this.activeRunPromise=null}),this.activeRunPromise=Z,Z}async executeRunInternal($){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let Z=new Date,Q=$.userMessage;if(Q!==void 0){let U=await HM(Q,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:U})}let W=await this.composeSystemPrompt(),J=YB(this.config,this.logger,this.telemetry),X=new Map;for(let U of this.contributionRegistry.getRegisteredTools())X.set(U.name,U);let Y=XM([...X.values()],this.config.toolPolicies),j=new Map;for(let U of Y)j.set(U.name,U);for(let U of this.config.tools)j.set(U.name,U);let V=this.conversation.getConversationId(),H=TB(this.config),B=Array.from(j.values()),G=RZ(this.conversation.getMessages()),K=DB({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:J,logger:this.logger,telemetry:this.telemetry,tools:B,toolContextMetadata:{modelSupportsImages:H?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[MH]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(H,B),initialMessages:G,systemPrompt:W}),F=this.createAgentRuntimeImpl(K);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let A=F.subscribe((U)=>{this.handleRuntimeEvent(U)}),L,f;try{if($.isContinue)L=await F.continue(void 0);else L=await F.run("")}catch(U){f=U instanceof Error?U:Error(String(U))}finally{A();try{await this.activeTrackerWork}catch(U){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:U})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(L&&L.messages.length>0){let U=R8(L.messages);this.conversation.replaceMessages(U)}let D=new Date;try{return this.buildLegacyResult({runResult:L,thrownError:f,startedAt:Z,endedAt:D})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize({tolerateSetupErrors:this.config.hookErrorMode!=="throw"})}catch($){if(this.config.hookErrorMode==="throw")throw $;this.emitLegacyEvent({type:"error",error:$ instanceof Error?$:Error(String($)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let $=YM([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((Z)=>Z.hooks)]);return{...$,beforeModel:async(Z)=>{let Q=await $.beforeModel?.(Z);if(Q?.stop)return Q;let W=Q?.messages??Z.request.messages,J=await this.prepareMessagesForModelRequest(W);return{...Q,messages:J}}}}createRuntimePrepareTurn($,Z){let Q=this.config.prepareTurn;if(!Q)return;return async(W)=>{let J=R8(W.messages),X=await this.prepareProviderMessagesForApi(J),Y=await Q({agentId:W.agentId,conversationId:W.conversationId??this.conversation.getConversationId(),parentAgentId:W.parentAgentId??null,iteration:W.iteration,messages:J,apiMessages:X,abortSignal:W.signal??new AbortController().signal,systemPrompt:W.systemPrompt??"",tools:Z,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:W.emitStatusNotice});if(!Y)return;return{...Y.messages?{messages:RZ(Y.messages)}:{},...Y.systemPrompt!==void 0?{systemPrompt:Y.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let Z=await this.prepareProviderMessagesForApi(EZ($));return RZ(Z)}async prepareProviderMessagesForApi($){let Z=$,Q=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let W of Q)Z=await W.build(Z);return this.messageBuilder.buildForApi(Z)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=new Date,W=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let J=$.message.content.find((V)=>V.type==="tool-result"),X=J?.type==="tool-result"&&J.isError===!0,Y=X?$M(J?.type==="tool-result"?J.output:void 0):void 0,j={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:W,output:J?.type==="tool-result"?J.output:void 0,error:Y,durationMs:Z===void 0?0:Q.getTime()-Z.getTime(),startedAt:Z??Q,endedAt:Q};if(this.currentRunToolCalls.push(j),X){if(this.currentTurnFailedTools+=1,Y)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${Y}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let Z=this.currentTurnFailedTools,Q=this.currentTurnSuccessfulTools;if(Z>0&&Q===0){let W=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${Z} tool call(s) failed${W?`: ${W}`:""}`})}else if(Q>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let Z of this.eventAdapter.translate($))this.emitLegacyEvent(Z)}syncConversationFromRuntimeMessage($,Z){if($.length>0){this.conversation.replaceMessages(R8($));return}if(Z.length===0)return;let Q=new Set(this.conversation.getMessages().map((J)=>J.id).filter((J)=>typeof J==="string")),W=R8(Z).filter((J)=>!J.id||!Q.has(J.id));if(W.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...W])}emitLegacyEvent($){for(let Z of this.listeners)try{Z($)}catch(Q){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Q})}}inspectLoopForToolCall($,Z,Q){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let W=this.loopTracker.inspect({name:$,input:Z});if(W.kind==="ok")return;if(W.kind==="soft"){if(W.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:W.message}]});return}this.enqueueMistakeRecord({iteration:Q,reason:"tool_execution_failed",forceAtLimit:!0,details:W.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let Z=await this.mistakeTracker.record($);if(Z.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:Z.message}]}),this.activeRuntime?.abort(Z.reason??Z.message)})}buildLegacyResult($){let{runResult:Z,thrownError:Q,startedAt:W,endedAt:J}=$,X=J.getTime()-W.getTime(),Y=Q?"error":VM(Z),j=(Z?.status==="failed"?Z.error?.message:void 0)||Z?.outputText||"",V=Z?{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens>0?Z.usage.cacheReadTokens:void 0,cacheWriteTokens:Z.usage.cacheWriteTokens>0?Z.usage.cacheWriteTokens:void 0,totalCost:Z.usage.totalCost}:this.currentRunUsage,H=Z?R8(Z.messages):this.conversation.getMessages(),B=TB(this.config);if(Q)throw Q;return{text:j,usage:V,messages:H,toolCalls:this.currentRunToolCalls,iterations:Z?.iterations??0,finishReason:Y,model:{id:this.config.modelId,provider:this.config.providerId,info:B},startedAt:W,endedAt:J,durationMs:X}}}function jM($,Z,Q,W){if(!$)return;if(Z==="debug"){$.debug(Q,W);return}if(Z==="error"&&$.error){$.error(Q,W);return}let J=Z==="warn"?"warn":Z==="error"?"error":"info";$.log(Q,{...W,severity:J})}function VM($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function HM($,Z,Q,W){let{buildInitialUserContent:J}=await Promise.resolve().then(() => _B);return J($,Z,Q,W)}function TB($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let Z=U3($);if(Z?.[$.modelId])return Z[$.modelId];return}import{buildClineSystemPrompt as OB}from"@cline/shared";function qB($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return OB({ide:Z.clineIdeName?.trim()||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,rules:`# Team Teammate Role
471
- ${Q}`,platform:Z.clinePlatform,metadata:Z.workspaceMetadata})}function MB($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return OB({ide:Z.clineIdeName||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,overridePrompt:Q,metadata:Z.workspaceMetadata,platform:Z.clinePlatform})}function T$($){let Z={...$};return{getRuntimeConfig:()=>Z,getConnectionConfig:()=>({providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxTokensPerTurn:Z.maxTokensPerTurn}),updateConnectionDefaults:(Q)=>{Z={...Z,...Q}}}}function K2($){let Z=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?qB($.prompt,Z):MB($.prompt,Z);return{...$.configProvider.getConnectionConfig(),systemPrompt:Q,tools:$.tools,maxIterations:$.maxIterations??Z.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:Z.hooks,extensions:Z.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:Z.logger,role:$.role}}function O$($){let Z=K2($),Q=new z$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);return Q}var KM=N3.object({systemPrompt:N3.string().describe("System prompt defining the sub-agent's behavior"),task:N3.string().describe("Task for the sub-agent to complete")});function q$($){return BM({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:GM(KM),execute:async(Z,Q)=>{let W=$.createSubAgentTools?await $.createSubAgentTools(Z,Q):$.subAgentTools??[],J=O$({kind:"subagent",prompt:Z.systemPrompt,configProvider:$.configProvider,tools:W,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),X=J.getAgentId(),Y=J.getConversationId(),j=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z})}catch{}try{let V=await J.run(Z.task),H={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,result:H,agentResult:V})}catch{}return H}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as F0,TEAM_AWAIT_TIMEOUT_MS as FM,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as AM,TEAM_RUN_TEXT_PREVIEW_LIMIT as fM,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as UM,TeamAttachOutcomeFragmentInputSchema as RB,TeamAwaitRunsInputSchema as EB,TeamBroadcastInputSchema as NB,TeamBroadcastToolResultSchema as DM,TeamCancelRunInputSchema as wB,TeamCancelRunToolResultSchema as LM,TeamCleanupInputSchema as CB,TeamCleanupToolResultSchema as _M,TeamCreateOutcomeInputSchema as PB,TeamCreateOutcomeToolResultSchema as zM,TeamFinalizeOutcomeInputSchema as SB,TeamFinalizeOutcomeToolResultSchema as TM,TeamListOutcomesInputSchema as bB,TeamListRunsInputSchema as yB,TeamMailboxMessageToolResultSchema as OM,TeamMissionLogInputSchema as hB,TeamMissionLogToolResultSchema as qM,TeamOutcomeFragmentToolResultSchema as kB,TeamOutcomeToolResultSchema as MM,TeamReadMailboxInputSchema as IB,TeamReviewOutcomeFragmentInputSchema as xB,TeamRunTaskInputSchema as gB,TeamRunTaskToolResultSchema as w3,TeamRunToolSummarySchema as C3,TeamSendMessageInputSchema as mB,TeamSendMessageToolResultSchema as RM,TeamShutdownTeammateInputSchema as vB,TeamSimpleAgentStatusToolResultSchema as cB,TeamSpawnTeammateInputSchema as uB,TeamStatusInputSchema as dB,TeamStatusToolResultSchema as EM,TeamTaskInputSchema as lB,TeamTaskToolResultSchema as h6,validateWithZod as k,zodToJsonSchema as A0}from"@cline/shared";function pB($,Z){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=Z)return Q;return`${Q.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function F2($,Z){if($===void 0)throw Error(`Missing required field: ${Z}`);return $}function NM($){let Z=$.result;if(!Z)return;return{textPreview:pB(Z.text,fM),iterations:Z.iterations,finishReason:Z.finishReason,durationMs:Z.durationMs,usage:{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens,cacheWriteTokens:Z.usage.cacheWriteTokens,totalCost:Z.usage.totalCost}}}function PZ($){return $?.toISOString()}function P3($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:pB($.message,AM),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:PZ($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:PZ($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:PZ($.heartbeatAt),lastProgressAt:PZ($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:NM($)}}function wM($){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 N8=["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 rB($){let Z=[];if($.createBaseTools)Z.push(...$.createBaseTools());Z.push(...A2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:K2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:Z,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function w8($){let Z=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,W=A2({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),J=[];for(let X of $.restoredTeammates??[]){if($.runtime.isTeammateActive(X.agentId))continue;rB({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:X}),J.push(X.agentId)}return{tools:W,restoredFromPersistence:Q,restoredTeammates:J}}function A2($){let Z=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,W=$.includeManagementTools??!0,J=[];if(Q)J.push(F0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:A0(uB),execute:async(Y)=>{let j=k(uB,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!Z)throw Error("Spawning teammates is disabled in this context.");let V={agentId:j.agentId,rolePrompt:j.rolePrompt};if(rB({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!W)$.onLeadToolsUnlocked?.(A2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return k(cB,{agentId:j.agentId,status:"spawned"})}}));if(!W)return J;J.push(F0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:A0(vB),execute:async(Y)=>{let j=k(vB,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(j.agentId,j.reason),k(cB,{agentId:j.agentId,status:"stopped"})}})),J.push(F0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:A0(dB),execute:async(Y)=>{return k(dB,Y),k(EM,$.runtime.getSnapshot())}})),J.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:A0(lB),execute:async(Y)=>{let j=k(lB,Y);switch(j.action){case"create":{let V=new Set(UM.create??[]),H=Object.entries(Y).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),B=$.runtime.createTask({title:F2(j.title,"title"),description:F2(j.description,"description"),dependsOn:j.dependsOn,assignee:j.assignee,createdBy:$.requesterId});return k(h6,{action:"create",taskId:B.id,status:B.status,...H.length>0?{ignoredFields:H,note:`Ignored fields for action=create: ${H.join(", ")}`}:{}})}case"list":return k(h6,{action:"list",tasks:$.runtime.listTaskItems({status:j.status,assignee:j.assignee})});case"claim":{let V=$.runtime.claimTask(F2(j.taskId,"taskId"),$.requesterId);return k(h6,{action:"claim",taskId:V.id,status:V.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_task with action=complete when done."})}case"complete":{let V=$.runtime.completeTask(F2(j.taskId,"taskId"),$.requesterId,F2(j.summary,"summary"));return k(h6,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(F2(j.taskId,"taskId"),$.requesterId,F2(j.reason,"reason"));return k(h6,{action:"block",taskId:V.id,status:V.status})}}}}));let X=new Map;return J.push(F0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:A0(gB),execute:async(Y)=>{let j=k(gB,Y);if(j.runMode==="async"){let B=$.runtime.startTeammateRun(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0});return k(w3,{agentId:j.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${j.agentId} and queued as ${B.id}.`,runId:B.id})}let V=X.get(j.agentId);if(V){let B=await V;return k(w3,{...B,status:"joined",deduped:!0,message:`Task for ${j.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let H=$.runtime.routeToTeammate(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0}).then((B)=>k(w3,{agentId:j.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${j.agentId} and completed in sync mode.`,text:B.text,iterations:B.iterations})).finally(()=>{X.delete(j.agentId)});return X.set(j.agentId,H),await H}})),J.push(F0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:A0(wB),execute:async(Y)=>{let j=k(wB,Y),V=$.runtime.cancelRun(j.runId,j.reason);return k(LM,{runId:V.id,status:V.status})}})),J.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:A0(yB),execute:async(Y)=>k(C3.array(),$.runtime.listRuns(k(yB,Y)).map(P3))})),J.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:A0(EB),timeoutMs:FM,execute:async(Y)=>{let j=k(EB,Y);if(j.runId){let B=await $.runtime.awaitRun(j.runId);return wM(B),k(C3,P3(B))}let V=await $.runtime.awaitAllRuns(),H=V.filter((B)=>["failed","cancelled","interrupted"].includes(B.status));if(H.length>0){let B=H.map((G)=>`${G.id}:${G.status}${G.error?`(${G.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${B}`)}return k(C3.array(),V.map(P3))}})),J.push(F0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:A0(mB),execute:async(Y)=>{let j=k(mB,Y),V=$.runtime.sendMessage($.requesterId,j.toAgentId,j.subject,j.body,j.taskId??void 0);return k(RM,{id:V.id,toAgentId:V.toAgentId})}})),J.push(F0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:A0(NB),execute:async(Y)=>{let j=k(NB,Y),V=$.runtime.broadcast($.requesterId,j.subject,j.body,{taskId:j.taskId??void 0});return k(DM,{delivered:V.length})}})),J.push(F0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:A0(IB),execute:async(Y)=>{let j=k(IB,Y);return k(OM.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:j.unreadOnly,markRead:!0}))}})),J.push(F0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:A0(hB),execute:async(Y)=>{let j=k(hB,Y),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:j.taskId||void 0,kind:j.kind,summary:j.summary,evidence:j.evidence?.length?j.evidence:void 0,nextAction:j.nextAction||void 0});return k(qM,{id:V.id})}})),J.push(F0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:A0(CB),execute:async(Y)=>{if(k(CB,Y),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),k(_M,{status:"cleaned"})}})),J.push(F0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:A0(PB),execute:async(Y)=>{let j=k(PB,Y),V=$.runtime.createOutcome({title:j.title,requiredSections:j.requiredSections,createdBy:$.requesterId});return k(zM,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),J.push(F0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:A0(RB),execute:async(Y)=>{let j=k(RB,Y),V=$.runtime.attachOutcomeFragment({outcomeId:j.outcomeId,section:j.section,sourceAgentId:$.requesterId,sourceRunId:j.sourceRunId||void 0,content:j.content});return k(kB,{fragmentId:V.id,status:V.status})}})),J.push(F0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:A0(xB),execute:async(Y)=>{let j=k(xB,Y),V=$.runtime.reviewOutcomeFragment({fragmentId:j.fragmentId,reviewedBy:$.requesterId,approved:j.approved});return k(kB,{fragmentId:V.id,status:V.status})}})),J.push(F0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:A0(SB),execute:async(Y)=>{let j=k(SB,Y),V=$.runtime.finalizeOutcome(j.outcomeId);return k(TM,{outcomeId:V.id,status:V.status})}})),J.push(F0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:A0(bB),execute:async(Y)=>{return k(bB,Y),k(MM.array(),$.runtime.listOutcomes())}})),J}function SZ($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}function iB($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var CM=[{id:"read_files",description:"Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. Long files are windowed; page with start_line/end_line.",headlessToolNames:["read_files"]},{id:"search_codebase",description:"Perform regex pattern searches across the codebase for code patterns, definitions, imports, and other text matches.",headlessToolNames:["search_codebase"]},{id:"run_commands",description:"Run shell commands from the root of the workspace for listing files, checking git status, builds, tests, and similar tasks.",headlessToolNames:["run_commands"]},{id:"editor",description:"Make controlled filesystem edits on text files with create, replace, and insert operations.",headlessToolNames:["editor"]},{id:"fetch_web_content",description:"Fetch URL content and analyze it with a prompt describing what to extract.",headlessToolNames:["fetch_web_content"]},{id:"skills",description:"Execute a configured skill within the main conversation when a matching skill exists for the task.",headlessToolNames:["skills"]},{id:"ask_question",description:"Ask the user a single clarifying question with 2-5 selectable options.",headlessToolNames:["ask_question"]},{id:"spawn_agent",description:q$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...N8]}],PM={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function SM($){return $==="plan"||$==="yolo"?$:"act"}function aB($){let Z=SM($.mode),Q=u0[l1({mode:Z})],W=M8($.providerId??"",$.modelId??"",Z,q8);return{mode:Z,flags:{...Q,...W,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function nB($,Z){if(Z.disabledToolIds?.has($))return!1;let{flags:Q}=aB(Z);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let W=PM[$];return W?Q[W]===!0:!1}function bM($,Z){if($.id==="editor"){let{flags:Q}=aB(Z),W=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:nB($.id,Z),headlessToolNames:[W?"apply_patch":"editor"]}}return{...$,defaultEnabled:nB($.id,Z)}}function f2($={}){return CM.map((Z)=>bM(Z,$))}function bZ($={}){return f2($).filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id)}function yZ($){if(!$.enabled)return new Set;let Z=f2($.availabilityContext),Q=new Set(Z.map((W)=>W.id));if(!$.allowlist||$.allowlist.length===0)return new Set(Z.filter((W)=>W.defaultEnabled).map((W)=>W.id));for(let W of $.allowlist)if(!Q.has(W))throw Error(`Unknown tool "${W}". Available tools: ${Z.map((J)=>J.id).join(", ")}`);return new Set($.allowlist)}function k6($,Z={}){return f2(Z).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function hZ($,Z={}){return k6($,Z)}function U2($={}){let{executorOptions:Z={},executors:Q,...W}=$,J={...O8(Z),...Q??{}};return D$({...W,executors:J})}import{mkdirSync as gM,writeFileSync as mM}from"node:fs";import{dirname as vM}from"node:path";import{normalizeUserInput as cM,stripModeNotices as uM}from"@cline/shared";import{nanoid as dM}from"nanoid";var oB={};N(oB,{sanitizeSessionToken:()=>D2,parseTeamTaskSubSessionId:()=>P8,parseSubSessionId:()=>x6,makeTeamTaskSubSessionId:()=>I6,makeSubSessionId:()=>C8,deriveSubsessionStatus:()=>g6});import{nanoid as kM}from"nanoid";function D2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function C8($,Z){let Q=D2($),W=D2(Z),J=`${Q}__${W}`;return J.length>180?J.slice(0,180):J}function I6($,Z){let Q=D2($),W=D2(Z);return`${Q}__teamtask__${W}__${kM(6)}`}function P8($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+12),X=J.lastIndexOf("__");if(X<=0)return null;let Y=J.slice(0,X),j=J.slice(X+2);if(!W||!Y||!j)return null;return{rootSessionId:W,agentId:Y,teamTaskId:j}}function x6($){if(P8($))return null;let Z="__",Q=$.indexOf(Z);if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+Z.length);if(!W||!J)return null;return{rootSessionId:W,agentId:J}}function g6($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let Z=String($.reason??"").toLowerCase();if(Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt"))return"cancelled";if(Z.includes("fail")||Z.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as $0}from"zod";var $G={};N($G,{isTerminalSessionStatus:()=>eB,isNonTerminalSessionStatus:()=>H0,SessionSource:()=>T0,SESSION_STATUSES:()=>m6,NON_TERMINAL_SESSION_STATUSES:()=>tB});import{SESSION_STATUS_VALUES as IM}from"@cline/shared";var m6=IM,tB=["idle","running","pending"];function eB($){return!tB.includes($)}function H0($){return!eB($)}var T0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var xM=$0.enum(m6),b0=$0.object({version:$0.literal(1),session_id:$0.string().min(1),source:$0.string().min(1),pid:$0.number().int(),started_at:$0.string().min(1),ended_at:$0.string().min(1).optional(),exit_code:$0.number().int().nullable().optional(),status:xM,interactive:$0.boolean(),provider:$0.string().min(1),model:$0.string().min(1),cwd:$0.string().min(1),workspace_root:$0.string().min(1),team_name:$0.string().min(1).optional(),enable_tools:$0.boolean(),enable_spawn:$0.boolean(),enable_teams:$0.boolean(),prompt:$0.string().optional(),metadata:$0.record($0.string(),$0.unknown()).optional(),messages_path:$0.string().min(1).optional()});function ZG($){if(!$)return!1;return Object.values($).some((Z)=>typeof Z==="function")}function b3($,Z){let Q=[...$??[],...Z??[]];if(Q.length===0)return;let W=[],J=new Set;for(let X of Q){if(J.has(X.name))continue;J.add(X.name),W.push(X)}return W}function QG($){return JSON.stringify($,(Z,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function p1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function S3($,Z){let Q={...$};Q.id=p1(Q.id)??dM();let W=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,J={id:p1(W?.id)??p1(Q.modelId)??p1(Z?.id),provider:p1(W?.provider)??p1(Q.providerId)??p1(Z?.provider),family:p1(W?.family)??p1(Z?.family)};if(delete Q.providerId,delete Q.modelId,J.id&&J.provider)Q.modelInfo={id:J.id,provider:J.provider,...J.family?{family:J.family}:{}};else delete Q.modelInfo;return Q}function kZ($){return $.map((Z)=>S3(Z))}function IZ($,Z,Q=[]){let W=$.map((V,H)=>{let B=Q[H],K=B?.role===V.role&&JSON.stringify(B.content)===JSON.stringify(V.content)?{...B,...V}:{...V};return S3(K)}),J=Q.length,X=[];for(let V=J;V<W.length;V+=1)if(W[V]?.role==="assistant")X.push(V);if(X.length===0){let V=[...W].reverse().findIndex((H)=>H.role==="assistant");if(V===-1)return W;X.push(W.length-1-V)}let Y=X[X.length-1],j=X.some((V)=>W[V]?.metrics);for(let V of X){let H=W[V],B=H.metrics;if(!B&&V===Y&&!j){let G=Z.usage;B={inputTokens:G.inputTokens,outputTokens:G.outputTokens,cacheReadTokens:G.cacheReadTokens??0,cacheWriteTokens:G.cacheWriteTokens??0,cost:G.totalCost}}W[V]={...S3(H,{id:Z.model.id,provider:Z.model.provider,family:Z.model.info?.family}),...B?{metrics:B}:{},ts:H.ts??Z.endedAt.getTime()}}return W}function v6($){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 lM=120;function L2($){let Z=$?.trim();return Z?Z.slice(0,lM):void 0}function y3($){let Z=uM(cM($??"")).trim();if(!Z)return;return L2(Z.split(`
472
- `)[0]?.trim())}function M$($){if(!$)return;let Z={...$},Q=L2(typeof Z.title==="string"?Z.title:void 0);if(Q)Z.title=Q;else delete Z.title;return Object.keys(Z).length>0?Z:void 0}function c6($){let Z=M$($.metadata)??{},Q=$.title!==void 0?L2($.title):y3($.prompt);if(Q)Z.title=Q;return Object.keys(Z).length>0?Z:void 0}function h3($){let Z=P8($);if(Z)return{agent:"teammate",sessionId:Z.rootSessionId,taskType:"team"};let Q=x6($);if(Q)return{agent:"subagent",sessionId:Q.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function k3($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:kZ($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function WG($,Z,Q){gM(vM($),{recursive:!0}),mM($,`${JSON.stringify(k3({updatedAt:Z,context:Q,messages:[]}),null,2)}
473
- `,"utf8")}function JG($,Z){return b0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:Z?.endedAt??$.endedAt??void 0,exit_code:Z?.exitCode??$.exitCode??void 0,status:Z?.status??$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName??void 0,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt??void 0,metadata:Z?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function XG($,Z,Q){let W=0;while(!0){let J=await $();if(J===void 0)return{updated:!1};let X=await Z(J);if(typeof X==="object"&&X!==null&&"updated"in X&&X.updated===!1){if(W+=1,W>=Q)return X;continue}return X}}_0();var YG={};N(YG,{summarizeUsageFromMessages:()=>b8,sumUsageTotals:()=>u6,getCurrentContextSize:()=>I3,createInitialAccumulatedUsage:()=>D0,accumulateUsageTotals:()=>f0});function D0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function f0($,Z){return{inputTokens:$.inputTokens+Math.max(0,Z.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,Z.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,Z.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,Z.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,Z.totalCost??0)}}function u6($){let Z=D0();for(let Q of $)Z=f0(Z,Q);return Z}function S8($){return typeof $==="number"&&Number.isFinite($)?$:0}function b8($){let Z=D0();for(let Q of $){let W=Q.metrics;if(!W)continue;Z=f0(Z,{inputTokens:S8(W.inputTokens),outputTokens:S8(W.outputTokens),cacheReadTokens:S8(W.cacheReadTokens),cacheWriteTokens:S8(W.cacheWriteTokens),totalCost:S8(W.cost)})}return Z}function I3($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let W=S8(Q.metrics?.inputTokens);return W>0?W:void 0}return}function pM($){if(!$||typeof $!=="object")return;let Z=$,Q=Z.skill??Z.skill_name??Z.skillName;if(typeof Q!=="string")return;let W=Q.trim();return W.length>0?W:void 0}function x3($){if(!$||typeof $!=="object")return{};let Z=$;return{agentId:typeof Z.agentId==="string"?Z.agentId:void 0,conversationId:typeof Z.conversationId==="string"?Z.conversationId:void 0,parentAgentId:typeof Z.parentAgentId==="string"?Z.parentAgentId:void 0}}function r1($){let Z=$.agentId?.trim();if(!Z)return;let Q=$.parentAgentId?.trim()||void 0,W=$.teamRole,J="root";if(W==="teammate")J="team_teammate";else if(W==="lead")J="team_lead";else if(Q)J="subagent";return{agentId:Z,agentKind:J,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Q,createdByAgentId:$.createdByAgentId?.trim()||Q||void 0,isSubagent:Boolean(Q),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:W,teamAgentId:$.teamAgentId?.trim()||void 0}}function rM($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function iM($){let Z=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of Z){let W=Q?.trim();if(W)return W}return $.isPrimaryAgentEvent?"root":"unknown"}function g3($,Z,Q){let{sessionId:W,config:J,liveSession:X,emit:Y}=$,j=J.telemetry,V=X?.runtime.teamRuntime,H=Q?.isPrimaryAgentEvent??!0,B=x3(Z),G=r1({agentId:Q?.agentId??B.agentId,conversationId:Q?.conversationId??B.conversationId,parentAgentId:Q?.parentAgentId??B.parentAgentId,createdByAgentId:Q?.createdByAgentId,teamId:Q?.teamId??V?.getTeamId(),teamName:Q?.teamName??V?.getTeamName(),teamRole:Q?.teamRole,teamAgentId:Q?.teamAgentId});if(Z.type==="content_start"&&Z.contentType==="tool"&&Z.toolName==="skills"){let K=pM(Z.input);if(K)N9(j,{ulid:W,skillName:K,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:J.providerId,modelId:J.modelId,...G})}if(Z.type==="content_end"&&Z.contentType==="tool"){let K=Z.toolName??"unknown",F=!Z.error;if(W8(j,{ulid:W,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))w9(j,{ulid:W,modelId:J.modelId,provider:J.providerId,errorType:Z.error,...G})}if(Z.type==="notice"&&Z.reason==="api_error")m4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.message,...G});if(Z.type==="error")m4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.error?.message??"unknown error",...G});if(Z.type==="usage"&&X?.turnUsageBaseline){let K=rM(Z);if(H){X.turnPrimaryUsage=f0(X.turnPrimaryUsage??D0(),K);let A=f0(X.turnUsageBaseline,X.turnPrimaryUsage);$.usageBySession.set(W,A),Q8(j,{ulid:W,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),R9(j,{ulid:W,tokensIn:Z.inputTokens,tokensOut:Z.outputTokens,cacheWriteTokens:Z.cacheWriteTokens,cacheReadTokens:Z.cacheReadTokens,totalCost:Z.cost,model:J.modelId,...G})}else{let A=iM({isPrimaryAgentEvent:H,overrides:Q,eventMetadata:B}),L=X.turnUsageByAgent??new Map;X.turnUsageByAgent=L,L.set(A,f0(L.get(A)??D0(),K))}let F=f0(X.turnPrimaryUsage??D0(),u6(X.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(W,f0(X.turnAggregateUsageBaseline??X.turnUsageBaseline,F))}if(Z.type==="iteration_end"&&H)$.persistMessages(W,X?.agent.getMessages()??[],X?.config.systemPrompt);Y({type:"agent_event",payload:{sessionId:W,event:Z,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(H?"lead":void 0):void 0}}),Y({type:"chunk",payload:{sessionId:W,stream:"agent",chunk:QG(Z),ts:Date.now()}})}function R$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as ZN}from"@cline/shared";$1();import{existsSync as uZ,readFileSync as hR,statSync as kR}from"node:fs";import{basename as IR,dirname as vZ,join as dZ,resolve as cZ}from"node:path";import{discoverPluginModulePaths as xR,resolveConfiguredPluginModulePaths as NG,resolvePluginConfigSearchPaths as gR,SKILLS_CONFIG_DIRECTORY_NAME as mR}from"@cline/shared/storage";import{resolve as FR}from"node:path";import{normalizePluginManifest as AR}from"@cline/shared";import{existsSync as O0,readFileSync as h8}from"node:fs";import{builtinModules as nM,createRequire as u3}from"node:module";import{dirname as E$,extname as l6,isAbsolute as aM,resolve as p}from"node:path";import{fileURLToPath as VG}from"node:url";import{PLUGIN_FILE_EXTENSIONS as sM}from"@cline/shared";var HG=E$(VG(import.meta.url)),oM=u3(import.meta.url),tM=p(HG,"..","..","..","..",".."),m3=ZR(tM),eM=["@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"],d3=new Set(nM.flatMap(($)=>[$,$.replace(/^node:/,"")])),d6=new Set(sM),$R=["development","node","import","require","default"];function ZR($){let Z={},Q={"@cline/sdk":p($,"packages/sdk/src/index.ts"),"@cline/agents":p($,"packages/agents/src/index.ts"),"@cline/core":p($,"packages/core/src/index.ts"),"@cline/llms":p($,"packages/llms/src/index.ts"),"@cline/shared":p($,"packages/shared/src/index.ts"),"@cline/shared/storage":p($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":p($,"packages/shared/src/db/index.ts")};for(let[W,J]of Object.entries(Q))if(O0(J))Z[W]=J;for(let W of["agents","core","llms","shared"]){let J=p($,"packages",W),X=p(J,"package.json");if(!O0(X))continue;try{let Y=JSON.parse(h8(X,"utf8"));if(typeof Y.name!=="string"||!Y.exports)continue;if(typeof Y.exports==="string"){let j=p(J,Y.exports);if(O0(j))Z[Y.name]=j;continue}if(typeof Y.exports!=="object")continue;for(let[j,V]of Object.entries(Y.exports)){let H=QR(J,V);if(!H)continue;let B=j==="."?Y.name:`${Y.name}/${j.replace(/^\.\//,"")}`;Z[B]=H}}catch{}}return Z}function QR($,Z){let Q=l3(Z);if(!Q)return null;let W=BG($,Q);for(let J of W)if(O0(J))return J;return null}function l3($,Z=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(Z.has($))return null;Z.add($);let Q=$;for(let W of $R){let J=l3(Q[W],Z);if(J)return J}return null}function BG($,Z){let Q=Z.replace(/^\.\//,""),W=[p($,Z)];if(Q.startsWith("dist/")){let J=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[p($,`${J}.ts`),p($,`${J}.tsx`),p($,`${J}.mts`),p($,`${J}.cts`),...W]}return W}function WR($){return Object.fromEntries(Object.entries($).sort(([Z],[Q])=>Q.length-Z.length))}function xZ($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function y8($){if($.startsWith("@")){let[Z,Q]=$.split("/",3);return Q?`${Z}/${Q}`:$}return $.split("/",1)[0]??$}function JR($){let Z=y8($);if($===Z)return".";return`.${$.slice(Z.length)}`}function GG($){return y8($).startsWith("@cline/")}function v3($,Z){let Q=y8(Z),W=E$($);while(!0){let J=p(W,"node_modules",Q);if(O0(J)||O0(p(J,"package.json")))return!0;let X=p(W,"..");if(X===W)return!1;W=X}}function jG($){return c3($)!==null}function c3($){try{return oM.resolve($)}catch{}return XR($)}function XR($){let Z=y8($),Q=KG(Z);if(!Q)return null;let W=p(Q,"package.json");try{let J=JSON.parse(h8(W,"utf8")),X=JR($),Y=X==="."&&typeof J.exports==="string"?J.exports:J.exports&&typeof J.exports==="object"&&Object.hasOwn(J.exports,X)?J.exports[X]:void 0,j=l3(Y)??(X==="."&&typeof J.main==="string"?J.main:null);if(!j)return null;let V=p(Q,j),H=[V,...BG(Q,j).filter((B)=>B!==V)];for(let B of H)if(O0(B))return B;return null}catch{return null}}function YR(){let $=[HG],Z=process.env.CLINE_WRAPPER_PATH?.trim();if(Z)$.push(E$(E$(Z)));let Q=process.execPath?.trim();if(Q)$.push(E$(Q));return[...new Set($.map((W)=>p(W)))]}function jR($,Z){let Q=$;while(!0){let W=p(Q,"package.json");if(O0(W))try{if(JSON.parse(h8(W,"utf8")).name===Z)return Q}catch{}let J=p(Q,"node_modules",Z,"package.json");if(O0(J))return E$(J);let X=p(Q,"..");if(X===Q)return null;Q=X}}function KG($){for(let Z of YR()){let Q=jR(Z,$);if(Q)return Q}return null}function VR($){let Q=E$($);for(let W=0;W<4;W++){let J=p(Q,"package.json");if(O0(J))try{let Y=JSON.parse(h8(J,"utf8"));return Y!=null&&typeof Y==="object"&&"cline"in Y}catch{return!1}let X=p(Q,"..");if(X===Q)return!1;Q=X}return!1}function FG($,Z){let Q=Z.startsWith("file:")?VG(Z):aM(Z)?Z:p(E$($),Z);if(O0(Q)&&d6.has(l6(Q)))return Q;for(let W of d6){let J=`${Q}${W}`;if(O0(J))return J}for(let W of d6){let J=p(Q,`index${W}`);if(O0(J))return J}return null}function AG($){let Z=new Set,Q=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let W of Q)for(let J of $.matchAll(W)){let X=J[1];if(X)Z.add(X)}return[...Z]}function HR($){return l6($)!==".ts"}function fG($,Z,Q=new Set){if(Q.has($)||!O0($))return;if(Q.add($),!d6.has(l6($)))return;let W=h8($,"utf8"),J=HR($);for(let X of AG(W)){if(X.startsWith("node:")||d3.has(X))continue;if(xZ(X)){if(!J)continue;if(Object.hasOwn(m3,X)||Object.hasOwn(m3,y8(X))||v3($,X)||GG(X)&&jG(X)||Z&&jG(X))continue;throw Error(`Cannot find module '${y8(X)}'`)}let Y=FG($,X);if(Y)fG(Y,Z,Q)}}function UG($,Z=new Set,Q=new Set){if(Z.has($)||!O0($))return Q;if(Z.add($),!d6.has(l6($)))return Q;let W=h8($,"utf8");for(let J of AG(W)){if(Q.add(J),xZ(J))continue;let X=FG($,J);if(X)UG(X,Z,Q)}return Q}function BR($,Z){let Q=u3($),W={},J=UG($),X=new Set(eM);for(let[Y,j]of Object.entries(m3)){try{Q.resolve(Y);continue}catch{}W[Y]=j}for(let Y of J)if(xZ(Y)&&(GG(Y)||Z))X.add(Y);for(let Y of X){if(Object.hasOwn(W,Y)||v3($,Y))continue;let j=c3(Y);if(j)W[Y]=j}if(!Z)return W;for(let Y of J){if(!xZ(Y)||Object.hasOwn(W,Y)||v3($,Y)||Y.startsWith("node:")||d3.has(Y))continue;let j=c3(Y);if(j)W[Y]=j}return W}function GR($){let Z=l6($);return Z===".ts"||Z===".tsx"||Z===".mts"||Z===".cts"}var _2;function KR(){if(_2!==void 0)return _2;let $=KG("jiti");if(!$)return _2=null,null;let Z=p($,"dist","babel.cjs");if(!O0(Z))return _2=null,null;try{let W=u3(Z)(Z);_2=typeof W==="function"?W:null}catch{_2=null}return _2}async function DG($,Z={}){let Q=!VR($);fG($,Q);let W=BR($,Q),J=WR(W),X=await import("jiti"),Y=typeof X==="function"?X:typeof X.default==="function"?X.default:void 0;if(!Y)throw Error("Unable to load jiti");let j=Object.entries(J).filter(([,G])=>GR(G)).map(([G])=>G),V=KR(),H=V?(G)=>V({...G,interopDefault:!0}):void 0;return await Y($,{alias:J,cache:Z.useCache,requireCache:Z.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...d3],transformModules:j,tryNative:!1,...H?{transform:H}:{}}).import($,{})}function LG($,Z){if(!$)return!0;if($.providerIds?.length){if(!Z?.providerId||!$.providerIds.includes(Z.providerId))return!1}if($.modelIds?.length){if(!Z?.modelId||!$.modelIds.includes(Z.modelId))return!1}return!0}function _G($){return typeof $==="object"&&$!==null}function p3($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function fR($,Z){if(!_G($.manifest))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);if(!p3($.manifest.capabilities))throw Error(`Invalid plugin module at ${Z}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${Z}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!p3($.manifest.providerIds))throw Error(`Invalid plugin module at ${Z}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!p3($.manifest.modelIds))throw Error(`Invalid plugin module at ${Z}: manifest.modelIds must be a string array when provided`)}function UR($,Z){if(!_G($))throw Error(`Invalid plugin module at ${Z}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${Z}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);fR($,Z)}async function p6($,Z={}){let Q=FR(Z.cwd??process.cwd(),$),W=await DG(Q,{useCache:Z.useCache}),J=Z.exportName??"plugin",X=W.default??W[J];UR(X,Q);let Y=X,j=Y.setup,V=j?(H,B)=>{let G={...Z.session,...B.session},K={...B,session:Object.keys(G).length>0?G:void 0,client:Z.client??B.client,user:Z.user??B.user,workspaceInfo:Z.workspaceInfo??B.workspaceInfo,automation:Z.automation??B.automation,logger:Z.logger??B.logger,telemetry:Z.telemetry??B.telemetry};return j(H,K)}:void 0;return{...Y,manifest:AR(Y.manifest),setup:V}}async function gZ($,Z={}){return(await z2($,Z)).plugins}async function z2($,Z={}){let Q=[],W=[],J=new Map,X=0;for(let j of $)try{let V=await p6(j,Z);if(!LG(V.manifest,Z))continue;let H=J.get(V.name);if(H)W.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:j,overriddenPluginPath:H.pluginPath,message:`Plugin "${V.name}" from ${j} overrides ${H.pluginPath}`});J.set(V.name,{plugin:V,pluginPath:j,order:X++})}catch(V){let H=V instanceof Error?V.message:String(V);Q.push({pluginPath:j,phase:"load",message:H,stack:V instanceof Error?V.stack:void 0})}let Y=[...J.values()].sort((j,V)=>j.order-V.order);return{plugins:Y.map((j)=>j.plugin),pluginPaths:Y.map((j)=>j.pluginPath),failures:Q,warnings:W}}import{existsSync as a3}from"node:fs";import{createRequire as EG}from"node:module";import{dirname as mZ,join as I8}from"node:path";import{fileURLToPath as TR}from"node:url";var MG={};N(MG,{resolveSubprocessRuntimeExecutable:()=>r3,buildSubprocessSandboxCommand:()=>qG,SubprocessSandbox:()=>k8,CLINE_JS_RUNTIME_PATH_ENV:()=>OG});import{spawn as DR}from"node:child_process";import{basename as LR}from"node:path";import{augmentNodeCommandForDebug as _R,withResolvedClineBuildEnv as zR}from"@cline/shared";function zG($){if($ instanceof Error)return $;return Error(String($))}var OG="CLINE_JS_RUNTIME_PATH";function TG($){let Z=$?.trim();if(!Z)return!1;let Q=LR(Z).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function r3($={}){let Z=$.env??process.env,Q=$.runtimeExecutable?.trim()||Z[OG]?.trim();if(Q)return Q;let W=$.execPath?.trim()||process.execPath;if(TG(W))return W;for(let J of[Z.BUN_EXEC_PATH,Z.npm_node_execpath,Z.NODE]){let X=J?.trim();if(X&&TG(X))return X}return"node"}function qG($,Z={}){let Q=r3({env:Z.env,execPath:Z.execPath,runtimeExecutable:Z.runtimeExecutable});return _R([Q,...$],{env:Z.env,execArgv:Z.execArgv,debugRole:Z.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class k8{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let Z=this.pending.get($);if(!Z)return;if(this.pending.delete($),Z.timeout)clearTimeout(Z.timeout);return Z}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],Z=qG($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=DR(Z[0]??r3(this.options),Z.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:zR(process.env),windowsHide:!0});this.process=Q;let W="",J=(X)=>{let Y=W+X;W=Y.length>4000?Y.slice(-4000):Y};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(X)=>{J(X)}),Q.on("message",(X)=>{this.onMessage(X)}),Q.on("error",(X)=>{this.failPending(Error(`${this.processLabel} process error: ${zG(X).message}`))}),Q.on("exit",(X,Y)=>{this.process=null;let j=W.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(X)}, signal=${String(Y)})${j?`: ${j}`:""}`))})}async call($,Z,Q={}){this.start();let W=this.process;if(!W||W.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let J=`req_${++this.requestCounter}`,X={type:"call",id:J,method:$,args:Z};return await new Promise((Y,j)=>{let V={resolve:(H)=>Y(H),reject:j};if((Q.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(J),this.shutdown().catch(()=>{}),j(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(J,V),W.send(X,(H)=>{if(!H)return;let B=this.clearPendingRequest(J);if(!B)return;B.reject(Error(`${this.processLabel} failed to send call "${$}": ${zG(H).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((Z)=>{let Q=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}Z()},300);$.once("exit",()=>{clearTimeout(Q),Z()});try{$.kill("SIGTERM")}catch{clearTimeout(Q),Z()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let Z=this.clearPendingRequest($.id);if(!Z)return;if($.ok){Z.resolve($.result);return}Z.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[Z,Q]of this.pending.entries()){if(this.pending.delete(Z),Q.timeout)clearTimeout(Q.timeout);Q.reject($)}}}function OR($){return{...$,contributions:{tools:$.contributions?.tools??[],commands:$.contributions?.commands??[],rules:$.contributions?.rules??[],messageBuilders:$.contributions?.messageBuilders??[],providers:$.contributions?.providers??[],automationEventTypes:$.contributions?.automationEventTypes??[],mcpServers:$.contributions?.mcpServers??[],shortcuts:$.contributions?.shortcuts??[],flags:$.contributions?.flags??[]}}}function r6($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function qR(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function MR(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=EG($).resolve(`${qR()}/package.json`),W=I8(mZ(Q),"extensions","plugin-sandbox-bootstrap.js");return a3(W)?W:void 0}catch{return}}function RR(){let $=process.execPath?.trim();if(!$)return;let Z=I8(mZ(mZ($)),"extensions","plugin-sandbox-bootstrap.js");return a3(Z)?Z:void 0}function ER(){let $=mZ(TR(import.meta.url)),Z=EG(import.meta.url),Q=[I8($,"plugin-sandbox-bootstrap.js"),I8($,"extensions","plugin-sandbox-bootstrap.js"),I8($,"agents","plugin-sandbox-bootstrap.js"),MR(),RR()];for(let X of Q.filter((Y)=>typeof Y==="string"))if(a3(X))return{file:X};let W=I8($,"plugin-sandbox-bootstrap.ts"),J="jiti";try{J=Z.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(J)});`,`const jiti = createJiti(${JSON.stringify(W)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(W)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
474
- `)}}var i3=ER();function n3($,Z,Q){if(typeof $==="number"&&$>0)return $;if(Q){let W=process.env[Q];if(W){let J=Number(W);if(Number.isInteger(J)&&J>0)return J}}return Z}async function x8($){let Z=new k8({name:"plugin-sandbox",..."file"in i3?{bootstrapFile:i3.file}:{bootstrapScript:i3.script},onEvent:$.onEvent}),Q=n3($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),W=n3($.hookTimeoutMs,3000),J=n3($.contributionTimeoutMs,60000),X={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},Y,j=()=>{return Y??=Z.call("initialize",X,{timeoutMs:Q}).finally(()=>{Y=void 0}),Y},V;try{V=await Z.call("initialize",X,{timeoutMs:Q})}catch(G){throw await Z.shutdown().catch(()=>{}),G}let H=V.plugins.map(OR);return{extensions:H.map((G)=>{let K={name:G.name,__clinePluginPath:G.pluginPath,manifest:G.manifest,setup:(F)=>{NR(F,Z,G,J,j),wR(F,Z,G,J,j),CR(F,Z,G,J,j),SR(F,Z,G,J,j),PR(F,G)}};return K.hooks=yR(Z,G,W,j),K}),failures:V.failures,pluginPaths:H.map((G)=>G.pluginPath),shutdown:async()=>{await Z.shutdown()},warnings:V.warnings}}function NR($,Z,Q,W,J){for(let X of Q.contributions?.tools??[]){let Y={name:X.name,description:X.description??"",inputSchema:X.inputSchema??{type:"object",properties:{}},timeoutMs:X.timeoutMs,retryable:X.retryable,execute:async(j,V)=>{try{return await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:j,context:V},{timeoutMs:W})}catch(H){if(!r6(H))throw H;return await J(),await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:j,context:V},{timeoutMs:W})}}};$.registerTool(Y)}}function wR($,Z,Q,W,J){for(let X of Q.contributions?.commands??[])$.registerCommand({name:X.name,description:X.description,handler:async(Y)=>{try{return await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:Y},{timeoutMs:W})}catch(j){if(!r6(j))throw j;return await J(),await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:Y},{timeoutMs:W})}}})}function CR($,Z,Q,W,J){for(let X of Q.contributions?.rules??[])$.registerRule({id:X.ruleId,source:X.source,content:X.hasContentHandler===!0?async()=>{try{return await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:W})}catch(Y){if(!r6(Y))throw Y;return await J(),await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:W})}}:X.content??""})}function PR($,Z){for(let Q of Z.contributions?.providers??[])$.registerProvider({name:Q.name,description:Q.description,metadata:Q.metadata});for(let Q of Z.contributions?.automationEventTypes??[])$.registerAutomationEventType({eventType:Q.eventType,source:Q.source,description:Q.description,attributesSchema:Q.attributesSchema,payloadSchema:Q.payloadSchema,examples:Q.examples,metadata:Q.metadata});for(let Q of Z.contributions?.mcpServers??[])$.registerMcpServer(Q)}function SR($,Z,Q,W,J){for(let X of Q.contributions?.messageBuilders??[])$.registerMessageBuilder({name:X.name,async build(Y){try{let j=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:Y},{timeoutMs:W});return RG(j)?j:Y}catch(j){if(!r6(j))throw j;await J();let V=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:Y},{timeoutMs:W});return RG(V)?V:Y}}})}function RG($){return Array.isArray($)&&$.every((Z)=>typeof Z==="object"&&Z!==null&&("role"in Z)&&("content"in Z))}function bR($,Z,Q,W,J){return async(X)=>{try{return await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:X},{timeoutMs:W})}catch(Y){if(!r6(Y))throw Y;return await J(),await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:X},{timeoutMs:W})}}}function yR($,Z,Q,W){let J={};for(let X of Z.hooks??[])J[X]=bR($,Z.pluginId,X,Q,W);return Object.keys(J).length>0?J:void 0}var o3="package.json",vR="package";function i6($){return gR($)}function n6($){return xR($)}function cR($){try{return uZ($)&&kR($).isDirectory()}catch{return!1}}function t3($){let Z=[],Q=new Set;for(let W of $){let J=cZ(W);if(Q.has(J))continue;Q.add(J),Z.push(J)}return Z}function wG($){let Z=t3($);return v9(Z)}function CG($){return i6($).flatMap((Z)=>n6(Z)).filter((Z)=>uZ(Z))}function uR($,Z){let Q=[];for(let W of $)try{Q.push(...NG([W],Z))}catch{}return Q}function s3($){return typeof $==="object"&&$!==null}function dR($){try{let Z=JSON.parse(hR(dZ($,o3),"utf8"));if(!s3(Z)||!s3(Z.cline))return[];let Q=Z.cline.plugins;if(!Array.isArray(Q))return[];let W=[];for(let J of Q){if(typeof J==="string"){W.push(J);continue}if(!s3(J)||!Array.isArray(J.paths))continue;for(let X of J.paths)if(typeof X==="string")W.push(X)}return W}catch{return[]}}function PG($,Z){let Q=cZ(Z);return dR($).some((W)=>cZ($,W)===Q)}function lR($,Z){return IR($)===vR&&uZ(dZ(vZ($),o3))&&PG(vZ($),Z)}function pR($){let Z=cZ($),Q=[],W=vZ(Z);while(!0){if(lR(W,Z)){Q.push(W);break}if(uZ(dZ(W,o3))){if(PG(W,Z))Q.push(W);break}let J=vZ(W);if(J===W)break;W=J}return t3(Q)}function i1($={}){let Z=$.cwd??process.cwd(),Q=CG($.workspacePath),W=NG($.pluginPaths??[],Z);return wG([...W,...Q])}function rR($={}){let Z=$.cwd??process.cwd(),Q=CG($.workspacePath),W=uR($.pluginPaths??[],Z);return wG([...W,...Q])}function n1($){let Z=[];for(let Q of $)for(let W of pR(Q)){let J=dZ(W,mR);if(cR(J))Z.push(J)}return t3(Z)}function SG($={}){return n1(rR($))}async function g8($={}){let Z=i1($);if(Z.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let W=await z2(Z,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:W.plugins,failures:W.failures,pluginPaths:W.pluginPaths,warnings:W.warnings}}let Q=await x8({pluginPaths:Z,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:Q.extensions??[],shutdown:Q.shutdown,failures:Q.failures,pluginPaths:Q.pluginPaths,warnings:Q.warnings}}import{execFile as iR}from"node:child_process";import{promisify as nR}from"node:util";var aR=nR(iR);function e3($,Z){$?.log(Z,{severity:"warn"})}function sR($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))return;let Q=Z;if(!Q.latest||!Array.isArray(Q.history))return;let W=Q.latest,J=Q.history.filter((X)=>!!X&&typeof X==="object"&&typeof X.ref==="string"&&typeof X.createdAt==="number"&&typeof X.runCount==="number");if(typeof W.ref!=="string"||typeof W.createdAt!=="number"||typeof W.runCount!=="number")return;return{latest:W,history:J}}async function T2($,Z){let Q=await aR("git",["-C",$,...Z],{windowsHide:!0});return{stdout:Q.stdout.trim(),stderr:Q.stderr.trim()}}async function $J($,Z){if(!$)return;let Q=`refs/cline/checkpoints/${Z}/`;try{let{stdout:W}=await T2($,["for-each-ref","--format=%(refname)",Q]),J=W.trim().split(`
475
- `).filter(Boolean);await Promise.allSettled(J.map((X)=>T2($,["update-ref","-d",X])))}catch{}}async function bG($,Z,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((W)=>T2($,["update-ref",`refs/cline/checkpoints/${Z}/${W.runCount}`,W.ref])))}function oR($,Z){let Q=$.findIndex((W)=>W.runCount===Z.runCount);if(Q<0)return[...$,Z];return $.map((W,J)=>J===Q?Z:W)}function yG($){let Z=$.initialRunCount??0,Q,W=async()=>{if(Q!==void 0)return Q;try{Q=(await T2($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Q=!1}return Q},J=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:Z});if(!await W())return;let X=async(H)=>{try{let G=(await T2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:Z,kind:"commit"}}catch(B){e3($.logger,`${H}: ${B instanceof Error?B.message:String(B)}`);return}},Y=`cline checkpoint session=${$.sessionId} run=${Z}`,j="";try{j=(await T2($.cwd,["stash","create",Y])).stdout.trim()}catch(H){return e3($.logger,`Checkpoint snapshot failed: ${H instanceof Error?H.message:String(H)}`),X("Checkpoint HEAD fallback failed")}if(!j)return X("Checkpoint HEAD fallback failed");let V=`refs/cline/checkpoints/${$.sessionId}/${Z}`;try{await T2($.cwd,["update-ref",V,j])}catch(H){e3($.logger,`Checkpoint store failed: ${H instanceof Error?H.message:String(H)}`);return}return{ref:j,createdAt:Date.now(),runCount:Z,kind:"stash"}};return{beforeRun:async({snapshot:X})=>{if(X.parentAgentId!=null)return;Z+=1;return},beforeModel:async({snapshot:X})=>{if(X.parentAgentId!=null||X.iteration!==1||Z<1)return;let Y=await J();if(!Y)return;let j=await $.readSessionMetadata(),V=sR(j);if(V?.latest.ref===Y.ref)return;let H=oR(V?.history??[],Y);await $.writeSessionMetadata({...j??{},checkpoint:{latest:Y,history:H}});return}}}import{spawn as YE}from"node:child_process";import{appendFileSync as jE,readFileSync as VE}from"node:fs";import{join as HE}from"node:path";import{augmentNodeCommandForDebug as IG,withResolvedClineBuildEnv as WJ}from"@cline/shared";import{ensureHookLogDir as hG}from"@cline/shared/storage";function m8($,Z){if(!Z)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:Z}}import{existsSync as tR,readdirSync as eR}from"node:fs";import{basename as $E,extname as ZE,join as QE}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as lZ,resolveHooksConfigSearchPaths as WE}from"@cline/shared/storage";function a6($){return WE($)}var v8;((B)=>{B.TaskStart="TaskStart";B.TaskResume="TaskResume";B.TaskCancel="TaskCancel";B.TaskComplete="TaskComplete";B.TaskError="TaskError";B.PreToolUse="PreToolUse";B.PostToolUse="PostToolUse";B.UserPromptSubmit="UserPromptSubmit";B.PreCompact="PreCompact";B.SessionShutdown="SessionShutdown"})(v8||={});var s6={["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"},JE=new Map(Object.values(v8).map(($)=>[$.toLowerCase(),$])),XE=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function o6($){let Z=ZE($).toLowerCase();if(!XE.has(Z))return;let Q=$E($,Z).trim().toLowerCase();return JE.get(Q)}function N$($){let Z=[],Q=new Set,W=a6($).filter((J)=>tR(J));for(let J of W)try{for(let X of eR(J,{withFileTypes:!0})){if(!X.isFile())continue;let Y=o6(X.name);if(!Y)continue;let j=QE(J,X.name);if(Q.has(j))continue;Q.add(j),Z.push({fileName:Y,hookEventName:s6[Y],path:j})}}catch{}return Z.sort((J,X)=>J.path.localeCompare(X.path))}function rZ($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))Z[Q]=typeof W==="string"?W:JSON.stringify(W);return Z}function pZ($,Z,Q){let W=Q instanceof Error?`: ${Q.message}`:"",J=`${Z}${W}`;if($){try{$.log(J,{severity:"warn",...Q!==void 0?{error:Q}:{}})}catch{}return}console.warn(J)}function BE($,Z){if(!Z)return $;if(!$)return{...Z};let Q=[$.context,Z.context].filter((J)=>typeof J==="string"&&J.length>0).join(`
476
- `),W=[...$.appendMessages??[],...Z.appendMessages??[]];return{cancel:$.cancel===!0||Z.cancel===!0?!0:void 0,review:$.review===!0||Z.review===!0?!0:void 0,context:Q||void 0,overrideInput:Z.overrideInput!==void 0?Z.overrideInput:$.overrideInput,systemPrompt:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,appendMessages:W.length>0?W:void 0}}function GE($){if(!$||typeof $!=="object")return;let Z=$,Q=typeof Z.context==="string"?Z.context:typeof Z.contextModification==="string"?Z.contextModification:typeof Z.errorMessage==="string"?Z.errorMessage:void 0;return{cancel:typeof Z.cancel==="boolean"?Z.cancel:void 0,review:typeof Z.review==="boolean"?Z.review:void 0,context:Q,overrideInput:Object.hasOwn(Z,"overrideInput")?Z.overrideInput:void 0}}function ZJ($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function q0($,Z){let Q=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",W={rootSessionId:Z.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:W,workspaceRoots:Z.workspacePath?[Z.workspacePath]:[],workspaceInfo:Z.workspaceInfo,userId:Q,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function KE($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
477
- `).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse hook stdout JSON"}}}async function FE($,Z){let Q=$.stdin;if(!Q)throw Error("hook command failed to create stdin");await new Promise((W,J)=>{let X=!1,Y=()=>{Q.off("error",V),Q.off("finish",H),$.off("close",B)},j=(G)=>{if(X)return;if(X=!0,Y(),G){let K=G.code;if(K==="EPIPE"||K==="ERR_STREAM_DESTROYED"){W();return}J(G);return}W()},V=(G)=>j(G),H=()=>j(),B=()=>j();Q.on("error",V),Q.once("finish",H),$.once("close",B);try{Q.end(Z)}catch(G){j(G)}})}async function xG($,Z){if(Z.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await kG($,Z)}catch(Q){let W=UE(Z.command,process.platform,Q);if(!W)throw Q;return await kG($,{...Z,command:W})}}async function kG($,Z){let Q=IG(Z.command,{env:Z.env,debugRole:"hook"}),W=YE(Q[0],Q.slice(1),{cwd:Z.cwd,env:WJ(Z.env),stdio:Z.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Z.detached,windowsHide:!0}),J=new Promise((K)=>{W.once("spawn",()=>K())}),X=new Promise((K,F)=>{W.once("error",(A)=>F(A))}),Y=JSON.stringify($);if(await Promise.race([J,X]),await FE(W,Y),Z.detached){W.unref();return}if(!W.stdout||!W.stderr)throw Error("hook command failed to create stdout/stderr");let j="",V="",H=!1,B;W.stdout.on("data",(K)=>{j+=K.toString()}),W.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((Z.timeoutMs??0)>0)B=setTimeout(()=>{H=!0,W.kill("SIGKILL")},Z.timeoutMs);W.once("close",(F)=>{if(B)clearTimeout(B);let{parsedJson:A,parseError:L}=KE(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:H})})});return await Promise.race([G,X])}function AE($){try{let Q=VE($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Q?.startsWith("#!"))return;let W=Q.slice(2).trim();if(!W)return;let J=W.split(/\s+/).filter(Boolean);return J.length>0?J:void 0}catch{return}}function fE($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function UE($,Z=process.platform,Q){if(Z!=="win32"||!fE(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function gG($){if($.length===0)return;let[Z,...Q]=$,W=Z.replace(/\\/g,"/").toLowerCase(),J=W.split("/").at(-1)??W;if(J==="env")return gG(Q);if(J==="bash"||J==="sh"||J==="zsh")return[J,...Q];if(J==="python3"||J==="python")return process.platform==="win32"?["py","-3",...Q]:[J,...Q];return $}function DE($){let Z=AE($);if(Z&&Z.length>0)return[...gG(Z)??Z,$];let Q=$.toLowerCase();if(Q.endsWith(".sh")||Q.endsWith(".bash")||Q.endsWith(".zsh"))return["bash",$];if(Q.endsWith(".js")||Q.endsWith(".mjs")||Q.endsWith(".cjs"))return IG(["node",$],{debugRole:"hook"});if(Q.endsWith(".ts")||Q.endsWith(".mts")||Q.endsWith(".cts"))return["bun","run",$];if(Q.endsWith(".py"))return process.platform==="win32"?["py","-3",$]:["python3",$];if(Q.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",$];return["bash",$]}function LE($){let Z={};for(let Q of N$($)){if(!Q.hookEventName)continue;let W=Q.hookEventName,J=Z[W]??[];J.push(DE(Q.path)),Z[W]=J}return Z}async function _E($){let Z;for(let Q of $.commands){let W=Q.join(" ");try{let J=await xG($.payload,{command:Q,cwd:$.cwd,env:WJ(process.env),detached:!1,timeoutMs:$.timeoutMs});if(J?.timedOut){pZ($.logger,`hook command timed out: ${W}`);continue}if(J?.parseError){pZ($.logger,`hook command returned invalid JSON control output: ${W} (${J.parseError})`);continue}Z=BE(Z,GE(J?.parsedJson))}catch(J){pZ($.logger,`hook command failed: ${W}`,J)}}return Z}function O2($){for(let Z of $.commands){let Q=Z.join(" ");xG($.payload,{command:Z,cwd:$.cwd,env:WJ(process.env),detached:!0}).catch((W)=>{pZ($.logger,`hook command failed: ${Q}`,W)})}}function w$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function QJ($,Z){return{...w$($.snapshot),userMessage:Z}}function mG($){return{...w$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function vG($){return{...w$($.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 cG($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function zE($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}function c8($){let Z={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(W)=>{let J=`${JSON.stringify({ts:new Date().toISOString(),...W})}
478
- `,Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??HE(hG(),"hooks.jsonl");hG(Y),jE(Y,J,"utf8")};return{beforeRun:async(W)=>{let J=QJ(W,"");Q({...q0(J,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(W)=>{let J=mG(W);Q({...q0(J,Z),hookName:"tool_call",iteration:J.iteration,tool_call:{id:J.call.id,name:J.call.name,input:J.call.input},preToolUse:{toolName:J.call.name,parameters:rZ(J.call.input)}});return},afterTool:async(W)=>{let J=vG(W);Q({...q0(J,Z),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:rZ(J.record.input),result:typeof J.record.output==="string"?J.record.output:JSON.stringify(J.record.output),success:!J.record.error,executionTimeMs:J.record.durationMs}});return},afterRun:async({snapshot:W,result:J})=>{let X=w$(W);if(J.status==="completed"){Q({...q0(X,Z),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||ZJ(J.error?.message)){Q({...q0(X,Z),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Q({...q0(X,Z),hookName:"agent_error",iteration:J.iterations,error:{name:J.error.name,message:J.error.message,stack:J.error.stack}})},onEvent:async(W)=>{if(W.type!=="message-added"||W.message.role!=="user")return;let J=QJ({snapshot:W.snapshot},cG(W.message.content));Q({...q0(J,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function t6($){let Z=LE($.workspacePath);if(!Object.values(Z).some((G)=>G.length>0))return;let W=async(G,K)=>{let F=Z[K]??[];if(F.length===0)return;O2({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...q0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...q0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=Z.prompt_submit??[];if(K.length>0)O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},X=async(G)=>{let K=Z.tool_call??[];if(K.length===0)return;return _E({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...q0(G,$),hookName:"tool_call",iteration:G.iteration,tool_call:{id:G.call.id,name:G.call.name,input:G.call.input},preToolUse:{toolName:G.call.name,parameters:rZ(G.call.input)}}})},Y=async(G)=>{let K=Z.tool_result??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:rZ(G.record.input),result:typeof G.record.output==="string"?G.record.output:JSON.stringify(G.record.output),success:!G.record.error,executionTimeMs:G.record.durationMs}}})},j=async(G)=>{let K=Z.agent_end??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"agent_end",iteration:G.iteration,turn:G.turn,taskComplete:{taskMetadata:{}}}})},V=async(G)=>{let K=Z.agent_error??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},H=async(G)=>{if(ZJ(G.reason)){let F=Z.agent_abort??[];if(F.length>0)O2({commands:F,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=Z.session_shutdown??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"session_shutdown",reason:G.reason}})},B={};if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0||(Z.prompt_submit?.length??0)>0){if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0)B.beforeRun=async(G)=>{let K=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await W(w$(G.snapshot),K);return};if((Z.prompt_submit?.length??0)>0)B.onEvent=async(G)=>{if(G.type!=="message-added"||G.message.role!=="user")return;await J(QJ({snapshot:G.snapshot},cG(G.message.content)))}}if((Z.tool_call?.length??0)>0)B.beforeTool=async(G)=>{let K=await X(mG(G));return zE(K)};if((Z.tool_result?.length??0)>0)B.afterTool=async(G)=>{await Y(vG(G));return};if((Z.agent_end?.length??0)>0)B.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await j({...w$(G),iteration:K.iterations,turn:{outputText:K.outputText,status:K.status}})};if((Z.agent_error?.length??0)>0||(Z.agent_abort?.length??0)>0||(Z.session_shutdown?.length??0)>0){let G=B.afterRun;B.afterRun=async(K)=>{await G?.(K);let{snapshot:F,result:A}=K;if(A.status==="aborted"||ZJ(A.error?.message)){await H({...w$(F),reason:A.error?.message});return}if(A.error)await V({...w$(F),iteration:A.iterations,error:A.error})}}return B}function u8($){return m8("core.hook_config_files",t6($))}function q2($,Z){let Q=$.map((W)=>W[Z]).filter((W)=>typeof W==="function");if(Q.length===0)return;return async(W)=>{let J;for(let X of Q){let Y=await X(W);if(!Y||typeof Y!=="object")continue;let j=Y;J={...J??{},...j,stop:J?.stop===!0||j.stop===!0?!0:j.stop,options:J?.options||j.options?{...J?.options??{},...j.options??{}}:void 0}}return J}}function M2($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:q2(Z,"beforeRun"),afterRun:q2(Z,"afterRun"),beforeModel:q2(Z,"beforeModel"),afterModel:q2(Z,"afterModel"),beforeTool:q2(Z,"beforeTool"),afterTool:q2(Z,"afterTool"),onEvent:q2(Z,"onEvent")}}var uG={};N(uG,{normalizeRuntimeCapabilities:()=>M0});function M0(...$){let Z,Q;for(let J of $){if(!J)continue;if(J.toolExecutors)Z={...Z??{},...J.toolExecutors};if(J.requestToolApproval)Q=J.requestToolApproval}let W=Z&&Object.keys(Z).length>0;if(!W&&!Q)return;return{...W?{toolExecutors:Z}:{},...Q?{requestToolApproval:Q}:{}}}var oG={};N(oG,{toProviderConfig:()=>l0,emptyStoredProviderSettings:()=>S$,StoredProviderSettingsSchema:()=>r8,StoredProviderSettingsEntrySchema:()=>fQ,ProviderSettingsSchemaTyped:()=>p8});import{z as P$}from"zod";var sG={};N(sG,{toProviderConfig:()=>l0,safeParseSettings:()=>AQ,safeCreateProviderConfig:()=>FJ,parseSettings:()=>FQ,normalizeProviderId:()=>l8,isBuiltInProviderId:()=>GJ,createProviderConfig:()=>KJ,SapSettingsSchema:()=>BQ,ReasoningSettingsSchema:()=>YQ,ProviderSettingsSchema:()=>C$,ProviderProtocolSchema:()=>WQ,ProviderIdSchema:()=>W5,ProviderClientSchema:()=>JQ,OcaSettingsSchema:()=>GQ,ModelCatalogSettingsSchema:()=>KQ,GcpSettingsSchema:()=>VQ,BUILT_IN_PROVIDER_IDS:()=>BJ,BUILT_IN_PROVIDER:()=>Q5,AzureSettingsSchema:()=>HQ,AwsSettingsSchema:()=>jQ,AuthSettingsSchema:()=>XQ});import*as d0 from"@cline/llms";import{z as w}from"zod";var aG={};N(aG,{resolveProviderConfig:()=>Z5,getProviderConfig:()=>QQ,getLiveModelsCatalog:()=>d8,clearPublicModelsCatalogCache:()=>dE,clearPrivateModelsCatalogCache:()=>HJ,clearLiveModelsCatalogCache:()=>VJ,OPENAI_COMPATIBLE_PROVIDERS:()=>$5,DEFAULT_MODELS_CATALOG_URL:()=>tZ});import*as s from"@cline/llms";function JJ($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let W of[Q.id,Q.name,Q.model])if(typeof W==="string"&&W.trim())return W.trim()}return""}).filter((Z)=>Z.length>0)}function TE($,Z){let Q=JJ($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let W=$,J=JJ(W.data??W.models);if(J.length>0)return J;if(W.models&&typeof W.models==="object"&&!Array.isArray(W.models)){let Y=Object.keys(W.models).filter((j)=>j.trim().length>0);if(Y.length>0)return Y}let X=W.providers?.[Z];if(X&&typeof X==="object"){let j=JJ(X.models??X);if(j.length>0)return j}return[]}async function iZ($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return TE(await Q.json(),Z)}function dG($){return $.replace(/\/+$/,"")}function nZ($,Z,Q){let W=Q?.trim();if(!W)return;let J=$?.trim();if(!J||!Z?.trim())return W;try{let X=new URL(W),Y=new URL(Z),j=new URL(J);if(X.origin!==Y.origin)return W;let V=dG(Y.pathname),H=dG(j.pathname);if(V&&X.pathname.startsWith(`${V}/`)){let B=X.pathname.slice(V.length);j.pathname=`${H}${B}`}else j.pathname=X.pathname;return j.search=X.search,j.hash=X.hash,j.toString()}catch{return W}}function OE($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function qE($){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 ME=Object.values(s.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:OE($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),pG=Object.fromEntries(ME.map(($)=>[$.id,$]));function RE($){return pG[$]}function EE(){return Object.fromEntries(Object.entries(pG).filter(([,$])=>qE($)))}function rG($=[]){let Z=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return Z.length>0?Z:void 0}var tZ="https://models.dev/api.json",NE=600000,iG=300000,wE=5000,oZ=new Map,e6=new Map,XJ=new Map,aZ=new Map;async function CE(){return s.getGeneratedProviderModels()}async function PE($,Z={},Q={},W={},J={},X={}){if($==="litellm")return s.sortModelsByReleaseDate(W);let Y=await CE(),j=s.resolveProviderModelCatalogKeys($),V=Object.assign({},...j.map((K)=>Y[K]??{})),H=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),B=Object.keys(J).length>0;if(H&&B)return s.sortModelsByReleaseDate({...J,...X});if($==="openai-codex")return s.sortModelsByReleaseDate({...Z,...s.filterOpenAICodexModels(Q),...J,...X});if($==="cline-pass"&&Object.keys(Q).length>0)return s.sortModelsByReleaseDate({...Q,...X});let G=s.sortModelsByReleaseDate({...V,...Z,...Q,...W,...J});if($==="cline")return s.sortModelsByReleaseDate({...s.preferCanonicalModelIds(G,s.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...X});return s.sortModelsByReleaseDate({...G,...X})}function SE($,Z){let Q=s.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((W)=>Z[W]??{}))}function eZ($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function jJ($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function bE($){let Z=2166136261;for(let Q=0;Q<$.length;Q+=1)Z^=$.charCodeAt(Q),Z+=(Z<<1)+(Z<<4)+(Z<<7)+(Z<<8)+(Z<<24);return(Z>>>0).toString(16)}function yE($,Z){return`${$}:${eZ(Z.baseUrl)}:${bE(jJ(Z)??"")}`}async function $Q($,Z,Q=wE){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await fetch($,{...Z,signal:W.signal})}finally{clearTimeout(J)}}function R2($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function ZQ($,Z){let Q=["streaming","tools"];return R2(Q,"images",Boolean(Z.supportsImages)),R2(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),R2(Q,"reasoning",Boolean(Z.supportsReasoning)),{id:$,name:Z.name??$,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxTokens:Z.maxTokens,capabilities:Q,releaseDate:Z.releaseDate,status:"active"}}async function hE($,Z){let Q=await $Q("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;if(j.includes("whisper")||j.includes("tts")||j.includes("embedding"))continue;let V=Y.supported_features??[];X[j]=ZQ(j,{name:j,contextWindow:Y.context_length,maxInputTokens:Y.context_length,maxTokens:Y.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return X}function lG($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function kE($,Z){let Q=await $Q("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":Z}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;X[j]=ZQ(j,{name:j,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return X}async function IE($,Z){let W=`${(eZ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await $Q(W,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!J.ok)throw Error(`Poolside model refresh failed: HTTP ${J.status}`);let Y=(await J.json())?.data??[],j={};for(let V of Y){let H=V.id?.trim();if(!H)continue;let B=V.supported_features??[],G=V.supported_sampling_parameters??[],K=V.input_modalities??[],F=["streaming"];R2(F,"tools",B.includes("tools")),R2(F,"reasoning",B.includes("reasoning")),R2(F,"temperature",G.includes("temperature")),R2(F,"images",K.includes("image"));let A={input:lG(V.pricing?.prompt),output:lG(V.pricing?.completion)};j[H]={id:H,name:V.name??H,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:A.input!==void 0||A.output!==void 0?A:void 0,status:"active"}}return j}function xE($){let Z=eZ($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function gE($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function mE($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,W=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${W}`}async function vE($,Z){let Q=xE($.baseUrl),W=[],J=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let X of gE(Q))for(let[Y,j]of J)try{let V=await $Q(X,{method:"GET",headers:{accept:"application/json",...j}});if(V.ok){let B=(await V.json())?.data??[],G={};for(let K of B){let F=K.model_name?.trim(),L=K.litellm_params?.model?.trim()||F;if(!L)continue;let f=K.model_info,D=ZQ(L,{name:F??L,maxTokens:f?.max_output_tokens??f?.max_tokens,maxInputTokens:f?.max_input_tokens??f?.max_tokens,supportsImages:f?.supports_vision,supportsPromptCache:f?.supports_prompt_caching,supportsReasoning:f?.supports_reasoning});if(G[L]=D,F)G[F]={...D,id:F,name:F}}return G}W.push(`${new URL(X).pathname} (${Y}): ${await mE(V)}`)}catch(V){let H=V instanceof Error?V.message:String(V);W.push(`${new URL(X).pathname} (${Y}): ${H}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${W.join("; ")}`)}var nG={baseten:hE,hicap:kE,litellm:vE,poolside:IE},YJ=new Map,sZ=new Map;function cE($,Z){return`${$}:${eZ(Z.baseUrl)}`}async function uE($,Z,Q){let W=s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=nZ(Q.baseUrl,W?.provider.baseUrl,W?.provider.modelsSourceUrl);if(!J)return{};let X=Z?.cacheTtlMs??iG,Y=cE($,Q),j=Date.now(),V=YJ.get(Y);if(V&&V.expiresAt>j)return V.data;let H=sZ.get(Y);if(H)return H;let B=iZ(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,ZQ(F,{name:F})]));return YJ.set(Y,{data:K,expiresAt:j+X}),K}).finally(()=>{sZ.delete(Y)});return sZ.set(Y,B),B}function dE(){YJ.clear(),sZ.clear()}async function lE($,Z){let Q=jJ(Z);if(!Q)return{};let W=nG[$];if(!W)return{};return W(Z,Q)}function pE($,Z,Q){if(!Q)return!1;if(!nG[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(jJ(Q))}async function rE($,Z,Q){let W=Z?.cacheTtlMs??iG,J=yE($,Q),X=Date.now(),Y=XJ.get(J);if(Y&&Y.expiresAt>X)return Y.data;let j=aZ.get(J);if(j)return j;let V=lE($,Q).then((H)=>{return XJ.set(J,{data:H,expiresAt:X+W}),H}).finally(()=>{aZ.delete(J)});return aZ.set(J,V),V}async function iE($){return s.fetchLiveProviderModels($,globalThis.fetch)}async function d8($={}){let Z=$.url??tZ,Q=$.cacheTtlMs??NE,W=Date.now(),J=oZ.get(Z);if(J&&J.expiresAt>W)return J.data;let X=e6.get(Z);if(X)return X;let Y=iE(Z).then((j)=>{return oZ.set(Z,{data:j,expiresAt:W+Q}),j}).finally(()=>{e6.delete(Z)});return e6.set(Z,Y),Y}function VJ($){if($){oZ.delete($),e6.delete($);return}oZ.clear(),e6.clear()}function HJ(){XJ.clear(),aZ.clear()}function nE($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:rG(Q.capabilities)}]))}var $5=nE(EE());function QQ($){let Z=RE($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:rG(Z.capabilities)}}async function Z5($,Z,Q){let W=QQ($);if(!W)return;try{let J=Z?.loadLatestOnInit?await d8(Z):void 0,X=J?SE($,J):{},Y=Q&&pE($,Z,Q)?await rE($,Z,Q):{},V=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:W.modelId,baseUrl:W.baseUrl}:Q,H=V?await uE($,Z,V).catch(()=>({})):{},B=await PE($,W.knownModels,X,Y,H,Q?.knownModels);return{...W,knownModels:B}}catch(J){if(Z?.failOnError)throw J;if($==="litellm")return{...W,knownModels:{}};return W}}var Q5=d0.BUILT_IN_PROVIDER,BJ=d0.BUILT_IN_PROVIDER_IDS,GJ=d0.isBuiltInProviderId,l8=d0.normalizeProviderId,W5=w.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),WQ=w.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),JQ=w.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),XQ=w.object({apiKey:w.string().optional(),accessToken:w.string().optional(),refreshToken:w.string().optional(),expiresAt:w.number().int().positive().optional(),accountId:w.string().optional()}),aE=w.enum(["none","low","medium","high","xhigh"]),YQ=w.object({enabled:w.boolean().optional(),effort:aE.optional(),budgetTokens:w.number().int().positive().optional()}),jQ=w.object({accessKey:w.string().optional(),secretKey:w.string().optional(),sessionToken:w.string().optional(),region:w.string().optional(),profile:w.string().optional(),authentication:w.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:w.boolean().optional(),useCrossRegionInference:w.boolean().optional(),useGlobalInference:w.boolean().optional(),endpoint:w.string().url().optional(),customModelBaseId:w.string().optional()}),VQ=w.object({projectId:w.string().optional(),region:w.string().optional()}),HQ=w.object({apiVersion:w.string().optional(),useIdentity:w.boolean().optional()}),BQ=w.object({clientId:w.string().optional(),clientSecret:w.string().optional(),tokenUrl:w.string().url().optional(),resourceGroup:w.string().optional(),deploymentId:w.string().optional(),useOrchestrationMode:w.boolean().optional(),api:w.enum(["orchestration","foundation-models"]).optional(),defaultSettings:w.record(w.string(),w.unknown()).optional()}),GQ=w.object({mode:w.enum(["internal","external"]).optional(),usePromptCache:w.boolean().optional()}),KQ=w.object({loadLatestOnInit:w.boolean().optional(),loadPrivateOnAuth:w.boolean().optional(),url:w.string().url().optional(),cacheTtlMs:w.number().int().positive().optional(),failOnError:w.boolean().optional()}),C$=w.object({provider:W5,apiKey:w.string().optional(),auth:XQ.optional(),model:w.string().optional(),protocol:WQ.optional(),client:JQ.optional(),routingProviderId:W5.optional(),maxTokens:w.number().int().positive().optional(),contextWindow:w.number().int().positive().optional(),baseUrl:w.string().url().optional(),headers:w.record(w.string(),w.string()).optional(),timeout:w.number().int().positive().optional(),reasoning:YQ.optional(),aws:jQ.optional(),gcp:VQ.optional(),azure:HQ.optional(),sap:BQ.optional(),oca:GQ.optional(),region:w.string().optional(),apiLine:w.enum(["china","international"]).optional(),capabilities:w.array(w.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:KQ.optional()});function FQ($){return C$.parse($)}function AQ($){return C$.safeParse($)}function sE($){return $.protocol==="openai-responses"||$.client==="openai"}function l0($,Z={}){let Q=$.provider,W=l8(Q),J=Z.includeKnownModels!==!1,X=$.reasoning?.effort||"none",Y=X==="none"?void 0:X,j=$5[W],V=Object.assign({},...d0.resolveProviderModelCatalogKeys(W).map((L)=>d0.getGeneratedModelsForProvider(L))),H=Object.keys(V)[0],B=U8(W,$),G=$.baseUrl??(W==="oca"?$.oca?.mode==="internal"?jZ:VZ:j?.baseUrl),K=$.routingProviderId??(sE($)&&W!==Q5.OPENAI_NATIVE?Q5.OPENAI_NATIVE:void 0),F=J?j?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,A={providerId:Q,clientType:$.client,routingProviderId:K,modelId:$.model??j?.modelId??H??"default",...J?{knownModels:F}:{},apiKey:B,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:Y,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??j?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(A).filter(([L,f])=>f!==void 0))}function KJ($){let Z=FQ($);return l0(Z)}function FJ($){let Z=AQ($);if(Z.success)return{success:!0,config:l0(Z.data)};return{success:!1,error:Z.error}}var p8=C$;var fQ=P$.object({settings:C$,updatedAt:P$.string().datetime(),tokenSource:P$.enum(["manual","oauth","migration"]).default("manual")}),r8=P$.object({version:P$.literal(1),lastUsedProvider:P$.string().min(1).optional(),providers:P$.record(P$.string(),fQ)});function S$(){return{version:1,providers:{}}}$1();var tG={};N(tG,{InMemoryWorkspaceManager:()=>i8});import{upsertWorkspaceInfo as oE,WorkspaceManifestSchema as AJ}from"@cline/shared";class i8{manifest;listeners=new Set;constructor($){this.manifest=AJ.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await $8($);return this.manifest=oE(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=w1($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=AJ.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let W=await this.addWorkspacePath(Z);return this.manifest=AJ.parse({...this.manifest,currentWorkspacePath:W.rootPath}),this.emit({type:"workspace_switched",workspace:W}),W}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=w1($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}_0();import{createHash as tE}from"node:crypto";var eG=new Set,$K=new Set;function eE($){return tE("sha256").update($).digest("hex")}function $N($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function ZK($){if(!$.telemetry)return;let Z=eE($.rootPath),Q=$.rootCount??1;if(!eG.has(Z))eG.add(Z),T9($.telemetry,{root_count:Q,vcs_types:$N($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!$K.has(Z)){$K.add(Z);let W=Error($.initError.message);W.name=$.initError.errorType||"Error",O9($.telemetry,W,{fallback_to_single_root:!0,workspace_count:Q})}}function QN($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function WN($,Z,Q){if(Z.length>0)for(let X of Z)Q?.log(X.message,{severity:"warn"});if($.length===0)return;let W=$.slice(0,3).map(QN).join("; "),J=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${W}${J}. Use --verbose for more details.`,{severity:"warn"});for(let X of $)Q?.log(`Plugin initialization failed (${X.phase}) for ${X.pluginPath}`,{severity:"warn",stack:X.stack,pluginPath:X.pluginPath,pluginName:X.pluginName})}function JN($,Z){let Q=typeof $.thinking==="boolean",W=typeof $.reasoningEffort==="string";if(!Q&&!W)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...W?{effort:$.reasoningEffort}:{}}}function QK($,Z){return ZN($,Z)}function XN($){let Z=0;for(let Q of $??[]){if(Q.role!=="user")continue;if(("metadata"in Q&&Q.metadata&&typeof Q.metadata==="object"&&!Array.isArray(Q.metadata)?Q.metadata:void 0)?.kind==="recovery_notice")continue;Z+=1}return Z}function YN($){let Z={...$.storedHeaders??{},...$.configHeaders??{}},Q=$.accountId?.trim()||jN($.accessToken);if(Z.originator="cline",Z.session_id=$.sessionId,Z["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,Q)Z["ChatGPT-Account-Id"]=Q;return Z}function jN($){let Z=$?.trim();if(!Z)return;let Q=E0(Z),W=Q?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let J=Q?.organizations?.[0]?.id;if(typeof J==="string"&&J.length>0)return J;let X=Q?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;return}function VN($,Z,Q,W,J){let X=Q.getProviderSettings($.providerId),Y=W||X?.modelCatalog?{...W??{},...X?.modelCatalog??{}}:void 0,j=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,V={...X??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??X?.apiKey,baseUrl:$.baseUrl??X?.baseUrl,headers:$.providerId==="openai-codex"?YN({sessionId:Z,configHeaders:$.headers,storedHeaders:X?.headers,accountId:X?.auth?.accountId,accessToken:$.apiKey??X?.auth?.accessToken??X?.apiKey}):$.headers??X?.headers,reasoning:JN($,X?.reasoning),modelCatalog:Y},H={...l0(V),...j??{}};if($.knownModels)H.knownModels=$.knownModels;if($.extensionContext)H.extensionContext=$.extensionContext;let G=$.fetch??H.fetch??J;if(G)H.fetch=G;return H}async function WK($){let{input:Z,sessionId:Q,providerSettingsManager:W,defaultTelemetry:J,defaultCapabilities:X,defaultToolPolicies:Y,defaultFetch:j,onPluginEvent:V,onTeamEvent:H,createSubAgentLifecycleCallbacks:B,createSpawnTool:G,localRuntime:K,readSessionMetadata:F,writeSessionMetadata:A}=$,L=R$(Z.config),{modelCatalogDefaults:f,userInstructionService:D,configExtensions:U,onTeamRestored:T,...q}=K??{},z=Object.keys(q).length>0?q:void 0,{workspaceInfo:_,workspaceMetadata:E,durationMs:C,vcsType:y,initError:l}=await JW(L),o=z?.extensionContext,t={...o??{},workspace:{..._,...o?.workspace??{}},session:{...o?.session??{},sessionId:Q},logger:o?.logger??z?.logger,telemetry:o?.telemetry??z?.telemetry??J};ZK({telemetry:t.telemetry,rootPath:_.rootPath,workspaceInfo:_,rootCount:1,vcsType:y,durationMs:C,initError:l,featureFlagEnabled:!0});let Q0=u8({cwd:Z.config.cwd,workspacePath:L,rootSessionId:Q,logger:z?.logger,workspaceInfo:_}),e0=ZG(z?.hooks)?void 0:c8({rootSessionId:Q,workspacePath:L,workspaceInfo:_}),l$=M2([z?.hooks,e0]),r;if(QK(U,"plugins"))try{r=await g8({pluginPaths:z?.pluginPaths,workspacePath:L,cwd:Z.config.cwd,onEvent:V,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:_,session:t.session,client:t.client,user:t.user,logger:t.logger,telemetry:t.telemetry,automation:t.automation}),WN(r.failures,r.warnings,z?.logger)}catch(s2){let $W=s2 instanceof Error?s2.message:String(s2);z?.logger?.log?.(`plugin loading failed; continuing without plugins (${$W})`)}let P=b3(Q0?[Q0]:void 0,b3(z?.extensions,c9(r?.extensions))),B0=QK(U,"plugins")?n1(r?.pluginPaths??[]):void 0,G0={...Z.config,...z??{},sessionId:Q,hooks:l$,extensions:P,extensionContext:t,telemetry:t.telemetry},C0=VN(G0,Q,W,f,j),n2=M2([G0.hooks,G0.checkpoint?.enabled===!0?yG({cwd:G0.cwd,sessionId:Q,logger:G0.logger,createCheckpoint:G0.checkpoint?.createCheckpoint,initialRunCount:XN(Z.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),R1={...G0,providerConfig:C0,workspaceMetadata:E,hooks:n2},H1=Z.toolPolicies??G0.toolPolicies??Y,C4=M0(X,Z.capabilities),a2=C4?.requestToolApproval,K9=C4?.toolExecutors,E1=B?.(R1),F9=new i8({currentWorkspacePath:_.rootPath,workspaces:{[_.rootPath]:_}});return{effectiveInput:Z,config:R1,providerConfig:C0,workspaceMetadata:E,workspaceInfo:_,extensions:P,hooks:n2,toolPolicies:H1,requestToolApproval:a2,pluginSandboxShutdown:r?.shutdown,runtimeBuilderInput:{config:R1,hooks:n2,extensions:P,onTeamEvent:H,createSpawnTool:G,onTeamRestored:T,onSubAgentEvent:E1?.onSubAgentEvent,onSubAgentStart:E1?.onSubAgentStart,onSubAgentEnd:E1?.onSubAgentEnd,userInstructionService:D,pluginSkillDirectories:B0,configExtensions:U,toolExecutors:K9,toolPolicies:H1,workspaceManager:F9,logger:R1.logger,telemetry:R1.telemetry,requestToolApproval:a2}}}import{existsSync as DQ,mkdirSync as HN,readdirSync as BN,rmdirSync as GN,rmSync as KN,unlinkSync as FN}from"node:fs";import{dirname as JK,join as UQ}from"node:path";function J0(){return new Date().toISOString()}function J5($){if(!$||!DQ($))return;try{FN($)}catch{}}function AN($){let Z=P8($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=x6($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class fJ{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return UQ(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!DQ(Z))HN(Z,{recursive:!0});return Z}sessionMessagesPath($){return UQ(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return UQ(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!DQ(Z)){Z=JK(Z);continue}try{if(BN(Z).length>0)break;GN(Z)}catch{break}Z=JK(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!DQ($))return;try{KN($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:W,fileStem:J}=AN($),X=this.sessionArtifactsDir(W);return{messagesPath:UQ(X,`${J}.messages.json`)}}}import{resolveDocumentsExtensionPath as fN}from"@cline/shared/storage";_0();function XK($,Z,Q,W,J){if(Q)M9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});else q9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});UN($.telemetry,{workspacePath:W})}function UN($,Z){let Q=fN("Hooks"),W=N$(Z.workspacePath),J=new Map;for(let X of W){let Y=X.hookEventName??"unknown",j=J.get(Y)??{global:0,workspace:0};if(X.path===Q||X.path.startsWith(`${Q}/`))j.global+=1;else j.workspace+=1;J.set(Y,j)}for(let[X,Y]of J.entries())y9($,X,Y.global,Y.workspace)}function YK($,Z){for(let Q of Z.mentions)S9($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)C9($,"file",Q.length);for(let Q of Z.ignoredMentions)P9($,"file","not_found",Q)}var YU={};N(YU,{ProviderSettingsManager:()=>q1});import{chmodSync as KU,existsSync as RY,mkdirSync as gI,readFileSync as mI,writeFileSync as vI}from"node:fs";import{basename as FU,dirname as EY}from"node:path";import{resolveProviderSettingsPath as cI}from"@cline/shared/storage";var M={};N(M,{writeHubDiscovery:()=>p9,writeGlobalSettings:()=>B1,withHubStartupLock:()=>r9,verifyHubConnection:()=>A1,updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>t8,updateMcpServerOAuthStateAsync:()=>O5,updateMcpServerOAuthState:()=>P2,updateLocalProvider:()=>y7,uninstallPlugin:()=>a5,uninstallMarketplaceSkill:()=>A7,uninstallMarketplacePlugin:()=>f7,uninstallMarketplaceMcpServerFromSettings:()=>K7,uninstallMarketplaceEntry:()=>dX,truncateNotificationBody:()=>J9,truncateCommandOutput:()=>Y2,toggleDisabledTool:()=>m9,toTeamProgressLifecycleEvent:()=>H4,toProviderConfig:()=>l0,toHubStatusUrl:()=>OW,toHubHealthUrl:()=>i9,toHookConfigFileName:()=>o6,syncPluginMcpServersToSettings:()=>i5,summarizeUsageFromMessages:()=>b8,stopLocalHubServerGracefully:()=>hW,startLocalOAuthServer:()=>J1,startHubWebSocketServer:()=>j9,startHubServer:()=>HU,startClineDeviceAuth:()=>lW,splitCoreSessionConfig:()=>i4,spawnDetachedHubServerWithRetry:()=>H8,spawnDetachedHubServer:()=>wW,setTelemetryOptOutGlobally:()=>yj,setMcpServerDisabled:()=>w2,setDisabledTools:()=>fW,setDisabledPlugin:()=>cj,setCompactionStrategyGlobally:()=>xj,setAutoUpdateEnabledGlobally:()=>kj,sendHubCommand:()=>_V,saveProviderOAuthCredentials:()=>W2,saveLocalProviderSettings:()=>WY,saveLocalProviderOAuthCredentials:()=>jY,sanitizeSessionToken:()=>D2,safeParseSettings:()=>AQ,safeCreateProviderConfig:()=>FJ,runSubprocessEvent:()=>U4,runHook:()=>L4,reviveTeamStateDates:()=>SZ,restartLocalHubIfIdleAfterStartupTimeout:()=>t9,resolveWorkspaceHubOwnerContext:()=>QV,resolveWorkflowsConfigSearchPaths:()=>f5,resolveSkillsConfigSearchPaths:()=>F5,resolveSharedHubOwnerContext:()=>Q1,resolveSessionBackend:()=>KX,resolveRulesConfigSearchPaths:()=>A5,resolveProviderConfig:()=>Z5,resolveProviderApiKeyFromSettings:()=>sW,resolveProductionHubOwnerContext:()=>F1,resolvePluginSkillDirectoriesFromPaths:()=>n1,resolvePluginConfigSearchPaths:()=>i6,resolveMcpServerRegistrations:()=>p0,resolveMarketplaceMcpServerName:()=>o5,resolveLocalClineAuthToken:()=>HY,resolveHubUrl:()=>kW,resolveHubOwnerContext:()=>x1,resolveHubEndpointOptions:()=>K1,resolveHubBuildId:()=>l9,resolveHooksConfigSearchPaths:()=>a6,resolveDisabledToolNames:()=>G1,resolveDisabledPluginPaths:()=>u4,resolveDefaultMcpSettingsPath:()=>Z0,resolveDefaultHubPort:()=>V8,resolveDefaultHubPathname:()=>NW,resolveDefaultHubHost:()=>EW,resolveCoreSelectedToolIds:()=>yZ,resolveCoreDistinctId:()=>P0,resolveCompatibleLocalHubUrl:()=>o4,resolveClineDir:()=>tj,resolveClineDataDir:()=>o$,resolveAndLoadAgentPlugins:()=>g8,resolveAgentPluginPaths:()=>i1,requestHubShutdown:()=>s4,requestDesktopToolApproval:()=>NX,removePluginMcpServersFromSettings:()=>n5,rememberRecoverableLocalHubUrl:()=>B$,registerRemoteConfigSessionBlobUpload:()=>W7,registerMcpServersFromSettingsFile:()=>S2,registerDisposable:()=>hI,refreshProviderModelsFromSource:()=>JY,refreshOpenAICodexToken:()=>YZ,refreshOcaToken:()=>BZ,refreshClineToken:()=>JZ,readSessionCheckpointHistory:()=>I2,readRemoteConfigSessionBlobUploadMetadata:()=>LX,readHubDiscovery:()=>K0,readGlobalSettings:()=>z0,readCompactionStrategyGlobally:()=>Ij,readBearerToken:()=>l7,probeHubServer:()=>g1,probeHubConnection:()=>LV,prewarmFileIndex:()=>TZ,prewarmDetachedHubServer:()=>a9,prepareRemoteConfigCoreIntegration:()=>zX,parseWorkflowConfigFromMarkdown:()=>K5,parseUserCommandEnvelope:()=>yI,parseSkillConfigFromMarkdown:()=>B5,parseSettings:()=>FQ,parseRuleConfigFromMarkdown:()=>G5,parsePluginSource:()=>M7,parseMcpInstallArgs:()=>r5,parseHookEventPayload:()=>D4,parseConfiguredAgentConfig:()=>I5,normalizeWorkspacePath:()=>w1,normalizeUserInput:()=>bI,normalizeSdkError:()=>SI,normalizeRuntimeCapabilities:()=>M0,normalizeProviderId:()=>l8,normalizeOAuthProvider:()=>XY,normalizeHubWebSocketUrl:()=>G$,noopBasicLogger:()=>PI,migrateLegacyProviderSettings:()=>Q9,mergeRulesForSystemPrompt:()=>e2,mergeAgentHooks:()=>M2,marketplaceEntryKey:()=>uX,makeTeamTaskSubSessionId:()=>I6,makeSubSessionId:()=>C8,loginOpenAICodex:()=>$6,loginOcaOAuth:()=>W6,loginLocalProvider:()=>YY,loginClineOAuth:()=>t4,loginAndSaveProviderOAuthCredentials:()=>X6,loginAndSaveLocalProviderOAuthCredentials:()=>VY,loadOpenTelemetryAdapter:()=>jI,loadMcpSettingsFile:()=>N2,loadLlmsConfigFromFile:()=>TY,loadConfiguredAgentConfigs:()=>Y4,loadAgentPluginsFromPathsWithDiagnostics:()=>z2,loadAgentPluginsFromPaths:()=>gZ,loadAgentPluginFromPath:()=>p6,listSessionHistoryFromBackend:()=>rJ,listPluginToolsWithDiagnostics:()=>xQ,listPluginTools:()=>R5,listMcpServerOAuthStatuses:()=>q5,listLocalProviders:()=>ZY,listHookConfigFiles:()=>N$,isToolDisabledGlobally:()=>gj,isTelemetryOptedOutGlobally:()=>g9,isSessionNotFoundError:()=>I1,isRuleEnabled:()=>f9,isPluginDisabledGlobally:()=>vj,isOfficialPluginSlug:()=>q7,isOAuthProvider:()=>Q2,isMarketplaceSkillInstalled:()=>F7,isLocalHubOrigin:()=>MY,isLocalHubHostName:()=>p7,isHubReconnectableTransportError:()=>bW,isHubCommandTimeoutError:()=>o9,isDiscoveryFilePresent:()=>$V,isClineOrgIndividualInferenceSubscriptionMessage:()=>DI,isClineOrgIndividualInferenceSubscriptionError:()=>UI,isClineNotSubscribedMessage:()=>fI,isClineNotSubscribedError:()=>AI,isClineAccountActionRequest:()=>LQ,isBuiltInProviderId:()=>GJ,isAutoUpdateEnabledGlobally:()=>hj,installPlugin:()=>aX,installMcpServer:()=>wX,identifyAccount:()=>b1,hasMcpSettingsFile:()=>s1,getValidOpenAICodexCredentials:()=>Z6,getValidOcaCredentials:()=>J6,getValidClineCredentials:()=>e4,getProviderOAuthCredentialsFromSettings:()=>Y6,getProviderConfigFields:()=>BY,getProviderConfig:()=>QQ,getProviderAuthStorageId:()=>aW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>U8,getMcpServerOAuthState:()=>C2,getMarketplaceSkillCandidates:()=>t5,getLocalProviderModels:()=>QY,getLiveModelsCatalog:()=>d8,getGlobalMarketplaceSkillPaths:()=>e5,getFileIndex:()=>d1,getCurrentContextSize:()=>I3,getCoreHeadlessToolNames:()=>k6,getCoreDefaultEnabledToolIds:()=>bZ,getCoreBuiltinToolCatalog:()=>f2,getCoreAcpToolNames:()=>hZ,getClinePassSubscriptionUrl:()=>FI,getClineOrgIndividualInferenceSubscriptionMessage:()=>GI,getClineNotSubscribedMessage:()=>KI,getClineDefaultSystemPrompt:()=>LI,generateWorkspaceInfoWithDiagnostics:()=>S4,generateWorkspaceInfo:()=>$8,formatRulesForSystemPrompt:()=>t2,formatProviderOAuthApiKey:()=>oW,formatDisplayUserInput:()=>CI,findInstalledGlobalMarketplaceSkillName:()=>$9,findCheckpointForRun:()=>A4,filterExtensionToolRegistrations:()=>c9,filterDisabledTools:()=>y1,filterDisabledPluginPaths:()=>v9,fetchClineRecommendedModels:()=>_Y,executeClineAccountAction:()=>_Q,ensureHubWebSocketServer:()=>r7,ensureHubServer:()=>BU,ensureDetachedHubServer:()=>VV,ensureCustomProvidersLoaded:()=>P7,ensureCompatibleLocalHubUrl:()=>$2,enrichPromptWithMentions:()=>T8,emptyWorkspaceManifest:()=>EI,emptyStoredProviderSettings:()=>S$,discoverPluginModulePaths:()=>n6,disablePluginMcpServersInSettings:()=>bX,deriveSubsessionStatus:()=>g6,deleteLocalProvider:()=>h7,defineLlmsConfig:()=>zY,createWorkflowsConfigDefinition:()=>L5,createUserInstructionConfigService:()=>b$,createToolPoliciesWithPreset:()=>qZ,createTool:()=>RI,createTeamName:()=>Y7,createSubprocessHooks:()=>eQ,createSpawnAgentTool:()=>q$,createSkillsConfigDefinition:()=>U5,createShellTool:()=>M6,createShellExecutor:()=>j2,createSessionHost:()=>K4,createRuntimeHost:()=>K4,createRulesConfigDefinition:()=>D5,createRemoteConfigSessionMessagesArtifactUploader:()=>_X,createProviderConfig:()=>KJ,createOpenTelemetryTelemetryService:()=>r4,createOAuthClientCallbacks:()=>n8,createMcpTools:()=>Q4,createLocalHubScheduleRuntimeHandlers:()=>VU,createLlmsSdk:()=>qY,createInitialAccumulatedUsage:()=>D0,createInMemoryHubOwnerContext:()=>ej,createHubServerUrl:()=>Z1,createHubAuthToken:()=>d9,createHookConfigFileHooks:()=>t6,createHookConfigFileExtension:()=>u8,createHookAuditHooks:()=>c8,createDisabledMcpToolPolicy:()=>M5,createDisabledMcpToolPolicies:()=>IQ,createDelegatedAgentConfigProvider:()=>T$,createDelegatedAgent:()=>O$,createDefaultToolsWithPreset:()=>MZ,createDefaultTools:()=>D$,createDefaultShellExecutor:()=>P6,createDefaultMcpServerClientFactory:()=>$4,createDefaultExecutors:()=>O8,createCoreSettingsService:()=>y2,createCoreSessionSnapshot:()=>U1,createContributionRegistry:()=>MI,createContextCompactionPrepareTurn:()=>F6,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>j8,createConfiguredAgentTools:()=>j4,createClineTelemetryServiceMetadata:()=>qI,createClineTelemetryServiceConfig:()=>OI,createCheckpointComparePlan:()=>aQ,createBuiltinTools:()=>U2,createAgentTeamsTools:()=>A2,createAgentRuntime:()=>xI,createAgentHooksExtension:()=>m8,connectToHub:()=>e9,completeClineDeviceAuth:()=>pW,compareCheckpointToWorkspace:()=>d5,collectPluginMcpOAuthCandidates:()=>R7,clearPrivateModelsCatalogCache:()=>HJ,clearLiveModelsCatalogCache:()=>VJ,clearHubDiscovery:()=>S0,captureWorkspacePathResolved:()=>Nj,captureWorkspaceInitialized:()=>T9,captureWorkspaceInitError:()=>O9,captureToolUsage:()=>W8,captureTokenUsage:()=>R9,captureTaskRestarted:()=>M9,captureTaskCreated:()=>q9,captureTaskCompleted:()=>g4,captureSubagentExecution:()=>v4,captureSkillUsed:()=>N9,captureSdkError:()=>TI,captureProviderConfigured:()=>wj,captureProviderApiError:()=>m4,captureModeSwitch:()=>E9,captureMentionUsed:()=>C9,captureMentionSearchResults:()=>S9,captureMentionFailed:()=>P9,captureHookDiscovery:()=>y9,captureExtensionActivated:()=>Ej,captureDiffEditFailure:()=>w9,captureConversationTurnEvent:()=>Q8,captureCompactionSkipped:()=>k9,captureCompactionExecuted:()=>h9,captureAuthSucceeded:()=>P1,captureAuthStarted:()=>C1,captureAuthLoggedOut:()=>V$,captureAuthFailed:()=>S1,captureAgentUnexpectedReasoningTokens:()=>Rj,captureAgentTeamCreated:()=>b9,captureAgentCreated:()=>H$,buildWorkspaceMetadata:()=>b4,buildTeamProgressSummary:()=>V4,buildSdkErrorProperties:()=>_I,buildRemoteConfigSessionBlobUploadMetadata:()=>Z7,buildMcpInstallTransport:()=>j7,buildDelegatedAgentConfig:()=>K2,buildConfiguredAgentToolName:()=>x5,buildConfiguredAgentToolDescriptors:()=>g5,buildCheckpointWorkspaceDiff:()=>sQ,bootstrapAgentTeams:()=>w8,authorizeMcpServerOAuth:()=>bQ,addLocalProvider:()=>$Y,accumulateUsageTotals:()=>f0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>H5,UnifiedConfigFileWatcher:()=>E2,ToolPresets:()=>u0,TelemetryService:()=>X8,TelemetryLoggerSink:()=>p4,TEAM_TOOL_NAMES:()=>N8,SubprocessSandbox:()=>k8,StructuredCommandInputSchema:()=>J2,StoredProviderSettingsSchema:()=>r8,StoredProviderSettingsEntrySchema:()=>fQ,SqliteTeamStore:()=>c2,SqliteSessionStore:()=>L1,SessionVersioningService:()=>c$,SessionVersioningError:()=>k0,SessionSource:()=>T0,SessionNotFoundError:()=>k1,SapSettingsSchema:()=>BQ,SKILLS_CONFIG_DIRECTORY_NAME:()=>V5,SESSION_STATUSES:()=>m6,SESSION_NOT_FOUND_ERROR_CODE:()=>s$,SDK_ERROR_TELEMETRY_EVENT:()=>kI,RpcClineAccountService:()=>Y5,RemoteRuntimeHost:()=>X4,ReasoningSettingsSchema:()=>YQ,RULES_CONFIG_DIRECTORY_NAME:()=>EQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>Q7,ProviderSettingsSchema:()=>C$,ProviderSettingsManager:()=>q1,ProviderProtocolSchema:()=>WQ,ProviderIdSchema:()=>W5,ProviderClientSchema:()=>JQ,OpenTelemetryProvider:()=>Y8,OcaSettingsSchema:()=>GQ,OPENAI_COMPATIBLE_PROVIDERS:()=>$5,NodeHubClient:()=>W1,NoOpFeatureFlagsProvider:()=>g2,NativeHubTransportAdapter:()=>Y9,ModelCatalogSettingsSchema:()=>KQ,McpSettingsUpdateSkippedError:()=>o8,McpSettingsMutatorPurityError:()=>y$,McpSettingsLockTimeoutError:()=>h$,MAX_COMMAND_OUTPUT_CHARS:()=>c1,LocalRuntimeHost:()=>T1,Llms:()=>VI,InMemoryWorkspaceManager:()=>i8,InMemoryMcpManager:()=>b2,HubUIClient:()=>gW,HubTransportError:()=>R0,HubSessionClient:()=>xW,HubServerTransport:()=>w4,HubScheduleService:()=>Z8,HubScheduleCommandService:()=>o2,HubRuntimeHost:()=>o1,HubCommandError:()=>B8,HookEventPayloadSchema:()=>tQ,HookEventNameSchema:()=>oQ,HookConfigFileName:()=>v8,HOOK_CONFIG_FILE_EVENT_MAP:()=>s6,HOOKS_CONFIG_DIRECTORY_NAME:()=>lZ,GlobalSettingsSchema:()=>c4,GcpSettingsSchema:()=>VQ,FileTeamPersistenceStore:()=>x7,FeatureFlagsService:()=>x2,FeatureFlagDefaultValue:()=>wI,FEATURE_FLAGS:()=>NI,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>d7,DefaultToolNames:()=>U0,DefaultRuntimeBuilder:()=>T4,DefaultLlmsSdk:()=>W9,DEFAULT_MODELS_CATALOG_URL:()=>tZ,DEFAULT_HUB_PORT:()=>MW,DEFAULT_HUB_PATHNAME:()=>RW,DEFAULT_HUB_HOST:()=>qW,CoreSettingsService:()=>k$,CoreSessionService:()=>z1,ContributionRegistry:()=>zI,ClineOrgIndividualInferenceSubscriptionError:()=>BI,ClineNotSubscribedError:()=>HI,ClineCore:()=>l5,ClineAccountService:()=>X5,ChatViewStateSchema:()=>UY,ChatSummarySchema:()=>u7,ChatSessionStatusSchema:()=>m7,ChatSessionConfigSchema:()=>g7,ChatMessageSchema:()=>c7,ChatMessageRoleSchema:()=>v7,CORE_TELEMETRY_EVENTS:()=>m,CORE_BUILD_VERSION:()=>DY,BrowserWebSocketHubAdapter:()=>X9,BUILT_IN_PROVIDER_IDS:()=>BJ,BUILT_IN_PROVIDER:()=>Q5,AzureSettingsSchema:()=>HQ,AwsSettingsSchema:()=>jQ,AuthSettingsSchema:()=>XQ,AgentTeamsRuntime:()=>k2,AgentTeam:()=>G4,Agent:()=>II,ALL_DEFAULT_TOOL_NAMES:()=>X$});R(M,ro);import*as VI from"@cline/llms";import{ClineNotSubscribedError as HI,ClineOrgIndividualInferenceSubscriptionError as BI,getClineOrgIndividualInferenceSubscriptionMessage as GI,getClineNotSubscribedMessage as KI,getClinePassSubscriptionUrl as FI,isClineNotSubscribedError as AI,isClineNotSubscribedMessage as fI,isClineOrgIndividualInferenceSubscriptionError as UI,isClineOrgIndividualInferenceSubscriptionMessage as DI}from"@cline/llms";import{buildClineSystemPrompt as LI,buildSdkErrorProperties as _I,ContributionRegistry as zI,captureSdkError as TI,createClineTelemetryServiceConfig as OI,createClineTelemetryServiceMetadata as qI,createContributionRegistry as MI,createTool as RI,emptyWorkspaceManifest as EI,FEATURE_FLAGS as NI,FeatureFlagDefaultValue as wI,formatDisplayUserInput as CI,noopBasicLogger as PI,normalizeSdkError as SI,normalizeUserInput as bI,parseUserCommandEnvelope as yI,registerDisposable as hI,SDK_ERROR_TELEMETRY_EVENT as kI}from"@cline/shared";import"@cline/shared/storage";var VK={};N(VK,{isClineAccountActionRequest:()=>LQ,executeClineAccountAction:()=>_Q,RpcClineAccountService:()=>Y5,ClineAccountService:()=>X5});function DN($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function jK($,Z,Q){let W=DN(Q);if(W)return W;let J=Z.trim();if(J){let X=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${X}`}return`Cline account request failed with status ${$}`}class X5{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let Z=$.apiBaseUrl.trim();if(!Z)throw Error("apiBaseUrl is required");this.apiBaseUrl=Z,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let Z=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(Z)}/balance`)}async fetchUsageTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/usages`)).items??[]}async fetchPaymentTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let Z=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)Z.searchParams.set("type",$.type);return this.request(`${Z.pathname}${Z.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}`)}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/balance`)}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(Z,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let Z=$?.trim();if(Z)return Z;let W=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(W)return W;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let Y=(await this.fetchUserOrganizations()).find((j)=>j.organizationId===$)?.memberId;if(!Y?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return Y}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let W=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,X=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let Y=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...W??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:J.signal});if(Y.status===204||Z?.expectNoContent){if(!Y.ok)throw Error(`Cline account request failed with status ${Y.status}`);return}let j=await Y.text(),V;if(j.trim())try{V=JSON.parse(j)}catch{if(!Y.ok)throw Error(jK(Y.status,j,void 0));throw Error("Cline account response was not valid JSON")}if(!Y.ok)throw Error(jK(Y.status,j,V));if(typeof V==="object"&&V!==null){let H=V;if(typeof H.success==="boolean"){if(!H.success)throw Error(H.error||"Cline account request failed");return H.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(X)}}}function LQ($){return $.action==="clineAccount"}async function _Q($,Z){switch($.operation){case"fetchMe":return Z.fetchMe();case"fetchBalance":return Z.fetchBalance($.userId);case"fetchUsageTransactions":return Z.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return Z.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return Z.fetchUserOrganizations();case"fetchOrganizationBalance":return Z.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return Z.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await Z.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return Z.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class Y5{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:Z})}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:Z,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var HK={};N(HK,{createOAuthClientCallbacks:()=>n8});function n8($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((W)=>{$.onOpenUrlError?.({url:Z,error:W})})}catch(W){$.onOpenUrlError?.({url:Z,error:W})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var SA={};N(SA,{ClineCore:()=>l5});function BK($){if($===!0)return{};if(!$)return;return $}function GK($){if($==="user")return"global";return $}class UJ{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let Z=this.getService().ingestEvent($);return{event:Z.event,duplicate:Z.duplicate,matchedSpecIds:Z.matchedSpecs.map((Q)=>Q.specId),queuedRuns:Z.queuedRuns,suppressions:Z.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function KK($){let{host:Z}=$;return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||T0.CLI,interactive:!1,config:{providerId:l8(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:zN(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Q.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Q,W){let J=await Z.runTurn({sessionId:Q,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((X)=>X.content),delivery:W.delivery});if(!J)throw Error("ClineCore automation runtime returned no result");return{result:_N(J)}},async abortSession(Q){return await Z.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}function zQ($){let Z=LN($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),W=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),J=$.context?.logger??$.logger,X=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!W&&!J&&!X)return $.context;return{...$.context??{},...Q?{client:Q}:{},...W?{user:W}:{},...J?{logger:J}:{},...X?{telemetry:X}:{},...Z?{automation:Z}:{}}}function LN($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function _N($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function zN($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var AF={};N(AF,{createCoreSettingsService:()=>y2,CoreSettingsService:()=>k$});import{existsSync as N5,readFileSync as XC}from"node:fs";import{basename as bJ,dirname as jF,extname as YC,isAbsolute as BF,join as jC,relative as GF,resolve as VF}from"node:path";var RK={};N(RK,{resolveWorkflowsConfigSearchPaths:()=>f5,resolveSkillsConfigSearchPaths:()=>F5,resolveRulesConfigSearchPaths:()=>A5,parseWorkflowConfigFromMarkdown:()=>K5,parseSkillConfigFromMarkdown:()=>B5,parseRuleConfigFromMarkdown:()=>G5,createWorkflowsConfigDefinition:()=>L5,createUserInstructionConfigService:()=>b$,createSkillsConfigDefinition:()=>U5,createRulesConfigDefinition:()=>D5,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>H5,UnifiedConfigFileWatcher:()=>E2,SKILLS_CONFIG_DIRECTORY_NAME:()=>V5,RULES_CONFIG_DIRECTORY_NAME:()=>EQ});import{createHash as TN}from"node:crypto";import{watch as ON}from"node:fs";import{readdir as qN,readFile as MN}from"node:fs/promises";import{join as RN}from"node:path";function EN($){return TN("sha1").update($).digest("hex")}function fK($){return Boolean($&&typeof $==="object"&&"code"in $)}function FK($){return fK($)&&$.code==="ENOENT"}function AK($){return fK($)&&($.code==="EACCES"||$.code==="EPERM")}class E2{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,Z){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=Z?.debounceMs??75,this.emitParseErrors=Z?.emitParseErrors??!1;for(let Q of $){if(this.definitionsByType.has(Q.type))throw Error(`Duplicate unified config definition type '${Q.type}'.`);this.definitionsByType.set(Q.type,Q),this.recordsByType.set(Q.type,new Map),this.discoveredDirectoriesByType.set(Q.type,new Set);for(let W of Q.directories){let J=this.baseTypesByDirectory.get(W);if(J)J.add(Q.type);else this.baseTypesByDirectory.set(W,new Set([Q.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let Z=this.definitionsByType.get($);if(!Z)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(Z)})}getSnapshot($){let Z=this.recordsByType.get($);return new Map([...Z?.entries()??[]].map(([Q,W])=>[Q,{...W}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([W,J])=>[W,{...J}])));return $}emit($){for(let Z of this.listeners)Z($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[Z,Q]of this.watchersByDirectory.entries()){if($.has(Z))continue;Q.close(),this.watchersByDirectory.delete(Z)}this.watchedTypesByDirectory=$;for(let Z of $.keys()){if(this.watchersByDirectory.has(Z))continue;try{let Q=ON(Z,()=>{let W=this.watchedTypesByDirectory.get(Z);if(!W)return;for(let J of W)this.pendingTypes.add(J);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(W)=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let X of J)this.emit({kind:"error",type:X,error:W,filePath:Z})})}catch(Q){if(!FK(Q)&&!AK(Q)){let W=$.get(Z);if(!W)continue;for(let J of W)this.emit({kind:"error",type:J,error:Q,filePath:Z})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let Z of $){let Q=this.definitionsByType.get(Z);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:Z,discoveredDirectories:Q}=await this.loadDefinition($),W=this.recordsByType.get($.type)??new Map;for(let[J,X]of W.entries()){if(Z.has(J))continue;this.emit({kind:"remove",type:$.type,id:J,filePath:X.filePath})}for(let[J,X]of Z.entries()){let Y=W.get(J);if(Y&&Y.filePath===X.filePath&&Y.fingerprint===X.fingerprint)continue;this.emit({kind:"upsert",record:{type:X.type,id:J,item:X.item,filePath:X.filePath}})}if(this.recordsByType.set($.type,Z),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let Z=new Map,Q=new Set;for(let W of $.directories){Q.add(W);let J=$.discoverFiles?await $.discoverFiles(W):await this.readDirectoryFileCandidates(W);for(let X of J){let{fileName:Y,filePath:j}=X;if(Q.add(X.directoryPath),$.includeFile&&!$.includeFile(Y,j))continue;try{let V=await MN(j,"utf8"),H={type:$.type,directoryPath:X.directoryPath,fileName:Y,filePath:j,content:V},B=$.parseFile(H),G=$.resolveId(B,H).trim();if(!G)continue;Z.set(G,{type:$.type,id:G,item:B,filePath:j,fingerprint:EN(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:j})}}}return{records:Z,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[Z,Q]of this.baseTypesByDirectory.entries())$.set(Z,new Set(Q));for(let[Z,Q]of this.discoveredDirectoriesByType.entries())for(let W of Q){let J=$.get(W);if(J)J.add(Z);else $.set(W,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await qN($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:RN($,Q.name)})).sort((Q,W)=>Q.fileName.localeCompare(W.fileName))}catch(Z){if(FK(Z)||AK(Z))return[];throw Z}}}import{readdir as LJ,readFile as NN,stat as DJ}from"node:fs/promises";import{basename as a1,dirname as wN,extname as OQ,join as y0,resolve as j5}from"node:path";import{AGENTS_RULES_FILE_NAME as UK,RULES_CONFIG_DIRECTORY_NAME as EQ,resolveGlobalAgentsRulesPath as CN,resolveRulesConfigSearchPaths as PN,resolveSkillsConfigSearchPaths as SN,resolveWorkflowsConfigSearchPaths as bN,SKILLS_CONFIG_DIRECTORY_NAME as V5,WORKFLOWS_CONFIG_DIRECTORY_NAME as H5}from"@cline/shared/storage";import yN from"yaml";var TQ="SKILL.md",hN="managed.json",kN=new Set([".md",".markdown",".txt"]);function _J($){return $.trim().toLowerCase()}function a8($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function qQ($){return kN.has(OQ($).toLowerCase())}function DK($){let Z=[],Q=new Set;for(let W of $){let J=j5(W);if(Q.has(J))continue;Q.add(J),Z.push(W)}return Z}function IN($){let Z=[...$?.directories??F5($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...SG({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return DK(Z)}async function zJ($){try{let Z=await LJ($,{withFileTypes:!0}),Q=[];for(let W of Z){if(!W.isDirectory())continue;let J=y0($,W.name),X=y0(J,hN);try{let Y=await NN(X,"utf8"),j=JSON.parse(Y);if(j&&typeof j==="object")Q.push(J)}catch(Y){if(a8(Y))continue;if(Y?.name==="SyntaxError")continue;throw Y}}return Q.sort((W,J)=>W.localeCompare(J))}catch(Z){if(a8(Z))return[];throw Z}}function TJ($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,W,J]=Q;try{let X=yN.parse(W);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:J,hadFrontmatter:!0}}catch(X){let Y=X instanceof Error?X.message:String(X);return{data:{},body:$,hadFrontmatter:!0,parseError:Y}}}function MQ($,Z,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${Z}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${Z}' must be a string.`);let W=$.trim();if(!W&&Q)throw Error(`Frontmatter field '${Z}' cannot be empty.`);return W||void 0}function s8($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function xN($,Z){if(a1($.filePath).toLowerCase()!==UK.toLowerCase())return a1($.filePath,OQ($.filePath));if(Z&&j5($.filePath)===j5(Z,UK))return"Workspace AGENTS.md";if(j5($.filePath)===j5(CN()))return"Global AGENTS.md";return a1($.filePath,OQ($.filePath))}function B5($,Z){let{data:Q,body:W,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in skill file.");let j=MQ(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing skill name.");return{name:j,description:MQ(Q.description,"description",!1),disabled:s8(Q.disabled,"disabled")??(s8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function G5($,Z){let{data:Q,body:W,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in rule file.");let Y=MQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing rule name.");return{name:Y,disabled:s8(Q.disabled,"disabled")??(s8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function K5($,Z){let{data:Q,body:W,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in workflow file.");let Y=MQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing workflow name.");return{name:Y,disabled:s8(Q.disabled,"disabled")??(s8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function F5($){return SN($)}function A5($){return PN($)}function f5($){return bN($)}async function LK($){if(a1($)===".cline"){let Z=await zJ($);return(await Promise.all(Z.map((W)=>LK(y0(W,V5))))).flat()}try{let Z=await LJ($,{withFileTypes:!0}),Q=[];for(let W of Z){if(W.isFile()&&W.name===TQ){Q.push({directoryPath:$,fileName:W.name,filePath:y0($,W.name)});continue}let J=y0($,W.name);if(W.isDirectory()||W.isSymbolicLink()&&await DJ(J).then((Y)=>Y.isDirectory()).catch((Y)=>{if(a8(Y))return!1;throw Y}))Q.push({directoryPath:J,fileName:TQ,filePath:y0(J,TQ)})}return Q}catch(Z){if(a8(Z))return[];throw Z}}async function RQ($){if(a1($)===".cline"){let Z=await zJ($);return(await Promise.all(Z.map((W)=>RQ(y0(W,"rules.md"))))).flat()}try{if((await DJ($)).isFile())return[{directoryPath:wN($),fileName:a1($),filePath:$}]}catch(Z){if(!a8(Z))throw Z}try{let Q=(await LJ($,{withFileTypes:!0})).filter((J)=>J.isFile()&&qQ(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:y0($,J.name)})),W=y0($,"AGENTS.md");try{if((await DJ(W)).isFile()){if(!Q.some((Y)=>Y.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:W})}}catch{}return Q}catch(Z){if(a8(Z))return[];throw Z}}async function gN($){if(a1($)===".cline"){let Z=await zJ($);return(await Promise.all(Z.map((W)=>RQ(y0(W,H5))))).flat()}return RQ($)}function U5($){let Z=IN($),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?DK([...Z,Q]):Z,discoverFiles:LK,includeFile:(W)=>W===TQ,parseFile:(W)=>B5(W.content,a1(W.directoryPath)),resolveId:(W)=>_J(W.name)}}function D5($){let Z=$?.directories??A5($?.workspacePath),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:RQ,includeFile:(W,J)=>W===".clinerules"||qQ(W)||qQ(J),parseFile:(W)=>G5(W.content,xN(W,$?.workspacePath)),resolveId:(W)=>_J(W.name)}}function L5($){let Z=$?.directories??f5($?.workspacePath),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:gN,includeFile:(W)=>qQ(W),parseFile:(W)=>K5(W.content,a1(W.filePath,OQ(W.filePath))),resolveId:(W)=>_J(W.name)}}function _K($){let Z=[U5($?.skills),D5($?.rules),L5($?.workflows)];return new E2(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as zK}from"@cline/shared";function mN($,Z){if($.description?.trim())return zK($.description,".");if(Z==="workflow")return;return zK($.instructions,".")}function vN($){return $.disabled!==!0}function TK($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,W])=>({id:Q,record:W})).filter(({record:Q})=>vN(Q.item)).map(({id:Q,record:W})=>({id:Q,name:W.item.name,instructions:W.item.instructions,description:mN(W.item,Z),kind:Z})).sort((Q,W)=>Q.name.localeCompare(W.name))}function _5($){let Z=new Map;for(let Q of[...TK($,"workflow"),...TK($,"skill")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,W)=>Q.name.localeCompare(W.name))}function OK($,Z){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let W=Q[1];if(!W)return $;let J=W.length+1,X=$.slice(J),Y=_5(Z).find((j)=>j.name===W);return Y?`${Y.instructions}${X}`:$}function NQ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function cN($){if(!$||$.length===0)return;let Z=$.map(NQ).filter((Q)=>Q.length>0);return Z.length>0?new Set(Z):void 0}function uN($,Z,Q){if(!Q)return!0;let W=NQ($),J=NQ(Z),X=W.includes(":")?W.split(":").at(-1)??W:W,Y=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(W)||Q.has(J)||Q.has(X)||Q.has(Y)}function z5($,Z){let Q=cN(Z);return[...$.getSnapshot("skill").entries()].map(([J,X])=>{let Y=X.item;return{id:J,name:Y.name.trim(),description:Y.description?.trim(),disabled:Y.disabled===!0,skill:Y}}).filter((J)=>uN(J.id,J.name,Q))}function dN($,Z){return z5($,Z).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,W)=>Q.localeCompare(W))}function lN($,Z,Q){let W=NQ(Z);if(!W)return{error:"Missing skill name."};let J=z5($,Q),X=J.find((B)=>B.id===W);if(X){let{skill:B}=X;if(B.disabled===!0)return{error:`Skill "${B.name}" is configured but disabled.`};return{id:X.id,skill:B}}let Y=W.includes(":")?W.split(":").at(-1)??W:W,j=J.filter(({id:B})=>{if(B===Y)return!0;return B.endsWith(`:${Y}`)}),V=j.filter(({skill:B})=>B.disabled!==!0);if(V.length===1){let{id:B,skill:G}=V[0];return{id:B,skill:G}}if(V.length>1)return{error:`Skill "${Z}" is ambiguous. Use one of: ${V.map(({id:B})=>B).join(", ")}`};if(j.length===1){let{skill:B}=j[0];return{error:`Skill "${B.name}" is configured but disabled.`}}if(j.length>1)return{error:`Skill "${Z}" is ambiguous, and all matches are disabled: ${j.map(({id:B})=>B).join(", ")}`};let H=dN($,Q);return{error:H.length>0?`Skill "${Z}" not found. Available skills: ${H.join(", ")}`:"No skills are currently available."}}function OJ($,Z=Promise.resolve(),Q){let W=new Set,J=async(X,Y)=>{await Z;let j=lN($,X,Q);if("error"in j)return j.error;let{id:V,skill:H}=j;if(W.has(V))return`Skill "${H.name}" is already running.`;W.add(V);try{let B=Y?.trim(),G=B?`
479
- <command-args>${B}</command-args>`:"",K=H.description?.trim()?`Description: ${H.description.trim()}
480
-
481
- `:"";return`<command-name>${H.name}</command-name>${G}
470
+ ${W}`;return Q||W}function ZM($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function QM($,Z){return $.filter((Q)=>ZM(Q.name,Z))}function WM($,Z){return y1(QM($,Z))}function JM($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return{};return{beforeRun:async(Q)=>{for(let W of Z){let J=await W.beforeRun?.(Q);if(J?.stop)return J}return},afterRun:async(Q)=>{for(let W of Z)await W.afterRun?.(Q)},beforeModel:async(Q)=>{let W=Q.request,J;for(let X of Z){let Y=await X.beforeModel?.({...Q,request:W});if(!Y)continue;if(Y.stop)return Y;J={...J,...Y,options:zH(J?.options,Y.options)},W={...W,...Y.messages?{messages:Y.messages}:{},...Y.tools?{tools:Y.tools}:{},...Y.options?{options:zH(W.options,Y.options)}:{}}}return J},afterModel:async(Q)=>{for(let W of Z){let J=await W.afterModel?.(Q);if(J?.stop)return J}return},beforeTool:async(Q)=>{let W=Q.input,J;for(let X of Z){let Y=await X.beforeTool?.({...Q,input:W});if(!Y)continue;if(Y.stop||Y.skip)return Y;if(J={...J,...Y},Object.hasOwn(Y,"input"))W=Y.input}return J},afterTool:async(Q)=>{let W=Q.result,J;for(let X of Z){let Y=await X.afterTool?.({...Q,result:W});if(!Y)continue;if(Y.stop)return Y;if(J={...J,...Y},Y.result)W=Y.result}return J},onEvent:async(Q)=>{for(let W of Z)await W.onEvent?.(Q)}}}class z${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 E3;shutdownCalled=!1;currentRunToolCalls=[];currentRunUsage={inputTokens:0,outputTokens:0};toolStartedAt=new Map;toolInputs=new Map;currentTurnSuccessfulTools=0;currentTurnFailedTools=0;currentTurnFailureDetails=[];activeTrackerWork=Promise.resolve();trackerAbortInFlight=!1;constructor($,Z={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=Z.logger??$.logger,this.telemetry=Z.telemetry??$.telemetry,this.createAgentRuntimeImpl=Z.createAgentRuntimeImpl??sq,this.conversation=new O3($.initialMessages),this.messageBuilder=new _3(fH()),this.contributionRegistry=oq({extensions:$.extensions?[...$.extensions]:[],setupContext:{session:$.extensionContext?.session,client:$.extensionContext?.client,user:$.extensionContext?.user,workspaceInfo:$.extensionContext?.workspace,automation:$.extensionContext?.automation,logger:$.extensionContext?.logger??this.logger,telemetry:$.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let Q=$.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new R3({maxConsecutiveMistakes:Q,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(X)=>this.emitLegacyEvent(X),log:(X,Y,j)=>XM(this.logger,X,Y,j),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(X,Y)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:X}]})}});let W=$.execution?.loopDetection;this.loopDetectionDisabled=W===!1;let J=W===!1||W===void 0?void 0:W;this.loopTracker=new M3(J)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools($){if($.length===0)return;let Z=new Set(this.config.tools.map((W)=>W.name)),Q=[...this.config.tools];for(let W of $)if(!Z.has(W.name))Q.push(W),Z.add(W.name);this.config={...this.config,tools:Q}}updateConnection($){let Z={...this.config};if($.providerId!==void 0)Z.providerId=$.providerId;if($.modelId!==void 0)Z.modelId=$.modelId;if($.apiKey!==void 0)Z.apiKey=$.apiKey;if($.baseUrl!==void 0)Z.baseUrl=$.baseUrl;if($.headers!==void 0)Z.headers=$.headers;if($.providerConfig!==void 0)Z.providerConfig=$.providerConfig;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinking!==void 0)Z.thinking=$.thinking;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;this.config=Z}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.messageBuilder.resetConversationState(),this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let Z=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=Z,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(Z)}async shutdown($,Z){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run($,Z,Q){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!1})}continue($,Z,Q){return this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let Z of this.contributionRegistry.getRegisteredRules()){let Q=await eq(Z);if(Q)$.push(Q)}return $M(this.config.systemPrompt,$)}executeRun($){let Z;return Z=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===Z)this.activeRunPromise=null}),this.activeRunPromise=Z,Z}async executeRunInternal($){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let Z=new Date,Q=$.userMessage;if(Q!==void 0){let U=await jM(Q,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:U})}let W=await this.composeSystemPrompt(),J=YH(this.config,this.logger,this.telemetry),X=new Map;for(let U of this.contributionRegistry.getRegisteredTools())X.set(U.name,U);let Y=WM([...X.values()],this.config.toolPolicies),j=new Map;for(let U of Y)j.set(U.name,U);for(let U of this.config.tools)j.set(U.name,U);let V=this.conversation.getConversationId(),B=TH(this.config),H=Array.from(j.values()),G=RZ(this.conversation.getMessages()),K=DH({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:J,logger:this.logger,telemetry:this.telemetry,tools:H,toolContextMetadata:{modelSupportsImages:B?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[MB]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(B,H),initialMessages:G,systemPrompt:W}),F=this.createAgentRuntimeImpl(K);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let A=F.subscribe((U)=>{this.handleRuntimeEvent(U)}),L,f;try{if($.isContinue)L=await F.continue(void 0);else L=await F.run("")}catch(U){f=U instanceof Error?U:Error(String(U))}finally{A();try{await this.activeTrackerWork}catch(U){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:U})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(L&&L.messages.length>0){let U=R8(L.messages);this.conversation.replaceMessages(U)}let D=new Date;try{return this.buildLegacyResult({runResult:L,thrownError:f,startedAt:Z,endedAt:D})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize({tolerateSetupErrors:this.config.hookErrorMode!=="throw"})}catch($){if(this.config.hookErrorMode==="throw")throw $;this.emitLegacyEvent({type:"error",error:$ instanceof Error?$:Error(String($)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let $=JM([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((Z)=>Z.hooks)]);return{...$,beforeModel:async(Z)=>{let Q=await $.beforeModel?.(Z);if(Q?.stop)return Q;let W=Q?.messages??Z.request.messages,J=await this.prepareMessagesForModelRequest(W);return{...Q,messages:J}}}}createRuntimePrepareTurn($,Z){let Q=this.config.prepareTurn;if(!Q)return;return async(W)=>{let J=R8(W.messages),X=await this.prepareProviderMessagesForApi(J),Y=await Q({agentId:W.agentId,conversationId:W.conversationId??this.conversation.getConversationId(),parentAgentId:W.parentAgentId??null,iteration:W.iteration,messages:J,apiMessages:X,abortSignal:W.signal??new AbortController().signal,systemPrompt:W.systemPrompt??"",tools:Z,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:W.emitStatusNotice});if(!Y)return;return{...Y.messages?{messages:RZ(Y.messages)}:{},...Y.systemPrompt!==void 0?{systemPrompt:Y.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let Z=await this.prepareProviderMessagesForApi(EZ($));return RZ(Z)}async prepareProviderMessagesForApi($){let Z=$,Q=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let W of Q)Z=await W.build(Z);return this.messageBuilder.buildForApi(Z)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=new Date,W=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let J=$.message.content.find((V)=>V.type==="tool-result"),X=J?.type==="tool-result"&&J.isError===!0,Y=X?tq(J?.type==="tool-result"?J.output:void 0):void 0,j={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:W,output:J?.type==="tool-result"?J.output:void 0,error:Y,durationMs:Z===void 0?0:Q.getTime()-Z.getTime(),startedAt:Z??Q,endedAt:Q};if(this.currentRunToolCalls.push(j),X){if(this.currentTurnFailedTools+=1,Y)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${Y}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let Z=this.currentTurnFailedTools,Q=this.currentTurnSuccessfulTools;if(Z>0&&Q===0){let W=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${Z} tool call(s) failed${W?`: ${W}`:""}`})}else if(Q>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let Z of this.eventAdapter.translate($))this.emitLegacyEvent(Z)}syncConversationFromRuntimeMessage($,Z){if($.length>0){this.conversation.replaceMessages(R8($));return}if(Z.length===0)return;let Q=new Set(this.conversation.getMessages().map((J)=>J.id).filter((J)=>typeof J==="string")),W=R8(Z).filter((J)=>!J.id||!Q.has(J.id));if(W.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...W])}emitLegacyEvent($){for(let Z of this.listeners)try{Z($)}catch(Q){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Q})}}inspectLoopForToolCall($,Z,Q){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let W=this.loopTracker.inspect({name:$,input:Z});if(W.kind==="ok")return;if(W.kind==="soft"){if(W.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:W.message}]});return}this.enqueueMistakeRecord({iteration:Q,reason:"tool_execution_failed",forceAtLimit:!0,details:W.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let Z=await this.mistakeTracker.record($);if(Z.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:Z.message}]}),this.activeRuntime?.abort(Z.reason??Z.message)})}buildLegacyResult($){let{runResult:Z,thrownError:Q,startedAt:W,endedAt:J}=$,X=J.getTime()-W.getTime(),Y=Q?"error":YM(Z),j=(Z?.status==="failed"?Z.error?.message:void 0)||Z?.outputText||"",V=Z?{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens>0?Z.usage.cacheReadTokens:void 0,cacheWriteTokens:Z.usage.cacheWriteTokens>0?Z.usage.cacheWriteTokens:void 0,totalCost:Z.usage.totalCost}:this.currentRunUsage,B=Z?R8(Z.messages):this.conversation.getMessages(),H=TH(this.config);if(Q)throw Q;return{text:j,usage:V,messages:B,toolCalls:this.currentRunToolCalls,iterations:Z?.iterations??0,finishReason:Y,model:{id:this.config.modelId,provider:this.config.providerId,info:H},startedAt:W,endedAt:J,durationMs:X}}}function XM($,Z,Q,W){if(!$)return;if(Z==="debug"){$.debug(Q,W);return}if(Z==="error"&&$.error){$.error(Q,W);return}let J=Z==="warn"?"warn":Z==="error"?"error":"info";$.log(Q,{...W,severity:J})}function YM($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function jM($,Z,Q,W){let{buildInitialUserContent:J}=await Promise.resolve().then(() => _H);return J($,Z,Q,W)}function TH($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let Z=U3($);if(Z?.[$.modelId])return Z[$.modelId];return}import{buildClineSystemPrompt as OH}from"@cline/shared";function qH($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return OH({ide:Z.clineIdeName?.trim()||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,rules:`# Team Teammate Role
471
+ ${Q}`,platform:Z.clinePlatform,metadata:Z.workspaceMetadata})}function MH($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return OH({ide:Z.clineIdeName||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,overridePrompt:Q,metadata:Z.workspaceMetadata,platform:Z.clinePlatform})}function T$($){let Z={...$};return{getRuntimeConfig:()=>Z,getConnectionConfig:()=>({providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxTokensPerTurn:Z.maxTokensPerTurn}),updateConnectionDefaults:(Q)=>{Z={...Z,...Q}}}}function K2($){let Z=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?qH($.prompt,Z):MH($.prompt,Z);return{...$.configProvider.getConnectionConfig(),systemPrompt:Q,tools:$.tools,maxIterations:$.maxIterations??Z.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:Z.hooks,extensions:Z.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:Z.logger,role:$.role}}function O$($){let Z=K2($),Q=new z$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);return Q}var HM=N3.object({systemPrompt:N3.string().describe("System prompt defining the sub-agent's behavior"),task:N3.string().describe("Task for the sub-agent to complete")});function q$($){return VM({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:BM(HM),execute:async(Z,Q)=>{let W=$.createSubAgentTools?await $.createSubAgentTools(Z,Q):$.subAgentTools??[],J=O$({kind:"subagent",prompt:Z.systemPrompt,configProvider:$.configProvider,tools:W,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),X=J.getAgentId(),Y=J.getConversationId(),j=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z})}catch{}try{let V=await J.run(Z.task),B={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,result:B,agentResult:V})}catch{}return B}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as F0,TEAM_AWAIT_TIMEOUT_MS as GM,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as KM,TEAM_RUN_TEXT_PREVIEW_LIMIT as FM,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as AM,TeamAttachOutcomeFragmentInputSchema as RH,TeamAwaitRunsInputSchema as EH,TeamBroadcastInputSchema as NH,TeamBroadcastToolResultSchema as fM,TeamCancelRunInputSchema as CH,TeamCancelRunToolResultSchema as UM,TeamCleanupInputSchema as wH,TeamCleanupToolResultSchema as DM,TeamCreateOutcomeInputSchema as PH,TeamCreateOutcomeToolResultSchema as LM,TeamFinalizeOutcomeInputSchema as SH,TeamFinalizeOutcomeToolResultSchema as _M,TeamListOutcomesInputSchema as bH,TeamListRunsInputSchema as yH,TeamMailboxMessageToolResultSchema as zM,TeamMissionLogInputSchema as hH,TeamMissionLogToolResultSchema as TM,TeamOutcomeFragmentToolResultSchema as kH,TeamOutcomeToolResultSchema as OM,TeamReadMailboxInputSchema as IH,TeamReviewOutcomeFragmentInputSchema as xH,TeamRunTaskInputSchema as gH,TeamRunTaskToolResultSchema as C3,TeamRunToolSummarySchema as w3,TeamSendMessageInputSchema as mH,TeamSendMessageToolResultSchema as qM,TeamShutdownTeammateInputSchema as vH,TeamSimpleAgentStatusToolResultSchema as cH,TeamSpawnTeammateInputSchema as uH,TeamStatusInputSchema as dH,TeamStatusToolResultSchema as MM,TeamTaskInputSchema as lH,TeamTaskToolResultSchema as h6,validateWithZod as k,zodToJsonSchema as A0}from"@cline/shared";function pH($,Z){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=Z)return Q;return`${Q.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function F2($,Z){if($===void 0)throw Error(`Missing required field: ${Z}`);return $}function RM($){let Z=$.result;if(!Z)return;return{textPreview:pH(Z.text,FM),iterations:Z.iterations,finishReason:Z.finishReason,durationMs:Z.durationMs,usage:{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens,cacheWriteTokens:Z.usage.cacheWriteTokens,totalCost:Z.usage.totalCost}}}function PZ($){return $?.toISOString()}function P3($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:pH($.message,KM),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:PZ($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:PZ($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:PZ($.heartbeatAt),lastProgressAt:PZ($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:RM($)}}function EM($){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 N8=["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 rH($){let Z=[];if($.createBaseTools)Z.push(...$.createBaseTools());Z.push(...A2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:K2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:Z,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function C8($){let Z=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,W=A2({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),J=[];for(let X of $.restoredTeammates??[]){if($.runtime.isTeammateActive(X.agentId))continue;rH({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:X}),J.push(X.agentId)}return{tools:W,restoredFromPersistence:Q,restoredTeammates:J}}function A2($){let Z=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,W=$.includeManagementTools??!0,J=[];if(Q)J.push(F0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:A0(uH),execute:async(Y)=>{let j=k(uH,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!Z)throw Error("Spawning teammates is disabled in this context.");let V={agentId:j.agentId,rolePrompt:j.rolePrompt};if(rH({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!W)$.onLeadToolsUnlocked?.(A2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return k(cH,{agentId:j.agentId,status:"spawned"})}}));if(!W)return J;J.push(F0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:A0(vH),execute:async(Y)=>{let j=k(vH,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(j.agentId,j.reason),k(cH,{agentId:j.agentId,status:"stopped"})}})),J.push(F0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:A0(dH),execute:async(Y)=>{return k(dH,Y),k(MM,$.runtime.getSnapshot())}})),J.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:A0(lH),execute:async(Y)=>{let j=k(lH,Y);switch(j.action){case"create":{let V=new Set(AM.create??[]),B=Object.entries(Y).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),H=$.runtime.createTask({title:F2(j.title,"title"),description:F2(j.description,"description"),dependsOn:j.dependsOn,assignee:j.assignee,createdBy:$.requesterId});return k(h6,{action:"create",taskId:H.id,status:H.status,...B.length>0?{ignoredFields:B,note:`Ignored fields for action=create: ${B.join(", ")}`}:{}})}case"list":return k(h6,{action:"list",tasks:$.runtime.listTaskItems({status:j.status,assignee:j.assignee})});case"claim":{let V=$.runtime.claimTask(F2(j.taskId,"taskId"),$.requesterId);return k(h6,{action:"claim",taskId:V.id,status:V.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_task with action=complete when done."})}case"complete":{let V=$.runtime.completeTask(F2(j.taskId,"taskId"),$.requesterId,F2(j.summary,"summary"));return k(h6,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(F2(j.taskId,"taskId"),$.requesterId,F2(j.reason,"reason"));return k(h6,{action:"block",taskId:V.id,status:V.status})}}}}));let X=new Map;return J.push(F0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:A0(gH),execute:async(Y)=>{let j=k(gH,Y);if(j.runMode==="async"){let H=$.runtime.startTeammateRun(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0});return k(C3,{agentId:j.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${j.agentId} and queued as ${H.id}.`,runId:H.id})}let V=X.get(j.agentId);if(V){let H=await V;return k(C3,{...H,status:"joined",deduped:!0,message:`Task for ${j.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let B=$.runtime.routeToTeammate(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0}).then((H)=>k(C3,{agentId:j.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${j.agentId} and completed in sync mode.`,text:H.text,iterations:H.iterations})).finally(()=>{X.delete(j.agentId)});return X.set(j.agentId,B),await B}})),J.push(F0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:A0(CH),execute:async(Y)=>{let j=k(CH,Y),V=$.runtime.cancelRun(j.runId,j.reason);return k(UM,{runId:V.id,status:V.status})}})),J.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:A0(yH),execute:async(Y)=>k(w3.array(),$.runtime.listRuns(k(yH,Y)).map(P3))})),J.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:A0(EH),timeoutMs:GM,execute:async(Y)=>{let j=k(EH,Y);if(j.runId){let H=await $.runtime.awaitRun(j.runId);return EM(H),k(w3,P3(H))}let V=await $.runtime.awaitAllRuns(),B=V.filter((H)=>["failed","cancelled","interrupted"].includes(H.status));if(B.length>0){let H=B.map((G)=>`${G.id}:${G.status}${G.error?`(${G.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${H}`)}return k(w3.array(),V.map(P3))}})),J.push(F0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:A0(mH),execute:async(Y)=>{let j=k(mH,Y),V=$.runtime.sendMessage($.requesterId,j.toAgentId,j.subject,j.body,j.taskId??void 0);return k(qM,{id:V.id,toAgentId:V.toAgentId})}})),J.push(F0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:A0(NH),execute:async(Y)=>{let j=k(NH,Y),V=$.runtime.broadcast($.requesterId,j.subject,j.body,{taskId:j.taskId??void 0});return k(fM,{delivered:V.length})}})),J.push(F0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:A0(IH),execute:async(Y)=>{let j=k(IH,Y);return k(zM.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:j.unreadOnly,markRead:!0}))}})),J.push(F0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:A0(hH),execute:async(Y)=>{let j=k(hH,Y),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:j.taskId||void 0,kind:j.kind,summary:j.summary,evidence:j.evidence?.length?j.evidence:void 0,nextAction:j.nextAction||void 0});return k(TM,{id:V.id})}})),J.push(F0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:A0(wH),execute:async(Y)=>{if(k(wH,Y),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),k(DM,{status:"cleaned"})}})),J.push(F0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:A0(PH),execute:async(Y)=>{let j=k(PH,Y),V=$.runtime.createOutcome({title:j.title,requiredSections:j.requiredSections,createdBy:$.requesterId});return k(LM,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),J.push(F0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:A0(RH),execute:async(Y)=>{let j=k(RH,Y),V=$.runtime.attachOutcomeFragment({outcomeId:j.outcomeId,section:j.section,sourceAgentId:$.requesterId,sourceRunId:j.sourceRunId||void 0,content:j.content});return k(kH,{fragmentId:V.id,status:V.status})}})),J.push(F0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:A0(xH),execute:async(Y)=>{let j=k(xH,Y),V=$.runtime.reviewOutcomeFragment({fragmentId:j.fragmentId,reviewedBy:$.requesterId,approved:j.approved});return k(kH,{fragmentId:V.id,status:V.status})}})),J.push(F0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:A0(SH),execute:async(Y)=>{let j=k(SH,Y),V=$.runtime.finalizeOutcome(j.outcomeId);return k(_M,{outcomeId:V.id,status:V.status})}})),J.push(F0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:A0(bH),execute:async(Y)=>{return k(bH,Y),k(OM.array(),$.runtime.listOutcomes())}})),J}function SZ($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}function iH($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var NM=[{id:"read_files",description:"Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. Long files are windowed; page with start_line/end_line.",headlessToolNames:["read_files"]},{id:"search_codebase",description:"Perform regex pattern searches across the codebase for code patterns, definitions, imports, and other text matches.",headlessToolNames:["search_codebase"]},{id:"run_commands",description:"Run shell commands from the root of the workspace for listing files, checking git status, builds, tests, and similar tasks.",headlessToolNames:["run_commands"]},{id:"editor",description:"Make controlled filesystem edits on text files with create, replace, and insert operations.",headlessToolNames:["editor"]},{id:"fetch_web_content",description:"Fetch URL content and analyze it with a prompt describing what to extract.",headlessToolNames:["fetch_web_content"]},{id:"skills",description:"Execute a configured skill within the main conversation when a matching skill exists for the task.",headlessToolNames:["skills"]},{id:"ask_question",description:"Ask the user a single clarifying question with 2-5 selectable options.",headlessToolNames:["ask_question"]},{id:"spawn_agent",description:q$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...N8]}],CM={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function wM($){return $==="plan"||$==="yolo"?$:"act"}function aH($){let Z=wM($.mode),Q=u0[l1({mode:Z})],W=M8($.providerId??"",$.modelId??"",Z,q8);return{mode:Z,flags:{...Q,...W,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function nH($,Z){if(Z.disabledToolIds?.has($))return!1;let{flags:Q}=aH(Z);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let W=CM[$];return W?Q[W]===!0:!1}function PM($,Z){if($.id==="editor"){let{flags:Q}=aH(Z),W=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:nH($.id,Z),headlessToolNames:[W?"apply_patch":"editor"]}}return{...$,defaultEnabled:nH($.id,Z)}}function f2($={}){return NM.map((Z)=>PM(Z,$))}function bZ($={}){return f2($).filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id)}function yZ($){if(!$.enabled)return new Set;let Z=f2($.availabilityContext),Q=new Set(Z.map((W)=>W.id));if(!$.allowlist||$.allowlist.length===0)return new Set(Z.filter((W)=>W.defaultEnabled).map((W)=>W.id));for(let W of $.allowlist)if(!Q.has(W))throw Error(`Unknown tool "${W}". Available tools: ${Z.map((J)=>J.id).join(", ")}`);return new Set($.allowlist)}function k6($,Z={}){return f2(Z).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function hZ($,Z={}){return k6($,Z)}function U2($={}){let{executorOptions:Z={},executors:Q,...W}=$,J={...O8(Z),...Q??{}};return D$({...W,executors:J})}import{mkdirSync as IM,writeFileSync as xM}from"node:fs";import{dirname as gM}from"node:path";import{normalizeUserInput as mM,stripModeNotices as vM}from"@cline/shared";import{nanoid as cM}from"nanoid";var oH={};N(oH,{sanitizeSessionToken:()=>D2,parseTeamTaskSubSessionId:()=>P8,parseSubSessionId:()=>x6,makeTeamTaskSubSessionId:()=>I6,makeSubSessionId:()=>w8,deriveSubsessionStatus:()=>g6});import{nanoid as yM}from"nanoid";function D2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function w8($,Z){let Q=D2($),W=D2(Z),J=`${Q}__${W}`;return J.length>180?J.slice(0,180):J}function I6($,Z){let Q=D2($),W=D2(Z);return`${Q}__teamtask__${W}__${yM(6)}`}function P8($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+12),X=J.lastIndexOf("__");if(X<=0)return null;let Y=J.slice(0,X),j=J.slice(X+2);if(!W||!Y||!j)return null;return{rootSessionId:W,agentId:Y,teamTaskId:j}}function x6($){if(P8($))return null;let Z="__",Q=$.indexOf(Z);if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+Z.length);if(!W||!J)return null;return{rootSessionId:W,agentId:J}}function g6($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let Z=String($.reason??"").toLowerCase();if(Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt"))return"cancelled";if(Z.includes("fail")||Z.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as $0}from"zod";var $G={};N($G,{isTerminalSessionStatus:()=>eH,isNonTerminalSessionStatus:()=>B0,SessionSource:()=>T0,SESSION_STATUSES:()=>m6,NON_TERMINAL_SESSION_STATUSES:()=>tH});import{SESSION_STATUS_VALUES as hM}from"@cline/shared";var m6=hM,tH=["idle","running","pending"];function eH($){return!tH.includes($)}function B0($){return!eH($)}var T0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var kM=$0.enum(m6),b0=$0.object({version:$0.literal(1),session_id:$0.string().min(1),source:$0.string().min(1),pid:$0.number().int(),started_at:$0.string().min(1),ended_at:$0.string().min(1).optional(),exit_code:$0.number().int().nullable().optional(),status:kM,interactive:$0.boolean(),provider:$0.string().min(1),model:$0.string().min(1),cwd:$0.string().min(1),workspace_root:$0.string().min(1),team_name:$0.string().min(1).optional(),enable_tools:$0.boolean(),enable_spawn:$0.boolean(),enable_teams:$0.boolean(),prompt:$0.string().optional(),metadata:$0.record($0.string(),$0.unknown()).optional(),messages_path:$0.string().min(1).optional()});function ZG($){if(!$)return!1;return Object.values($).some((Z)=>typeof Z==="function")}function b3($,Z){let Q=[...$??[],...Z??[]];if(Q.length===0)return;let W=[],J=new Set;for(let X of Q){if(J.has(X.name))continue;J.add(X.name),W.push(X)}return W}function QG($){return JSON.stringify($,(Z,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function p1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function S3($,Z){let Q={...$};Q.id=p1(Q.id)??cM();let W=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,J={id:p1(W?.id)??p1(Q.modelId)??p1(Z?.id),provider:p1(W?.provider)??p1(Q.providerId)??p1(Z?.provider),family:p1(W?.family)??p1(Z?.family)};if(delete Q.providerId,delete Q.modelId,J.id&&J.provider)Q.modelInfo={id:J.id,provider:J.provider,...J.family?{family:J.family}:{}};else delete Q.modelInfo;return Q}function kZ($){return $.map((Z)=>S3(Z))}function IZ($,Z,Q=[]){let W=$.map((V,B)=>{let H=Q[B],K=H?.role===V.role&&JSON.stringify(H.content)===JSON.stringify(V.content)?{...H,...V}:{...V};return S3(K)}),J=Q.length,X=[];for(let V=J;V<W.length;V+=1)if(W[V]?.role==="assistant")X.push(V);if(X.length===0){let V=[...W].reverse().findIndex((B)=>B.role==="assistant");if(V===-1)return W;X.push(W.length-1-V)}let Y=X[X.length-1],j=X.some((V)=>W[V]?.metrics);for(let V of X){let B=W[V],H=B.metrics;if(!H&&V===Y&&!j){let G=Z.usage;H={inputTokens:G.inputTokens,outputTokens:G.outputTokens,cacheReadTokens:G.cacheReadTokens??0,cacheWriteTokens:G.cacheWriteTokens??0,cost:G.totalCost}}W[V]={...S3(B,{id:Z.model.id,provider:Z.model.provider,family:Z.model.info?.family}),...H?{metrics:H}:{},ts:B.ts??Z.endedAt.getTime()}}return W}function v6($){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 uM=120;function L2($){let Z=$?.trim();return Z?Z.slice(0,uM):void 0}function y3($){let Z=vM(mM($??"")).trim();if(!Z)return;return L2(Z.split(`
472
+ `)[0]?.trim())}function M$($){if(!$)return;let Z={...$},Q=L2(typeof Z.title==="string"?Z.title:void 0);if(Q)Z.title=Q;else delete Z.title;return Object.keys(Z).length>0?Z:void 0}function c6($){let Z=M$($.metadata)??{},Q=$.title!==void 0?L2($.title):y3($.prompt);if(Q)Z.title=Q;return Object.keys(Z).length>0?Z:void 0}function h3($){let Z=P8($);if(Z)return{agent:"teammate",sessionId:Z.rootSessionId,taskType:"team"};let Q=x6($);if(Q)return{agent:"subagent",sessionId:Q.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function k3($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:kZ($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function WG($,Z,Q){IM(gM($),{recursive:!0}),xM($,`${JSON.stringify(k3({updatedAt:Z,context:Q,messages:[]}),null,2)}
473
+ `,"utf8")}function JG($,Z){return b0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:Z?.endedAt??$.endedAt??void 0,exit_code:Z?.exitCode??$.exitCode??void 0,status:Z?.status??$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName??void 0,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt??void 0,metadata:Z?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function XG($,Z,Q){let W=0;while(!0){let J=await $();if(J===void 0)return{updated:!1};let X=await Z(J);if(typeof X==="object"&&X!==null&&"updated"in X&&X.updated===!1){if(W+=1,W>=Q)return X;continue}return X}}_0();var YG={};N(YG,{summarizeUsageFromMessages:()=>b8,sumUsageTotals:()=>u6,getCurrentContextSize:()=>I3,createInitialAccumulatedUsage:()=>D0,accumulateUsageTotals:()=>f0});function D0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function f0($,Z){return{inputTokens:$.inputTokens+Math.max(0,Z.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,Z.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,Z.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,Z.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,Z.totalCost??0)}}function u6($){let Z=D0();for(let Q of $)Z=f0(Z,Q);return Z}function S8($){return typeof $==="number"&&Number.isFinite($)?$:0}function b8($){let Z=D0();for(let Q of $){let W=Q.metrics;if(!W)continue;Z=f0(Z,{inputTokens:S8(W.inputTokens),outputTokens:S8(W.outputTokens),cacheReadTokens:S8(W.cacheReadTokens),cacheWriteTokens:S8(W.cacheWriteTokens),totalCost:S8(W.cost)})}return Z}function I3($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let W=S8(Q.metrics?.inputTokens);return W>0?W:void 0}return}function dM($){if(!$||typeof $!=="object")return;let Z=$,Q=Z.skill??Z.skill_name??Z.skillName;if(typeof Q!=="string")return;let W=Q.trim();return W.length>0?W:void 0}function x3($){if(!$||typeof $!=="object")return{};let Z=$;return{agentId:typeof Z.agentId==="string"?Z.agentId:void 0,conversationId:typeof Z.conversationId==="string"?Z.conversationId:void 0,parentAgentId:typeof Z.parentAgentId==="string"?Z.parentAgentId:void 0}}function r1($){let Z=$.agentId?.trim();if(!Z)return;let Q=$.parentAgentId?.trim()||void 0,W=$.teamRole,J="root";if(W==="teammate")J="team_teammate";else if(W==="lead")J="team_lead";else if(Q)J="subagent";return{agentId:Z,agentKind:J,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Q,createdByAgentId:$.createdByAgentId?.trim()||Q||void 0,isSubagent:Boolean(Q),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:W,teamAgentId:$.teamAgentId?.trim()||void 0}}function lM($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function pM($){let Z=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of Z){let W=Q?.trim();if(W)return W}return $.isPrimaryAgentEvent?"root":"unknown"}function g3($,Z,Q){let{sessionId:W,config:J,liveSession:X,emit:Y}=$,j=J.telemetry,V=X?.runtime.teamRuntime,B=Q?.isPrimaryAgentEvent??!0,H=x3(Z),G=r1({agentId:Q?.agentId??H.agentId,conversationId:Q?.conversationId??H.conversationId,parentAgentId:Q?.parentAgentId??H.parentAgentId,createdByAgentId:Q?.createdByAgentId,teamId:Q?.teamId??V?.getTeamId(),teamName:Q?.teamName??V?.getTeamName(),teamRole:Q?.teamRole,teamAgentId:Q?.teamAgentId});if(Z.type==="content_start"&&Z.contentType==="tool"&&Z.toolName==="skills"){let K=dM(Z.input);if(K)N9(j,{ulid:W,skillName:K,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:J.providerId,modelId:J.modelId,...G})}if(Z.type==="content_end"&&Z.contentType==="tool"){let K=Z.toolName??"unknown",F=!Z.error;if(W8(j,{ulid:W,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))C9(j,{ulid:W,modelId:J.modelId,provider:J.providerId,errorType:Z.error,...G})}if(Z.type==="notice"&&Z.reason==="api_error")m4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.message,...G});if(Z.type==="error")m4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.error?.message??"unknown error",...G});if(Z.type==="usage"&&X?.turnUsageBaseline){let K=lM(Z);if(B){X.turnPrimaryUsage=f0(X.turnPrimaryUsage??D0(),K);let A=f0(X.turnUsageBaseline,X.turnPrimaryUsage);$.usageBySession.set(W,A),Q8(j,{ulid:W,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),R9(j,{ulid:W,tokensIn:Z.inputTokens,tokensOut:Z.outputTokens,cacheWriteTokens:Z.cacheWriteTokens,cacheReadTokens:Z.cacheReadTokens,totalCost:Z.cost,model:J.modelId,...G})}else{let A=pM({isPrimaryAgentEvent:B,overrides:Q,eventMetadata:H}),L=X.turnUsageByAgent??new Map;X.turnUsageByAgent=L,L.set(A,f0(L.get(A)??D0(),K))}let F=f0(X.turnPrimaryUsage??D0(),u6(X.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(W,f0(X.turnAggregateUsageBaseline??X.turnUsageBaseline,F))}if(Z.type==="iteration_end"&&B)$.persistMessages(W,X?.agent.getMessages()??[],X?.config.systemPrompt);Y({type:"agent_event",payload:{sessionId:W,event:Z,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(B?"lead":void 0):void 0}}),Y({type:"chunk",payload:{sessionId:W,stream:"agent",chunk:QG(Z),ts:Date.now()}})}function R$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as eE}from"@cline/shared";$1();import{existsSync as uZ,readFileSync as bR,statSync as yR}from"node:fs";import{basename as hR,dirname as vZ,join as dZ,resolve as cZ}from"node:path";import{discoverPluginModulePaths as kR,resolveConfiguredPluginModulePaths as NG,resolvePluginConfigSearchPaths as IR,SKILLS_CONFIG_DIRECTORY_NAME as xR}from"@cline/shared/storage";import{resolve as GR}from"node:path";import{normalizePluginManifest as KR}from"@cline/shared";import{existsSync as O0,readFileSync as h8}from"node:fs";import{builtinModules as rM,createRequire as u3}from"node:module";import{dirname as E$,extname as l6,isAbsolute as iM,resolve as p}from"node:path";import{fileURLToPath as VG}from"node:url";import{PLUGIN_FILE_EXTENSIONS as nM}from"@cline/shared";var BG=E$(VG(import.meta.url)),aM=u3(import.meta.url),sM=p(BG,"..","..","..","..",".."),m3=eM(sM),oM=["@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"],d3=new Set(rM.flatMap(($)=>[$,$.replace(/^node:/,"")])),d6=new Set(nM),tM=["development","node","import","require","default"];function eM($){let Z={},Q={"@cline/sdk":p($,"packages/sdk/src/index.ts"),"@cline/agents":p($,"packages/agents/src/index.ts"),"@cline/core":p($,"packages/core/src/index.ts"),"@cline/llms":p($,"packages/llms/src/index.ts"),"@cline/shared":p($,"packages/shared/src/index.ts"),"@cline/shared/storage":p($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":p($,"packages/shared/src/db/index.ts")};for(let[W,J]of Object.entries(Q))if(O0(J))Z[W]=J;for(let W of["agents","core","llms","shared"]){let J=p($,"packages",W),X=p(J,"package.json");if(!O0(X))continue;try{let Y=JSON.parse(h8(X,"utf8"));if(typeof Y.name!=="string"||!Y.exports)continue;if(typeof Y.exports==="string"){let j=p(J,Y.exports);if(O0(j))Z[Y.name]=j;continue}if(typeof Y.exports!=="object")continue;for(let[j,V]of Object.entries(Y.exports)){let B=$R(J,V);if(!B)continue;let H=j==="."?Y.name:`${Y.name}/${j.replace(/^\.\//,"")}`;Z[H]=B}}catch{}}return Z}function $R($,Z){let Q=l3(Z);if(!Q)return null;let W=HG($,Q);for(let J of W)if(O0(J))return J;return null}function l3($,Z=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(Z.has($))return null;Z.add($);let Q=$;for(let W of tM){let J=l3(Q[W],Z);if(J)return J}return null}function HG($,Z){let Q=Z.replace(/^\.\//,""),W=[p($,Z)];if(Q.startsWith("dist/")){let J=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[p($,`${J}.ts`),p($,`${J}.tsx`),p($,`${J}.mts`),p($,`${J}.cts`),...W]}return W}function ZR($){return Object.fromEntries(Object.entries($).sort(([Z],[Q])=>Q.length-Z.length))}function xZ($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function y8($){if($.startsWith("@")){let[Z,Q]=$.split("/",3);return Q?`${Z}/${Q}`:$}return $.split("/",1)[0]??$}function QR($){let Z=y8($);if($===Z)return".";return`.${$.slice(Z.length)}`}function GG($){return y8($).startsWith("@cline/")}function v3($,Z){let Q=y8(Z),W=E$($);while(!0){let J=p(W,"node_modules",Q);if(O0(J)||O0(p(J,"package.json")))return!0;let X=p(W,"..");if(X===W)return!1;W=X}}function jG($){return c3($)!==null}function c3($){try{return aM.resolve($)}catch{}return WR($)}function WR($){let Z=y8($),Q=KG(Z);if(!Q)return null;let W=p(Q,"package.json");try{let J=JSON.parse(h8(W,"utf8")),X=QR($),Y=X==="."&&typeof J.exports==="string"?J.exports:J.exports&&typeof J.exports==="object"&&Object.hasOwn(J.exports,X)?J.exports[X]:void 0,j=l3(Y)??(X==="."&&typeof J.main==="string"?J.main:null);if(!j)return null;let V=p(Q,j),B=[V,...HG(Q,j).filter((H)=>H!==V)];for(let H of B)if(O0(H))return H;return null}catch{return null}}function JR(){let $=[BG],Z=process.env.CLINE_WRAPPER_PATH?.trim();if(Z)$.push(E$(E$(Z)));let Q=process.execPath?.trim();if(Q)$.push(E$(Q));return[...new Set($.map((W)=>p(W)))]}function XR($,Z){let Q=$;while(!0){let W=p(Q,"package.json");if(O0(W))try{if(JSON.parse(h8(W,"utf8")).name===Z)return Q}catch{}let J=p(Q,"node_modules",Z,"package.json");if(O0(J))return E$(J);let X=p(Q,"..");if(X===Q)return null;Q=X}}function KG($){for(let Z of JR()){let Q=XR(Z,$);if(Q)return Q}return null}function YR($){let Q=E$($);for(let W=0;W<4;W++){let J=p(Q,"package.json");if(O0(J))try{let Y=JSON.parse(h8(J,"utf8"));return Y!=null&&typeof Y==="object"&&"cline"in Y}catch{return!1}let X=p(Q,"..");if(X===Q)return!1;Q=X}return!1}function FG($,Z){let Q=Z.startsWith("file:")?VG(Z):iM(Z)?Z:p(E$($),Z);if(O0(Q)&&d6.has(l6(Q)))return Q;for(let W of d6){let J=`${Q}${W}`;if(O0(J))return J}for(let W of d6){let J=p(Q,`index${W}`);if(O0(J))return J}return null}function AG($){let Z=new Set,Q=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let W of Q)for(let J of $.matchAll(W)){let X=J[1];if(X)Z.add(X)}return[...Z]}function jR($){return l6($)!==".ts"}function fG($,Z,Q=new Set){if(Q.has($)||!O0($))return;if(Q.add($),!d6.has(l6($)))return;let W=h8($,"utf8"),J=jR($);for(let X of AG(W)){if(X.startsWith("node:")||d3.has(X))continue;if(xZ(X)){if(!J)continue;if(Object.hasOwn(m3,X)||Object.hasOwn(m3,y8(X))||v3($,X)||GG(X)&&jG(X)||Z&&jG(X))continue;throw Error(`Cannot find module '${y8(X)}'`)}let Y=FG($,X);if(Y)fG(Y,Z,Q)}}function UG($,Z=new Set,Q=new Set){if(Z.has($)||!O0($))return Q;if(Z.add($),!d6.has(l6($)))return Q;let W=h8($,"utf8");for(let J of AG(W)){if(Q.add(J),xZ(J))continue;let X=FG($,J);if(X)UG(X,Z,Q)}return Q}function VR($,Z){let Q=u3($),W={},J=UG($),X=new Set(oM);for(let[Y,j]of Object.entries(m3)){try{Q.resolve(Y);continue}catch{}W[Y]=j}for(let Y of J)if(xZ(Y)&&(GG(Y)||Z))X.add(Y);for(let Y of X){if(Object.hasOwn(W,Y)||v3($,Y))continue;let j=c3(Y);if(j)W[Y]=j}if(!Z)return W;for(let Y of J){if(!xZ(Y)||Object.hasOwn(W,Y)||v3($,Y)||Y.startsWith("node:")||d3.has(Y))continue;let j=c3(Y);if(j)W[Y]=j}return W}function BR($){let Z=l6($);return Z===".ts"||Z===".tsx"||Z===".mts"||Z===".cts"}var _2;function HR(){if(_2!==void 0)return _2;let $=KG("jiti");if(!$)return _2=null,null;let Z=p($,"dist","babel.cjs");if(!O0(Z))return _2=null,null;try{let W=u3(Z)(Z);_2=typeof W==="function"?W:null}catch{_2=null}return _2}async function DG($,Z={}){let Q=!YR($);fG($,Q);let W=VR($,Q),J=ZR(W),X=await import("jiti"),Y=typeof X==="function"?X:typeof X.default==="function"?X.default:void 0;if(!Y)throw Error("Unable to load jiti");let j=Object.entries(J).filter(([,G])=>BR(G)).map(([G])=>G),V=HR(),B=V?(G)=>V({...G,interopDefault:!0}):void 0;return await Y($,{alias:J,cache:Z.useCache,requireCache:Z.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...d3],transformModules:j,tryNative:!1,...B?{transform:B}:{}}).import($,{})}function LG($,Z){if(!$)return!0;if($.providerIds?.length){if(!Z?.providerId||!$.providerIds.includes(Z.providerId))return!1}if($.modelIds?.length){if(!Z?.modelId||!$.modelIds.includes(Z.modelId))return!1}return!0}function _G($){return typeof $==="object"&&$!==null}function p3($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function FR($,Z){if(!_G($.manifest))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);if(!p3($.manifest.capabilities))throw Error(`Invalid plugin module at ${Z}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${Z}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!p3($.manifest.providerIds))throw Error(`Invalid plugin module at ${Z}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!p3($.manifest.modelIds))throw Error(`Invalid plugin module at ${Z}: manifest.modelIds must be a string array when provided`)}function AR($,Z){if(!_G($))throw Error(`Invalid plugin module at ${Z}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${Z}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);FR($,Z)}async function p6($,Z={}){let Q=GR(Z.cwd??process.cwd(),$),W=await DG(Q,{useCache:Z.useCache}),J=Z.exportName??"plugin",X=W.default??W[J];AR(X,Q);let Y=X,j=Y.setup,V=j?(B,H)=>{let G={...Z.session,...H.session},K={...H,session:Object.keys(G).length>0?G:void 0,client:Z.client??H.client,user:Z.user??H.user,workspaceInfo:Z.workspaceInfo??H.workspaceInfo,automation:Z.automation??H.automation,logger:Z.logger??H.logger,telemetry:Z.telemetry??H.telemetry};return j(B,K)}:void 0;return{...Y,manifest:KR(Y.manifest),setup:V}}async function gZ($,Z={}){return(await z2($,Z)).plugins}async function z2($,Z={}){let Q=[],W=[],J=new Map,X=0;for(let j of $)try{let V=await p6(j,Z);if(!LG(V.manifest,Z))continue;let B=J.get(V.name);if(B)W.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:j,overriddenPluginPath:B.pluginPath,message:`Plugin "${V.name}" from ${j} overrides ${B.pluginPath}`});J.set(V.name,{plugin:V,pluginPath:j,order:X++})}catch(V){let B=V instanceof Error?V.message:String(V);Q.push({pluginPath:j,phase:"load",message:B,stack:V instanceof Error?V.stack:void 0})}let Y=[...J.values()].sort((j,V)=>j.order-V.order);return{plugins:Y.map((j)=>j.plugin),pluginPaths:Y.map((j)=>j.pluginPath),failures:Q,warnings:W}}import{existsSync as a3}from"node:fs";import{createRequire as EG}from"node:module";import{dirname as mZ,join as I8}from"node:path";import{fileURLToPath as _R}from"node:url";var MG={};N(MG,{resolveSubprocessRuntimeExecutable:()=>r3,buildSubprocessSandboxCommand:()=>qG,SubprocessSandbox:()=>k8,CLINE_JS_RUNTIME_PATH_ENV:()=>OG});import{spawn as fR}from"node:child_process";import{basename as UR}from"node:path";import{augmentNodeCommandForDebug as DR,withResolvedClineBuildEnv as LR}from"@cline/shared";function zG($){if($ instanceof Error)return $;return Error(String($))}var OG="CLINE_JS_RUNTIME_PATH";function TG($){let Z=$?.trim();if(!Z)return!1;let Q=UR(Z).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function r3($={}){let Z=$.env??process.env,Q=$.runtimeExecutable?.trim()||Z[OG]?.trim();if(Q)return Q;let W=$.execPath?.trim()||process.execPath;if(TG(W))return W;for(let J of[Z.BUN_EXEC_PATH,Z.npm_node_execpath,Z.NODE]){let X=J?.trim();if(X&&TG(X))return X}return"node"}function qG($,Z={}){let Q=r3({env:Z.env,execPath:Z.execPath,runtimeExecutable:Z.runtimeExecutable});return DR([Q,...$],{env:Z.env,execArgv:Z.execArgv,debugRole:Z.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class k8{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let Z=this.pending.get($);if(!Z)return;if(this.pending.delete($),Z.timeout)clearTimeout(Z.timeout);return Z}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],Z=qG($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=fR(Z[0]??r3(this.options),Z.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:LR(process.env),windowsHide:!0});this.process=Q;let W="",J=(X)=>{let Y=W+X;W=Y.length>4000?Y.slice(-4000):Y};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(X)=>{J(X)}),Q.on("message",(X)=>{this.onMessage(X)}),Q.on("error",(X)=>{this.failPending(Error(`${this.processLabel} process error: ${zG(X).message}`))}),Q.on("exit",(X,Y)=>{this.process=null;let j=W.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(X)}, signal=${String(Y)})${j?`: ${j}`:""}`))})}async call($,Z,Q={}){this.start();let W=this.process;if(!W||W.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let J=`req_${++this.requestCounter}`,X={type:"call",id:J,method:$,args:Z};return await new Promise((Y,j)=>{let V={resolve:(B)=>Y(B),reject:j};if((Q.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(J),this.shutdown().catch(()=>{}),j(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(J,V),W.send(X,(B)=>{if(!B)return;let H=this.clearPendingRequest(J);if(!H)return;H.reject(Error(`${this.processLabel} failed to send call "${$}": ${zG(B).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((Z)=>{let Q=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}Z()},300);$.once("exit",()=>{clearTimeout(Q),Z()});try{$.kill("SIGTERM")}catch{clearTimeout(Q),Z()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let Z=this.clearPendingRequest($.id);if(!Z)return;if($.ok){Z.resolve($.result);return}Z.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[Z,Q]of this.pending.entries()){if(this.pending.delete(Z),Q.timeout)clearTimeout(Q.timeout);Q.reject($)}}}function zR($){return{...$,contributions:{tools:$.contributions?.tools??[],commands:$.contributions?.commands??[],rules:$.contributions?.rules??[],messageBuilders:$.contributions?.messageBuilders??[],providers:$.contributions?.providers??[],automationEventTypes:$.contributions?.automationEventTypes??[],mcpServers:$.contributions?.mcpServers??[],shortcuts:$.contributions?.shortcuts??[],flags:$.contributions?.flags??[]}}}function r6($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function TR(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function OR(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=EG($).resolve(`${TR()}/package.json`),W=I8(mZ(Q),"extensions","plugin-sandbox-bootstrap.js");return a3(W)?W:void 0}catch{return}}function qR(){let $=process.execPath?.trim();if(!$)return;let Z=I8(mZ(mZ($)),"extensions","plugin-sandbox-bootstrap.js");return a3(Z)?Z:void 0}function MR(){let $=mZ(_R(import.meta.url)),Z=EG(import.meta.url),Q=[I8($,"plugin-sandbox-bootstrap.js"),I8($,"extensions","plugin-sandbox-bootstrap.js"),I8($,"agents","plugin-sandbox-bootstrap.js"),OR(),qR()];for(let X of Q.filter((Y)=>typeof Y==="string"))if(a3(X))return{file:X};let W=I8($,"plugin-sandbox-bootstrap.ts"),J="jiti";try{J=Z.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(J)});`,`const jiti = createJiti(${JSON.stringify(W)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(W)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
474
+ `)}}var i3=MR();function n3($,Z,Q){if(typeof $==="number"&&$>0)return $;if(Q){let W=process.env[Q];if(W){let J=Number(W);if(Number.isInteger(J)&&J>0)return J}}return Z}async function x8($){let Z=new k8({name:"plugin-sandbox",..."file"in i3?{bootstrapFile:i3.file}:{bootstrapScript:i3.script},onEvent:$.onEvent}),Q=n3($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),W=n3($.hookTimeoutMs,3000),J=n3($.contributionTimeoutMs,60000),X={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},Y,j=()=>{return Y??=Z.call("initialize",X,{timeoutMs:Q}).finally(()=>{Y=void 0}),Y},V;try{V=await Z.call("initialize",X,{timeoutMs:Q})}catch(G){throw await Z.shutdown().catch(()=>{}),G}let B=V.plugins.map(zR);return{extensions:B.map((G)=>{let K={name:G.name,__clinePluginPath:G.pluginPath,manifest:G.manifest,setup:(F)=>{RR(F,Z,G,J,j),ER(F,Z,G,J,j),NR(F,Z,G,J,j),wR(F,Z,G,J,j),CR(F,G)}};return K.hooks=SR(Z,G,W,j),K}),failures:V.failures,pluginPaths:B.map((G)=>G.pluginPath),shutdown:async()=>{await Z.shutdown()},warnings:V.warnings}}function RR($,Z,Q,W,J){for(let X of Q.contributions?.tools??[]){let Y={name:X.name,description:X.description??"",inputSchema:X.inputSchema??{type:"object",properties:{}},timeoutMs:X.timeoutMs,retryable:X.retryable,execute:async(j,V)=>{try{return await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:j,context:V},{timeoutMs:W})}catch(B){if(!r6(B))throw B;return await J(),await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:j,context:V},{timeoutMs:W})}}};$.registerTool(Y)}}function ER($,Z,Q,W,J){for(let X of Q.contributions?.commands??[])$.registerCommand({name:X.name,description:X.description,handler:async(Y)=>{try{return await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:Y},{timeoutMs:W})}catch(j){if(!r6(j))throw j;return await J(),await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:Y},{timeoutMs:W})}}})}function NR($,Z,Q,W,J){for(let X of Q.contributions?.rules??[])$.registerRule({id:X.ruleId,source:X.source,content:X.hasContentHandler===!0?async()=>{try{return await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:W})}catch(Y){if(!r6(Y))throw Y;return await J(),await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:W})}}:X.content??""})}function CR($,Z){for(let Q of Z.contributions?.providers??[])$.registerProvider({name:Q.name,description:Q.description,metadata:Q.metadata});for(let Q of Z.contributions?.automationEventTypes??[])$.registerAutomationEventType({eventType:Q.eventType,source:Q.source,description:Q.description,attributesSchema:Q.attributesSchema,payloadSchema:Q.payloadSchema,examples:Q.examples,metadata:Q.metadata});for(let Q of Z.contributions?.mcpServers??[])$.registerMcpServer(Q)}function wR($,Z,Q,W,J){for(let X of Q.contributions?.messageBuilders??[])$.registerMessageBuilder({name:X.name,async build(Y){try{let j=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:Y},{timeoutMs:W});return RG(j)?j:Y}catch(j){if(!r6(j))throw j;await J();let V=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:Y},{timeoutMs:W});return RG(V)?V:Y}}})}function RG($){return Array.isArray($)&&$.every((Z)=>typeof Z==="object"&&Z!==null&&("role"in Z)&&("content"in Z))}function PR($,Z,Q,W,J){return async(X)=>{try{return await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:X},{timeoutMs:W})}catch(Y){if(!r6(Y))throw Y;return await J(),await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:X},{timeoutMs:W})}}}function SR($,Z,Q,W){let J={};for(let X of Z.hooks??[])J[X]=PR($,Z.pluginId,X,Q,W);return Object.keys(J).length>0?J:void 0}var o3="package.json",gR="package";function i6($){return IR($)}function n6($){return kR($)}function mR($){try{return uZ($)&&yR($).isDirectory()}catch{return!1}}function t3($){let Z=[],Q=new Set;for(let W of $){let J=cZ(W);if(Q.has(J))continue;Q.add(J),Z.push(J)}return Z}function CG($){let Z=t3($);return v9(Z)}function wG($){return i6($).flatMap((Z)=>n6(Z)).filter((Z)=>uZ(Z))}function vR($,Z){let Q=[];for(let W of $)try{Q.push(...NG([W],Z))}catch{}return Q}function s3($){return typeof $==="object"&&$!==null}function cR($){try{let Z=JSON.parse(bR(dZ($,o3),"utf8"));if(!s3(Z)||!s3(Z.cline))return[];let Q=Z.cline.plugins;if(!Array.isArray(Q))return[];let W=[];for(let J of Q){if(typeof J==="string"){W.push(J);continue}if(!s3(J)||!Array.isArray(J.paths))continue;for(let X of J.paths)if(typeof X==="string")W.push(X)}return W}catch{return[]}}function PG($,Z){let Q=cZ(Z);return cR($).some((W)=>cZ($,W)===Q)}function uR($,Z){return hR($)===gR&&uZ(dZ(vZ($),o3))&&PG(vZ($),Z)}function dR($){let Z=cZ($),Q=[],W=vZ(Z);while(!0){if(uR(W,Z)){Q.push(W);break}if(uZ(dZ(W,o3))){if(PG(W,Z))Q.push(W);break}let J=vZ(W);if(J===W)break;W=J}return t3(Q)}function i1($={}){let Z=$.cwd??process.cwd(),Q=wG($.workspacePath),W=NG($.pluginPaths??[],Z);return CG([...W,...Q])}function lR($={}){let Z=$.cwd??process.cwd(),Q=wG($.workspacePath),W=vR($.pluginPaths??[],Z);return CG([...W,...Q])}function n1($){let Z=[];for(let Q of $)for(let W of dR(Q)){let J=dZ(W,xR);if(mR(J))Z.push(J)}return t3(Z)}function SG($={}){return n1(lR($))}async function g8($={}){let Z=i1($);if(Z.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let W=await z2(Z,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:W.plugins,failures:W.failures,pluginPaths:W.pluginPaths,warnings:W.warnings}}let Q=await x8({pluginPaths:Z,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:Q.extensions??[],shutdown:Q.shutdown,failures:Q.failures,pluginPaths:Q.pluginPaths,warnings:Q.warnings}}import{execFile as pR}from"node:child_process";import{promisify as rR}from"node:util";var iR=rR(pR);function e3($,Z){$?.log(Z,{severity:"warn"})}function nR($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))return;let Q=Z;if(!Q.latest||!Array.isArray(Q.history))return;let W=Q.latest,J=Q.history.filter((X)=>!!X&&typeof X==="object"&&typeof X.ref==="string"&&typeof X.createdAt==="number"&&typeof X.runCount==="number");if(typeof W.ref!=="string"||typeof W.createdAt!=="number"||typeof W.runCount!=="number")return;return{latest:W,history:J}}async function T2($,Z){let Q=await iR("git",["-C",$,...Z],{windowsHide:!0});return{stdout:Q.stdout.trim(),stderr:Q.stderr.trim()}}async function $J($,Z){if(!$)return;let Q=`refs/cline/checkpoints/${Z}/`;try{let{stdout:W}=await T2($,["for-each-ref","--format=%(refname)",Q]),J=W.trim().split(`
475
+ `).filter(Boolean);await Promise.allSettled(J.map((X)=>T2($,["update-ref","-d",X])))}catch{}}async function bG($,Z,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((W)=>T2($,["update-ref",`refs/cline/checkpoints/${Z}/${W.runCount}`,W.ref])))}function aR($,Z){let Q=$.findIndex((W)=>W.runCount===Z.runCount);if(Q<0)return[...$,Z];return $.map((W,J)=>J===Q?Z:W)}function yG($){let Z=$.initialRunCount??0,Q,W=async()=>{if(Q!==void 0)return Q;try{Q=(await T2($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Q=!1}return Q},J=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:Z});if(!await W())return;let X=async(B)=>{try{let G=(await T2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:Z,kind:"commit"}}catch(H){e3($.logger,`${B}: ${H instanceof Error?H.message:String(H)}`);return}},Y=`cline checkpoint session=${$.sessionId} run=${Z}`,j="";try{j=(await T2($.cwd,["stash","create",Y])).stdout.trim()}catch(B){return e3($.logger,`Checkpoint snapshot failed: ${B instanceof Error?B.message:String(B)}`),X("Checkpoint HEAD fallback failed")}if(!j)return X("Checkpoint HEAD fallback failed");let V=`refs/cline/checkpoints/${$.sessionId}/${Z}`;try{await T2($.cwd,["update-ref",V,j])}catch(B){e3($.logger,`Checkpoint store failed: ${B instanceof Error?B.message:String(B)}`);return}return{ref:j,createdAt:Date.now(),runCount:Z,kind:"stash"}};return{beforeRun:async({snapshot:X})=>{if(X.parentAgentId!=null)return;Z+=1;return},beforeModel:async({snapshot:X})=>{if(X.parentAgentId!=null||X.iteration!==1||Z<1)return;let Y=await J();if(!Y)return;let j=await $.readSessionMetadata(),V=nR(j);if(V?.latest.ref===Y.ref)return;let B=aR(V?.history??[],Y);await $.writeSessionMetadata({...j??{},checkpoint:{latest:Y,history:B}});return}}}import{spawn as JE}from"node:child_process";import{appendFileSync as XE,readFileSync as YE}from"node:fs";import{join as jE}from"node:path";import{augmentNodeCommandForDebug as IG,withResolvedClineBuildEnv as WJ}from"@cline/shared";import{ensureHookLogDir as hG}from"@cline/shared/storage";function m8($,Z){if(!Z)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:Z}}import{existsSync as sR,readdirSync as oR}from"node:fs";import{basename as tR,extname as eR,join as $E}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as lZ,resolveHooksConfigSearchPaths as ZE}from"@cline/shared/storage";function a6($){return ZE($)}var v8;((H)=>{H.TaskStart="TaskStart";H.TaskResume="TaskResume";H.TaskCancel="TaskCancel";H.TaskComplete="TaskComplete";H.TaskError="TaskError";H.PreToolUse="PreToolUse";H.PostToolUse="PostToolUse";H.UserPromptSubmit="UserPromptSubmit";H.PreCompact="PreCompact";H.SessionShutdown="SessionShutdown"})(v8||={});var s6={["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"},QE=new Map(Object.values(v8).map(($)=>[$.toLowerCase(),$])),WE=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function o6($){let Z=eR($).toLowerCase();if(!WE.has(Z))return;let Q=tR($,Z).trim().toLowerCase();return QE.get(Q)}function N$($){let Z=[],Q=new Set,W=a6($).filter((J)=>sR(J));for(let J of W)try{for(let X of oR(J,{withFileTypes:!0})){if(!X.isFile())continue;let Y=o6(X.name);if(!Y)continue;let j=$E(J,X.name);if(Q.has(j))continue;Q.add(j),Z.push({fileName:Y,hookEventName:s6[Y],path:j})}}catch{}return Z.sort((J,X)=>J.path.localeCompare(X.path))}function rZ($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))Z[Q]=typeof W==="string"?W:JSON.stringify(W);return Z}function pZ($,Z,Q){let W=Q instanceof Error?`: ${Q.message}`:"",J=`${Z}${W}`;if($){try{$.log(J,{severity:"warn",...Q!==void 0?{error:Q}:{}})}catch{}return}console.warn(J)}function VE($,Z){if(!Z)return $;if(!$)return{...Z};let Q=[$.context,Z.context].filter((J)=>typeof J==="string"&&J.length>0).join(`
476
+ `),W=[...$.appendMessages??[],...Z.appendMessages??[]];return{cancel:$.cancel===!0||Z.cancel===!0?!0:void 0,review:$.review===!0||Z.review===!0?!0:void 0,context:Q||void 0,overrideInput:Z.overrideInput!==void 0?Z.overrideInput:$.overrideInput,systemPrompt:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,appendMessages:W.length>0?W:void 0}}function BE($){if(!$||typeof $!=="object")return;let Z=$,Q=typeof Z.context==="string"?Z.context:typeof Z.contextModification==="string"?Z.contextModification:typeof Z.errorMessage==="string"?Z.errorMessage:void 0;return{cancel:typeof Z.cancel==="boolean"?Z.cancel:void 0,review:typeof Z.review==="boolean"?Z.review:void 0,context:Q,overrideInput:Object.hasOwn(Z,"overrideInput")?Z.overrideInput:void 0}}function ZJ($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function q0($,Z){let Q=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",W={rootSessionId:Z.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:W,workspaceRoots:Z.workspacePath?[Z.workspacePath]:[],workspaceInfo:Z.workspaceInfo,userId:Q,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function HE($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
477
+ `).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse hook stdout JSON"}}}async function GE($,Z){let Q=$.stdin;if(!Q)throw Error("hook command failed to create stdin");await new Promise((W,J)=>{let X=!1,Y=()=>{Q.off("error",V),Q.off("finish",B),$.off("close",H)},j=(G)=>{if(X)return;if(X=!0,Y(),G){let K=G.code;if(K==="EPIPE"||K==="ERR_STREAM_DESTROYED"){W();return}J(G);return}W()},V=(G)=>j(G),B=()=>j(),H=()=>j();Q.on("error",V),Q.once("finish",B),$.once("close",H);try{Q.end(Z)}catch(G){j(G)}})}async function xG($,Z){if(Z.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await kG($,Z)}catch(Q){let W=AE(Z.command,process.platform,Q);if(!W)throw Q;return await kG($,{...Z,command:W})}}async function kG($,Z){let Q=IG(Z.command,{env:Z.env,debugRole:"hook"}),W=JE(Q[0],Q.slice(1),{cwd:Z.cwd,env:WJ(Z.env),stdio:Z.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Z.detached,windowsHide:!0}),J=new Promise((K)=>{W.once("spawn",()=>K())}),X=new Promise((K,F)=>{W.once("error",(A)=>F(A))}),Y=JSON.stringify($);if(await Promise.race([J,X]),await GE(W,Y),Z.detached){W.unref();return}if(!W.stdout||!W.stderr)throw Error("hook command failed to create stdout/stderr");let j="",V="",B=!1,H;W.stdout.on("data",(K)=>{j+=K.toString()}),W.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((Z.timeoutMs??0)>0)H=setTimeout(()=>{B=!0,W.kill("SIGKILL")},Z.timeoutMs);W.once("close",(F)=>{if(H)clearTimeout(H);let{parsedJson:A,parseError:L}=HE(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:B})})});return await Promise.race([G,X])}function KE($){try{let Q=YE($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Q?.startsWith("#!"))return;let W=Q.slice(2).trim();if(!W)return;let J=W.split(/\s+/).filter(Boolean);return J.length>0?J:void 0}catch{return}}function FE($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function AE($,Z=process.platform,Q){if(Z!=="win32"||!FE(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function gG($){if($.length===0)return;let[Z,...Q]=$,W=Z.replace(/\\/g,"/").toLowerCase(),J=W.split("/").at(-1)??W;if(J==="env")return gG(Q);if(J==="bash"||J==="sh"||J==="zsh")return[J,...Q];if(J==="python3"||J==="python")return process.platform==="win32"?["py","-3",...Q]:[J,...Q];return $}function fE($){let Z=KE($);if(Z&&Z.length>0)return[...gG(Z)??Z,$];let Q=$.toLowerCase();if(Q.endsWith(".sh")||Q.endsWith(".bash")||Q.endsWith(".zsh"))return["bash",$];if(Q.endsWith(".js")||Q.endsWith(".mjs")||Q.endsWith(".cjs"))return IG(["node",$],{debugRole:"hook"});if(Q.endsWith(".ts")||Q.endsWith(".mts")||Q.endsWith(".cts"))return["bun","run",$];if(Q.endsWith(".py"))return process.platform==="win32"?["py","-3",$]:["python3",$];if(Q.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",$];return["bash",$]}function UE($){let Z={};for(let Q of N$($)){if(!Q.hookEventName)continue;let W=Q.hookEventName,J=Z[W]??[];J.push(fE(Q.path)),Z[W]=J}return Z}async function DE($){let Z;for(let Q of $.commands){let W=Q.join(" ");try{let J=await xG($.payload,{command:Q,cwd:$.cwd,env:WJ(process.env),detached:!1,timeoutMs:$.timeoutMs});if(J?.timedOut){pZ($.logger,`hook command timed out: ${W}`);continue}if(J?.parseError){pZ($.logger,`hook command returned invalid JSON control output: ${W} (${J.parseError})`);continue}Z=VE(Z,BE(J?.parsedJson))}catch(J){pZ($.logger,`hook command failed: ${W}`,J)}}return Z}function O2($){for(let Z of $.commands){let Q=Z.join(" ");xG($.payload,{command:Z,cwd:$.cwd,env:WJ(process.env),detached:!0}).catch((W)=>{pZ($.logger,`hook command failed: ${Q}`,W)})}}function C$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function QJ($,Z){return{...C$($.snapshot),userMessage:Z}}function mG($){return{...C$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function vG($){return{...C$($.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 cG($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function LE($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}function c8($){let Z={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(W)=>{let J=`${JSON.stringify({ts:new Date().toISOString(),...W})}
478
+ `,Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??jE(hG(),"hooks.jsonl");hG(Y),XE(Y,J,"utf8")};return{beforeRun:async(W)=>{let J=QJ(W,"");Q({...q0(J,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(W)=>{let J=mG(W);Q({...q0(J,Z),hookName:"tool_call",iteration:J.iteration,tool_call:{id:J.call.id,name:J.call.name,input:J.call.input},preToolUse:{toolName:J.call.name,parameters:rZ(J.call.input)}});return},afterTool:async(W)=>{let J=vG(W);Q({...q0(J,Z),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:rZ(J.record.input),result:typeof J.record.output==="string"?J.record.output:JSON.stringify(J.record.output),success:!J.record.error,executionTimeMs:J.record.durationMs}});return},afterRun:async({snapshot:W,result:J})=>{let X=C$(W);if(J.status==="completed"){Q({...q0(X,Z),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||ZJ(J.error?.message)){Q({...q0(X,Z),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Q({...q0(X,Z),hookName:"agent_error",iteration:J.iterations,error:{name:J.error.name,message:J.error.message,stack:J.error.stack}})},onEvent:async(W)=>{if(W.type!=="message-added"||W.message.role!=="user")return;let J=QJ({snapshot:W.snapshot},cG(W.message.content));Q({...q0(J,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function t6($){let Z=UE($.workspacePath);if(!Object.values(Z).some((G)=>G.length>0))return;let W=async(G,K)=>{let F=Z[K]??[];if(F.length===0)return;O2({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...q0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...q0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=Z.prompt_submit??[];if(K.length>0)O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},X=async(G)=>{let K=Z.tool_call??[];if(K.length===0)return;return DE({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...q0(G,$),hookName:"tool_call",iteration:G.iteration,tool_call:{id:G.call.id,name:G.call.name,input:G.call.input},preToolUse:{toolName:G.call.name,parameters:rZ(G.call.input)}}})},Y=async(G)=>{let K=Z.tool_result??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:rZ(G.record.input),result:typeof G.record.output==="string"?G.record.output:JSON.stringify(G.record.output),success:!G.record.error,executionTimeMs:G.record.durationMs}}})},j=async(G)=>{let K=Z.agent_end??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"agent_end",iteration:G.iteration,turn:G.turn,taskComplete:{taskMetadata:{}}}})},V=async(G)=>{let K=Z.agent_error??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},B=async(G)=>{if(ZJ(G.reason)){let F=Z.agent_abort??[];if(F.length>0)O2({commands:F,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=Z.session_shutdown??[];if(K.length===0)return;O2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...q0(G,$),hookName:"session_shutdown",reason:G.reason}})},H={};if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0||(Z.prompt_submit?.length??0)>0){if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0)H.beforeRun=async(G)=>{let K=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await W(C$(G.snapshot),K);return};if((Z.prompt_submit?.length??0)>0)H.onEvent=async(G)=>{if(G.type!=="message-added"||G.message.role!=="user")return;await J(QJ({snapshot:G.snapshot},cG(G.message.content)))}}if((Z.tool_call?.length??0)>0)H.beforeTool=async(G)=>{let K=await X(mG(G));return LE(K)};if((Z.tool_result?.length??0)>0)H.afterTool=async(G)=>{await Y(vG(G));return};if((Z.agent_end?.length??0)>0)H.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await j({...C$(G),iteration:K.iterations,turn:{outputText:K.outputText,status:K.status}})};if((Z.agent_error?.length??0)>0||(Z.agent_abort?.length??0)>0||(Z.session_shutdown?.length??0)>0){let G=H.afterRun;H.afterRun=async(K)=>{await G?.(K);let{snapshot:F,result:A}=K;if(A.status==="aborted"||ZJ(A.error?.message)){await B({...C$(F),reason:A.error?.message});return}if(A.error)await V({...C$(F),iteration:A.iterations,error:A.error})}}return H}function u8($){return m8("core.hook_config_files",t6($))}function q2($,Z){let Q=$.map((W)=>W[Z]).filter((W)=>typeof W==="function");if(Q.length===0)return;return async(W)=>{let J;for(let X of Q){let Y=await X(W);if(!Y||typeof Y!=="object")continue;let j=Y;J={...J??{},...j,stop:J?.stop===!0||j.stop===!0?!0:j.stop,options:J?.options||j.options?{...J?.options??{},...j.options??{}}:void 0}}return J}}function M2($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:q2(Z,"beforeRun"),afterRun:q2(Z,"afterRun"),beforeModel:q2(Z,"beforeModel"),afterModel:q2(Z,"afterModel"),beforeTool:q2(Z,"beforeTool"),afterTool:q2(Z,"afterTool"),onEvent:q2(Z,"onEvent")}}var uG={};N(uG,{normalizeRuntimeCapabilities:()=>M0});function M0(...$){let Z,Q;for(let J of $){if(!J)continue;if(J.toolExecutors)Z={...Z??{},...J.toolExecutors};if(J.requestToolApproval)Q=J.requestToolApproval}let W=Z&&Object.keys(Z).length>0;if(!W&&!Q)return;return{...W?{toolExecutors:Z}:{},...Q?{requestToolApproval:Q}:{}}}var oG={};N(oG,{toProviderConfig:()=>l0,emptyStoredProviderSettings:()=>S$,StoredProviderSettingsSchema:()=>r8,StoredProviderSettingsEntrySchema:()=>fQ,ProviderSettingsSchemaTyped:()=>p8});import{z as P$}from"zod";var sG={};N(sG,{toProviderConfig:()=>l0,safeParseSettings:()=>AQ,safeCreateProviderConfig:()=>FJ,parseSettings:()=>FQ,normalizeProviderId:()=>l8,isBuiltInProviderId:()=>GJ,createProviderConfig:()=>KJ,SapSettingsSchema:()=>HQ,ReasoningSettingsSchema:()=>YQ,ProviderSettingsSchema:()=>w$,ProviderProtocolSchema:()=>WQ,ProviderIdSchema:()=>W5,ProviderClientSchema:()=>JQ,OcaSettingsSchema:()=>GQ,ModelCatalogSettingsSchema:()=>KQ,GcpSettingsSchema:()=>VQ,BUILT_IN_PROVIDER_IDS:()=>HJ,BUILT_IN_PROVIDER:()=>Q5,AzureSettingsSchema:()=>BQ,AwsSettingsSchema:()=>jQ,AuthSettingsSchema:()=>XQ});import*as d0 from"@cline/llms";import{z as C}from"zod";var aG={};N(aG,{resolveProviderConfig:()=>Z5,getProviderConfig:()=>QQ,getLiveModelsCatalog:()=>d8,clearPublicModelsCatalogCache:()=>cE,clearPrivateModelsCatalogCache:()=>BJ,clearLiveModelsCatalogCache:()=>VJ,OPENAI_COMPATIBLE_PROVIDERS:()=>$5,DEFAULT_MODELS_CATALOG_URL:()=>tZ});import*as s from"@cline/llms";function JJ($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let W of[Q.id,Q.name,Q.model])if(typeof W==="string"&&W.trim())return W.trim()}return""}).filter((Z)=>Z.length>0)}function _E($,Z){let Q=JJ($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let W=$,J=JJ(W.data??W.models);if(J.length>0)return J;if(W.models&&typeof W.models==="object"&&!Array.isArray(W.models)){let Y=Object.keys(W.models).filter((j)=>j.trim().length>0);if(Y.length>0)return Y}let X=W.providers?.[Z];if(X&&typeof X==="object"){let j=JJ(X.models??X);if(j.length>0)return j}return[]}async function iZ($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return _E(await Q.json(),Z)}function dG($){return $.replace(/\/+$/,"")}function nZ($,Z,Q){let W=Q?.trim();if(!W)return;let J=$?.trim();if(!J||!Z?.trim())return W;try{let X=new URL(W),Y=new URL(Z),j=new URL(J);if(X.origin!==Y.origin)return W;let V=dG(Y.pathname),B=dG(j.pathname);if(V&&X.pathname.startsWith(`${V}/`)){let H=X.pathname.slice(V.length);j.pathname=`${B}${H}`}else j.pathname=X.pathname;return j.search=X.search,j.hash=X.hash,j.toString()}catch{return W}}function zE($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function TE($){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 OE=Object.values(s.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:zE($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),pG=Object.fromEntries(OE.map(($)=>[$.id,$]));function qE($){return pG[$]}function ME(){return Object.fromEntries(Object.entries(pG).filter(([,$])=>TE($)))}function rG($=[]){let Z=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return Z.length>0?Z:void 0}var tZ="https://models.dev/api.json",RE=600000,iG=300000,EE=5000,oZ=new Map,e6=new Map,XJ=new Map,aZ=new Map;async function NE(){return s.getGeneratedProviderModels()}async function CE($,Z={},Q={},W={},J={},X={}){if($==="litellm")return s.sortModelsByReleaseDate(W);let Y=await NE(),j=s.resolveProviderModelCatalogKeys($),V=Object.assign({},...j.map((K)=>Y[K]??{})),B=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),H=Object.keys(J).length>0;if(B&&H)return s.sortModelsByReleaseDate({...J,...X});if($==="openai-codex")return s.sortModelsByReleaseDate({...Z,...s.filterOpenAICodexModels(Q),...J,...X});if($==="cline-pass"&&Object.keys(Q).length>0)return s.sortModelsByReleaseDate({...Q,...X});let G=s.sortModelsByReleaseDate({...V,...Z,...Q,...W,...J});if($==="cline")return s.sortModelsByReleaseDate({...s.preferCanonicalModelIds(G,s.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...X});return s.sortModelsByReleaseDate({...G,...X})}function wE($,Z){let Q=s.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((W)=>Z[W]??{}))}function eZ($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function jJ($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function PE($){let Z=2166136261;for(let Q=0;Q<$.length;Q+=1)Z^=$.charCodeAt(Q),Z+=(Z<<1)+(Z<<4)+(Z<<7)+(Z<<8)+(Z<<24);return(Z>>>0).toString(16)}function SE($,Z){return`${$}:${eZ(Z.baseUrl)}:${PE(jJ(Z)??"")}`}async function $Q($,Z,Q=EE){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await fetch($,{...Z,signal:W.signal})}finally{clearTimeout(J)}}function R2($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function ZQ($,Z){let Q=["streaming","tools"];return R2(Q,"images",Boolean(Z.supportsImages)),R2(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),R2(Q,"reasoning",Boolean(Z.supportsReasoning)),{id:$,name:Z.name??$,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxTokens:Z.maxTokens,capabilities:Q,releaseDate:Z.releaseDate,status:"active"}}async function bE($,Z){let Q=await $Q("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;if(j.includes("whisper")||j.includes("tts")||j.includes("embedding"))continue;let V=Y.supported_features??[];X[j]=ZQ(j,{name:j,contextWindow:Y.context_length,maxInputTokens:Y.context_length,maxTokens:Y.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return X}function lG($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function yE($,Z){let Q=await $Q("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":Z}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;X[j]=ZQ(j,{name:j,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return X}async function hE($,Z){let W=`${(eZ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await $Q(W,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!J.ok)throw Error(`Poolside model refresh failed: HTTP ${J.status}`);let Y=(await J.json())?.data??[],j={};for(let V of Y){let B=V.id?.trim();if(!B)continue;let H=V.supported_features??[],G=V.supported_sampling_parameters??[],K=V.input_modalities??[],F=["streaming"];R2(F,"tools",H.includes("tools")),R2(F,"reasoning",H.includes("reasoning")),R2(F,"temperature",G.includes("temperature")),R2(F,"images",K.includes("image"));let A={input:lG(V.pricing?.prompt),output:lG(V.pricing?.completion)};j[B]={id:B,name:V.name??B,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:A.input!==void 0||A.output!==void 0?A:void 0,status:"active"}}return j}function kE($){let Z=eZ($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function IE($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function xE($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,W=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${W}`}async function gE($,Z){let Q=kE($.baseUrl),W=[],J=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let X of IE(Q))for(let[Y,j]of J)try{let V=await $Q(X,{method:"GET",headers:{accept:"application/json",...j}});if(V.ok){let H=(await V.json())?.data??[],G={};for(let K of H){let F=K.model_name?.trim(),L=K.litellm_params?.model?.trim()||F;if(!L)continue;let f=K.model_info,D=ZQ(L,{name:F??L,maxTokens:f?.max_output_tokens??f?.max_tokens,maxInputTokens:f?.max_input_tokens??f?.max_tokens,supportsImages:f?.supports_vision,supportsPromptCache:f?.supports_prompt_caching,supportsReasoning:f?.supports_reasoning});if(G[L]=D,F)G[F]={...D,id:F,name:F}}return G}W.push(`${new URL(X).pathname} (${Y}): ${await xE(V)}`)}catch(V){let B=V instanceof Error?V.message:String(V);W.push(`${new URL(X).pathname} (${Y}): ${B}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${W.join("; ")}`)}var nG={baseten:bE,hicap:yE,litellm:gE,poolside:hE},YJ=new Map,sZ=new Map;function mE($,Z){return`${$}:${eZ(Z.baseUrl)}`}async function vE($,Z,Q){let W=s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=nZ(Q.baseUrl,W?.provider.baseUrl,W?.provider.modelsSourceUrl);if(!J)return{};let X=Z?.cacheTtlMs??iG,Y=mE($,Q),j=Date.now(),V=YJ.get(Y);if(V&&V.expiresAt>j)return V.data;let B=sZ.get(Y);if(B)return B;let H=iZ(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,ZQ(F,{name:F})]));return YJ.set(Y,{data:K,expiresAt:j+X}),K}).finally(()=>{sZ.delete(Y)});return sZ.set(Y,H),H}function cE(){YJ.clear(),sZ.clear()}async function uE($,Z){let Q=jJ(Z);if(!Q)return{};let W=nG[$];if(!W)return{};return W(Z,Q)}function dE($,Z,Q){if(!Q)return!1;if(!nG[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(jJ(Q))}async function lE($,Z,Q){let W=Z?.cacheTtlMs??iG,J=SE($,Q),X=Date.now(),Y=XJ.get(J);if(Y&&Y.expiresAt>X)return Y.data;let j=aZ.get(J);if(j)return j;let V=uE($,Q).then((B)=>{return XJ.set(J,{data:B,expiresAt:X+W}),B}).finally(()=>{aZ.delete(J)});return aZ.set(J,V),V}async function pE($){return s.fetchLiveProviderModels($,globalThis.fetch)}async function d8($={}){let Z=$.url??tZ,Q=$.cacheTtlMs??RE,W=Date.now(),J=oZ.get(Z);if(J&&J.expiresAt>W)return J.data;let X=e6.get(Z);if(X)return X;let Y=pE(Z).then((j)=>{return oZ.set(Z,{data:j,expiresAt:W+Q}),j}).finally(()=>{e6.delete(Z)});return e6.set(Z,Y),Y}function VJ($){if($){oZ.delete($),e6.delete($);return}oZ.clear(),e6.clear()}function BJ(){XJ.clear(),aZ.clear()}function rE($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:rG(Q.capabilities)}]))}var $5=rE(ME());function QQ($){let Z=qE($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:rG(Z.capabilities)}}async function Z5($,Z,Q){let W=QQ($);if(!W)return;try{let J=Z?.loadLatestOnInit?await d8(Z):void 0,X=J?wE($,J):{},Y=Q&&dE($,Z,Q)?await lE($,Z,Q):{},V=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:W.modelId,baseUrl:W.baseUrl}:Q,B=V?await vE($,Z,V).catch(()=>({})):{},H=await CE($,W.knownModels,X,Y,B,Q?.knownModels);return{...W,knownModels:H}}catch(J){if(Z?.failOnError)throw J;if($==="litellm")return{...W,knownModels:{}};return W}}var Q5=d0.BUILT_IN_PROVIDER,HJ=d0.BUILT_IN_PROVIDER_IDS,GJ=d0.isBuiltInProviderId,l8=d0.normalizeProviderId,W5=C.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),WQ=C.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),JQ=C.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),XQ=C.object({apiKey:C.string().optional(),accessToken:C.string().optional(),refreshToken:C.string().optional(),expiresAt:C.number().int().positive().optional(),accountId:C.string().optional()}),iE=C.enum(["none","low","medium","high","xhigh"]),YQ=C.object({enabled:C.boolean().optional(),effort:iE.optional(),budgetTokens:C.number().int().positive().optional()}),jQ=C.object({accessKey:C.string().optional(),secretKey:C.string().optional(),sessionToken:C.string().optional(),region:C.string().optional(),profile:C.string().optional(),authentication:C.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:C.boolean().optional(),useCrossRegionInference:C.boolean().optional(),useGlobalInference:C.boolean().optional(),endpoint:C.string().url().optional(),customModelBaseId:C.string().optional()}),VQ=C.object({projectId:C.string().optional(),region:C.string().optional()}),BQ=C.object({apiVersion:C.string().optional(),useIdentity:C.boolean().optional()}),HQ=C.object({clientId:C.string().optional(),clientSecret:C.string().optional(),tokenUrl:C.string().url().optional(),resourceGroup:C.string().optional(),deploymentId:C.string().optional(),useOrchestrationMode:C.boolean().optional(),api:C.enum(["orchestration","foundation-models"]).optional(),defaultSettings:C.record(C.string(),C.unknown()).optional()}),GQ=C.object({mode:C.enum(["internal","external"]).optional(),usePromptCache:C.boolean().optional()}),KQ=C.object({loadLatestOnInit:C.boolean().optional(),loadPrivateOnAuth:C.boolean().optional(),url:C.string().url().optional(),cacheTtlMs:C.number().int().positive().optional(),failOnError:C.boolean().optional()}),w$=C.object({provider:W5,apiKey:C.string().optional(),auth:XQ.optional(),model:C.string().optional(),protocol:WQ.optional(),client:JQ.optional(),routingProviderId:W5.optional(),maxTokens:C.number().int().positive().optional(),contextWindow:C.number().int().positive().optional(),baseUrl:C.string().url().optional(),headers:C.record(C.string(),C.string()).optional(),timeout:C.number().int().positive().optional(),reasoning:YQ.optional(),aws:jQ.optional(),gcp:VQ.optional(),azure:BQ.optional(),sap:HQ.optional(),oca:GQ.optional(),region:C.string().optional(),apiLine:C.enum(["china","international"]).optional(),capabilities:C.array(C.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:KQ.optional()});function FQ($){return w$.parse($)}function AQ($){return w$.safeParse($)}function nE($){return $.protocol==="openai-responses"||$.client==="openai"}function l0($,Z={}){let Q=$.provider,W=l8(Q),J=Z.includeKnownModels!==!1,X=$.reasoning?.effort||"none",Y=X==="none"?void 0:X,j=$5[W],V=Object.assign({},...d0.resolveProviderModelCatalogKeys(W).map((L)=>d0.getGeneratedModelsForProvider(L))),B=Object.keys(V)[0],H=U8(W,$),G=$.baseUrl??(W==="oca"?$.oca?.mode==="internal"?jZ:VZ:j?.baseUrl),K=$.routingProviderId??(nE($)&&W!==Q5.OPENAI_NATIVE?Q5.OPENAI_NATIVE:void 0),F=J?j?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,A={providerId:Q,clientType:$.client,routingProviderId:K,modelId:$.model??j?.modelId??B??"default",...J?{knownModels:F}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:Y,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??j?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(A).filter(([L,f])=>f!==void 0))}function KJ($){let Z=FQ($);return l0(Z)}function FJ($){let Z=AQ($);if(Z.success)return{success:!0,config:l0(Z.data)};return{success:!1,error:Z.error}}var p8=w$;var fQ=P$.object({settings:w$,updatedAt:P$.string().datetime(),tokenSource:P$.enum(["manual","oauth","migration"]).default("manual")}),r8=P$.object({version:P$.literal(1),lastUsedProvider:P$.string().min(1).optional(),providers:P$.record(P$.string(),fQ)});function S$(){return{version:1,providers:{}}}$1();var tG={};N(tG,{InMemoryWorkspaceManager:()=>i8});import{upsertWorkspaceInfo as aE,WorkspaceManifestSchema as AJ}from"@cline/shared";class i8{manifest;listeners=new Set;constructor($){this.manifest=AJ.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await $8($);return this.manifest=aE(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=C1($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=AJ.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let W=await this.addWorkspacePath(Z);return this.manifest=AJ.parse({...this.manifest,currentWorkspacePath:W.rootPath}),this.emit({type:"workspace_switched",workspace:W}),W}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=C1($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}_0();import{createHash as sE}from"node:crypto";var eG=new Set,$K=new Set;function oE($){return sE("sha256").update($).digest("hex")}function tE($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function ZK($){if(!$.telemetry)return;let Z=oE($.rootPath),Q=$.rootCount??1;if(!eG.has(Z))eG.add(Z),T9($.telemetry,{root_count:Q,vcs_types:tE($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!$K.has(Z)){$K.add(Z);let W=Error($.initError.message);W.name=$.initError.errorType||"Error",O9($.telemetry,W,{fallback_to_single_root:!0,workspace_count:Q})}}function $N($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function ZN($,Z,Q){if(Z.length>0)for(let X of Z)Q?.log(X.message,{severity:"warn"});if($.length===0)return;let W=$.slice(0,3).map($N).join("; "),J=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${W}${J}. Use --verbose for more details.`,{severity:"warn"});for(let X of $)Q?.log(`Plugin initialization failed (${X.phase}) for ${X.pluginPath}`,{severity:"warn",stack:X.stack,pluginPath:X.pluginPath,pluginName:X.pluginName})}function QN($,Z){let Q=typeof $.thinking==="boolean",W=typeof $.reasoningEffort==="string";if(!Q&&!W)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...W?{effort:$.reasoningEffort}:{}}}function QK($,Z){return eE($,Z)}function WN($){let Z=0;for(let Q of $??[]){if(Q.role!=="user")continue;if(("metadata"in Q&&Q.metadata&&typeof Q.metadata==="object"&&!Array.isArray(Q.metadata)?Q.metadata:void 0)?.kind==="recovery_notice")continue;Z+=1}return Z}function JN($){let Z={...$.storedHeaders??{},...$.configHeaders??{}},Q=$.accountId?.trim()||XN($.accessToken);if(Z.originator="cline",Z.session_id=$.sessionId,Z["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,Q)Z["ChatGPT-Account-Id"]=Q;return Z}function XN($){let Z=$?.trim();if(!Z)return;let Q=E0(Z),W=Q?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let J=Q?.organizations?.[0]?.id;if(typeof J==="string"&&J.length>0)return J;let X=Q?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;return}function YN($,Z,Q,W,J){let X=Q.getProviderSettings($.providerId),Y=W||X?.modelCatalog?{...W??{},...X?.modelCatalog??{}}:void 0,j=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,V={...X??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??X?.apiKey,baseUrl:$.baseUrl??X?.baseUrl,headers:$.providerId==="openai-codex"?JN({sessionId:Z,configHeaders:$.headers,storedHeaders:X?.headers,accountId:X?.auth?.accountId,accessToken:$.apiKey??X?.auth?.accessToken??X?.apiKey}):$.headers??X?.headers,reasoning:QN($,X?.reasoning),modelCatalog:Y},B={...l0(V),...j??{}};if($.knownModels)B.knownModels=$.knownModels;if($.extensionContext)B.extensionContext=$.extensionContext;let G=$.fetch??B.fetch??J;if(G)B.fetch=G;return B}async function WK($){let{input:Z,sessionId:Q,providerSettingsManager:W,defaultTelemetry:J,defaultCapabilities:X,defaultToolPolicies:Y,defaultFetch:j,onPluginEvent:V,onTeamEvent:B,createSubAgentLifecycleCallbacks:H,createSpawnTool:G,localRuntime:K,readSessionMetadata:F,writeSessionMetadata:A}=$,L=R$(Z.config),{modelCatalogDefaults:f,userInstructionService:D,configExtensions:U,onTeamRestored:T,...q}=K??{},z=Object.keys(q).length>0?q:void 0,{workspaceInfo:_,workspaceMetadata:E,durationMs:w,vcsType:y,initError:l}=await JW(L),o=z?.extensionContext,t={...o??{},workspace:{..._,...o?.workspace??{}},session:{...o?.session??{},sessionId:Q},logger:o?.logger??z?.logger,telemetry:o?.telemetry??z?.telemetry??J};ZK({telemetry:t.telemetry,rootPath:_.rootPath,workspaceInfo:_,rootCount:1,vcsType:y,durationMs:w,initError:l,featureFlagEnabled:!0});let Q0=u8({cwd:Z.config.cwd,workspacePath:L,rootSessionId:Q,logger:z?.logger,workspaceInfo:_}),e0=ZG(z?.hooks)?void 0:c8({rootSessionId:Q,workspacePath:L,workspaceInfo:_}),l$=M2([z?.hooks,e0]),r;if(QK(U,"plugins"))try{r=await g8({pluginPaths:z?.pluginPaths,workspacePath:L,cwd:Z.config.cwd,onEvent:V,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:_,session:t.session,client:t.client,user:t.user,logger:t.logger,telemetry:t.telemetry,automation:t.automation}),ZN(r.failures,r.warnings,z?.logger)}catch(s2){let $W=s2 instanceof Error?s2.message:String(s2);z?.logger?.log?.(`plugin loading failed; continuing without plugins (${$W})`)}let P=b3(Q0?[Q0]:void 0,b3(z?.extensions,c9(r?.extensions))),H0=QK(U,"plugins")?n1(r?.pluginPaths??[]):void 0,G0={...Z.config,...z??{},sessionId:Q,hooks:l$,extensions:P,extensionContext:t,telemetry:t.telemetry},w0=YN(G0,Q,W,f,j),n2=M2([G0.hooks,G0.checkpoint?.enabled===!0?yG({cwd:G0.cwd,sessionId:Q,logger:G0.logger,createCheckpoint:G0.checkpoint?.createCheckpoint,initialRunCount:WN(Z.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),R1={...G0,providerConfig:w0,workspaceMetadata:E,hooks:n2},B1=Z.toolPolicies??G0.toolPolicies??Y,w4=M0(X,Z.capabilities),a2=w4?.requestToolApproval,K9=w4?.toolExecutors,E1=H?.(R1),F9=new i8({currentWorkspacePath:_.rootPath,workspaces:{[_.rootPath]:_}});return{effectiveInput:Z,config:R1,providerConfig:w0,workspaceMetadata:E,workspaceInfo:_,extensions:P,hooks:n2,toolPolicies:B1,requestToolApproval:a2,pluginSandboxShutdown:r?.shutdown,runtimeBuilderInput:{config:R1,hooks:n2,extensions:P,onTeamEvent:B,createSpawnTool:G,onTeamRestored:T,onSubAgentEvent:E1?.onSubAgentEvent,onSubAgentStart:E1?.onSubAgentStart,onSubAgentEnd:E1?.onSubAgentEnd,userInstructionService:D,pluginSkillDirectories:H0,configExtensions:U,toolExecutors:K9,toolPolicies:B1,workspaceManager:F9,logger:R1.logger,telemetry:R1.telemetry,requestToolApproval:a2}}}import{existsSync as DQ,mkdirSync as jN,readdirSync as VN,rmdirSync as BN,rmSync as HN,unlinkSync as GN}from"node:fs";import{dirname as JK,join as UQ}from"node:path";function J0(){return new Date().toISOString()}function J5($){if(!$||!DQ($))return;try{GN($)}catch{}}function KN($){let Z=P8($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=x6($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class fJ{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return UQ(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!DQ(Z))jN(Z,{recursive:!0});return Z}sessionMessagesPath($){return UQ(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return UQ(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!DQ(Z)){Z=JK(Z);continue}try{if(VN(Z).length>0)break;BN(Z)}catch{break}Z=JK(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!DQ($))return;try{HN($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:W,fileStem:J}=KN($),X=this.sessionArtifactsDir(W);return{messagesPath:UQ(X,`${J}.messages.json`)}}}import{resolveDocumentsExtensionPath as FN}from"@cline/shared/storage";_0();function XK($,Z,Q,W,J){if(Q)M9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});else q9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});AN($.telemetry,{workspacePath:W})}function AN($,Z){let Q=FN("Hooks"),W=N$(Z.workspacePath),J=new Map;for(let X of W){let Y=X.hookEventName??"unknown",j=J.get(Y)??{global:0,workspace:0};if(X.path===Q||X.path.startsWith(`${Q}/`))j.global+=1;else j.workspace+=1;J.set(Y,j)}for(let[X,Y]of J.entries())y9($,X,Y.global,Y.workspace)}function YK($,Z){for(let Q of Z.mentions)S9($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)w9($,"file",Q.length);for(let Q of Z.ignoredMentions)P9($,"file","not_found",Q)}var JU={};N(JU,{ProviderSettingsManager:()=>q1});import{chmodSync as HU,existsSync as RY,mkdirSync as kI,readFileSync as II,writeFileSync as xI}from"node:fs";import{basename as GU,dirname as EY}from"node:path";import{resolveProviderSettingsPath as gI}from"@cline/shared/storage";var M={};N(M,{writeHubDiscovery:()=>p9,writeGlobalSettings:()=>H1,withHubStartupLock:()=>r9,verifyHubConnection:()=>A1,updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>t8,updateMcpServerOAuthStateAsync:()=>O5,updateMcpServerOAuthState:()=>P2,updateLocalProvider:()=>y7,uninstallPlugin:()=>a5,uninstallMarketplaceSkill:()=>A7,uninstallMarketplacePlugin:()=>f7,uninstallMarketplaceMcpServerFromSettings:()=>K7,uninstallMarketplaceEntry:()=>dX,truncateNotificationBody:()=>J9,truncateCommandOutput:()=>Y2,toggleDisabledTool:()=>m9,toTeamProgressLifecycleEvent:()=>B4,toProviderConfig:()=>l0,toHubStatusUrl:()=>OW,toHubHealthUrl:()=>i9,toHookConfigFileName:()=>o6,syncPluginMcpServersToSettings:()=>i5,summarizeUsageFromMessages:()=>b8,stopLocalHubServerGracefully:()=>hW,startLocalOAuthServer:()=>J1,startHubWebSocketServer:()=>j9,startHubServer:()=>jU,startClineDeviceAuth:()=>lW,splitCoreSessionConfig:()=>i4,spawnDetachedHubServerWithRetry:()=>B8,spawnDetachedHubServer:()=>CW,setTelemetryOptOutGlobally:()=>yj,setMcpServerDisabled:()=>C2,setDisabledTools:()=>fW,setDisabledPlugin:()=>cj,setCompactionStrategyGlobally:()=>xj,setAutoUpdateEnabledGlobally:()=>kj,sendHubCommand:()=>_V,saveProviderOAuthCredentials:()=>W2,saveLocalProviderSettings:()=>WY,saveLocalProviderOAuthCredentials:()=>jY,sanitizeSessionToken:()=>D2,safeParseSettings:()=>AQ,safeCreateProviderConfig:()=>FJ,runSubprocessEvent:()=>U4,runHook:()=>L4,reviveTeamStateDates:()=>SZ,restartLocalHubIfIdleAfterStartupTimeout:()=>t9,resolveWorkspaceHubOwnerContext:()=>QV,resolveWorkflowsConfigSearchPaths:()=>f5,resolveSkillsConfigSearchPaths:()=>F5,resolveSharedHubOwnerContext:()=>Q1,resolveSessionBackend:()=>KX,resolveRulesConfigSearchPaths:()=>A5,resolveProviderConfig:()=>Z5,resolveProviderApiKeyFromSettings:()=>sW,resolveProductionHubOwnerContext:()=>F1,resolvePluginSkillDirectoriesFromPaths:()=>n1,resolvePluginConfigSearchPaths:()=>i6,resolveMcpServerRegistrations:()=>p0,resolveMarketplaceMcpServerName:()=>o5,resolveLocalClineAuthToken:()=>BY,resolveHubUrl:()=>kW,resolveHubOwnerContext:()=>x1,resolveHubEndpointOptions:()=>K1,resolveHubBuildId:()=>l9,resolveHooksConfigSearchPaths:()=>a6,resolveDisabledToolNames:()=>G1,resolveDisabledPluginPaths:()=>u4,resolveDefaultMcpSettingsPath:()=>Z0,resolveDefaultHubPort:()=>V8,resolveDefaultHubPathname:()=>NW,resolveDefaultHubHost:()=>EW,resolveCoreSelectedToolIds:()=>yZ,resolveCoreDistinctId:()=>P0,resolveCompatibleLocalHubUrl:()=>o4,resolveClineDir:()=>tj,resolveClineDataDir:()=>o$,resolveAndLoadAgentPlugins:()=>g8,resolveAgentPluginPaths:()=>i1,requestHubShutdown:()=>s4,requestDesktopToolApproval:()=>NX,removePluginMcpServersFromSettings:()=>n5,rememberRecoverableLocalHubUrl:()=>H$,registerRemoteConfigSessionBlobUpload:()=>W7,registerMcpServersFromSettingsFile:()=>S2,registerDisposable:()=>SI,refreshProviderModelsFromSource:()=>JY,refreshOpenAICodexToken:()=>YZ,refreshOcaToken:()=>HZ,refreshClineToken:()=>JZ,readSessionCheckpointHistory:()=>I2,readRemoteConfigSessionBlobUploadMetadata:()=>LX,readHubDiscovery:()=>K0,readGlobalSettings:()=>z0,readCompactionStrategyGlobally:()=>Ij,readBearerToken:()=>l7,probeHubServer:()=>g1,probeHubConnection:()=>LV,prewarmFileIndex:()=>TZ,prewarmDetachedHubServer:()=>a9,prepareRemoteConfigCoreIntegration:()=>zX,parseWorkflowConfigFromMarkdown:()=>K5,parseUserCommandEnvelope:()=>PI,parseSkillConfigFromMarkdown:()=>H5,parseSettings:()=>FQ,parseRuleConfigFromMarkdown:()=>G5,parsePluginSource:()=>M7,parseMcpInstallArgs:()=>r5,parseHookEventPayload:()=>D4,parseConfiguredAgentConfig:()=>I5,normalizeWorkspacePath:()=>C1,normalizeUserInput:()=>wI,normalizeSdkError:()=>CI,normalizeRuntimeCapabilities:()=>M0,normalizeProviderId:()=>l8,normalizeOAuthProvider:()=>XY,normalizeHubWebSocketUrl:()=>G$,noopBasicLogger:()=>NI,migrateLegacyProviderSettings:()=>Q9,mergeRulesForSystemPrompt:()=>e2,mergeAgentHooks:()=>M2,marketplaceEntryKey:()=>uX,makeTeamTaskSubSessionId:()=>I6,makeSubSessionId:()=>w8,loginOpenAICodex:()=>$6,loginOcaOAuth:()=>W6,loginLocalProvider:()=>YY,loginClineOAuth:()=>t4,loginAndSaveProviderOAuthCredentials:()=>X6,loginAndSaveLocalProviderOAuthCredentials:()=>VY,loadOpenTelemetryAdapter:()=>JI,loadMcpSettingsFile:()=>N2,loadLlmsConfigFromFile:()=>TY,loadConfiguredAgentConfigs:()=>Y4,loadAgentPluginsFromPathsWithDiagnostics:()=>z2,loadAgentPluginsFromPaths:()=>gZ,loadAgentPluginFromPath:()=>p6,listSessionHistoryFromBackend:()=>rJ,listPluginToolsWithDiagnostics:()=>xQ,listPluginTools:()=>R5,listMcpServerOAuthStatuses:()=>q5,listLocalProviders:()=>ZY,listHookConfigFiles:()=>N$,isToolDisabledGlobally:()=>gj,isTelemetryOptedOutGlobally:()=>g9,isSessionNotFoundError:()=>I1,isRuleEnabled:()=>f9,isPluginDisabledGlobally:()=>vj,isOfficialPluginSlug:()=>q7,isOAuthProvider:()=>Q2,isMarketplaceSkillInstalled:()=>F7,isLocalHubOrigin:()=>MY,isLocalHubHostName:()=>p7,isHubReconnectableTransportError:()=>bW,isHubCommandTimeoutError:()=>o9,isDiscoveryFilePresent:()=>$V,isClineOrgIndividualInferenceSubscriptionMessage:()=>AI,isClineOrgIndividualInferenceSubscriptionError:()=>FI,isClineNotSubscribedMessage:()=>KI,isClineNotSubscribedError:()=>GI,isClineAccountActionRequest:()=>LQ,isBuiltInProviderId:()=>GJ,isAutoUpdateEnabledGlobally:()=>hj,installPlugin:()=>aX,installMcpServer:()=>CX,identifyAccount:()=>b1,hasMcpSettingsFile:()=>s1,getValidOpenAICodexCredentials:()=>Z6,getValidOcaCredentials:()=>J6,getValidClineCredentials:()=>e4,getProviderOAuthCredentialsFromSettings:()=>Y6,getProviderConfigFields:()=>HY,getProviderConfig:()=>QQ,getProviderAuthStorageId:()=>aW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>U8,getMcpServerOAuthState:()=>w2,getMarketplaceSkillCandidates:()=>t5,getLocalProviderModels:()=>QY,getLiveModelsCatalog:()=>d8,getGlobalMarketplaceSkillPaths:()=>e5,getFileIndex:()=>d1,getCurrentContextSize:()=>I3,getCoreHeadlessToolNames:()=>k6,getCoreDefaultEnabledToolIds:()=>bZ,getCoreBuiltinToolCatalog:()=>f2,getCoreAcpToolNames:()=>hZ,getClinePassSubscriptionUrl:()=>HI,getClineOrgIndividualInferenceSubscriptionMessage:()=>VI,getClineNotSubscribedMessage:()=>BI,getClineDefaultSystemPrompt:()=>fI,generateWorkspaceInfoWithDiagnostics:()=>S4,generateWorkspaceInfo:()=>$8,formatRulesForSystemPrompt:()=>t2,formatProviderOAuthApiKey:()=>oW,formatDisplayUserInput:()=>EI,findInstalledGlobalMarketplaceSkillName:()=>$9,findCheckpointForRun:()=>A4,filterExtensionToolRegistrations:()=>c9,filterDisabledTools:()=>y1,filterDisabledPluginPaths:()=>v9,fetchClineRecommendedModels:()=>_Y,executeClineAccountAction:()=>_Q,ensureHubWebSocketServer:()=>r7,ensureHubServer:()=>VU,ensureDetachedHubServer:()=>VV,ensureCustomProvidersLoaded:()=>P7,ensureCompatibleLocalHubUrl:()=>$2,enrichPromptWithMentions:()=>T8,emptyWorkspaceManifest:()=>qI,emptyStoredProviderSettings:()=>S$,discoverPluginModulePaths:()=>n6,disablePluginMcpServersInSettings:()=>bX,deriveSubsessionStatus:()=>g6,deleteLocalProvider:()=>h7,defineLlmsConfig:()=>zY,createWorkflowsConfigDefinition:()=>L5,createUserInstructionConfigService:()=>b$,createToolPoliciesWithPreset:()=>qZ,createTool:()=>OI,createTeamName:()=>Y7,createSubprocessHooks:()=>eQ,createSpawnAgentTool:()=>q$,createSkillsConfigDefinition:()=>U5,createShellTool:()=>M6,createShellExecutor:()=>j2,createSessionHost:()=>K4,createRuntimeHost:()=>K4,createRulesConfigDefinition:()=>D5,createRemoteConfigSessionMessagesArtifactUploader:()=>_X,createProviderConfig:()=>KJ,createOpenTelemetryTelemetryService:()=>r4,createOAuthClientCallbacks:()=>n8,createMcpTools:()=>Q4,createLocalHubScheduleRuntimeHandlers:()=>YU,createLlmsSdk:()=>qY,createInitialAccumulatedUsage:()=>D0,createInMemoryHubOwnerContext:()=>ej,createHubServerUrl:()=>Z1,createHubAuthToken:()=>d9,createHookConfigFileHooks:()=>t6,createHookConfigFileExtension:()=>u8,createHookAuditHooks:()=>c8,createDisabledMcpToolPolicy:()=>M5,createDisabledMcpToolPolicies:()=>IQ,createDelegatedAgentConfigProvider:()=>T$,createDelegatedAgent:()=>O$,createDefaultToolsWithPreset:()=>MZ,createDefaultTools:()=>D$,createDefaultShellExecutor:()=>P6,createDefaultMcpServerClientFactory:()=>$4,createDefaultExecutors:()=>O8,createCoreSettingsService:()=>y2,createCoreSessionSnapshot:()=>U1,createContributionRegistry:()=>TI,createContextCompactionPrepareTurn:()=>F6,createConfiguredTelemetryService:()=>h1,createConfiguredTelemetryHandle:()=>j8,createConfiguredAgentTools:()=>j4,createClineTelemetryServiceMetadata:()=>zI,createClineTelemetryServiceConfig:()=>_I,createCheckpointComparePlan:()=>aQ,createBuiltinTools:()=>U2,createAgentTeamsTools:()=>A2,createAgentRuntime:()=>hI,createAgentHooksExtension:()=>m8,connectToHub:()=>e9,completeClineDeviceAuth:()=>pW,compareCheckpointToWorkspace:()=>d5,collectPluginMcpOAuthCandidates:()=>R7,clearPrivateModelsCatalogCache:()=>BJ,clearLiveModelsCatalogCache:()=>VJ,clearHubDiscovery:()=>S0,captureWorkspacePathResolved:()=>Nj,captureWorkspaceInitialized:()=>T9,captureWorkspaceInitError:()=>O9,captureToolUsage:()=>W8,captureTokenUsage:()=>R9,captureTaskRestarted:()=>M9,captureTaskCreated:()=>q9,captureTaskCompleted:()=>g4,captureSubagentExecution:()=>v4,captureSkillUsed:()=>N9,captureSdkError:()=>LI,captureProviderConfigured:()=>Cj,captureProviderApiError:()=>m4,captureModeSwitch:()=>E9,captureMentionUsed:()=>w9,captureMentionSearchResults:()=>S9,captureMentionFailed:()=>P9,captureHookDiscovery:()=>y9,captureExtensionActivated:()=>Ej,captureDiffEditFailure:()=>C9,captureConversationTurnEvent:()=>Q8,captureCompactionSkipped:()=>k9,captureCompactionExecuted:()=>h9,captureAuthSucceeded:()=>P1,captureAuthStarted:()=>w1,captureAuthLoggedOut:()=>V$,captureAuthFailed:()=>S1,captureAgentUnexpectedReasoningTokens:()=>Rj,captureAgentTeamCreated:()=>b9,captureAgentCreated:()=>B$,buildWorkspaceMetadata:()=>b4,buildTeamProgressSummary:()=>V4,buildSdkErrorProperties:()=>UI,buildRemoteConfigSessionBlobUploadMetadata:()=>Z7,buildMcpInstallTransport:()=>j7,buildDelegatedAgentConfig:()=>K2,buildConfiguredAgentToolName:()=>x5,buildConfiguredAgentToolDescriptors:()=>g5,buildCheckpointWorkspaceDiff:()=>sQ,bootstrapAgentTeams:()=>C8,authorizeMcpServerOAuth:()=>bQ,addLocalProvider:()=>$Y,accumulateUsageTotals:()=>f0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>B5,UnifiedConfigFileWatcher:()=>E2,ToolPresets:()=>u0,TelemetryService:()=>X8,TelemetryLoggerSink:()=>p4,TEAM_TOOL_NAMES:()=>N8,SubprocessSandbox:()=>k8,StructuredCommandInputSchema:()=>J2,StoredProviderSettingsSchema:()=>r8,StoredProviderSettingsEntrySchema:()=>fQ,SqliteTeamStore:()=>c2,SqliteSessionStore:()=>L1,SessionVersioningService:()=>c$,SessionVersioningError:()=>k0,SessionSource:()=>T0,SessionNotFoundError:()=>k1,SapSettingsSchema:()=>HQ,SKILLS_CONFIG_DIRECTORY_NAME:()=>V5,SESSION_STATUSES:()=>m6,SESSION_NOT_FOUND_ERROR_CODE:()=>s$,SDK_ERROR_TELEMETRY_EVENT:()=>bI,RpcClineAccountService:()=>Y5,RemoteRuntimeHost:()=>X4,ReasoningSettingsSchema:()=>YQ,RULES_CONFIG_DIRECTORY_NAME:()=>EQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>Q7,ProviderSettingsSchema:()=>w$,ProviderSettingsManager:()=>q1,ProviderProtocolSchema:()=>WQ,ProviderIdSchema:()=>W5,ProviderClientSchema:()=>JQ,OpenTelemetryProvider:()=>Y8,OcaSettingsSchema:()=>GQ,OPENAI_COMPATIBLE_PROVIDERS:()=>$5,NodeHubClient:()=>W1,NoOpFeatureFlagsProvider:()=>g2,NativeHubTransportAdapter:()=>Y9,ModelCatalogSettingsSchema:()=>KQ,McpSettingsUpdateSkippedError:()=>o8,McpSettingsMutatorPurityError:()=>y$,McpSettingsLockTimeoutError:()=>h$,MAX_COMMAND_OUTPUT_CHARS:()=>c1,LocalRuntimeHost:()=>T1,Llms:()=>XI,InMemoryWorkspaceManager:()=>i8,InMemoryMcpManager:()=>b2,HubUIClient:()=>gW,HubTransportError:()=>R0,HubSessionClient:()=>xW,HubServerTransport:()=>C4,HubScheduleService:()=>Z8,HubScheduleCommandService:()=>o2,HubRuntimeHost:()=>o1,HubCommandError:()=>H8,HookEventPayloadSchema:()=>tQ,HookEventNameSchema:()=>oQ,HookConfigFileName:()=>v8,HOOK_CONFIG_FILE_EVENT_MAP:()=>s6,HOOKS_CONFIG_DIRECTORY_NAME:()=>lZ,GlobalSettingsSchema:()=>c4,GcpSettingsSchema:()=>VQ,FileTeamPersistenceStore:()=>x7,FeatureFlagsService:()=>x2,FeatureFlagDefaultValue:()=>RI,FEATURE_FLAGS:()=>MI,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>d7,DefaultToolNames:()=>U0,DefaultRuntimeBuilder:()=>T4,DefaultLlmsSdk:()=>W9,DEFAULT_MODELS_CATALOG_URL:()=>tZ,DEFAULT_HUB_PORT:()=>MW,DEFAULT_HUB_PATHNAME:()=>RW,DEFAULT_HUB_HOST:()=>qW,CoreSettingsService:()=>k$,CoreSessionService:()=>z1,ContributionRegistry:()=>DI,ClineOrgIndividualInferenceSubscriptionError:()=>jI,ClineNotSubscribedError:()=>YI,ClineCore:()=>l5,ClineAccountService:()=>X5,ChatViewStateSchema:()=>UY,ChatSummarySchema:()=>u7,ChatSessionStatusSchema:()=>m7,ChatSessionConfigSchema:()=>g7,ChatMessageSchema:()=>c7,ChatMessageRoleSchema:()=>v7,CORE_TELEMETRY_EVENTS:()=>m,CORE_BUILD_VERSION:()=>DY,BrowserWebSocketHubAdapter:()=>X9,BUILT_IN_PROVIDER_IDS:()=>HJ,BUILT_IN_PROVIDER:()=>Q5,AzureSettingsSchema:()=>BQ,AwsSettingsSchema:()=>jQ,AuthSettingsSchema:()=>XQ,AgentTeamsRuntime:()=>k2,AgentTeam:()=>G4,Agent:()=>yI,ALL_DEFAULT_TOOL_NAMES:()=>X$});R(M,co);import*as XI from"@cline/llms";import{ClineNotSubscribedError as YI,ClineOrgIndividualInferenceSubscriptionError as jI,getClineOrgIndividualInferenceSubscriptionMessage as VI,getClineNotSubscribedMessage as BI,getClinePassSubscriptionUrl as HI,isClineNotSubscribedError as GI,isClineNotSubscribedMessage as KI,isClineOrgIndividualInferenceSubscriptionError as FI,isClineOrgIndividualInferenceSubscriptionMessage as AI}from"@cline/llms";import{buildClineSystemPrompt as fI,buildSdkErrorProperties as UI,ContributionRegistry as DI,captureSdkError as LI,createClineTelemetryServiceConfig as _I,createClineTelemetryServiceMetadata as zI,createContributionRegistry as TI,createTool as OI,emptyWorkspaceManifest as qI,FEATURE_FLAGS as MI,FeatureFlagDefaultValue as RI,formatDisplayUserInput as EI,noopBasicLogger as NI,normalizeSdkError as CI,normalizeUserInput as wI,parseUserCommandEnvelope as PI,registerDisposable as SI,SDK_ERROR_TELEMETRY_EVENT as bI}from"@cline/shared";import"@cline/shared/storage";var VK={};N(VK,{isClineAccountActionRequest:()=>LQ,executeClineAccountAction:()=>_Q,RpcClineAccountService:()=>Y5,ClineAccountService:()=>X5});function fN($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function jK($,Z,Q){let W=fN(Q);if(W)return W;let J=Z.trim();if(J){let X=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${X}`}return`Cline account request failed with status ${$}`}class X5{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let Z=$.apiBaseUrl.trim();if(!Z)throw Error("apiBaseUrl is required");this.apiBaseUrl=Z,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let Z=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(Z)}/balance`)}async fetchUsageTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/usages`)).items??[]}async fetchPaymentTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let Z=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)Z.searchParams.set("type",$.type);return this.request(`${Z.pathname}${Z.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}`)}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/balance`)}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(Z,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let Z=$?.trim();if(Z)return Z;let W=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(W)return W;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let Y=(await this.fetchUserOrganizations()).find((j)=>j.organizationId===$)?.memberId;if(!Y?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return Y}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let W=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,X=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let Y=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...W??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:J.signal});if(Y.status===204||Z?.expectNoContent){if(!Y.ok)throw Error(`Cline account request failed with status ${Y.status}`);return}let j=await Y.text(),V;if(j.trim())try{V=JSON.parse(j)}catch{if(!Y.ok)throw Error(jK(Y.status,j,void 0));throw Error("Cline account response was not valid JSON")}if(!Y.ok)throw Error(jK(Y.status,j,V));if(typeof V==="object"&&V!==null){let B=V;if(typeof B.success==="boolean"){if(!B.success)throw Error(B.error||"Cline account request failed");return B.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(X)}}}function LQ($){return $.action==="clineAccount"}async function _Q($,Z){switch($.operation){case"fetchMe":return Z.fetchMe();case"fetchBalance":return Z.fetchBalance($.userId);case"fetchUsageTransactions":return Z.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return Z.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return Z.fetchUserOrganizations();case"fetchOrganizationBalance":return Z.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return Z.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await Z.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return Z.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class Y5{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:Z})}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:Z,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var BK={};N(BK,{createOAuthClientCallbacks:()=>n8});function n8($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((W)=>{$.onOpenUrlError?.({url:Z,error:W})})}catch(W){$.onOpenUrlError?.({url:Z,error:W})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var wA={};N(wA,{ClineCore:()=>l5});function HK($){if($===!0)return{};if(!$)return;return $}function GK($){if($==="user")return"global";return $}class UJ{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let Z=this.getService().ingestEvent($);return{event:Z.event,duplicate:Z.duplicate,matchedSpecIds:Z.matchedSpecs.map((Q)=>Q.specId),queuedRuns:Z.queuedRuns,suppressions:Z.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function KK($){let{host:Z}=$;return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||T0.CLI,interactive:!1,config:{providerId:l8(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:LN(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Q.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Q,W){let J=await Z.runTurn({sessionId:Q,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((X)=>X.content),delivery:W.delivery});if(!J)throw Error("ClineCore automation runtime returned no result");return{result:DN(J)}},async abortSession(Q){return await Z.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}function zQ($){let Z=UN($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),W=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),J=$.context?.logger??$.logger,X=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!W&&!J&&!X)return $.context;return{...$.context??{},...Q?{client:Q}:{},...W?{user:W}:{},...J?{logger:J}:{},...X?{telemetry:X}:{},...Z?{automation:Z}:{}}}function UN($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function DN($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function LN($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var AF={};N(AF,{createCoreSettingsService:()=>y2,CoreSettingsService:()=>k$});import{existsSync as N5,readFileSync as Ww}from"node:fs";import{basename as bJ,dirname as jF,extname as Jw,isAbsolute as HF,join as Xw,relative as GF,resolve as VF}from"node:path";var RK={};N(RK,{resolveWorkflowsConfigSearchPaths:()=>f5,resolveSkillsConfigSearchPaths:()=>F5,resolveRulesConfigSearchPaths:()=>A5,parseWorkflowConfigFromMarkdown:()=>K5,parseSkillConfigFromMarkdown:()=>H5,parseRuleConfigFromMarkdown:()=>G5,createWorkflowsConfigDefinition:()=>L5,createUserInstructionConfigService:()=>b$,createSkillsConfigDefinition:()=>U5,createRulesConfigDefinition:()=>D5,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>B5,UnifiedConfigFileWatcher:()=>E2,SKILLS_CONFIG_DIRECTORY_NAME:()=>V5,RULES_CONFIG_DIRECTORY_NAME:()=>EQ});import{createHash as _N}from"node:crypto";import{watch as zN}from"node:fs";import{readdir as TN,readFile as ON}from"node:fs/promises";import{join as qN}from"node:path";function MN($){return _N("sha1").update($).digest("hex")}function fK($){return Boolean($&&typeof $==="object"&&"code"in $)}function FK($){return fK($)&&$.code==="ENOENT"}function AK($){return fK($)&&($.code==="EACCES"||$.code==="EPERM")}class E2{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,Z){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=Z?.debounceMs??75,this.emitParseErrors=Z?.emitParseErrors??!1;for(let Q of $){if(this.definitionsByType.has(Q.type))throw Error(`Duplicate unified config definition type '${Q.type}'.`);this.definitionsByType.set(Q.type,Q),this.recordsByType.set(Q.type,new Map),this.discoveredDirectoriesByType.set(Q.type,new Set);for(let W of Q.directories){let J=this.baseTypesByDirectory.get(W);if(J)J.add(Q.type);else this.baseTypesByDirectory.set(W,new Set([Q.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let Z=this.definitionsByType.get($);if(!Z)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(Z)})}getSnapshot($){let Z=this.recordsByType.get($);return new Map([...Z?.entries()??[]].map(([Q,W])=>[Q,{...W}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([W,J])=>[W,{...J}])));return $}emit($){for(let Z of this.listeners)Z($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[Z,Q]of this.watchersByDirectory.entries()){if($.has(Z))continue;Q.close(),this.watchersByDirectory.delete(Z)}this.watchedTypesByDirectory=$;for(let Z of $.keys()){if(this.watchersByDirectory.has(Z))continue;try{let Q=zN(Z,()=>{let W=this.watchedTypesByDirectory.get(Z);if(!W)return;for(let J of W)this.pendingTypes.add(J);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(W)=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let X of J)this.emit({kind:"error",type:X,error:W,filePath:Z})})}catch(Q){if(!FK(Q)&&!AK(Q)){let W=$.get(Z);if(!W)continue;for(let J of W)this.emit({kind:"error",type:J,error:Q,filePath:Z})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let Z of $){let Q=this.definitionsByType.get(Z);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:Z,discoveredDirectories:Q}=await this.loadDefinition($),W=this.recordsByType.get($.type)??new Map;for(let[J,X]of W.entries()){if(Z.has(J))continue;this.emit({kind:"remove",type:$.type,id:J,filePath:X.filePath})}for(let[J,X]of Z.entries()){let Y=W.get(J);if(Y&&Y.filePath===X.filePath&&Y.fingerprint===X.fingerprint)continue;this.emit({kind:"upsert",record:{type:X.type,id:J,item:X.item,filePath:X.filePath}})}if(this.recordsByType.set($.type,Z),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let Z=new Map,Q=new Set;for(let W of $.directories){Q.add(W);let J=$.discoverFiles?await $.discoverFiles(W):await this.readDirectoryFileCandidates(W);for(let X of J){let{fileName:Y,filePath:j}=X;if(Q.add(X.directoryPath),$.includeFile&&!$.includeFile(Y,j))continue;try{let V=await ON(j,"utf8"),B={type:$.type,directoryPath:X.directoryPath,fileName:Y,filePath:j,content:V},H=$.parseFile(B),G=$.resolveId(H,B).trim();if(!G)continue;Z.set(G,{type:$.type,id:G,item:H,filePath:j,fingerprint:MN(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:j})}}}return{records:Z,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[Z,Q]of this.baseTypesByDirectory.entries())$.set(Z,new Set(Q));for(let[Z,Q]of this.discoveredDirectoriesByType.entries())for(let W of Q){let J=$.get(W);if(J)J.add(Z);else $.set(W,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await TN($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:qN($,Q.name)})).sort((Q,W)=>Q.fileName.localeCompare(W.fileName))}catch(Z){if(FK(Z)||AK(Z))return[];throw Z}}}import{readdir as LJ,readFile as RN,stat as DJ}from"node:fs/promises";import{basename as a1,dirname as EN,extname as OQ,join as y0,resolve as j5}from"node:path";import{AGENTS_RULES_FILE_NAME as UK,RULES_CONFIG_DIRECTORY_NAME as EQ,resolveGlobalAgentsRulesPath as NN,resolveRulesConfigSearchPaths as CN,resolveSkillsConfigSearchPaths as wN,resolveWorkflowsConfigSearchPaths as PN,SKILLS_CONFIG_DIRECTORY_NAME as V5,WORKFLOWS_CONFIG_DIRECTORY_NAME as B5}from"@cline/shared/storage";import SN from"yaml";var TQ="SKILL.md",bN="managed.json",yN=new Set([".md",".markdown",".txt"]);function _J($){return $.trim().toLowerCase()}function a8($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function qQ($){return yN.has(OQ($).toLowerCase())}function DK($){let Z=[],Q=new Set;for(let W of $){let J=j5(W);if(Q.has(J))continue;Q.add(J),Z.push(W)}return Z}function hN($){let Z=[...$?.directories??F5($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...SG({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return DK(Z)}async function zJ($){try{let Z=await LJ($,{withFileTypes:!0}),Q=[];for(let W of Z){if(!W.isDirectory())continue;let J=y0($,W.name),X=y0(J,bN);try{let Y=await RN(X,"utf8"),j=JSON.parse(Y);if(j&&typeof j==="object")Q.push(J)}catch(Y){if(a8(Y))continue;if(Y?.name==="SyntaxError")continue;throw Y}}return Q.sort((W,J)=>W.localeCompare(J))}catch(Z){if(a8(Z))return[];throw Z}}function TJ($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,W,J]=Q;try{let X=SN.parse(W);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:J,hadFrontmatter:!0}}catch(X){let Y=X instanceof Error?X.message:String(X);return{data:{},body:$,hadFrontmatter:!0,parseError:Y}}}function MQ($,Z,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${Z}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${Z}' must be a string.`);let W=$.trim();if(!W&&Q)throw Error(`Frontmatter field '${Z}' cannot be empty.`);return W||void 0}function s8($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function kN($,Z){if(a1($.filePath).toLowerCase()!==UK.toLowerCase())return a1($.filePath,OQ($.filePath));if(Z&&j5($.filePath)===j5(Z,UK))return"Workspace AGENTS.md";if(j5($.filePath)===j5(NN()))return"Global AGENTS.md";return a1($.filePath,OQ($.filePath))}function H5($,Z){let{data:Q,body:W,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in skill file.");let j=MQ(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing skill name.");return{name:j,description:MQ(Q.description,"description",!1),disabled:s8(Q.disabled,"disabled")??(s8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function G5($,Z){let{data:Q,body:W,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in rule file.");let Y=MQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing rule name.");return{name:Y,disabled:s8(Q.disabled,"disabled")??(s8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function K5($,Z){let{data:Q,body:W,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in workflow file.");let Y=MQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing workflow name.");return{name:Y,disabled:s8(Q.disabled,"disabled")??(s8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function F5($){return wN($)}function A5($){return CN($)}function f5($){return PN($)}async function LK($){if(a1($)===".cline"){let Z=await zJ($);return(await Promise.all(Z.map((W)=>LK(y0(W,V5))))).flat()}try{let Z=await LJ($,{withFileTypes:!0}),Q=[];for(let W of Z){if(W.isFile()&&W.name===TQ){Q.push({directoryPath:$,fileName:W.name,filePath:y0($,W.name)});continue}let J=y0($,W.name);if(W.isDirectory()||W.isSymbolicLink()&&await DJ(J).then((Y)=>Y.isDirectory()).catch((Y)=>{if(a8(Y))return!1;throw Y}))Q.push({directoryPath:J,fileName:TQ,filePath:y0(J,TQ)})}return Q}catch(Z){if(a8(Z))return[];throw Z}}async function RQ($){if(a1($)===".cline"){let Z=await zJ($);return(await Promise.all(Z.map((W)=>RQ(y0(W,"rules.md"))))).flat()}try{if((await DJ($)).isFile())return[{directoryPath:EN($),fileName:a1($),filePath:$}]}catch(Z){if(!a8(Z))throw Z}try{let Q=(await LJ($,{withFileTypes:!0})).filter((J)=>J.isFile()&&qQ(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:y0($,J.name)})),W=y0($,"AGENTS.md");try{if((await DJ(W)).isFile()){if(!Q.some((Y)=>Y.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:W})}}catch{}return Q}catch(Z){if(a8(Z))return[];throw Z}}async function IN($){if(a1($)===".cline"){let Z=await zJ($);return(await Promise.all(Z.map((W)=>RQ(y0(W,B5))))).flat()}return RQ($)}function U5($){let Z=hN($),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?DK([...Z,Q]):Z,discoverFiles:LK,includeFile:(W)=>W===TQ,parseFile:(W)=>H5(W.content,a1(W.directoryPath)),resolveId:(W)=>_J(W.name)}}function D5($){let Z=$?.directories??A5($?.workspacePath),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:RQ,includeFile:(W,J)=>W===".clinerules"||qQ(W)||qQ(J),parseFile:(W)=>G5(W.content,kN(W,$?.workspacePath)),resolveId:(W)=>_J(W.name)}}function L5($){let Z=$?.directories??f5($?.workspacePath),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:IN,includeFile:(W)=>qQ(W),parseFile:(W)=>K5(W.content,a1(W.filePath,OQ(W.filePath))),resolveId:(W)=>_J(W.name)}}function _K($){let Z=[U5($?.skills),D5($?.rules),L5($?.workflows)];return new E2(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as zK}from"@cline/shared";function xN($,Z){if($.description?.trim())return zK($.description,".");if(Z==="workflow")return;return zK($.instructions,".")}function gN($){return $.disabled!==!0}function TK($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,W])=>({id:Q,record:W})).filter(({record:Q})=>gN(Q.item)).map(({id:Q,record:W})=>({id:Q,name:W.item.name,instructions:W.item.instructions,description:xN(W.item,Z),kind:Z})).sort((Q,W)=>Q.name.localeCompare(W.name))}function _5($){let Z=new Map;for(let Q of[...TK($,"workflow"),...TK($,"skill")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,W)=>Q.name.localeCompare(W.name))}function OK($,Z){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let W=Q[1];if(!W)return $;let J=W.length+1,X=$.slice(J),Y=_5(Z).find((j)=>j.name===W);return Y?`${Y.instructions}${X}`:$}function NQ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function mN($){if(!$||$.length===0)return;let Z=$.map(NQ).filter((Q)=>Q.length>0);return Z.length>0?new Set(Z):void 0}function vN($,Z,Q){if(!Q)return!0;let W=NQ($),J=NQ(Z),X=W.includes(":")?W.split(":").at(-1)??W:W,Y=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(W)||Q.has(J)||Q.has(X)||Q.has(Y)}function z5($,Z){let Q=mN(Z);return[...$.getSnapshot("skill").entries()].map(([J,X])=>{let Y=X.item;return{id:J,name:Y.name.trim(),description:Y.description?.trim(),disabled:Y.disabled===!0,skill:Y}}).filter((J)=>vN(J.id,J.name,Q))}function cN($,Z){return z5($,Z).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,W)=>Q.localeCompare(W))}function uN($,Z,Q){let W=NQ(Z);if(!W)return{error:"Missing skill name."};let J=z5($,Q),X=J.find((H)=>H.id===W);if(X){let{skill:H}=X;if(H.disabled===!0)return{error:`Skill "${H.name}" is configured but disabled.`};return{id:X.id,skill:H}}let Y=W.includes(":")?W.split(":").at(-1)??W:W,j=J.filter(({id:H})=>{if(H===Y)return!0;return H.endsWith(`:${Y}`)}),V=j.filter(({skill:H})=>H.disabled!==!0);if(V.length===1){let{id:H,skill:G}=V[0];return{id:H,skill:G}}if(V.length>1)return{error:`Skill "${Z}" is ambiguous. Use one of: ${V.map(({id:H})=>H).join(", ")}`};if(j.length===1){let{skill:H}=j[0];return{error:`Skill "${H.name}" is configured but disabled.`}}if(j.length>1)return{error:`Skill "${Z}" is ambiguous, and all matches are disabled: ${j.map(({id:H})=>H).join(", ")}`};let B=cN($,Q);return{error:B.length>0?`Skill "${Z}" not found. Available skills: ${B.join(", ")}`:"No skills are currently available."}}function OJ($,Z=Promise.resolve(),Q){let W=new Set,J=async(X,Y)=>{await Z;let j=uN($,X,Q);if("error"in j)return j.error;let{id:V,skill:B}=j;if(W.has(V))return`Skill "${B.name}" is already running.`;W.add(V);try{let H=Y?.trim(),G=H?`
479
+ <command-args>${H}</command-args>`:"",K=B.description?.trim()?`Description: ${B.description.trim()}
480
+
481
+ `:"";return`<command-name>${B.name}</command-name>${G}
482
482
  <command-instructions>
483
- ${K}${H.instructions}
483
+ ${K}${B.instructions}
484
484
  </command-instructions>`}finally{W.delete(V)}};return Object.defineProperty(J,"configuredSkills",{get:()=>z5($,Q).map(({skill:X,...Y})=>Y),enumerable:!0,configurable:!1}),J}function qK($){let Z=$.watcherReady??Promise.resolve();return{name:"cline-user-instructions",manifest:{capabilities:[$.includeRules?"rules":void 0,$.registerSkillsTool?"tools":void 0,$.includeSkills||$.includeWorkflows?"commands":void 0].filter((W)=>Boolean(W))},async setup(W){if(await Z,$.includeRules)W.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>WW($.watcher)});if($.registerSkillsTool)W.registerTool(V2(OJ($.watcher,Z,$.allowedSkillNames)));for(let J of _5($.watcher).filter((X)=>X.kind==="skill"&&$.includeSkills||X.kind==="workflow"&&$.includeWorkflows))W.registerCommand({name:J.name,description:J.description,handler:(X)=>{let Y=X.trim();return Y?`${J.instructions}
485
485
 
486
- ${Y}`:J.instructions}})}}}class MK{watcher;ready;stopped=!1;constructor($){this.watcher=_K($)}start(){if(!this.ready)this.stopped=!1,this.ready=this.watcher.start();return this.ready}stop(){if(this.stopped)return;this.stopped=!0,this.watcher.stop(),this.ready=void 0}async refreshType($){await this.start(),await this.watcher.refreshType($)}listRecords($){return[...this.watcher.getSnapshot($).entries()].map(([Z,Q])=>({type:$,id:Z,filePath:Q.filePath,item:Q.item}))}listRuntimeCommands(){return _5(this.watcher)}resolveRuntimeSlashCommand($){return OK($,this.watcher)}hasConfiguredSkills($){return z5(this.watcher,$).some((Z)=>!Z.disabled)}createSkillsExecutor($){return OJ(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return qK({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function b$($){return new MK($)}import{readFile as pN,writeFile as rN}from"node:fs/promises";import NK from"yaml";function iN($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,W,J]=Q,X=NK.parse(W);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:J,hadFrontmatter:!0}}function EK($,Z){return`---
486
+ ${Y}`:J.instructions}})}}}class MK{watcher;ready;stopped=!1;constructor($){this.watcher=_K($)}start(){if(!this.ready)this.stopped=!1,this.ready=this.watcher.start();return this.ready}stop(){if(this.stopped)return;this.stopped=!0,this.watcher.stop(),this.ready=void 0}async refreshType($){await this.start(),await this.watcher.refreshType($)}listRecords($){return[...this.watcher.getSnapshot($).entries()].map(([Z,Q])=>({type:$,id:Z,filePath:Q.filePath,item:Q.item}))}listRuntimeCommands(){return _5(this.watcher)}resolveRuntimeSlashCommand($){return OK($,this.watcher)}hasConfiguredSkills($){return z5(this.watcher,$).some((Z)=>!Z.disabled)}createSkillsExecutor($){return OJ(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return qK({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function b$($){return new MK($)}import{readFile as dN,writeFile as lN}from"node:fs/promises";import NK from"yaml";function pN($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,W,J]=Q,X=NK.parse(W);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:J,hadFrontmatter:!0}}function EK($,Z){return`---
487
487
  ${NK.stringify($).trimEnd()}
488
488
  ---
489
- ${Z}`}function nN($,Z){let{data:Q,body:W,hadFrontmatter:J}=iN($);if(!J&&Z)return $;if(Z){if(delete Q.disabled,Q.enabled===!1)delete Q.enabled;if(Object.keys(Q).length===0)return W;return EK(Q,W)}return Q.disabled=!0,EK(Q,W)}async function wK({filePath:$,enabled:Z}){let Q=await pN($,"utf8"),W=nN(Q,Z);return await rN($,W),{filePath:$,enabled:Z,disabled:!Z}}var WF={};N(WF,{updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>t8,updateMcpServerOAuthStateAsync:()=>O5,updateMcpServerOAuthState:()=>P2,setMcpServerDisabled:()=>w2,resolvePluginMcpServerRegistrations:()=>hQ,resolveMcpServerRegistrations:()=>p0,resolveDefaultMcpSettingsPath:()=>Z0,registerMcpServersFromSettingsFile:()=>S2,normalizePluginMcpServerRegistration:()=>SJ,loadMcpSettingsFile:()=>N2,listMcpServerOAuthStatuses:()=>q5,hasMcpSettingsFile:()=>s1,getMcpServerOAuthState:()=>C2,createMcpTools:()=>Q4,createDisabledMcpToolPolicy:()=>M5,createDisabledMcpToolPolicies:()=>IQ,createDefaultMcpServerClientFactory:()=>$4,authorizeMcpServerOAuth:()=>bQ,McpSettingsUpdateSkippedError:()=>o8,McpSettingsMutatorPurityError:()=>y$,McpSettingsLockTimeoutError:()=>h$,InMemoryMcpManager:()=>b2});import{spawn as yw}from"node:child_process";import{StringDecoder as oK}from"node:string_decoder";import{UnauthorizedError as iK}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as hw}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as qw}from"node:crypto";import{UnauthorizedError as Mw}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as Rw}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as Ew}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as Nw}from"@modelcontextprotocol/sdk/client/streamableHttp.js";CQ();var ww="/mcp/oauth/callback",Cw=[1456,1457,1458],Pw=300000;function Sw($){if($ instanceof Error){let Z=$.message.trim();if(Z.length>0)return Z}return String($)}function bw($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function SQ($){let Z={};try{Z=C2($.serverName,{filePath:$.settingsPath})??{}}catch{Z={}}let Q,W,J=async(Y)=>{let j=e8(Y(Z))??{};try{Z=P2($.serverName,()=>j,{filePath:$.settingsPath})}catch{Z=j}};return{provider:{get redirectUrl(){return Z.redirectUrl??$.redirectUrl},get clientMetadata(){return bw(Z.redirectUrl??$.redirectUrl)},state:()=>{return W=qw(),W},clientInformation:()=>Z.clientInformation,saveClientInformation:async(Y)=>{await J((j)=>({...j,clientInformation:Y,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>Z.tokens,saveTokens:async(Y)=>{let j=Date.now();await J((V)=>({...V,tokens:Y,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:j}))},redirectToAuthorization:async(Y)=>{Q=Y.toString(),await $.onAuthorizationUrl?.(Q)},saveCodeVerifier:async(Y)=>{await J((j)=>({...j,codeVerifier:Y,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!Z.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return Z.codeVerifier},invalidateCredentials:async(Y)=>{await J((j)=>{if(Y==="all")return{lastError:j.lastError,redirectUrl:j.redirectUrl};return{...j,...Y==="client"?{clientInformation:void 0}:{},...Y==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...Y==="verifier"?{codeVerifier:void 0}:{},...Y==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(Y)=>{await J((j)=>({...j,discoveryState:Y}))},discoveryState:()=>Z.discoveryState},getLastAuthorizationUrl:()=>Q,getLastOAuthState:()=>W,resetInteractiveState:async()=>{await J((Y)=>({...Y,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(Y)=>{await J((j)=>({...j,lastError:Y}))},clearError:async()=>{await J((Y)=>({...Y,lastError:void 0}))}}}function PQ($){let Z=$.registration.transport;if(Z.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let Q=Z.headers?{headers:Z.headers}:void 0;if(Z.type==="sse")return new Ew(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch});return new Nw(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch})}function rK($){return new Rw({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function bQ($){let Z=$.serverName.trim();if(!Z)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Q}=await Promise.resolve().then(() => (CQ(),pK)),W=Q({filePath:$.filePath}).find((V)=>V.name===Z);if(!W)throw Error(`MCP server "${Z}" is not configured.`);if(W.disabled)throw Error(`MCP server "${Z}" is disabled. Enable it before running OAuth.`);if(W.transport.type==="stdio")throw Error(`MCP server "${Z}" uses stdio transport and does not support OAuth browser flow.`);let J=await J1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:Cw,callbackPath:$.callbackPath??ww,timeoutMs:$.timeoutMs??Pw,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!J.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let X=SQ({settingsPath:$.filePath,serverName:Z,redirectUrl:J.callbackUrl,onAuthorizationUrl:async(V)=>{await $.openUrl?.(V)}});await X.resetInteractiveState();let Y=rK($),j;try{let V=PQ({registration:W,oauthProvider:X.provider,fetch:$.fetch});try{return await Y.connect(V),await Y.listTools(),await X.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" is already authorized.`}}catch(H){if(!(H instanceof Mw))throw H;if(!X.getLastAuthorizationUrl())throw Error(`MCP server "${Z}" did not provide an authorization URL.`);let G=await J.waitForCallback();if(!G)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(G.error)throw Error(`OAuth authorization failed: ${G.error}`);if(!G.code)throw Error("OAuth callback did not include an authorization code.");let K=X.getLastOAuthState();if(!K)throw Error(`MCP server "${Z}" did not start an OAuth stateful authorization flow.`);if(G.state!==K)throw Error("OAuth authorization failed: state mismatch.");await V.finishAuth(G.code),j=rK($);let F=PQ({registration:W,oauthProvider:X.provider,fetch:$.fetch});return await j.connect(F),await j.listTools(),await X.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" OAuth authorization completed.`}}}catch(V){let H=Sw(V);throw await X.markError(H),Error(H)}finally{await Y.close().catch(()=>{return}),await j?.close().catch(()=>{return}),J.close()}}var kw="2024-11-05",Iw=5000,xw=1500,nK="http://127.0.0.1:1456/mcp/oauth/callback";function yQ($){return $ instanceof Error?$.message:String($)}function aK($){let Z=Buffer.from(JSON.stringify($),"utf8"),Q=Buffer.from(`Content-Length: ${Z.byteLength}\r
489
+ ${Z}`}function rN($,Z){let{data:Q,body:W,hadFrontmatter:J}=pN($);if(!J&&Z)return $;if(Z){if(delete Q.disabled,Q.enabled===!1)delete Q.enabled;if(Object.keys(Q).length===0)return W;return EK(Q,W)}return Q.disabled=!0,EK(Q,W)}async function CK({filePath:$,enabled:Z}){let Q=await dN($,"utf8"),W=rN(Q,Z);return await lN($,W),{filePath:$,enabled:Z,disabled:!Z}}var WF={};N(WF,{updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>t8,updateMcpServerOAuthStateAsync:()=>O5,updateMcpServerOAuthState:()=>P2,setMcpServerDisabled:()=>C2,resolvePluginMcpServerRegistrations:()=>hQ,resolveMcpServerRegistrations:()=>p0,resolveDefaultMcpSettingsPath:()=>Z0,registerMcpServersFromSettingsFile:()=>S2,normalizePluginMcpServerRegistration:()=>SJ,loadMcpSettingsFile:()=>N2,listMcpServerOAuthStatuses:()=>q5,hasMcpSettingsFile:()=>s1,getMcpServerOAuthState:()=>w2,createMcpTools:()=>Q4,createDisabledMcpToolPolicy:()=>M5,createDisabledMcpToolPolicies:()=>IQ,createDefaultMcpServerClientFactory:()=>$4,authorizeMcpServerOAuth:()=>bQ,McpSettingsUpdateSkippedError:()=>o8,McpSettingsMutatorPurityError:()=>y$,McpSettingsLockTimeoutError:()=>h$,InMemoryMcpManager:()=>b2});import{spawn as SC}from"node:child_process";import{StringDecoder as oK}from"node:string_decoder";import{UnauthorizedError as iK}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as bC}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as TC}from"node:crypto";import{UnauthorizedError as OC}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as qC}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as MC}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as RC}from"@modelcontextprotocol/sdk/client/streamableHttp.js";wQ();var EC="/mcp/oauth/callback",NC=[1456,1457,1458],CC=300000;function wC($){if($ instanceof Error){let Z=$.message.trim();if(Z.length>0)return Z}return String($)}function PC($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function SQ($){let Z={};try{Z=w2($.serverName,{filePath:$.settingsPath})??{}}catch{Z={}}let Q,W,J=async(Y)=>{let j=e8(Y(Z))??{};try{Z=P2($.serverName,()=>j,{filePath:$.settingsPath})}catch{Z=j}};return{provider:{get redirectUrl(){return Z.redirectUrl??$.redirectUrl},get clientMetadata(){return PC(Z.redirectUrl??$.redirectUrl)},state:()=>{return W=TC(),W},clientInformation:()=>Z.clientInformation,saveClientInformation:async(Y)=>{await J((j)=>({...j,clientInformation:Y,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>Z.tokens,saveTokens:async(Y)=>{let j=Date.now();await J((V)=>({...V,tokens:Y,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:j}))},redirectToAuthorization:async(Y)=>{Q=Y.toString(),await $.onAuthorizationUrl?.(Q)},saveCodeVerifier:async(Y)=>{await J((j)=>({...j,codeVerifier:Y,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!Z.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return Z.codeVerifier},invalidateCredentials:async(Y)=>{await J((j)=>{if(Y==="all")return{lastError:j.lastError,redirectUrl:j.redirectUrl};return{...j,...Y==="client"?{clientInformation:void 0}:{},...Y==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...Y==="verifier"?{codeVerifier:void 0}:{},...Y==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(Y)=>{await J((j)=>({...j,discoveryState:Y}))},discoveryState:()=>Z.discoveryState},getLastAuthorizationUrl:()=>Q,getLastOAuthState:()=>W,resetInteractiveState:async()=>{await J((Y)=>({...Y,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(Y)=>{await J((j)=>({...j,lastError:Y}))},clearError:async()=>{await J((Y)=>({...Y,lastError:void 0}))}}}function PQ($){let Z=$.registration.transport;if(Z.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let Q=Z.headers?{headers:Z.headers}:void 0;if(Z.type==="sse")return new MC(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch});return new RC(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch})}function rK($){return new qC({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function bQ($){let Z=$.serverName.trim();if(!Z)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Q}=await Promise.resolve().then(() => (wQ(),pK)),W=Q({filePath:$.filePath}).find((V)=>V.name===Z);if(!W)throw Error(`MCP server "${Z}" is not configured.`);if(W.disabled)throw Error(`MCP server "${Z}" is disabled. Enable it before running OAuth.`);if(W.transport.type==="stdio")throw Error(`MCP server "${Z}" uses stdio transport and does not support OAuth browser flow.`);let J=await J1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:NC,callbackPath:$.callbackPath??EC,timeoutMs:$.timeoutMs??CC,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!J.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let X=SQ({settingsPath:$.filePath,serverName:Z,redirectUrl:J.callbackUrl,onAuthorizationUrl:async(V)=>{await $.openUrl?.(V)}});await X.resetInteractiveState();let Y=rK($),j;try{let V=PQ({registration:W,oauthProvider:X.provider,fetch:$.fetch});try{return await Y.connect(V),await Y.listTools(),await X.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" is already authorized.`}}catch(B){if(!(B instanceof OC))throw B;if(!X.getLastAuthorizationUrl())throw Error(`MCP server "${Z}" did not provide an authorization URL.`);let G=await J.waitForCallback();if(!G)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(G.error)throw Error(`OAuth authorization failed: ${G.error}`);if(!G.code)throw Error("OAuth callback did not include an authorization code.");let K=X.getLastOAuthState();if(!K)throw Error(`MCP server "${Z}" did not start an OAuth stateful authorization flow.`);if(G.state!==K)throw Error("OAuth authorization failed: state mismatch.");await V.finishAuth(G.code),j=rK($);let F=PQ({registration:W,oauthProvider:X.provider,fetch:$.fetch});return await j.connect(F),await j.listTools(),await X.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" OAuth authorization completed.`}}}catch(V){let B=wC(V);throw await X.markError(B),Error(B)}finally{await Y.close().catch(()=>{return}),await j?.close().catch(()=>{return}),J.close()}}var yC="2024-11-05",hC=5000,kC=1500,nK="http://127.0.0.1:1456/mcp/oauth/callback";function yQ($){return $ instanceof Error?$.message:String($)}function aK($){let Z=Buffer.from(JSON.stringify($),"utf8"),Q=Buffer.from(`Content-Length: ${Z.byteLength}\r
490
490
  \r
491
491
  `,"utf8");return Buffer.concat([Q,Z])}function sK($){return Buffer.from(`${JSON.stringify($)}
492
- `,"utf8")}class CJ{buffer="";decoder=new oK("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`\r
492
+ `,"utf8")}class wJ{buffer="";decoder=new oK("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`\r
493
493
  \r
494
494
  `);if(Q<0)break;let J=this.buffer.slice(0,Q).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!J)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let X=Number.parseInt(J[1],10),Y=Q+4,j=Y+X;if(this.buffer.length<j)break;Z.push(this.buffer.slice(Y,j)),this.buffer=this.buffer.slice(j)}return Z}}class PJ{buffer="";decoder=new oK("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`
495
- `);if(Q<0)break;let W=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),W.length>0)Z.push(W)}return Z}}class tK{registration;process;nextRequestId=1;pending=new Map;framedParser=new CJ;newlineParser=new PJ;stderrBuffer="";connected=!1;protocolMode="newline";constructor($){this.registration=$}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=["newline","framed"],Z;for(let Q of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Q);try{await this.request("initialize",{protocolVersion:kw,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},xw),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Q;return}catch(W){Z=W instanceof Error?W:Error(String(W))}}throw Z??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((Z)=>typeof Z?.name==="string"&&typeof Z.inputSchema==="object"&&Z.inputSchema!==null).map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let Z=this.registration.transport;if(Z.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${Z.type}`);this.framedParser=new CJ,this.newlineParser=new PJ,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},W=yw(Z.command,Z.args??[],{cwd:Z.cwd,env:{...process.env,...Z.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=W,W.stdout.on("data",(J)=>this.handleStdout(J)),W.stderr.on("data",(J)=>{if(this.process!==W)return;if(this.stderrBuffer+=J.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),W.once("error",(J)=>{if(this.process!==W)return;this.failAllPending(Error(`MCP process error: ${yQ(J)}`))}),W.once("exit",(J,X)=>{if(this.process!==W)return;this.connected=!1,this.process=void 0;let Y=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${J??"null"}, signal=${X??"null"}).${Y}`))})}handleStdout($){try{let Z=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of Z){let W=JSON.parse(Q);if(typeof W.id!=="number")continue;let J=this.pending.get(W.id);if(!J)continue;if(this.pending.delete(W.id),clearTimeout(J.timeout),W.error){let X=W.error.message||`MCP request failed with code ${W.error.code??"unknown"}`;J.reject(Error(X));continue}J.resolve(W.result)}}catch(Z){this.handleProtocolFailure(Z)}}handleProtocolFailure($){let Z=this.process;if(!Z)return;this.connected=!1,this.process=void 0;let Q=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${yQ($)}.${Q}`)),Z.kill()}async request($,Z,Q=Iw){let W=this.process;if(!W?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let J=this.nextRequestId++,X={jsonrpc:"2.0",id:J,method:$,...Z?{params:Z}:{}},Y=new Promise((j,V)=>{let H=setTimeout(()=>{this.pending.delete(J),V(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Q);this.pending.set(J,{resolve:j,reject:V,timeout:H})});try{W.stdin.write(this.protocolMode==="framed"?aK(X):sK(X))}catch(j){let V=this.pending.get(J);if(V)clearTimeout(V.timeout),this.pending.delete(J);throw j}return Y}notify($,Z){let Q=this.process;if(!Q?.stdin.writable)return;let W={jsonrpc:"2.0",method:$,...Z?{params:Z}:{}};Q.stdin.write(this.protocolMode==="framed"?aK(W):sK(W))}failAllPending($){for(let[Z,Q]of this.pending)clearTimeout(Q.timeout),this.pending.delete(Z),Q.reject($)}}class eK{registration;options;client;authContext;constructor($,Z){this.registration=$;this.options=Z}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=SQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??nK});this.authContext=$;try{let Z=new hw({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Q=PQ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await Z.connect(Q),await $.clearError(),this.client=Z}catch(Z){let Q=Z instanceof iK?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):yQ(Z);throw await $.markError(Q),Error(Q)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((Q)=>({name:Q.name,description:Q.description,inputSchema:Q.inputSchema&&typeof Q.inputSchema==="object"&&!Array.isArray(Q.inputSchema)?Q.inputSchema:{}}))}catch(Z){return await this.handleOperationError(Z)}}async callTool($){let Z=await this.ensureConnectedClient();try{return await Z.callTool({name:$.name,arguments:$.arguments??{}})}catch(Q){return await this.handleOperationError(Q)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let Z=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${Z} Run authorizeMcpServerOAuth for this server.`;return`${Z} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let Z=this.authContext??SQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??nK}),Q=$ instanceof iK?this.formatUnauthorizedMessage(Z.getLastAuthorizationUrl()):yQ($);throw await Z.markError(Q),Error(Q)}}function $4($={}){return(Z)=>Z.transport.type==="stdio"?new tK(Z):new eK(Z,$)}CQ();function r0(){return Date.now()}function gw($){return $.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}class b2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let Z=this.servers.get($.name);if(!Z){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:r0()});return}let Q=JSON.stringify(Z.registration.transport)!==JSON.stringify($.transport);if(Z.registration={...$},Z.updatedAt=r0(),Q)await this.disconnectState(Z),Z.client=void 0,Z.toolCache=void 0,Z.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.connectState(Z)})}async disconnectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z)})}async setServerDisabled($,Z){await this.runExclusive($,async()=>{let Q=this.requireServer($);if(Q.registration={...Q.registration,disabled:Z},Q.updatedAt=r0(),Z)await this.disconnectState(Q)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,Z)=>$.name.localeCompare(Z.name))}async listTools($){let Z=this.requireServer($),Q=Z.toolCacheUpdatedAt??0;if(Z.toolCache&&r0()-Q<=this.toolsCacheTtlMs)return Z.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let Z=this.requireServer($),W=await(await this.ensureConnectedClient(Z)).listTools(),J=gw(W);return Z.toolCache=J,Z.toolCacheUpdatedAt=r0(),Z.updatedAt=r0(),J})}async callTool($){return this.runExclusive($.serverName,async()=>{let Z=this.requireServer($.serverName),Q=await this.ensureConnectedClient(Z);return Z.updatedAt=r0(),Q.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let Z of $)await this.unregisterServer(Z)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=r0();try{let Z=$.client??await this.clientFactory($.registration);await Z.connect(),$.client=Z,$.status="connected",$.lastError=void 0,$.updatedAt=r0()}catch(Z){throw $.status="disconnected",$.lastError=Z instanceof Error?Z.message:String(Z),$.updatedAt=r0(),Z}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=r0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=r0()}}requireServer($){let Z=this.servers.get($);if(!Z)throw Error(`Unknown MCP server: ${$}`);return Z}async runExclusive($,Z){let Q=this.operationLocks.get($)??Promise.resolve(),W,J=new Promise((Y)=>{W=Y}),X=Q.catch(()=>{return}).then(()=>J);this.operationLocks.set($,X),await Q.catch(()=>{return});try{return await Z()}finally{if(W?.(),this.operationLocks.get($)===X)this.operationLocks.delete($)}}}function Z4($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function $F($){return Z4($)&&Object.values($).every((Z)=>typeof Z==="string")}function mw($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function vw($){if(!Z4($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function cw($){let Z=$.env?Object.entries($.env):[];if(Z.length===0)return{ok:!0};let Q={};for(let[W,J]of Z){if(typeof J==="string"){Q[W]=J;continue}let X=J.fromEnv?.trim()||W,Y=process.env[X];if(typeof Y==="string"&&Y.length>0){Q[W]=Y;continue}if(typeof J.value==="string"){Q[W]=J.value;continue}if(J.required===!0)return{ok:!1,reason:`required environment variable "${X}" is not set`}}return{ok:!0,env:Object.keys(Q).length>0?Q:void 0}}function SJ($){if(!Z4($))return{name:"",loadError:"invalid MCP server registration"};let Z=typeof $.name==="string"?$.name.trim():"";if(!Z)return{name:Z,loadError:"empty MCP server name"};let Q=$.env,W=Q===void 0?void 0:Q;if(W!==void 0){if(!Z4(W))return{name:Z,loadError:"invalid env"};for(let[V,H]of Object.entries(W))if(typeof H!=="string"&&!vw(H))return{name:Z,loadError:`invalid env "${V}"`}}let J=$.transport;if(!Z4(J))return{name:Z,loadError:"invalid MCP transport"};let X=J.type;if(X!=="stdio"&&X!=="sse"&&X!=="streamableHttp")return{name:Z,loadError:"invalid MCP transport type"};if(X!=="stdio"&&W!==void 0)return{name:Z,loadError:"top-level env is only supported for stdio MCP transports"};let Y=Z4($.metadata)?$.metadata:void 0;if(X==="stdio"){let V=J.command;if(typeof V!=="string"||!V.trim())return{name:Z,loadError:"stdio MCP transport requires command"};let H=J.args;if(H!==void 0&&!mw(H))return{name:Z,loadError:"stdio MCP transport args must be strings"};let B=J.cwd;if(B!==void 0&&typeof B!=="string")return{name:Z,loadError:"stdio MCP transport cwd must be a string"};let G=J.env;if(G!==void 0&&!$F(G))return{name:Z,loadError:"stdio MCP transport env must be strings"};let K=cw({name:Z,transport:{type:"stdio",command:V,args:H,cwd:B,env:G},env:W,metadata:Y});if(!K.ok)return{name:Z,loadError:K.reason};let F=G||K.env?{...G??{},...K.env??{}}:void 0;return{name:Z,registration:{name:Z,transport:{type:"stdio",command:V,args:H,cwd:B,env:F},metadata:Y}}}if(typeof J.url!=="string"||!J.url.trim())return{name:Z,loadError:`${X} MCP transport requires url`};let j=J.headers;if(j!==void 0&&!$F(j))return{name:Z,loadError:`${X} MCP transport headers must be strings`};return{name:Z,registration:{name:Z,transport:X==="sse"?{type:"sse",url:J.url,headers:j}:{type:"streamableHttp",url:J.url,headers:j},metadata:Y}}}function hQ($){let Z=new Map;return $.map(({server:Q,owner:W,ownerLabel:J})=>{let X=SJ(Q);if(!X.registration)return{owner:W,name:X.name,loadError:X.loadError??"invalid MCP server registration"};let Y=Z.get(X.registration.name);if(Z.has(X.registration.name)){let j=Y?` already registered by ${Y}`:"";return{owner:W,name:X.registration.name,loadError:`duplicate MCP server name "${X.registration.name}"${j}`}}return Z.set(X.registration.name,J),{owner:W,name:X.registration.name,registration:X.registration}})}import{createHash as uw}from"node:crypto";var ZF=64,dw=/[^a-zA-Z0-9_-]+/g,QF=8,lw=1,pw="mcp_tool";function rw($){return uw("sha1").update($).digest("hex").slice(0,QF)}function iw($){return $.replace(dw,"_")}var kQ=({serverName:$,toolName:Z})=>{let Q=`${$}__${Z}`,W=iw(Q);if(W===Q&&Q.length<=ZF)return Q;let J=rw(Q),X=ZF-lw-QF;return`${W.slice(0,X)||pw}_${J}`};function M5($){return{[($.nameTransform??kQ)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function IQ($){let Z={};for(let Q of $.toolNames)Object.assign(Z,M5({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return Z}import{createTool as nw}from"@cline/shared";function aw($,Z){let Q=Z.description?.trim();if(Q)return Q;return`Execute MCP tool "${Z.name}" from server "${$}".`}async function Q4($){let Z=await $.provider.listTools($.serverName),Q=$.nameTransform??kQ;return Z.map((W)=>{let J=Q({serverName:$.serverName,toolName:W.name});return nw({name:J,description:aw($.serverName,W),inputSchema:W.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(X,Y)=>$.provider.callTool({serverName:$.serverName,toolName:W.name,arguments:X&&typeof X==="object"&&!Array.isArray(X)?X:void 0,context:Y})})})}$1();var YF={};N(YF,{listPluginToolsWithDiagnostics:()=>xQ,listPluginTools:()=>R5});import{stat as sw}from"node:fs/promises";import{isAbsolute as ow,relative as tw,resolve as JF}from"node:path";$1();function ew($,Z){let Q=tw(JF($),JF(Z));return Q===""||!Q.startsWith("..")&&!ow(Q)}var $C=32,W4=new Map;function ZC($,Z){if(!W4.has($)&&W4.size>=$C){let Q=W4.keys().next().value;if(Q)W4.delete(Q)}W4.set($,Z)}async function QC($){let Z=await Promise.all($.pluginPaths.map(async(Q)=>{try{let W=await sw(Q);return`${Q}:${W.mtimeMs}:${W.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:Z})}function XF($,Z){return $.map((Q)=>({...Q,enabled:!Z.has(Q.name)}))}function WC($){return $.sort((Z,Q)=>{let W=Z.name.localeCompare(Q.name);if(W!==0)return W;return Z.path.localeCompare(Q.path)})}async function JC($,Z){if(!$.setup)return{tools:[]};let Q=[],W={registerTool:(J)=>Q.push(J),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(J)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(W,{workspaceInfo:Z}),{tools:Q}}async function xQ($){let Z=i1({workspacePath:$.workspacePath,cwd:$.cwd}),Q=G1($.disabledToolNames);if(Z.length===0)return{tools:[],failures:[],warnings:[]};let W=await QC({pluginPaths:Z,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),J=W4.get(W);if(J)return{tools:XF(J.tools,Q),failures:J.failures,warnings:J.warnings};let X=[],Y=[],j=[],V;try{V=await x8({pluginPaths:Z,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),Y=[...V.failures],j=[...V.warnings];for(let B of V.extensions??[]){let G=B.__clinePluginPath;if(!G)continue;let K=ew($.workspacePath,G)?"workspace-plugin":"global-plugin",F;try{F=await JC(B,{rootPath:$.workspacePath})}catch(A){Y.push({pluginPath:G,pluginName:B.name,phase:"setup",message:A instanceof Error?A.message:String(A),stack:A instanceof Error?A.stack:void 0});continue}for(let A of F.tools)X.push({name:A.name,pluginName:B.name,path:G,source:K,description:A.description?.trim()||void 0})}}catch(B){Y=Z.map((G)=>({pluginPath:G,phase:"load",message:B instanceof Error?B.message:String(B),stack:B instanceof Error?B.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let H=WC(X);return ZC(W,{tools:H,failures:Y,warnings:j}),{tools:XF(H,Q),failures:Y,warnings:j}}async function R5($){return(await xQ($)).tools}function w5($,Z){if(!Z)return"global";let Q=GF(Z,$);return!Q.startsWith("..")&&!BF(Q)?"workspace":"global"}function VC($,Z){return w5($,Z)==="workspace"?"workspace-plugin":"global-plugin"}function HC($,Z){let Q=GF(VF($),VF(Z));return Q===""||!Q.startsWith("..")&&!BF(Q)}function BC($){try{let Z=JSON.parse(XC($,"utf8"));return typeof Z.name==="string"&&Z.name.trim()?Z.name.trim():void 0}catch{return}}function GC($){let Z=jF($);while(!0){let Q=jC(Z,"package.json");if(N5(Q)){let J=BC(Q);if(J)return J;break}let W=jF(Z);if(W===Z)break;Z=W}return bJ($,YC($))}function KC($){let Z=[];for(let Q of i1({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let W of n1([Q]))Z.push({directory:W,pluginName:GC(Q),pluginPath:Q,source:$.workspaceRoot?VC(Q,$.workspaceRoot):"global-plugin"});return Z.sort((Q,W)=>W.directory.length-Q.directory.length)}function FC($,Z){return Z.find((Q)=>HC(Q.directory,$))}function E5($){return[...$].sort((Z,Q)=>{let W=(J)=>{switch(J){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(Z.source!==Q.source)return W(Z.source)-W(Q.source);return Z.name.localeCompare(Q.name)})}function KF($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function FF($,Z){return $.cwd?.trim()||Z||process.cwd()}async function HF($,Z){if($.userInstructionService)return await Z($.userInstructionService);let Q=KF($),W=FF($,Q),J=b$({skills:{workspacePath:Q||void 0,includePluginSkills:!0,cwd:W},rules:{workspacePath:Q||void 0},workflows:{workspacePath:Q||void 0}});try{return await J.start(),await Z(J)}finally{J.stop()}}function AC($,Z){if(!$)return;let Q=$.listRecords("skill");if(Z.id){let W=Q.find((J)=>J.id===Z.id);if(W)return W}for(let W of Q)if(W.filePath===Z.path||W.item.name===Z.name||W.id===Z.name)return W;return}class k${async list($={}){return await HF($,async(Z)=>{let Q=KF($),W=KC({workspaceRoot:Q,cwd:FF($,Q)}),J=[],X=[],Y=[],j=[],V=[];if(Z){for(let B of Z.listRecords("workflow")){let G=B.item;J.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"workflow",source:w5(B.filePath,Q),description:G.instructions,toggleable:!1})}for(let B of Z.listRecords("rule")){let G=B.item;X.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"rule",source:w5(B.filePath,Q),description:G.instructions,toggleable:!1})}for(let B of Z.listRecords("skill")){let G=B.item,K=FC(B.filePath,W);Y.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"skill",source:K?.source??w5(B.filePath,Q),description:G.description,pluginName:K?.pluginName,pluginPath:K?.pluginPath,toggleable:!0})}}if(Q)try{for(let B of await R5({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))j.push({id:`${B.pluginName}:${B.name}:${B.path}`,name:B.name,path:B.path,enabled:B.enabled,kind:"tool",source:B.source,description:B.description,toggleable:!0})}catch{}let H=Z0();if(s1({filePath:H}))try{for(let B of p0({filePath:H}))V.push({id:B.name,name:B.name,path:H,enabled:B.disabled!==!0,kind:"mcp",source:w5(H,Q),description:B.transport.type,toggleable:!0})}catch{}return{workflows:E5(J.filter((B)=>N5(B.path))),rules:E5(X.filter((B)=>N5(B.path))),skills:E5(Y.filter((B)=>N5(B.path))),tools:E5(j),mcp:E5(V.filter((B)=>N5(B.path)))}})}async toggle($){if($.type==="skills")return await HF($,async(Z)=>{let Q=AC(Z,$),W=Q?.filePath;if(!W)throw Error(`Unable to resolve skill setting '${$.id??$.name??bJ($.path??"")}'.`);let J=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,X=$.enabled??(J!==void 0?!J:void 0);if(X===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??bJ($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await wK({filePath:W,enabled:X}),await Z?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:Z}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)m9($.name);else mj($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let Z=$.name?.trim()||$.id?.trim();if(!Z)throw Error("MCP server settings toggle requires a server name.");let Q=$.path?.trim()||Z0(),W=$.enabled;if(W===void 0){let J=p0({filePath:Q}).find((X)=>X.name===Z);if(!J)throw Error(`Unknown MCP server: ${Z}`);W=J.disabled===!0}return w2({filePath:Q,name:Z,disabled:!W}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function y2(){return new k$}function fF($){return{async list(Z){let Q=$;if(Q.listSettings)return await Q.listSettings(Z);return await y2().list(Z)},async toggle(Z){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(Z);return await y2().toggle(Z)}}}function UF($){function Z(){let Q=$.pendingPrompts;if(!Q)throw Error("Pending prompt service is not available.");return Q}return{list(Q){return Z().list(Q)},update(Q){return Z().update(Q)},delete(Q){return Z().delete(Q)}}}function DF($){let Z=$.config;return"providerId"in Z?{...$,config:{...Z,...fC($.localRuntime)},localRuntime:$.localRuntime}:$}function yJ($,Z={}){let Q=i4($.config),W=M0(Z.defaultCapabilities,$.capabilities),J=UC(Q.localRuntime,$.localRuntime),X=Z.withExtensionContext?.(J?.extensionContext);if(X)J={...J??{},extensionContext:X};return{...$,...Q,...J?{localRuntime:J}:{},...W?{capabilities:W}:{}}}function fC($){if(!$)return{};let{modelCatalogDefaults:Z,userInstructionService:Q,configExtensions:W,onTeamRestored:J,...X}=$;return X}function UC(...$){let Z={};for(let Q of $)if(Q)Object.assign(Z,Q);return Object.keys(Z).length>0?Z:void 0}_0();function LF($){let Z=$.input.config.telemetry??$.telemetry;if(!Z)return;Z.capture({event:m.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??T0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function C5($){return!!$&&typeof $==="object"&&!Array.isArray($)}function hJ($){let Z=$?.trim();return Z?Z:void 0}function DC($,Z){let Q=$?.trim();if(!Q)return Z;let W=Date.parse(Q);if(!Number.isFinite(W))return Z;return new Date(W).toISOString()}function _F($,Z){return new Date(new Date($).getTime()+Math.max(0,Math.floor(Z))*1000).toISOString()}function zF($,Z){return new Date(new Date($).getTime()-Math.max(0,Math.floor(Z))*1000).toISOString()}function LC($,Z){if(!$)return Z;return new Date($).getTime()>=new Date(Z).getTime()?$:Z}function _C($,Z){let Q=$.eventId.trim(),W=$.eventType.trim(),J=$.source.trim(),X=hJ($.subject),Y=hJ($.dedupeKey)??`${W}:${J}:${X??Q}`;return{eventId:Q,eventType:W,source:J,subject:X,occurredAt:DC($.occurredAt,Z),workspaceRoot:hJ($.workspaceRoot),payload:C5($.payload)?$.payload:void 0,attributes:C5($.attributes)?$.attributes:void 0,dedupeKey:Y}}function kJ($,Z){if(!Z)return;let Q=Z.split("."),W=$;for(let J of Q){if(!C5(W))return;W=W[J]}return W}function zC($,Z){if($.attributes&&Object.hasOwn($.attributes,Z))return $.attributes[Z];if($.payload&&Object.hasOwn($.payload,Z))return $.payload[Z];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},W=kJ(Q,Z);if(W!==void 0)return W;if($.attributes){let J=kJ($.attributes,Z);if(J!==void 0)return J}if($.payload)return kJ($.payload,Z);return}function gQ($,Z){if(Array.isArray(Z))return Z.some((Q)=>gQ($,Q));if(Array.isArray($))return $.some((Q)=>gQ(Q,Z));if(C5(Z)){if(!C5($))return!1;return Object.entries(Z).every(([Q,W])=>gQ($[Q],W))}return Object.is($,Z)}function TC($,Z){if(!Z||Object.keys(Z).length===0)return!0;return Object.entries(Z).every(([Q,W])=>gQ(zC($,Q),W))}class IJ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let Z=new Date(this.nowFn()).toISOString(),Q=_C($,Z),W=this.store.insertEventLog(Q,{receivedAtIso:Z});if(!W.created)return this.logger?.debug("cron.event.duplicate",{eventId:W.record.eventId,eventType:W.record.eventType,source:W.record.source}),{event:W.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:W.record.dedupeKey}]};try{let J=this.store.listEventSpecsForType(Q.eventType),X=[],Y=[],j=[];for(let B of J){if(!TC(Q,B.filters)){X.push({specId:B.specId,externalId:B.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}Y.push(B);let G=this.materializeForSpec(B,Q,W.record.receivedAt);if(G.run)j.push(G.run);else X.push({specId:B.specId,externalId:B.externalId,reason:G.reason,dedupeKey:Q.dedupeKey})}let V=Y.length===0?"unmatched":j.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(W.record.eventId,{status:V,matchedSpecCount:Y.length,queuedRunCount:j.length,suppressedCount:X.filter((B)=>B.reason!=="filter_mismatch").length});let H=this.store.getEventLog(W.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:W.record.eventId,eventType:W.record.eventType,status:V,matchedSpecCount:Y.length,queuedRunCount:j.length}),{event:H??W.record,duplicate:!1,matchedSpecs:Y,queuedRuns:j,suppressions:X}}catch(J){if(this.store.updateEventLogProcessing(W.record.eventId,{status:"failed",error:J instanceof Error?J.message:String(J)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:W.record.eventId,eventType:W.record.eventType,error:J});throw J}}materializeForSpec($,Z,Q){let W=Z.dedupeKey??Z.eventId,J=$.debounceSeconds??0;if(J>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:W});if(V){let H=LC(V.scheduledFor,_F(Q,J)),B=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:Z.eventId,scheduledFor:H});if(B)return{run:B,reason:"dedupe_window"}}}let X=$.dedupeWindowSeconds??0;if(X>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:W,sinceIso:zF(Q,X)}))return{reason:"dedupe_window"};let Y=$.cooldownSeconds??0;if(Y>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:zF(Q,Y)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:Z.eventId,scheduledFor:J>0?_F(Q,J):Q}),reason:"dedupe_window"}}}import{existsSync as xC,readdirSync as gC,readFileSync as mC,statSync as vC}from"node:fs";import{relative as cC}from"node:path";import{resolveCronSpecsDir as uC}from"@cline/shared/storage";import{createHash as OC}from"node:crypto";import qC from"yaml";function MC($){let Z=$.replace(/\\/g,"/");if(Z.startsWith("events/")&&Z.endsWith(".event.md"))return"event";if(Z.endsWith(".cron.md"))return"schedule";return"one_off"}function RC($){let Z=$.replace(/\r\n/g,`
495
+ `);if(Q<0)break;let W=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),W.length>0)Z.push(W)}return Z}}class tK{registration;process;nextRequestId=1;pending=new Map;framedParser=new wJ;newlineParser=new PJ;stderrBuffer="";connected=!1;protocolMode="newline";constructor($){this.registration=$}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=["newline","framed"],Z;for(let Q of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Q);try{await this.request("initialize",{protocolVersion:yC,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},kC),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Q;return}catch(W){Z=W instanceof Error?W:Error(String(W))}}throw Z??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((Z)=>typeof Z?.name==="string"&&typeof Z.inputSchema==="object"&&Z.inputSchema!==null).map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let Z=this.registration.transport;if(Z.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${Z.type}`);this.framedParser=new wJ,this.newlineParser=new PJ,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},W=SC(Z.command,Z.args??[],{cwd:Z.cwd,env:{...process.env,...Z.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=W,W.stdout.on("data",(J)=>this.handleStdout(J)),W.stderr.on("data",(J)=>{if(this.process!==W)return;if(this.stderrBuffer+=J.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),W.once("error",(J)=>{if(this.process!==W)return;this.failAllPending(Error(`MCP process error: ${yQ(J)}`))}),W.once("exit",(J,X)=>{if(this.process!==W)return;this.connected=!1,this.process=void 0;let Y=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${J??"null"}, signal=${X??"null"}).${Y}`))})}handleStdout($){try{let Z=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of Z){let W=JSON.parse(Q);if(typeof W.id!=="number")continue;let J=this.pending.get(W.id);if(!J)continue;if(this.pending.delete(W.id),clearTimeout(J.timeout),W.error){let X=W.error.message||`MCP request failed with code ${W.error.code??"unknown"}`;J.reject(Error(X));continue}J.resolve(W.result)}}catch(Z){this.handleProtocolFailure(Z)}}handleProtocolFailure($){let Z=this.process;if(!Z)return;this.connected=!1,this.process=void 0;let Q=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${yQ($)}.${Q}`)),Z.kill()}async request($,Z,Q=hC){let W=this.process;if(!W?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let J=this.nextRequestId++,X={jsonrpc:"2.0",id:J,method:$,...Z?{params:Z}:{}},Y=new Promise((j,V)=>{let B=setTimeout(()=>{this.pending.delete(J),V(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Q);this.pending.set(J,{resolve:j,reject:V,timeout:B})});try{W.stdin.write(this.protocolMode==="framed"?aK(X):sK(X))}catch(j){let V=this.pending.get(J);if(V)clearTimeout(V.timeout),this.pending.delete(J);throw j}return Y}notify($,Z){let Q=this.process;if(!Q?.stdin.writable)return;let W={jsonrpc:"2.0",method:$,...Z?{params:Z}:{}};Q.stdin.write(this.protocolMode==="framed"?aK(W):sK(W))}failAllPending($){for(let[Z,Q]of this.pending)clearTimeout(Q.timeout),this.pending.delete(Z),Q.reject($)}}class eK{registration;options;client;authContext;constructor($,Z){this.registration=$;this.options=Z}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=SQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??nK});this.authContext=$;try{let Z=new bC({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Q=PQ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await Z.connect(Q),await $.clearError(),this.client=Z}catch(Z){let Q=Z instanceof iK?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):yQ(Z);throw await $.markError(Q),Error(Q)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((Q)=>({name:Q.name,description:Q.description,inputSchema:Q.inputSchema&&typeof Q.inputSchema==="object"&&!Array.isArray(Q.inputSchema)?Q.inputSchema:{}}))}catch(Z){return await this.handleOperationError(Z)}}async callTool($){let Z=await this.ensureConnectedClient();try{return await Z.callTool({name:$.name,arguments:$.arguments??{}})}catch(Q){return await this.handleOperationError(Q)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let Z=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${Z} Run authorizeMcpServerOAuth for this server.`;return`${Z} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let Z=this.authContext??SQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??nK}),Q=$ instanceof iK?this.formatUnauthorizedMessage(Z.getLastAuthorizationUrl()):yQ($);throw await Z.markError(Q),Error(Q)}}function $4($={}){return(Z)=>Z.transport.type==="stdio"?new tK(Z):new eK(Z,$)}wQ();function r0(){return Date.now()}function IC($){return $.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}class b2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let Z=this.servers.get($.name);if(!Z){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:r0()});return}let Q=JSON.stringify(Z.registration.transport)!==JSON.stringify($.transport);if(Z.registration={...$},Z.updatedAt=r0(),Q)await this.disconnectState(Z),Z.client=void 0,Z.toolCache=void 0,Z.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.connectState(Z)})}async disconnectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z)})}async setServerDisabled($,Z){await this.runExclusive($,async()=>{let Q=this.requireServer($);if(Q.registration={...Q.registration,disabled:Z},Q.updatedAt=r0(),Z)await this.disconnectState(Q)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,Z)=>$.name.localeCompare(Z.name))}async listTools($){let Z=this.requireServer($),Q=Z.toolCacheUpdatedAt??0;if(Z.toolCache&&r0()-Q<=this.toolsCacheTtlMs)return Z.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let Z=this.requireServer($),W=await(await this.ensureConnectedClient(Z)).listTools(),J=IC(W);return Z.toolCache=J,Z.toolCacheUpdatedAt=r0(),Z.updatedAt=r0(),J})}async callTool($){return this.runExclusive($.serverName,async()=>{let Z=this.requireServer($.serverName),Q=await this.ensureConnectedClient(Z);return Z.updatedAt=r0(),Q.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let Z of $)await this.unregisterServer(Z)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=r0();try{let Z=$.client??await this.clientFactory($.registration);await Z.connect(),$.client=Z,$.status="connected",$.lastError=void 0,$.updatedAt=r0()}catch(Z){throw $.status="disconnected",$.lastError=Z instanceof Error?Z.message:String(Z),$.updatedAt=r0(),Z}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=r0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=r0()}}requireServer($){let Z=this.servers.get($);if(!Z)throw Error(`Unknown MCP server: ${$}`);return Z}async runExclusive($,Z){let Q=this.operationLocks.get($)??Promise.resolve(),W,J=new Promise((Y)=>{W=Y}),X=Q.catch(()=>{return}).then(()=>J);this.operationLocks.set($,X),await Q.catch(()=>{return});try{return await Z()}finally{if(W?.(),this.operationLocks.get($)===X)this.operationLocks.delete($)}}}function Z4($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function $F($){return Z4($)&&Object.values($).every((Z)=>typeof Z==="string")}function xC($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function gC($){if(!Z4($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function mC($){let Z=$.env?Object.entries($.env):[];if(Z.length===0)return{ok:!0};let Q={};for(let[W,J]of Z){if(typeof J==="string"){Q[W]=J;continue}let X=J.fromEnv?.trim()||W,Y=process.env[X];if(typeof Y==="string"&&Y.length>0){Q[W]=Y;continue}if(typeof J.value==="string"){Q[W]=J.value;continue}if(J.required===!0)return{ok:!1,reason:`required environment variable "${X}" is not set`}}return{ok:!0,env:Object.keys(Q).length>0?Q:void 0}}function SJ($){if(!Z4($))return{name:"",loadError:"invalid MCP server registration"};let Z=typeof $.name==="string"?$.name.trim():"";if(!Z)return{name:Z,loadError:"empty MCP server name"};let Q=$.env,W=Q===void 0?void 0:Q;if(W!==void 0){if(!Z4(W))return{name:Z,loadError:"invalid env"};for(let[V,B]of Object.entries(W))if(typeof B!=="string"&&!gC(B))return{name:Z,loadError:`invalid env "${V}"`}}let J=$.transport;if(!Z4(J))return{name:Z,loadError:"invalid MCP transport"};let X=J.type;if(X!=="stdio"&&X!=="sse"&&X!=="streamableHttp")return{name:Z,loadError:"invalid MCP transport type"};if(X!=="stdio"&&W!==void 0)return{name:Z,loadError:"top-level env is only supported for stdio MCP transports"};let Y=Z4($.metadata)?$.metadata:void 0;if(X==="stdio"){let V=J.command;if(typeof V!=="string"||!V.trim())return{name:Z,loadError:"stdio MCP transport requires command"};let B=J.args;if(B!==void 0&&!xC(B))return{name:Z,loadError:"stdio MCP transport args must be strings"};let H=J.cwd;if(H!==void 0&&typeof H!=="string")return{name:Z,loadError:"stdio MCP transport cwd must be a string"};let G=J.env;if(G!==void 0&&!$F(G))return{name:Z,loadError:"stdio MCP transport env must be strings"};let K=mC({name:Z,transport:{type:"stdio",command:V,args:B,cwd:H,env:G},env:W,metadata:Y});if(!K.ok)return{name:Z,loadError:K.reason};let F=G||K.env?{...G??{},...K.env??{}}:void 0;return{name:Z,registration:{name:Z,transport:{type:"stdio",command:V,args:B,cwd:H,env:F},metadata:Y}}}if(typeof J.url!=="string"||!J.url.trim())return{name:Z,loadError:`${X} MCP transport requires url`};let j=J.headers;if(j!==void 0&&!$F(j))return{name:Z,loadError:`${X} MCP transport headers must be strings`};return{name:Z,registration:{name:Z,transport:X==="sse"?{type:"sse",url:J.url,headers:j}:{type:"streamableHttp",url:J.url,headers:j},metadata:Y}}}function hQ($){let Z=new Map;return $.map(({server:Q,owner:W,ownerLabel:J})=>{let X=SJ(Q);if(!X.registration)return{owner:W,name:X.name,loadError:X.loadError??"invalid MCP server registration"};let Y=Z.get(X.registration.name);if(Z.has(X.registration.name)){let j=Y?` already registered by ${Y}`:"";return{owner:W,name:X.registration.name,loadError:`duplicate MCP server name "${X.registration.name}"${j}`}}return Z.set(X.registration.name,J),{owner:W,name:X.registration.name,registration:X.registration}})}import{createHash as vC}from"node:crypto";var ZF=64,cC=/[^a-zA-Z0-9_-]+/g,QF=8,uC=1,dC="mcp_tool";function lC($){return vC("sha1").update($).digest("hex").slice(0,QF)}function pC($){return $.replace(cC,"_")}var kQ=({serverName:$,toolName:Z})=>{let Q=`${$}__${Z}`,W=pC(Q);if(W===Q&&Q.length<=ZF)return Q;let J=lC(Q),X=ZF-uC-QF;return`${W.slice(0,X)||dC}_${J}`};function M5($){return{[($.nameTransform??kQ)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function IQ($){let Z={};for(let Q of $.toolNames)Object.assign(Z,M5({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return Z}import{createTool as rC}from"@cline/shared";function iC($,Z){let Q=Z.description?.trim();if(Q)return Q;return`Execute MCP tool "${Z.name}" from server "${$}".`}async function Q4($){let Z=await $.provider.listTools($.serverName),Q=$.nameTransform??kQ;return Z.map((W)=>{let J=Q({serverName:$.serverName,toolName:W.name});return rC({name:J,description:iC($.serverName,W),inputSchema:W.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(X,Y)=>$.provider.callTool({serverName:$.serverName,toolName:W.name,arguments:X&&typeof X==="object"&&!Array.isArray(X)?X:void 0,context:Y})})})}$1();var YF={};N(YF,{listPluginToolsWithDiagnostics:()=>xQ,listPluginTools:()=>R5});import{stat as nC}from"node:fs/promises";import{isAbsolute as aC,relative as sC,resolve as JF}from"node:path";$1();function oC($,Z){let Q=sC(JF($),JF(Z));return Q===""||!Q.startsWith("..")&&!aC(Q)}var tC=32,W4=new Map;function eC($,Z){if(!W4.has($)&&W4.size>=tC){let Q=W4.keys().next().value;if(Q)W4.delete(Q)}W4.set($,Z)}async function $w($){let Z=await Promise.all($.pluginPaths.map(async(Q)=>{try{let W=await nC(Q);return`${Q}:${W.mtimeMs}:${W.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:Z})}function XF($,Z){return $.map((Q)=>({...Q,enabled:!Z.has(Q.name)}))}function Zw($){return $.sort((Z,Q)=>{let W=Z.name.localeCompare(Q.name);if(W!==0)return W;return Z.path.localeCompare(Q.path)})}async function Qw($,Z){if(!$.setup)return{tools:[]};let Q=[],W={registerTool:(J)=>Q.push(J),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(J)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(W,{workspaceInfo:Z}),{tools:Q}}async function xQ($){let Z=i1({workspacePath:$.workspacePath,cwd:$.cwd}),Q=G1($.disabledToolNames);if(Z.length===0)return{tools:[],failures:[],warnings:[]};let W=await $w({pluginPaths:Z,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),J=W4.get(W);if(J)return{tools:XF(J.tools,Q),failures:J.failures,warnings:J.warnings};let X=[],Y=[],j=[],V;try{V=await x8({pluginPaths:Z,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),Y=[...V.failures],j=[...V.warnings];for(let H of V.extensions??[]){let G=H.__clinePluginPath;if(!G)continue;let K=oC($.workspacePath,G)?"workspace-plugin":"global-plugin",F;try{F=await Qw(H,{rootPath:$.workspacePath})}catch(A){Y.push({pluginPath:G,pluginName:H.name,phase:"setup",message:A instanceof Error?A.message:String(A),stack:A instanceof Error?A.stack:void 0});continue}for(let A of F.tools)X.push({name:A.name,pluginName:H.name,path:G,source:K,description:A.description?.trim()||void 0})}}catch(H){Y=Z.map((G)=>({pluginPath:G,phase:"load",message:H instanceof Error?H.message:String(H),stack:H instanceof Error?H.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let B=Zw(X);return eC(W,{tools:B,failures:Y,warnings:j}),{tools:XF(B,Q),failures:Y,warnings:j}}async function R5($){return(await xQ($)).tools}function C5($,Z){if(!Z)return"global";let Q=GF(Z,$);return!Q.startsWith("..")&&!HF(Q)?"workspace":"global"}function Yw($,Z){return C5($,Z)==="workspace"?"workspace-plugin":"global-plugin"}function jw($,Z){let Q=GF(VF($),VF(Z));return Q===""||!Q.startsWith("..")&&!HF(Q)}function Vw($){try{let Z=JSON.parse(Ww($,"utf8"));return typeof Z.name==="string"&&Z.name.trim()?Z.name.trim():void 0}catch{return}}function Bw($){let Z=jF($);while(!0){let Q=Xw(Z,"package.json");if(N5(Q)){let J=Vw(Q);if(J)return J;break}let W=jF(Z);if(W===Z)break;Z=W}return bJ($,Jw($))}function Hw($){let Z=[];for(let Q of i1({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let W of n1([Q]))Z.push({directory:W,pluginName:Bw(Q),pluginPath:Q,source:$.workspaceRoot?Yw(Q,$.workspaceRoot):"global-plugin"});return Z.sort((Q,W)=>W.directory.length-Q.directory.length)}function Gw($,Z){return Z.find((Q)=>jw(Q.directory,$))}function E5($){return[...$].sort((Z,Q)=>{let W=(J)=>{switch(J){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(Z.source!==Q.source)return W(Z.source)-W(Q.source);return Z.name.localeCompare(Q.name)})}function KF($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function FF($,Z){return $.cwd?.trim()||Z||process.cwd()}async function BF($,Z){if($.userInstructionService)return await Z($.userInstructionService);let Q=KF($),W=FF($,Q),J=b$({skills:{workspacePath:Q||void 0,includePluginSkills:!0,cwd:W},rules:{workspacePath:Q||void 0},workflows:{workspacePath:Q||void 0}});try{return await J.start(),await Z(J)}finally{J.stop()}}function Kw($,Z){if(!$)return;let Q=$.listRecords("skill");if(Z.id){let W=Q.find((J)=>J.id===Z.id);if(W)return W}for(let W of Q)if(W.filePath===Z.path||W.item.name===Z.name||W.id===Z.name)return W;return}class k${async list($={}){return await BF($,async(Z)=>{let Q=KF($),W=Hw({workspaceRoot:Q,cwd:FF($,Q)}),J=[],X=[],Y=[],j=[],V=[];if(Z){for(let H of Z.listRecords("workflow")){let G=H.item;J.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"workflow",source:C5(H.filePath,Q),description:G.instructions,toggleable:!1})}for(let H of Z.listRecords("rule")){let G=H.item;X.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"rule",source:C5(H.filePath,Q),description:G.instructions,toggleable:!1})}for(let H of Z.listRecords("skill")){let G=H.item,K=Gw(H.filePath,W);Y.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"skill",source:K?.source??C5(H.filePath,Q),description:G.description,pluginName:K?.pluginName,pluginPath:K?.pluginPath,toggleable:!0})}}if(Q)try{for(let H of await R5({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))j.push({id:`${H.pluginName}:${H.name}:${H.path}`,name:H.name,path:H.path,enabled:H.enabled,kind:"tool",source:H.source,description:H.description,toggleable:!0})}catch{}let B=Z0();if(s1({filePath:B}))try{for(let H of p0({filePath:B}))V.push({id:H.name,name:H.name,path:B,enabled:H.disabled!==!0,kind:"mcp",source:C5(B,Q),description:H.transport.type,toggleable:!0})}catch{}return{workflows:E5(J.filter((H)=>N5(H.path))),rules:E5(X.filter((H)=>N5(H.path))),skills:E5(Y.filter((H)=>N5(H.path))),tools:E5(j),mcp:E5(V.filter((H)=>N5(H.path)))}})}async toggle($){if($.type==="skills")return await BF($,async(Z)=>{let Q=Kw(Z,$),W=Q?.filePath;if(!W)throw Error(`Unable to resolve skill setting '${$.id??$.name??bJ($.path??"")}'.`);let J=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,X=$.enabled??(J!==void 0?!J:void 0);if(X===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??bJ($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await CK({filePath:W,enabled:X}),await Z?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:Z}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)m9($.name);else mj($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let Z=$.name?.trim()||$.id?.trim();if(!Z)throw Error("MCP server settings toggle requires a server name.");let Q=$.path?.trim()||Z0(),W=$.enabled;if(W===void 0){let J=p0({filePath:Q}).find((X)=>X.name===Z);if(!J)throw Error(`Unknown MCP server: ${Z}`);W=J.disabled===!0}return C2({filePath:Q,name:Z,disabled:!W}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function y2(){return new k$}function fF($){return{async list(Z){let Q=$;if(Q.listSettings)return await Q.listSettings(Z);return await y2().list(Z)},async toggle(Z){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(Z);return await y2().toggle(Z)}}}function UF($){function Z(){let Q=$.pendingPrompts;if(!Q)throw Error("Pending prompt service is not available.");return Q}return{list(Q){return Z().list(Q)},update(Q){return Z().update(Q)},delete(Q){return Z().delete(Q)}}}function DF($){let Z=$.config;return"providerId"in Z?{...$,config:{...Z,...Fw($.localRuntime)},localRuntime:$.localRuntime}:$}function yJ($,Z={}){let Q=i4($.config),W=M0(Z.defaultCapabilities,$.capabilities),J=Aw(Q.localRuntime,$.localRuntime),X=Z.withExtensionContext?.(J?.extensionContext);if(X)J={...J??{},extensionContext:X};return{...$,...Q,...J?{localRuntime:J}:{},...W?{capabilities:W}:{}}}function Fw($){if(!$)return{};let{modelCatalogDefaults:Z,userInstructionService:Q,configExtensions:W,onTeamRestored:J,...X}=$;return X}function Aw(...$){let Z={};for(let Q of $)if(Q)Object.assign(Z,Q);return Object.keys(Z).length>0?Z:void 0}_0();function LF($){let Z=$.input.config.telemetry??$.telemetry;if(!Z)return;Z.capture({event:m.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??T0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function w5($){return!!$&&typeof $==="object"&&!Array.isArray($)}function hJ($){let Z=$?.trim();return Z?Z:void 0}function fw($,Z){let Q=$?.trim();if(!Q)return Z;let W=Date.parse(Q);if(!Number.isFinite(W))return Z;return new Date(W).toISOString()}function _F($,Z){return new Date(new Date($).getTime()+Math.max(0,Math.floor(Z))*1000).toISOString()}function zF($,Z){return new Date(new Date($).getTime()-Math.max(0,Math.floor(Z))*1000).toISOString()}function Uw($,Z){if(!$)return Z;return new Date($).getTime()>=new Date(Z).getTime()?$:Z}function Dw($,Z){let Q=$.eventId.trim(),W=$.eventType.trim(),J=$.source.trim(),X=hJ($.subject),Y=hJ($.dedupeKey)??`${W}:${J}:${X??Q}`;return{eventId:Q,eventType:W,source:J,subject:X,occurredAt:fw($.occurredAt,Z),workspaceRoot:hJ($.workspaceRoot),payload:w5($.payload)?$.payload:void 0,attributes:w5($.attributes)?$.attributes:void 0,dedupeKey:Y}}function kJ($,Z){if(!Z)return;let Q=Z.split("."),W=$;for(let J of Q){if(!w5(W))return;W=W[J]}return W}function Lw($,Z){if($.attributes&&Object.hasOwn($.attributes,Z))return $.attributes[Z];if($.payload&&Object.hasOwn($.payload,Z))return $.payload[Z];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},W=kJ(Q,Z);if(W!==void 0)return W;if($.attributes){let J=kJ($.attributes,Z);if(J!==void 0)return J}if($.payload)return kJ($.payload,Z);return}function gQ($,Z){if(Array.isArray(Z))return Z.some((Q)=>gQ($,Q));if(Array.isArray($))return $.some((Q)=>gQ(Q,Z));if(w5(Z)){if(!w5($))return!1;return Object.entries(Z).every(([Q,W])=>gQ($[Q],W))}return Object.is($,Z)}function _w($,Z){if(!Z||Object.keys(Z).length===0)return!0;return Object.entries(Z).every(([Q,W])=>gQ(Lw($,Q),W))}class IJ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let Z=new Date(this.nowFn()).toISOString(),Q=Dw($,Z),W=this.store.insertEventLog(Q,{receivedAtIso:Z});if(!W.created)return this.logger?.debug("cron.event.duplicate",{eventId:W.record.eventId,eventType:W.record.eventType,source:W.record.source}),{event:W.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:W.record.dedupeKey}]};try{let J=this.store.listEventSpecsForType(Q.eventType),X=[],Y=[],j=[];for(let H of J){if(!_w(Q,H.filters)){X.push({specId:H.specId,externalId:H.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}Y.push(H);let G=this.materializeForSpec(H,Q,W.record.receivedAt);if(G.run)j.push(G.run);else X.push({specId:H.specId,externalId:H.externalId,reason:G.reason,dedupeKey:Q.dedupeKey})}let V=Y.length===0?"unmatched":j.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(W.record.eventId,{status:V,matchedSpecCount:Y.length,queuedRunCount:j.length,suppressedCount:X.filter((H)=>H.reason!=="filter_mismatch").length});let B=this.store.getEventLog(W.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:W.record.eventId,eventType:W.record.eventType,status:V,matchedSpecCount:Y.length,queuedRunCount:j.length}),{event:B??W.record,duplicate:!1,matchedSpecs:Y,queuedRuns:j,suppressions:X}}catch(J){if(this.store.updateEventLogProcessing(W.record.eventId,{status:"failed",error:J instanceof Error?J.message:String(J)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:W.record.eventId,eventType:W.record.eventType,error:J});throw J}}materializeForSpec($,Z,Q){let W=Z.dedupeKey??Z.eventId,J=$.debounceSeconds??0;if(J>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:W});if(V){let B=Uw(V.scheduledFor,_F(Q,J)),H=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:Z.eventId,scheduledFor:B});if(H)return{run:H,reason:"dedupe_window"}}}let X=$.dedupeWindowSeconds??0;if(X>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:W,sinceIso:zF(Q,X)}))return{reason:"dedupe_window"};let Y=$.cooldownSeconds??0;if(Y>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:zF(Q,Y)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:Z.eventId,scheduledFor:J>0?_F(Q,J):Q}),reason:"dedupe_window"}}}import{existsSync as kw,readdirSync as Iw,readFileSync as xw,statSync as gw}from"node:fs";import{relative as mw}from"node:path";import{resolveCronSpecsDir as vw}from"@cline/shared/storage";import{createHash as zw}from"node:crypto";import Tw from"yaml";function Ow($){let Z=$.replace(/\\/g,"/");if(Z.startsWith("events/")&&Z.endsWith(".event.md"))return"event";if(Z.endsWith(".cron.md"))return"schedule";return"one_off"}function qw($){let Z=$.replace(/\r\n/g,`
496
496
  `);if(!Z.startsWith(`---
497
497
  `))return{frontmatter:void 0,body:$};let Q=Z.slice(4),W=Q.indexOf(`
498
498
  ---`);if(W===-1)return{frontmatter:void 0,body:$};let J=Q.slice(0,W),X=Q.slice(W+4);if(X.startsWith(`
499
- `))X=X.slice(1);return{frontmatter:J,body:X}}function i0($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function EC($){if(!Array.isArray($))return;let Z=$.map((Q)=>typeof Q==="string"?Q.trim():"").filter((Q)=>Q.length>0);return Z.length>0?Z:void 0}function mJ($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function NC($){let Z=mJ($);if(!Z)return;let Q=i0(Z.providerId),W=i0(Z.modelId);if(Q===void 0&&W===void 0)return;return{providerId:Q,modelId:W}}function wC($){if(typeof $!=="string")return;let Z=$.trim().toLowerCase();if(Z==="act"||Z==="plan"||Z==="yolo")return Z;return}function OF($,Z={}){let Q=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!Q)return;let W=[...new Set(Q.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0))];if(Array.isArray($)&&Z.preserveEmptyArray)return W;return W.length>0?W:void 0}var CC=new Set(X$);function PC($){let Z=OF($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((W)=>!CC.has(W));if(Q.length>0)throw Error(`unknown tool(s): ${Q.join(", ")}`);return Z}var SC=new Set(["rules","skills","plugins"]);function bC($){let Z=OF($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((W)=>!SC.has(W));if(Q.length>0)throw Error(`unknown extension(s): ${Q.join(", ")}`);return Z}function xJ($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function gJ($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function vJ($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Q)=>vJ(Q)).join(",")}]`;let Z=Object.entries($).filter(([,Q])=>Q!==void 0);return Z.sort(([Q],[W])=>Q<W?-1:Q>W?1:0),`{${Z.map(([Q,W])=>`${JSON.stringify(Q)}:${vJ(W)}`).join(",")}}`}function qF($,Z){let Q=OC("sha256");return Q.update(vJ($)),Q.update(`
500
- `),Q.update(Z),Q.digest("hex")}function yC($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var hC=["schedule","timezone"],kC=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],IC=["cwd"];function TF($,Z,Q,W,J){return{externalId:$,relativePath:$,triggerKind:Z,body:Q,contentHash:qF(W,Q),error:J}}function f1($,Z,Q,W,J,X){return{externalId:$,relativePath:Z,triggerKind:Q,body:W,contentHash:J,error:X}}function MF($){let Z=$.relativePath.replace(/\\/g,"/"),Q=MC(Z),{frontmatter:W,body:J}=RC($.raw),X={};if(W!==void 0&&W.trim().length>0)try{let U=qC.parse(W);if(U&&typeof U==="object"&&!Array.isArray(U))X=U;else if(U!==null&&U!==void 0)return TF(Z,Q,J,{},"frontmatter must be a YAML mapping")}catch(U){return TF(Z,Q,J,{},U instanceof Error?`failed to parse frontmatter: ${U.message}`:"failed to parse frontmatter")}let Y=qF(X,J),j=i0(X.id),V=j??Z;if(Q!=="schedule"){for(let U of hC)if(X[U]!==void 0)return f1(V,Z,Q,J,Y,`field "${U}" is only allowed on *.cron.md specs`)}for(let U of IC)if(X[U]!==void 0)return f1(V,Z,Q,J,Y,`field "${U}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Q!=="event"){for(let U of kC)if(X[U]!==void 0)return f1(V,Z,Q,J,Y,`field "${U}" is only allowed on .event.md specs`)}let H=i0(X.prompt),B=J.trim(),G=H??(B.length>0?B:void 0);if(!G)return f1(V,Z,Q,J,Y,"prompt is required (frontmatter `prompt` or markdown body)");let K=i0(X.workspaceRoot);if(!K)return f1(V,Z,Q,J,Y,"workspaceRoot is required");let F,A;try{F=PC(X.tools),A=bC(X.extensions)}catch(U){return f1(V,Z,Q,J,Y,U instanceof Error?U.message:String(U))}let L=wC(X.mode);if(X.mode!==void 0&&L===void 0)return f1(V,Z,Q,J,Y,"mode must be one of: act, plan, yolo");let f={id:j,title:i0(X.title)??j??yC(Z),prompt:G,workspaceRoot:K,mode:L??"yolo",systemPrompt:i0(X.systemPrompt),modelSelection:NC(X.modelSelection),maxIterations:xJ(X.maxIterations),timeoutSeconds:xJ(X.timeoutSeconds),tools:F,notesDirectory:i0(X.notesDirectory),extensions:A,source:i0(X.source)??"user",tags:EC(X.tags),enabled:typeof X.enabled==="boolean"?X.enabled:!0,metadata:mJ(X.metadata)},D;if(Q==="schedule"){let U=i0(X.schedule);if(!U)return f1(V,Z,Q,J,Y,"schedule is required for *.cron.md specs");let T=i0(X.timezone);try{Uj(U,T)}catch(z){return f1(V,Z,Q,J,Y,z instanceof Error?z.message:String(z))}D={...f,triggerKind:"schedule",schedule:U,timezone:T}}else if(Q==="event"){let U=i0(X.event);if(!U)return f1(V,Z,Q,J,Y,"event is required for .event.md specs");D={...f,triggerKind:"event",event:U,filters:mJ(X.filters),debounceSeconds:gJ(X.debounceSeconds),dedupeWindowSeconds:gJ(X.dedupeWindowSeconds),cooldownSeconds:gJ(X.cooldownSeconds),maxParallel:xJ(X.maxParallel)}}else D={...f,triggerKind:"one_off"};return{externalId:V,relativePath:Z,triggerKind:Q,body:J,contentHash:Y,spec:D}}function dC($,Z){return cC($,Z).replace(/\\/g,"/")}function lC($){if(!xC($))return[];let Z=[],Q=[$];while(Q.length>0){let W=Q.pop();if(!W)continue;let J;try{J=gC(W,{withFileTypes:!0})}catch{continue}for(let X of J){let Y=`${W}/${X.name}`;if(X.isDirectory()){if(X.name==="reports")continue;Q.push(Y);continue}if(!X.isFile())continue;if(!X.name.endsWith(".md"))continue;Z.push(Y)}}return Z}class cJ{store;cronDir;constructor($){this.store=$.store,this.cronDir=uC($.specs??($.workspaceRoot?{scope:"workspace",workspaceRoot:$.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let $={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},Z=lC(this.cronDir),Q=new Set;for(let J of Z){let X=dC(this.cronDir,J);Q.add(X),$.scanned+=1;let Y=await this.reconcileFile(X,J);if(Y){if($.changes.push(Y),$.upserted+=1,Y.parse.error)$.invalidParses+=1}}let W=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let J of W)if(!Q.has(J.sourcePath))this.handleFileDeleted(J),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,Z){let Q=this.store.getSpecBySourcePath($),W,J;try{W=mC(Z,"utf8"),J=vC(Z).mtimeMs}catch{return}let Y=MF({relativePath:$,raw:W}),j=this.store.upsertSpec({externalId:Y.externalId,sourcePath:$,triggerKind:Y.triggerKind,sourceMtimeMs:J,sourceHash:Y.contentHash,parseStatus:Y.error?"invalid":"valid",parseError:Y.error,spec:Y.spec});if(!Y.error&&Y.triggerKind==="schedule"&&j.record.enabled)this.applyScheduleNextRunAt(j.record,{forceReset:!Q||Q.removed||!Q.enabled||Q.scheduleExpr!==j.record.scheduleExpr||Q.timezone!==j.record.timezone});return{relativePath:$,result:j,parse:Y}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Z of $)this.applyScheduleNextRunAt(Z,{forceReset:!1})}applyScheduleNextRunAt($,Z){if(!$.scheduleExpr)return;if(!Z.forceReset&&$.nextRunAt)return;try{let Q=Date.now(),W=$.lastRunAt?Math.max(Q,new Date($.lastRunAt).getTime()):Q,J=i$($.scheduleExpr,W,$.timezone),X=new Date(J).toISOString();if($.nextRunAt!==X)this.store.updateSpecNextRunAt($.specId,X)}catch{}}}import{existsSync as pC,mkdirSync as rC,watch as iC}from"node:fs";import{relative as nC,resolve as aC}from"node:path";var sC=250;class uJ{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??sC),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{rC($,{recursive:!0}),this.watcher=iC($,{recursive:!0},(Z,Q)=>{if(!Q)return;let W=String(Q).replace(/\\/g,"/");if(!W.endsWith(".md"))return;if(W.startsWith("reports/"))return;this.scheduleReconcile(W)}),this.watcher.on("error",this.onError)}catch(Z){this.onError(Z)}}stop(){for(let $ of this.pending.values())clearTimeout($);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile($){let Z=this.pending.get($);if(Z)clearTimeout(Z);let Q=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,Q)}async reconcileNow($){try{let Z=aC(this.reconciler.getCronDir(),$);if(!pC(Z)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Q=nC(this.reconciler.getCronDir(),Z).replace(/\\/g,"/");await this.reconciler.reconcileFile(Q,Z),await this.onReconciled()}catch(Z){this.onError(Z)}}}class P5{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new x4({dbPath:$.dbPath});let Z=$.specs;this.reconciler=new cJ({store:this.store,specs:Z}),this.materializer=new P4({store:this.store}),this.eventIngress=new IJ({store:this.store,logger:$.logger}),this.runner=new y4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:Z,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new uJ({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let W=$.logger;if(W)if(W.error)W.error("cron.watcher.failed",{error:Q});else W.log("cron.watcher.failed",{error:Q})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}var yF={};N(yF,{manifestToSessionRecord:()=>vQ,listSessionHistoryFromBackend:()=>rJ,listSessionHistory:()=>cQ,hydrateSessionHistory:()=>bF});import{readdir as $P,readFile as CF}from"node:fs/promises";import{join as PF}from"node:path";import{formatDisplayUserInput as ZP,normalizeUserInput as QP}from"@cline/shared";import{resolveSessionDataDir as SF}from"@cline/shared/storage";import{existsSync as oC}from"node:fs";import{readFile as tC}from"node:fs/promises";import{formatDisplayUserInput as RF}from"@cline/shared";class S5{listeners=new Set;subscribe($,Z){let Q={listener:$,sessionId:Z?.sessionId?.trim()||void 0};return this.listeners.add(Q),()=>{this.listeners.delete(Q)}}emit($){let Z=$.payload.sessionId?.trim();for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==Z)continue;Q.listener($)}}get size(){return this.listeners.size}}async function I$($){let Z=$?.trim();if(!Z||!oC(Z))return[];try{let Q=(await tC(Z,"utf8")).trim();if(!Q)return[];let W=JSON.parse(Q);if(Array.isArray(W))return EF(W);if(W&&typeof W==="object"&&!Array.isArray(W)){let J=W.messages;if(Array.isArray(J))return EF(J)}return[]}catch{return[]}}function eC($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:RF($.content)};return{...$,content:$.content.map((Z)=>{if(Z.type!=="text"||typeof Z.text!=="string")return Z;return{...Z,text:RF(Z.text)}})}}function EF($){return $.map(eC)}function dJ($){return $?{...$}:void 0}async function NF($,Z){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await Z.queueSpawnRequest($);let W=await Z.upsertSubagentSessionFromHook($);if(!W)return;await Z.appendSubagentHookAudit(W,$),await Z.applySubagentStatus(W,$)}function b5($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function n0($){let Z=b5($);if(!Z)return;return Z.toLowerCase()==="unknown"?void 0:Z}function mQ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function WP($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function pJ($){let Z=$??200;return Number.isFinite(Z)?Math.max(0,Math.floor(Z)):200}function JP($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function XP($){return $.isSubagent!==!0&&!b5($.parentSessionId)}function YP($){let Z=$.match(/\d{13,}/g);if(!Z||Z.length===0)return 0;let Q=0;for(let W of Z){let J=Number.parseInt(W,10);if(Number.isFinite(J)&&J>Q)Q=J}return Q}function vQ($){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 jP($){let Z=pJ($);if(Z===0)return[];let Q=SF(),J=(await $P(Q,{withFileTypes:!0}).catch(()=>[])).filter((Y)=>Y.isDirectory()).map((Y)=>({entry:Y,recency:YP(Y.name.trim())})).sort((Y,j)=>j.recency-Y.recency||j.entry.name.localeCompare(Y.entry.name));return(await Promise.all(J.map(async({entry:Y})=>{let j=Y.name.trim();if(!j)return;let V=PF(Q,j,`${j}.json`),H=await CF(V,"utf8").catch(()=>{return});if(!H)return;let B;try{B=JSON.parse(H)}catch{return}let G=b0.safeParse(B);if(!G.success)return;return vQ(G.data)}))).filter((Y)=>Boolean(Y)).sort((Y,j)=>j.startedAt.localeCompare(Y.startedAt)).slice(0,Z)}async function VP($,Z,Q){let W=pJ(Z);if(W===0)return await $.listSessions(0),[];let J=Q.includeSubagents?W:JP(W),X=await $.listSessions(J);return(Q.includeSubagents?X:X.filter(XP)).slice(0,W)}function HP($){if(typeof $==="string")return $.trim();let Z=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let W=Q;if(W.type!=="text")continue;let J=W.text?.trim();if(J)Z.push(J)}return Z.join(`
501
- `).trim()}function wF($){return $.replace(/\s+/g," ").trim()}function BP($,Z){if($.length<=Z)return $;return`${$.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function GP($){for(let Z of["user","assistant"])for(let Q of $){if(Q.role!==Z)continue;let W=wF(HP(Q.content));if(!W)continue;let J=Z==="user"?wF(ZP(W)):W,X=QP(J.split(`
502
- `)[0]??J);return BP(X,50)}return}function KP($){let Z=0;for(let Q of $)Z+=mQ(Q.metrics?.cost)??0;return Z}function FP($){let Z,Q;for(let W=$.length-1;W>=0;W-=1){let J=$[W];if(!Z)Z=n0(J.modelInfo?.provider);if(!Q)Q=n0(J.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function AP($){return n0($?.provider)??n0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function fP($){return n0($?.model)??n0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function lJ($,Z){let Q=WP($.metadata),W=b5(Z?.title)??b5(Q?.title),J=mQ(Z?.totalCost)??mQ(Q?.totalCost),X=Q||W!==void 0||J!==void 0?{...Q??{},...W!==void 0?{title:W}:{},...J!==void 0?{totalCost:J}:{}}:void 0;return{...$,provider:n0(Z?.provider)??n0($.provider)??AP(Q)??"",model:n0(Z?.model)??n0($.model)??fP(Q)??"",metadata:X}}function UP($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function DP($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!UP(Q)}async function LP($,Z){return await Promise.all(Z.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let W=await $.readSessionMessages(Q.sessionId);return DP(Q,W)?{...Q,status:"idle"}:Q}))}async function bF($,Z){return await Promise.all(Z.map(async(Q)=>{let W=lJ(Q),J=Boolean(b5(W.metadata?.title)),X=Boolean(n0(W.provider)),Y=Boolean(n0(W.model)),j=mQ(W.metadata?.totalCost),V=j!==void 0&&j>0;if(J&&X&&Y&&V)return W;let H=await $.readSessionMessages(Q.sessionId);if(H.length===0)return W;let B=FP(H),G=KP(H);return lJ(Q,{title:J?void 0:GP(H),provider:X?void 0:B.provider,model:Y?void 0:B.model,totalCost:V||G<=0?void 0:G})}))}async function cQ($,Z={}){let Q=pJ(Z.limit),W=Z.includeSubagents===!0,J=await VP($,Q,{includeSubagents:W}),X=Z.includeManifestFallback===!0&&J.length<Q?await jP(Math.min(Math.max(Q*2,100),500)):[],Y=new Map;for(let H of[...J,...X]){if(Y.has(H.sessionId))continue;Y.set(H.sessionId,H)}let j=X.length===0?J:Array.from(Y.values()).sort((H,B)=>B.startedAt.localeCompare(H.startedAt)).slice(0,Q),V=await LP($,j);if(Z.hydrate===!1)return V.map((H)=>lJ(H));return await bF($,V)}async function _P($){let Z=$.trim();if(!Z)return;let Q=PF(SF(),Z,`${Z}.json`),W=await CF(Q,"utf8").catch(()=>{return});if(!W)return;try{let J=b0.safeParse(JSON.parse(W));return J.success?J.data.messages_path:void 0}catch{return}}async function rJ($,Z={}){let Q=new Map;return await cQ({listSessions:async(J)=>{let X=await $.listSessions(J);Q.clear();for(let Y of X)Q.set(Y.sessionId,Y);return X.map(v6)},readSessionMessages:async(J)=>{let X=Q.get(J)?.messagesPath??await _P(J);return await I$(X)}},Z)}var zA={};N(zA,{resolveSessionBackend:()=>KX,createRuntimeHost:()=>K4});import{captureSdkError as LA}from"@cline/shared";var rF={};N(rF,{HubRuntimeHost:()=>o1});import{captureSdkError as kF,createSessionId as IF,HUB_CHECKPOINT_CAPABILITY as qP,HUB_COMPACTION_CAPABILITY as MP,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as RP,HUB_HOOK_CAPABILITY_PREFIX as EP,HUB_MISTAKE_LIMIT_CAPABILITY as NP,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as wP,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as CP,isHubToolExecutorName as PP}from"@cline/shared";var hF={};N(hF,{createCoreSessionSnapshot:()=>U1,coreSessionSnapshotToRecord:()=>uQ});function zP($){return $?JSON.parse(JSON.stringify($)):void 0}function TP($){return $?JSON.parse(JSON.stringify($)):void 0}function OP($){let Z=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,W=(Array.isArray(Z?.history)?Z.history:[]).filter((Y)=>!!Y&&typeof Y==="object"&&!Array.isArray(Y)).flatMap((Y)=>{let j=typeof Y.ref==="string"?Y.ref.trim():"",V=Number(Y.createdAt),H=Number(Y.runCount);if(!j||!Number.isFinite(V)||!Number.isInteger(H))return[];return[{ref:j,createdAt:V,runCount:H,...Y.kind==="stash"||Y.kind==="commit"?{kind:Y.kind}:{}}]}),J=W.at(-1),X=$?.checkpointEnabled===!0?!0:void 0;if(!X&&W.length===0)return;return{...X?{enabled:X}:{},...J?{latest:J}:{},history:W}}function U1($){let{session:Z}=$,Q=zP(Z.metadata);return{version:1,sessionId:Z.sessionId,source:Z.source,status:Z.status,createdAt:Z.startedAt,updatedAt:Z.updatedAt,endedAt:Z.endedAt??null,exitCode:Z.exitCode??null,interactive:Z.interactive,workspace:{cwd:Z.cwd,root:Z.workspaceRoot},model:{providerId:Z.provider,modelId:Z.model},capabilities:{enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams},lineage:{...Z.parentSessionId?{parentSessionId:Z.parentSessionId}:{},...Z.parentAgentId?{parentAgentId:Z.parentAgentId}:{},...Z.agentId?{agentId:Z.agentId}:{},...Z.conversationId?{conversationId:Z.conversationId}:{},isSubagent:Z.isSubagent},...Z.teamName?{team:{name:Z.teamName}}:{},...Z.prompt?{prompt:Z.prompt}:{},...Q?{metadata:Q}:{},...Z.messagesPath?{artifacts:{messagesPath:Z.messagesPath}}:{},...$.messages?{messages:TP($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let W=OP(Q);return W?{checkpoint:W}:{}})()}}function uQ($){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 J4($){if(!$)return;return JSON.parse(JSON.stringify($))}var SP=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function xF($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function gF($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function mF($){let Z=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof Z.agentId==="string"?Z.agentId:"",conversationId:typeof Z.conversationId==="string"?Z.conversationId:"",iteration:typeof Z.iteration==="number"?Z.iteration:0,metadata:Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0}}function h2($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function vF($,Z){let Q={manifest:[],handlers:new Map};for(let J of Object.keys(Z.toolExecutors??{}).filter(PP)){let X=Z.toolExecutors?.[J];if(typeof X!=="function")continue;h2(Q,{kind:"toolExecutor",executor:J,capabilityName:`${wP}${J}`},async({payload:Y,abortSignal:j})=>{let V=Array.isArray(Y.args)?[...Y.args]:[],H={...mF(Y.context),signal:j};return{result:await X(...V,H)}})}for(let J of $?.extraTools??[])h2(Q,{kind:"tool",name:J.name,description:J.description,inputSchema:J4(J.inputSchema)??{},...J.lifecycle?{lifecycle:J4(J.lifecycle)}:{},capabilityName:`${RP}${J.name}`},async({payload:X,abortSignal:Y,progress:j})=>{let V={...mF(X.context),signal:Y};return{result:await J.execute(X.input,{...V,emitUpdate:(B)=>{j({update:B})}})}});let W=$?.hooks;if(W)for(let J of SP){let X=W[J];if(typeof X!=="function")continue;h2(Q,{kind:"hook",name:J,capabilityName:`${EP}${J}`},async({payload:Y})=>({control:await X(Y.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;h2(Q,{kind:"compaction",capabilityName:MP,config:xF($.compaction)},async({payload:X})=>({result:await J(X.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;h2(Q,{kind:"checkpoint",capabilityName:qP,config:xF($.checkpoint)},async({payload:X})=>({result:await J(X.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;h2(Q,{kind:"mistakeLimit",capabilityName:NP},async({payload:X})=>({result:await J(X.context)}))}if($?.userInstructionService){let J=$.userInstructionService;h2(Q,{kind:"userInstructionService",capabilityName:CP},async()=>{return await J.start().catch(()=>{}),{snapshot:{records:{skill:J.listRecords("skill"),rule:J.listRecords("rule"),workflow:J.listRecords("workflow")},runtimeCommands:J.listRuntimeCommands()}}})}return Q}function lF($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let Z=$.message;if(typeof Z==="string"&&Z.trim())return Z.trim()}return}function bP($){return lF($)??"Capability request was cancelled."}function yP($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function hP($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function kP($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=typeof Z.inputTokens==="number"?Z.inputTokens:void 0,W=typeof Z.outputTokens==="number"?Z.outputTokens:void 0;if(Q===void 0||W===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:typeof Z.cacheReadTokens==="number"?Z.cacheReadTokens:0,cacheWriteTokens:typeof Z.cacheWriteTokens==="number"?Z.cacheWriteTokens:0,totalCost:typeof Z.totalCost==="number"?Z.totalCost:0}}function cF($){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 iJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function x$($,Z){return iJ($?.[Z])??0}function IP($){let Z=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,W=$?.agent&&typeof $.agent==="object"?$.agent:void 0,J=W?.teamRole==="teammate"||W?.teamRole==="lead"?W.teamRole:void 0;return{event:{type:"usage",agentId:typeof W?.agentId==="string"?W.agentId:void 0,conversationId:typeof W?.conversationId==="string"?W.conversationId:void 0,parentAgentId:typeof W?.parentAgentId==="string"?W.parentAgentId:void 0,inputTokens:x$(Z,"inputTokens"),outputTokens:x$(Z,"outputTokens"),cacheReadTokens:x$(Z,"cacheReadTokens"),cacheWriteTokens:x$(Z,"cacheWriteTokens"),cost:iJ(Z?.totalCost),totalInputTokens:x$(Q,"inputTokens"),totalOutputTokens:x$(Q,"outputTokens"),totalCacheReadTokens:x$(Q,"cacheReadTokens"),totalCacheWriteTokens:x$(Q,"cacheWriteTokens"),totalCost:iJ(Q?.totalCost)},teamAgentId:typeof W?.teamAgentId==="string"?W.teamAgentId:void 0,teamRole:J}}function xP($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,W=hP(Q)?Q:Q==="failed"?"error":"completed",J=kP($?.usage??Z?.usage);return{type:"done",reason:W,text:typeof $?.text==="string"?$.text:typeof Z?.text==="string"?Z.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof Z?.iterations==="number"?Z.iterations:0,usage:J}}function dQ($,Z){return $.error?.message??`hub command failed: ${Z}`}function y5($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function pF($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof Z?.agentId==="string"?Z.agentId:void 0),parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,isSubagent:typeof Z?.isSubagent==="boolean"?Z.isSubagent:!1,source:typeof Z?.source==="string"?Z.source:T0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:y5($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:y5($.status)==="completed"?0:y5($.status)==="failed"?1:void 0,status:y5($.status),interactive:Z?.interactive===!0,provider:typeof Z?.provider==="string"?Z.provider:"hub",model:typeof Z?.model==="string"?Z.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof Z?.teamName==="string"?Z.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??Z?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??Z?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??Z?.enableTeams===!0,prompt:typeof Z?.prompt==="string"?Z.prompt:void 0,metadata:Z,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,hookPath:typeof Z?.hookPath==="string"?Z.hookPath:void 0}}function g$($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function gP($){let Z=g$($?.snapshot);if(Z)return uQ(Z);let Q=$?.session;return Q?pF(Q):void 0}function uF($,Z,Q){let W=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot||Z.config.cwd;return b0.parse({version:1,session_id:$,source:Z.source??T0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:y5(Q?.status),interactive:Z.interactive===!0,provider:Z.config.providerId,model:Z.config.modelId,cwd:Q?.cwd?.trim()||Z.config.cwd,workspace_root:W,team_name:Z.config.teamName,enable_tools:Z.config.enableTools,enable_spawn:Z.config.enableSpawnAgent,enable_teams:Z.config.enableAgentTeams,prompt:Z.prompt?.trim()||void 0,metadata:Z.sessionMetadata&&Object.keys(Z.sessionMetadata).length>0?Z.sessionMetadata:void 0})}function dF($,Z){return b0.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??Z.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class o1{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new S5;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,Z){this.clientContext=Z,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd},this.defaultCapabilities=M0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Q)=>this.requestPendingPromptsList(Q),update:(Q)=>this.requestPendingPromptUpdate(Q),delete:(Q)=>this.requestPendingPromptDelete(Q)},this.client=this.createClient($.url)}createClient($){return new W1({...this.clientOptions,url:$})}async replaceClient($){let Z=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(Z.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!o9($,"session.create"))return!1;let Z=await t9({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!Z)return!1;return await this.replaceClient(Z),!0}registerPlannedSession($,Z,Q){if(this.sessionCapabilities.set($,Z),Q.size>0)this.sessionClientContributionHandlers.set($,Q);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let Z=this.resolveCapabilities($),Q=vF($.localRuntime,Z),W=$.config.sessionId?.trim()||IF(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:J4({...$.config,sessionId:W}),metadata:{...$.sessionMetadata??{},source:$.source??T0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:J4($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(W,Z,Q.handlers);let X;try{X=await J()}catch(H){if(this.cleanupPlannedSession(W),await this.recoverLocalHubStartupDeadlock(H)){this.registerPlannedSession(W,Z,Q.handlers);try{X=await J()}catch(B){throw this.cleanupPlannedSession(W),B}}else throw H}let Y=g$(X.payload?.snapshot),j=X.payload?.session,V=(Y?.sessionId??j?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(W),Error("Hub runtime did not return a session id.");if(V!==W)this.cleanupPlannedSession(W),this.registerPlannedSession(V,Z,Q.handlers);return{sessionId:V,manifest:Y?dF(Y,$):uF(V,$,j),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let W=$.start,J=W?this.resolveCapabilities(W):void 0,X=W?vF(W.localRuntime,J??{}):{manifest:[],handlers:new Map},Y=W?W.config.sessionId?.trim()||IF():void 0;if(Y&&J)this.sessionCapabilities.set(Y,J);if(Y&&X.handlers.size>0)this.sessionClientContributionHandlers.set(Y,X.handlers),this.ensureSessionSubscription(Y);let j;try{j=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.config.workspaceRoot?.trim()||W.config.cwd,cwd:W.config.cwd??$.cwd,sessionConfig:J4({...W.config,sessionId:Y}),metadata:{...W.sessionMetadata??{},source:W.source??T0.CORE,provider:W.config.providerId,model:W.config.modelId,enableTools:W.config.enableTools,enableSpawn:W.config.enableSpawnAgent,enableTeams:W.config.enableAgentTeams,teamName:W.config.teamName,prompt:W.prompt,interactive:W.interactive===!0},runtimeOptions:{...X.manifest.length>0?{clientContributions:X.manifest}:{},...W.localRuntime?.configExtensions?{configExtensions:W.localRuntime.configExtensions}:{}},toolPolicies:J4(W.toolPolicies)}:{}},Z)}catch(F){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw F}if(!j.ok){let F=typeof j.payload?.error==="string"?j.payload.error:"session.restore failed";if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error(F)}let V=g$(j.payload?.snapshot),H=j.payload?.session,B=(V?.sessionId??H?.sessionId)?.trim();if(Q&&!B){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error("Hub checkpoint restore returned no session id")}if(B&&Y&&B!==Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);if(B&&J)this.sessionCapabilities.set(B,J);if(B&&X.handlers.size>0)this.sessionClientContributionHandlers.set(B,X.handlers);if(B)this.ensureSessionSubscription(B);let G=Array.isArray(j.payload?.messages)?j.payload.messages:void 0,K=j.payload?.checkpoint;if(!K)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:B,startResult:B?{sessionId:B,manifest:V?dF(V,W??{}):uF(B,W??{},H),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:G,checkpoint:K}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,updated:Z.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,removed:Z.payload?.removed===!0}}async getAccumulatedUsage($){let Z=await this.client.command("session.get",{includeSnapshot:!0},$),Q=g$(Z.payload?.snapshot);if(Q){let Y=Q.usage?{...Q.usage}:void 0,j=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return Y||j?{usage:Y,aggregateUsage:j}:void 0}let W=Z.payload?.session,J=cF(W?.usage),X=cF(W?.aggregateUsage);return J||X?{usage:J,aggregateUsage:X}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:lF(Z)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,Z]of this.sessionSubscriptions){Z();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(I1(Q))return;throw Q}return gP(Z.payload)}async listSessions($=100){let Z=await this.client.command("session.list",{limit:$}),Q=Array.isArray(Z.payload?.snapshots)?Z.payload.snapshots.flatMap((J)=>{let X=g$(J);return X?[uQ(X)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(pF)}async listSettings($){let Z=await this.client.command("settings.list",gF($));if(!Z.ok)throw Error(dQ(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",gF($));if(!Z.ok)throw Error(dQ(Z,"settings.toggle"));return{snapshot:Z.payload?.snapshot,changedTypes:Array.isArray(Z.payload?.changedTypes)?Z.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,Z){let Q={...Z.metadata??{}};if(typeof Z.prompt==="string")Q.prompt=Z.prompt;if(typeof Z.title==="string")Q.title=Z.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw kF(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(dQ(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:Z,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(dQ(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,Z){return this.events.subscribe($,Z)}ensureSessionSubscription($){let Z=$.trim();if(!Z||this.sessionSubscriptions.has(Z))return;let Q=this.client.subscribe((W)=>{this.handleHubEvent(W)},{sessionId:Z});this.sessionSubscriptions.set(Z,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let Z=$.trim();if(!Z)return;this.sessionSubscriptions.get(Z)?.(),this.sessionSubscriptions.delete(Z),this.agentDoneEmittedForCurrentRunBySession.delete(Z)}resolveCapabilities($){return M0(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:xP($.payload)}})}handleHubEvent($){let Z=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!Z)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(Z);let Q=g$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"assistant.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",W=$.payload?.redacted===!0;if(!Q&&!W)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:W}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:Z,payload:$.payload});return}case"usage.updated":{let Q=IP($.payload);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:Z,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"tool",toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Q=g$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:Z,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:Z,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=g$($.payload?.snapshot),W=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:Z,payload:{...$.payload,reason:W}}),Q?.interactive===!0&&H0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:W,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{kF(this.telemetry,{component:"core",operation:$,error:Z,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let Z=$.sessionId?.trim();if(!Z)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let W=typeof $.payload?.requestId==="string"?$.payload.requestId:"",J=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!W)return;let X=this.sessionClientContributionHandlers.get(Z)?.get(J);if(!X){await this.client.command("capability.respond",{requestId:W,ok:!1,error:`No client contribution handler registered for capability ${J} in session ${Z}.`},Z).catch(()=>{});return}let Y=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},j=new AbortController;this.activeCapabilityAbortControllers.set(W,j);let V=(H)=>{this.client.command("capability.progress",{requestId:W,payload:H},Z).catch((B)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",B,$)})};try{let H=await X({payload:Y,abortSignal:j.signal,progress:V});if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!0,payload:H},Z)}catch(H){if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!1,error:H instanceof Error?H.message:String(H)},Z)}finally{this.activeCapabilityAbortControllers.delete(W)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let Z=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!Z)return;let Q=this.activeCapabilityAbortControllers.get(Z);if(!Q)return;Q.abort(bP($.payload.error))}async handleApprovalRequested($){let Z=$.sessionId?.trim();if(!Z)return;let Q=this.sessionCapabilities.get(Z)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let W=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",X=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!W||!J||!X)return;let Y=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},j=yP($.payload?.inputJson);this.pendingApprovalToolCallIds.add(J),this.emitToolCallContentStart({sessionId:Z,toolCallId:J,toolName:X,toolInput:j});let V=await Promise.resolve(Q({sessionId:Z,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:Z,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:J,toolName:X,input:j,policy:Y})).catch((H)=>({approved:!1,reason:H instanceof Error?H.message:`Tool approval request failed: ${String(H)}`}));await this.client.command("approval.respond",{approvalId:W,approved:V.approved,reason:V.reason},Z).catch(()=>{})}}var iF={};N(iF,{RemoteRuntimeHost:()=>X4});class X4 extends o1{constructor($){super({url:G$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var nF={};N(nF,{SqliteSessionStore:()=>L1});import{existsSync as mP,mkdirSync as vP}from"node:fs";import{join as cP}from"node:path";import{asBool as h5,asOptionalString as D1,asString as t1,ensureSessionSchema as uP,loadSqliteDb as dP,nowIso as lQ,toBoolInt as k5}from"@cline/shared/db";import{resolveDbDataDir as lP}from"@cline/shared/storage";class L1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??lP()}init(){this.getRawDb()}ensureSessionsDir(){if(!mP(this.sessionsDirPath))vP(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return cP(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=dP(this.sessionDbPath());return uP($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}create($){let Z=lQ();this.run(`INSERT OR REPLACE INTO sessions (
499
+ `))X=X.slice(1);return{frontmatter:J,body:X}}function i0($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function Mw($){if(!Array.isArray($))return;let Z=$.map((Q)=>typeof Q==="string"?Q.trim():"").filter((Q)=>Q.length>0);return Z.length>0?Z:void 0}function mJ($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function Rw($){let Z=mJ($);if(!Z)return;let Q=i0(Z.providerId),W=i0(Z.modelId);if(Q===void 0&&W===void 0)return;return{providerId:Q,modelId:W}}function Ew($){if(typeof $!=="string")return;let Z=$.trim().toLowerCase();if(Z==="act"||Z==="plan"||Z==="yolo")return Z;return}function OF($,Z={}){let Q=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!Q)return;let W=[...new Set(Q.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0))];if(Array.isArray($)&&Z.preserveEmptyArray)return W;return W.length>0?W:void 0}var Nw=new Set(X$);function Cw($){let Z=OF($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((W)=>!Nw.has(W));if(Q.length>0)throw Error(`unknown tool(s): ${Q.join(", ")}`);return Z}var ww=new Set(["rules","skills","plugins"]);function Pw($){let Z=OF($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((W)=>!ww.has(W));if(Q.length>0)throw Error(`unknown extension(s): ${Q.join(", ")}`);return Z}function xJ($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function gJ($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function vJ($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Q)=>vJ(Q)).join(",")}]`;let Z=Object.entries($).filter(([,Q])=>Q!==void 0);return Z.sort(([Q],[W])=>Q<W?-1:Q>W?1:0),`{${Z.map(([Q,W])=>`${JSON.stringify(Q)}:${vJ(W)}`).join(",")}}`}function qF($,Z){let Q=zw("sha256");return Q.update(vJ($)),Q.update(`
500
+ `),Q.update(Z),Q.digest("hex")}function Sw($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var bw=["schedule","timezone"],yw=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],hw=["cwd"];function TF($,Z,Q,W,J){return{externalId:$,relativePath:$,triggerKind:Z,body:Q,contentHash:qF(W,Q),error:J}}function f1($,Z,Q,W,J,X){return{externalId:$,relativePath:Z,triggerKind:Q,body:W,contentHash:J,error:X}}function MF($){let Z=$.relativePath.replace(/\\/g,"/"),Q=Ow(Z),{frontmatter:W,body:J}=qw($.raw),X={};if(W!==void 0&&W.trim().length>0)try{let U=Tw.parse(W);if(U&&typeof U==="object"&&!Array.isArray(U))X=U;else if(U!==null&&U!==void 0)return TF(Z,Q,J,{},"frontmatter must be a YAML mapping")}catch(U){return TF(Z,Q,J,{},U instanceof Error?`failed to parse frontmatter: ${U.message}`:"failed to parse frontmatter")}let Y=qF(X,J),j=i0(X.id),V=j??Z;if(Q!=="schedule"){for(let U of bw)if(X[U]!==void 0)return f1(V,Z,Q,J,Y,`field "${U}" is only allowed on *.cron.md specs`)}for(let U of hw)if(X[U]!==void 0)return f1(V,Z,Q,J,Y,`field "${U}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Q!=="event"){for(let U of yw)if(X[U]!==void 0)return f1(V,Z,Q,J,Y,`field "${U}" is only allowed on .event.md specs`)}let B=i0(X.prompt),H=J.trim(),G=B??(H.length>0?H:void 0);if(!G)return f1(V,Z,Q,J,Y,"prompt is required (frontmatter `prompt` or markdown body)");let K=i0(X.workspaceRoot);if(!K)return f1(V,Z,Q,J,Y,"workspaceRoot is required");let F,A;try{F=Cw(X.tools),A=Pw(X.extensions)}catch(U){return f1(V,Z,Q,J,Y,U instanceof Error?U.message:String(U))}let L=Ew(X.mode);if(X.mode!==void 0&&L===void 0)return f1(V,Z,Q,J,Y,"mode must be one of: act, plan, yolo");let f={id:j,title:i0(X.title)??j??Sw(Z),prompt:G,workspaceRoot:K,mode:L??"yolo",systemPrompt:i0(X.systemPrompt),modelSelection:Rw(X.modelSelection),maxIterations:xJ(X.maxIterations),timeoutSeconds:xJ(X.timeoutSeconds),tools:F,notesDirectory:i0(X.notesDirectory),extensions:A,source:i0(X.source)??"user",tags:Mw(X.tags),enabled:typeof X.enabled==="boolean"?X.enabled:!0,metadata:mJ(X.metadata)},D;if(Q==="schedule"){let U=i0(X.schedule);if(!U)return f1(V,Z,Q,J,Y,"schedule is required for *.cron.md specs");let T=i0(X.timezone);try{Uj(U,T)}catch(z){return f1(V,Z,Q,J,Y,z instanceof Error?z.message:String(z))}D={...f,triggerKind:"schedule",schedule:U,timezone:T}}else if(Q==="event"){let U=i0(X.event);if(!U)return f1(V,Z,Q,J,Y,"event is required for .event.md specs");D={...f,triggerKind:"event",event:U,filters:mJ(X.filters),debounceSeconds:gJ(X.debounceSeconds),dedupeWindowSeconds:gJ(X.dedupeWindowSeconds),cooldownSeconds:gJ(X.cooldownSeconds),maxParallel:xJ(X.maxParallel)}}else D={...f,triggerKind:"one_off"};return{externalId:V,relativePath:Z,triggerKind:Q,body:J,contentHash:Y,spec:D}}function cw($,Z){return mw($,Z).replace(/\\/g,"/")}function uw($){if(!kw($))return[];let Z=[],Q=[$];while(Q.length>0){let W=Q.pop();if(!W)continue;let J;try{J=Iw(W,{withFileTypes:!0})}catch{continue}for(let X of J){let Y=`${W}/${X.name}`;if(X.isDirectory()){if(X.name==="reports")continue;Q.push(Y);continue}if(!X.isFile())continue;if(!X.name.endsWith(".md"))continue;Z.push(Y)}}return Z}class cJ{store;cronDir;constructor($){this.store=$.store,this.cronDir=vw($.specs??($.workspaceRoot?{scope:"workspace",workspaceRoot:$.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let $={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},Z=uw(this.cronDir),Q=new Set;for(let J of Z){let X=cw(this.cronDir,J);Q.add(X),$.scanned+=1;let Y=await this.reconcileFile(X,J);if(Y){if($.changes.push(Y),$.upserted+=1,Y.parse.error)$.invalidParses+=1}}let W=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let J of W)if(!Q.has(J.sourcePath))this.handleFileDeleted(J),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,Z){let Q=this.store.getSpecBySourcePath($),W,J;try{W=xw(Z,"utf8"),J=gw(Z).mtimeMs}catch{return}let Y=MF({relativePath:$,raw:W}),j=this.store.upsertSpec({externalId:Y.externalId,sourcePath:$,triggerKind:Y.triggerKind,sourceMtimeMs:J,sourceHash:Y.contentHash,parseStatus:Y.error?"invalid":"valid",parseError:Y.error,spec:Y.spec});if(!Y.error&&Y.triggerKind==="schedule"&&j.record.enabled)this.applyScheduleNextRunAt(j.record,{forceReset:!Q||Q.removed||!Q.enabled||Q.scheduleExpr!==j.record.scheduleExpr||Q.timezone!==j.record.timezone});return{relativePath:$,result:j,parse:Y}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Z of $)this.applyScheduleNextRunAt(Z,{forceReset:!1})}applyScheduleNextRunAt($,Z){if(!$.scheduleExpr)return;if(!Z.forceReset&&$.nextRunAt)return;try{let Q=Date.now(),W=$.lastRunAt?Math.max(Q,new Date($.lastRunAt).getTime()):Q,J=i$($.scheduleExpr,W,$.timezone),X=new Date(J).toISOString();if($.nextRunAt!==X)this.store.updateSpecNextRunAt($.specId,X)}catch{}}}import{existsSync as dw,mkdirSync as lw,watch as pw}from"node:fs";import{relative as rw,resolve as iw}from"node:path";var nw=250;class uJ{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??nw),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{lw($,{recursive:!0}),this.watcher=pw($,{recursive:!0},(Z,Q)=>{if(!Q)return;let W=String(Q).replace(/\\/g,"/");if(!W.endsWith(".md"))return;if(W.startsWith("reports/"))return;this.scheduleReconcile(W)}),this.watcher.on("error",this.onError)}catch(Z){this.onError(Z)}}stop(){for(let $ of this.pending.values())clearTimeout($);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile($){let Z=this.pending.get($);if(Z)clearTimeout(Z);let Q=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,Q)}async reconcileNow($){try{let Z=iw(this.reconciler.getCronDir(),$);if(!dw(Z)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Q=rw(this.reconciler.getCronDir(),Z).replace(/\\/g,"/");await this.reconciler.reconcileFile(Q,Z),await this.onReconciled()}catch(Z){this.onError(Z)}}}class P5{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new x4({dbPath:$.dbPath});let Z=$.specs;this.reconciler=new cJ({store:this.store,specs:Z}),this.materializer=new P4({store:this.store}),this.eventIngress=new IJ({store:this.store,logger:$.logger}),this.runner=new y4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:Z,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new uJ({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let W=$.logger;if(W)if(W.error)W.error("cron.watcher.failed",{error:Q});else W.log("cron.watcher.failed",{error:Q})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}var SF={};N(SF,{manifestToSessionRecord:()=>vQ,listSessionHistoryFromBackend:()=>rJ,listSessionHistory:()=>cQ,hydrateSessionHistory:()=>PF});import{readdir as ow,readFile as NF}from"node:fs/promises";import{join as CF}from"node:path";import{formatDisplayUserInput as tw,normalizeUserInput as ew}from"@cline/shared";import{resolveSessionDataDir as wF}from"@cline/shared/storage";import{existsSync as aw}from"node:fs";import{readFile as sw}from"node:fs/promises";class S5{listeners=new Set;subscribe($,Z){let Q={listener:$,sessionId:Z?.sessionId?.trim()||void 0};return this.listeners.add(Q),()=>{this.listeners.delete(Q)}}emit($){let Z=$.payload.sessionId?.trim();for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==Z)continue;Q.listener($)}}get size(){return this.listeners.size}}async function I$($){let Z=$?.trim();if(!Z||!aw(Z))return[];try{let Q=(await sw(Z,"utf8")).trim();if(!Q)return[];let W=JSON.parse(Q);if(Array.isArray(W))return W;if(W&&typeof W==="object"&&!Array.isArray(W)){let J=W.messages;if(Array.isArray(J))return J}return[]}catch{return[]}}function dJ($){return $?{...$}:void 0}async function RF($,Z){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await Z.queueSpawnRequest($);let W=await Z.upsertSubagentSessionFromHook($);if(!W)return;await Z.appendSubagentHookAudit(W,$),await Z.applySubagentStatus(W,$)}function b5($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function n0($){let Z=b5($);if(!Z)return;return Z.toLowerCase()==="unknown"?void 0:Z}function mQ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function $P($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function pJ($){let Z=$??200;return Number.isFinite(Z)?Math.max(0,Math.floor(Z)):200}function ZP($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function QP($){return $.isSubagent!==!0&&!b5($.parentSessionId)}function WP($){let Z=$.match(/\d{13,}/g);if(!Z||Z.length===0)return 0;let Q=0;for(let W of Z){let J=Number.parseInt(W,10);if(Number.isFinite(J)&&J>Q)Q=J}return Q}function vQ($){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 JP($){let Z=pJ($);if(Z===0)return[];let Q=wF(),J=(await ow(Q,{withFileTypes:!0}).catch(()=>[])).filter((Y)=>Y.isDirectory()).map((Y)=>({entry:Y,recency:WP(Y.name.trim())})).sort((Y,j)=>j.recency-Y.recency||j.entry.name.localeCompare(Y.entry.name));return(await Promise.all(J.map(async({entry:Y})=>{let j=Y.name.trim();if(!j)return;let V=CF(Q,j,`${j}.json`),B=await NF(V,"utf8").catch(()=>{return});if(!B)return;let H;try{H=JSON.parse(B)}catch{return}let G=b0.safeParse(H);if(!G.success)return;return vQ(G.data)}))).filter((Y)=>Boolean(Y)).sort((Y,j)=>j.startedAt.localeCompare(Y.startedAt)).slice(0,Z)}async function XP($,Z,Q){let W=pJ(Z);if(W===0)return await $.listSessions(0),[];let J=Q.includeSubagents?W:ZP(W),X=await $.listSessions(J);return(Q.includeSubagents?X:X.filter(QP)).slice(0,W)}function YP($){if(typeof $==="string")return $.trim();let Z=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let W=Q;if(W.type!=="text")continue;let J=W.text?.trim();if(J)Z.push(J)}return Z.join(`
501
+ `).trim()}function EF($){return $.replace(/\s+/g," ").trim()}function jP($,Z){if($.length<=Z)return $;return`${$.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function VP($){for(let Z of["user","assistant"])for(let Q of $){if(Q.role!==Z)continue;let W=EF(YP(Q.content));if(!W)continue;let J=Z==="user"?EF(tw(W)):W,X=ew(J.split(`
502
+ `)[0]??J);return jP(X,50)}return}function BP($){let Z=0;for(let Q of $)Z+=mQ(Q.metrics?.cost)??0;return Z}function HP($){let Z,Q;for(let W=$.length-1;W>=0;W-=1){let J=$[W];if(!Z)Z=n0(J.modelInfo?.provider);if(!Q)Q=n0(J.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function GP($){return n0($?.provider)??n0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function KP($){return n0($?.model)??n0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function lJ($,Z){let Q=$P($.metadata),W=b5(Z?.title)??b5(Q?.title),J=mQ(Z?.totalCost)??mQ(Q?.totalCost),X=Q||W!==void 0||J!==void 0?{...Q??{},...W!==void 0?{title:W}:{},...J!==void 0?{totalCost:J}:{}}:void 0;return{...$,provider:n0(Z?.provider)??n0($.provider)??GP(Q)??"",model:n0(Z?.model)??n0($.model)??KP(Q)??"",metadata:X}}function FP($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function AP($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!FP(Q)}async function fP($,Z){return await Promise.all(Z.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let W=await $.readSessionMessages(Q.sessionId);return AP(Q,W)?{...Q,status:"idle"}:Q}))}async function PF($,Z){return await Promise.all(Z.map(async(Q)=>{let W=lJ(Q),J=Boolean(b5(W.metadata?.title)),X=Boolean(n0(W.provider)),Y=Boolean(n0(W.model)),j=mQ(W.metadata?.totalCost),V=j!==void 0&&j>0;if(J&&X&&Y&&V)return W;let B=await $.readSessionMessages(Q.sessionId);if(B.length===0)return W;let H=HP(B),G=BP(B);return lJ(Q,{title:J?void 0:VP(B),provider:X?void 0:H.provider,model:Y?void 0:H.model,totalCost:V||G<=0?void 0:G})}))}async function cQ($,Z={}){let Q=pJ(Z.limit),W=Z.includeSubagents===!0,J=await XP($,Q,{includeSubagents:W}),X=Z.includeManifestFallback===!0&&J.length<Q?await JP(Math.min(Math.max(Q*2,100),500)):[],Y=new Map;for(let B of[...J,...X]){if(Y.has(B.sessionId))continue;Y.set(B.sessionId,B)}let j=X.length===0?J:Array.from(Y.values()).sort((B,H)=>H.startedAt.localeCompare(B.startedAt)).slice(0,Q),V=await fP($,j);if(Z.hydrate===!1)return V.map((B)=>lJ(B));return await PF($,V)}async function UP($){let Z=$.trim();if(!Z)return;let Q=CF(wF(),Z,`${Z}.json`),W=await NF(Q,"utf8").catch(()=>{return});if(!W)return;try{let J=b0.safeParse(JSON.parse(W));return J.success?J.data.messages_path:void 0}catch{return}}async function rJ($,Z={}){let Q=new Map;return await cQ({listSessions:async(J)=>{let X=await $.listSessions(J);Q.clear();for(let Y of X)Q.set(Y.sessionId,Y);return X.map(v6)},readSessionMessages:async(J)=>{let X=Q.get(J)?.messagesPath??await UP(J);return await I$(X)}},Z)}var LA={};N(LA,{resolveSessionBackend:()=>KX,createRuntimeHost:()=>K4});import{captureSdkError as UA}from"@cline/shared";var lF={};N(lF,{HubRuntimeHost:()=>o1});import{captureSdkError as yF,createSessionId as hF,HUB_CHECKPOINT_CAPABILITY as zP,HUB_COMPACTION_CAPABILITY as TP,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as OP,HUB_HOOK_CAPABILITY_PREFIX as qP,HUB_MISTAKE_LIMIT_CAPABILITY as MP,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as RP,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as EP,isHubToolExecutorName as NP}from"@cline/shared";var bF={};N(bF,{createCoreSessionSnapshot:()=>U1,coreSessionSnapshotToRecord:()=>uQ});function DP($){return $?JSON.parse(JSON.stringify($)):void 0}function LP($){return $?JSON.parse(JSON.stringify($)):void 0}function _P($){let Z=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,W=(Array.isArray(Z?.history)?Z.history:[]).filter((Y)=>!!Y&&typeof Y==="object"&&!Array.isArray(Y)).flatMap((Y)=>{let j=typeof Y.ref==="string"?Y.ref.trim():"",V=Number(Y.createdAt),B=Number(Y.runCount);if(!j||!Number.isFinite(V)||!Number.isInteger(B))return[];return[{ref:j,createdAt:V,runCount:B,...Y.kind==="stash"||Y.kind==="commit"?{kind:Y.kind}:{}}]}),J=W.at(-1),X=$?.checkpointEnabled===!0?!0:void 0;if(!X&&W.length===0)return;return{...X?{enabled:X}:{},...J?{latest:J}:{},history:W}}function U1($){let{session:Z}=$,Q=DP(Z.metadata);return{version:1,sessionId:Z.sessionId,source:Z.source,status:Z.status,createdAt:Z.startedAt,updatedAt:Z.updatedAt,endedAt:Z.endedAt??null,exitCode:Z.exitCode??null,interactive:Z.interactive,workspace:{cwd:Z.cwd,root:Z.workspaceRoot},model:{providerId:Z.provider,modelId:Z.model},capabilities:{enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams},lineage:{...Z.parentSessionId?{parentSessionId:Z.parentSessionId}:{},...Z.parentAgentId?{parentAgentId:Z.parentAgentId}:{},...Z.agentId?{agentId:Z.agentId}:{},...Z.conversationId?{conversationId:Z.conversationId}:{},isSubagent:Z.isSubagent},...Z.teamName?{team:{name:Z.teamName}}:{},...Z.prompt?{prompt:Z.prompt}:{},...Q?{metadata:Q}:{},...Z.messagesPath?{artifacts:{messagesPath:Z.messagesPath}}:{},...$.messages?{messages:LP($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let W=_P(Q);return W?{checkpoint:W}:{}})()}}function uQ($){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 J4($){if(!$)return;return JSON.parse(JSON.stringify($))}var CP=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function kF($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function IF($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function xF($){let Z=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof Z.agentId==="string"?Z.agentId:"",conversationId:typeof Z.conversationId==="string"?Z.conversationId:"",iteration:typeof Z.iteration==="number"?Z.iteration:0,metadata:Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0}}function h2($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function gF($,Z){let Q={manifest:[],handlers:new Map};for(let J of Object.keys(Z.toolExecutors??{}).filter(NP)){let X=Z.toolExecutors?.[J];if(typeof X!=="function")continue;h2(Q,{kind:"toolExecutor",executor:J,capabilityName:`${RP}${J}`},async({payload:Y,abortSignal:j})=>{let V=Array.isArray(Y.args)?[...Y.args]:[],B={...xF(Y.context),signal:j};return{result:await X(...V,B)}})}for(let J of $?.extraTools??[])h2(Q,{kind:"tool",name:J.name,description:J.description,inputSchema:J4(J.inputSchema)??{},...J.lifecycle?{lifecycle:J4(J.lifecycle)}:{},capabilityName:`${OP}${J.name}`},async({payload:X,abortSignal:Y,progress:j})=>{let V={...xF(X.context),signal:Y};return{result:await J.execute(X.input,{...V,emitUpdate:(H)=>{j({update:H})}})}});let W=$?.hooks;if(W)for(let J of CP){let X=W[J];if(typeof X!=="function")continue;h2(Q,{kind:"hook",name:J,capabilityName:`${qP}${J}`},async({payload:Y})=>({control:await X(Y.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;h2(Q,{kind:"compaction",capabilityName:TP,config:kF($.compaction)},async({payload:X})=>({result:await J(X.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;h2(Q,{kind:"checkpoint",capabilityName:zP,config:kF($.checkpoint)},async({payload:X})=>({result:await J(X.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;h2(Q,{kind:"mistakeLimit",capabilityName:MP},async({payload:X})=>({result:await J(X.context)}))}if($?.userInstructionService){let J=$.userInstructionService;h2(Q,{kind:"userInstructionService",capabilityName:EP},async()=>{return await J.start().catch(()=>{}),{snapshot:{records:{skill:J.listRecords("skill"),rule:J.listRecords("rule"),workflow:J.listRecords("workflow")},runtimeCommands:J.listRuntimeCommands()}}})}return Q}function uF($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let Z=$.message;if(typeof Z==="string"&&Z.trim())return Z.trim()}return}function wP($){return uF($)??"Capability request was cancelled."}function PP($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function SP($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function bP($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=typeof Z.inputTokens==="number"?Z.inputTokens:void 0,W=typeof Z.outputTokens==="number"?Z.outputTokens:void 0;if(Q===void 0||W===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:typeof Z.cacheReadTokens==="number"?Z.cacheReadTokens:0,cacheWriteTokens:typeof Z.cacheWriteTokens==="number"?Z.cacheWriteTokens:0,totalCost:typeof Z.totalCost==="number"?Z.totalCost:0}}function mF($){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 iJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function x$($,Z){return iJ($?.[Z])??0}function yP($){let Z=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,W=$?.agent&&typeof $.agent==="object"?$.agent:void 0,J=W?.teamRole==="teammate"||W?.teamRole==="lead"?W.teamRole:void 0;return{event:{type:"usage",agentId:typeof W?.agentId==="string"?W.agentId:void 0,conversationId:typeof W?.conversationId==="string"?W.conversationId:void 0,parentAgentId:typeof W?.parentAgentId==="string"?W.parentAgentId:void 0,inputTokens:x$(Z,"inputTokens"),outputTokens:x$(Z,"outputTokens"),cacheReadTokens:x$(Z,"cacheReadTokens"),cacheWriteTokens:x$(Z,"cacheWriteTokens"),cost:iJ(Z?.totalCost),totalInputTokens:x$(Q,"inputTokens"),totalOutputTokens:x$(Q,"outputTokens"),totalCacheReadTokens:x$(Q,"cacheReadTokens"),totalCacheWriteTokens:x$(Q,"cacheWriteTokens"),totalCost:iJ(Q?.totalCost)},teamAgentId:typeof W?.teamAgentId==="string"?W.teamAgentId:void 0,teamRole:J}}function hP($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,W=SP(Q)?Q:Q==="failed"?"error":"completed",J=bP($?.usage??Z?.usage);return{type:"done",reason:W,text:typeof $?.text==="string"?$.text:typeof Z?.text==="string"?Z.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof Z?.iterations==="number"?Z.iterations:0,usage:J}}function dQ($,Z){return $.error?.message??`hub command failed: ${Z}`}function y5($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function dF($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof Z?.agentId==="string"?Z.agentId:void 0),parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,isSubagent:typeof Z?.isSubagent==="boolean"?Z.isSubagent:!1,source:typeof Z?.source==="string"?Z.source:T0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:y5($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:y5($.status)==="completed"?0:y5($.status)==="failed"?1:void 0,status:y5($.status),interactive:Z?.interactive===!0,provider:typeof Z?.provider==="string"?Z.provider:"hub",model:typeof Z?.model==="string"?Z.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof Z?.teamName==="string"?Z.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??Z?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??Z?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??Z?.enableTeams===!0,prompt:typeof Z?.prompt==="string"?Z.prompt:void 0,metadata:Z,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,hookPath:typeof Z?.hookPath==="string"?Z.hookPath:void 0}}function g$($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function kP($){let Z=g$($?.snapshot);if(Z)return uQ(Z);let Q=$?.session;return Q?dF(Q):void 0}function vF($,Z,Q){let W=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot||Z.config.cwd;return b0.parse({version:1,session_id:$,source:Z.source??T0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:y5(Q?.status),interactive:Z.interactive===!0,provider:Z.config.providerId,model:Z.config.modelId,cwd:Q?.cwd?.trim()||Z.config.cwd,workspace_root:W,team_name:Z.config.teamName,enable_tools:Z.config.enableTools,enable_spawn:Z.config.enableSpawnAgent,enable_teams:Z.config.enableAgentTeams,prompt:Z.prompt?.trim()||void 0,metadata:Z.sessionMetadata&&Object.keys(Z.sessionMetadata).length>0?Z.sessionMetadata:void 0})}function cF($,Z){return b0.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??Z.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class o1{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new S5;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,Z){this.clientContext=Z,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd},this.defaultCapabilities=M0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Q)=>this.requestPendingPromptsList(Q),update:(Q)=>this.requestPendingPromptUpdate(Q),delete:(Q)=>this.requestPendingPromptDelete(Q)},this.client=this.createClient($.url)}createClient($){return new W1({...this.clientOptions,url:$})}async replaceClient($){let Z=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(Z.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!o9($,"session.create"))return!1;let Z=await t9({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!Z)return!1;return await this.replaceClient(Z),!0}registerPlannedSession($,Z,Q){if(this.sessionCapabilities.set($,Z),Q.size>0)this.sessionClientContributionHandlers.set($,Q);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let Z=this.resolveCapabilities($),Q=gF($.localRuntime,Z),W=$.config.sessionId?.trim()||hF(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:J4({...$.config,sessionId:W}),metadata:{...$.sessionMetadata??{},source:$.source??T0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:J4($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(W,Z,Q.handlers);let X;try{X=await J()}catch(B){if(this.cleanupPlannedSession(W),await this.recoverLocalHubStartupDeadlock(B)){this.registerPlannedSession(W,Z,Q.handlers);try{X=await J()}catch(H){throw this.cleanupPlannedSession(W),H}}else throw B}let Y=g$(X.payload?.snapshot),j=X.payload?.session,V=(Y?.sessionId??j?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(W),Error("Hub runtime did not return a session id.");if(V!==W)this.cleanupPlannedSession(W),this.registerPlannedSession(V,Z,Q.handlers);return{sessionId:V,manifest:Y?cF(Y,$):vF(V,$,j),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let W=$.start,J=W?this.resolveCapabilities(W):void 0,X=W?gF(W.localRuntime,J??{}):{manifest:[],handlers:new Map},Y=W?W.config.sessionId?.trim()||hF():void 0;if(Y&&J)this.sessionCapabilities.set(Y,J);if(Y&&X.handlers.size>0)this.sessionClientContributionHandlers.set(Y,X.handlers),this.ensureSessionSubscription(Y);let j;try{j=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.config.workspaceRoot?.trim()||W.config.cwd,cwd:W.config.cwd??$.cwd,sessionConfig:J4({...W.config,sessionId:Y}),metadata:{...W.sessionMetadata??{},source:W.source??T0.CORE,provider:W.config.providerId,model:W.config.modelId,enableTools:W.config.enableTools,enableSpawn:W.config.enableSpawnAgent,enableTeams:W.config.enableAgentTeams,teamName:W.config.teamName,prompt:W.prompt,interactive:W.interactive===!0},runtimeOptions:{...X.manifest.length>0?{clientContributions:X.manifest}:{},...W.localRuntime?.configExtensions?{configExtensions:W.localRuntime.configExtensions}:{}},toolPolicies:J4(W.toolPolicies)}:{}},Z)}catch(F){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw F}if(!j.ok){let F=typeof j.payload?.error==="string"?j.payload.error:"session.restore failed";if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error(F)}let V=g$(j.payload?.snapshot),B=j.payload?.session,H=(V?.sessionId??B?.sessionId)?.trim();if(Q&&!H){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error("Hub checkpoint restore returned no session id")}if(H&&Y&&H!==Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);if(H&&J)this.sessionCapabilities.set(H,J);if(H&&X.handlers.size>0)this.sessionClientContributionHandlers.set(H,X.handlers);if(H)this.ensureSessionSubscription(H);let G=Array.isArray(j.payload?.messages)?j.payload.messages:void 0,K=j.payload?.checkpoint;if(!K)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:H,startResult:H?{sessionId:H,manifest:V?cF(V,W??{}):vF(H,W??{},B),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:G,checkpoint:K}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,updated:Z.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,removed:Z.payload?.removed===!0}}async getAccumulatedUsage($){let Z=await this.client.command("session.get",{includeSnapshot:!0},$),Q=g$(Z.payload?.snapshot);if(Q){let Y=Q.usage?{...Q.usage}:void 0,j=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return Y||j?{usage:Y,aggregateUsage:j}:void 0}let W=Z.payload?.session,J=mF(W?.usage),X=mF(W?.aggregateUsage);return J||X?{usage:J,aggregateUsage:X}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:uF(Z)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,Z]of this.sessionSubscriptions){Z();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(I1(Q))return;throw Q}return kP(Z.payload)}async listSessions($=100){let Z=await this.client.command("session.list",{limit:$}),Q=Array.isArray(Z.payload?.snapshots)?Z.payload.snapshots.flatMap((J)=>{let X=g$(J);return X?[uQ(X)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(dF)}async listSettings($){let Z=await this.client.command("settings.list",IF($));if(!Z.ok)throw Error(dQ(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",IF($));if(!Z.ok)throw Error(dQ(Z,"settings.toggle"));return{snapshot:Z.payload?.snapshot,changedTypes:Array.isArray(Z.payload?.changedTypes)?Z.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,Z){let Q={...Z.metadata??{}};if(typeof Z.prompt==="string")Q.prompt=Z.prompt;if(typeof Z.title==="string")Q.title=Z.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw yF(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(dQ(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:Z,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(dQ(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,Z){return this.events.subscribe($,Z)}ensureSessionSubscription($){let Z=$.trim();if(!Z||this.sessionSubscriptions.has(Z))return;let Q=this.client.subscribe((W)=>{this.handleHubEvent(W)},{sessionId:Z});this.sessionSubscriptions.set(Z,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let Z=$.trim();if(!Z)return;this.sessionSubscriptions.get(Z)?.(),this.sessionSubscriptions.delete(Z),this.agentDoneEmittedForCurrentRunBySession.delete(Z)}resolveCapabilities($){return M0(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:hP($.payload)}})}handleHubEvent($){let Z=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!Z)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(Z);let Q=g$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"assistant.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",W=$.payload?.redacted===!0;if(!Q&&!W)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:W}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:Z,payload:$.payload});return}case"usage.updated":{let Q=yP($.payload);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:Z,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"tool",toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Q=g$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:Z,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:Z,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=g$($.payload?.snapshot),W=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:Z,payload:{...$.payload,reason:W}}),Q?.interactive===!0&&B0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:W,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{yF(this.telemetry,{component:"core",operation:$,error:Z,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let Z=$.sessionId?.trim();if(!Z)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let W=typeof $.payload?.requestId==="string"?$.payload.requestId:"",J=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!W)return;let X=this.sessionClientContributionHandlers.get(Z)?.get(J);if(!X){await this.client.command("capability.respond",{requestId:W,ok:!1,error:`No client contribution handler registered for capability ${J} in session ${Z}.`},Z).catch(()=>{});return}let Y=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},j=new AbortController;this.activeCapabilityAbortControllers.set(W,j);let V=(B)=>{this.client.command("capability.progress",{requestId:W,payload:B},Z).catch((H)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",H,$)})};try{let B=await X({payload:Y,abortSignal:j.signal,progress:V});if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!0,payload:B},Z)}catch(B){if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!1,error:B instanceof Error?B.message:String(B)},Z)}finally{this.activeCapabilityAbortControllers.delete(W)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let Z=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!Z)return;let Q=this.activeCapabilityAbortControllers.get(Z);if(!Q)return;Q.abort(wP($.payload.error))}async handleApprovalRequested($){let Z=$.sessionId?.trim();if(!Z)return;let Q=this.sessionCapabilities.get(Z)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let W=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",X=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!W||!J||!X)return;let Y=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},j=PP($.payload?.inputJson);this.pendingApprovalToolCallIds.add(J),this.emitToolCallContentStart({sessionId:Z,toolCallId:J,toolName:X,toolInput:j});let V=await Promise.resolve(Q({sessionId:Z,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:Z,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:J,toolName:X,input:j,policy:Y})).catch((B)=>({approved:!1,reason:B instanceof Error?B.message:`Tool approval request failed: ${String(B)}`}));await this.client.command("approval.respond",{approvalId:W,approved:V.approved,reason:V.reason},Z).catch(()=>{})}}var pF={};N(pF,{RemoteRuntimeHost:()=>X4});class X4 extends o1{constructor($){super({url:G$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var rF={};N(rF,{SqliteSessionStore:()=>L1});import{existsSync as IP,mkdirSync as xP}from"node:fs";import{join as gP}from"node:path";import{asBool as h5,asOptionalString as D1,asString as t1,ensureSessionSchema as mP,loadSqliteDb as vP,nowIso as lQ,toBoolInt as k5}from"@cline/shared/db";import{resolveDbDataDir as cP}from"@cline/shared/storage";class L1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??cP()}init(){this.getRawDb()}ensureSessionsDir(){if(!IP(this.sessionsDirPath))xP(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return gP(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=vP(this.sessionDbPath());return mP($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}create($){let Z=lQ();this.run(`INSERT OR REPLACE INTO sessions (
503
503
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
504
504
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
505
505
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
506
506
  metadata_json, transcript_path, hook_path, messages_path, updated_at
507
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,k5($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,k5($.enableTools),k5($.enableSpawn),k5($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,k5($.isSubagent),$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"",$.hookPath??"",$.messagesPath??null,Z])}update($){let Z=[],Q=[];if($.endedAt!==void 0)Z.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)Z.push("exit_code = ?"),Q.push($.exitCode);if($.status!==void 0)Z.push("status = ?"),Q.push($.status);if($.prompt!==void 0)Z.push("prompt = ?"),Q.push($.prompt);if($.metadata!==void 0)Z.push("metadata_json = ?"),Q.push($.metadata?JSON.stringify($.metadata):null);if($.parentSessionId!==void 0)Z.push("parent_session_id = ?"),Q.push($.parentSessionId);if($.parentAgentId!==void 0)Z.push("parent_agent_id = ?"),Q.push($.parentAgentId);if($.agentId!==void 0)Z.push("agent_id = ?"),Q.push($.agentId);if($.conversationId!==void 0)Z.push("conversation_id = ?"),Q.push($.conversationId);if(Z.length===0)return;Z.push("updated_at = ?"),Q.push(lQ()),Q.push($.sessionId),this.run(`UPDATE sessions SET ${Z.join(", ")} WHERE session_id = ?`,Q)}updateStatus($,Z,Q){this.update({sessionId:$,status:Z,endedAt:H0(Z)?null:lQ(),exitCode:H0(Z)?null:Q??(Z==="failed"?1:0)})}get($){let Z=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
507
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,k5($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,k5($.enableTools),k5($.enableSpawn),k5($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,k5($.isSubagent),$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"",$.hookPath??"",$.messagesPath??null,Z])}update($){let Z=[],Q=[];if($.endedAt!==void 0)Z.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)Z.push("exit_code = ?"),Q.push($.exitCode);if($.status!==void 0)Z.push("status = ?"),Q.push($.status);if($.prompt!==void 0)Z.push("prompt = ?"),Q.push($.prompt);if($.metadata!==void 0)Z.push("metadata_json = ?"),Q.push($.metadata?JSON.stringify($.metadata):null);if($.parentSessionId!==void 0)Z.push("parent_session_id = ?"),Q.push($.parentSessionId);if($.parentAgentId!==void 0)Z.push("parent_agent_id = ?"),Q.push($.parentAgentId);if($.agentId!==void 0)Z.push("agent_id = ?"),Q.push($.agentId);if($.conversationId!==void 0)Z.push("conversation_id = ?"),Q.push($.conversationId);if(Z.length===0)return;Z.push("updated_at = ?"),Q.push(lQ()),Q.push($.sessionId),this.run(`UPDATE sessions SET ${Z.join(", ")} WHERE session_id = ?`,Q)}updateStatus($,Z,Q){this.update({sessionId:$,status:Z,endedAt:B0(Z)?null:lQ(),exitCode:B0(Z)?null:Q??(Z==="failed"?1:0)})}get($){let Z=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
508
508
  provider, model, cwd, workspace_root, team_name,
509
509
  enable_tools, enable_spawn, enable_teams,
510
510
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
511
511
  prompt, metadata_json, hook_path, messages_path, updated_at
512
- FROM sessions WHERE session_id = ?`,[$]);if(!Z)return;return{sessionId:t1(Z.session_id),source:t1(Z.source),pid:Number(Z.pid??0),startedAt:t1(Z.started_at),endedAt:Z.ended_at??null,exitCode:Z.exit_code??null,status:t1(Z.status),interactive:h5(Z.interactive),provider:t1(Z.provider),model:t1(Z.model),cwd:t1(Z.cwd),workspaceRoot:t1(Z.workspace_root),teamName:D1(Z.team_name),enableTools:h5(Z.enable_tools),enableSpawn:h5(Z.enable_spawn),enableTeams:h5(Z.enable_teams),parentSessionId:D1(Z.parent_session_id),parentAgentId:D1(Z.parent_agent_id),agentId:D1(Z.agent_id),conversationId:D1(Z.conversation_id),isSubagent:h5(Z.is_subagent),prompt:D1(Z.prompt),metadata:(()=>{let Q=D1(Z.metadata_json);if(!Q)return;try{let W=JSON.parse(Q);if(W&&typeof W==="object"&&!Array.isArray(W))return W}catch{}return})(),hookPath:D1(Z.hook_path),messagesPath:D1(Z.messages_path),updatedAt:D1(Z.updated_at)??lQ()}}list($=200){let Z=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Q=[];for(let W of Z){let J=this.get(t1(W.session_id));if(J)Q.push(J)}return Q}delete($,Z=!1){let Q=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(Z)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}}J8();import{existsSync as YX,mkdirSync as MS,readFileSync as BA,renameSync as RS,writeFileSync as ES}from"node:fs";import{join as GA}from"node:path";import{resolveSessionDataDir as NS}from"@cline/shared/storage";import{dirname as OS}from"node:path";import{nanoid as qS}from"nanoid";import{appendFileSync as pP,existsSync as rP,mkdirSync as aF,readFileSync as iP,writeFileSync as sF}from"node:fs";import{dirname as oF,join as nP}from"node:path";import{ensureHookLogDir as aP}from"@cline/shared/storage";class nJ{adapter;messagesArtifactUploader;logger;artifacts;constructor($,Z,Q){this.adapter=$;this.messagesArtifactUploader=Z;this.logger=Q;this.artifacts=new fJ(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,Z,Q){WG(Z,Q,h3($))}writeSessionManifest($,Z){aF(oF($),{recursive:!0}),sF($,`${JSON.stringify(b0.parse(Z),null,2)}
513
- `,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let Z=this.artifacts.sessionManifestPath($,!1);if(!rP(Z))return{path:Z};try{return{path:Z,manifest:b0.parse(JSON.parse(iP(Z,"utf8")))}}catch{return{path:Z}}}async resolveArtifactPath($,Z,Q){let J=(await this.adapter.getSession($))?.[Z];return typeof J==="string"&&J.trim().length>0?J:Q($)}async persistSessionMessages($,Z,Q){let W=await this.resolveArtifactPath($,"messagesPath",(Y)=>this.artifacts.sessionMessagesPath(Y)),J=k3({updatedAt:J0(),context:h3($),messages:Z,systemPrompt:Q}),X=`${JSON.stringify(J,null,2)}
514
- `;if(aF(oF(W),{recursive:!0}),sF(W,X,"utf8"),!this.messagesArtifactUploader)return;try{let Y=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:W,contents:X,row:Y})}catch(Y){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:Y})}}appendStaleSessionHookLog($,Z,Q,W,J){let Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??nP(aP(),"hooks.jsonl");pP(Y,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:W,sessionId:Z,pid:Q,source:J})}
515
- `,"utf8")}}import{appendFileSync as sP}from"node:fs";import{join as oP}from"node:path";import{resolveRootSessionId as tF}from"@cline/shared";import{ensureHookLogDir as tP}from"@cline/shared/storage";import{z as aJ}from"zod";var eP="subagent",$S=aJ.looseObject({task:aJ.string().optional(),systemPrompt:aJ.string().optional()});class pQ{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,Z,Q,W){this.adapter=$;this.manifestStore=Z;this.toPersistedMessages=Q;this.heartbeatLogIntervalMs=W}teamTaskQueueKey($,Z){return`${$}::${Z}`}activeTeamTaskSessionId($,Z){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,Z))?.at(-1)}buildSubsessionRow($,Z){return{sessionId:Z.sessionId,source:eP,pid:process.ppid,startedAt:Z.startedAt,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:!1,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:Z.parentSessionId,parentAgentId:Z.parentAgentId,agentId:Z.agentId,conversationId:Z.conversationId??null,isSubagent:!0,prompt:Z.prompt,metadata:c6({prompt:Z.prompt}),hookPath:"",messagesPath:Z.messagesPath,updatedAt:Z.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let Z=tF($.sessionContext);if(!Z)return;let Q=$S.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:Z,parentAgentId:$.agent_id,task:Q.success?Q.data.task:void 0,systemPrompt:Q.success?Q.data.systemPrompt:void 0})}async upsertSubagentSession($){let Z=$.rootSessionId;if(!Z)return;let Q=await this.adapter.getSession(Z);if(!Q)return;let W=C8(Z,$.agentId),J=await this.adapter.getSession(W),X=J0(),Y=this.manifestStore.artifacts.subagentArtifactPaths(W,$.agentId,this.activeTeamTaskSessionId(Z,$.parentAgentId)),j=$.prompt??J?.prompt??void 0;if(!j)j=await this.adapter.claimSpawnRequest(Z,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!J)return await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:W,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:j,startedAt:X,...Y})),this.manifestStore.initializeMessagesFile(W,Y.messagesPath,X),W;return await this.adapter.updateSession({sessionId:W,setRunning:!0,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:J.prompt??j??null,metadata:c6({metadata:J.metadata??void 0,prompt:J.prompt??j??null}),expectedStatusLock:J.statusLock}),W}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let Z=tF($.sessionContext);if(!Z)return;if($.hookName==="session_shutdown"){let Q=C8(Z,$.agent_id);return await this.adapter.getSession(Q)?Q:void 0}return await this.upsertSubagentSession({agentId:$.agent_id,parentAgentId:$.parent_agent_id,conversationId:$.taskId,rootSessionId:Z})}async applySubagentStatus($,Z){await this.applySubagentStatusBySessionId($,g6(Z))}async applySubagentStatusBySessionId($,Z){let Q=await this.adapter.getSession($);if(!Q)return;let W=H0(Z)?null:J0(),J=H0(Z)?null:Z==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:Z,endedAt:W,exitCode:J,expectedStatusLock:Q.statusLock})}async applyStatusToRunningChildSessions($,Z){if(!$)return;let Q=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let W of Q)await this.applySubagentStatusBySessionId(W.sessionId,Z)}async onTeamTaskStart($,Z,Q){let W=await this.adapter.getSession($);if(!W)return;let J=I6($,Z),X=J0(),{messagesPath:Y}=this.manifestStore.artifacts.subagentArtifactPaths(J,Z);await this.adapter.upsertSession(this.buildSubsessionRow(W,{sessionId:J,parentSessionId:$,parentAgentId:"lead",agentId:Z,prompt:Q||`Team task for ${Z}`,startedAt:X,messagesPath:Y})),this.manifestStore.initializeMessagesFile(J,Y,X);let j=this.teamTaskQueueKey($,Z),V=this.teamTaskSessionsByAgent.get(j)??[];V.push(J),this.teamTaskSessionsByAgent.set(j,V)}async onTeamTaskEnd($,Z,Q,W,J,X){let Y=this.teamTaskQueueKey($,Z),j=this.teamTaskSessionsByAgent.get(Y);if(!j||j.length===0)return;let V=j.shift();if(j.length===0)this.teamTaskSessionsByAgent.delete(Y);if(!V)return;let H=J?.messages??X,B=this.toPersistedMessages(H,J,X);if(B)await this.manifestStore.persistSessionMessages(V,B);await this.applySubagentStatusBySessionId(V,Q),this.teamTaskLastHeartbeatBySession.delete(V),this.teamTaskLastProgressLineBySession.delete(V)}async onTeamTaskProgress($,Z,Q,W){let J=this.teamTaskQueueKey($,Z),X=this.teamTaskSessionsByAgent.get(J)?.[0];if(!X)return;let Y=Q.trim();if(!Y)return;let j=W?.kind??"progress";if(j==="heartbeat"){let H=Date.now(),B=this.teamTaskLastHeartbeatBySession.get(X)??0;if(H-B<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(X,H)}let V=j==="heartbeat"?"[progress] heartbeat":j==="text"?`[progress] text: ${Y}`:`[progress] ${Y}`;if(this.teamTaskLastProgressLineBySession.get(X)===V)return;this.teamTaskLastProgressLineBySession.set(X,V)}async handleSubAgentStart($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;await this.applySubagentStatusBySessionId(Q,"running")}async handleSubAgentEnd($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;if(Z.error){await this.applySubagentStatusBySessionId(Q,"failed");return}let W=this.toPersistedMessages(Z.agentResult?.messages,Z.agentResult);if(W)await this.manifestStore.persistSessionMessages(Q,W);let J=Z.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Q,J==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Q=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??oP(tP(),"hooks.jsonl");sP(Q,`${JSON.stringify({ts:J0(),...$})}
516
- `,"utf8")}}import{formatUserInputBlock as TS}from"@cline/shared";var HA={};N(HA,{toTeamProgressLifecycleEvent:()=>H4,sanitizeTeamName:()=>iB,reviveTeamStateDates:()=>SZ,parseConfiguredAgentConfig:()=>I5,loadConfiguredAgentConfigs:()=>Y4,createWorkerReviewerTeam:()=>VA,createSpawnAgentTool:()=>q$,createDelegatedAgentConfigProvider:()=>T$,createDelegatedAgent:()=>O$,createConfiguredAgentTools:()=>j4,createAgentTeamsTools:()=>A2,createAgentTeam:()=>tJ,buildTeamProgressSummary:()=>V4,buildDelegatedAgentConfig:()=>K2,buildConfiguredAgentToolName:()=>x5,buildConfiguredAgentToolDescriptors:()=>g5,bootstrapAgentTeams:()=>w8,AgentTeamsRuntime:()=>k2,AgentTeam:()=>G4});import{existsSync as ZS,readdirSync as QS,readFileSync as WS}from"node:fs";import{basename as eF,extname as JS,join as XS}from"node:path";import{resolveAgentConfigSearchPaths as YS}from"@cline/shared/storage";import ZA from"yaml";import{z as N0}from"zod";var QA=N0.object({name:N0.string().trim().min(1),description:N0.string().trim().min(1),tools:N0.union([N0.string(),N0.array(N0.string())]).optional(),skills:N0.union([N0.string(),N0.array(N0.string())]).optional(),providerId:N0.string().trim().min(1).optional(),modelId:N0.string().trim().min(1).optional(),maxIterations:N0.number().int().positive().optional()});function jS($){let Z=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!Z)throw Error("Missing YAML frontmatter block in agent config file.");let Q=Z[0].length,W=/^---[^\S\r\n]*(?:\r?\n|$)/gm;W.lastIndex=Q;let J,X=Array.from($.matchAll(W)).filter((Y)=>Y.index>=Q);for(let Y of X){let j=Y.index,V=$.slice(Q,j);try{let H=ZA.parse(V);if(!H||typeof H!=="object"||Array.isArray(H))continue;QA.parse(H);let B=$.slice(j+Y[0].length);J={frontmatter:V,body:B}}catch{}}if(J)return J;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function $A($){if($===void 0)return;let Z=Array.isArray($)?$:$.split(",");return Array.from(new Set(Z.map((Q)=>Q.trim()).filter((Q)=>Q.length>0)))}function VS($){return $.trim().toLowerCase()}function HS($){let Z=JS($).toLowerCase();return Z===".yml"||Z===".yaml"}function I5($,Z={}){let{frontmatter:Q,body:W}=jS($),J=ZA.parse(Q);if(!J||typeof J!=="object"||Array.isArray(J))throw Error("Agent config frontmatter must be a YAML mapping.");let X=QA.parse(J),Y=W.trim();if(!Y)throw Error("Missing system prompt body in agent config file.");return{name:X.name,description:X.description,tools:$A(X.tools),skills:$A(X.skills),providerId:X.providerId,modelId:X.modelId,maxIterations:X.maxIterations,systemPrompt:Y,path:Z.path}}function Y4($){let Z=$.searchPaths??YS($.workspaceRoot),Q=new Map,W=[];for(let X of Z.filter(Boolean)){if(!ZS(X))continue;let Y;try{Y=QS(X,{withFileTypes:!0})}catch(j){W.push({path:X,error:j instanceof Error?j:Error(String(j))});continue}for(let j of Y){if(!j.isFile()||!HS(j.name))continue;let V=XS(X,j.name);try{let H=WS(V,"utf8"),B=I5(H,{path:V}),G=VS(B.name);if(!Q.has(G))Q.set(G,B)}catch(H){W.push({path:V,error:H instanceof Error?H:Error(String(H))})}}}return{configs:Array.from(Q.values()).sort((X,Y)=>(X.path?eF(X.path):X.name).localeCompare(Y.path?eF(Y.path):Y.name)),errors:W}}import{createTool as BS,zodToJsonSchema as GS}from"@cline/shared";import{z as WA}from"zod";var sJ="subagent_",rQ=64,KS=WA.object({prompt:WA.string().trim().min(1).describe("Task for the subagent to perform")});function FS($){let Z="",Q=!0;for(let W of $.trim().toLowerCase()){let J=W.charCodeAt(0);if(!(J>=97&&J<=122||J>=48&&J<=57||W==="_")||W==="_"){if(!Q)Z+="_",Q=!0;continue}Z+=W,Q=!1}return Q?Z.slice(0,-1):Z}function AS($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z^=$.charCodeAt(Q),Z=Math.imul(Z,16777619);return(Z>>>0).toString(36)}function x5($){let Z=FS($)||"agent",Q=AS($).slice(0,6),W=`${sJ}${Z}`;if(W.length<=rQ)return W;let J=rQ-sJ.length-Q.length-1,X=Z.slice(0,Math.max(1,J));return`${sJ}${X}_${Q}`.slice(0,rQ)}function g5($){let Z=new Set,Q=[];for(let W of[...$].sort((J,X)=>J.name.localeCompare(X.name))){let J=x5(W.name),X=J,Y=2;while(Z.has(X)){let j=`_${Y++}`,V=Math.max(1,rQ-j.length);X=`${J.slice(0,V)}${j}`}Z.add(X),Q.push({toolName:X,config:W})}return Q}function fS($,Z){return{...$,providerId:Z.providerId??$.providerId,modelId:Z.modelId??$.modelId,maxIterations:Z.maxIterations??$.maxIterations}}function j4($){return g5($.agents).map(({toolName:Z,config:Q})=>{return BS({name:Z,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:GS(KS),execute:async(J,X)=>{let Y=$.configProvider.getRuntimeConfig(),j=T$(fS(Y,Q)),V=$.createSubAgentTools?await $.createSubAgentTools(Q,J,X):[],H=O$({kind:"subagent",prompt:Q.systemPrompt,configProvider:j,tools:V,maxIterations:Q.maxIterations,parentAgentId:X.agentId,abortSignal:X.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),B=H.getAgentId(),G=H.getConversationId(),K=X.agentId,F={systemPrompt:Q.systemPrompt,task:J.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:B,conversationId:G,parentAgentId:K,input:F})}catch{}try{let A=await H.run(J.prompt),L={text:A.text,iterations:A.iterations,finishReason:A.finishReason,usage:{inputTokens:A.usage.inputTokens,outputTokens:A.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:B,conversationId:G,parentAgentId:K,input:F,result:L,agentResult:A})}catch{}return L}catch(A){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:B,conversationId:G,parentAgentId:K,input:F,error:A instanceof Error?A:Error(String(A))})}catch{}throw A}},timeoutMs:300000,retryable:!1})})}function _1(){return new Date().toISOString()}function JA($,Z){if(Z<=0)return 0;return Math.round($/Z*100)}function US($,Z){let Q=new Set;for(let J of Z)if(J.status==="reviewed")Q.add(`${J.outcomeId}:${J.section}`);let W=new Set;for(let J of $){if(J.status==="finalized")continue;for(let X of J.requiredSections)if(!Q.has(`${J.id}:${X}`))W.add(`${J.id}:${X}`)}return[...W].sort((J,X)=>J.localeCompare(X))}function V4($,Z){let Q={idle:0,running:0,stopped:0},W={pending:0,in_progress:0,blocked:0,completed:0},J={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},X={draft:0,in_review:0,finalized:0},Y={draft:0,reviewed:0,rejected:0},j=0,V=0;for(let f of Z.members)if(Q[f.status]+=1,f.role==="lead")j+=1;else V+=1;let H=[],B=[],G=Z.tasks.filter((f)=>f.status==="completed").length,K=new Map(Z.tasks.map((f)=>[f.id,f]));for(let f of Z.tasks){if(W[f.status]+=1,f.status==="blocked"){H.push(f.id);continue}if(f.status!=="pending")continue;if(f.dependsOn.every((U)=>{return K.get(U)?.status==="completed"}))B.push(f.id)}let F=[],A,L=0;for(let f of Z.runs){if(J[f.status]+=1,f.status==="queued"||f.status==="running")F.push(f.id);let D=f.startedAt.getTime();if(D>=L)L=D,A=f.id}for(let f of Z.outcomes)X[f.status]+=1;for(let f of Z.outcomeFragments)Y[f.status]+=1;return{teamName:$,updatedAt:_1(),members:{total:Z.members.length,byStatus:Q,leadCount:j,teammateCount:V},tasks:{total:Z.tasks.length,byStatus:W,blockedTaskIds:H,readyTaskIds:B,completionPct:JA(G,Z.tasks.length)},runs:{total:Z.runs.length,byStatus:J,activeRunIds:F,latestRunId:A},outcomes:{total:Z.outcomes.length,byStatus:X,finalizedPct:JA(X.finalized,Z.outcomes.length),missingRequiredSections:US(Z.outcomes,Z.outcomeFragments)},fragments:{total:Z.outcomeFragments.length,byStatus:Y}}}function H4($){let{event:Z}=$;switch(Z.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),taskId:Z.task.id,agentId:Z.task.assignee??Z.task.createdBy};case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),outcomeId:Z.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),outcomeId:Z.fragment.outcomeId,fragmentId:Z.fragment.id,agentId:Z.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),taskId:Z.message.taskId,agentId:Z.message.fromAgentId,message:Z.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),taskId:Z.entry.taskId,agentId:Z.entry.agentId,message:Z.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),agentId:Z.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1()}}import{sanitizeFileName as DS,TeamMessageType as I}from"@cline/shared";import{nanoid as LS}from"nanoid";import{TeamMessageType as wn}from"@cline/shared";function oJ($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function XA($,Z){return $?.status==="stopped"&&oJ(Z)}var _S=600000,YA="recovered_queued";function zS($){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.
512
+ FROM sessions WHERE session_id = ?`,[$]);if(!Z)return;return{sessionId:t1(Z.session_id),source:t1(Z.source),pid:Number(Z.pid??0),startedAt:t1(Z.started_at),endedAt:Z.ended_at??null,exitCode:Z.exit_code??null,status:t1(Z.status),interactive:h5(Z.interactive),provider:t1(Z.provider),model:t1(Z.model),cwd:t1(Z.cwd),workspaceRoot:t1(Z.workspace_root),teamName:D1(Z.team_name),enableTools:h5(Z.enable_tools),enableSpawn:h5(Z.enable_spawn),enableTeams:h5(Z.enable_teams),parentSessionId:D1(Z.parent_session_id),parentAgentId:D1(Z.parent_agent_id),agentId:D1(Z.agent_id),conversationId:D1(Z.conversation_id),isSubagent:h5(Z.is_subagent),prompt:D1(Z.prompt),metadata:(()=>{let Q=D1(Z.metadata_json);if(!Q)return;try{let W=JSON.parse(Q);if(W&&typeof W==="object"&&!Array.isArray(W))return W}catch{}return})(),hookPath:D1(Z.hook_path),messagesPath:D1(Z.messages_path),updatedAt:D1(Z.updated_at)??lQ()}}list($=200){let Z=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Q=[];for(let W of Z){let J=this.get(t1(W.session_id));if(J)Q.push(J)}return Q}delete($,Z=!1){let Q=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(Z)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}}J8();import{existsSync as YX,mkdirSync as TS,readFileSync as VA,renameSync as OS,writeFileSync as qS}from"node:fs";import{join as BA}from"node:path";import{resolveSessionDataDir as MS}from"@cline/shared/storage";import{dirname as _S}from"node:path";import{nanoid as zS}from"nanoid";import{appendFileSync as uP,existsSync as dP,mkdirSync as iF,readFileSync as lP,writeFileSync as nF}from"node:fs";import{dirname as aF,join as pP}from"node:path";import{ensureHookLogDir as rP}from"@cline/shared/storage";class nJ{adapter;messagesArtifactUploader;logger;artifacts;constructor($,Z,Q){this.adapter=$;this.messagesArtifactUploader=Z;this.logger=Q;this.artifacts=new fJ(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,Z,Q){WG(Z,Q,h3($))}writeSessionManifest($,Z){iF(aF($),{recursive:!0}),nF($,`${JSON.stringify(b0.parse(Z),null,2)}
513
+ `,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let Z=this.artifacts.sessionManifestPath($,!1);if(!dP(Z))return{path:Z};try{return{path:Z,manifest:b0.parse(JSON.parse(lP(Z,"utf8")))}}catch{return{path:Z}}}async resolveArtifactPath($,Z,Q){let J=(await this.adapter.getSession($))?.[Z];return typeof J==="string"&&J.trim().length>0?J:Q($)}async persistSessionMessages($,Z,Q){let W=await this.resolveArtifactPath($,"messagesPath",(Y)=>this.artifacts.sessionMessagesPath(Y)),J=k3({updatedAt:J0(),context:h3($),messages:Z,systemPrompt:Q}),X=`${JSON.stringify(J,null,2)}
514
+ `;if(iF(aF(W),{recursive:!0}),nF(W,X,"utf8"),!this.messagesArtifactUploader)return;try{let Y=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:W,contents:X,row:Y})}catch(Y){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:Y})}}appendStaleSessionHookLog($,Z,Q,W,J){let Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??pP(rP(),"hooks.jsonl");uP(Y,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:W,sessionId:Z,pid:Q,source:J})}
515
+ `,"utf8")}}import{appendFileSync as iP}from"node:fs";import{join as nP}from"node:path";import{resolveRootSessionId as sF}from"@cline/shared";import{ensureHookLogDir as aP}from"@cline/shared/storage";import{z as aJ}from"zod";var sP="subagent",oP=aJ.looseObject({task:aJ.string().optional(),systemPrompt:aJ.string().optional()});class pQ{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,Z,Q,W){this.adapter=$;this.manifestStore=Z;this.toPersistedMessages=Q;this.heartbeatLogIntervalMs=W}teamTaskQueueKey($,Z){return`${$}::${Z}`}activeTeamTaskSessionId($,Z){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,Z))?.at(-1)}buildSubsessionRow($,Z){return{sessionId:Z.sessionId,source:sP,pid:process.ppid,startedAt:Z.startedAt,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:!1,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:Z.parentSessionId,parentAgentId:Z.parentAgentId,agentId:Z.agentId,conversationId:Z.conversationId??null,isSubagent:!0,prompt:Z.prompt,metadata:c6({prompt:Z.prompt}),hookPath:"",messagesPath:Z.messagesPath,updatedAt:Z.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let Z=sF($.sessionContext);if(!Z)return;let Q=oP.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:Z,parentAgentId:$.agent_id,task:Q.success?Q.data.task:void 0,systemPrompt:Q.success?Q.data.systemPrompt:void 0})}async upsertSubagentSession($){let Z=$.rootSessionId;if(!Z)return;let Q=await this.adapter.getSession(Z);if(!Q)return;let W=w8(Z,$.agentId),J=await this.adapter.getSession(W),X=J0(),Y=this.manifestStore.artifacts.subagentArtifactPaths(W,$.agentId,this.activeTeamTaskSessionId(Z,$.parentAgentId)),j=$.prompt??J?.prompt??void 0;if(!j)j=await this.adapter.claimSpawnRequest(Z,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!J)return await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:W,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:j,startedAt:X,...Y})),this.manifestStore.initializeMessagesFile(W,Y.messagesPath,X),W;return await this.adapter.updateSession({sessionId:W,setRunning:!0,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:J.prompt??j??null,metadata:c6({metadata:J.metadata??void 0,prompt:J.prompt??j??null}),expectedStatusLock:J.statusLock}),W}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let Z=sF($.sessionContext);if(!Z)return;if($.hookName==="session_shutdown"){let Q=w8(Z,$.agent_id);return await this.adapter.getSession(Q)?Q:void 0}return await this.upsertSubagentSession({agentId:$.agent_id,parentAgentId:$.parent_agent_id,conversationId:$.taskId,rootSessionId:Z})}async applySubagentStatus($,Z){await this.applySubagentStatusBySessionId($,g6(Z))}async applySubagentStatusBySessionId($,Z){let Q=await this.adapter.getSession($);if(!Q)return;let W=B0(Z)?null:J0(),J=B0(Z)?null:Z==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:Z,endedAt:W,exitCode:J,expectedStatusLock:Q.statusLock})}async applyStatusToRunningChildSessions($,Z){if(!$)return;let Q=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let W of Q)await this.applySubagentStatusBySessionId(W.sessionId,Z)}async onTeamTaskStart($,Z,Q){let W=await this.adapter.getSession($);if(!W)return;let J=I6($,Z),X=J0(),{messagesPath:Y}=this.manifestStore.artifacts.subagentArtifactPaths(J,Z);await this.adapter.upsertSession(this.buildSubsessionRow(W,{sessionId:J,parentSessionId:$,parentAgentId:"lead",agentId:Z,prompt:Q||`Team task for ${Z}`,startedAt:X,messagesPath:Y})),this.manifestStore.initializeMessagesFile(J,Y,X);let j=this.teamTaskQueueKey($,Z),V=this.teamTaskSessionsByAgent.get(j)??[];V.push(J),this.teamTaskSessionsByAgent.set(j,V)}async onTeamTaskEnd($,Z,Q,W,J,X){let Y=this.teamTaskQueueKey($,Z),j=this.teamTaskSessionsByAgent.get(Y);if(!j||j.length===0)return;let V=j.shift();if(j.length===0)this.teamTaskSessionsByAgent.delete(Y);if(!V)return;let B=J?.messages??X,H=this.toPersistedMessages(B,J,X);if(H)await this.manifestStore.persistSessionMessages(V,H);await this.applySubagentStatusBySessionId(V,Q),this.teamTaskLastHeartbeatBySession.delete(V),this.teamTaskLastProgressLineBySession.delete(V)}async onTeamTaskProgress($,Z,Q,W){let J=this.teamTaskQueueKey($,Z),X=this.teamTaskSessionsByAgent.get(J)?.[0];if(!X)return;let Y=Q.trim();if(!Y)return;let j=W?.kind??"progress";if(j==="heartbeat"){let B=Date.now(),H=this.teamTaskLastHeartbeatBySession.get(X)??0;if(B-H<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(X,B)}let V=j==="heartbeat"?"[progress] heartbeat":j==="text"?`[progress] text: ${Y}`:`[progress] ${Y}`;if(this.teamTaskLastProgressLineBySession.get(X)===V)return;this.teamTaskLastProgressLineBySession.set(X,V)}async handleSubAgentStart($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;await this.applySubagentStatusBySessionId(Q,"running")}async handleSubAgentEnd($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;if(Z.error){await this.applySubagentStatusBySessionId(Q,"failed");return}let W=this.toPersistedMessages(Z.agentResult?.messages,Z.agentResult);if(W)await this.manifestStore.persistSessionMessages(Q,W);let J=Z.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Q,J==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Q=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??nP(aP(),"hooks.jsonl");iP(Q,`${JSON.stringify({ts:J0(),...$})}
516
+ `,"utf8")}}import{formatUserInputBlock as LS}from"@cline/shared";var jA={};N(jA,{toTeamProgressLifecycleEvent:()=>B4,sanitizeTeamName:()=>iH,reviveTeamStateDates:()=>SZ,parseConfiguredAgentConfig:()=>I5,loadConfiguredAgentConfigs:()=>Y4,createWorkerReviewerTeam:()=>YA,createSpawnAgentTool:()=>q$,createDelegatedAgentConfigProvider:()=>T$,createDelegatedAgent:()=>O$,createConfiguredAgentTools:()=>j4,createAgentTeamsTools:()=>A2,createAgentTeam:()=>tJ,buildTeamProgressSummary:()=>V4,buildDelegatedAgentConfig:()=>K2,buildConfiguredAgentToolName:()=>x5,buildConfiguredAgentToolDescriptors:()=>g5,bootstrapAgentTeams:()=>C8,AgentTeamsRuntime:()=>k2,AgentTeam:()=>G4});import{existsSync as tP,readdirSync as eP,readFileSync as $S}from"node:fs";import{basename as oF,extname as ZS,join as QS}from"node:path";import{resolveAgentConfigSearchPaths as WS}from"@cline/shared/storage";import eF from"yaml";import{z as N0}from"zod";var $A=N0.object({name:N0.string().trim().min(1),description:N0.string().trim().min(1),tools:N0.union([N0.string(),N0.array(N0.string())]).optional(),skills:N0.union([N0.string(),N0.array(N0.string())]).optional(),providerId:N0.string().trim().min(1).optional(),modelId:N0.string().trim().min(1).optional(),maxIterations:N0.number().int().positive().optional()});function JS($){let Z=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!Z)throw Error("Missing YAML frontmatter block in agent config file.");let Q=Z[0].length,W=/^---[^\S\r\n]*(?:\r?\n|$)/gm;W.lastIndex=Q;let J,X=Array.from($.matchAll(W)).filter((Y)=>Y.index>=Q);for(let Y of X){let j=Y.index,V=$.slice(Q,j);try{let B=eF.parse(V);if(!B||typeof B!=="object"||Array.isArray(B))continue;$A.parse(B);let H=$.slice(j+Y[0].length);J={frontmatter:V,body:H}}catch{}}if(J)return J;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function tF($){if($===void 0)return;let Z=Array.isArray($)?$:$.split(",");return Array.from(new Set(Z.map((Q)=>Q.trim()).filter((Q)=>Q.length>0)))}function XS($){return $.trim().toLowerCase()}function YS($){let Z=ZS($).toLowerCase();return Z===".yml"||Z===".yaml"}function I5($,Z={}){let{frontmatter:Q,body:W}=JS($),J=eF.parse(Q);if(!J||typeof J!=="object"||Array.isArray(J))throw Error("Agent config frontmatter must be a YAML mapping.");let X=$A.parse(J),Y=W.trim();if(!Y)throw Error("Missing system prompt body in agent config file.");return{name:X.name,description:X.description,tools:tF(X.tools),skills:tF(X.skills),providerId:X.providerId,modelId:X.modelId,maxIterations:X.maxIterations,systemPrompt:Y,path:Z.path}}function Y4($){let Z=$.searchPaths??WS($.workspaceRoot),Q=new Map,W=[];for(let X of Z.filter(Boolean)){if(!tP(X))continue;let Y;try{Y=eP(X,{withFileTypes:!0})}catch(j){W.push({path:X,error:j instanceof Error?j:Error(String(j))});continue}for(let j of Y){if(!j.isFile()||!YS(j.name))continue;let V=QS(X,j.name);try{let B=$S(V,"utf8"),H=I5(B,{path:V}),G=XS(H.name);if(!Q.has(G))Q.set(G,H)}catch(B){W.push({path:V,error:B instanceof Error?B:Error(String(B))})}}}return{configs:Array.from(Q.values()).sort((X,Y)=>(X.path?oF(X.path):X.name).localeCompare(Y.path?oF(Y.path):Y.name)),errors:W}}import{createTool as jS,zodToJsonSchema as VS}from"@cline/shared";import{z as ZA}from"zod";var sJ="subagent_",rQ=64,BS=ZA.object({prompt:ZA.string().trim().min(1).describe("Task for the subagent to perform")});function HS($){let Z="",Q=!0;for(let W of $.trim().toLowerCase()){let J=W.charCodeAt(0);if(!(J>=97&&J<=122||J>=48&&J<=57||W==="_")||W==="_"){if(!Q)Z+="_",Q=!0;continue}Z+=W,Q=!1}return Q?Z.slice(0,-1):Z}function GS($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z^=$.charCodeAt(Q),Z=Math.imul(Z,16777619);return(Z>>>0).toString(36)}function x5($){let Z=HS($)||"agent",Q=GS($).slice(0,6),W=`${sJ}${Z}`;if(W.length<=rQ)return W;let J=rQ-sJ.length-Q.length-1,X=Z.slice(0,Math.max(1,J));return`${sJ}${X}_${Q}`.slice(0,rQ)}function g5($){let Z=new Set,Q=[];for(let W of[...$].sort((J,X)=>J.name.localeCompare(X.name))){let J=x5(W.name),X=J,Y=2;while(Z.has(X)){let j=`_${Y++}`,V=Math.max(1,rQ-j.length);X=`${J.slice(0,V)}${j}`}Z.add(X),Q.push({toolName:X,config:W})}return Q}function KS($,Z){return{...$,providerId:Z.providerId??$.providerId,modelId:Z.modelId??$.modelId,maxIterations:Z.maxIterations??$.maxIterations}}function j4($){return g5($.agents).map(({toolName:Z,config:Q})=>{return jS({name:Z,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:VS(BS),execute:async(J,X)=>{let Y=$.configProvider.getRuntimeConfig(),j=T$(KS(Y,Q)),V=$.createSubAgentTools?await $.createSubAgentTools(Q,J,X):[],B=O$({kind:"subagent",prompt:Q.systemPrompt,configProvider:j,tools:V,maxIterations:Q.maxIterations,parentAgentId:X.agentId,abortSignal:X.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),H=B.getAgentId(),G=B.getConversationId(),K=X.agentId,F={systemPrompt:Q.systemPrompt,task:J.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:H,conversationId:G,parentAgentId:K,input:F})}catch{}try{let A=await B.run(J.prompt),L={text:A.text,iterations:A.iterations,finishReason:A.finishReason,usage:{inputTokens:A.usage.inputTokens,outputTokens:A.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:G,parentAgentId:K,input:F,result:L,agentResult:A})}catch{}return L}catch(A){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:G,parentAgentId:K,input:F,error:A instanceof Error?A:Error(String(A))})}catch{}throw A}},timeoutMs:300000,retryable:!1})})}function _1(){return new Date().toISOString()}function QA($,Z){if(Z<=0)return 0;return Math.round($/Z*100)}function FS($,Z){let Q=new Set;for(let J of Z)if(J.status==="reviewed")Q.add(`${J.outcomeId}:${J.section}`);let W=new Set;for(let J of $){if(J.status==="finalized")continue;for(let X of J.requiredSections)if(!Q.has(`${J.id}:${X}`))W.add(`${J.id}:${X}`)}return[...W].sort((J,X)=>J.localeCompare(X))}function V4($,Z){let Q={idle:0,running:0,stopped:0},W={pending:0,in_progress:0,blocked:0,completed:0},J={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},X={draft:0,in_review:0,finalized:0},Y={draft:0,reviewed:0,rejected:0},j=0,V=0;for(let f of Z.members)if(Q[f.status]+=1,f.role==="lead")j+=1;else V+=1;let B=[],H=[],G=Z.tasks.filter((f)=>f.status==="completed").length,K=new Map(Z.tasks.map((f)=>[f.id,f]));for(let f of Z.tasks){if(W[f.status]+=1,f.status==="blocked"){B.push(f.id);continue}if(f.status!=="pending")continue;if(f.dependsOn.every((U)=>{return K.get(U)?.status==="completed"}))H.push(f.id)}let F=[],A,L=0;for(let f of Z.runs){if(J[f.status]+=1,f.status==="queued"||f.status==="running")F.push(f.id);let D=f.startedAt.getTime();if(D>=L)L=D,A=f.id}for(let f of Z.outcomes)X[f.status]+=1;for(let f of Z.outcomeFragments)Y[f.status]+=1;return{teamName:$,updatedAt:_1(),members:{total:Z.members.length,byStatus:Q,leadCount:j,teammateCount:V},tasks:{total:Z.tasks.length,byStatus:W,blockedTaskIds:B,readyTaskIds:H,completionPct:QA(G,Z.tasks.length)},runs:{total:Z.runs.length,byStatus:J,activeRunIds:F,latestRunId:A},outcomes:{total:Z.outcomes.length,byStatus:X,finalizedPct:QA(X.finalized,Z.outcomes.length),missingRequiredSections:FS(Z.outcomes,Z.outcomeFragments)},fragments:{total:Z.outcomeFragments.length,byStatus:Y}}}function B4($){let{event:Z}=$;switch(Z.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),taskId:Z.task.id,agentId:Z.task.assignee??Z.task.createdBy};case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),outcomeId:Z.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),outcomeId:Z.fragment.outcomeId,fragmentId:Z.fragment.id,agentId:Z.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),taskId:Z.message.taskId,agentId:Z.message.fromAgentId,message:Z.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),taskId:Z.entry.taskId,agentId:Z.entry.agentId,message:Z.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),agentId:Z.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1()}}import{sanitizeFileName as AS,TeamMessageType as I}from"@cline/shared";import{nanoid as fS}from"nanoid";import{TeamMessageType as Mn}from"@cline/shared";function oJ($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function WA($,Z){return $?.status==="stopped"&&oJ(Z)}var US=600000,JA="recovered_queued";function DS($){return`This is an automatic recovery of interrupted team run ${$.id}. The previous process stopped before completion. Continue the task safely, inspect the current workspace state before making changes, and avoid duplicating completed work.
517
517
 
518
- ${$.message}`}class G4{agents=new Map;configs=new Map;onTeamEvent;constructor($,Z){if(this.onTeamEvent=Z,$)for(let[Q,W]of Object.entries($))this.addAgent(Q,W)}addAgent($,Z){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let Q={...Z,onEvent:(J)=>{Z.onEvent?.(J),this.emitEvent({type:I.AgentEvent,agentId:$,event:J})}},W=new z$(Q);if(Q.onEvent)W.subscribeEvents(Q.onEvent);this.agents.set($,W),this.configs.set($,Z)}removeAgent($){return this.configs.delete($),this.agents.delete($)}getAgent($){return this.agents.get($)}getAgentIds(){return Array.from(this.agents.keys())}get size(){return this.agents.size}async routeTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:I.TaskStart,agentId:$,message:Z});try{let W=await Q.run(Z);return this.emitEvent({type:I.TaskEnd,agentId:$,result:W}),W}catch(W){let J=W instanceof Error?W:Error(String(W));throw this.emitEvent({type:I.TaskEnd,agentId:$,error:J,messages:Q.getMessages()}),W}}async continueTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:I.TaskStart,agentId:$,message:Z});try{let W=await Q.continue(Z);return this.emitEvent({type:I.TaskEnd,agentId:$,result:W}),W}catch(W){let J=W instanceof Error?W:Error(String(W));throw this.emitEvent({type:I.TaskEnd,agentId:$,error:J,messages:Q.getMessages()}),W}}async runParallel($){let Z=$.map(async(Q)=>{let W=this.agents.get(Q.agentId);if(!W)return{agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata};this.emitEvent({type:I.TaskStart,agentId:Q.agentId,message:Q.message});try{let J=await W.run(Q.message);return this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,result:J}),{agentId:Q.agentId,result:J,metadata:Q.metadata}}catch(J){let X=J instanceof Error?J:Error(String(J));return this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,error:X,messages:W.getMessages()}),{agentId:Q.agentId,result:void 0,error:X,metadata:Q.metadata}}});return Promise.all(Z)}async runSequential($){let Z=[];for(let Q of $){let W=this.agents.get(Q.agentId);if(!W){Z.push({agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata});continue}this.emitEvent({type:I.TaskStart,agentId:Q.agentId,message:Q.message});try{let J=await W.run(Q.message);this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,result:J}),Z.push({agentId:Q.agentId,result:J,metadata:Q.metadata})}catch(J){let X=J instanceof Error?J:Error(String(J));this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,error:X,messages:W.getMessages()}),Z.push({agentId:Q.agentId,result:void 0,error:X,metadata:Q.metadata})}}return Z}async runPipeline($,Z,Q){let W=[],J=Z;for(let X of $){let Y=this.agents.get(X);if(!Y){W.push({agentId:X,result:void 0,error:Error(`Agent "${X}" not found in team`)});break}this.emitEvent({type:I.TaskStart,agentId:X,message:J});try{let j=await Y.run(J);this.emitEvent({type:I.TaskEnd,agentId:X,result:j}),W.push({agentId:X,result:j});let V=$.indexOf(X)+1;if(V<$.length){let H=$[V];J=Q?Q(j,H):`Previous agent output:
518
+ ${$.message}`}class G4{agents=new Map;configs=new Map;onTeamEvent;constructor($,Z){if(this.onTeamEvent=Z,$)for(let[Q,W]of Object.entries($))this.addAgent(Q,W)}addAgent($,Z){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let Q={...Z,onEvent:(J)=>{Z.onEvent?.(J),this.emitEvent({type:I.AgentEvent,agentId:$,event:J})}},W=new z$(Q);if(Q.onEvent)W.subscribeEvents(Q.onEvent);this.agents.set($,W),this.configs.set($,Z)}removeAgent($){return this.configs.delete($),this.agents.delete($)}getAgent($){return this.agents.get($)}getAgentIds(){return Array.from(this.agents.keys())}get size(){return this.agents.size}async routeTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:I.TaskStart,agentId:$,message:Z});try{let W=await Q.run(Z);return this.emitEvent({type:I.TaskEnd,agentId:$,result:W}),W}catch(W){let J=W instanceof Error?W:Error(String(W));throw this.emitEvent({type:I.TaskEnd,agentId:$,error:J,messages:Q.getMessages()}),W}}async continueTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:I.TaskStart,agentId:$,message:Z});try{let W=await Q.continue(Z);return this.emitEvent({type:I.TaskEnd,agentId:$,result:W}),W}catch(W){let J=W instanceof Error?W:Error(String(W));throw this.emitEvent({type:I.TaskEnd,agentId:$,error:J,messages:Q.getMessages()}),W}}async runParallel($){let Z=$.map(async(Q)=>{let W=this.agents.get(Q.agentId);if(!W)return{agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata};this.emitEvent({type:I.TaskStart,agentId:Q.agentId,message:Q.message});try{let J=await W.run(Q.message);return this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,result:J}),{agentId:Q.agentId,result:J,metadata:Q.metadata}}catch(J){let X=J instanceof Error?J:Error(String(J));return this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,error:X,messages:W.getMessages()}),{agentId:Q.agentId,result:void 0,error:X,metadata:Q.metadata}}});return Promise.all(Z)}async runSequential($){let Z=[];for(let Q of $){let W=this.agents.get(Q.agentId);if(!W){Z.push({agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata});continue}this.emitEvent({type:I.TaskStart,agentId:Q.agentId,message:Q.message});try{let J=await W.run(Q.message);this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,result:J}),Z.push({agentId:Q.agentId,result:J,metadata:Q.metadata})}catch(J){let X=J instanceof Error?J:Error(String(J));this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,error:X,messages:W.getMessages()}),Z.push({agentId:Q.agentId,result:void 0,error:X,metadata:Q.metadata})}}return Z}async runPipeline($,Z,Q){let W=[],J=Z;for(let X of $){let Y=this.agents.get(X);if(!Y){W.push({agentId:X,result:void 0,error:Error(`Agent "${X}" not found in team`)});break}this.emitEvent({type:I.TaskStart,agentId:X,message:J});try{let j=await Y.run(J);this.emitEvent({type:I.TaskEnd,agentId:X,result:j}),W.push({agentId:X,result:j});let V=$.indexOf(X)+1;if(V<$.length){let B=$[V];J=Q?Q(j,B):`Previous agent output:
519
519
  ${j.text}
520
520
 
521
- Please continue from here.`}}catch(j){let V=j instanceof Error?j:Error(String(j));this.emitEvent({type:I.TaskEnd,agentId:X,error:V,messages:Y.getMessages()}),W.push({agentId:X,result:void 0,error:V});break}}return W}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function tJ($,Z){return new G4($,Z)}function VA($){let Z=tJ({worker:$.worker,reviewer:$.reviewer}),Q=Z;return Q.doAndReview=async(W)=>{let J=await Z.routeTo("worker",W),X=await Z.routeTo("reviewer",`Please review this work:
521
+ Please continue from here.`}}catch(j){let V=j instanceof Error?j:Error(String(j));this.emitEvent({type:I.TaskEnd,agentId:X,error:V,messages:Y.getMessages()}),W.push({agentId:X,result:void 0,error:V});break}}return W}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function tJ($,Z){return new G4($,Z)}function YA($){let Z=tJ({worker:$.worker,reviewer:$.reviewer}),Q=Z;return Q.doAndReview=async(W)=>{let J=await Z.routeTo("worker",W),X=await Z.routeTo("reviewer",`Please review this work:
522
522
 
523
- ${J.text}`);return{workerResult:J,reviewResult:X}},Q}class k2{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_${DS(LS(10))}`,this.onTeamEvent=$.onTeamEvent,this.missionLogIntervalSteps=Math.max(1,$.missionLogIntervalSteps??3),this.missionLogIntervalMs=Math.max(1000,$.missionLogIntervalMs??120000),this.maxConcurrentRuns=Math.max(1,$.maxConcurrentRuns??2);let Z=$.leadAgentId??"lead";this.members.set(Z,{agentId:Z,role:"lead",status:"idle",runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()})}getTeamId(){return this.teamId}getTeamName(){return this.teamName}getMemberRole($){return this.members.get($)?.role}getMemberIds(){return Array.from(this.members.keys())}getTeammateIds(){return Array.from(this.members.values()).filter(($)=>$.role==="teammate").map(($)=>$.agentId)}getTask($){return this.tasks.get($)}listTasks(){return Array.from(this.tasks.values())}listTaskItems($){return Array.from(this.tasks.values()).map((Z)=>{let Q=this.getUnresolvedDependencies(Z);return{...Z,blockedBy:Q,isReady:Z.status==="pending"&&!Z.assignee&&Q.length===0}}).filter((Z)=>{if($?.status&&Z.status!==$.status)return!1;if($?.assignee&&Z.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,Z){let Q=Z?.unreadOnly??!0,W=Z?.markRead??!0,J=Z?.limit,X=this.mailbox.filter((j)=>j.toAgentId===$&&(!Q||!j.readAt)),Y=typeof J==="number"&&J>0?X.slice(Math.max(0,X.length-J)):X;if(W){let j=new Date;for(let V of Y)if(!V.readAt)V.readAt=j}return Y.map((j)=>({...j}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let Q of this.tasks.values())$[Q.status]++;let Z={draft:0,in_review:0,finalized:0};for(let Q of this.outcomes.values())Z[Q.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((Q)=>({agentId:Q.agentId,role:Q.role,description:Q.description,status:Q.status})),taskCounts:$,unreadMessages:this.mailbox.filter((Q)=>!Q.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").length,outcomeCounts:Z}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map(($)=>({agentId:$.agentId,role:$.role,description:$.description,status:$.status})),tasks:Array.from(this.tasks.values()).map(($)=>({...$})),mailbox:this.mailbox.map(($)=>({...$})),missionLog:this.missionLog.map(($)=>({...$})),runs:Array.from(this.runs.values()).map(($)=>({...$})),outcomes:Array.from(this.outcomes.values()).map(($)=>({...$})),outcomeFragments:Array.from(this.outcomeFragments.values()).map(($)=>({...$}))}}hydrateState($){this.clearQueuedRunDispatchTimer(),this.tasks.clear();for(let Q of $.tasks)this.tasks.set(Q.id,{...Q});this.mailbox.length=0,this.mailbox.push(...$.mailbox.map((Q)=>({...Q}))),this.missionLog.length=0,this.missionLog.push(...$.missionLog.map((Q)=>({...Q}))),this.runs.clear();for(let Q of $.runs??[])this.runs.set(Q.id,{...Q});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").map((Q)=>Q.id)),this.outcomes.clear();for(let Q of $.outcomes??[])this.outcomes.set(Q.id,{...Q});this.outcomeFragments.clear();for(let Q of $.outcomeFragments??[])this.outcomeFragments.set(Q.id,{...Q});let Z=Array.from(this.members.values()).filter((Q)=>Q.role==="lead");this.members.clear();for(let Q of Z)this.members.set(Q.agentId,{...Q,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let Q of $.members){if(Q.role!=="teammate")continue;this.members.set(Q.agentId,{agentId:Q.agentId,role:"teammate",description:Q.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,B4($.tasks.map((Q)=>Q.id),"task_")),this.messageCounter=Math.max(this.messageCounter,B4($.mailbox.map((Q)=>Q.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,B4($.missionLog.map((Q)=>Q.id),"log_")),this.runCounter=Math.max(this.runCounter,B4(($.runs??[]).map((Q)=>Q.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,B4(($.outcomes??[]).map((Q)=>Q.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,B4(($.outcomeFragments??[]).map((Q)=>Q.id),"frag_"))}isTeammateActive($){let Z=this.members.get($);return!!Z&&Z.role==="teammate"&&!!Z.agent}spawnTeammate({agentId:$,config:Z}){let Q=this.members.get($);if(Q&&Q.role!=="teammate")throw Error(`Team member "${$}" already exists and is not a teammate`);if(Q&&Q.runningCount>0)throw Error(`Teammate "${$}" is currently running and cannot be respawned`);let W={...Z,apiTimeoutMs:_S,consumePendingUserMessage:()=>{let Y=this.members.get($);if(!Y||!Y.pendingSteerMessage)return;let j=Y.pendingSteerMessage;return Y.pendingSteerMessage=void 0,j},onEvent:(Y)=>{Z.onEvent?.(Y),this.emitEvent({type:I.AgentEvent,agentId:$,event:Y}),this.trackMeaningfulEvent($,Y)}},J=new z$(W);if(W.onEvent)J.subscribeEvents(W.onEvent);let X={agentId:$,role:"teammate",description:Z.role,status:"idle",agent:J,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,X),this.emitEvent({type:I.TeammateSpawned,agentId:$,role:Z.role,teammate:{rolePrompt:Z.systemPrompt,modelId:Z.modelId,maxIterations:Z.maxIterations,runtimeAgentId:J.getAgentId(),conversationId:J.getConversationId(),parentAgentId:null}}),{agentId:X.agentId,role:X.role,description:X.description,status:X.status}}shutdownTeammate($,Z){let Q=this.members.get($);if(!Q||Q.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{Q.agent?.abort()}catch(W){if(!oJ(W))throw W}Q.status="stopped",this.emitEvent({type:I.TeammateShutdown,agentId:$,reason:Z})}updateTeammateConnections($){for(let Z of this.members.values()){if(Z.role!=="teammate"||!Z.agent)continue;Z.agent.updateConnection($)}}createTask($){let Z=`task_${String(++this.taskCounter).padStart(4,"0")}`,Q=new Date,W={id:Z,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:Q,updatedAt:Q,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(Z,W),this.emitEvent({type:I.TeamTaskUpdated,task:{...W}}),{...W}}claimTask($,Z){let Q=this.requireTask($);return this.assertDependenciesResolved(Q),Q.status="in_progress",Q.assignee=Z,Q.updatedAt=new Date,this.emitEvent({type:I.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"progress",summary:`Claimed task "${Q.title}"`}),{...Q}}blockTask($,Z,Q){let W=this.requireTask($);return W.status="blocked",W.updatedAt=new Date,W.summary=Q,this.emitEvent({type:I.TeamTaskUpdated,task:{...W}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"blocked",summary:Q}),{...W}}completeTask($,Z,Q){let W=this.requireTask($);if(W.status="completed",W.updatedAt=new Date,W.summary=Q,!W.assignee)W.assignee=Z;return this.emitEvent({type:I.TeamTaskUpdated,task:{...W}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"done",summary:Q}),{...W}}async routeToTeammate($,Z,Q){let W=this.members.get($);if(!W||W.role!=="teammate"||!W.agent)throw Error(`Teammate "${$}" was not found`);if(!W.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");W.runningCount++,W.status="running",this.emitEvent({type:I.TaskStart,agentId:$,message:Z});try{let J=this.listMailbox($,{unreadOnly:!0,markRead:!0}),X=J.length>0?`${this.buildMailboxNotification(J)}
523
+ ${J.text}`);return{workerResult:J,reviewResult:X}},Q}class k2{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_${AS(fS(10))}`,this.onTeamEvent=$.onTeamEvent,this.missionLogIntervalSteps=Math.max(1,$.missionLogIntervalSteps??3),this.missionLogIntervalMs=Math.max(1000,$.missionLogIntervalMs??120000),this.maxConcurrentRuns=Math.max(1,$.maxConcurrentRuns??2);let Z=$.leadAgentId??"lead";this.members.set(Z,{agentId:Z,role:"lead",status:"idle",runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()})}getTeamId(){return this.teamId}getTeamName(){return this.teamName}getMemberRole($){return this.members.get($)?.role}getMemberIds(){return Array.from(this.members.keys())}getTeammateIds(){return Array.from(this.members.values()).filter(($)=>$.role==="teammate").map(($)=>$.agentId)}getTask($){return this.tasks.get($)}listTasks(){return Array.from(this.tasks.values())}listTaskItems($){return Array.from(this.tasks.values()).map((Z)=>{let Q=this.getUnresolvedDependencies(Z);return{...Z,blockedBy:Q,isReady:Z.status==="pending"&&!Z.assignee&&Q.length===0}}).filter((Z)=>{if($?.status&&Z.status!==$.status)return!1;if($?.assignee&&Z.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,Z){let Q=Z?.unreadOnly??!0,W=Z?.markRead??!0,J=Z?.limit,X=this.mailbox.filter((j)=>j.toAgentId===$&&(!Q||!j.readAt)),Y=typeof J==="number"&&J>0?X.slice(Math.max(0,X.length-J)):X;if(W){let j=new Date;for(let V of Y)if(!V.readAt)V.readAt=j}return Y.map((j)=>({...j}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let Q of this.tasks.values())$[Q.status]++;let Z={draft:0,in_review:0,finalized:0};for(let Q of this.outcomes.values())Z[Q.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((Q)=>({agentId:Q.agentId,role:Q.role,description:Q.description,status:Q.status})),taskCounts:$,unreadMessages:this.mailbox.filter((Q)=>!Q.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").length,outcomeCounts:Z}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map(($)=>({agentId:$.agentId,role:$.role,description:$.description,status:$.status})),tasks:Array.from(this.tasks.values()).map(($)=>({...$})),mailbox:this.mailbox.map(($)=>({...$})),missionLog:this.missionLog.map(($)=>({...$})),runs:Array.from(this.runs.values()).map(($)=>({...$})),outcomes:Array.from(this.outcomes.values()).map(($)=>({...$})),outcomeFragments:Array.from(this.outcomeFragments.values()).map(($)=>({...$}))}}hydrateState($){this.clearQueuedRunDispatchTimer(),this.tasks.clear();for(let Q of $.tasks)this.tasks.set(Q.id,{...Q});this.mailbox.length=0,this.mailbox.push(...$.mailbox.map((Q)=>({...Q}))),this.missionLog.length=0,this.missionLog.push(...$.missionLog.map((Q)=>({...Q}))),this.runs.clear();for(let Q of $.runs??[])this.runs.set(Q.id,{...Q});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").map((Q)=>Q.id)),this.outcomes.clear();for(let Q of $.outcomes??[])this.outcomes.set(Q.id,{...Q});this.outcomeFragments.clear();for(let Q of $.outcomeFragments??[])this.outcomeFragments.set(Q.id,{...Q});let Z=Array.from(this.members.values()).filter((Q)=>Q.role==="lead");this.members.clear();for(let Q of Z)this.members.set(Q.agentId,{...Q,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let Q of $.members){if(Q.role!=="teammate")continue;this.members.set(Q.agentId,{agentId:Q.agentId,role:"teammate",description:Q.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,H4($.tasks.map((Q)=>Q.id),"task_")),this.messageCounter=Math.max(this.messageCounter,H4($.mailbox.map((Q)=>Q.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,H4($.missionLog.map((Q)=>Q.id),"log_")),this.runCounter=Math.max(this.runCounter,H4(($.runs??[]).map((Q)=>Q.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,H4(($.outcomes??[]).map((Q)=>Q.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,H4(($.outcomeFragments??[]).map((Q)=>Q.id),"frag_"))}isTeammateActive($){let Z=this.members.get($);return!!Z&&Z.role==="teammate"&&!!Z.agent}spawnTeammate({agentId:$,config:Z}){let Q=this.members.get($);if(Q&&Q.role!=="teammate")throw Error(`Team member "${$}" already exists and is not a teammate`);if(Q&&Q.runningCount>0)throw Error(`Teammate "${$}" is currently running and cannot be respawned`);let W={...Z,apiTimeoutMs:US,consumePendingUserMessage:()=>{let Y=this.members.get($);if(!Y||!Y.pendingSteerMessage)return;let j=Y.pendingSteerMessage;return Y.pendingSteerMessage=void 0,j},onEvent:(Y)=>{Z.onEvent?.(Y),this.emitEvent({type:I.AgentEvent,agentId:$,event:Y}),this.trackMeaningfulEvent($,Y)}},J=new z$(W);if(W.onEvent)J.subscribeEvents(W.onEvent);let X={agentId:$,role:"teammate",description:Z.role,status:"idle",agent:J,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,X),this.emitEvent({type:I.TeammateSpawned,agentId:$,role:Z.role,teammate:{rolePrompt:Z.systemPrompt,modelId:Z.modelId,maxIterations:Z.maxIterations,runtimeAgentId:J.getAgentId(),conversationId:J.getConversationId(),parentAgentId:null}}),{agentId:X.agentId,role:X.role,description:X.description,status:X.status}}shutdownTeammate($,Z){let Q=this.members.get($);if(!Q||Q.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{Q.agent?.abort()}catch(W){if(!oJ(W))throw W}Q.status="stopped",this.emitEvent({type:I.TeammateShutdown,agentId:$,reason:Z})}updateTeammateConnections($){for(let Z of this.members.values()){if(Z.role!=="teammate"||!Z.agent)continue;Z.agent.updateConnection($)}}createTask($){let Z=`task_${String(++this.taskCounter).padStart(4,"0")}`,Q=new Date,W={id:Z,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:Q,updatedAt:Q,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(Z,W),this.emitEvent({type:I.TeamTaskUpdated,task:{...W}}),{...W}}claimTask($,Z){let Q=this.requireTask($);return this.assertDependenciesResolved(Q),Q.status="in_progress",Q.assignee=Z,Q.updatedAt=new Date,this.emitEvent({type:I.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"progress",summary:`Claimed task "${Q.title}"`}),{...Q}}blockTask($,Z,Q){let W=this.requireTask($);return W.status="blocked",W.updatedAt=new Date,W.summary=Q,this.emitEvent({type:I.TeamTaskUpdated,task:{...W}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"blocked",summary:Q}),{...W}}completeTask($,Z,Q){let W=this.requireTask($);if(W.status="completed",W.updatedAt=new Date,W.summary=Q,!W.assignee)W.assignee=Z;return this.emitEvent({type:I.TeamTaskUpdated,task:{...W}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"done",summary:Q}),{...W}}async routeToTeammate($,Z,Q){let W=this.members.get($);if(!W||W.role!=="teammate"||!W.agent)throw Error(`Teammate "${$}" was not found`);if(!W.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");W.runningCount++,W.status="running",this.emitEvent({type:I.TaskStart,agentId:$,message:Z});try{let J=this.listMailbox($,{unreadOnly:!0,markRead:!0}),X=J.length>0?`${this.buildMailboxNotification(J)}
524
524
 
525
- ${Z}`:Z,Y=Q?.continueConversation?await W.agent.continue(X):await W.agent.run(X);return this.emitEvent({type:I.TaskEnd,agentId:$,result:Y}),this.recordProgressStep($,`Completed a delegated run (${Y.iterations} iterations)`,Q?.taskId,!0),Y}catch(J){let X=J instanceof Error?J:Error(String(J));if(this.emitEvent({type:I.TaskEnd,agentId:$,error:X,messages:W.agent.getMessages()}),!XA(W,X))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:X.message});throw X}finally{if(W.runningCount--,W.runningCount<=0&&this.members.get($)?.status!=="stopped")W.status="idle"}}startTeammateRun($,Z,Q){let W=`run_${String(++this.runCounter).padStart(5,"0")}`,J={id:W,agentId:$,taskId:Q?.taskId,status:"queued",message:Z,priority:Q?.priority??0,retryCount:0,maxRetries:Math.max(0,Q?.maxRetries??0),continueConversation:Q?.continueConversation,startedAt:new Date(0),leaseOwner:Q?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(W,J),this.runQueue.push(W),this.emitEvent({type:I.RunQueued,run:{...J}}),this.dispatchQueuedRuns(),{...J}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let Z=this.selectNextDispatchableQueuedRun();$=Z.nextDelayedAttemptAt;let Q=Z.index;if(Q<0){this.scheduleQueuedRunDispatch($);return}let[W]=this.runQueue.splice(Q,1),J=W?this.runs.get(W):void 0;if(!J||J.status!=="queued")continue;this.executeQueuedRun(J)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,Z=Number.NEGATIVE_INFINITY,Q,W=Date.now();for(let J=0;J<this.runQueue.length;J++){let X=this.runs.get(this.runQueue[J]);if(!X||X.status!=="queued")continue;if(X.nextAttemptAt&&X.nextAttemptAt.getTime()>W){if(!Q||X.nextAttemptAt<Q)Q=X.nextAttemptAt;continue}if(X.priority>Z)Z=X.priority,$=J}return{index:$,nextDelayedAttemptAt:Q}}scheduleQueuedRunDispatch($){if(!$)return;let Z=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},Z)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let Z of this.runs.values())if(Z.status==="running")$++;return $}async executeQueuedRun($){let Z=$.currentActivity===YA;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:I.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let W=Z?zS($):$.message,J=await this.routeToTeammate($.agentId,W,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=J,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:I.RunCompleted,run:{...$}})}catch(W){let J=W instanceof Error?W.message:String(W??"Unknown error");$.error=J,$.endedAt=new Date;let X=this.members.get($.agentId);if(XA(X,W))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:I.RunCancelled,run:{...$},reason:J});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:I.RunFailed,run:{...$}})}finally{clearInterval(Q),this.dispatchQueuedRuns()}}listRuns($){let Z=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Q)=>{if(!Z&&!["running","queued"].includes(Q.status))return!1;if($?.status&&Q.status!==$.status)return!1;if($?.agentId&&Q.agentId!==$.agentId)return!1;return!0}).map((Q)=>({...Q}))}getRun($){let Z=this.runs.get($);return Z?{...Z}:void 0}async awaitRun($,Z=250){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);while(Q.status==="queued"||Q.status==="running")await jA(Z);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((Z)=>["queued","running"].includes(Z.status)))await jA($);return this.listRuns()}cancelRun($,Z){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);if(Q.status==="completed"||Q.status==="failed")return{...Q};Q.status="cancelled",Q.error=Z,Q.endedAt=new Date,Q.currentActivity="cancelled";let W=this.runQueue.indexOf($);if(W>=0)this.runQueue.splice(W,1);return this.emitEvent({type:I.RunCancelled,run:{...Q},reason:Z}),{...Q}}recoverActiveRuns($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;let W=this.members.get(Q.agentId);if(!W||W.role!=="teammate"||!W.agent){Q.status="interrupted",Q.error="teammate_unavailable_after_recovery",Q.endedAt=new Date,Q.currentActivity="interrupted",this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:Q.error});continue}let J=new Date;if(Q.status="queued",Q.error=void 0,Q.endedAt=void 0,Q.heartbeatAt=J,Q.lastProgressAt=J,Q.lastProgressMessage=$,Q.currentActivity=YA,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);Z.push({...Q}),this.emitEvent({type:I.RunQueued,run:{...Q}})}return this.dispatchQueuedRuns(),Z}markStaleRunsInterrupted($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;Q.status="interrupted",Q.error=$,Q.endedAt=new Date,Q.currentActivity="interrupted",Z.push({...Q}),this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),Z}sendMessage($,Z,Q,W,J){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let X=this.members.get(Z);if(!X)throw Error(`Unknown recipient "${Z}"`);let Y={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:Z,subject:Q,body:W,taskId:J,sentAt:new Date};if(this.mailbox.push(Y),this.emitEvent({type:I.TeamMessage,message:{...Y}}),X.role==="teammate"&&X.runningCount>0&&X.agent)X.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Q}". Use the team_read_mailbox tool to read it at your convenience.`;return{...Y}}broadcast($,Z,Q,W){let J=[];for(let X of this.members.values()){if(X.agentId===$)continue;if(X.role==="lead")continue;J.push(this.sendMessage($,X.agentId,Z,Q,W?.taskId))}return J}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let Z={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:$.agentId,taskId:$.taskId,kind:$.kind,summary:$.summary,evidence:$.evidence,nextAction:$.nextAction};this.missionLog.push(Z);let Q=this.members.get($.agentId);if(Q)Q.lastMissionAt=Date.now(),Q.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:I.TeamMissionLog,entry:{...Z}}),{...Z}}createOutcome($){let Z={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:$.title,status:"draft",requiredSections:[...new Set($.requiredSections)],createdBy:$.createdBy,createdAt:new Date};return this.outcomes.set(Z.id,Z),this.emitEvent({type:I.OutcomeCreated,outcome:{...Z}}),{...Z}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let Z=this.outcomes.get($.outcomeId);if(!Z)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!Z.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Q={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(Q.id,Q),Z.status==="draft")Z.status="in_review";return this.emitEvent({type:I.OutcomeFragmentAttached,fragment:{...Q}}),{...Q}}reviewOutcomeFragment($){let Z=this.outcomeFragments.get($.fragmentId);if(!Z)throw Error(`Fragment "${$.fragmentId}" was not found`);return Z.status=$.approved?"reviewed":"rejected",Z.reviewedBy=$.reviewedBy,Z.reviewedAt=new Date,this.emitEvent({type:I.OutcomeFragmentReviewed,fragment:{...Z}}),{...Z}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((Z)=>Z.outcomeId===$).map((Z)=>({...Z}))}finalizeOutcome($){let Z=this.outcomes.get($);if(!Z)throw Error(`Outcome "${$}" was not found`);let Q=this.listOutcomeFragments($);for(let W of Z.requiredSections)if(!Q.some((X)=>X.section===W&&X.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${W}" is missing a reviewed fragment.`);return Z.status="finalized",Z.finalizedAt=new Date,this.emitEvent({type:I.OutcomeFinalized,outcome:{...Z}}),{...Z}}cleanup(){for(let $ of this.members.values())if($.role==="teammate"&&$.runningCount>0)throw Error(`Cannot cleanup team while teammate "${$.agentId}" is still running`);if(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let $ of this.members.values())if($.role==="teammate")try{$.agent?.abort()}catch(Z){if(!oJ(Z))throw Z}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[$,Z]of this.members.entries())if(Z.role==="teammate")this.members.delete($)}requireTask($){let Z=this.tasks.get($);if(!Z)throw Error(`Task "${$}" was not found`);return Z}assertDependenciesResolved($){let Z=this.getUnresolvedDependencies($);if(Z.length>0)throw Error(`Task "${$.id}" is blocked by "${Z[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((Z)=>{let Q=this.tasks.get(Z);return!Q||Q.status!=="completed"})}trackMeaningfulEvent($,Z){if(this.recordRunActivityFromAgentEvent($,Z),Z.type==="iteration_end"&&Z.hadToolCalls){this.recordProgressStep($,`Completed iteration ${Z.iteration} with ${Z.toolCallCount} tool call(s)`);return}if(Z.type==="content_end"&&Z.contentType==="tool"&&!Z.error){this.recordProgressStep($,`Finished tool "${Z.toolName??"unknown"}"`);return}if(Z.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${Z.iterations} iterations)`});return}if(Z.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:Z.error.message})}recordRunActivityFromAgentEvent($,Z){let Q;switch(Z.type){case"iteration_start":Q=`iteration_${Z.iteration}_started`;break;case"content_start":if(Z.contentType==="tool")Q=`running_tool_${Z.toolName??"unknown"}`;break;case"content_end":if(Z.contentType==="tool")Q=Z.error?this.formatProgressErrorActivity(`tool_${Z.toolName??"unknown"}_error`,Z.error):`finished_tool_${Z.toolName??"unknown"}`;break;case"done":Q="finalizing_response";break;case"error":Q=this.formatProgressErrorActivity("run_error",Z.error.message);break;default:break}if(!Q)return;for(let W of this.runs.values()){if(W.agentId!==$||W.status!=="running")continue;this.recordRunProgress(W,Q)}}recordRunProgress($,Z){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=Z,$.currentActivity=Z,this.emitEvent({type:I.RunProgress,run:{...$},message:Z})}formatProgressErrorActivity($,Z){let Q=Z.replace(/\s+/g," ").trim();if(Q.length===0)return $;let W=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${W}`}recordProgressStep($,Z,Q,W=!1){this.missionStepCounter++;let J=this.members.get($);if(!J)return;let X=this.missionStepCounter-J.lastMissionStep,Y=Date.now()-J.lastMissionAt;if(!W&&X<this.missionLogIntervalSteps&&Y<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Q,kind:"progress",summary:Z})}buildMailboxNotification($){if($.length===0)return"";let Z=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Q of $)Z.push(`--- Message from ${Q.fromAgentId} | subject: ${Q.subject} ---`),Z.push(Q.body);return Z.push("---"),Z.join(`
526
- `)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function jA($){return new Promise((Z)=>setTimeout(Z,$))}function B4($,Z){let Q=0;for(let W of $){if(!W.startsWith(Z))continue;let J=Number.parseInt(W.slice(Z.length),10);if(Number.isFinite(J))Q=Math.max(Q,J)}return Q}function eJ($,Z){switch(Z.type){case"run_queued":case"run_started":$.activeTeamRunIds.add(Z.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let Q;if(Z.type==="run_failed")Q=Z.run.error;else if(Z.type==="run_cancelled"||Z.type==="run_interrupted")Q=Z.run.error??Z.reason;$.activeTeamRunIds.delete(Z.run.id),$.pendingTeamRunUpdates.push({runId:Z.run.id,agentId:Z.run.agentId,taskId:Z.run.taskId,status:Z.type.replace("run_",""),error:Q,iterations:Z.run.result?.iterations}),iQ($);break}default:break}}async function $X($,Z,Q){switch(Z.type){case"run_progress":await Q("onTeamTaskProgress",$,Z.run.agentId,Z.message,{kind:Z.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(Z.event.type==="content_start"&&Z.event.contentType==="text"&&typeof Z.event.text==="string"){let W=Z.event.text.replace(/\s+/g," ").trim().slice(0,120);if(W)await Q("onTeamTaskProgress",$,Z.agentId,W,{kind:"text"})}break;case"task_start":await Q("onTeamTaskStart",$,Z.agentId,Z.message);break;case"task_end":{if(Z.error)await Q("onTeamTaskEnd",$,Z.agentId,"failed",`[error] ${Z.error.message}`,void 0,Z.messages);else if(Z.result?.finishReason==="aborted")await Q("onTeamTaskEnd",$,Z.agentId,"cancelled","[done] aborted",Z.result,Z.result.messages);else await Q("onTeamTaskEnd",$,Z.agentId,"completed",`[done] ${Z.result?.finishReason??"completed"}`,Z.result,Z.result?.messages);break}default:break}}function ZX($,Z,Q,W){if(!$.runtime.teamRuntime)return;let J=$.runtime.teamRuntime.getTeamName();W({type:"team_progress",payload:{sessionId:Z,teamName:J,lifecycle:H4({teamName:J,sessionId:Z,event:Q}),summary:V4(J,$.runtime.teamRuntime.exportState())}})}function m5($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function QX($,Z){if($.aborting)return!1;if(!(Z==="completed"||Z==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&m5($)}function iQ($){let Z=$.teamRunWaiters.splice(0);for(let Q of Z)Q()}async function WX($){while(!0){if($.aborting)return[];if($.pendingTeamRunUpdates.length>0){let Z=[...$.pendingTeamRunUpdates];return $.pendingTeamRunUpdates.length=0,Z}if($.activeTeamRunIds.size===0)return[];await new Promise((Z)=>{$.teamRunWaiters.push(Z)})}}function JX($,Z){let Q=Z.map((X)=>{let Y=[`- ${X.runId} (${X.agentId}) -> ${X.status}`];if(X.taskId)Y.push(` task=${X.taskId}`);if(typeof X.iterations==="number")Y.push(` iterations=${X.iterations}`);if(X.error)Y.push(` error=${X.error}`);return Y.join("")}),W=$.activeTeamRunIds.size,J=W>0?`There are still ${W} teammate run(s) in progress. Continue coordination and decide whether to wait for more updates.`:"No teammate runs are currently in progress. Continue coordination using these updates.";return v5(`System-delivered teammate async run updates:
525
+ ${Z}`:Z,Y=Q?.continueConversation?await W.agent.continue(X):await W.agent.run(X);return this.emitEvent({type:I.TaskEnd,agentId:$,result:Y}),this.recordProgressStep($,`Completed a delegated run (${Y.iterations} iterations)`,Q?.taskId,!0),Y}catch(J){let X=J instanceof Error?J:Error(String(J));if(this.emitEvent({type:I.TaskEnd,agentId:$,error:X,messages:W.agent.getMessages()}),!WA(W,X))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:X.message});throw X}finally{if(W.runningCount--,W.runningCount<=0&&this.members.get($)?.status!=="stopped")W.status="idle"}}startTeammateRun($,Z,Q){let W=`run_${String(++this.runCounter).padStart(5,"0")}`,J={id:W,agentId:$,taskId:Q?.taskId,status:"queued",message:Z,priority:Q?.priority??0,retryCount:0,maxRetries:Math.max(0,Q?.maxRetries??0),continueConversation:Q?.continueConversation,startedAt:new Date(0),leaseOwner:Q?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(W,J),this.runQueue.push(W),this.emitEvent({type:I.RunQueued,run:{...J}}),this.dispatchQueuedRuns(),{...J}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let Z=this.selectNextDispatchableQueuedRun();$=Z.nextDelayedAttemptAt;let Q=Z.index;if(Q<0){this.scheduleQueuedRunDispatch($);return}let[W]=this.runQueue.splice(Q,1),J=W?this.runs.get(W):void 0;if(!J||J.status!=="queued")continue;this.executeQueuedRun(J)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,Z=Number.NEGATIVE_INFINITY,Q,W=Date.now();for(let J=0;J<this.runQueue.length;J++){let X=this.runs.get(this.runQueue[J]);if(!X||X.status!=="queued")continue;if(X.nextAttemptAt&&X.nextAttemptAt.getTime()>W){if(!Q||X.nextAttemptAt<Q)Q=X.nextAttemptAt;continue}if(X.priority>Z)Z=X.priority,$=J}return{index:$,nextDelayedAttemptAt:Q}}scheduleQueuedRunDispatch($){if(!$)return;let Z=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},Z)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let Z of this.runs.values())if(Z.status==="running")$++;return $}async executeQueuedRun($){let Z=$.currentActivity===JA;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:I.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let W=Z?DS($):$.message,J=await this.routeToTeammate($.agentId,W,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=J,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:I.RunCompleted,run:{...$}})}catch(W){let J=W instanceof Error?W.message:String(W??"Unknown error");$.error=J,$.endedAt=new Date;let X=this.members.get($.agentId);if(WA(X,W))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:I.RunCancelled,run:{...$},reason:J});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:I.RunFailed,run:{...$}})}finally{clearInterval(Q),this.dispatchQueuedRuns()}}listRuns($){let Z=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Q)=>{if(!Z&&!["running","queued"].includes(Q.status))return!1;if($?.status&&Q.status!==$.status)return!1;if($?.agentId&&Q.agentId!==$.agentId)return!1;return!0}).map((Q)=>({...Q}))}getRun($){let Z=this.runs.get($);return Z?{...Z}:void 0}async awaitRun($,Z=250){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);while(Q.status==="queued"||Q.status==="running")await XA(Z);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((Z)=>["queued","running"].includes(Z.status)))await XA($);return this.listRuns()}cancelRun($,Z){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);if(Q.status==="completed"||Q.status==="failed")return{...Q};Q.status="cancelled",Q.error=Z,Q.endedAt=new Date,Q.currentActivity="cancelled";let W=this.runQueue.indexOf($);if(W>=0)this.runQueue.splice(W,1);return this.emitEvent({type:I.RunCancelled,run:{...Q},reason:Z}),{...Q}}recoverActiveRuns($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;let W=this.members.get(Q.agentId);if(!W||W.role!=="teammate"||!W.agent){Q.status="interrupted",Q.error="teammate_unavailable_after_recovery",Q.endedAt=new Date,Q.currentActivity="interrupted",this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:Q.error});continue}let J=new Date;if(Q.status="queued",Q.error=void 0,Q.endedAt=void 0,Q.heartbeatAt=J,Q.lastProgressAt=J,Q.lastProgressMessage=$,Q.currentActivity=JA,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);Z.push({...Q}),this.emitEvent({type:I.RunQueued,run:{...Q}})}return this.dispatchQueuedRuns(),Z}markStaleRunsInterrupted($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;Q.status="interrupted",Q.error=$,Q.endedAt=new Date,Q.currentActivity="interrupted",Z.push({...Q}),this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),Z}sendMessage($,Z,Q,W,J){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let X=this.members.get(Z);if(!X)throw Error(`Unknown recipient "${Z}"`);let Y={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:Z,subject:Q,body:W,taskId:J,sentAt:new Date};if(this.mailbox.push(Y),this.emitEvent({type:I.TeamMessage,message:{...Y}}),X.role==="teammate"&&X.runningCount>0&&X.agent)X.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Q}". Use the team_read_mailbox tool to read it at your convenience.`;return{...Y}}broadcast($,Z,Q,W){let J=[];for(let X of this.members.values()){if(X.agentId===$)continue;if(X.role==="lead")continue;J.push(this.sendMessage($,X.agentId,Z,Q,W?.taskId))}return J}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let Z={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:$.agentId,taskId:$.taskId,kind:$.kind,summary:$.summary,evidence:$.evidence,nextAction:$.nextAction};this.missionLog.push(Z);let Q=this.members.get($.agentId);if(Q)Q.lastMissionAt=Date.now(),Q.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:I.TeamMissionLog,entry:{...Z}}),{...Z}}createOutcome($){let Z={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:$.title,status:"draft",requiredSections:[...new Set($.requiredSections)],createdBy:$.createdBy,createdAt:new Date};return this.outcomes.set(Z.id,Z),this.emitEvent({type:I.OutcomeCreated,outcome:{...Z}}),{...Z}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let Z=this.outcomes.get($.outcomeId);if(!Z)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!Z.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Q={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(Q.id,Q),Z.status==="draft")Z.status="in_review";return this.emitEvent({type:I.OutcomeFragmentAttached,fragment:{...Q}}),{...Q}}reviewOutcomeFragment($){let Z=this.outcomeFragments.get($.fragmentId);if(!Z)throw Error(`Fragment "${$.fragmentId}" was not found`);return Z.status=$.approved?"reviewed":"rejected",Z.reviewedBy=$.reviewedBy,Z.reviewedAt=new Date,this.emitEvent({type:I.OutcomeFragmentReviewed,fragment:{...Z}}),{...Z}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((Z)=>Z.outcomeId===$).map((Z)=>({...Z}))}finalizeOutcome($){let Z=this.outcomes.get($);if(!Z)throw Error(`Outcome "${$}" was not found`);let Q=this.listOutcomeFragments($);for(let W of Z.requiredSections)if(!Q.some((X)=>X.section===W&&X.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${W}" is missing a reviewed fragment.`);return Z.status="finalized",Z.finalizedAt=new Date,this.emitEvent({type:I.OutcomeFinalized,outcome:{...Z}}),{...Z}}cleanup(){for(let $ of this.members.values())if($.role==="teammate"&&$.runningCount>0)throw Error(`Cannot cleanup team while teammate "${$.agentId}" is still running`);if(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let $ of this.members.values())if($.role==="teammate")try{$.agent?.abort()}catch(Z){if(!oJ(Z))throw Z}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[$,Z]of this.members.entries())if(Z.role==="teammate")this.members.delete($)}requireTask($){let Z=this.tasks.get($);if(!Z)throw Error(`Task "${$}" was not found`);return Z}assertDependenciesResolved($){let Z=this.getUnresolvedDependencies($);if(Z.length>0)throw Error(`Task "${$.id}" is blocked by "${Z[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((Z)=>{let Q=this.tasks.get(Z);return!Q||Q.status!=="completed"})}trackMeaningfulEvent($,Z){if(this.recordRunActivityFromAgentEvent($,Z),Z.type==="iteration_end"&&Z.hadToolCalls){this.recordProgressStep($,`Completed iteration ${Z.iteration} with ${Z.toolCallCount} tool call(s)`);return}if(Z.type==="content_end"&&Z.contentType==="tool"&&!Z.error){this.recordProgressStep($,`Finished tool "${Z.toolName??"unknown"}"`);return}if(Z.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${Z.iterations} iterations)`});return}if(Z.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:Z.error.message})}recordRunActivityFromAgentEvent($,Z){let Q;switch(Z.type){case"iteration_start":Q=`iteration_${Z.iteration}_started`;break;case"content_start":if(Z.contentType==="tool")Q=`running_tool_${Z.toolName??"unknown"}`;break;case"content_end":if(Z.contentType==="tool")Q=Z.error?this.formatProgressErrorActivity(`tool_${Z.toolName??"unknown"}_error`,Z.error):`finished_tool_${Z.toolName??"unknown"}`;break;case"done":Q="finalizing_response";break;case"error":Q=this.formatProgressErrorActivity("run_error",Z.error.message);break;default:break}if(!Q)return;for(let W of this.runs.values()){if(W.agentId!==$||W.status!=="running")continue;this.recordRunProgress(W,Q)}}recordRunProgress($,Z){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=Z,$.currentActivity=Z,this.emitEvent({type:I.RunProgress,run:{...$},message:Z})}formatProgressErrorActivity($,Z){let Q=Z.replace(/\s+/g," ").trim();if(Q.length===0)return $;let W=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${W}`}recordProgressStep($,Z,Q,W=!1){this.missionStepCounter++;let J=this.members.get($);if(!J)return;let X=this.missionStepCounter-J.lastMissionStep,Y=Date.now()-J.lastMissionAt;if(!W&&X<this.missionLogIntervalSteps&&Y<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Q,kind:"progress",summary:Z})}buildMailboxNotification($){if($.length===0)return"";let Z=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Q of $)Z.push(`--- Message from ${Q.fromAgentId} | subject: ${Q.subject} ---`),Z.push(Q.body);return Z.push("---"),Z.join(`
526
+ `)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function XA($){return new Promise((Z)=>setTimeout(Z,$))}function H4($,Z){let Q=0;for(let W of $){if(!W.startsWith(Z))continue;let J=Number.parseInt(W.slice(Z.length),10);if(Number.isFinite(J))Q=Math.max(Q,J)}return Q}function eJ($,Z){switch(Z.type){case"run_queued":case"run_started":$.activeTeamRunIds.add(Z.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let Q;if(Z.type==="run_failed")Q=Z.run.error;else if(Z.type==="run_cancelled"||Z.type==="run_interrupted")Q=Z.run.error??Z.reason;$.activeTeamRunIds.delete(Z.run.id),$.pendingTeamRunUpdates.push({runId:Z.run.id,agentId:Z.run.agentId,taskId:Z.run.taskId,status:Z.type.replace("run_",""),error:Q,iterations:Z.run.result?.iterations}),iQ($);break}default:break}}async function $X($,Z,Q){switch(Z.type){case"run_progress":await Q("onTeamTaskProgress",$,Z.run.agentId,Z.message,{kind:Z.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(Z.event.type==="content_start"&&Z.event.contentType==="text"&&typeof Z.event.text==="string"){let W=Z.event.text.replace(/\s+/g," ").trim().slice(0,120);if(W)await Q("onTeamTaskProgress",$,Z.agentId,W,{kind:"text"})}break;case"task_start":await Q("onTeamTaskStart",$,Z.agentId,Z.message);break;case"task_end":{if(Z.error)await Q("onTeamTaskEnd",$,Z.agentId,"failed",`[error] ${Z.error.message}`,void 0,Z.messages);else if(Z.result?.finishReason==="aborted")await Q("onTeamTaskEnd",$,Z.agentId,"cancelled","[done] aborted",Z.result,Z.result.messages);else await Q("onTeamTaskEnd",$,Z.agentId,"completed",`[done] ${Z.result?.finishReason??"completed"}`,Z.result,Z.result?.messages);break}default:break}}function ZX($,Z,Q,W){if(!$.runtime.teamRuntime)return;let J=$.runtime.teamRuntime.getTeamName();W({type:"team_progress",payload:{sessionId:Z,teamName:J,lifecycle:B4({teamName:J,sessionId:Z,event:Q}),summary:V4(J,$.runtime.teamRuntime.exportState())}})}function m5($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function QX($,Z){if($.aborting)return!1;if(!(Z==="completed"||Z==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&m5($)}function iQ($){let Z=$.teamRunWaiters.splice(0);for(let Q of Z)Q()}async function WX($){while(!0){if($.aborting)return[];if($.pendingTeamRunUpdates.length>0){let Z=[...$.pendingTeamRunUpdates];return $.pendingTeamRunUpdates.length=0,Z}if($.activeTeamRunIds.size===0)return[];await new Promise((Z)=>{$.teamRunWaiters.push(Z)})}}function JX($,Z){let Q=Z.map((X)=>{let Y=[`- ${X.runId} (${X.agentId}) -> ${X.status}`];if(X.taskId)Y.push(` task=${X.taskId}`);if(typeof X.iterations==="number")Y.push(` iterations=${X.iterations}`);if(X.error)Y.push(` error=${X.error}`);return Y.join("")}),W=$.activeTeamRunIds.size,J=W>0?`There are still ${W} teammate run(s) in progress. Continue coordination and decide whether to wait for more updates.`:"No teammate runs are currently in progress. Continue coordination using these updates.";return v5(`System-delivered teammate async run updates:
527
527
  ${Q.join(`
528
528
  `)}
529
529
 
530
- ${J}`,$.config.mode)}function v5($,Z){return TS($,Z==="plan"?"plan":Z==="yolo"?"yolo":"act")}var XX=4;class e1{adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor($,Z={}){this.adapter=$;this.manifestStore=new nJ($,Z.messagesArtifactUploader,Z.logger),this.teamChildren=new pQ($,this.manifestStore,(Q,W,J)=>this.toPersistedMessages(Q,W,J),e1.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,Z,Q){if(!$)return;return Z?IZ(Z.messages,Z,Q):kZ($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,Z){this.manifestStore.writeSessionManifest($,Z)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let Z=$.startedAt??J0(),Q=$.sessionId.trim(),W=Q.length>0?Q:`${Date.now()}_${qS(5)}`,J=this.manifestStore.artifacts.sessionMessagesPath(W),X=this.manifestStore.artifacts.sessionManifestPath(W),Y=c6({metadata:$.metadata,prompt:$.prompt}),j={version:1,session_id:W,source:$.source,pid:$.pid,started_at:Z,status:"running",interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt?.trim()||void 0,metadata:Y,messages_path:J};return await this.adapter.upsertSession({sessionId:W,source:$.source,pid:$.pid,startedAt:Z,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:null,parentAgentId:null,agentId:null,conversationId:null,isSubagent:!1,prompt:j.prompt??null,metadata:M$(j.metadata),hookPath:"",messagesPath:J,updatedAt:J0()}),this.manifestStore.initializeMessagesFile(W,J,Z),this.manifestStore.writeSessionManifest(X,j),{manifestPath:X,messagesPath:J,manifest:j}}async updateSessionStatus($,Z,Q){let W;if((await XG(()=>this.adapter.getSession($),async(X)=>{return W=H0(Z)?void 0:J0(),this.adapter.updateSession({sessionId:$,status:Z,endedAt:W??null,exitCode:H0(Z)?null:typeof Q==="number"?Q:null,expectedStatusLock:X.statusLock})},XX)).updated){if(Z==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:W}}return{updated:!1}}async updateSession($){for(let Z=0;Z<XX;Z++){let Q=await this.adapter.getSession($.sessionId);if(!Q)return{updated:!1};let W=Q.metadata??void 0,J=$.metadata!==void 0?M$($.metadata)??{}:M$(W)??{},X=L2(typeof W?.title==="string"?W.title:void 0),Y=$.title!==void 0?L2($.title):X??y3($.prompt);if(Y)J.title=Y;else delete J.title;let j=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:j?Object.keys(J).length>0?J:null:void 0,title:Y,expectedStatusLock:Q.statusLock})).updated)continue;let{path:H,manifest:B}=this.manifestStore.readManifestFile($.sessionId);if(B){if($.prompt!==void 0)B.prompt=$.prompt??void 0;let G=$.metadata!==void 0?M$($.metadata)??{}:M$(B.metadata)??{};if(Y)G.title=Y;B.metadata=Object.keys(G).length>0?G:void 0,this.manifestStore.writeSessionManifest(H,B)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,Z){return this.teamChildren.appendSubagentHookAudit(Z),Promise.resolve()}persistSessionMessages($,Z,Q){let W=kZ(Z);return this.manifestStore.persistSessionMessages($,W,Q)}applySubagentStatus($,Z){return this.teamChildren.applySubagentStatus($,Z)}applySubagentStatusBySessionId($,Z){return this.teamChildren.applySubagentStatusBySessionId($,Z)}applyStatusToRunningChildSessions($,Z){return this.teamChildren.applyStatusToRunningChildSessions($,Z)}onTeamTaskStart($,Z,Q){return this.teamChildren.onTeamTaskStart($,Z,Q)}onTeamTaskEnd($,Z,Q,W,J,X){return this.teamChildren.onTeamTaskEnd($,Z,Q,W,J,X)}onTeamTaskProgress($,Z,Q,W){return this.teamChildren.onTeamTaskProgress($,Z,Q,W)}handleSubAgentStart($,Z){return this.teamChildren.handleSubAgentStart($,Z)}handleSubAgentEnd($,Z){return this.teamChildren.handleSubAgentEnd($,Z)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(Z){return typeof Z==="object"&&Z!==null&&"code"in Z&&Z.code==="EPERM"}}async reconcileDeadRunningSession($){if(H0($.status)===!1||this.isPidAlive($.pid))return $;let Z=J0(),Q=e1.STALE_REASON;for(let W=0;W<XX;W++){let J=await this.adapter.getSession($.sessionId);if(!J)return;if(H0(J.status)===!1)return J;let X={...J.metadata??{},terminal_marker:Q,terminal_marker_at:Z,terminal_marker_pid:J.pid,terminal_marker_source:e1.STALE_SOURCE},Y=await this.adapter.updateSession({sessionId:J.sessionId,status:"failed",endedAt:Z,exitCode:1,metadata:X,expectedStatusLock:J.statusLock});if(!Y.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(J.sessionId,"failed");let j=JG(J,{status:"failed",endedAt:Z,exitCode:1,metadata:X}),{path:V}=this.manifestStore.readManifestFile(J.sessionId);return this.manifestStore.writeSessionManifest(V,j),this.manifestStore.appendStaleSessionHookLog(Z,J.sessionId,J.pid,Q,e1.STALE_SOURCE),{...J,status:"failed",endedAt:Z,exitCode:1,metadata:X,statusLock:Y.statusLock,updatedAt:Z}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let Z=Math.max(1,Math.floor($)),Q=Math.min(Z*5,2000);return await this.reconcileDeadSessions(Q),(await this.adapter.listSessions({limit:Q})).slice(0,Z).map((J)=>{let X=M$(J.metadata??void 0),Y=this.manifestStore.readSessionManifest(J.sessionId),j=L2(typeof Y?.metadata?.title==="string"?Y.metadata.title:void 0),V=j?{...X??{},title:j}:X;return{...J,metadata:V}})}async reconcileDeadSessions($=2000){let Z=Math.max(1,Math.floor($)),Q=(await Promise.all(["idle","running","pending"].map((J)=>this.adapter.listSessions({limit:Z,status:J})))).flat(),W=0;for(let J of Q){let X=await this.reconcileDeadRunningSession(J);if(X&&X.status!==J.status)W++}return W}async deleteSession($){let Z=$.trim();if(!Z)throw Error("session id is required");let Q=await this.adapter.getSession(Z);if(!Q)return{deleted:!1};if(await this.adapter.deleteSession(Z,!1),!Q.isSubagent){let W=await this.adapter.listSessions({limit:2000,parentSessionId:Z});await this.adapter.deleteSession(Z,!0),await Promise.allSettled(W.map(async(J)=>{await $J(J.cwd,J.sessionId),J5(J.messagesPath),J5(this.manifestStore.artifacts.sessionManifestPath(J.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(J.sessionId)}))}if(await $J(Q.cwd,Z),J5(Q.messagesPath),J5(this.manifestStore.artifacts.sessionManifestPath(Z,!1)),Q.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(Z);else{let W=new Set([this.manifestStore.artifacts.sessionArtifactsDir(Z)]);for(let J of[Q.messagesPath])if(typeof J==="string"&&J.trim().length>0)W.add(OS(J));for(let J of W)this.manifestStore.artifacts.removeDir(J)}return{deleted:!0}}}function jX(){return new Date().toISOString()}function KA($,Z){let Q=`${$}.tmp`;ES(Q,`${JSON.stringify(Z,null,2)}
531
- `,"utf8"),RS(Q,$)}class FA{sessionsDirPath;constructor($=NS()){this.sessionsDirPath=$}ensureSessionsDir(){if(!YX(this.sessionsDirPath))MS(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return GA(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return GA(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!YX($))return{version:1,sessions:{}};try{let Z=JSON.parse(BA($,"utf8"));if(Z?.version===1&&Z.sessions)return Z}catch{}return{version:1,sessions:{}}}writeIndex($){KA(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!YX($))return{version:1,nextId:1,requests:[]};try{let Z=JSON.parse(BA($,"utf8"));if(Z?.version===1&&typeof Z.nextId==="number"&&Array.isArray(Z.requests))return Z}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){KA(this.spawnQueuePath(),$)}async upsertSession($){let Z=this.readIndex();Z.sessions[$.sessionId]=$,this.writeIndex(Z)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((Z)=>$.parentSessionId!==void 0?Z.parentSessionId===$.parentSessionId:!0).filter((Z)=>$.status!==void 0?Z.status===$.status:!0).sort((Z,Q)=>Q.startedAt.localeCompare(Z.startedAt)).slice(0,$.limit)}async updateSession($){let Z=this.readIndex(),Q=Z.sessions[$.sessionId];if(!Q)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&Q.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:Q.statusLock};let W=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:Q.statusLock,J={...Q,status:$.status??Q.status,endedAt:$.endedAt!==void 0?$.endedAt:Q.endedAt??null,exitCode:$.exitCode!==void 0?$.exitCode:Q.exitCode??null,prompt:$.prompt!==void 0?$.prompt:Q.prompt??null,metadata:$.metadata!==void 0?$.metadata??null:Q.metadata??null,parentSessionId:$.parentSessionId!==void 0?$.parentSessionId??null:Q.parentSessionId??null,parentAgentId:$.parentAgentId!==void 0?$.parentAgentId??null:Q.parentAgentId??null,agentId:$.agentId!==void 0?$.agentId??null:Q.agentId??null,conversationId:$.conversationId!==void 0?$.conversationId??null:Q.conversationId??null,statusLock:W,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:Q.isSubagent,updatedAt:jX()};if($.setRunning)J.status="running",J.endedAt=null,J.exitCode=null;return Z.sessions[$.sessionId]=J,this.writeIndex(Z),{updated:!0,statusLock:J.statusLock}}async deleteSession($,Z){let Q=this.readIndex();if(!Q.sessions[$])return!1;if(delete Q.sessions[$],Z){for(let J of Object.values(Q.sessions))if(J.parentSessionId===$)delete Q.sessions[J.sessionId]}return this.writeIndex(Q),!0}async enqueueSpawnRequest($){let Z=this.readQueue();Z.requests.push({id:Z.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:jX()}),Z.nextId+=1,this.writeQueue(Z)}async claimSpawnRequest($,Z){let Q=this.readQueue(),W=Q.requests.find((J)=>J.rootSessionId===$&&J.parentAgentId===Z&&!J.consumedAt);if(!W)return;return W.consumedAt=jX(),this.writeQueue(Q),W.task}}class VX extends e1{constructor($,Z={}){super(new FA($),Z)}ensureSessionsDir(){return super.ensureSessionsDir()}}var UA={};N(UA,{CoreSessionService:()=>z1});import{existsSync as wS,mkdirSync as CS}from"node:fs";import{resolveSessionDataDir as PS}from"@cline/shared/storage";var HX=`
530
+ ${J}`,$.config.mode)}function v5($,Z){return LS($,Z==="plan"?"plan":Z==="yolo"?"yolo":"act")}var XX=4;class e1{adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor($,Z={}){this.adapter=$;this.manifestStore=new nJ($,Z.messagesArtifactUploader,Z.logger),this.teamChildren=new pQ($,this.manifestStore,(Q,W,J)=>this.toPersistedMessages(Q,W,J),e1.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,Z,Q){if(!$)return;return Z?IZ(Z.messages,Z,Q):kZ($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,Z){this.manifestStore.writeSessionManifest($,Z)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let Z=$.startedAt??J0(),Q=$.sessionId.trim(),W=Q.length>0?Q:`${Date.now()}_${zS(5)}`,J=this.manifestStore.artifacts.sessionMessagesPath(W),X=this.manifestStore.artifacts.sessionManifestPath(W),Y=c6({metadata:$.metadata,prompt:$.prompt}),j={version:1,session_id:W,source:$.source,pid:$.pid,started_at:Z,status:"running",interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt?.trim()||void 0,metadata:Y,messages_path:J};return await this.adapter.upsertSession({sessionId:W,source:$.source,pid:$.pid,startedAt:Z,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:null,parentAgentId:null,agentId:null,conversationId:null,isSubagent:!1,prompt:j.prompt??null,metadata:M$(j.metadata),hookPath:"",messagesPath:J,updatedAt:J0()}),this.manifestStore.initializeMessagesFile(W,J,Z),this.manifestStore.writeSessionManifest(X,j),{manifestPath:X,messagesPath:J,manifest:j}}async updateSessionStatus($,Z,Q){let W;if((await XG(()=>this.adapter.getSession($),async(X)=>{return W=B0(Z)?void 0:J0(),this.adapter.updateSession({sessionId:$,status:Z,endedAt:W??null,exitCode:B0(Z)?null:typeof Q==="number"?Q:null,expectedStatusLock:X.statusLock})},XX)).updated){if(Z==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:W}}return{updated:!1}}async updateSession($){for(let Z=0;Z<XX;Z++){let Q=await this.adapter.getSession($.sessionId);if(!Q)return{updated:!1};let W=Q.metadata??void 0,J=$.metadata!==void 0?M$($.metadata)??{}:M$(W)??{},X=L2(typeof W?.title==="string"?W.title:void 0),Y=$.title!==void 0?L2($.title):X??y3($.prompt);if(Y)J.title=Y;else delete J.title;let j=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:j?Object.keys(J).length>0?J:null:void 0,title:Y,expectedStatusLock:Q.statusLock})).updated)continue;let{path:B,manifest:H}=this.manifestStore.readManifestFile($.sessionId);if(H){if($.prompt!==void 0)H.prompt=$.prompt??void 0;let G=$.metadata!==void 0?M$($.metadata)??{}:M$(H.metadata)??{};if(Y)G.title=Y;H.metadata=Object.keys(G).length>0?G:void 0,this.manifestStore.writeSessionManifest(B,H)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,Z){return this.teamChildren.appendSubagentHookAudit(Z),Promise.resolve()}persistSessionMessages($,Z,Q){let W=kZ(Z);return this.manifestStore.persistSessionMessages($,W,Q)}applySubagentStatus($,Z){return this.teamChildren.applySubagentStatus($,Z)}applySubagentStatusBySessionId($,Z){return this.teamChildren.applySubagentStatusBySessionId($,Z)}applyStatusToRunningChildSessions($,Z){return this.teamChildren.applyStatusToRunningChildSessions($,Z)}onTeamTaskStart($,Z,Q){return this.teamChildren.onTeamTaskStart($,Z,Q)}onTeamTaskEnd($,Z,Q,W,J,X){return this.teamChildren.onTeamTaskEnd($,Z,Q,W,J,X)}onTeamTaskProgress($,Z,Q,W){return this.teamChildren.onTeamTaskProgress($,Z,Q,W)}handleSubAgentStart($,Z){return this.teamChildren.handleSubAgentStart($,Z)}handleSubAgentEnd($,Z){return this.teamChildren.handleSubAgentEnd($,Z)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(Z){return typeof Z==="object"&&Z!==null&&"code"in Z&&Z.code==="EPERM"}}async reconcileDeadRunningSession($){if(B0($.status)===!1||this.isPidAlive($.pid))return $;let Z=J0(),Q=e1.STALE_REASON;for(let W=0;W<XX;W++){let J=await this.adapter.getSession($.sessionId);if(!J)return;if(B0(J.status)===!1)return J;let X={...J.metadata??{},terminal_marker:Q,terminal_marker_at:Z,terminal_marker_pid:J.pid,terminal_marker_source:e1.STALE_SOURCE},Y=await this.adapter.updateSession({sessionId:J.sessionId,status:"failed",endedAt:Z,exitCode:1,metadata:X,expectedStatusLock:J.statusLock});if(!Y.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(J.sessionId,"failed");let j=JG(J,{status:"failed",endedAt:Z,exitCode:1,metadata:X}),{path:V}=this.manifestStore.readManifestFile(J.sessionId);return this.manifestStore.writeSessionManifest(V,j),this.manifestStore.appendStaleSessionHookLog(Z,J.sessionId,J.pid,Q,e1.STALE_SOURCE),{...J,status:"failed",endedAt:Z,exitCode:1,metadata:X,statusLock:Y.statusLock,updatedAt:Z}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let Z=Math.max(1,Math.floor($)),Q=Math.min(Z*5,2000);return await this.reconcileDeadSessions(Q),(await this.adapter.listSessions({limit:Q})).slice(0,Z).map((J)=>{let X=M$(J.metadata??void 0),Y=this.manifestStore.readSessionManifest(J.sessionId),j=L2(typeof Y?.metadata?.title==="string"?Y.metadata.title:void 0),V=j?{...X??{},title:j}:X;return{...J,metadata:V}})}async reconcileDeadSessions($=2000){let Z=Math.max(1,Math.floor($)),Q=(await Promise.all(["idle","running","pending"].map((J)=>this.adapter.listSessions({limit:Z,status:J})))).flat(),W=0;for(let J of Q){let X=await this.reconcileDeadRunningSession(J);if(X&&X.status!==J.status)W++}return W}async deleteSession($){let Z=$.trim();if(!Z)throw Error("session id is required");let Q=await this.adapter.getSession(Z);if(!Q)return{deleted:!1};if(await this.adapter.deleteSession(Z,!1),!Q.isSubagent){let W=await this.adapter.listSessions({limit:2000,parentSessionId:Z});await this.adapter.deleteSession(Z,!0),await Promise.allSettled(W.map(async(J)=>{await $J(J.cwd,J.sessionId),J5(J.messagesPath),J5(this.manifestStore.artifacts.sessionManifestPath(J.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(J.sessionId)}))}if(await $J(Q.cwd,Z),J5(Q.messagesPath),J5(this.manifestStore.artifacts.sessionManifestPath(Z,!1)),Q.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(Z);else{let W=new Set([this.manifestStore.artifacts.sessionArtifactsDir(Z)]);for(let J of[Q.messagesPath])if(typeof J==="string"&&J.trim().length>0)W.add(_S(J));for(let J of W)this.manifestStore.artifacts.removeDir(J)}return{deleted:!0}}}function jX(){return new Date().toISOString()}function HA($,Z){let Q=`${$}.tmp`;qS(Q,`${JSON.stringify(Z,null,2)}
531
+ `,"utf8"),OS(Q,$)}class GA{sessionsDirPath;constructor($=MS()){this.sessionsDirPath=$}ensureSessionsDir(){if(!YX(this.sessionsDirPath))TS(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return BA(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return BA(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!YX($))return{version:1,sessions:{}};try{let Z=JSON.parse(VA($,"utf8"));if(Z?.version===1&&Z.sessions)return Z}catch{}return{version:1,sessions:{}}}writeIndex($){HA(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!YX($))return{version:1,nextId:1,requests:[]};try{let Z=JSON.parse(VA($,"utf8"));if(Z?.version===1&&typeof Z.nextId==="number"&&Array.isArray(Z.requests))return Z}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){HA(this.spawnQueuePath(),$)}async upsertSession($){let Z=this.readIndex();Z.sessions[$.sessionId]=$,this.writeIndex(Z)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((Z)=>$.parentSessionId!==void 0?Z.parentSessionId===$.parentSessionId:!0).filter((Z)=>$.status!==void 0?Z.status===$.status:!0).sort((Z,Q)=>Q.startedAt.localeCompare(Z.startedAt)).slice(0,$.limit)}async updateSession($){let Z=this.readIndex(),Q=Z.sessions[$.sessionId];if(!Q)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&Q.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:Q.statusLock};let W=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:Q.statusLock,J={...Q,status:$.status??Q.status,endedAt:$.endedAt!==void 0?$.endedAt:Q.endedAt??null,exitCode:$.exitCode!==void 0?$.exitCode:Q.exitCode??null,prompt:$.prompt!==void 0?$.prompt:Q.prompt??null,metadata:$.metadata!==void 0?$.metadata??null:Q.metadata??null,parentSessionId:$.parentSessionId!==void 0?$.parentSessionId??null:Q.parentSessionId??null,parentAgentId:$.parentAgentId!==void 0?$.parentAgentId??null:Q.parentAgentId??null,agentId:$.agentId!==void 0?$.agentId??null:Q.agentId??null,conversationId:$.conversationId!==void 0?$.conversationId??null:Q.conversationId??null,statusLock:W,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:Q.isSubagent,updatedAt:jX()};if($.setRunning)J.status="running",J.endedAt=null,J.exitCode=null;return Z.sessions[$.sessionId]=J,this.writeIndex(Z),{updated:!0,statusLock:J.statusLock}}async deleteSession($,Z){let Q=this.readIndex();if(!Q.sessions[$])return!1;if(delete Q.sessions[$],Z){for(let J of Object.values(Q.sessions))if(J.parentSessionId===$)delete Q.sessions[J.sessionId]}return this.writeIndex(Q),!0}async enqueueSpawnRequest($){let Z=this.readQueue();Z.requests.push({id:Z.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:jX()}),Z.nextId+=1,this.writeQueue(Z)}async claimSpawnRequest($,Z){let Q=this.readQueue(),W=Q.requests.find((J)=>J.rootSessionId===$&&J.parentAgentId===Z&&!J.consumedAt);if(!W)return;return W.consumedAt=jX(),this.writeQueue(Q),W.task}}class VX extends e1{constructor($,Z={}){super(new GA($),Z)}ensureSessionsDir(){return super.ensureSessionsDir()}}var AA={};N(AA,{CoreSessionService:()=>z1});import{existsSync as RS,mkdirSync as ES}from"node:fs";import{resolveSessionDataDir as NS}from"@cline/shared/storage";var BX=`
532
532
  session_id AS sessionId,
533
533
  source,
534
534
  pid,
@@ -555,33 +555,33 @@ ${J}`,$.config.mode)}function v5($,Z){return TS($,Z==="plan"?"plan":Z==="yolo"?"
555
555
  metadata_json AS metadata,
556
556
  hook_path AS hookPath,
557
557
  messages_path AS messagesPath,
558
- updated_at AS updatedAt`;function BX($){$.interactive=$.interactive===1,$.enableTools=$.enableTools===1,$.enableSpawn=$.enableSpawn===1,$.enableTeams=$.enableTeams===1,$.isSubagent=$.isSubagent===1;let Z=$.metadata;if(typeof Z==="string"&&Z.trim())try{let Q=JSON.parse(Z);$.metadata=Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:null}catch{$.metadata=null}else $.metadata=null;return $}function GX($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function AA($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class fA{store;sessionsDirPath;constructor($,Z=PS()){this.store=$;this.sessionsDirPath=Z}ensureSessionsDir(){if(!wS(this.sessionsDirPath))CS(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
558
+ updated_at AS updatedAt`;function HX($){$.interactive=$.interactive===1,$.enableTools=$.enableTools===1,$.enableSpawn=$.enableSpawn===1,$.enableTeams=$.enableTeams===1,$.isSubagent=$.isSubagent===1;let Z=$.metadata;if(typeof Z==="string"&&Z.trim())try{let Q=JSON.parse(Z);$.metadata=Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:null}catch{$.metadata=null}else $.metadata=null;return $}function GX($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function KA($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class FA{store;sessionsDirPath;constructor($,Z=NS()){this.store=$;this.sessionsDirPath=Z}ensureSessionsDir(){if(!RS(this.sessionsDirPath))ES(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
559
559
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
560
560
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
561
561
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
562
562
  metadata_json, transcript_path, hook_path, messages_path, updated_at
563
- ) 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,GX($.metadata),"",$.hookPath??"",$.messagesPath??null,$.updatedAt])}async getSession($){let Z=this.store.queryOne(`SELECT ${HX} FROM sessions WHERE session_id = ?`,[$]);return Z?BX(Z):void 0}async listSessions($){let Z=[],Q=[];if($.parentSessionId)Z.push("parent_session_id = ?"),Q.push($.parentSessionId);if($.status)Z.push("status = ?"),Q.push($.status);let W=Z.length>0?`WHERE ${Z.join(" AND ")}`:"";return this.store.queryAll(`SELECT ${HX}
563
+ ) 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,GX($.metadata),"",$.hookPath??"",$.messagesPath??null,$.updatedAt])}async getSession($){let Z=this.store.queryOne(`SELECT ${BX} FROM sessions WHERE session_id = ?`,[$]);return Z?HX(Z):void 0}async listSessions($){let Z=[],Q=[];if($.parentSessionId)Z.push("parent_session_id = ?"),Q.push($.parentSessionId);if($.status)Z.push("status = ?"),Q.push($.status);let W=Z.length>0?`WHERE ${Z.join(" AND ")}`:"";return this.store.queryAll(`SELECT ${BX}
564
564
  FROM sessions
565
565
  ${W}
566
566
  ORDER BY started_at DESC
567
- LIMIT ?`,[...Q,$.limit]).map(BX)}async updateSession($){if($.setRunning){if($.expectedStatusLock===void 0)return{updated:!1,statusLock:0};return{updated:(this.store.run(`UPDATE sessions
567
+ LIMIT ?`,[...Q,$.limit]).map(HX)}async updateSession($){if($.setRunning){if($.expectedStatusLock===void 0)return{updated:!1,statusLock:0};return{updated:(this.store.run(`UPDATE sessions
568
568
  SET status = 'running', ended_at = NULL, exit_code = NULL, updated_at = ?, status_lock = ?,
569
569
  parent_session_id = ?, parent_agent_id = ?, agent_id = ?, conversation_id = ?, is_subagent = 1,
570
570
  prompt = COALESCE(prompt, ?)
571
571
  WHERE session_id = ? AND status_lock = ?`,[J0(),$.expectedStatusLock+1,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.prompt??null,$.sessionId,$.expectedStatusLock]).changes??0)>0,statusLock:$.expectedStatusLock+1}}let Z=[],Q=[];if($.status!==void 0)Z.push("status = ?"),Q.push($.status);if($.endedAt!==void 0)Z.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)Z.push("exit_code = ?"),Q.push($.exitCode);if($.prompt!==void 0)Z.push("prompt = ?"),Q.push($.prompt??null);if($.metadata!==void 0)Z.push("metadata_json = ?"),Q.push(GX($.metadata));if($.parentSessionId!==void 0)Z.push("parent_session_id = ?"),Q.push($.parentSessionId??null);if($.parentAgentId!==void 0)Z.push("parent_agent_id = ?"),Q.push($.parentAgentId??null);if($.agentId!==void 0)Z.push("agent_id = ?"),Q.push($.agentId??null);if($.conversationId!==void 0)Z.push("conversation_id = ?"),Q.push($.conversationId??null);if(Z.length===0){let Y=await this.getSession($.sessionId);return{updated:!!Y,statusLock:Y?.statusLock??0}}let W=0;if($.expectedStatusLock!==void 0)W=$.expectedStatusLock+1,Z.push("status_lock = ?"),Q.push(W);Z.push("updated_at = ?"),Q.push(J0());let J=`UPDATE sessions SET ${Z.join(", ")} WHERE session_id = ?`;if(Q.push($.sessionId),$.expectedStatusLock!==void 0)J+=" AND status_lock = ?",Q.push($.expectedStatusLock);if((this.store.run(J,Q).changes??0)===0)return{updated:!1,statusLock:0};if($.expectedStatusLock===void 0)W=(await this.getSession($.sessionId))?.statusLock??0;return{updated:!0,statusLock:W}}async deleteSession($,Z){let Q=this.store.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(Z)this.store.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}async enqueueSpawnRequest($){this.store.run(`INSERT INTO subagent_spawn_queue (root_session_id, parent_agent_id, task, system_prompt, created_at, consumed_at)
572
572
  VALUES (?, ?, ?, ?, ?, NULL)`,[$.rootSessionId,$.parentAgentId,$.task??null,$.systemPrompt??null,J0()])}async claimSpawnRequest($,Z){let Q=this.store.queryOne(`SELECT id, task FROM subagent_spawn_queue
573
573
  WHERE root_session_id = ? AND parent_agent_id = ? AND consumed_at IS NULL
574
- ORDER BY id ASC LIMIT 1`,[$,Z]);if(!Q||typeof Q.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[J0(),Q.id]),Q.task??void 0}}class z1 extends e1{store;constructor($,Z={}){super(new fA($,Z.sessionArtifactsDir),Z);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
574
+ ORDER BY id ASC LIMIT 1`,[$,Z]);if(!Q||typeof Q.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[J0(),Q.id]),Q.task??void 0}}class z1 extends e1{store;constructor($,Z={}){super(new FA($,Z.sessionArtifactsDir),Z);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
575
575
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
576
576
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
577
577
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
578
578
  metadata_json, transcript_path, hook_path, messages_path, updated_at
579
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,J0()])}}function SS($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let Z=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(Z==="local"||Z==="hub"||Z==="remote")return Z;return"auto"}var c5,u5;function bS($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;a9(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function yS($){await $.reconcileDeadSessions?.().catch(()=>{})}function _A($){try{let Z=new L1;return Z.init(),new z1(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),LA($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new VX(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function DA($,Z,Q){return new T1({sessionService:Q??$.sessionService??_A($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function KX($){if(c5)return c5;if(u5)return await u5;return u5=(async()=>{return c5=_A($),await yS(c5),c5})().finally(()=>{u5=void 0}),await u5}async function K4($){let Z=P0($.distinctId);$.telemetry?.setDistinctId(Z);let Q=SS($);if(bS(Q,$),Q==="remote"){let W=$.remote?.endpoint?.trim();if(!W)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:W}),new X4({endpoint:W,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let W=$.hub?.endpoint?.trim(),J=W||await $2({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!J)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:J,explicitEndpoint:W||void 0}),new o1({url:J,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Q==="auto"){let W=await o4({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(W){$.logger?.log("Using discovered local hub runtime host",{url:W});let J=new o1({url:W,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await J.connect(),J}catch(X){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:X}),LA($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:X,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),DA($,Z)}return DA($,Z)}var NA={};N(NA,{createCheckpointComparePlan:()=>aQ,compareCheckpointToWorkspace:()=>d5,buildCheckpointWorkspaceDiff:()=>sQ});import{execFile as IS}from"node:child_process";import*as RA from"node:fs/promises";import*as f4 from"node:path";import{promisify as xS}from"node:util";var qA={};N(qA,{trimMessagesToCheckpoint:()=>OA,trimMessagesBeforeCheckpoint:()=>AX,readSessionCheckpointHistory:()=>I2,findCheckpointForRun:()=>A4,createRestoredCheckpointMetadata:()=>FX,createCheckpointRestorePlan:()=>fX,applyCheckpointToWorktree:()=>UX});import{execFile as hS}from"node:child_process";import{promisify as kS}from"node:util";var F4=kS(hS);function I2($){let Z=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(Z?.history)?Z.history:[]).filter((W)=>!!W&&typeof W==="object"&&!Array.isArray(W)).flatMap((W)=>{let J=String(W.ref??"").trim(),X=Number(W.createdAt??0),Y=Number(W.runCount??0);if(J.length===0||!Number.isFinite(X)||!Number.isInteger(Y)||Y<1)return[];let j=W.kind==="stash"||W.kind==="commit"?W.kind:void 0;return[{ref:J,createdAt:X,runCount:Y,...j?{kind:j}:{}}]})}function FX($,Z){let Q=I2($).filter((J)=>J.runCount<=Z),W=Q.at(-1);return W?{latest:W,history:Q}:void 0}function A4($,Z){return $.reduce((Q,W)=>{if(W.runCount>Z)return Q;if(!Q||W.runCount>Q.runCount)return W;return Q},void 0)}function TA($,Z){let Q=0;for(let W=0;W<$.length;W+=1){let J=$[W];if(J?.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"?J.metadata:void 0)?.kind==="recovery_notice")continue;if(Q+=1,Q===Z)return W}throw Error(`Could not find user message for checkpoint run ${Z}`)}function OA($,Z){let Q=TA($,Z);return $.slice(0,Q+1)}function AX($,Z){let Q=TA($,Z);return $.slice(0,Q)}function fX($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=A4(I2($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:W,...$.restoreMessages!==!1?{messages:OA($.messages??[],Z)}:{}}}async function UX($,Z){if((await F4("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await F4("git",["-C",$,"cat-file","-e",`${Z.ref}^{commit}`],{windowsHide:!0}),await F4("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await F4("git",["-C",$,"clean","-fd"],{windowsHide:!0}),Z.kind==="commit"){await F4("git",["-C",$,"reset","--hard",Z.ref],{windowsHide:!0});return}await F4("git",["-C",$,"stash","apply",Z.ref],{windowsHide:!0})}var gS=xS(IS),mS=52428800;async function nQ($,Z){let{stdout:Q}=await gS("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:mS,encoding:"utf8"});return Q}function MA($){return $.split("\x00").filter(Boolean)}function EA($,Z){let Q=f4.resolve($,Z),W=f4.relative($,Q);if(W.startsWith("..")||f4.isAbsolute(W))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function vS($,Z,Q){try{return await nQ($,["show",`${Z}:${Q}`])}catch{return""}}async function cS($,Z){try{return await RA.readFile(EA($,Z),"utf8")}catch{return""}}async function uS($,Z){await nQ($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,W]=await Promise.all([nQ($,["diff","--name-only","-z",Z.ref,"--"]),nQ($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...MA(Q),...MA(W)])].sort((X,Y)=>X.localeCompare(Y))}function aQ($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=A4(I2($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Q,cwd:W}}async function sQ($,Z){let Q=await uS($,Z);return(await Promise.all(Q.map(async(J)=>{let[X,Y]=await Promise.all([vS($,Z.ref,J),cS($,J)]);return{filePath:EA($,J),leftContent:X,rightContent:Y}}))).filter((J)=>J.leftContent!==J.rightContent)}async function d5($){let Z=aQ($),Q=await sQ(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}var PA={};N(PA,{NoOpFeatureFlagsProvider:()=>g2,FeatureFlagsService:()=>x2});import{existsSync as dS,mkdirSync as lS,readFileSync as pS,writeFileSync as rS}from"node:fs";import{dirname as iS}from"node:path";import{FEATURE_FLAGS as wA,FeatureFlagDefaultValue as DX}from"@cline/shared";var nS=3600000,aS=604800000,CA=1;class x2{provider;telemetry;logger;cacheTtlMs;cacheFilePath;persistentCacheMaxAgeMs;context;cache=new Map;cacheInfo={updateTime:0,userId:null};constructor($){this.provider=$.provider,this.telemetry=$.telemetry,this.logger=$.logger,this.cacheTtlMs=$.cacheTtlMs??nS,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??aS,this.context={...$.context??{}},this.hydrateFromPersistentCache()}setContext($){this.context={...$}}hydrateCache($){this.cacheInfo={updateTime:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload},this.rebuildCacheFromSnapshot($.flagsPayload)}getCacheSnapshot(){return{updateTime:this.cacheInfo.updateTime,userId:this.cacheInfo.userId,flagsPayload:this.cacheInfo.flagsPayload}}async poll($){let Z=$??this.context.userId??null,Q=Date.now();if(Q-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===Z)return}let W=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:Z||null};try{let J=await this.provider.getAllFlagsAndPayloads({flagKeys:wA.length>0?wA:void 0,context:{...this.context,userId:Z}});if(this.cacheInfo.userId!==Z)return;this.cacheInfo.flagsPayload=J,this.rebuildCacheFromSnapshot(J),this.writePersistentCache()}catch(J){if(this.cacheInfo.userId!==Z)return;throw this.cacheInfo=W.updateTime?W:{updateTime:0,userId:null},this.logger?.error?.("Error polling SDK feature flags",{error:J}),J}}hydrateFromPersistentCache(){let $=this.readPersistentCache();if($)this.hydrateCache($)}isFeatureFlagPayload($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every((Z)=>this.isFeatureFlagPayload(Z));if(typeof $==="object")return Object.values($).every((Z)=>this.isFeatureFlagPayload(Z));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=Object.entries($).filter(([,W])=>this.isFeatureFlagPayload(W));if(Z.length===0)return;let Q={};for(let[W,J]of Z)Q[W]=J;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!dS(this.cacheFilePath))return;let $=JSON.parse(pS(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==CA||typeof Z.updatedAt!=="number"||!Number.isFinite(Z.updatedAt)||Date.now()-Z.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:Z.updatedAt,userId:Z.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(Z.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(Z.flagsPayload?.featureFlagPayloads)}}}catch($){this.logger?.error?.("Error reading SDK feature flags cache",{error:$});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;lS(iS(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:CA,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};rS(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
580
- `,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let Z=new Map;for(let Q of this.getReturnedFlagKeys($)){let W=this.getFeatureFlag(Q);Z.set(Q,W??!1)}this.cache=Z}getFeatureFlag($){try{let Z=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],W=Z??Q??DX[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==W)this.telemetry?.capture({event:m.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return W}catch(Z){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:Z}),DX[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??DX[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,Z){if(process.env.IS_TEST==="true")this.cache.set($,Z)}async dispose(){await this.provider.dispose()}}class g2{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}J8();class l5{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,Z,Q,W,J,X,Y,j,V,H){this.clientName=Z,this.runtimeAddress=Q,this.host=$,this.prepare=W,this.capabilities=J,this.logger=X,this.telemetry=Y,this.distinctId=j,this.featureFlags=V,this.settings=fF($),this.pendingPrompts=UF($),this.automation=new UJ(()=>{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 P5({workspaceRoot:H.workspaceRoot??process.cwd(),specs:{cronSpecsDir:H.cronSpecsDir??H.cronDir,scope:GK(H.cronScope),workspaceRoot:H.workspaceRoot},runtimeHandlers:KK({host:$,getExtensionContext:()=>zQ({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((B)=>{if(B.type!=="ended")return;this.disposeSessionBootstrap(B.payload.sessionId)})}static async create($={}){let Z=P0($.distinctId),Q=M0($.capabilities),W={...$,capabilities:Q,distinctId:Z},J=await K4(W),X=BK($.automation),Y=$.featureFlags||new x2({provider:new g2,telemetry:$.telemetry,logger:$.logger,context:{distinctId:Z,clientName:$.clientName}}),j=new l5(J,$.clientName,J.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,Z,Y,X?{...X,logger:$.logger}:void 0);if(X&&X.autoStart!==!1)await j.automation.start();return j}async disposeSessionBootstrap($){let Z=this.activeSessionBootstraps.get($);if(!Z)return;this.activeSessionBootstraps.delete($),await Promise.resolve(Z.dispose?.())}async start($){let Z=DF($),Q=await this.prepare?.(Z);try{let W=Q?await Q.applyToStartSessionInput(Z):Z,J=await this.host.startSession(yJ(W,{defaultCapabilities:this.capabilities,withExtensionContext:(X)=>zQ({automationService:this.automationService,automation:this.automation,context:X,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Q)if(await this.host.getSession(J.sessionId))this.activeSessionBootstraps.set(J.sessionId,Q);else await Promise.resolve(Q.dispose?.());return LF({input:W,sessionId:J.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),J}catch(W){throw await Promise.resolve(Q?.dispose?.()),W}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let Z=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(Z.map((Q)=>this.disposeSessionBootstrap(Q)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await cQ(this.host,$);list=async($=200,Z={})=>await this.listHistory({...Z,limit:$});delete=async($)=>{let Z=await this.host.deleteSession($);if(Z)await this.disposeSessionBootstrap($);return Z};update=(...$)=>this.host.updateSession(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let Z=$.start?yJ($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>zQ({automationService:this.automationService,automation:this.automation,context:Q,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:$.sessionId,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restore:$.restore,start:Z})}async compareCheckpoint($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=await this.host.getSession(Z);if(!Q)throw Error(`Session ${Z} not found`);return d5({session:Q,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,Z){return this.host.subscribe($,Z)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}var bA={};N(bA,{resolvePluginSkillDirectoriesFromPaths:()=>n1,resolvePluginConfigSearchPaths:()=>i6,resolveAndLoadAgentPlugins:()=>g8,resolveAgentPluginPaths:()=>i1,loadAgentPluginsFromPathsWithDiagnostics:()=>z2,loadAgentPluginsFromPaths:()=>gZ,loadAgentPluginFromPath:()=>p6,discoverPluginModulePaths:()=>n6});var kA={};N(kA,{toHookConfigFileName:()=>o6,runSubprocessEvent:()=>U4,runHook:()=>L4,resolveHooksConfigSearchPaths:()=>a6,parseHookEventPayload:()=>D4,mergeAgentHooks:()=>M2,listHookConfigFiles:()=>N$,createSubprocessHooks:()=>eQ,createHookConfigFileHooks:()=>t6,createHookConfigFileExtension:()=>u8,createHookAuditHooks:()=>c8,createAgentHooksExtension:()=>m8,HookEventPayloadSchema:()=>tQ,HookEventNameSchema:()=>oQ,HookConfigFileName:()=>v8,HOOK_CONFIG_FILE_EVENT_MAP:()=>s6,HOOKS_CONFIG_DIRECTORY_NAME:()=>lZ});import{HookEventNameSchema as oQ,HookEventPayloadSchema as tQ,parseHookEventPayload as D4,resolveHookSessionContext as Qb}from"@cline/shared";import{z as m2}from"zod";import{spawn as sS}from"node:child_process";import{augmentNodeCommandForDebug as oS,withResolvedClineBuildEnv as tS}from"@cline/shared";function eS($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
581
- `).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse subprocess stdout JSON"}}}function $b($,Z){let Q=$ instanceof Error?$:Error(String($)),W=Q,J=Z.join(" ");if(W.code==="EACCES")return Error(`Failed to execute hook command "${J}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return Error(`Failed to execute hook command "${J}": ${Q.message}`)}async function Zb($,Z){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((W,J)=>{let X=(Y)=>{Q.off("error",X);let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y)};Q.once("error",X),Q.end(Z,(Y)=>{if(Q.off("error",X),Y){let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y);return}W()})})}async function U4($,Z){let Q=oS(Z.command,{env:Z.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let W=!!Z.detached,J=sS(Q[0],Q.slice(1),{cwd:Z.cwd,env:tS(Z.env),stdio:W?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:W,windowsHide:!0}),X=new Promise((K)=>{J.once("spawn",()=>{try{Z.onSpawn?.({command:Q,pid:J.pid??void 0,detached:W})}catch{}K()})}),Y=new Promise((K,F)=>{J.once("error",(A)=>{F($b(A,Q))})});if(await Zb(J,JSON.stringify($)),W){await Promise.race([X,Y]),J.unref();return}if(!J.stdout||!J.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let j="",V="",H=!1,B;J.stdout.on("data",(K)=>{j+=K.toString()}),J.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((Z.timeoutMs??0)>0)B=setTimeout(()=>{H=!0,J.kill("SIGKILL")},Z.timeoutMs);J.once("close",(F)=>{if(B)clearTimeout(B);let{parsedJson:A,parseError:L}=eS(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:H})})});return await Promise.race([G,Y])}var Wb=m2.object({contextModification:m2.string().optional(),cancel:m2.boolean().optional(),review:m2.boolean().optional(),errorMessage:m2.string().optional(),context:m2.string().optional(),overrideInput:m2.unknown().optional()}).passthrough();var Jb=["agent","hook"];async function L4($,Z={}){let Q=Z.command??Jb;return await U4($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function hA($){return $ instanceof Error?$:Error(String($))}function Xb($){if(!$||typeof $!=="object")return;let Z=Wb.safeParse($);if(!Z.success)return;let Q=Z.data;if(!(("cancel"in Q)||("review"in Q)||("context"in Q)||("contextModification"in Q)||("overrideInput"in Q)||("errorMessage"in Q)))return;let J=typeof Q.context==="string"?Q.context:typeof Q.contextModification==="string"?Q.contextModification:typeof Q.errorMessage==="string"&&Q.errorMessage.length>0?Q.errorMessage:void 0;return{cancel:typeof Q.cancel==="boolean"?Q.cancel:void 0,review:typeof Q.review==="boolean"?Q.review:void 0,context:J,overrideInput:Object.hasOwn(Q,"overrideInput")?Q.overrideInput:void 0}}function yA($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W;else Z[Q]=JSON.stringify(W);return Z}function $$($,Z,Q){let W=Q.env??process.env,J=W.CLINE_USER_ID?.trim()||W.USER?.trim()||"unknown",X=Q.cwd||process.cwd();return{clineVersion:W.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:Z.conversationId,sessionContext:Qb(Q.sessionContext,{hookName:$,conversationId:Z.conversationId,agentId:Z.agentId,parentAgentId:Z.parentAgentId}),workspaceRoots:X?[X]:[],workspaceInfo:Q.workspaceInfo,userId:J,agent_id:Z.agentId,parent_agent_id:Z.parentAgentId}}function Yb($){return{name:$.name,message:$.message,stack:$.stack}}function jb($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function Vb($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function Hb($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function Bb($){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 Gb($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}async function v2($,Z){try{let Q=await L4($,{command:Z.command,cwd:Z.cwd,env:Z.env,detached:!0,onSpawn:Z.onSpawn});Z.onDispatch?.({payload:$,result:Q,detached:!0})}catch(Q){Z.onDispatchError?.(hA(Q),$)}}function eQ($={}){return{hooks:{beforeRun:async(j)=>{let V=Vb(j);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let B={...$$("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await v2(B,$)}else{let B={...$$("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await v2(B,$)}return},beforeTool:async(j)=>{let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...$$("tool_call",V,$),hookName:"tool_call",iteration:j.snapshot.iteration,tool_call:{id:j.toolCall.toolCallId,name:j.toolCall.toolName,input:j.input},preToolUse:{toolName:j.toolCall.toolName,parameters:yA(j.input)}};try{let B=await L4(H,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:H,result:B,detached:!1}),B?.timedOut)throw Error("tool_call hook command timed out");if(B?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${B.parseError}`);return Gb(Xb(B?.parsedJson))}catch(B){$.onDispatchError?.(hA(B),H);return}},afterTool:async(j)=>{let V=Bb(j),H={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},B={...$$("tool_result",H,$),hookName:"tool_result",iteration:j.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:yA(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await v2(B,$);return},afterRun:async({snapshot:j,result:V})=>{let H={agentId:j.agentId,conversationId:j.conversationId??j.runId??j.agentId,parentAgentId:j.parentAgentId??null};if(V.status==="completed"){let K={...$$("agent_end",H,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await v2(K,$);return}let B=V.status==="aborted"||jb(V.error?.message)?"agent_abort":"agent_error",G=B==="agent_error"?{...$$(B,H,$),hookName:B,iteration:V.iterations,error:Yb(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...$$(B,H,$),hookName:B,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await v2(G,$)},onEvent:async(j)=>{if(j.type!=="message-added"||j.message.role!=="user")return;let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...$$("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:Hb(j.message.content),attachments:[]}};await v2(H,$)}},shutdown:async({agentId:j,conversationId:V,parentAgentId:H,reason:B})=>{let G={...$$("session_shutdown",{agentId:j,conversationId:V,parentAgentId:H},$),hookName:"session_shutdown",reason:B};await v2(G,$)}}}$7();var xA={};N(xA,{registerRemoteConfigSessionBlobUpload:()=>W7,readRemoteConfigSessionBlobUploadMetadata:()=>LX,prepareRemoteConfigCoreIntegration:()=>zX,createRemoteConfigSessionMessagesArtifactUploader:()=>_X,buildRemoteConfigSessionBlobUploadMetadata:()=>Z7,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>Q7});import{buildRemoteConfigSessionBlobUploadMetadata as Z7,clearRemoteConfigSessionBlobUpload as Kb,createClineTelemetryServiceConfig as Fb,createSessionId as Ab,createRemoteConfigSessionMessagesArtifactUploader as fb,prepareRemoteConfigRuntime as Ub,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as Q7,readRemoteConfigSessionBlobUploadMetadata as LX,registerRemoteConfigSessionBlobUpload as W7}from"@cline/shared";function Db($,Z){let Q=$.telemetry||Z.telemetryService?{...Z.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return h1(Fb(Q)).telemetry}function _X(){let $=fb();return{async uploadMessagesFile(Z){await $.uploadMessagesFile(Z)}}}async function zX($){let Z=await Ub($),Q=Db(Z,$),W=[Z.pluginDefinition],J=Z.claims?.subject,X=Z7(Z.bundle?.remoteConfig,J),Y;return{prepared:Z,extensions:W,telemetry:Q,applyToStartSessionInput(j){let V=j.config.extensions??[],H=j.config.telemetry,B=X?j.config.sessionId?.trim()||Ab():j.config.sessionId;if(B&&X)Y=B;let G=B&&X?W7(B,Z.bundle?.remoteConfig,J):void 0,K=G?{...j.sessionMetadata??{},[Q7]:G}:j.sessionMetadata;return{...j,...K?{sessionMetadata:K}:{},config:{...j.config,...B?{sessionId:B}:{},extensions:[...V,...W],telemetry:Q??H}}},async dispose(){if(Y)Kb(Y)}}}var lA={};N(lA,{createTeamName:()=>Y7,DefaultRuntimeBuilder:()=>T4});import{hasRuntimeConfigExtension as Sb}from"@cline/shared";import{nanoid as bb}from"nanoid";$1();var dA={};N(dA,{createLocalTeamStore:()=>MX,SqliteTeamStore:()=>c2,FileTeamStore:()=>p5});import{appendFileSync as Lb,existsSync as _4,mkdirSync as gA,readdirSync as _b,readFileSync as mA,renameSync as zb,writeFileSync as Tb}from"node:fs";import{join as TX}from"node:path";import{resolveTeamDataDir as Ob}from"@cline/shared/storage";function vA(){return new Date().toISOString()}function OX($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function cA($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class p5{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??Ob()}init(){this.ensureTeamDir()}listTeamNames(){if(!_4(this.teamDirPath))return[];return _b(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>_4(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let Z=this.readEnvelope($);return Z?.teamState?cA(Z.teamState):void 0}readHistory($,Z=200){let Q=this.historyPath($);if(!_4(Q))return[];return mA(Q,"utf8").split(`
582
- `).map((W)=>W.trim()).filter(Boolean).map((W)=>{try{return JSON.parse(W)}catch{return}}).filter((W)=>W!==void 0).reverse().slice(0,Z)}loadRuntime($){let Z=this.readEnvelope($);return{state:Z?.teamState?cA(Z.teamState):void 0,teammates:Z?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,Z){this.ensureTeamSubdir($),Lb(this.historyPath($),`${JSON.stringify({ts:vA(),eventType:Z.type,payload:Z})}
583
- `,"utf8")}persistRuntime($,Z,Q){this.ensureTeamSubdir($);let W={version:1,updatedAt:vA(),teamState:Z,teammates:Q},J=this.statePath($),X=`${J}.tmp`;Tb(X,`${JSON.stringify(W,null,2)}
584
- `,"utf8"),zb(X,J)}markInProgressRunsInterrupted($,Z){let Q=this.readEnvelope($);if(!Q?.teamState?.runs?.length)return[];let W=Q.teamState.runs.filter((X)=>X.status==="queued"||X.status==="running").map((X)=>X.id);if(W.length===0)return[];let J=new Date;return Q.teamState={...Q.teamState,runs:Q.teamState.runs.map((X)=>X.status==="queued"||X.status==="running"?{...X,status:"interrupted",error:Z,endedAt:J}:X)},this.persistRuntime($,Q.teamState,Q.teammates),W}ensureTeamDir(){if(!_4(this.teamDirPath))gA(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let Z=TX(this.ensureTeamDir(),OX($));if(!_4(Z))gA(Z,{recursive:!0});return Z}statePath($){return TX(this.ensureTeamDir(),OX($),"state.json")}historyPath($){return TX(this.ensureTeamDir(),OX($),"task-history.jsonl")}readEnvelope($){let Z=this.statePath($);if(!_4(Z))return;try{let Q=JSON.parse(mA(Z,"utf8"));if(Q?.version===1&&Q.teamState)return Q}catch{}return}}import{existsSync as qb,mkdirSync as Mb}from"node:fs";import{join as Rb}from"node:path";import{safeJsonParse as uA}from"@cline/shared";import{loadSqliteDb as Eb,nowIso as qX}from"@cline/shared/db";import{resolveDbDataDir as Nb}from"@cline/shared/storage";function wb(){return Nb()}function z4($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function Cb($){let Z=uA($);if(!Array.isArray(Z))return[];let Q=[];for(let W of Z){if(!W||typeof W!=="object")continue;let J=W,X=J.agentId,Y=J.rolePrompt;if(typeof X!=="string"||!X.trim())continue;if(typeof Y!=="string"||!Y.trim())continue;let j={agentId:X.trim(),rolePrompt:Y};if(typeof J.modelId==="string"&&J.modelId.trim())j.modelId=J.modelId.trim();if(typeof J.maxIterations==="number"&&Number.isFinite(J.maxIterations))j.maxIterations=Math.max(1,Math.floor(J.maxIterations));Q.push(j)}return Q}function Pb($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class c2{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??wb()}init(){this.getRawDb()}ensureTeamDir(){if(!qb(this.teamDirPath))Mb(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return Rb(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=Eb(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
579
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,J0()])}}function CS($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let Z=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(Z==="local"||Z==="hub"||Z==="remote")return Z;return"auto"}var c5,u5;function wS($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;a9(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function PS($){await $.reconcileDeadSessions?.().catch(()=>{})}function DA($){try{let Z=new L1;return Z.init(),new z1(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),UA($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new VX(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function fA($,Z,Q){return new T1({sessionService:Q??$.sessionService??DA($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function KX($){if(c5)return c5;if(u5)return await u5;return u5=(async()=>{return c5=DA($),await PS(c5),c5})().finally(()=>{u5=void 0}),await u5}async function K4($){let Z=P0($.distinctId);$.telemetry?.setDistinctId(Z);let Q=CS($);if(wS(Q,$),Q==="remote"){let W=$.remote?.endpoint?.trim();if(!W)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:W}),new X4({endpoint:W,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let W=$.hub?.endpoint?.trim(),J=W||await $2({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!J)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:J,explicitEndpoint:W||void 0}),new o1({url:J,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Q==="auto"){let W=await o4({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(W){$.logger?.log("Using discovered local hub runtime host",{url:W});let J=new o1({url:W,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await J.connect(),J}catch(X){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:X}),UA($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:X,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),fA($,Z)}return fA($,Z)}var RA={};N(RA,{createCheckpointComparePlan:()=>aQ,compareCheckpointToWorkspace:()=>d5,buildCheckpointWorkspaceDiff:()=>sQ});import{execFile as yS}from"node:child_process";import*as qA from"node:fs/promises";import*as f4 from"node:path";import{promisify as hS}from"node:util";var TA={};N(TA,{trimMessagesToCheckpoint:()=>zA,trimMessagesBeforeCheckpoint:()=>AX,readSessionCheckpointHistory:()=>I2,findCheckpointForRun:()=>A4,createRestoredCheckpointMetadata:()=>FX,createCheckpointRestorePlan:()=>fX,applyCheckpointToWorktree:()=>UX});import{execFile as SS}from"node:child_process";import{promisify as bS}from"node:util";var F4=bS(SS);function I2($){let Z=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(Z?.history)?Z.history:[]).filter((W)=>!!W&&typeof W==="object"&&!Array.isArray(W)).flatMap((W)=>{let J=String(W.ref??"").trim(),X=Number(W.createdAt??0),Y=Number(W.runCount??0);if(J.length===0||!Number.isFinite(X)||!Number.isInteger(Y)||Y<1)return[];let j=W.kind==="stash"||W.kind==="commit"?W.kind:void 0;return[{ref:J,createdAt:X,runCount:Y,...j?{kind:j}:{}}]})}function FX($,Z){let Q=I2($).filter((J)=>J.runCount<=Z),W=Q.at(-1);return W?{latest:W,history:Q}:void 0}function A4($,Z){return $.reduce((Q,W)=>{if(W.runCount>Z)return Q;if(!Q||W.runCount>Q.runCount)return W;return Q},void 0)}function _A($,Z){let Q=0;for(let W=0;W<$.length;W+=1){let J=$[W];if(J?.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"?J.metadata:void 0)?.kind==="recovery_notice")continue;if(Q+=1,Q===Z)return W}throw Error(`Could not find user message for checkpoint run ${Z}`)}function zA($,Z){let Q=_A($,Z);return $.slice(0,Q+1)}function AX($,Z){let Q=_A($,Z);return $.slice(0,Q)}function fX($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=A4(I2($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:W,...$.restoreMessages!==!1?{messages:zA($.messages??[],Z)}:{}}}async function UX($,Z){if((await F4("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await F4("git",["-C",$,"cat-file","-e",`${Z.ref}^{commit}`],{windowsHide:!0}),await F4("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await F4("git",["-C",$,"clean","-fd"],{windowsHide:!0}),Z.kind==="commit"){await F4("git",["-C",$,"reset","--hard",Z.ref],{windowsHide:!0});return}await F4("git",["-C",$,"stash","apply",Z.ref],{windowsHide:!0})}var kS=hS(yS),IS=52428800;async function nQ($,Z){let{stdout:Q}=await kS("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:IS,encoding:"utf8"});return Q}function OA($){return $.split("\x00").filter(Boolean)}function MA($,Z){let Q=f4.resolve($,Z),W=f4.relative($,Q);if(W.startsWith("..")||f4.isAbsolute(W))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function xS($,Z,Q){try{return await nQ($,["show",`${Z}:${Q}`])}catch{return""}}async function gS($,Z){try{return await qA.readFile(MA($,Z),"utf8")}catch{return""}}async function mS($,Z){await nQ($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,W]=await Promise.all([nQ($,["diff","--name-only","-z",Z.ref,"--"]),nQ($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...OA(Q),...OA(W)])].sort((X,Y)=>X.localeCompare(Y))}function aQ($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=A4(I2($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Q,cwd:W}}async function sQ($,Z){let Q=await mS($,Z);return(await Promise.all(Q.map(async(J)=>{let[X,Y]=await Promise.all([xS($,Z.ref,J),gS($,J)]);return{filePath:MA($,J),leftContent:X,rightContent:Y}}))).filter((J)=>J.leftContent!==J.rightContent)}async function d5($){let Z=aQ($),Q=await sQ(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}var CA={};N(CA,{NoOpFeatureFlagsProvider:()=>g2,FeatureFlagsService:()=>x2});import{existsSync as vS,mkdirSync as cS,readFileSync as uS,writeFileSync as dS}from"node:fs";import{dirname as lS}from"node:path";import{FEATURE_FLAGS as EA,FeatureFlagDefaultValue as DX}from"@cline/shared";var pS=3600000,rS=604800000,NA=1;class x2{provider;telemetry;logger;cacheTtlMs;cacheFilePath;persistentCacheMaxAgeMs;context;cache=new Map;cacheInfo={updateTime:0,userId:null};constructor($){this.provider=$.provider,this.telemetry=$.telemetry,this.logger=$.logger,this.cacheTtlMs=$.cacheTtlMs??pS,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??rS,this.context={...$.context??{}},this.hydrateFromPersistentCache()}setContext($){this.context={...$}}hydrateCache($){this.cacheInfo={updateTime:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload},this.rebuildCacheFromSnapshot($.flagsPayload)}getCacheSnapshot(){return{updateTime:this.cacheInfo.updateTime,userId:this.cacheInfo.userId,flagsPayload:this.cacheInfo.flagsPayload}}async poll($){let Z=$??this.context.userId??null,Q=Date.now();if(Q-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===Z)return}let W=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:Z||null};try{let J=await this.provider.getAllFlagsAndPayloads({flagKeys:EA.length>0?EA:void 0,context:{...this.context,userId:Z}});if(this.cacheInfo.userId!==Z)return;this.cacheInfo.flagsPayload=J,this.rebuildCacheFromSnapshot(J),this.writePersistentCache()}catch(J){if(this.cacheInfo.userId!==Z)return;throw this.cacheInfo=W.updateTime?W:{updateTime:0,userId:null},this.logger?.error?.("Error polling SDK feature flags",{error:J}),J}}hydrateFromPersistentCache(){let $=this.readPersistentCache();if($)this.hydrateCache($)}isFeatureFlagPayload($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every((Z)=>this.isFeatureFlagPayload(Z));if(typeof $==="object")return Object.values($).every((Z)=>this.isFeatureFlagPayload(Z));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=Object.entries($).filter(([,W])=>this.isFeatureFlagPayload(W));if(Z.length===0)return;let Q={};for(let[W,J]of Z)Q[W]=J;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!vS(this.cacheFilePath))return;let $=JSON.parse(uS(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==NA||typeof Z.updatedAt!=="number"||!Number.isFinite(Z.updatedAt)||Date.now()-Z.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:Z.updatedAt,userId:Z.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(Z.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(Z.flagsPayload?.featureFlagPayloads)}}}catch($){this.logger?.error?.("Error reading SDK feature flags cache",{error:$});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;cS(lS(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:NA,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};dS(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
580
+ `,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let Z=new Map;for(let Q of this.getReturnedFlagKeys($)){let W=this.getFeatureFlag(Q);Z.set(Q,W??!1)}this.cache=Z}getFeatureFlag($){try{let Z=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],W=Z??Q??DX[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==W)this.telemetry?.capture({event:m.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return W}catch(Z){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:Z}),DX[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??DX[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,Z){if(process.env.IS_TEST==="true")this.cache.set($,Z)}async dispose(){await this.provider.dispose()}}class g2{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}J8();class l5{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,Z,Q,W,J,X,Y,j,V,B){this.clientName=Z,this.runtimeAddress=Q,this.host=$,this.prepare=W,this.capabilities=J,this.logger=X,this.telemetry=Y,this.distinctId=j,this.featureFlags=V,this.settings=fF($),this.pendingPrompts=UF($),this.automation=new UJ(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=B?new P5({workspaceRoot:B.workspaceRoot??process.cwd(),specs:{cronSpecsDir:B.cronSpecsDir??B.cronDir,scope:GK(B.cronScope),workspaceRoot:B.workspaceRoot},runtimeHandlers:KK({host:$,getExtensionContext:()=>zQ({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:B.dbPath,logger:B.logger,pollIntervalMs:B.pollIntervalMs,claimLeaseSeconds:B.claimLeaseSeconds,globalMaxConcurrency:B.globalMaxConcurrency,watcherDebounceMs:B.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((H)=>{if(H.type!=="ended")return;this.disposeSessionBootstrap(H.payload.sessionId)})}static async create($={}){let Z=P0($.distinctId),Q=M0($.capabilities),W={...$,capabilities:Q,distinctId:Z},J=await K4(W),X=HK($.automation),Y=$.featureFlags||new x2({provider:new g2,telemetry:$.telemetry,logger:$.logger,context:{distinctId:Z,clientName:$.clientName}}),j=new l5(J,$.clientName,J.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,Z,Y,X?{...X,logger:$.logger}:void 0);if(X&&X.autoStart!==!1)await j.automation.start();return j}async disposeSessionBootstrap($){let Z=this.activeSessionBootstraps.get($);if(!Z)return;this.activeSessionBootstraps.delete($),await Promise.resolve(Z.dispose?.())}async start($){let Z=DF($),Q=await this.prepare?.(Z);try{let W=Q?await Q.applyToStartSessionInput(Z):Z,J=await this.host.startSession(yJ(W,{defaultCapabilities:this.capabilities,withExtensionContext:(X)=>zQ({automationService:this.automationService,automation:this.automation,context:X,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Q)if(await this.host.getSession(J.sessionId))this.activeSessionBootstraps.set(J.sessionId,Q);else await Promise.resolve(Q.dispose?.());return LF({input:W,sessionId:J.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),J}catch(W){throw await Promise.resolve(Q?.dispose?.()),W}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let Z=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(Z.map((Q)=>this.disposeSessionBootstrap(Q)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await cQ(this.host,$);list=async($=200,Z={})=>await this.listHistory({...Z,limit:$});delete=async($)=>{let Z=await this.host.deleteSession($);if(Z)await this.disposeSessionBootstrap($);return Z};update=(...$)=>this.host.updateSession(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let Z=$.start?yJ($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>zQ({automationService:this.automationService,automation:this.automation,context:Q,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:$.sessionId,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restore:$.restore,start:Z})}async compareCheckpoint($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=await this.host.getSession(Z);if(!Q)throw Error(`Session ${Z} not found`);return d5({session:Q,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,Z){return this.host.subscribe($,Z)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}var PA={};N(PA,{resolvePluginSkillDirectoriesFromPaths:()=>n1,resolvePluginConfigSearchPaths:()=>i6,resolveAndLoadAgentPlugins:()=>g8,resolveAgentPluginPaths:()=>i1,loadAgentPluginsFromPathsWithDiagnostics:()=>z2,loadAgentPluginsFromPaths:()=>gZ,loadAgentPluginFromPath:()=>p6,discoverPluginModulePaths:()=>n6});var yA={};N(yA,{toHookConfigFileName:()=>o6,runSubprocessEvent:()=>U4,runHook:()=>L4,resolveHooksConfigSearchPaths:()=>a6,parseHookEventPayload:()=>D4,mergeAgentHooks:()=>M2,listHookConfigFiles:()=>N$,createSubprocessHooks:()=>eQ,createHookConfigFileHooks:()=>t6,createHookConfigFileExtension:()=>u8,createHookAuditHooks:()=>c8,createAgentHooksExtension:()=>m8,HookEventPayloadSchema:()=>tQ,HookEventNameSchema:()=>oQ,HookConfigFileName:()=>v8,HOOK_CONFIG_FILE_EVENT_MAP:()=>s6,HOOKS_CONFIG_DIRECTORY_NAME:()=>lZ});import{HookEventNameSchema as oQ,HookEventPayloadSchema as tQ,parseHookEventPayload as D4,resolveHookSessionContext as eS}from"@cline/shared";import{z as m2}from"zod";import{spawn as iS}from"node:child_process";import{augmentNodeCommandForDebug as nS,withResolvedClineBuildEnv as aS}from"@cline/shared";function sS($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
581
+ `).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse subprocess stdout JSON"}}}function oS($,Z){let Q=$ instanceof Error?$:Error(String($)),W=Q,J=Z.join(" ");if(W.code==="EACCES")return Error(`Failed to execute hook command "${J}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return Error(`Failed to execute hook command "${J}": ${Q.message}`)}async function tS($,Z){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((W,J)=>{let X=(Y)=>{Q.off("error",X);let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y)};Q.once("error",X),Q.end(Z,(Y)=>{if(Q.off("error",X),Y){let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y);return}W()})})}async function U4($,Z){let Q=nS(Z.command,{env:Z.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let W=!!Z.detached,J=iS(Q[0],Q.slice(1),{cwd:Z.cwd,env:aS(Z.env),stdio:W?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:W,windowsHide:!0}),X=new Promise((K)=>{J.once("spawn",()=>{try{Z.onSpawn?.({command:Q,pid:J.pid??void 0,detached:W})}catch{}K()})}),Y=new Promise((K,F)=>{J.once("error",(A)=>{F(oS(A,Q))})});if(await tS(J,JSON.stringify($)),W){await Promise.race([X,Y]),J.unref();return}if(!J.stdout||!J.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let j="",V="",B=!1,H;J.stdout.on("data",(K)=>{j+=K.toString()}),J.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((Z.timeoutMs??0)>0)H=setTimeout(()=>{B=!0,J.kill("SIGKILL")},Z.timeoutMs);J.once("close",(F)=>{if(H)clearTimeout(H);let{parsedJson:A,parseError:L}=sS(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:B})})});return await Promise.race([G,Y])}var $b=m2.object({contextModification:m2.string().optional(),cancel:m2.boolean().optional(),review:m2.boolean().optional(),errorMessage:m2.string().optional(),context:m2.string().optional(),overrideInput:m2.unknown().optional()}).passthrough();var Zb=["agent","hook"];async function L4($,Z={}){let Q=Z.command??Zb;return await U4($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function bA($){return $ instanceof Error?$:Error(String($))}function Qb($){if(!$||typeof $!=="object")return;let Z=$b.safeParse($);if(!Z.success)return;let Q=Z.data;if(!(("cancel"in Q)||("review"in Q)||("context"in Q)||("contextModification"in Q)||("overrideInput"in Q)||("errorMessage"in Q)))return;let J=typeof Q.context==="string"?Q.context:typeof Q.contextModification==="string"?Q.contextModification:typeof Q.errorMessage==="string"&&Q.errorMessage.length>0?Q.errorMessage:void 0;return{cancel:typeof Q.cancel==="boolean"?Q.cancel:void 0,review:typeof Q.review==="boolean"?Q.review:void 0,context:J,overrideInput:Object.hasOwn(Q,"overrideInput")?Q.overrideInput:void 0}}function SA($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W;else Z[Q]=JSON.stringify(W);return Z}function $$($,Z,Q){let W=Q.env??process.env,J=W.CLINE_USER_ID?.trim()||W.USER?.trim()||"unknown",X=Q.cwd||process.cwd();return{clineVersion:W.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:Z.conversationId,sessionContext:eS(Q.sessionContext,{hookName:$,conversationId:Z.conversationId,agentId:Z.agentId,parentAgentId:Z.parentAgentId}),workspaceRoots:X?[X]:[],workspaceInfo:Q.workspaceInfo,userId:J,agent_id:Z.agentId,parent_agent_id:Z.parentAgentId}}function Wb($){return{name:$.name,message:$.message,stack:$.stack}}function Jb($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function Xb($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function Yb($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function jb($){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 Vb($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}async function v2($,Z){try{let Q=await L4($,{command:Z.command,cwd:Z.cwd,env:Z.env,detached:!0,onSpawn:Z.onSpawn});Z.onDispatch?.({payload:$,result:Q,detached:!0})}catch(Q){Z.onDispatchError?.(bA(Q),$)}}function eQ($={}){return{hooks:{beforeRun:async(j)=>{let V=Xb(j);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...$$("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await v2(H,$)}else{let H={...$$("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await v2(H,$)}return},beforeTool:async(j)=>{let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},B={...$$("tool_call",V,$),hookName:"tool_call",iteration:j.snapshot.iteration,tool_call:{id:j.toolCall.toolCallId,name:j.toolCall.toolName,input:j.input},preToolUse:{toolName:j.toolCall.toolName,parameters:SA(j.input)}};try{let H=await L4(B,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:B,result:H,detached:!1}),H?.timedOut)throw Error("tool_call hook command timed out");if(H?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${H.parseError}`);return Vb(Qb(H?.parsedJson))}catch(H){$.onDispatchError?.(bA(H),B);return}},afterTool:async(j)=>{let V=jb(j),B={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...$$("tool_result",B,$),hookName:"tool_result",iteration:j.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:SA(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await v2(H,$);return},afterRun:async({snapshot:j,result:V})=>{let B={agentId:j.agentId,conversationId:j.conversationId??j.runId??j.agentId,parentAgentId:j.parentAgentId??null};if(V.status==="completed"){let K={...$$("agent_end",B,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await v2(K,$);return}let H=V.status==="aborted"||Jb(V.error?.message)?"agent_abort":"agent_error",G=H==="agent_error"?{...$$(H,B,$),hookName:H,iteration:V.iterations,error:Wb(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...$$(H,B,$),hookName:H,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await v2(G,$)},onEvent:async(j)=>{if(j.type!=="message-added"||j.message.role!=="user")return;let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},B={...$$("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:Yb(j.message.content),attachments:[]}};await v2(B,$)}},shutdown:async({agentId:j,conversationId:V,parentAgentId:B,reason:H})=>{let G={...$$("session_shutdown",{agentId:j,conversationId:V,parentAgentId:B},$),hookName:"session_shutdown",reason:H};await v2(G,$)}}}$7();var kA={};N(kA,{registerRemoteConfigSessionBlobUpload:()=>W7,readRemoteConfigSessionBlobUploadMetadata:()=>LX,prepareRemoteConfigCoreIntegration:()=>zX,createRemoteConfigSessionMessagesArtifactUploader:()=>_X,buildRemoteConfigSessionBlobUploadMetadata:()=>Z7,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>Q7});import{buildRemoteConfigSessionBlobUploadMetadata as Z7,clearRemoteConfigSessionBlobUpload as Bb,createClineTelemetryServiceConfig as Hb,createSessionId as Gb,createRemoteConfigSessionMessagesArtifactUploader as Kb,prepareRemoteConfigRuntime as Fb,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as Q7,readRemoteConfigSessionBlobUploadMetadata as LX,registerRemoteConfigSessionBlobUpload as W7}from"@cline/shared";function Ab($,Z){let Q=$.telemetry||Z.telemetryService?{...Z.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return h1(Hb(Q)).telemetry}function _X(){let $=Kb();return{async uploadMessagesFile(Z){await $.uploadMessagesFile(Z)}}}async function zX($){let Z=await Fb($),Q=Ab(Z,$),W=[Z.pluginDefinition],J=Z.claims?.subject,X=Z7(Z.bundle?.remoteConfig,J),Y;return{prepared:Z,extensions:W,telemetry:Q,applyToStartSessionInput(j){let V=j.config.extensions??[],B=j.config.telemetry,H=X?j.config.sessionId?.trim()||Gb():j.config.sessionId;if(H&&X)Y=H;let G=H&&X?W7(H,Z.bundle?.remoteConfig,J):void 0,K=G?{...j.sessionMetadata??{},[Q7]:G}:j.sessionMetadata;return{...j,...K?{sessionMetadata:K}:{},config:{...j.config,...H?{sessionId:H}:{},extensions:[...V,...W],telemetry:Q??B}}},async dispose(){if(Y)Bb(Y)}}}var uA={};N(uA,{createTeamName:()=>Y7,DefaultRuntimeBuilder:()=>T4});import{hasRuntimeConfigExtension as Cb}from"@cline/shared";import{nanoid as wb}from"nanoid";$1();var cA={};N(cA,{createLocalTeamStore:()=>MX,SqliteTeamStore:()=>c2,FileTeamStore:()=>p5});import{appendFileSync as fb,existsSync as _4,mkdirSync as IA,readdirSync as Ub,readFileSync as xA,renameSync as Db,writeFileSync as Lb}from"node:fs";import{join as TX}from"node:path";import{resolveTeamDataDir as _b}from"@cline/shared/storage";function gA(){return new Date().toISOString()}function OX($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function mA($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class p5{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??_b()}init(){this.ensureTeamDir()}listTeamNames(){if(!_4(this.teamDirPath))return[];return Ub(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>_4(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let Z=this.readEnvelope($);return Z?.teamState?mA(Z.teamState):void 0}readHistory($,Z=200){let Q=this.historyPath($);if(!_4(Q))return[];return xA(Q,"utf8").split(`
582
+ `).map((W)=>W.trim()).filter(Boolean).map((W)=>{try{return JSON.parse(W)}catch{return}}).filter((W)=>W!==void 0).reverse().slice(0,Z)}loadRuntime($){let Z=this.readEnvelope($);return{state:Z?.teamState?mA(Z.teamState):void 0,teammates:Z?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,Z){this.ensureTeamSubdir($),fb(this.historyPath($),`${JSON.stringify({ts:gA(),eventType:Z.type,payload:Z})}
583
+ `,"utf8")}persistRuntime($,Z,Q){this.ensureTeamSubdir($);let W={version:1,updatedAt:gA(),teamState:Z,teammates:Q},J=this.statePath($),X=`${J}.tmp`;Lb(X,`${JSON.stringify(W,null,2)}
584
+ `,"utf8"),Db(X,J)}markInProgressRunsInterrupted($,Z){let Q=this.readEnvelope($);if(!Q?.teamState?.runs?.length)return[];let W=Q.teamState.runs.filter((X)=>X.status==="queued"||X.status==="running").map((X)=>X.id);if(W.length===0)return[];let J=new Date;return Q.teamState={...Q.teamState,runs:Q.teamState.runs.map((X)=>X.status==="queued"||X.status==="running"?{...X,status:"interrupted",error:Z,endedAt:J}:X)},this.persistRuntime($,Q.teamState,Q.teammates),W}ensureTeamDir(){if(!_4(this.teamDirPath))IA(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let Z=TX(this.ensureTeamDir(),OX($));if(!_4(Z))IA(Z,{recursive:!0});return Z}statePath($){return TX(this.ensureTeamDir(),OX($),"state.json")}historyPath($){return TX(this.ensureTeamDir(),OX($),"task-history.jsonl")}readEnvelope($){let Z=this.statePath($);if(!_4(Z))return;try{let Q=JSON.parse(xA(Z,"utf8"));if(Q?.version===1&&Q.teamState)return Q}catch{}return}}import{existsSync as zb,mkdirSync as Tb}from"node:fs";import{join as Ob}from"node:path";import{safeJsonParse as vA}from"@cline/shared";import{loadSqliteDb as qb,nowIso as qX}from"@cline/shared/db";import{resolveDbDataDir as Mb}from"@cline/shared/storage";function Rb(){return Mb()}function z4($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function Eb($){let Z=vA($);if(!Array.isArray(Z))return[];let Q=[];for(let W of Z){if(!W||typeof W!=="object")continue;let J=W,X=J.agentId,Y=J.rolePrompt;if(typeof X!=="string"||!X.trim())continue;if(typeof Y!=="string"||!Y.trim())continue;let j={agentId:X.trim(),rolePrompt:Y};if(typeof J.modelId==="string"&&J.modelId.trim())j.modelId=J.modelId.trim();if(typeof J.maxIterations==="number"&&Number.isFinite(J.maxIterations))j.maxIterations=Math.max(1,Math.floor(J.maxIterations));Q.push(j)}return Q}function Nb($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class c2{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??Rb()}init(){this.getRawDb()}ensureTeamDir(){if(!zb(this.teamDirPath))Tb(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return Ob(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=qb(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
585
585
  CREATE TABLE IF NOT EXISTS team_store_schema_version (
586
586
  lock INTEGER PRIMARY KEY CHECK (lock = 1),
587
587
  version INTEGER NOT NULL
@@ -665,7 +665,7 @@ ${J}`,$.config.mode)}function v5($,Z){return TS($,Z==="plan"?"plan":Z==="yolo"?"
665
665
  version INTEGER NOT NULL DEFAULT 1,
666
666
  PRIMARY KEY(team_name, fragment_id)
667
667
  );
668
- `)}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}withTransaction($){let Z=this.getRawDb();Z.exec("BEGIN IMMEDIATE;");try{$(),Z.exec("COMMIT;")}catch(Q){try{Z.exec("ROLLBACK;")}catch{}throw Q}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let Z=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[z4($)]);if(!Z)return;let Q=uA(Z.state_json);if(!Q)return;try{return Pb(Q)}catch{return}}readHistory($,Z=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[z4($),Z]).flatMap((Q)=>{try{return[{eventType:Q.event_type,payload:JSON.parse(Q.payload_json),ts:Q.ts}]}catch{return[]}})}loadRuntime($){let Z=z4($),Q=this.readState(Z),W=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[Z]),J=W?Cb(W.teammates_json):[];return{state:Q,teammates:J,interruptedRunIds:[]}}appendTeamEvent($,Z,Q,W){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
668
+ `)}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}withTransaction($){let Z=this.getRawDb();Z.exec("BEGIN IMMEDIATE;");try{$(),Z.exec("COMMIT;")}catch(Q){try{Z.exec("ROLLBACK;")}catch{}throw Q}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let Z=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[z4($)]);if(!Z)return;let Q=vA(Z.state_json);if(!Q)return;try{return Nb(Q)}catch{return}}readHistory($,Z=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[z4($),Z]).flatMap((Q)=>{try{return[{eventType:Q.event_type,payload:JSON.parse(Q.payload_json),ts:Q.ts}]}catch{return[]}})}loadRuntime($){let Z=z4($),Q=this.readState(Z),W=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[Z]),J=W?Eb(W.teammates_json):[];return{state:Q,teammates:J,interruptedRunIds:[]}}appendTeamEvent($,Z,Q,W){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
669
669
  VALUES (?, ?, ?, ?, NULL, ?)`,[z4($),qX(),Z,JSON.stringify(Q),W??null])}persistRuntime($,Z,Q){let W=z4($),J=qX();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
670
670
  VALUES (?, ?, ?, ?)
671
671
  ON CONFLICT(team_name) DO UPDATE SET
@@ -712,43 +712,43 @@ ${J}`,$.config.mode)}function v5($,Z){return TS($,Z==="plan"?"plan":Z==="yolo"?"
712
712
  reviewed_by = excluded.reviewed_by,
713
713
  reviewed_at = excluded.reviewed_at,
714
714
  version = team_outcome_fragments.version + 1`,[W,X.outcomeId,X.id,X.section,X.sourceAgentId,X.sourceRunId??null,X.content,X.status,X.reviewedBy??null,X.reviewedAt?X.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,Z){let Q=z4($),W=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[Q]);if(W.length===0)return[];let J=qX();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
715
- WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,J,Q]),W.map((X)=>X.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function MX($={}){try{let Z=new c2($);return Z.init(),Z}catch{let Z=new p5({teamDir:$.teamDir});return Z.init(),Z}}function J7($,Z){return Sb($,Z)}function yb($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function hb($,Z){return $.filter((Q)=>yb(Q.name,Z))}function RX($,Z){return y1(hb($,Z))}var kb={apply_diff:"editor",attempt_completion:"submit_and_exit",bash:"run_commands",execute_command:"run_commands",list_code_definition_names:"search_codebase",list_files:"run_commands",read_file:"read_files",replace_in_file:"editor",search_files:"search_codebase",use_skill:"skills",write_to_file:"editor"};function Ib($){let Z=$.trim().toLowerCase();return kb[Z]??Z}function xb($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(Ib));if(Z.skills!==void 0)Q.add("skills");return $.filter((W)=>Q.has(W.name))}function Y7(){return`team-${bb(5)}`}function X7($,Z,Q,W,J,X,Y,j){let V=u0[l1({mode:Q})],H=M8(Z,W,Q,J??q8);return RX(U2({cwd:$,...V,enableSkills:!!Y,...H,executors:{...Y?{skills:Y}:{},...j??{}}}),X)}function gb($){return X7($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,mb,$.toolExecutors).some((Z)=>Z.name==="skills")}var mb=async()=>"";async function vb($){let Z=Z0();if(!s1({filePath:Z}))return{tools:[]};let Q=new b2({clientFactory:$4({settingsPath:Z})}),W;try{W=await S2(Q,{filePath:Z})}catch(j){await Q.dispose().catch(()=>{});let V=j instanceof Error?j.message:String(j);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let J=W.filter((j)=>j.disabled!==!0),X=await Promise.allSettled(J.map((j)=>Q4({serverName:j.name,provider:Q}))),Y=[];for(let[j,V]of X.entries())if(V.status==="fulfilled")Y.push(...V.value);else{let H=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${J[j].name}", skipping: ${H}`)}return{tools:Y,shutdown:async()=>{await Q.dispose()}}}function cb($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function ub($){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 db($){let Z=u0[l1({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??Z.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??Z.enableAgentTeams??!0,disableMcpSettingsTools:$.disableMcpSettingsTools===!0,yolo:$.yolo===!0,missionLogIntervalSteps:typeof $.missionLogIntervalSteps==="number"&&Number.isFinite($.missionLogIntervalSteps)?$.missionLogIntervalSteps:3,missionLogIntervalMs:typeof $.missionLogIntervalMs==="number"&&Number.isFinite($.missionLogIntervalMs)?$.missionLogIntervalMs:120000}}class T4{teamRuntimeEntries=new Map;async build($){let{config:Z,hooks:Q,extensions:W,logger:J,telemetry:X,createSpawnTool:Y,onTeamRestored:j,userInstructionService:V,configExtensions:H,toolExecutors:B}=$,G=$.onTeamEvent??(()=>{}),K=db(Z),F=Z.workspaceRoot??Z.cwd,A=$.toolPolicies??Z.toolPolicies,L=G1(),f=[],D=Z.teamName?.trim()||Y7(),U=Z.sessionId?.trim()||D,T=K.enableSpawnAgent?Y4({workspaceRoot:F}):{configs:[],errors:[]},q=T.configs.some((v)=>v.skills!==void 0),z=J7(H,"rules"),_=J7(H,"skills"),E=_||q,C=J7(H,"workflows"),y=J7(H,"plugins"),l=z||_||C,o=!1,t=Boolean(V),Q0=V,e0;for(let v of T.errors)(J??Z.logger)?.log?.(`[agents] Failed to load agent config at ${v.path}: ${v.error.message}`);if(!Q0&&(l||q))Q0=b$({skills:E?{workspacePath:F,includePluginSkills:y,pluginSkillDirectories:y?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(Q0)await Q0.start().catch(()=>{});let l$=K.enableTools&&_&&Boolean(Q0)&&Q0?.hasConfiguredSkills(Z.skills)===!0&&gb({cwd:Z.cwd,providerId:Z.providerId,mode:K.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:A,toolExecutors:B}),r=Q0&&l?Q0.createExtension({includeRules:z,includeSkills:_,includeWorkflows:C,registerSkillsTool:l$,allowedSkillNames:Z.skills}):void 0,M1=r?[...W??Z.extensions??[],r]:W??Z.extensions;if(K.enableTools){if(f.push(...X7(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,B)),!K.disableMcpSettingsTools){let v=await vb(Z.logger);f.push(...v.tools),e0=v.shutdown}}let P,B0=K.enableAgentTeams?MX():void 0,G0=B0?.loadRuntime(U),C0=G0?.state,n2=G0?.teammates??[],R1=new Map(n2.map((v)=>[v.agentId,v])),H1=Z.sessionId||D,C4,a2=[],K9=!1,E1=T$({providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey??"",baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxTokensPerTurn:Z.maxTokensPerTurn,maxIterations:Z.maxIterations,hooks:Q,extensions:M1,logger:J??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(K.enableSpawnAgent){if(T.configs.length>0)f.push(...RX(j4({configProvider:E1,agents:T.configs,createSubAgentTools:(v)=>K.enableTools?xb(X7(Z.cwd,v.providerId??Z.providerId,K.mode,v.modelId??Z.modelId,Z.toolRoutingRules,A,v.skills!==void 0&&Q0?.createSkillsExecutor?Q0.createSkillsExecutor(v.skills):void 0,B),v):[],hookErrorMode:Z.hookErrorMode,toolPolicies:A,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),A))}if(!this.teamRuntimeEntries.has(H1))this.teamRuntimeEntries.set(H1,{delegatedAgentConfigProvider:E1});let F9=()=>{if(!K.enableAgentTeams)return;let v=this.teamRuntimeEntries.get(H1)??{delegatedAgentConfigProvider:E1};if(this.teamRuntimeEntries.set(H1,v),P=v.runtime,!P){if(P=new k2({teamName:D,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:K.missionLogIntervalSteps,missionLogIntervalMs:K.missionLogIntervalMs,onTeamEvent:(Y0)=>{if(G(Y0),P&&B0){if(Y0.type==="teammate_spawned"&&Y0.teammate?.rolePrompt){let N1={agentId:Y0.agentId,rolePrompt:Y0.teammate.rolePrompt,modelId:Y0.teammate.modelId,maxIterations:Y0.teammate.maxIterations};R1.set(N1.agentId,N1)}if(Y0.type==="teammate_shutdown"&&!ub(Y0.reason))R1.delete(Y0.agentId);B0.handleTeamEvent(U,Y0),B0.persistRuntime(U,P.exportState(),Array.from(R1.values()))}}}),C0)P.hydrateState(C0),K9=!0;v.runtime=P}if(!o){if(!P)return;o=!0;let Y0=w8({runtime:P,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(C0),restoredTeammates:n2,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(N1)=>{a2=N1,C4?.addTools(N1)},createBaseTools:K.enableTools?()=>X7(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,B):void 0,teammateConfigProvider:E1});if(K9)P.recoverActiveRuns("runtime_recovered");if(Y0.restoredFromPersistence)j?.();f.push(...Y0.tools)}return P};if(K.enableSpawnAgent&&Y){let v=Y();f.push({...v,execute:async(Y0,N1)=>{return F9(),v.execute(Y0,N1)}})}if(K.enableAgentTeams)F9();let s2=RX(f,A),$W=s2.some((v)=>v.name==="submit_and_exit"&&v.lifecycle?.completesRun===!0),A9=K.enableAgentTeams?()=>{let v=this.teamRuntimeEntries.get(H1)?.runtime;if(!v)return;let Y0=v.listTasks(),N1=Y0.some((J$)=>J$.status==="in_progress"||J$.status==="pending"),Zj=v.listRuns({}),zD=Zj.some((J$)=>J$.status==="running"||J$.status==="queued");if(N1||zD){let J$=Y0.filter((x0)=>x0.status==="in_progress"||x0.status==="pending").map((x0)=>`${x0.id} (${x0.status}): ${x0.title}`).join(", "),Qj=Zj.filter((x0)=>x0.status==="running"||x0.status==="queued").map((x0)=>`${x0.id} (${x0.status})`).join(", "),ZW=[];if(J$)ZW.push(`Unfinished tasks: ${J$}`);if(Qj)ZW.push(`Active runs: ${Qj}`);return`[SYSTEM] You still have team obligations. ${ZW.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,_D=$W?{requireCompletionTool:!0,...A9?{completionGuard:A9}:{}}:A9?{completionGuard:A9}:void 0;return{tools:s2,logger:J??Z.logger,telemetry:X??Z.telemetry,teamRuntime:P,teamRestoredFromPersistence:Boolean(C0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(H1)?.delegatedAgentConfigProvider??E1,extensions:M1,completionPolicy:_D,registerLeadAgent:(v)=>{if(C4=v,a2.length>0)v.addTools(y1(a2,[...L]))},shutdown:async(v)=>{if(cb(P,v),this.teamRuntimeEntries.delete(H1),await e0?.(),!t)Q0?.stop()}}}}var rA={};N(rA,{requestDesktopToolApproval:()=>NX});import{mkdir as lb,readFile as pb,unlink as rb,writeFile as ib}from"node:fs/promises";import{join as pA}from"node:path";function nb($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function ab($){return new Promise((Z)=>setTimeout(Z,$))}async function EX($){try{await rb($)}catch{}}async function NX($,Z={}){let Q=Z.approvalDir?.trim(),W=Z.sessionId?.trim();if(!Q||!W)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await lb(Q,{recursive:!0});let J=nb(`${$.toolCallId}`),X=pA(Q,`${W}.request.${J}.json`),Y=pA(Q,`${W}.decision.${J}.json`),j=Z.nowIso??(()=>new Date().toISOString());await ib(X,`${JSON.stringify({requestId:J,sessionId:W,createdAt:j(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
716
- `,"utf8");let V=Z.timeoutMs??300000,H=Z.pollIntervalMs??200,B=Date.now();while(Date.now()-B<V){try{let G=await pb(Y,"utf8"),K=JSON.parse(G),F={approved:K.approved===!0,reason:typeof K.reason==="string"?K.reason:void 0};return await Promise.all([EX(Y),EX(X)]),F}catch{}await ab(H)}return await EX(X),{approved:!1,reason:"Tool approval request timed out"}}$1();var nA={};N(nA,{parseMcpInstallArgs:()=>r5,installMcpServer:()=>wX,buildMcpInstallTransport:()=>j7});function sb($){let Z=($??"stdio").trim();if(Z==="http"||Z==="streamable-http")return"streamableHttp";if(Z==="stdio"||Z==="sse"||Z==="streamableHttp")return Z;throw Error(`Unsupported MCP transport "${Z}". Expected stdio, sse, http, streamable-http, or streamableHttp.`)}function ob($){let Z;try{Z=new URL($)}catch{throw Error(`Invalid MCP server URL: ${$}`)}if(Z.protocol!=="http:"&&Z.protocol!=="https:")throw Error(`Invalid MCP server URL: ${$} (only http and https are supported)`)}function tb($){let Z=$.indexOf(":");if(Z<=0)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);let Q=$.slice(0,Z).trim(),W=$.slice(Z+1).trim();if(!Q||!W)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);if(!/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(Q))throw Error(`Invalid MCP header name "${Q}".`);return[Q,W]}function eb($){let Z=$.indexOf("<");return Z>=0&&$.indexOf(">",Z+1)>Z+1}function iA($){let Z=[...$.headers??[]],Q=[],W=$.transport,J=$.targetArgs??[];for(let X=0;X<J.length;X++){let Y=J[X];if($.parseTransport&&Y==="--transport"){let j=J[X+1];if(!j)throw Error("--transport requires a value");W=j,X++;continue}if($.parseTransport&&Y?.startsWith("--transport=")){W=Y.slice(12);continue}if(Y==="--header"){let j=J[X+1];if(!j)throw Error("--header requires a value");Z.push(j),X++;continue}if(Y?.startsWith("--header=")){Z.push(Y.slice(9));continue}Q.push(Y)}return{headers:Z,targetArgs:Q,transport:W}}function $y($){if($.length===0)return{warnings:[]};let Z={},Q=[];for(let W of $){let[J,X]=tb(W);if(Z[J]=X,eb(X))Q.push(`Header "${J}" looks like it contains a placeholder. Update it in MCP settings before using this server.`)}return{headers:Z,warnings:Q}}function j7($){let Z=$.name.trim();if(!Z)throw Error("MCP server name is required");let{headers:Q,targetArgs:W,transport:J}=iA({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),X=sb(J),{headers:Y,warnings:j}=$y(Q);if(X==="stdio"){if(Q.length>0)throw Error("Stdio MCP installs do not support request headers.");let[H,...B]=W;if(!H?.trim())throw Error("Stdio MCP install requires a command after the server name, for example: cline mcp install fs --yes -- npx -y @modelcontextprotocol/server-filesystem /tmp");return{name:Z,transport:{type:X,command:H,args:B.length>0?B:void 0},warnings:j}}if(W.length!==1)throw Error("Remote MCP install requires exactly one URL argument after the server name.");let V=W[0]?.trim()??"";return ob(V),{name:Z,transport:Y?{type:X,url:V,headers:Y}:{type:X,url:V},warnings:j}}function r5($){let[Z,...Q]=$;if(!Z)throw Error("Marketplace MCP install args must start with a server name.");return{name:Z,...iA({parseTransport:!0,targetArgs:Q})}}function Zy($,Z,Q){j1(Q,(W)=>{let J=W.mcpServers,X=J&&typeof J==="object"&&!Array.isArray(J)?{...J}:{};X[$]={transport:Z},W.mcpServers=X})}function wX($){let{name:Z,transport:Q,warnings:W}=j7($);return Zy(Z,Q,$.settingsPath??Z0()),{name:Z,status:"installed",transport:Q,warnings:W}}var Yf={};N(Yf,{uninstallMarketplaceSkill:()=>A7,uninstallMarketplacePlugin:()=>f7,uninstallMarketplaceMcpServerFromSettings:()=>K7,uninstallMarketplaceEntry:()=>dX,resolveMarketplaceMcpServerName:()=>o5,marketplaceEntryKey:()=>uX,isMarketplaceSkillInstalled:()=>F7,getMarketplaceSkillCandidates:()=>t5,getGlobalMarketplaceSkillPaths:()=>e5,findInstalledGlobalMarketplaceSkillName:()=>$9});import{spawn as by}from"node:child_process";import{existsSync as Jf,rmSync as yy}from"node:fs";import{homedir as hy,platform as ky}from"node:os";import{dirname as Iy,join as Wf}from"node:path";import{resolveClineDir as xy,resolveMcpSettingsPath as gy}from"@cline/shared/storage";$1();var Qf={};N(Qf,{uninstallPlugin:()=>a5});import{existsSync as q4,readdirSync as By,readFileSync as Gy,rmdirSync as Ky,rmSync as Fy,statSync as Ay}from"node:fs";import{basename as a0,dirname as m$,extname as fy,isAbsolute as Uy,join as Z$,relative as Dy,resolve as O4,sep as yX}from"node:path";import{discoverPluginModulePaths as Ly,resolvePluginConfigSearchPaths as _y}from"@cline/shared/storage";var tA={};N(tA,{syncPluginMcpServersToSettings:()=>i5,removePluginMcpServersFromSettings:()=>n5,disablePluginMcpServersInSettings:()=>bX});import{existsSync as Qy,mkdirSync as Wy,readFileSync as Jy,writeFileSync as Xy}from"node:fs";import{dirname as sA,isAbsolute as Yy,relative as jy,resolve as aA}from"node:path";function u2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function V7($,Z){let Q=jy(aA($),aA(Z));return Q===""||!Q.startsWith("..")&&!Yy(Q)}function CX($){if(!Qy($))return{mcpServers:{}};try{let Z=JSON.parse(Jy($,"utf8"));if(u2(Z))return Z}catch(Z){throw Error(`Invalid MCP settings at "${$}": ${Z instanceof Error?Z.message:String(Z)}`)}throw Error(`Invalid MCP settings at "${$}": expected an object`)}function PX($){if(u2($.mcpServers))return{...$.mcpServers};return{}}function SX($,Z,Q){Wy(sA($),{recursive:!0}),Xy($,`${JSON.stringify({...Z,mcpServers:Q},null,2)}
717
- `,"utf8")}function oA($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))]}}function B7($){if(!u2($))return;let Z=$.metadata;return u2(Z)?Z:void 0}function H7($,Z){let Q=B7($);if(!Q||Q.source!=="plugin")return!1;let W=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,J=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&W===Z.pluginName){if(!Z.pluginPath||J===Z.pluginPath)return!0}if(J&&Z.pluginPath&&(J===Z.pluginPath||V7(Z.pluginPath,J)||V7(J,Z.pluginPath)))return!0;if(W&&Z.pluginNames?.some((X)=>X===W))return!0;if(J&&Z.pluginPaths?.some((X)=>J===X||V7(X,J)||V7(J,X)))return!0;return!1}function Vy($){let Z=u2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:sA($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function Hy($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await x8({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],W=[],J=(Z.failures??[]).map((X)=>({pluginPath:X.pluginPath,pluginName:X.pluginName,message:X.message}));for(let X of Z.extensions??[]){let Y=X.__clinePluginPath;if(!Y)continue;if(!X.setup){Q.push({pluginName:X.name,pluginPath:Y});continue}let j=[],V={registerTool:(H)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(H)=>{if(!X.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');j.push(H)}};try{await X.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(H){J.push({pluginPath:Y,pluginName:X.name,message:H instanceof Error?H.message:String(H)});continue}Q.push({pluginName:X.name,pluginPath:Y});for(let H of j)W.push({pluginName:X.name,pluginPath:Y,server:{...H,metadata:{...H.metadata??{},source:"plugin",pluginName:X.name,pluginPath:Y}}})}return{plugins:Q,servers:W,failures:J}}finally{await Z.shutdown().catch(()=>{})}}async function i5($){let Z=$.settingsPath??Z0(),Q={mutations:[],failures:[]},W;try{W=await Hy($)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)});return Q}Q.failures.push(...W.failures);let J;try{J=CX(Z)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)});return Q}let X=PX(J),Y=new Map,j=new Map;for(let H of W.plugins)Y.set(H.pluginPath,new Set),j.set(H.pluginPath,H.pluginName);let V=hQ(W.servers.map((H)=>({server:H.server,owner:H,ownerLabel:H.pluginName})));for(let H of V){let B=H.owner;if(!Y.has(B.pluginPath))Y.set(B.pluginPath,new Set);if(H.name)Y.get(B.pluginPath)?.add(H.name);if(!H.registration){Q.mutations.push({name:H.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:"skipped",reason:H.loadError??"invalid MCP server registration"});continue}let G=X[H.registration.name];if(G!==void 0){if(!H7(G,{pluginName:B.pluginName,pluginPath:B.pluginPath})){Q.mutations.push({name:H.registration.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}X[H.registration.name]=Vy({registration:H.registration,pluginName:B.pluginName,pluginPath:B.pluginPath,existing:u2(G)?G:void 0}),Q.mutations.push({name:H.registration.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:G===void 0?"created":"updated"})}for(let[H,B]of Object.entries(X)){let G=B7(B),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=Y.get(K);if(F&&H7(B,{pluginPath:K})&&!F.has(H))delete X[H],Q.mutations.push({name:H,pluginName:typeof G?.pluginName==="string"?G.pluginName:j.get(K)??"plugin",pluginPath:K,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((H)=>H.action!=="skipped"))try{SX(Z,J,X)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)})}return Q}function bX($){let Z=$.settingsPath??Z0(),Q;try{Q=CX(Z)}catch{return[]}let W=PX(Q),J=oA($),X=[];for(let[Y,j]of Object.entries(W)){if(!u2(j)||!H7(j,J))continue;let V=B7(j);W[Y]={...j,disabled:!0},X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(X.length>0)SX(Z,Q,W);return X}function n5($){let Z=$.settingsPath??Z0(),Q;try{Q=CX(Z)}catch{return[]}let W=PX(Q),J=oA($),X=[];for(let[Y,j]of Object.entries(W)){if(!H7(j,J))continue;let V=B7(j);delete W[Y],X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(X.length>0)SX(Z,Q,W);return X}var gX="_installed",zy="package",Ty=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function hX($){return $.trim().toLowerCase()}function V1($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function Oy($){return $.replace(/-[0-9a-f]{12}$/i,"")}function kX($){let Z=fy($);return Z?$.slice(0,-Z.length):$}function IX($){if(!q4($))return;try{let Z=JSON.parse(Gy($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function mX($,Z){let Q=Dy(Z,$);return Q===""||!Q.startsWith("..")&&!Uy(Q)}function eA($){let Q=O4($).split(yX),W=Q.lastIndexOf(gX);if(W<0)return;let J=Q[W+1];if(!J)return;let X=Ty.get(J)??1,Y=W+2+X;if(Q.length<Y)return;let j=Q.slice(0,Y).join(yX)||yX;return q4(j)?j:void 0}function G7($){try{return By($,{withFileTypes:!0})}catch{return[]}}function qy($){let Z=Z$($,gX);if(!q4(Z))return[];let Q=[];for(let W of G7(Z)){if(!W.isDirectory())continue;let J=Z$(Z,W.name);if(W.name==="git"){for(let X of G7(J)){if(!X.isDirectory())continue;let Y=Z$(J,X.name);for(let j of G7(Y))if(j.isDirectory())Q.push(Z$(Y,j.name))}continue}for(let X of G7(J))if(X.isDirectory())Q.push(Z$(J,X.name))}return Q.sort((W,J)=>W.localeCompare(J))}function $f($){try{return Ly($)}catch{return[]}}function xX($){let Z=$f($),Q=new Set;V1(Q,a0($)),V1(Q,Oy(a0($))),V1(Q,IX(Z$($,"package.json"))),V1(Q,IX(Z$($,zy,"package.json")));for(let W of Z)V1(Q,a0(W)),V1(Q,kX(a0(W)));return{installPath:$,entryPaths:Z,names:[...Q].sort((W,J)=>W.localeCompare(J)),installed:!0}}function My($,Z){let Q=O4($),W=Z.find((Y)=>mX(Q,Y));if(!W)return;let J=m$(Q);while(J!==W&&J!==m$(J)){if(q4(Z$(J,"package.json")))return J;J=m$(J)}let X=a0(Q);if((X==="index.ts"||X==="index.js")&&m$(Q)!==W)return m$(Q);return Q}function Zf($,Z){let Q=My($,Z);if(!Q)return;let W=new Set;return V1(W,a0($)),V1(W,kX(a0($))),V1(W,a0(Q)),V1(W,kX(a0(Q))),V1(W,IX(Z$(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...W].sort((J,X)=>J.localeCompare(X)),installed:!1}}function Ry($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return _y(Z).filter((Q)=>q4(Q))}function Ey($){let Z=new Map;for(let Q of $){for(let W of qy(Q))Z.set(W,xX(W));for(let W of $f(Q)){let J=eA(W);if(J){if(!Z.has(J))Z.set(J,xX(J));continue}let X=Zf(W,$);if(X)Z.set(X.installPath,X)}}return[...Z.values()].sort((Q,W)=>Q.installPath.localeCompare(W.installPath))}function Ny($,Z){let Q=hX(Z);if(!Q)return!1;if(hX($.installPath)===Q)return!0;return $.names.some((W)=>hX(W)===Q)}function wy($,Z,Q){let W=O4($);for(let X of Z){if(mX(W,X.installPath))return X;if(X.entryPaths.some((Y)=>O4(Y)===W))return X}let J=eA(W);if(J)return xX(J);if(q4(W))return Zf(W,Q);return}function Cy($){let Z=z0(),Q=Z.disabledPlugins;if(!Q?.length)return;let W=Q.filter((J)=>{let X=O4(J);if(mX(X,$.installPath))return!1;return!$.entryPaths.some((Y)=>O4(Y)===X)});if(W.length===Q.length)return;B1({...Z,disabledPlugins:W})}function Py($){let Z=m$($);while(Z!==m$(Z)&&a0(Z)!==gX){try{Ky(Z)}catch{return}Z=m$(Z)}}function Sy($){return`${$.names[0]??a0($.installPath)} at ${$.installPath}`}async function a5($){let Z=Ry($),Q=Ey(Z),W=$.path?.trim(),J=$.name?.trim(),X;if(W){if(X=wy(W,Q,Z),!X)throw Error(`No plugin found at ${W}`)}else{if(!J)throw Error("plugin uninstall requires a plugin name");let j=Q.filter((V)=>Ny(V,J));if(j.length===0)throw Error(`No plugin found matching "${J}"`);if(j.length>1)throw Error(`Multiple plugins match "${J}": ${j.map(Sy).join(", ")}`);X=j[0]}let Y=Ay(X.installPath,{throwIfNoEntry:!1});if(!Y)throw Error(`Plugin install path does not exist: ${X.installPath}`);if(n5({pluginPaths:[X.installPath,...X.entryPaths],pluginNames:X.names}),Fy(X.installPath,{recursive:Y.isDirectory(),force:!0}),Cy(X),X.installed)Py(X.installPath);return{name:J||X.names[0]||a0(X.installPath),installPath:X.installPath,removedPaths:[X.installPath],entryPaths:X.entryPaths}}var vX=120000,s5=12000,my=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,vy=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,cy=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,uy=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function cX($){return $.install?.args??[]}function dy(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||hy()}function ly($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function py($){return ly($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function Xf($){return $.split(/\r?\n/).map((Z)=>{if(!my.test(Z))return Z;return Z.replace(vy,"$1[redacted]").replace(cy,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(uy,"$1 [redacted]").replace(/((?:^|[^\w])(?:api\s+key|access\s+token|refresh\s+token|auth(?:orization)?\s+token|secret|password|credential)\s+(?:is\s+)?)(\S+)/gi,"$1[redacted]")}).join(`
718
- `).slice(-s5)}function ry($){let Z=Xf([$.stdout,$.stderr].filter(Boolean).join(`
719
- `)).trim();return Z.length>0?Z:void 0}function iy($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function ny($,Z){return[$,...Z].map((Q)=>iy(Xf(Q).trim())).join(" ")}var ay=async($,Z)=>new Promise((Q,W)=>{let J=!1,X=!1,Y=by($,Z,{env:process.env,shell:ky()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),j="",V="",H=setTimeout(()=>{if(!J)Y.kill("SIGKILL")},vX+5000),B=setTimeout(()=>{X=!0,V+=`
720
- Timed out after ${vX/1000}s.`,Y.kill("SIGTERM")},vX);H.unref?.(),B.unref?.(),Y.stdout?.on("data",(G)=>{if(j+=String(G),j.length>s5*2)j=j.slice(-s5)}),Y.stderr?.on("data",(G)=>{if(V+=String(G),V.length>s5*2)V=V.slice(-s5)}),Y.once("error",(G)=>{clearTimeout(B),clearTimeout(H),W(G)}),Y.once("close",(G,K)=>{J=!0,clearTimeout(B),clearTimeout(H),Q({exitCode:X?124:G??(K==="SIGINT"?130:1),stdout:j,stderr:V})})});function uX($){return`${$.type}:${$.id}`}function o5($){let Z=cX($);if(Z.length===0)throw Error("Marketplace install args are required.");return r5(Z).name}function K7($,Z={}){let Q=o5($),W=Z.mcpSettingsPath??gy(),J=j1(W,(X)=>{let Y=X.mcpServers&&typeof X.mcpServers==="object"&&!Array.isArray(X.mcpServers)?X.mcpServers:{},j=Object.hasOwn(Y,Q);if(j)delete Y[Q];return X.mcpServers=Y,j});return{name:Q,deleted:J}}function t5($){let Z=new Set,Q=(J)=>{let X=py(J??"");if(X&&X!=="skill")Z.add(X)};Q($.id),Q($.name);let W=cX($);for(let J=0;J<W.length;J++){let X=W[J];if((X==="--skill"||X==="-s")&&W[J+1]){Q(W[J+1]),J++;continue}let Y=X.split("@").at(1);if(Y)Q(Y)}return[...Z]}function e5($){return[Wf(xy(),"skills",$,"SKILL.md"),Wf(dy(),".agents","skills",$,"SKILL.md")].filter((Z,Q,W)=>W.indexOf(Z)===Q)}function $9($){if($.type!=="skill")return;return t5($).find((Z)=>e5(Z).some((Q)=>Jf(Q)))}function F7($){return $9($)!==void 0}function sy($){let Z=[];if($.type!=="skill")return Z;for(let Q of t5($))for(let W of e5(Q)){if(!Jf(W))continue;let J=Iy(W);yy(J,{recursive:!0,force:!0}),Z.push(J)}return Z}async function A7($,Z={}){let Q=$9($);if(!Q)return{id:$.id,type:"skill",status:"uninstalled",message:`${$.name??$.id} is not installed.`};let W="npx",J=["-y","skills@latest","remove",Q,"-g","-y"],X=ny(W,J),Y=Z.spawnCommand??ay,j;try{j=await Y(W,J)}catch(B){throw Error(`Failed to start ${$.name??$.id} uninstall command:
715
+ WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,J,Q]),W.map((X)=>X.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function MX($={}){try{let Z=new c2($);return Z.init(),Z}catch{let Z=new p5({teamDir:$.teamDir});return Z.init(),Z}}function J7($,Z){return Cb($,Z)}function Pb($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function Sb($,Z){return $.filter((Q)=>Pb(Q.name,Z))}function RX($,Z){return y1(Sb($,Z))}var bb={apply_diff:"editor",attempt_completion:"submit_and_exit",bash:"run_commands",execute_command:"run_commands",list_code_definition_names:"search_codebase",list_files:"run_commands",read_file:"read_files",replace_in_file:"editor",search_files:"search_codebase",use_skill:"skills",write_to_file:"editor"};function yb($){let Z=$.trim().toLowerCase();return bb[Z]??Z}function hb($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(yb));if(Z.skills!==void 0)Q.add("skills");return $.filter((W)=>Q.has(W.name))}function Y7(){return`team-${wb(5)}`}function X7($,Z,Q,W,J,X,Y,j){let V=u0[l1({mode:Q})],B=M8(Z,W,Q,J??q8);return RX(U2({cwd:$,...V,enableSkills:!!Y,...B,executors:{...Y?{skills:Y}:{},...j??{}}}),X)}function kb($){return X7($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,Ib,$.toolExecutors).some((Z)=>Z.name==="skills")}var Ib=async()=>"";async function xb($){let Z=Z0();if(!s1({filePath:Z}))return{tools:[]};let Q=new b2({clientFactory:$4({settingsPath:Z})}),W;try{W=await S2(Q,{filePath:Z})}catch(j){await Q.dispose().catch(()=>{});let V=j instanceof Error?j.message:String(j);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let J=W.filter((j)=>j.disabled!==!0),X=await Promise.allSettled(J.map((j)=>Q4({serverName:j.name,provider:Q}))),Y=[];for(let[j,V]of X.entries())if(V.status==="fulfilled")Y.push(...V.value);else{let B=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${J[j].name}", skipping: ${B}`)}return{tools:Y,shutdown:async()=>{await Q.dispose()}}}function gb($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function mb($){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 vb($){let Z=u0[l1({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??Z.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??Z.enableAgentTeams??!0,disableMcpSettingsTools:$.disableMcpSettingsTools===!0,yolo:$.yolo===!0,missionLogIntervalSteps:typeof $.missionLogIntervalSteps==="number"&&Number.isFinite($.missionLogIntervalSteps)?$.missionLogIntervalSteps:3,missionLogIntervalMs:typeof $.missionLogIntervalMs==="number"&&Number.isFinite($.missionLogIntervalMs)?$.missionLogIntervalMs:120000}}class T4{teamRuntimeEntries=new Map;async build($){let{config:Z,hooks:Q,extensions:W,logger:J,telemetry:X,createSpawnTool:Y,onTeamRestored:j,userInstructionService:V,configExtensions:B,toolExecutors:H}=$,G=$.onTeamEvent??(()=>{}),K=vb(Z),F=Z.workspaceRoot??Z.cwd,A=$.toolPolicies??Z.toolPolicies,L=G1(),f=[],D=Z.teamName?.trim()||Y7(),U=Z.sessionId?.trim()||D,T=K.enableSpawnAgent?Y4({workspaceRoot:F}):{configs:[],errors:[]},q=T.configs.some((v)=>v.skills!==void 0),z=J7(B,"rules"),_=J7(B,"skills"),E=_||q,w=J7(B,"workflows"),y=J7(B,"plugins"),l=z||_||w,o=!1,t=Boolean(V),Q0=V,e0;for(let v of T.errors)(J??Z.logger)?.log?.(`[agents] Failed to load agent config at ${v.path}: ${v.error.message}`);if(!Q0&&(l||q))Q0=b$({skills:E?{workspacePath:F,includePluginSkills:y,pluginSkillDirectories:y?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(Q0)await Q0.start().catch(()=>{});let l$=K.enableTools&&_&&Boolean(Q0)&&Q0?.hasConfiguredSkills(Z.skills)===!0&&kb({cwd:Z.cwd,providerId:Z.providerId,mode:K.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:A,toolExecutors:H}),r=Q0&&l?Q0.createExtension({includeRules:z,includeSkills:_,includeWorkflows:w,registerSkillsTool:l$,allowedSkillNames:Z.skills}):void 0,M1=r?[...W??Z.extensions??[],r]:W??Z.extensions;if(K.enableTools){if(f.push(...X7(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,H)),!K.disableMcpSettingsTools){let v=await xb(Z.logger);f.push(...v.tools),e0=v.shutdown}}let P,H0=K.enableAgentTeams?MX():void 0,G0=H0?.loadRuntime(U),w0=G0?.state,n2=G0?.teammates??[],R1=new Map(n2.map((v)=>[v.agentId,v])),B1=Z.sessionId||D,w4,a2=[],K9=!1,E1=T$({providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey??"",baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxTokensPerTurn:Z.maxTokensPerTurn,maxIterations:Z.maxIterations,hooks:Q,extensions:M1,logger:J??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(K.enableSpawnAgent){if(T.configs.length>0)f.push(...RX(j4({configProvider:E1,agents:T.configs,createSubAgentTools:(v)=>K.enableTools?hb(X7(Z.cwd,v.providerId??Z.providerId,K.mode,v.modelId??Z.modelId,Z.toolRoutingRules,A,v.skills!==void 0&&Q0?.createSkillsExecutor?Q0.createSkillsExecutor(v.skills):void 0,H),v):[],hookErrorMode:Z.hookErrorMode,toolPolicies:A,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),A))}if(!this.teamRuntimeEntries.has(B1))this.teamRuntimeEntries.set(B1,{delegatedAgentConfigProvider:E1});let F9=()=>{if(!K.enableAgentTeams)return;let v=this.teamRuntimeEntries.get(B1)??{delegatedAgentConfigProvider:E1};if(this.teamRuntimeEntries.set(B1,v),P=v.runtime,!P){if(P=new k2({teamName:D,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:K.missionLogIntervalSteps,missionLogIntervalMs:K.missionLogIntervalMs,onTeamEvent:(Y0)=>{if(G(Y0),P&&H0){if(Y0.type==="teammate_spawned"&&Y0.teammate?.rolePrompt){let N1={agentId:Y0.agentId,rolePrompt:Y0.teammate.rolePrompt,modelId:Y0.teammate.modelId,maxIterations:Y0.teammate.maxIterations};R1.set(N1.agentId,N1)}if(Y0.type==="teammate_shutdown"&&!mb(Y0.reason))R1.delete(Y0.agentId);H0.handleTeamEvent(U,Y0),H0.persistRuntime(U,P.exportState(),Array.from(R1.values()))}}}),w0)P.hydrateState(w0),K9=!0;v.runtime=P}if(!o){if(!P)return;o=!0;let Y0=C8({runtime:P,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(w0),restoredTeammates:n2,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(N1)=>{a2=N1,w4?.addTools(N1)},createBaseTools:K.enableTools?()=>X7(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,H):void 0,teammateConfigProvider:E1});if(K9)P.recoverActiveRuns("runtime_recovered");if(Y0.restoredFromPersistence)j?.();f.push(...Y0.tools)}return P};if(K.enableSpawnAgent&&Y){let v=Y();f.push({...v,execute:async(Y0,N1)=>{return F9(),v.execute(Y0,N1)}})}if(K.enableAgentTeams)F9();let s2=RX(f,A),$W=s2.some((v)=>v.name==="submit_and_exit"&&v.lifecycle?.completesRun===!0),A9=K.enableAgentTeams?()=>{let v=this.teamRuntimeEntries.get(B1)?.runtime;if(!v)return;let Y0=v.listTasks(),N1=Y0.some((J$)=>J$.status==="in_progress"||J$.status==="pending"),Zj=v.listRuns({}),LD=Zj.some((J$)=>J$.status==="running"||J$.status==="queued");if(N1||LD){let J$=Y0.filter((x0)=>x0.status==="in_progress"||x0.status==="pending").map((x0)=>`${x0.id} (${x0.status}): ${x0.title}`).join(", "),Qj=Zj.filter((x0)=>x0.status==="running"||x0.status==="queued").map((x0)=>`${x0.id} (${x0.status})`).join(", "),ZW=[];if(J$)ZW.push(`Unfinished tasks: ${J$}`);if(Qj)ZW.push(`Active runs: ${Qj}`);return`[SYSTEM] You still have team obligations. ${ZW.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,DD=$W?{requireCompletionTool:!0,...A9?{completionGuard:A9}:{}}:A9?{completionGuard:A9}:void 0;return{tools:s2,logger:J??Z.logger,telemetry:X??Z.telemetry,teamRuntime:P,teamRestoredFromPersistence:Boolean(w0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(B1)?.delegatedAgentConfigProvider??E1,extensions:M1,completionPolicy:DD,registerLeadAgent:(v)=>{if(w4=v,a2.length>0)v.addTools(y1(a2,[...L]))},shutdown:async(v)=>{if(gb(P,v),this.teamRuntimeEntries.delete(B1),await e0?.(),!t)Q0?.stop()}}}}var lA={};N(lA,{requestDesktopToolApproval:()=>NX});import{mkdir as cb,readFile as ub,unlink as db,writeFile as lb}from"node:fs/promises";import{join as dA}from"node:path";function pb($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function rb($){return new Promise((Z)=>setTimeout(Z,$))}async function EX($){try{await db($)}catch{}}async function NX($,Z={}){let Q=Z.approvalDir?.trim(),W=Z.sessionId?.trim();if(!Q||!W)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await cb(Q,{recursive:!0});let J=pb(`${$.toolCallId}`),X=dA(Q,`${W}.request.${J}.json`),Y=dA(Q,`${W}.decision.${J}.json`),j=Z.nowIso??(()=>new Date().toISOString());await lb(X,`${JSON.stringify({requestId:J,sessionId:W,createdAt:j(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
716
+ `,"utf8");let V=Z.timeoutMs??300000,B=Z.pollIntervalMs??200,H=Date.now();while(Date.now()-H<V){try{let G=await ub(Y,"utf8"),K=JSON.parse(G),F={approved:K.approved===!0,reason:typeof K.reason==="string"?K.reason:void 0};return await Promise.all([EX(Y),EX(X)]),F}catch{}await rb(B)}return await EX(X),{approved:!1,reason:"Tool approval request timed out"}}$1();var rA={};N(rA,{parseMcpInstallArgs:()=>r5,installMcpServer:()=>CX,buildMcpInstallTransport:()=>j7});function ib($){let Z=($??"stdio").trim();if(Z==="http"||Z==="streamable-http")return"streamableHttp";if(Z==="stdio"||Z==="sse"||Z==="streamableHttp")return Z;throw Error(`Unsupported MCP transport "${Z}". Expected stdio, sse, http, streamable-http, or streamableHttp.`)}function nb($){let Z;try{Z=new URL($)}catch{throw Error(`Invalid MCP server URL: ${$}`)}if(Z.protocol!=="http:"&&Z.protocol!=="https:")throw Error(`Invalid MCP server URL: ${$} (only http and https are supported)`)}function ab($){let Z=$.indexOf(":");if(Z<=0)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);let Q=$.slice(0,Z).trim(),W=$.slice(Z+1).trim();if(!Q||!W)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);if(!/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(Q))throw Error(`Invalid MCP header name "${Q}".`);return[Q,W]}function sb($){let Z=$.indexOf("<");return Z>=0&&$.indexOf(">",Z+1)>Z+1}function pA($){let Z=[...$.headers??[]],Q=[],W=$.transport,J=$.targetArgs??[];for(let X=0;X<J.length;X++){let Y=J[X];if($.parseTransport&&Y==="--transport"){let j=J[X+1];if(!j)throw Error("--transport requires a value");W=j,X++;continue}if($.parseTransport&&Y?.startsWith("--transport=")){W=Y.slice(12);continue}if(Y==="--header"){let j=J[X+1];if(!j)throw Error("--header requires a value");Z.push(j),X++;continue}if(Y?.startsWith("--header=")){Z.push(Y.slice(9));continue}Q.push(Y)}return{headers:Z,targetArgs:Q,transport:W}}function ob($){if($.length===0)return{warnings:[]};let Z={},Q=[];for(let W of $){let[J,X]=ab(W);if(Z[J]=X,sb(X))Q.push(`Header "${J}" looks like it contains a placeholder. Update it in MCP settings before using this server.`)}return{headers:Z,warnings:Q}}function j7($){let Z=$.name.trim();if(!Z)throw Error("MCP server name is required");let{headers:Q,targetArgs:W,transport:J}=pA({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),X=ib(J),{headers:Y,warnings:j}=ob(Q);if(X==="stdio"){if(Q.length>0)throw Error("Stdio MCP installs do not support request headers.");let[B,...H]=W;if(!B?.trim())throw Error("Stdio MCP install requires a command after the server name, for example: cline mcp install fs --yes -- npx -y @modelcontextprotocol/server-filesystem /tmp");return{name:Z,transport:{type:X,command:B,args:H.length>0?H:void 0},warnings:j}}if(W.length!==1)throw Error("Remote MCP install requires exactly one URL argument after the server name.");let V=W[0]?.trim()??"";return nb(V),{name:Z,transport:Y?{type:X,url:V,headers:Y}:{type:X,url:V},warnings:j}}function r5($){let[Z,...Q]=$;if(!Z)throw Error("Marketplace MCP install args must start with a server name.");return{name:Z,...pA({parseTransport:!0,targetArgs:Q})}}function tb($,Z,Q){j1(Q,(W)=>{let J=W.mcpServers,X=J&&typeof J==="object"&&!Array.isArray(J)?{...J}:{};X[$]={transport:Z},W.mcpServers=X})}function CX($){let{name:Z,transport:Q,warnings:W}=j7($);return tb(Z,Q,$.settingsPath??Z0()),{name:Z,status:"installed",transport:Q,warnings:W}}var Jf={};N(Jf,{uninstallMarketplaceSkill:()=>A7,uninstallMarketplacePlugin:()=>f7,uninstallMarketplaceMcpServerFromSettings:()=>K7,uninstallMarketplaceEntry:()=>dX,resolveMarketplaceMcpServerName:()=>o5,marketplaceEntryKey:()=>uX,isMarketplaceSkillInstalled:()=>F7,getMarketplaceSkillCandidates:()=>t5,getGlobalMarketplaceSkillPaths:()=>e5,findInstalledGlobalMarketplaceSkillName:()=>$9});import{spawn as wy}from"node:child_process";import{existsSync as Qf,rmSync as Py}from"node:fs";import{homedir as Sy,platform as by}from"node:os";import{dirname as yy,join as Zf}from"node:path";import{resolveClineDir as hy,resolveMcpSettingsPath as ky}from"@cline/shared/storage";$1();var $f={};N($f,{uninstallPlugin:()=>a5});import{existsSync as q4,readdirSync as jy,readFileSync as Vy,rmdirSync as By,rmSync as Hy,statSync as Gy}from"node:fs";import{basename as a0,dirname as m$,extname as Ky,isAbsolute as Fy,join as Z$,relative as Ay,resolve as O4,sep as yX}from"node:path";import{discoverPluginModulePaths as fy,resolvePluginConfigSearchPaths as Uy}from"@cline/shared/storage";var sA={};N(sA,{syncPluginMcpServersToSettings:()=>i5,removePluginMcpServersFromSettings:()=>n5,disablePluginMcpServersInSettings:()=>bX});import{existsSync as eb,mkdirSync as $y,readFileSync as Zy,writeFileSync as Qy}from"node:fs";import{dirname as nA,isAbsolute as Wy,relative as Jy,resolve as iA}from"node:path";function u2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function V7($,Z){let Q=Jy(iA($),iA(Z));return Q===""||!Q.startsWith("..")&&!Wy(Q)}function wX($){if(!eb($))return{mcpServers:{}};try{let Z=JSON.parse(Zy($,"utf8"));if(u2(Z))return Z}catch(Z){throw Error(`Invalid MCP settings at "${$}": ${Z instanceof Error?Z.message:String(Z)}`)}throw Error(`Invalid MCP settings at "${$}": expected an object`)}function PX($){if(u2($.mcpServers))return{...$.mcpServers};return{}}function SX($,Z,Q){$y(nA($),{recursive:!0}),Qy($,`${JSON.stringify({...Z,mcpServers:Q},null,2)}
717
+ `,"utf8")}function aA($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))]}}function H7($){if(!u2($))return;let Z=$.metadata;return u2(Z)?Z:void 0}function B7($,Z){let Q=H7($);if(!Q||Q.source!=="plugin")return!1;let W=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,J=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&W===Z.pluginName){if(!Z.pluginPath||J===Z.pluginPath)return!0}if(J&&Z.pluginPath&&(J===Z.pluginPath||V7(Z.pluginPath,J)||V7(J,Z.pluginPath)))return!0;if(W&&Z.pluginNames?.some((X)=>X===W))return!0;if(J&&Z.pluginPaths?.some((X)=>J===X||V7(X,J)||V7(J,X)))return!0;return!1}function Xy($){let Z=u2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:nA($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function Yy($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await x8({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],W=[],J=(Z.failures??[]).map((X)=>({pluginPath:X.pluginPath,pluginName:X.pluginName,message:X.message}));for(let X of Z.extensions??[]){let Y=X.__clinePluginPath;if(!Y)continue;if(!X.setup){Q.push({pluginName:X.name,pluginPath:Y});continue}let j=[],V={registerTool:(B)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(B)=>{if(!X.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');j.push(B)}};try{await X.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(B){J.push({pluginPath:Y,pluginName:X.name,message:B instanceof Error?B.message:String(B)});continue}Q.push({pluginName:X.name,pluginPath:Y});for(let B of j)W.push({pluginName:X.name,pluginPath:Y,server:{...B,metadata:{...B.metadata??{},source:"plugin",pluginName:X.name,pluginPath:Y}}})}return{plugins:Q,servers:W,failures:J}}finally{await Z.shutdown().catch(()=>{})}}async function i5($){let Z=$.settingsPath??Z0(),Q={mutations:[],failures:[]},W;try{W=await Yy($)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Q}Q.failures.push(...W.failures);let J;try{J=wX(Z)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Q}let X=PX(J),Y=new Map,j=new Map;for(let B of W.plugins)Y.set(B.pluginPath,new Set),j.set(B.pluginPath,B.pluginName);let V=hQ(W.servers.map((B)=>({server:B.server,owner:B,ownerLabel:B.pluginName})));for(let B of V){let H=B.owner;if(!Y.has(H.pluginPath))Y.set(H.pluginPath,new Set);if(B.name)Y.get(H.pluginPath)?.add(B.name);if(!B.registration){Q.mutations.push({name:B.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:B.loadError??"invalid MCP server registration"});continue}let G=X[B.registration.name];if(G!==void 0){if(!B7(G,{pluginName:H.pluginName,pluginPath:H.pluginPath})){Q.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}X[B.registration.name]=Xy({registration:B.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:u2(G)?G:void 0}),Q.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:G===void 0?"created":"updated"})}for(let[B,H]of Object.entries(X)){let G=H7(H),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=Y.get(K);if(F&&B7(H,{pluginPath:K})&&!F.has(B))delete X[B],Q.mutations.push({name:B,pluginName:typeof G?.pluginName==="string"?G.pluginName:j.get(K)??"plugin",pluginPath:K,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((B)=>B.action!=="skipped"))try{SX(Z,J,X)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)})}return Q}function bX($){let Z=$.settingsPath??Z0(),Q;try{Q=wX(Z)}catch{return[]}let W=PX(Q),J=aA($),X=[];for(let[Y,j]of Object.entries(W)){if(!u2(j)||!B7(j,J))continue;let V=H7(j);W[Y]={...j,disabled:!0},X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(X.length>0)SX(Z,Q,W);return X}function n5($){let Z=$.settingsPath??Z0(),Q;try{Q=wX(Z)}catch{return[]}let W=PX(Q),J=aA($),X=[];for(let[Y,j]of Object.entries(W)){if(!B7(j,J))continue;let V=H7(j);delete W[Y],X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(X.length>0)SX(Z,Q,W);return X}var gX="_installed",Dy="package",Ly=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function hX($){return $.trim().toLowerCase()}function V1($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function _y($){return $.replace(/-[0-9a-f]{12}$/i,"")}function kX($){let Z=Ky($);return Z?$.slice(0,-Z.length):$}function IX($){if(!q4($))return;try{let Z=JSON.parse(Vy($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function mX($,Z){let Q=Ay(Z,$);return Q===""||!Q.startsWith("..")&&!Fy(Q)}function oA($){let Q=O4($).split(yX),W=Q.lastIndexOf(gX);if(W<0)return;let J=Q[W+1];if(!J)return;let X=Ly.get(J)??1,Y=W+2+X;if(Q.length<Y)return;let j=Q.slice(0,Y).join(yX)||yX;return q4(j)?j:void 0}function G7($){try{return jy($,{withFileTypes:!0})}catch{return[]}}function zy($){let Z=Z$($,gX);if(!q4(Z))return[];let Q=[];for(let W of G7(Z)){if(!W.isDirectory())continue;let J=Z$(Z,W.name);if(W.name==="git"){for(let X of G7(J)){if(!X.isDirectory())continue;let Y=Z$(J,X.name);for(let j of G7(Y))if(j.isDirectory())Q.push(Z$(Y,j.name))}continue}for(let X of G7(J))if(X.isDirectory())Q.push(Z$(J,X.name))}return Q.sort((W,J)=>W.localeCompare(J))}function tA($){try{return fy($)}catch{return[]}}function xX($){let Z=tA($),Q=new Set;V1(Q,a0($)),V1(Q,_y(a0($))),V1(Q,IX(Z$($,"package.json"))),V1(Q,IX(Z$($,Dy,"package.json")));for(let W of Z)V1(Q,a0(W)),V1(Q,kX(a0(W)));return{installPath:$,entryPaths:Z,names:[...Q].sort((W,J)=>W.localeCompare(J)),installed:!0}}function Ty($,Z){let Q=O4($),W=Z.find((Y)=>mX(Q,Y));if(!W)return;let J=m$(Q);while(J!==W&&J!==m$(J)){if(q4(Z$(J,"package.json")))return J;J=m$(J)}let X=a0(Q);if((X==="index.ts"||X==="index.js")&&m$(Q)!==W)return m$(Q);return Q}function eA($,Z){let Q=Ty($,Z);if(!Q)return;let W=new Set;return V1(W,a0($)),V1(W,kX(a0($))),V1(W,a0(Q)),V1(W,kX(a0(Q))),V1(W,IX(Z$(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...W].sort((J,X)=>J.localeCompare(X)),installed:!1}}function Oy($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return Uy(Z).filter((Q)=>q4(Q))}function qy($){let Z=new Map;for(let Q of $){for(let W of zy(Q))Z.set(W,xX(W));for(let W of tA(Q)){let J=oA(W);if(J){if(!Z.has(J))Z.set(J,xX(J));continue}let X=eA(W,$);if(X)Z.set(X.installPath,X)}}return[...Z.values()].sort((Q,W)=>Q.installPath.localeCompare(W.installPath))}function My($,Z){let Q=hX(Z);if(!Q)return!1;if(hX($.installPath)===Q)return!0;return $.names.some((W)=>hX(W)===Q)}function Ry($,Z,Q){let W=O4($);for(let X of Z){if(mX(W,X.installPath))return X;if(X.entryPaths.some((Y)=>O4(Y)===W))return X}let J=oA(W);if(J)return xX(J);if(q4(W))return eA(W,Q);return}function Ey($){let Z=z0(),Q=Z.disabledPlugins;if(!Q?.length)return;let W=Q.filter((J)=>{let X=O4(J);if(mX(X,$.installPath))return!1;return!$.entryPaths.some((Y)=>O4(Y)===X)});if(W.length===Q.length)return;H1({...Z,disabledPlugins:W})}function Ny($){let Z=m$($);while(Z!==m$(Z)&&a0(Z)!==gX){try{By(Z)}catch{return}Z=m$(Z)}}function Cy($){return`${$.names[0]??a0($.installPath)} at ${$.installPath}`}async function a5($){let Z=Oy($),Q=qy(Z),W=$.path?.trim(),J=$.name?.trim(),X;if(W){if(X=Ry(W,Q,Z),!X)throw Error(`No plugin found at ${W}`)}else{if(!J)throw Error("plugin uninstall requires a plugin name");let j=Q.filter((V)=>My(V,J));if(j.length===0)throw Error(`No plugin found matching "${J}"`);if(j.length>1)throw Error(`Multiple plugins match "${J}": ${j.map(Cy).join(", ")}`);X=j[0]}let Y=Gy(X.installPath,{throwIfNoEntry:!1});if(!Y)throw Error(`Plugin install path does not exist: ${X.installPath}`);if(n5({pluginPaths:[X.installPath,...X.entryPaths],pluginNames:X.names}),Hy(X.installPath,{recursive:Y.isDirectory(),force:!0}),Ey(X),X.installed)Ny(X.installPath);return{name:J||X.names[0]||a0(X.installPath),installPath:X.installPath,removedPaths:[X.installPath],entryPaths:X.entryPaths}}var vX=120000,s5=12000,Iy=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,xy=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,gy=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,my=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function cX($){return $.install?.args??[]}function vy(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||Sy()}function cy($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function uy($){return cy($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function Wf($){return $.split(/\r?\n/).map((Z)=>{if(!Iy.test(Z))return Z;return Z.replace(xy,"$1[redacted]").replace(gy,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(my,"$1 [redacted]").replace(/((?:^|[^\w])(?:api\s+key|access\s+token|refresh\s+token|auth(?:orization)?\s+token|secret|password|credential)\s+(?:is\s+)?)(\S+)/gi,"$1[redacted]")}).join(`
718
+ `).slice(-s5)}function dy($){let Z=Wf([$.stdout,$.stderr].filter(Boolean).join(`
719
+ `)).trim();return Z.length>0?Z:void 0}function ly($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function py($,Z){return[$,...Z].map((Q)=>ly(Wf(Q).trim())).join(" ")}var ry=async($,Z)=>new Promise((Q,W)=>{let J=!1,X=!1,Y=wy($,Z,{env:process.env,shell:by()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),j="",V="",B=setTimeout(()=>{if(!J)Y.kill("SIGKILL")},vX+5000),H=setTimeout(()=>{X=!0,V+=`
720
+ Timed out after ${vX/1000}s.`,Y.kill("SIGTERM")},vX);B.unref?.(),H.unref?.(),Y.stdout?.on("data",(G)=>{if(j+=String(G),j.length>s5*2)j=j.slice(-s5)}),Y.stderr?.on("data",(G)=>{if(V+=String(G),V.length>s5*2)V=V.slice(-s5)}),Y.once("error",(G)=>{clearTimeout(H),clearTimeout(B),W(G)}),Y.once("close",(G,K)=>{J=!0,clearTimeout(H),clearTimeout(B),Q({exitCode:X?124:G??(K==="SIGINT"?130:1),stdout:j,stderr:V})})});function uX($){return`${$.type}:${$.id}`}function o5($){let Z=cX($);if(Z.length===0)throw Error("Marketplace install args are required.");return r5(Z).name}function K7($,Z={}){let Q=o5($),W=Z.mcpSettingsPath??ky(),J=j1(W,(X)=>{let Y=X.mcpServers&&typeof X.mcpServers==="object"&&!Array.isArray(X.mcpServers)?X.mcpServers:{},j=Object.hasOwn(Y,Q);if(j)delete Y[Q];return X.mcpServers=Y,j});return{name:Q,deleted:J}}function t5($){let Z=new Set,Q=(J)=>{let X=uy(J??"");if(X&&X!=="skill")Z.add(X)};Q($.id),Q($.name);let W=cX($);for(let J=0;J<W.length;J++){let X=W[J];if((X==="--skill"||X==="-s")&&W[J+1]){Q(W[J+1]),J++;continue}let Y=X.split("@").at(1);if(Y)Q(Y)}return[...Z]}function e5($){return[Zf(hy(),"skills",$,"SKILL.md"),Zf(vy(),".agents","skills",$,"SKILL.md")].filter((Z,Q,W)=>W.indexOf(Z)===Q)}function $9($){if($.type!=="skill")return;return t5($).find((Z)=>e5(Z).some((Q)=>Qf(Q)))}function F7($){return $9($)!==void 0}function iy($){let Z=[];if($.type!=="skill")return Z;for(let Q of t5($))for(let W of e5(Q)){if(!Qf(W))continue;let J=yy(W);Py(J,{recursive:!0,force:!0}),Z.push(J)}return Z}async function A7($,Z={}){let Q=$9($);if(!Q)return{id:$.id,type:"skill",status:"uninstalled",message:`${$.name??$.id} is not installed.`};let W="npx",J=["-y","skills@latest","remove",Q,"-g","-y"],X=py(W,J),Y=Z.spawnCommand??ry,j;try{j=await Y(W,J)}catch(H){throw Error(`Failed to start ${$.name??$.id} uninstall command:
721
721
  ${X}
722
- ${B instanceof Error?B.message:String(B)}`)}let V=ry(j);if(j.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${j.exitCode}.
722
+ ${H instanceof Error?H.message:String(H)}`)}let V=dy(j);if(j.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${j.exitCode}.
723
723
  Command:
724
724
  ${X}${V?`
725
725
 
726
- ${V}`:""}`);let H=sy($);if(F7($))throw Error(`Skill uninstall completed, but ${$.name??$.id} is still present in Cline's global skills directories.`);return{id:$.id,type:"skill",status:"uninstalled",message:`Uninstalled ${$.name??$.id}.`,output:[V,...H.map((B)=>`Removed: ${B}`)].filter(Boolean).join(`
726
+ ${V}`:""}`);let B=iy($);if(F7($))throw Error(`Skill uninstall completed, but ${$.name??$.id} is still present in Cline's global skills directories.`);return{id:$.id,type:"skill",status:"uninstalled",message:`Uninstalled ${$.name??$.id}.`,output:[V,...B.map((H)=>`Removed: ${H}`)].filter(Boolean).join(`
727
727
  `)||void 0}}async function f7($,Z={}){let[Q]=cX($),W=Q?.trim()||$.id;if(!W)throw Error("Plugin marketplace uninstalls require a plugin name.");let J=await a5({name:W,workspaceRoot:Z.workspaceRoot});return{id:$.id,type:"plugin",status:"uninstalled",message:`Uninstalled ${$.name??J.name??$.id}.`,output:[`Path: ${J.installPath}`,...J.removedPaths.map((X)=>`Removed: ${X}`)].join(`
728
- `)}}async function dX($,Z={}){if($.type==="mcp"){let Q=o5($);if(Z.deleteMcpServer)await Z.deleteMcpServer(Q);else K7($,Z);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Q??$.id}.`}}if($.type==="skill")return A7($,Z);if($.type==="plugin")return f7($,Z);throw Error(`Unsupported marketplace entry type: ${$.type}`)}var zf={};N(zf,{parsePluginSource:()=>M7,isOfficialPluginSlug:()=>q7,installPlugin:()=>aX,collectPluginMcpOAuthCandidates:()=>R7});import{spawn as oy}from"node:child_process";import{createHash as ty}from"node:crypto";import{existsSync as O1,mkdirSync as rX,readdirSync as ey,readFileSync as $h,renameSync as U7,rmSync as _7,statSync as iX}from"node:fs";import{cp as pX,mkdir as Af,writeFile as z7}from"node:fs/promises";import{homedir as jf}from"node:os";import{basename as W$,dirname as Vf,extname as Zh,join as n,relative as ff,resolve as v$,sep as Qh}from"node:path";import{isPluginModulePath as L7,resolveClineDir as Wh,resolvePluginModuleEntries as Jh}from"@cline/shared/storage";var M4="_installed",T7="package",Xh="https://github.com/cline/plugins.git",Hf=30000,D7=10485760,Bf="@cline/",Yh=["dependencies","devDependencies","optionalDependencies","peerDependencies"],jh={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function O7($){if($==="~")return jf();if($.startsWith("~/"))return n(jf(),$.slice(2));return $}function Uf($){return $.split(Qh).join("/")}function d2($){return ty("sha256").update($).digest("hex").slice(0,12)}function Vh($){let Z=0;while(Z<$.length&&$[Z]==="-")Z++;let Q=$.length;while(Q>Z&&$[Q-1]==="-")Q--;return $.slice(Z,Q)}function Q$($){let Z="",Q=!1,W=$.startsWith("@")?$.slice(1):$;for(let X of W.slice(0,256)){if(X>="a"&&X<="z"||X>="A"&&X<="Z"||X>="0"&&X<="9"||X==="."||X==="_"||X==="-")Z+=X,Q=X==="-";else if(!Q)Z+="-",Q=!0;if(Z.length>=80)break}return Vh(Z)||"plugin"}function q7($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function Hh($){return $?.trim()||Xh}function Gf($){let Q=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Q?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Q[1]}}function Bh($){if($.startsWith(".")||$.startsWith("/")||$==="~"||$.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test($))return!1;let[Z,...Q]=$.split("/");return!!Z&&Q.length>=2&&Z.includes(".")&&!Z.startsWith(".")&&!Z.endsWith(".")}function Gh($){let Z=$.match(/^git@([^:]+):(.+)$/);if(Z){let Y=Z[2]??"",j=Y.indexOf("@");if(j<0)return{repo:$};return{repo:`git@${Z[1]}:${Y.slice(0,j)}`,ref:Y.slice(j+1)||void 0}}if($.includes("://"))try{let Y=new URL($),j=Y.pathname.replace(/^\/+/,""),V=j.indexOf("@");if(V<0)return{repo:$};return Y.pathname=`/${j.slice(0,V)}`,{repo:Y.toString().replace(/\/$/,""),ref:j.slice(V+1)||void 0}}catch{return{repo:$}}let Q=$.indexOf("/");if(Q<0)return{repo:$};let W=$.slice(0,Q),J=$.slice(Q+1),X=J.indexOf("@");if(X<0)return{repo:$};return{repo:`${W}/${J.slice(0,X)}`,ref:J.slice(X+1)||void 0}}function Kh($){try{return decodeURIComponent($)}catch{return $}}function Fh($){return W$(Kh($))||"plugin"}function Ah($){let Z=$.split("/").filter(Boolean);return Z.length>=5&&(Z[2]==="blob"||Z[2]==="raw")}function Kf($){if(!/^https?:\/\//i.test($))return null;let Z;try{Z=new URL($)}catch{return null}let Q=Z.hostname.toLowerCase(),W=Fh(Z.pathname),J=L7(W),X=(Q==="github.com"||Q==="www.github.com")&&Ah(Z.pathname);if(Z.protocol!=="https:"){if(X||Q==="raw.githubusercontent.com"||J)throw Error(`Remote plugin file URLs must use https: ${$}`);return null}if(Q==="github.com"||Q==="www.github.com"){let Y=Z.pathname.split("/").filter(Boolean);if(!X)return null;if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:`https://raw.githubusercontent.com/${[Y[0],Y[1],...Y.slice(3)].join("/")}`,filename:W}}if(Q==="raw.githubusercontent.com"){if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:Z.toString(),filename:W}}if(!J)return null;return{type:"remote",url:Z.toString(),filename:W}}function Ff($,Z={}){let Q=$.trim(),W=Q.startsWith("git:")&&!Q.startsWith("git://"),J=W?Q.slice(4).trim():Q;if(!Z.force&&!W&&!/^(https?|ssh|git):\/\//i.test(J))return null;let{repo:X,ref:Y}=Gh(J),j="",V="";if(X.startsWith("git@")){let G=X.match(/^git@([^:]+):(.+)$/);j=G?.[1]??"",V=G?.[2]??""}else if(/^(https?|ssh|git):\/\//i.test(X)){let G=new URL(X);j=G.hostname,V=G.pathname.replace(/^\/+/,"")}else{let G=X.indexOf("/");if(G<0)return null;j=X.slice(0,G),V=X.slice(G+1)}let H=V.replace(/\.git$/,"").replace(/^\/+/,"");if(!j||!H||H.split("/").length<2)return null;return{type:"git",repo:X.startsWith("git@")||/^(https?|ssh|git):\/\//i.test(X)?X:`https://${X}`,ref:Y,host:j,path:H}}function M7($,Z){let Q=$.trim();if(!Q)throw Error("plugin install requires a source");if(Z==="npm"){let Y=Q.startsWith("npm:")?Q.slice(4).trim():Q,{name:j}=Gf(Y);return{type:"npm",spec:Y,name:j}}if(Z==="git"){let Y=Ff(Q,{force:!0});if(!Y)throw Error(`Invalid git plugin source: ${$}`);return Y}if(Z==="local")return{type:"local",path:$};if(Z==="remote"){let Y=Kf(Q);if(!Y)throw Error(`Invalid remote plugin source: ${$}`);return Y}if(Q.startsWith("npm:")){let Y=Q.slice(4).trim(),{name:j}=Gf(Y);return{type:"npm",spec:Y,name:j}}if(Q.startsWith(".")||Q.startsWith("/")||Q==="~"||Q.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test(Q))return{type:"local",path:$};let J=Kf(Q);if(J)return J;let X=Ff(Q);if(X)return X;if(q7(Q))return{type:"official",slug:Q};if(Bh(Q))throw Error(`Unrecognized plugin source "${$}". Use --git for hostname-style repositories or pass an explicit local path such as ./github.com/owner/repo.`);return{type:"local",path:$}}function fh($){return $?n($,".cline","plugins"):n(Wh(),"plugins")}function Uh($,Z,Q){if(Z.type==="npm")return n($,M4,"npm",`${Q$(Z.name)}-${d2(Q)}`);if(Z.type==="git")return n($,M4,"git",Q$(Z.host),`${Q$(Z.path)}-${d2(Q)}`);if(Z.type==="remote")return n($,M4,"remote",`${Q$(Z.filename)}-${d2(Q)}`);if(Z.type==="official")return n($,M4,"official",`${Q$(Z.slug)}-${d2(Q)}`);return n($,M4,"local",`${Q$(W$(O7(Z.path)))}-${d2(Q)}`)}function Dh($,Z,Q){if($.type==="npm")return`npm:${$.spec}`;if($.type==="git")return`git:${$.repo}${$.ref?`#${$.ref}`:""}`;if($.type==="remote")return`remote:${$.url}`;if($.type==="official")return`official:${Q}#plugins/${$.slug}`;return`local:${v$(Z,O7($.path))}`}function Lh($,Z){if($.type==="npm")return $.name;if($.type==="git")return Q$(W$($.path));if($.type==="remote")return Q$(W$($.filename,Zh($.filename)));if($.type==="official")return $.slug;return Q$(W$(v$(Z,O7($.path))))}async function R4($,Z,Q={}){await new Promise((W,J)=>{let X=oy($,Z,{cwd:Q.cwd,stdio:["ignore","ignore","pipe"],env:process.env,windowsHide:!0}),Y="";X.stderr.on("data",(j)=>{Y+=String(j)}),X.on("error",J),X.on("close",(j)=>{if(j===0){W();return}let V=Y.trim();J(Error(`${$} ${Z.join(" ")} failed with exit code ${j}${V?`: ${V}`:""}`))})})}function Df($){let Z=n($,"package.json");if(!O1(Z))return null;try{return JSON.parse($h(Z,"utf8"))}catch{return null}}function _h($){let Z=$?.cline?.plugins;if(!Array.isArray(Z))return[];return Z.flatMap((Q)=>{if(typeof Q==="string")return[Q];return Q.paths??[]})}async function zh($){let Z=n($,"package.json"),Q=Df($);if(!Q)return;let W=!1;for(let J of Yh){let X=Q[J];if(!X||typeof X!=="object")continue;for(let Y of Object.keys(X)){if(!Y.startsWith(Bf))continue;delete X[Y],delete Q.peerDependenciesMeta?.[Y],W=!0}if(Object.keys(X).length===0)delete Q[J]}if(Q.peerDependenciesMeta){for(let J of Object.keys(Q.peerDependenciesMeta)){if(!J.startsWith(Bf))continue;delete Q.peerDependenciesMeta[J],W=!0}if(Object.keys(Q.peerDependenciesMeta).length===0)delete Q.peerDependenciesMeta}if(!W)return;await z7(Z,`${JSON.stringify(Q,null,2)}
729
- `,"utf8")}function Th($,Z){let Q=n($,"node_modules","@cline");if(!O1(Q))return;for(let W of _f(Q)){if(`@cline/${W.name}`===Z)continue;_7(n(Q,W.name),{recursive:!0,force:!0})}}function Lf($){let Z=_h(Df($)).map((X)=>v$($,X)).filter((X)=>O1(X)&&iX(X).isFile()&&L7(X));if(Z.length>0)return Z;let Q=Jh($);if(Q?.length)return Q;let W=[],J=[$];while(J.length>0){let X=J.pop();if(!X)continue;for(let Y of _f(X)){let j=n(X,Y.name);if(Y.name==="node_modules"||Y.name===".git")continue;if(Y.isDirectory()){J.push(j);continue}if(Y.isFile()&&!Y.name.startsWith(".")&&L7(j))W.push(j)}}return W.sort((X,Y)=>X.localeCompare(Y))}function _f($){try{return ey($,{withFileTypes:!0})}catch{return[]}}function Oh($,Z){let Q=Lf(Z);if(Q.length===0)throw Error(`No plugin entry files found in ${Z}`);return Q.map((W)=>`./${Uf(ff($,W))}`)}async function qh($,Z,Q){let W=Oh($,Z);return await z7(n($,"package.json"),JSON.stringify({...jh,name:Q,cline:{plugins:[{paths:W}]}},null,2),"utf8"),W}async function Mh($,Z,Q){let W=n(Z,T7);return await Af(W,{recursive:!0}),await z7(n(W,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await R4(Q,["install",$.spec,"--prefix",W,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),Th(W,$.name),n(W,"node_modules",$.name)}async function nX($,Z){if(!O1(n($,"package.json")))return;await zh($),await R4(Z,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function Rh($,Z,Q){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let W=n(Z,T7),J=["clone","--filter=blob:none"];if($.ref)J.push("--branch",$.ref);J.push("--",$.repo,W);try{await R4("git",J)}catch(X){if(!$.ref)throw X;await R4("git",["clone","--filter=blob:none","--",$.repo,W]),await R4("git",["checkout","--detach",$.ref],{cwd:W})}return await nX(W,Q),W}async function Eh($,Z,Q,W){let J=n(Z,"repo");await R4("git",["clone","--filter=blob:none","--depth","1","--",W,J]);let X=n(J,"plugins",$.slug);if(!O1(X)||!iX(X).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${W}`);let Y=n(Z,T7);return await pX(X,Y,{recursive:!0,filter:(j)=>{let V=W$(j);return V!==".git"&&V!=="node_modules"}}),_7(J,{recursive:!0,force:!0}),await nX(Y,Q),Y}function lX($){return Error(`Remote plugin file from ${$} exceeds the ${D7} byte limit`)}function Nh($){let Z=$.headers.get("content-length");if(!Z)return;let Q=Number(Z);if(!Number.isFinite(Q)||Q<0)return;return Q}async function wh($,Z){let Q=Nh($);if(Q!==void 0&&Q>D7)throw lX(Z);if(!$.body){let Y=Buffer.from(await $.text(),"utf8");if(Y.byteLength>D7)throw lX(Z);return Y}let W=$.body.getReader(),J=[],X=0;try{while(!0){let{done:Y,value:j}=await W.read();if(Y)break;let V=Buffer.from(j);if(X+=V.byteLength,X>D7)throw await W.cancel().catch(()=>{return}),lX(Z);J.push(V)}return Buffer.concat(J,X)}finally{W.releaseLock()}}async function Ch($,Z){let Q=new AbortController,W=setTimeout(()=>{Q.abort()},Hf);try{let J=await fetch($.url,{signal:Q.signal});if(!J.ok){let Y=J.statusText?` ${J.statusText}`:"";throw Error(`Failed to download plugin file from ${$.url}: ${J.status}${Y}`)}let X=await wh(J,$.url);return rX(Z,{recursive:!0}),await z7(n(Z,$.filename),X),Z}catch(J){if(J instanceof Error&&J.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${Hf}ms`);throw J}finally{clearTimeout(W)}}async function Ph($,Z,Q,W){let J=v$(Q,O7($.path));if(!O1(J))throw Error(`Plugin source path does not exist: ${J}`);let X=iX(J);if(X.isFile()){if(!L7(J))throw Error(`Plugin file must be .js or .ts: ${J}`);rX(Z,{recursive:!0});let j=n(Z,W$(J));return await pX(J,j),Z}if(!X.isDirectory())throw Error(`Plugin source must be a file or directory: ${J}`);let Y=n(Z,T7);return await pX(J,Y,{recursive:!0,filter:(j)=>{let V=W$(j);return V!==".git"&&V!=="node_modules"}}),await nX(Y,W),Y}function Sh($,Z){if(O1($)&&!Z)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function bh($,Z,Q){if(rX(Vf(Z),{recursive:!0}),!O1(Z)){U7($,Z);return}if(!Q)throw Error(`Plugin is already installed at ${Z}. Use --force to replace it.`);let W=n(Vf(Z),`.replace-${W$(Z)}-${Date.now()}-${process.pid}-${d2(`${Z}:${Math.random()}`)}`);U7(Z,W);try{U7($,Z)}catch(J){if(!O1(Z)&&O1(W))U7(W,Z);throw J}try{_7(W,{recursive:!0,force:!0})}catch{}}function yh($){let Z=$.transport;if(Z.type==="stdio")return!1;return Z.headers!==void 0&&Object.keys(Z.headers).length>0}function hh($){let Z=$.oauth?.tokens?.access_token;return typeof Z==="string"&&Z.trim().length>0}function kh($){let Z=$.metadata;if(!Z||Z.source!=="plugin"||typeof Z.pluginName!=="string"||typeof Z.pluginPath!=="string")return;return{pluginName:Z.pluginName,pluginPath:Z.pluginPath}}function R7($){let Z=new Set($.pluginPaths.map((J)=>v$(J)));if(Z.size===0)return[];let Q;try{Q=p0({filePath:$.settingsPath??Z0()})}catch{return[]}let W=[];for(let J of Q){let X=kh(J);if(!X||!Z.has(v$(X.pluginPath)))continue;let Y=J.transport.type;if(Y==="stdio")continue;if(yh(J)||hh(J))continue;W.push({name:J.name,pluginName:X.pluginName,pluginPath:X.pluginPath,transportType:Y,lastError:J.oauth?.lastError})}return W.sort((J,X)=>J.name.localeCompare(X.name))}async function aX($){let Z=$.source.trim(),Q=M7(Z,$.sourceType),W=$.cwd?.trim(),J=W?v$(W):process.cwd(),X=fh(W?J:void 0),Y=Hh($.officialPluginsRepo),j=Dh(Q,J,Y),V=Uh(X,Q,j),H=Lh(Q,J),B=n(X,M4,".tmp"),G=n(B,`${Date.now()}-${process.pid}-${d2(`${Z}:${Math.random()}`)}`),K=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;Sh(V,F),await Af(B,{recursive:!0});let A;try{if(Q.type==="npm")A=await Mh(Q,G,K);else if(Q.type==="git")A=await Rh(Q,G,K);else if(Q.type==="official")A=await Eh(Q,G,K,Y);else if(Q.type==="remote")A=await Ch(Q,G);else A=await Ph(Q,G,J,K);let L=(Q.type==="local"||Q.type==="remote")&&A===G?Lf(G).map((U)=>`./${Uf(ff(G,U))}`):await qh(G,A,H);if(L.length===0)throw Error(`No plugin entry files found for ${Z}`);bh(G,V,F);let f={source:Z,installPath:V,entryPaths:L.map((U)=>v$(V,U)),mcpSyncFailures:[],mcpOAuthCandidates:[]},D=await i5({pluginPaths:f.entryPaths,cwd:J,workspacePath:J});return f.mcpSyncFailures=D.failures,f.mcpOAuthCandidates=R7({pluginPaths:f.entryPaths}),f}catch(L){throw _7(G,{recursive:!0,force:!0}),L}}var cf={};N(cf,{updateLocalProvider:()=>y7,saveLocalProviderSettings:()=>WY,saveLocalProviderOAuthCredentials:()=>jY,resolveLocalClineAuthToken:()=>HY,refreshProviderModelsFromSource:()=>JY,normalizeOAuthProvider:()=>XY,loginLocalProvider:()=>YY,loginAndSaveLocalProviderOAuthCredentials:()=>VY,listLocalProviders:()=>ZY,getLocalProviderModels:()=>QY,ensureCustomProvidersLoaded:()=>P7,deleteLocalProvider:()=>h7,addLocalProvider:()=>$Y});import*as w0 from"@cline/llms";import{existsSync as Ih,mkdirSync as xh,readFileSync as gh,writeFileSync as mh}from"node:fs";import{mkdir as vh,readFile as ch,writeFile as uh}from"node:fs/promises";import{dirname as sX,join as dh}from"node:path";import*as h0 from"@cline/llms";import{ModelCapabilitySchema as lh,ProviderCapabilitySchema as ph,ProviderClientSchema as rh,ProviderProtocolSchema as ih}from"@cline/shared";import{z as a}from"zod";var nh=a.object({id:a.string().optional(),name:a.string().optional(),maxTokens:a.number().optional(),contextWindow:a.number().optional(),maxInputTokens:a.number().optional(),capabilities:a.array(lh).optional(),supportsVision:a.boolean().optional(),supportsAttachments:a.boolean().optional(),supportsReasoning:a.boolean().optional()}).passthrough(),ah=a.object({name:a.string(),baseUrl:a.string(),defaultModelId:a.string().optional(),protocol:ih.optional(),client:rh.optional(),capabilities:a.array(ph).optional(),modelsSourceUrl:a.string().optional()}).passthrough(),Tf=a.object({provider:ah.optional(),models:a.record(a.string(),nh).optional()}).passthrough(),Of=a.object({version:a.literal(1),providers:a.record(a.string(),Tf)}),sh=a.object({version:a.literal(1),providers:a.record(a.string(),a.unknown())}),E7=new Set;function qf($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function l2($){return dh(sX($.getFilePath()),"models.json")}function N7(){return{version:1,providers:{}}}function Mf($){let Z=sh.safeParse($);if(!Z.success)return N7();let Q={};for(let[W,J]of Object.entries(Z.data.providers)){let X=Tf.safeParse(J);if(X.success)Q[W]=X.data}return{version:1,providers:Q}}function oX($){if(!Ih($))return N7();try{let Z=gh($,"utf8");return Mf(JSON.parse(Z))}catch{}return N7()}async function E4($){try{let Z=await ch($,"utf8");return Mf(JSON.parse(Z))}catch{}return N7()}function Rf($,Z){xh(sX($),{recursive:!0});let Q=Of.parse(Z);mh($,`${JSON.stringify(Q,null,2)}
730
- `,"utf8")}async function w7($,Z){await vh(sX($),{recursive:!0});let Q=Of.parse(Z);await uh($,`${JSON.stringify(Q,null,2)}
731
- `,"utf8")}function Ef($,Z){return{id:$,name:Z.name??$,supportsAttachments:Z.capabilities?.includes("files"),supportsVision:Z.capabilities?.includes("images"),supportsReasoning:Z.capabilities?.includes("reasoning")||Z.thinkingConfig!=null}}function Nf($){if(!$||$.length===0)return;let Z=new Set;if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("tools"))Z.add("tools");return Z.size>0?[...Z]:void 0}function wf($){let Z=new Set;if(!$||$.length===0)return[...Z];if($.includes("streaming"))Z.add("streaming");if($.includes("tools"))Z.add("tools");if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("vision"))Z.add("images"),Z.add("files");return[...Z]}function oh($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function Cf($,Z){return $??Z??"openai-chat"}function Pf($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function Sf($,Z,Q){let W=new Set(Z?.capabilities??Q??[]);if(Z?.supportsVision)W.add("images");if(Z?.supportsAttachments)W.add("files");if(Z?.supportsReasoning)W.add("reasoning");return{id:$,name:Z?.name??$,maxTokens:Z?.maxTokens,contextWindow:Z?.contextWindow,maxInputTokens:Z?.maxInputTokens,capabilities:W.size>0?[...W]:void 0}}function th($,Z){for(let[Q,W]of Object.entries(Z??{})){let J=W.id?.trim()||Q.trim();if(!J)continue;h0.registerModel($,J,Sf(J,W))}}function eh($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function $k($){return Object.assign({},...h0.resolveProviderModelCatalogKeys($).map((Q)=>h0.getGeneratedModelsForProvider(Q)))}function Zk($){let Z=$.provider.trim();if(!Z||h0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let W=h0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],J=$k(Z),X=wf($.capabilities),Y=X.length>0?X:void 0,j=$.model?.trim(),V={...J,...W?.models??{}};if(j)V[j]=eh(j,V[j],Y);let H=Object.keys(V).filter(Boolean),B=j||H[0];if(!B)return;let G=Cf($.protocol,W?.provider.protocol),K=Pf($.client,G,W?.provider.client);h0.registerProvider({provider:{id:Z,name:W?.provider.name??qf(Z),description:W?.provider.description,protocol:G,client:K,baseUrl:Q,modelsSourceUrl:W?.provider.modelsSourceUrl,defaultModelId:B,capabilities:Nf($.capabilities)??W?.provider.capabilities,source:"file"},models:V})}function C7($){for(let Z of Object.values($.providers))Zk(Z.settings)}function Z9($,Z){let Q=Z.models??{};if(!oh(Z.provider)){th($,Q);return}let W=wf(Z.provider.capabilities),J=Object.entries(Q).map(([H,B])=>({id:B.id?.trim()||H.trim(),model:B})).filter(({id:H})=>H.length>0),X=Z.provider.defaultModelId?.trim()||J[0]?.id||"default",Y=Cf(Z.provider.protocol,void 0),j=Pf(Z.provider.client,Y,void 0),V=Object.fromEntries(J.map(({id:H,model:B})=>[H,{...Sf(H,B,W.length>0?W:void 0),status:"active"}]));h0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||qf($),protocol:Y,client:j,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:X,capabilities:Nf(Z.provider.capabilities),source:"file"},models:V})}function bf($){let Z=l2($);if(E7.has(Z))return;let Q=oX(Z);for(let[W,J]of Object.entries(Q.providers))Z9(W,J);E7.add(Z)}async function P7($){let Z=l2($);if(E7.has(Z))return;let Q=await E4(Z);for(let[W,J]of Object.entries(Q.providers))Z9(W,J);E7.add(Z)}var hf="cline-pass";function Qk($){return $.apiKey??$.auth?.apiKey}function Wk($){return($.auth?.accessToken?.trim()??"").length>0}function kf($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function Jk($){let Z=$.split(/\s+/).filter(Boolean);if(Z.length===0)return"?";if(Z.length===1)return Z[0].slice(0,2).toUpperCase();return`${Z[0][0]}${Z[1][0]}`.toUpperCase()}function Xk($){let Z=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let W of $)Q=Q*31+W.charCodeAt(0)>>>0;return Z[Q%Z.length]}function If($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>Ef(Z,Q))}async function Yk($,Z){let Q=await w0.getModelsForProvider($),W=$===hf;if(!Z&&!W)return Q;let J=await Z5($,{loadLatestOnInit:W,loadPrivateOnAuth:!0,failOnError:!1},Z);if($==="litellm"&&J?.knownModels)return J.knownModels;if(W&&J?.knownModels)return J.knownModels;return J?.knownModels?{...Q,...J.knownModels}:Q}function tX($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function jk($){if(!$?.length)return;return[...new Set($)]}function Vk($,Z){return jk([...$??[],...Z??[]])}function Hk($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function Bk($){if(!$||typeof $!=="object")return!1;let Z=$;return typeof Z.path==="string"&&Z.path.trim().length>0&&typeof Z.label==="string"&&Z.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(Z.type))}function Gk($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(Bk)}var S7={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},yf={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function Kk($){if(!$)return[S7];if($.source!=="system")return $.baseUrl?[S7,yf]:[S7];let Z=[];if($.env?.length)Z.push(S7);if($.baseUrl)Z.push(yf);return Z}function Fk($,Z){return Z.split(".").reduce((Q,W)=>{if(!Q||typeof Q!=="object")return;return Q[W]},$)}function Ak($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function fk($,Z,Q){if(!$?.length)return;let W={};for(let J of $){let Y=Ak(J.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:Fk(Z,J.path))??J.defaultValue;if(Y!==void 0)W[J.path]=Y}return W}function xf($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function eX($,Z){let Q=Z?.includes("vision")??!1,W=Z?.includes("reasoning")??!1;return Object.fromEntries($.map((J)=>[J,{id:J,name:J,supportsVision:Q,supportsAttachments:Q,supportsReasoning:W}]))}async function gf($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await iZ($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function mf($,Z){let Q=$.read(),W=!1;if(Q.providers[Z])delete Q.providers[Z],W=!0;if(Q.lastUsedProvider===Z)delete Q.lastUsedProvider,W=!0;if(W)$.write(Q);w0.unregisterProvider(Z)}async function $Y($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=Z.baseUrl.trim(),J=Z.apiKey?.trim()??"";if(!W&&!J){let A=l2($);if((await E4(A)).providers[Q]){let f=await h7($,{providerId:Q});return{providerId:Q,settingsPath:f.settingsPath,modelsPath:f.modelsPath,modelsCount:0}}return mf($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(w0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let X=Z.name.trim();if(!X)throw Error("name is required");if(!W)throw Error("baseUrl is required");let Y=tX(Z.models),j=Z.modelsSourceUrl?.trim(),V=await gf({providerId:Q,explicitModels:Y,modelsSourceUrl:j,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let H=Z.defaultModelId?.trim()&&V.includes(Z.defaultModelId.trim())?Z.defaultModelId.trim():V[0],B=Z.capabilities?.length?[...new Set(Z.capabilities)]:void 0,G=xf(Z.headers);$.saveProviderSettings({provider:Q,apiKey:J||void 0,baseUrl:W,headers:G,timeout:Z.timeoutMs,model:H,protocol:Z.protocol,client:Z.client},{setLastUsed:!1});let K=l2($),F=await E4(K);return F.providers[Q]={provider:{name:X,baseUrl:W,defaultModelId:H,protocol:Z.protocol,client:Z.client,capabilities:B,modelsSourceUrl:j},models:eX(V,B)},await w7(K,F),Z9(Q,F.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function y7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=l2($),J=await E4(W),X=J.providers[Q];if(!X){let q=$.getProviderSettings(Q);if(!q)throw Error(`provider "${Q}" does not exist`);let z=Z.modelsSourceUrl?.trim(),_=tX(Z.models)[0]??q.model?.trim();if(!_&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);X={provider:{name:Z.name?.trim()||kf(Q),baseUrl:Z.baseUrl?.trim()??q.baseUrl?.trim()??"",defaultModelId:_,protocol:q.protocol,client:q.client,capabilities:q.capabilities},models:_?eX([_],q.capabilities):{}}}if(!X.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let Y=Z.name?.trim()??X.provider.name.trim();if(!Y)throw Error("name is required");let j=Z.baseUrl?.trim()??X.provider.baseUrl.trim();if(!j)throw Error("baseUrl is required");let V=Z.capabilities===void 0?X.provider.capabilities:Z.capabilities===null?void 0:[...new Set(Z.capabilities)],H=Z.protocol===void 0?X.provider.protocol:Z.protocol??void 0,B=Z.client===void 0?X.provider.client:Z.client??void 0,G=tX(Z.models),K=Z.modelsSourceUrl===void 0?X.provider.modelsSourceUrl:Z.modelsSourceUrl?.trim()||void 0,F=Z.models!==void 0||Z.modelsSourceUrl!==void 0&&!!K,A=Object.keys(X.models??{}).map((q)=>q.trim()).filter(Boolean),L=await gf({providerId:Q,explicitModels:G,modelsSourceUrl:K,fallbackModelIds:A,shouldRecompute:F});if(L.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let f=Z.defaultModelId===void 0?X.provider.defaultModelId?.trim():Z.defaultModelId?.trim(),D=f&&L.includes(f)?f:L[0],T={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:j,model:D};if(H)T.protocol=H;else delete T.protocol;if(B)T.client=B;else delete T.client;if(Z.apiKey!==void 0){let q=Z.apiKey?.trim()??"";if(q)T.apiKey=q;else delete T.apiKey}if(Z.headers!==void 0){let q=xf(Z.headers);if(q)T.headers=q;else delete T.headers}if(Z.timeoutMs!==void 0)if(typeof Z.timeoutMs==="number")T.timeout=Z.timeoutMs;else delete T.timeout;return $.saveProviderSettings(T,{setLastUsed:!1}),J.providers[Q]={provider:{name:Y,baseUrl:j,defaultModelId:D,protocol:H,client:B,capabilities:V,modelsSourceUrl:K},models:eX(L,V)},await w7(W,J),Z9(Q,J.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W,modelsCount:L.length}}async function h7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=l2($),J=await E4(W);if(!J.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete J.providers[Q],await w7(W,J),w0.unregisterProvider(Q),mf($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W}}async function ZY($,Z={}){let Q=$.read(),W=w0.getProviderIds(),J=await Promise.all(W.map(async(Y)=>{let[j,V]=await Promise.all([w0.getProvider(Y),w0.getModelsForProvider(Y)]),H=If(V),B=Q.providers[Y]?.settings,G=j?.name??kf(Y),K=Vk(j?.capabilities,B?.capabilities),F=Gk(j?.metadata)??Kk(j);return{provider:{id:Y,name:G,models:H.length,color:Xk(Y),letter:Jk(G),enabled:Boolean(B),apiKey:B?Qk(B):void 0,oauthAccessTokenPresent:B?Wk(B):void 0,baseUrl:B?.baseUrl??j?.baseUrl,defaultModelId:j?.defaultModelId,protocol:B?.protocol??j?.protocol,client:B?.client??j?.client,capabilities:K,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:F,configValues:fk(F,B,j),modelList:H},rank:Hk(j?.metadata)}}));J.sort((Y,j)=>{if(Y.rank!==j.rank)return Y.rank-j.rank;return Y.provider.name.localeCompare(j.provider.name)||Y.provider.id.localeCompare(j.provider.id)});let X=J.map((Y)=>Y.provider);if(Z.isClinePassEnabled!==!0)X=X.filter((Y)=>Y.id!==hf);return{providers:X,settingsPath:$.getFilePath()}}async function QY($,Z){let Q=$.trim(),W=await Yk(Q,Z),J=If(W);return{providerId:Q,models:J}}function b7($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function vf($,Z){if(!b7(Z))return b7($)?{...$}:void 0;let Q=b7($)?{...$}:{};for(let[W,J]of Object.entries(Z)){if(J==null||J===""){delete Q[W];continue}if(b7(J)){let X=vf(Q[W],J);if(X&&Object.keys(X).length>0)Q[W]=X;else delete Q[W];continue}Q[W]=J}return Object.keys(Q).length>0?Q:void 0}function WY($,Z){let Q=Z.providerId.trim();if(Z.enabled===!1){let X=$.read();if(delete X.providers[Q],X.lastUsedProvider===Q)delete X.lastUsedProvider;return $.write(X),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let J={...$.getProviderSettings(Q)??{},provider:Q};for(let X of["apiKey","baseUrl","model","region"])if(Object.hasOwn(Z,X)&&typeof Z[X]==="string")if(Z[X].trim().length===0)delete J[X];else J[X]=Z[X];for(let X of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(Z,X))J[X]=Z[X];for(let X of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(Z,X)&&Z[X]!=null){let Y=vf(J[X],Z[X]);if(Y)J[X]=Y;else delete J[X]}return $.saveProviderSettings(J,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function JY($,Z){let Q=Z.trim(),W=$.getProviderSettings(Q),X=w0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,Y=W?.baseUrl?.trim()||X?.baseUrl?.trim(),j=nZ(Y,X?.baseUrl,X?.modelsSourceUrl);if(!W||!X||!Y||!j)return{providerId:Q,refreshed:!1};let V=await y7($,{providerId:Q,name:X.name,baseUrl:Y,apiKey:W.apiKey,headers:W.headers??null,timeoutMs:W.timeout??null,modelsSourceUrl:j,protocol:W.protocol??X.protocol??null,client:W.client??X.client??null,capabilities:W.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:V.modelsCount}}function XY($){let Z=$.trim().toLowerCase(),Q=j0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function YY($,Z,Q,W){let J=j0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let X=n8({onPrompt:async(Y)=>Y.defaultValue??"",openUrl:Q,onOpenUrlError:({error:Y})=>{throw Y instanceof Error?Y:Error(String(Y))}});return J.login({settings:Z,callbacks:X,telemetry:W})}function jY($,Z,Q,W,J){return W2({manager:$,providerId:Z,settings:Q,credentials:W,setLastUsed:J?.setLastUsed})}async function VY($,Z,Q,W){let J=n8({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return X6($,Z,{callbacks:J,telemetry:W})}function HY($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}var uf={};N(uf,{getProviderConfigFields:()=>BY});import*as k7 from"@cline/llms";var Uk=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],Dk={"openai-compatible":{description:"For Azure AI Foundry deployments, use a Base URL ending at /openai/deployments/<deployment> and set the Azure API version.",fields:{azureApiVersion:{label:"Azure API Version (optional)",placeholder:"2025-01-01-preview",note:"Required for Azure AI Foundry deployment URLs.",optional:!0}}},vertex:{mode:"replace",description:"Vertex AI can use Google Cloud Application Default Credentials with a project/region. An API key is optional for supported Gemini models.",fields:{gcpProjectId:{label:"Google Cloud Project ID",placeholder:"my-gcp-project"},gcpRegion:{label:"Google Cloud Region",placeholder:"us-central1",defaultValue:"us-central1"},apiKey:{label:"API Key (optional)",placeholder:"Leave blank to use Google Cloud credentials",optional:!0}}},bedrock:{mode:"replace",description:"AWS region is required for Bedrock. It can be auto-filled from AWS_REGION, AWS_DEFAULT_REGION, or ~/.aws/config.",fields:{awsRegion:{label:"AWS Region",placeholder:"us-east-1"},apiKey:{label:"AWS Bedrock API Key (optional)",placeholder:"Leave blank to use AWS profile/default chain",optional:!0},awsProfile:{label:"AWS Profile Name (optional)",placeholder:"default",optional:!0}}},ollama:{fields:{apiKey:{note:"Keep empty if no API key for local inference."}}},sapaicore:{mode:"replace",description:"SAP AI Core uses OAuth client credentials and an AI Core API URL, not a generic API key.",fields:{baseUrl:{label:"AI Core Base URL",placeholder:"https://api.ai.<region>.aws.ml.hana.ondemand.com"},sapClientId:{label:"Client ID",placeholder:"sb-...|xsuaa_std!b..."},sapClientSecret:{label:"Client Secret",placeholder:"SAP AI Core client secret"},sapTokenUrl:{label:"Token URL",placeholder:"https://<subdomain>.authentication.sap.hana.ondemand.com"},sapResourceGroup:{label:"Resource Group",placeholder:"default",optional:!0},sapDeploymentId:{label:"Deployment ID",placeholder:"SAP AI Core deployment id",optional:!0}}}};function Lk($,Z){let Q={};for(let W of Uk){let J=$[W],X=Z[W];if(J||X)Q[W]={...J,...X}}return Q}function _k($){let Z=Dk[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:Lk($.fields,Z.fields)}}var zk=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function Tk($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return zk.has($)}function BY($){let Z=k7.normalizeProviderId($);if(Q2(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=k7.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:Z,authMethod:"local",fields:{}};let W=Q?.provider.baseUrl,J={apiKey:{}};if(Tk(Z,Q))J.baseUrl={defaultValue:W};return _k({providerId:Z,authMethod:"api-key",fields:J})}var rf={};N(rf,{resolveLegacyClineAuth:()=>FY,migrateLegacyProviderSettings:()=>Q9});import{existsSync as Ok,readFileSync as qk}from"node:fs";import{dirname as Mk,join as GY}from"node:path";import*as N4 from"@cline/llms";import{resolveClineDataDir as Rk}from"@cline/shared/storage";var I7="openai",pf=N4.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,df=128000;function FY($){let Z=$?.trim();if(!Z)return;try{let Q=JSON.parse(Z);if(!Q)return;let W=typeof Q.expiresAt==="number"&&Number.isFinite(Q.expiresAt)?Q.expiresAt<10000000000?Q.expiresAt*1000:Q.expiresAt:void 0;return{accessToken:Q.idToken,refreshToken:Q.refreshToken,expiresAt:W,accountId:Q.userInfo?.id}}catch{return}}function b($){let Z=$?.trim();return Z?Z:void 0}function Ek($){return $==="credentials"?"iam":$}function lf($){if(!Ok($))return;try{let Z=qk($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function Nk($){let Z=$.dataDir??Rk(),Q=$.globalStatePath??GY(Z,"globalState.json"),W=$.secretsPath??GY(Z,"secrets.json"),J=lf(Q),X=lf(W);if(!J&&!X)return;return{globalState:J??{},secrets:X??{}}}function KY($){if($===I7)return pf;return $}function wk($,Z,Q,W){let J=Q==="plan"?"planMode":"actMode",X=Z===W?b(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,j={openrouter:`${J}OpenRouterModelId`,cline:`${J}ClineModelId`,openai:`${J}OpenAiModelId`,ollama:`${J}OllamaModelId`,lmstudio:`${J}LmStudioModelId`,litellm:`${J}LiteLlmModelId`,requesty:`${J}RequestyModelId`,together:`${J}TogetherModelId`,fireworks:`${J}FireworksModelId`,sapaicore:`${J}SapAiCoreModelId`,groq:`${J}GroqModelId`,baseten:`${J}BasetenModelId`,huggingface:`${J}HuggingFaceModelId`,"huawei-cloud-maas":`${J}HuaweiCloudMaasModelId`,oca:`${J}OcaModelId`,aihubmix:`${J}AihubmixModelId`,hicap:`${J}HicapModelId`,nousResearch:`${J}NousResearchModelId`,"vercel-ai-gateway":`${J}VercelAiGatewayModelId`}[Z];return(j?b(typeof $[j]==="string"?$[j]:void 0):void 0)??X}function Ck($,Z,Q){let W=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,J=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(b).find(Boolean),X=J==="none"||J==="low"||J==="medium"||J==="high"||J==="xhigh"?J:void 0,Y=typeof W==="number"&&Number.isInteger(W)&&W>0?W:void 0;if(!X&&Y===void 0)return;return{...X?{effort:X}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function Pk($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),W=b(Q.access_token),J=b(Q.refresh_token),X=b(Q.accountId);if(!W&&!J&&!X)return;return{...W?{apiKey:W}:{},auth:{...W?{accessToken:W}:{},...J?{refreshToken:J}:{},...X?{accountId:X}:{}}}}catch{return}}function Sk($){let Z=N4.getGeneratedModelsForProvider($),W=N4.getProviderCollectionSync($)?.provider.defaultModelId;if(W&&Z[W])return W;return Object.keys(Z)[0]??void 0}function bk($,Z,Q,W){let J=KY($),X=b(W==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),Y=wk(Z,$,W,X)??Sk(J),j=Ck(Z,J,W),V=typeof Z.requestTimeoutMs==="number"&&Number.isInteger(Z.requestTimeoutMs)&&Z.requestTimeoutMs>0?Z.requestTimeoutMs:void 0,H={anthropic:Q.apiKey,cline:Q.clineApiKey,openai:Q.openAiApiKey,"openai-native":Q.openAiNativeApiKey,openrouter:Q.openRouterApiKey,bedrock:Q.awsBedrockApiKey,gemini:Q.geminiApiKey,ollama:Q.ollamaApiKey,deepseek:Q.deepSeekApiKey,requesty:Q.requestyApiKey,together:Q.togetherApiKey,fireworks:Q.fireworksApiKey,qwen:Q.qwenApiKey,doubao:Q.doubaoApiKey,mistral:Q.mistralApiKey,litellm:Q.liteLlmApiKey,asksage:Q.asksageApiKey,xai:Q.xaiApiKey,moonshot:Q.moonshotApiKey,zai:Q.zaiApiKey,huggingface:Q.huggingFaceApiKey,nebius:Q.nebiusApiKey,sambanova:Q.sambanovaApiKey,cerebras:Q.cerebrasApiKey,groq:Q.groqApiKey,"huawei-cloud-maas":Q.huaweiCloudMaasApiKey,baseten:Q.basetenApiKey,"vercel-ai-gateway":Q.vercelAiGatewayApiKey,dify:Q.difyApiKey,minimax:Q.minimaxApiKey,hicap:Q.hicapApiKey,aihubmix:Q.aihubmixApiKey,nousResearch:Q.nousResearchApiKey,oca:Q.ocaApiKey},B={};if($==="openai-codex")Object.assign(B,Pk(Q));if($==="cline")try{let D=b(Q["cline:clineAccountId"]);if(D)B.auth={...B.auth??{},...FY(D)}}catch{}if($===I7&&Z.openAiHeaders)B.headers=Z.openAiHeaders;if($==="bedrock"){let D=Ek(Z.awsAuthentication),U=D==="profile"||Z.awsUseProfile===!0;B.aws={accessKey:b(Q.awsAccessKey),secretKey:b(Q.awsSecretKey),sessionToken:b(Q.awsSessionToken),region:b(Z.awsRegion),authentication:D,profile:U?b(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:b(Z.awsBedrockEndpoint),customModelBaseId:b(W==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")B.gcp={projectId:b(Z.vertexProjectId),region:b(Z.vertexRegion)};if($===I7&&(Z.azureApiVersion||Z.azureIdentity!==void 0))B.azure={apiVersion:b(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let D=Z.sapAiCoreUseOrchestrationMode??!0;B.sap={clientId:b(Q.sapAiCoreClientId),clientSecret:b(Q.sapAiCoreClientSecret),tokenUrl:b(Z.sapAiCoreTokenUrl),resourceGroup:b(Z.sapAiResourceGroup),deploymentId:D?void 0:b(W==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:D}}if($==="oca"){B.oca={mode:Z.ocaMode};let D=b(Q.ocaRefreshToken);if(D)B.auth={...B.auth??{},refreshToken:D}}if($==="qwen")B.apiLine=Z.qwenApiLine;if($==="moonshot")B.apiLine=Z.moonshotApiLine;if($==="zai")B.apiLine=Z.zaiApiLine;if($==="minimax")B.apiLine=Z.minimaxApiLine;let G={anthropic:Z.anthropicBaseUrl,openai:Z.openAiBaseUrl,ollama:Z.ollamaBaseUrl,lmstudio:Z.lmStudioBaseUrl,litellm:Z.liteLlmBaseUrl,gemini:Z.geminiBaseUrl,requesty:Z.requestyBaseUrl,asksage:Z.asksageApiUrl,dify:Z.difyBaseUrl,oca:Z.ocaBaseUrl,aihubmix:Z.aihubmixBaseUrl,sapaicore:Z.sapAiCoreBaseUrl},K=b(H[$]),F=b(G[$]),A={provider:J,...K?{apiKey:K}:{},...Y?{model:Y}:{},...F?{baseUrl:F}:{},...j?{reasoning:j}:{},...V?{timeout:V}:{},...B},L=p8.safeParse(A);if(!L.success)return;return Object.keys(A).filter((D)=>D!=="provider").length>0?L.data:void 0}function yk($,Z){if($!==pf)return;if(!Z.baseUrl||!Z.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:Z.baseUrl,defaultModelId:Z.model},models:{[Z.model]:{id:Z.model,name:Z.model,contextWindow:df,maxInputTokens:df,capabilities:["streaming","tools","images"]}}}}function hk($,Z){let Q=new Set;for(let J of[$.actModeApiProvider,$.planModeApiProvider]){let X=b(J);if(X)Q.add(X)}if(b(Z.apiKey))Q.add("anthropic");if(b(Z.openRouterApiKey))Q.add("openrouter");if(b(Z.openAiApiKey))Q.add(I7);if(b(Z.openAiNativeApiKey))Q.add("openai-native");if(b(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(b(Z.geminiApiKey))Q.add("gemini");if(b(Z.ollamaApiKey))Q.add("ollama");if(b(Z.awsAccessKey)||b(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||b($.awsProfile))Q.add("bedrock");if(b($.vertexProjectId)||b($.vertexRegion))Q.add("vertex");if(b(Z.clineApiKey))Q.add("cline");let W=FY(b(Z["cline:clineAccountId"]));if(W?.accessToken||W?.refreshToken||W?.accountId)Q.add("cline");if(b(Z.ocaApiKey))Q.add("oca");if(b(Z.sapAiCoreClientId)||b(Z.sapAiCoreClientSecret)||b($.sapAiCoreTokenUrl)||b($.sapAiCoreBaseUrl)||b($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function Q9($){let Z=$.providerSettingsManager.read(),Q=Nk($);if(!Q)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let{globalState:W,secrets:J}=Q,X=W.mode==="plan"?"plan":"act",Y=hk(W,J),j=S$();j.providers={...Z.providers},j.lastUsedProvider=Z.lastUsedProvider;let V=new Date().toISOString(),H=0,B=GY(Mk($.providerSettingsManager.getFilePath()),"models.json"),G=oX(B),K=0;for(let L of Y){let f=KY(L);if(j.providers[f])continue;let D=bk(L,W,J,X);if(!D)continue;j.providers[f]={settings:D,updatedAt:V,tokenSource:"migration"},H+=1;let U=yk(f,D);if(U&&!G.providers[f])G.providers[f]=U,K+=1}if(H===0&&K===0)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let F=b(X==="plan"?W.planModeApiProvider:W.actModeApiProvider),A=F?KY(F):void 0;if(j.lastUsedProvider=Z.lastUsedProvider??(A&&j.providers[A]?A:Object.keys(j.providers)[0]),$.providerSettingsManager.write(j),K>0)Rf(B,G);return{migrated:H>0||K>0,providerCount:Object.keys(j.providers).length,lastUsedProvider:j.lastUsedProvider}}$7();_0();u9();var nf={};N(nf,{SessionVersioningService:()=>c$,SessionVersioningError:()=>k0});class k0 extends Error{code;constructor($,Z){super(Z);this.code=$;this.name="SessionVersioningError"}}function kk($){let Z=$.sessionId.trim();if(!Z)throw new k0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new k0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new k0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new k0("invalid_restore","checkpointRunCount must be a positive integer");return Z}class c${async restoreCheckpoint($){let Z=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,W=kk({sessionId:$.sessionId,restoreMessages:Z,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(W);if(!J)throw new k0("session_not_found",`Session ${W} not found`);let X=Z?await $.readMessages(W):void 0;if(Z&&X?.length===0)throw new k0("session_messages_not_found",`No messages found for session ${W}`);let Y=fX({session:J,messages:X,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:Z});if(Q)await($.applyWorkspaceCheckpoint??UX)(Y.cwd,Y.checkpoint);let j=U1({session:J,messages:X});if(!Z)return{checkpoint:Y.checkpoint,sourceSnapshot:j};let V=FX(J,$.checkpointRunCount),H=$.restore?.omitCheckpointMessageFromSession?AX(X??[],$.checkpointRunCount):Y.messages??[],B={sourceSession:J,sourceMessages:X,sourceSnapshot:j,plan:Y,restoredCheckpointMetadata:V,initialMessages:H,restoreMessages:Z,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new k0("invalid_restore","start is required when restore.messages is true");let G=$.buildStartInput?await $.buildStartInput(B,$.start):$.start,K=await $.startSession(G),F=$.getStartedSessionId?.(K);if(F)await($.retainCheckpointRefs??bG)(Y.cwd,F,V?.history??[]);let A=F&&$.readRestoredSession?await $.readRestoredSession(F):void 0;return{sessionId:F,startResult:K,messages:Y.messages,checkpoint:Y.checkpoint,sourceSnapshot:j,...A?{restoredSnapshot:U1({session:A,messages:H})}:{}}}}var af={};N(af,{FileTeamPersistenceStore:()=>x7});import{appendFileSync as Ik,existsSync as AY,mkdirSync as xk,readFileSync as gk,renameSync as mk,unlinkSync as vk,writeFileSync as ck}from"node:fs";import{join as fY}from"node:path";import{resolveTeamDataDir as uk}from"@cline/shared/storage";function dk($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class x7{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=dk($.teamName),Q=$.baseDir?.trim()||uk();this.dirPath=fY(Q,Z),this.statePath=fY(this.dirPath,"state.json"),this.taskHistoryPath=fY(this.dirPath,"task-history.jsonl")}loadState(){if(!AY(this.statePath))return;try{let $=gk(this.statePath,"utf8"),Z=JSON.parse($);if(Z.version!==1||!Z.teamState)return;for(let Q of Z.teammates??[])this.teammateSpecs.set(Q.agentId,Q);return AA(Z.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec($){this.teammateSpecs.set($.agentId,$)}removeTeammateSpec($){this.teammateSpecs.delete($)}persist($){if(!this.hasPersistableState($)){this.clearPersistedState();return}this.ensureDir();let Z={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Q=`${this.statePath}.tmp`;ck(Q,`${JSON.stringify(Z,null,2)}
732
- `,"utf8"),mk(Q,this.statePath)}appendTaskHistory($){let Z={};switch($.type){case"team_task_updated":Z=$.task;break;case"team_message":Z={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":Z={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":Z={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":Z={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":Z={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),Ik(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:Z})}
733
- `,"utf8")}ensureDir(){if(!AY(this.dirPath))xk(this.dirPath,{recursive:!0})}hasPersistableState($){let Z=$.exportState();if(this.teammateSpecs.size>0)return!0;if(Z.members.some((Q)=>Q.role==="teammate"))return!0;return Z.tasks.length>0||Z.mailbox.length>0||Z.missionLog.length>0}clearPersistedState(){if(AY(this.statePath))vk(this.statePath)}}var sf={};N(sf,{ChatViewStateSchema:()=>UY,ChatSummarySchema:()=>u7,ChatSessionStatusSchema:()=>m7,ChatSessionConfigSchema:()=>g7,ChatMessageSchema:()=>c7,ChatMessageRoleSchema:()=>v7});import{z as h}from"zod";var g7=h.object({workspaceRoot:h.string().min(1),cwd:h.string().optional(),provider:h.string().min(1),model:h.string().min(1),mode:h.enum(["act","plan"]).default("act"),apiKey:h.string(),systemPrompt:h.string().optional(),rules:h.string().optional(),maxIterations:h.number().int().positive().optional(),enableTools:h.boolean(),enableSpawn:h.boolean().optional(),enableTeams:h.boolean().optional(),autoApproveTools:h.boolean().optional(),missionStepInterval:h.number().int().positive().optional(),missionTimeIntervalMs:h.number().int().positive().optional()}),m7=h.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),v7=h.enum(["user","assistant","tool","system","status","error"]),c7=h.object({id:h.string().min(1),sessionId:h.string().nullable(),role:v7,content:h.string(),createdAt:h.number().int().nonnegative(),meta:h.object({stream:h.enum(["stdout","stderr"]).optional(),toolName:h.string().optional(),iteration:h.number().int().nonnegative().optional(),agentId:h.string().optional(),conversationId:h.string().optional(),hookEventName:h.string().optional(),inputTokens:h.number().int().nonnegative().optional(),outputTokens:h.number().int().nonnegative().optional(),checkpoint:h.object({ref:h.string(),createdAt:h.number().int().nonnegative(),runCount:h.number().int().positive(),kind:h.enum(["stash","commit"]).optional()}).optional()}).optional()}),u7=h.object({toolCalls:h.number().int().nonnegative(),tokensIn:h.number().int().nonnegative(),tokensOut:h.number().int().nonnegative()}),UY=h.object({sessionId:h.string().nullable(),status:m7,config:g7,messages:h.array(c7),rawTranscript:h.string(),error:h.string().nullable(),summary:u7});var of={};N(of,{CORE_BUILD_VERSION:()=>DY});var DY=rj;import{Agent as II,createAgentRuntime as xI}from"@cline/agents";var tf={};N(tf,{fetchClineRecommendedModels:()=>_Y,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>d7});import{getClineEnvironmentConfig as lk}from"@cline/shared";var pk=5000,d7={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}],clinePass:[]};function rk($){return{recommended:$.recommended.map((Z)=>({...Z,tags:[...Z.tags]})),free:$.free.map((Z)=>({...Z,tags:[...Z.tags]})),clinePass:$.clinePass.map((Z)=>({...Z,tags:[...Z.tags]}))}}function LY($){if(!$||typeof $!=="object")return null;let Z=$;if(typeof Z.id!=="string"||Z.id.length===0)return null;return{id:Z.id,name:typeof Z.name==="string"&&Z.name.length>0?Z.name:Z.id,description:typeof Z.description==="string"?Z.description:"",tags:Array.isArray(Z.tags)?Z.tags.filter((Q)=>typeof Q==="string"):[]}}function ik($){if(!$||typeof $!=="object")return null;let Z=$,Q=Array.isArray(Z.recommended)?Z.recommended:[],W=Array.isArray(Z.free)?Z.free:[],J=Array.isArray(Z.clinePass)?Z.clinePass:[],X=Q.map(LY).filter((V)=>V!==null),Y=W.map(LY).filter((V)=>V!==null),j=J.map(LY).filter((V)=>V!==null);if(X.length===0&&Y.length===0&&j.length===0)return null;return{recommended:X,free:Y,clinePass:j}}function nk($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=lk().apiBaseUrl;try{return($.providerSettingsManager??new q1).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function ak($,Z,Q){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await $(Z,{signal:W.signal})}finally{clearTimeout(J)}}async function _Y($={}){try{let Z=nk($),Q=$.fetchImpl??fetch,W=await ak(Q,`${Z}/api/v1/ai/cline/recommended-models`,$.timeoutMs??pk);if(!W.ok)throw Error(`HTTP ${W.status}`);let J=await W.json(),X=ik(J);if(X)return X}catch{}return rk(d7)}var ef={};N(ef,{loadLlmsConfigFromFile:()=>TY,defineLlmsConfig:()=>zY});import{readFile as sk}from"node:fs/promises";import ok from"node:path";function zY($){return $}async function TY($){let Z=ok.resolve($),Q=await sk(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(J){let X=J instanceof Error?J.message:String(J);throw Error(`Failed to parse JSON config at "${Z}": ${X}`)}return tk(W,Z)}function tk($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let W=$.providers;if(!Array.isArray(W))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!W.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}var XU={};N(XU,{createLlmsSdk:()=>qY,DefaultLlmsSdk:()=>W9});import{BUILT_IN_PROVIDER_IDS as QU,createHandler as ZI,createHandlerAsync as QI,getProviderCollection as WI,hasProvider as WU,registerAsyncHandler as JI,registerHandler as XI,registerModel as YI,registerProvider as JU}from"@cline/llms";function $U($){return $?{...$}:{}}function ek($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function $I($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function ZU($){let Z=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:Z,defaultModel:$.collection.provider.defaultModelId,modelCount:Z.length}}class OY{providers=new Map;register($){$I($.id,$.models);let Z=$.defaultModel??$.models[0];if(!Z)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(Z))throw Error(`Default model "${Z}" is not included in configured models for "${$.id}".`);let Q=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Q?.models??[],...$.models]),defaultModel:Z,defaults:{...Q?.defaults??{},...$U($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:ek($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...$U($.settings)}})}registerModel($,Z){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([Z]),defaultModel:Z,defaults:{}});return}Q.models.add(Z)}createHandlerConfig($){let Z=this.require($.providerId),Q=$.modelId??Z.defaultModel;if(!Z.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...Z.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,Z){return this.providers.get($)?.models.has(Z)??!1}require($){let Z=this.providers.get($);if(!Z)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return Z}}class W9{configuredProviders=new OY;constructor($){this.applyConfig($)}createHandler($){return ZI(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return QI(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(JU($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)XI($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)JI($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let Z=$.exposeModels??Object.keys($.models),Q=$.defaultModel??Z[0];if(!Q)throw Error(`Provider "${$.id}" must define a default model.`);JU({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Q,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:Z,defaultModel:Q,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){YI($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...QU]}async getBuiltInProviders(){return(await Promise.all(QU.map((Z)=>WI(Z)))).filter((Z)=>Z!==void 0).map((Z)=>ZU({collection:Z}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,Z){return this.configuredProviders.hasModel($,Z)}applyConfig($){for(let Z of $.providers)this.configuredProviders.registerSelectionConfig(Z);for(let Z of $.models??[])this.registerModel(Z);for(let Z of $.customProviders??[])this.registerProvider(Z);for(let Z of this.configuredProviders.list()){let Q=WU(Z.id),W=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,J=typeof W==="string"&&WU(W);if(!Q&&!J)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function qY($){return new W9($)}UW();async function jI(){return Promise.resolve().then(() => ($7(),IA))}function uI(){return new Date().toISOString()}var dI="cline",lI="cline-pass";function pI($){if(FU($)!=="providers.json")return;let Z=EY($);if(FU(Z)!=="settings")return;return EY(Z)}class q1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??cI(),this.dataDir=$.dataDir??pI(this.filePath),this.dataDir||!$.filePath)Q9({providerSettingsManager:this,dataDir:this.dataDir});if(bf(this),C7(this.read()),RY(this.filePath))try{KU(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!RY(this.filePath))return S$();try{let $=mI(this.filePath,"utf8"),Z=JSON.parse($),Q=r8.safeParse(Z);if(Q.success)return C7(Q.data),Q.data}catch{}return S$()}write($){let Z=r8.parse($),Q=EY(this.filePath);if(!RY(Q))gI(Q,{recursive:!0,mode:448});vI(this.filePath,`${JSON.stringify(Z,null,2)}
734
- `,"utf8");try{KU(this.filePath,384)}catch{}C7(Z)}saveProviderSettings($,Z={}){let Q=p8.parse($),W=this.read(),J=Q.provider,X=Z.setLastUsed!==!1,Y=W.providers[J],j=Z.tokenSource??Y?.tokenSource??"manual",V={...W,providers:{...W.providers,[J]:{settings:Q,updatedAt:uI(),tokenSource:j}},lastUsedProvider:X?J:W.lastUsedProvider};return this.write(V),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,J=j0(Z)?.storageProviderId;if(!J||J===Z)return Q;let X=$.providers[J]?.settings;if(!X)return Q;return p8.parse({...X.auth?{auth:X.auth}:{},...X.apiKey?{apiKey:X.apiKey}:{},...X.baseUrl?{baseUrl:X.baseUrl}:{},...Q??{},provider:Z})}getProviderSettings($){let Z=this.read();return this.resolveProviderSettings(Z,$)}resolveLastUsedProviderId($,Z){let Q=$.lastUsedProvider;if(Q===lI&&Z.isClinePassEnabled===!1)return dI;return Q}getLastUsedProviderSettings($={}){let Z=this.read(),Q=this.resolveLastUsedProviderId(Z,$);if(!Q)return;return this.resolveProviderSettings(Z,Q)}getProviderConfig($,Z){let Q=this.getProviderSettings($);if(!Q)return;return l0(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return l0(Z,$)}async refreshCatalog(){try{await d8({})}catch{}}}_0();J8();function rI($,Z){let Q=$?.expiresAt,W=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===W}class i7 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 NY{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new q1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=j0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let W=this.refreshInFlight.get(Z);if(W)return W;let J=this.resolveProviderApiKeyInternal($,Z,Q).catch((X)=>{throw X}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,J),J}async resolveProviderApiKeyInternal($,Z,Q){let W=j0($);if(!W)return null;let J=this.providerSettingsManager.getProviderSettings(Z);if(!J)return null;let X=Y6($,J);if(!X)return null;let Y=await W.refresh({settings:J,credentials:X,forceRefresh:Q,telemetry:this.telemetry});if(!Y)throw new i7($);let j=W2({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:Y,setLastUsed:!1,save:!1}),V=!rI(J.auth,j.auth);if(V)this.providerSettingsManager.saveProviderSettings(j,{setLastUsed:!1,tokenSource:"oauth"});return{apiKey:W.getApiKey(j)??Y.access,accountId:Y.accountId,refreshed:V}}}import{normalizeUserInput as iI}from"@cline/shared";import{nanoid as nI}from"nanoid";class AU{list($){return $?s0($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((V)=>V.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:s0($),updated:!1};let J=$.pendingPrompts[W];if(!J)return{sessionId:Z.sessionId,prompts:s0($),updated:!1};let X=Z.prompt===void 0?J.prompt:iI(Z.prompt).trim();if(!X)throw Error("prompt cannot be empty");let Y=Z.delivery??J.delivery,j={...J,prompt:X,mode:Z.mode??J.mode,delivery:Y};return $.pendingPrompts.splice(W,1),aI($,j,W,J.delivery),{sessionId:Z.sessionId,prompts:s0($),prompt:n7(j),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((X)=>X.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:s0($),removed:!1};let[J]=$.pendingPrompts.splice(W,1);return{sessionId:Z.sessionId,prompts:s0($),prompt:J?n7(J):void 0,removed:!0}}enqueue($,Z){let{prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y}=Z,j=$.pendingPrompts.findIndex((V)=>V.prompt===Q);if(j>=0){let[V]=$.pendingPrompts.splice(j,1),H={...V,prompt:Q,mode:W??V.mode,userImages:X??V.userImages,userFiles:Y??V.userFiles};if(J==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...H,delivery:"steer"});else $.pendingPrompts.push(H)}else{let V={id:`pending_${Date.now()}_${nI(5)}`,prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return s0($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((W)=>W.delivery==="steer");if(Z<0)return{prompts:s0($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:s0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:s0($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),s0($)}clear($){return $.pendingPrompts.length=0,[]}}class wY{deps;service=new AU;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}delete($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}enqueue($,Z){let Q=this.deps.getSession($);if(!Q||Q.aborting)return;this.service.enqueue(Q,Z),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let Z=this.deps.getSession($);if(!Z)return;let{entry:Q}=this.service.consumeSteer(Z);if(!Q)return;return this.emitPrompts(Z),this.emitSubmitted(Z,Q),Q}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:s0($)}})}scheduleDrain($,Z){if(Z.pendingPrompts.length===0||Z.aborting||Z.drainingPendingPrompts||!Z.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let Z=this.deps.getSession($);if(!Z)return;if(Z.aborting||Z.drainingPendingPrompts)return;if(!Z.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(Z);if(!Q)return;this.emitPrompts(Z),this.emitSubmitted(Z,Q),Z.drainingPendingPrompts=!0;let W=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{W=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,W&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=n7(Z);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}})}}function n7($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function s0($){return $.pendingPrompts.map(n7)}function aI($,Z,Q,W){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(W==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}_0();class PY{deps;constructor($){this.deps=$}dispatchAgentEvent($,Z,Q){let W=this.deps.getSession($),J={sessionId:$,config:Z,liveSession:W,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},X=x3(Q),Y=!!W&&(!X.agentId||X.agentId===CY(W.agent));g3(J,Q,Y?{isPrimaryAgentEvent:!0,agentId:CY(W.agent),conversationId:W.agent.getConversationId(),...W?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(eJ(Q,Z),Z.type==="agent_event"){let W={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};g3(W,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let W=r1({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:CY(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(W)H$(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...W})}}if(await $X($,Z,this.deps.invokeBackendOptional),Q)ZX(Q,$,Z,this.deps.emit)}async handlePluginEvent($,Z,Q){if(Z.name==="plugin_log"){this.handlePluginLog($,Z.payload);return}if(Z.name==="automation_event"){let V=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!V)return;let H=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!H)return;await V.ingestEvent(H);return}if(Z.name!=="steer_message"&&Z.name!=="queue_message"&&Z.name!=="pending_prompt")return;let W=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0,J=typeof W?.sessionId==="string"&&W.sessionId.trim().length>0?W.sessionId.trim():$,X=typeof W?.prompt==="string"?W.prompt.trim():"";if(!X)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":W?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(J,{prompt:X,delivery:Y})}handlePluginLog($,Z,Q){let W=this.deps.getSession($),J=Q??W?.config.extensionContext?.logger??W?.config.logger;if(!J||!Z||typeof Z!=="object")return;let X=Z,Y=typeof X.message==="string"?X.message:"";if(!Y)return;let j=X.metadata&&typeof X.metadata==="object"?{...X.metadata}:{};if(j.sessionId??=$,typeof X.pluginName==="string"&&X.pluginName)j.pluginName=X.pluginName;if(X.level==="debug"){J.debug(Y,j);return}if(X.level==="error"){if(J.error)J.error(Y,j);else J.log(Y,{...j,severity:"error"});return}J.log(Y,j)}}function CY($){return $.getAgentId()}function SY($){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:R$($.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 bY($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function fU($,Z,...Q){let W=bY($,Z);if(!W)throw Error(`session service method not available: ${Z}`);return Promise.resolve(W.apply($,Q))}async function UU($,Z,...Q){let W=bY($,Z);if(!W)return;await Promise.resolve(W.apply($,Q))}async function DU($,Z,...Q){let W=bY($,Z);if(!W)return;return await Promise.resolve(W.apply($,Q))}$1();_0();function yY($,Z,Q){return{onSubAgentEvent:(W)=>$.onAgentEvent(Q,Z,W),onSubAgentStart:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(W.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let X=r1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId});if(X)H$(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...X});v4(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:W.parentAgentId,agentId:W.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",Q,W)},onSubAgentEnd:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime,X=$.subAgentStarts.get(W.subAgentId),Y=X?Date.now()-X.startedAt:0,j=W.result?.text?W.result.text.split(`
735
- `).length:0;v4(Z.telemetry,{event:"ended",ulid:Q,durationMs:Y,outputLines:j,errorMessage:W.error?String(W.error):void 0,agentId:W.subAgentId,parentId:W.parentAgentId,...r1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId})}),$.subAgentStarts.delete(W.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,W)}}}function hY($,Z,Q,W){let J=yY($,Z,Q);return q$({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let Y=Z.enableTools?U2({cwd:Z.cwd,...u0[l1({mode:Z.mode})],executors:W}):[];if(Z.enableSpawnAgent)Y.push(hY($,Z,Q,W));return y1(Y)},...J})}import{readFile as sI,stat as oI}from"node:fs/promises";var tI=20480000;async function LU($){let Z=await oI($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>tI)throw Error("File is too large to read into context.");let Q=await sI($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var _U=5000;function V9($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Yx($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=V9(Z.inputTokens),W=V9(Z.outputTokens),J=V9(Z.cacheReadTokens),X=V9(Z.cacheWriteTokens),Y=V9(Z.totalCost);if(Q===void 0||W===void 0||J===void 0||X===void 0||Y===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:J,cacheWriteTokens:X,totalCost:Y}}function jx($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}class T1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new S5;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new c$;constructor($){let Z=$x();if(Z)Xx(Z);let Q=P0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new T4,this.createAgentInstance=$.createAgent??((W)=>new z$(W)),this.defaultCapabilities=M0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new q1,this.oauthTokenManager=$.oauthTokenManager??new NY({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new wY({getSession:(W)=>this.sessions.get(W),emit:(W)=>this.emit(W),send:(W)=>this.runTurn(W)}),this.pendingPrompts={list:async(W)=>this.pendingPromptsController.list(W.sessionId),update:async(W)=>this.pendingPromptsController.update(W),delete:async(W)=>this.pendingPromptsController.delete(W)},this.eventBridge=new PY({getSession:(W)=>this.sessions.get(W),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(W)=>this.emit(W),persistMessages:(W,J,X)=>{this.invoke("persistSessionMessages",W,J,X)},enqueuePendingPrompt:(W,J)=>this.pendingPromptsController.enqueue(W,J),invokeBackendOptional:(W,...J)=>this.invokeOptional(W,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.source??T0.CLI,Q=J0(),W=$.config.sessionId?.trim()??"",J=W||Qx(),X=await this.applyInitialOAuthCredentials($),Y=X.initialMessages??[],j=Y.length>0?b8(Y):D0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let H=kY(V,J),B=kY(H,`${J}.messages.json`),G=kY(H,`${J}.json`),K=R$($.config),F=b0.parse({version:1,session_id:J,source:Z,pid:process.pid,started_at:Q,status:"running",interactive:$.interactive===!0,provider:X.config.providerId,model:X.config.modelId,cwd:X.config.cwd,workspace_root:K,team_name:X.config.teamName,enable_tools:X.config.enableTools,enable_spawn:X.config.enableSpawnAgent,enable_teams:X.config.enableAgentTeams,prompt:X.prompt?.trim()||void 0,messages_path:B}),A;if(W.length>0&&Y.length>0&&!X.prompt?.trim()){let P=await this.invokeOptionalValue("readSessionManifest",J);if(P)F=P,A={manifestPath:G,messagesPath:P.messages_path||B,manifest:P}}let f=await this.seedAggregateUsageFromArtifacts({initialUsage:j,sessionDir:H,rootMessagesPath:A?.messagesPath??B,manifest:F});this.usageBySession.set(J,j),this.aggregateUsageBySession.set(J,f);let D=M0(this.defaultCapabilities,$.capabilities),U=D?.toolExecutors??this.toolExecutors,T=$.localRuntime,q=T?.extensionContext?.logger??T?.logger,z=T?.extensionContext?.automation,_,E={getSession:(P)=>this.sessions.get(P),subAgentStarts:this.subAgentStarts,onAgentEvent:(P,B0,G0)=>this.eventBridge.dispatchAgentEvent(P,B0,G0),invokeBackendOptional:(P,...B0)=>this.invokeOptional(P,...B0)};_=await WK({input:X,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:D,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(P)=>{if(P.name==="plugin_log"){this.eventBridge.handlePluginLog(J,P.payload,q);return}this.eventBridge.handlePluginEvent(J,P,z)},onTeamEvent:(P)=>{this.eventBridge.handleTeamEvent(J,P),_.config.onTeamEvent?.(P)},createSpawnTool:()=>hY(E,_.config,J,U),createSubAgentLifecycleCallbacks:(P)=>yY(E,P,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(P)=>{await this.persistSessionMetadata(J,()=>P)}});let C=await this.runtimeBuilder.build(_.runtimeBuilderInput),y=_.config,l=_.providerConfig;if(C.teamRuntime&&!y.teamName?.trim())y.teamName=C.teamRuntime.getTeamName();let o=[...C.tools,...y.extraTools??[]],t=C.extensions??_.extensions,Q0={sessionId:J,providerId:l.providerId,modelId:l.modelId,apiKey:l.apiKey,baseUrl:l.baseUrl,headers:l.headers,knownModels:l.knownModels,providerConfig:l,thinking:y.thinking,reasoningEffort:y.reasoningEffort??l.reasoningEffort,maxTokensPerTurn:y.maxTokensPerTurn,systemPrompt:y.systemPrompt,maxIterations:y.maxIterations,execution:y.execution,prepareTurn:F6(y),tools:o,hooks:_.hooks,extensions:t,hookErrorMode:y.hookErrorMode,initialMessages:_.effectiveInput.initialMessages,userFileContentLoader:LU,toolPolicies:_.toolPolicies,requestToolApproval:_.requestToolApproval?async(P)=>{let B0=_.requestToolApproval,G0=this.sessions.get(J);if(G0)await this.markTurnPending(G0);try{if(!B0)return{approved:!1,reason:"Tool approval callback is not configured."};return await B0(P)}finally{let C0=this.sessions.get(J);if(C0?.status==="pending")await this.markTurnRunning(C0)}}:void 0,telemetry:y.telemetry,onConsecutiveMistakeLimitReached:y.onConsecutiveMistakeLimitReached,completionPolicy:C.completionPolicy,consumePendingUserMessage:()=>{let P=this.pendingPromptsController.consumeSteer(J);return P?v5(P.prompt,P.mode??y.mode):void 0},logger:C.logger??y.logger,extensionContext:y.extensionContext,onEvent:(P)=>this.eventBridge.dispatchAgentEvent(J,y,P)};Q0.hooks={...Q0.hooks,onEvent:async(P)=>{if(await _.hooks?.onEvent?.(P),P.type!=="assistant-message")return;let B0=this.sessions.get(J);if(!B0)return;let G0=B0.agent.getMessages();try{await this.invoke("persistSessionMessages",J,G0,y.systemPrompt)}catch(C0){y.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:C0}),p2(y.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:C0,severity:"warn",handled:!0,context:{sessionId:J,providerId:y.providerId,modelId:y.modelId}})}}};let e0=this.createAgentInstance(Q0);if(Q0.onEvent)e0.subscribeEvents(Q0.onEvent);C.registerLeadAgent?.(e0);let l$=r1({agentId:e0.getAgentId(),conversationId:e0.getConversationId(),teamId:C.teamRuntime?.getTeamId(),teamName:C.teamRuntime?.getTeamName(),teamRole:C.teamRuntime?"lead":void 0});if(XK(y,J,W.length>0,K,l$),l$)H$(y.telemetry,{ulid:J,modelId:y.modelId,provider:y.providerId,...l$});if(C.teamRuntime)b9(y.telemetry,{ulid:J,teamId:C.teamRuntime.getTeamId(),teamName:C.teamRuntime.getTeamName(),leadAgentId:e0.getAgentId(),restoredFromPersistence:C.teamRestoredFromPersistence===!0});let r={sessionId:J,config:y,sessionMetadata:X.sessionMetadata,...A?{artifacts:A}:{},source:Z,startedAt:A?.manifest.started_at??Q,updatedAt:A?.manifest.ended_at??A?.manifest.started_at??Q,pendingPrompt:F.prompt,runtime:C,agent:e0,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:_.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(this.sessions.set(J,r),this.emitStatus(J,"running"),Y.length>0&&!A){if(await this.ensureSessionPersisted(r),await this.invoke("persistSessionMessages",r.sessionId,Y,r.config.systemPrompt),!X.prompt?.trim())await this.updateStatus(r,"completed",0)}let M1;try{if(X.prompt?.trim())if(M1=await this.executeTurn(r,{prompt:X.prompt,userImages:X.userImages,userFiles:X.userFiles}),!r.interactive)await this.finalizeSingleRun(r,M1.finishReason);else await this.completeInteractiveTurn(r,M1.finishReason)}catch(P){if(r.interactive&&r.aborting)M1=await this.completeAbortedInteractiveTurn(r);else{p2(r.config.telemetry,{component:"core",operation:"session.start",error:P,severity:"error",handled:!1,context:{sessionId:r.sessionId,providerId:r.config.providerId,modelId:r.config.modelId}});try{await this.failSession(r)}catch(B0){r.config.logger?.error?.("Session failure cleanup threw",{sessionId:r.sessionId,error:B0})}throw P}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:B,result:M1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let W=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...W?{sessionMetadata:W}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),W=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:W??"immediate"}}),W==="queue"||W==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:W,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,J.finishReason);else await this.completeInteractiveTurn(Z,J.finishReason);if(J.finishReason==="error"||J.finishReason==="aborted")return J;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),J}catch(J){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw p2(Z.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),J}}async getAccumulatedUsage($){let Z=dJ(this.usageBySession.get($)),Q=dJ(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,this.pendingPromptsController.clearAborted(Q),Q.agent.abort(Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!H0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!H0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return SY(Z);let Q=$.trim();if(!Q)return;let W=await this.getRow(Q);if(W)return v6(W);let J=await this.readManifest(Q);return J?vQ(J):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(v6),W=new Set(Q.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(W.has(J.sessionId))continue;Q.unshift(SY(J))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return I$(Q.messagesPath);let W=await this.readManifest(Z);return I$(W?.messages_path)}async dispatchHookEvent($){await NF($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){let Q=this.getSessionOrThrow($);Q.config.modelId=Z,Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:Z}),Q.agent.updateConnection({modelId:Z})}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),W=Q.prompt.trim();if(!W)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=W;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let J=await this.executeAgentTurn($,W,Q.userImages,Q.userFiles);while(QX($,J.finishReason)){let X=await WX($);if(X.length===0)break;let Y=JX($,X);J=await this.executeAgentTurn($,Y)}return J}async completeInteractiveTurn($,Z){if(m5($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),W=D0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:W}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:W,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,W){let J=$.started||$.agent.getMessages().length>0,X=$.persistedMessages??$.agent.getMessages(),Y=this.usageBySession.get($.sessionId)??D0(),j=this.aggregateUsageBySession.get($.sessionId)??Y;$.turnUsageBaseline=Y,$.turnAggregateUsageBaseline=j,$.turnPrimaryUsage=D0(),$.turnUsageByAgent=new Map,E9($.config.telemetry,$.sessionId,$.config.mode),Q8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(Z,Q,W):()=>$.agent.run(Z,Q,W),H=await this.runWithAuthRetry($,V,X);$.started=!0;let B=IZ(H.messages,H,X);$.persistedMessages=B;let G=u6($.turnUsageByAgent?.values()??[]),K=f0(Y,H.usage),F=f0(f0(D0(),H.usage),G),A=f0(j,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(L)=>({...L??{},totalCost:K.totalCost,aggregatedAgentsCost:A.totalCost,usage:K,aggregateUsage:A})),await this.invoke("persistSessionMessages",$.sessionId,B,$.config.systemPrompt),this.observeTaskCompletionTool($,H),H}catch(V){throw p2($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((W)=>W.name===U0.SUBMIT_AND_EXIT&&W.error===void 0))return;$.submitAndExitObserved=!0,g4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,Z){let Q=R$($.config),W=Jx(Z.prompt).trim();if(!W)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let J=await T8(W,Q);YK($.config.telemetry,J);let X=v5(J.prompt,Z.mode??$.config.mode),Y=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),j=this.resolveAbsoluteFilePaths(Q,J.matchedFiles),V=Array.from(new Set([...Y,...j]));return{prompt:X,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=R$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:Z,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,Z){let Q=this.sessions.get($),W=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,J=Z(W?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Q.sessionMetadata=J,Q.artifacts.manifest.metadata=J}async finalizeSingleRun($,Z){if(m5($))return;let Q=Z==="aborted"||$.aborting,W=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":W?"failed":"completed",exitCode:W?1:0,shutdownReason:W?"session_error":"session_complete",endReason:Z})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(Z.status==="completed"&&!$.submitAndExitObserved)g4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});iQ($);let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),p2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,Z.status,Z.exitCode)}catch(J){W("update_status",J)}try{await $.agent.shutdown(Z.shutdownReason)}catch(J){W("agent_shutdown",J)}}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),p2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(Z)}catch(J){W("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let W=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!W.updated)return;let J=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(J.status=Z,H0(Z))delete J.ended_at,J.exit_code=null;else J.ended_at=W.endedAt??J0(),J.exit_code=typeof Q==="number"?Q:null;$.artifacts.manifest=J,$.status=Z,$.updatedAt=W.endedAt??J0(),$.endedAt=H0(Z)?null:J.ended_at,$.exitCode=J.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,J),this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(W){if(!Q2($.config.providerId)||!Wx(W))throw W;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),Z()}}async syncOAuthCredentials($,Z){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:Z?.forceRefresh})}catch(W){if(W instanceof i7)throw Error(`${W.providerId} requires re-authentication.`);throw W}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new k1($);throw p2(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>Zx(W)?W:IY($,W));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return r1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let Z=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=f0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let W=IY(Z),J=`${Q}.messages.json`,X;try{X=eI($)}catch{return D0()}let Y=D0();for(let j of X){if(!j.endsWith(".messages.json"))continue;if(j===J)continue;let V=IY($,j);if(V===W)continue;let H=await I$(V);if(H.length===0)continue;Y=f0(Y,b8(H))}return Y}withPersistedAggregateUsageFloor($,Z){let Q=Yx(Z.metadata?.aggregateUsage);if(Q)return jx($,Q);let W=Z.metadata?.aggregatedAgentsCost;if(typeof W!=="number"||!Number.isFinite(W)||W<=$.totalCost)return $;return{...$,totalCost:W}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:U1({session:Z,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),_U))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(_U)).find((W)=>W.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return fU(this.sessionService,$,...Z)}invokeOptional($,...Z){return UU(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return DU(this.sessionService,$,...Z)}}function Hx($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function Bx($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function VU($={}){let Z=new T1({sessionService:new z1(new L1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||T0.CLI,interactive:!1,config:{providerId:Vx(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:Bx(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{configExtensions:Q.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Q,W){let J=await Z.runTurn({sessionId:Q,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((X)=>X.content)});if(!J)throw Error("local hub schedule runtime returned no turn result");return{result:Hx(J)}},async abortSession(Q){return await Z.abort(Q,Error("hub schedule abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}import{resolveClineBuildEnv as DD}from"@cline/shared";function Gx($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
736
- `).trim()||void 0}var zU=120,xY="...";function J9($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=zU)return Z;let Q=zU-Buffer.byteLength(xY,"utf8");if(Q<=0)return xY;let W="";for(let J of Z){if(Buffer.byteLength(W+J,"utf8")>Q)break;W+=J}return`${W}${xY}`}async function TU($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await I$(Q)].reverse().find((V)=>V.role==="assistant"),X=J?Gx(J.content):void 0,Y=$?.workspaceRoot?.trim()||"workspace",j=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():Y;return{title:`Task completed (${Z})`,body:J9(X&&X.length>0?X:j.length>0?j:Y),severity:"info"}}import{captureSdkError as e7,createSessionId as Hg}from"@cline/shared";import{createSessionId as fx}from"@cline/shared";import{createSessionId as Ax}from"@cline/shared";function Kx($){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 Fx($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())Z.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())Z.parentAgentId=$.parentAgentId;if($.agentId?.trim())Z.agentId=$.agentId;if($.conversationId?.trim())Z.conversationId=$.conversationId;if($.messagesPath?.trim())Z.messagesPath=$.messagesPath;if($.prompt?.trim())Z.prompt=$.prompt;if($.provider?.trim())Z.provider=$.provider;if($.model?.trim())Z.model=$.model;if($.source?.trim())Z.source=$.source;if(typeof $.pid==="number")Z.pid=$.pid;return Object.keys(Z).length>0?Z:void 0}function a7($,Z,Q,W){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:Kx($.status),participants:Z?[...Z.participants.values()]:[],metadata:Fx($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Q?{usage:{...Q}}:{},...W?{aggregateUsage:{...W}}:{}}}function c($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function x($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function s7($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function I0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function r2($,Z,Q){return{version:"v1",event:$,eventId:Ax("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function o0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let W=await $.sessionHost.getAccumulatedUsage?.(Z);return a7(Q,$.sessionState.get(Z),W?.usage,W?.aggregateUsage)}async function t0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[W,J]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return U1({session:Q,messages:W,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function o7($,Z,Q,W,J={}){let X=$.sessionState.get(Z);if(X){if(J.interactive!==void 0)X.interactive=J.interactive;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:W});return X}let Y={createdByClientId:Q,interactive:J.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:W}]])};return $.sessionState.set(Z,Y),Y}async function gY($,Z){let Q=fx("approval_"),W=Z.sessionId;if($.sessionState.get(W)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((X)=>{$.pendingApprovals.set(Q,{sessionId:W,resolve:X}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:Z.sessionId,agentId:Z.agentId,conversationId:Z.conversationId,iteration:Z.iteration,toolCallId:Z.toolCallId,toolName:Z.toolName,inputJson:JSON.stringify(Z.input??null),policy:Z.policy},W))})}function mY($,Z,Q){let W=$.pendingApprovals.get(Z);if(!W)return;return $.pendingApprovals.delete(Z),W.resolve(Q),{sessionId:W.sessionId}}function vY($,Z,Q){let W=0;for(let[J,X]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:J,sessionId:X.sessionId}))continue;$.pendingApprovals.delete(J),X.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:J,approved:!1,cancelled:!0,reason:Q},X.sessionId)),W+=1}return W}async function OU($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return x(Z,"approval_not_found",`Unknown approval: ${Q}`);let J=typeof Z.payload?.reason==="string"?Z.payload.reason:Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)&&typeof Z.payload.payload.reason==="string"?Z.payload.payload.reason:void 0,X=Z.payload?.approved===!0,Y=mY($,Q,{approved:X,reason:J});if(!Y)return x(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:X,reason:J},Y.sessionId)),c(Z,{approvalId:Q,approved:X})}import{createSessionId as Lx}from"@cline/shared";function Ux($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var qU={debug:10,info:20,warn:30,error:40,silent:50};function Dx(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function u($,Z,Q={}){if(qU[$]<qU[Dx()])return;let W=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([J,X])=>[J,Ux(X)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${W}`);return}console.log(`[hub] ${W}`)}function cY($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);u("error",$,{error:Q})}async function MU($,Z,Q,W,J,X){let Y=Lx("capreq_"),j=performance.now();return u("info","capability.request.start",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J}),await new Promise((V,H)=>{$.pendingCapabilityRequests.set(Y,{sessionId:Z,targetClientId:J,capabilityName:Q,onProgress:X,resolve:(B)=>{if(u(B.ok?"info":"warn","capability.request.end",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J,ok:B.ok,error:B.error,durationMs:Math.round(performance.now()-j)}),!B.ok){H(Error(B.error||`Capability ${Q} was rejected by ${J}.`));return}V(B.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:Y,targetClientId:J,capabilityName:Q,payload:W},Z)),u("info","capability.request.published",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J})})}function RU($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);if((Z.clientId?.trim()||"")!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return W.onProgress?.(X),c(Z,{requestId:Q})}function u$($,Z,Q){let W=0;for(let[J,X]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:J,...X}))continue;$.pendingCapabilityRequests.delete(J),u("warn","capability.request.cancelled",{requestId:J,sessionId:X.sessionId,capabilityName:X.capabilityName,targetClientId:X.targetClientId,reason:Q}),X.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:X.capabilityName,targetClientId:X.targetClientId,ok:!1,cancelled:!0,error:Q},X.sessionId)),W+=1}return W}async function EU($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",W=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",J=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!W||!J)return x(Z,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{},Y=await $.requestCapability(Q,W,X,J);return c(Z,Y)}catch(X){return x(Z,"capability_request_failed",X instanceof Error?X.message:String(X))}}function NU($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);let J=Z.clientId?.trim()||"";if(J!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);$.pendingCapabilityRequests.delete(Q);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,Y=typeof Z.payload?.error==="string"?Z.payload.error:void 0,j=Z.payload?.ok===!0;return u(j?"info":"warn","capability.respond",{requestId:Q,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,error:Y}),W.resolve({ok:j,payload:X,error:Y}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,payload:X,error:Y},W.sessionId)),c(Z,{requestId:Q,ok:j})}import{createSessionId as _x}from"@cline/shared";function wU($,Z){let Q=Z.payload,W=Q?.clientId?.trim()||Z.clientId?.trim()||_x("client_");return $.clients.set(W,{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,actorKind:Q?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Q?.transport??"native",capabilities:Q?.capabilities??[],metadata:Q?.metadata,workspaceContext:Q?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),c(Z,{clientId:W})}function CU($,Z){let Q=Z.clientId?.trim(),W=Q?$.clients.get(Q):void 0;if(!Q||!W)return x(Z,"client_not_found","Client is not registered with this hub.");let J=s7(Z.payload?.metadata);if(W.lastSeenAt=Date.now(),J)W.metadata=JSON.parse(JSON.stringify(J));return c(Z)}function PU($,Z,Q){let W=Z.clientId?.trim();if(W)$.clients.delete(W),Q(W),$.publish($.buildEvent("hub.client.disconnected",{clientId:W}));return c(Z)}function SU($,Z){return c(Z,{clients:[...$.clients.values()]})}_0();import{existsSync as hU,mkdirSync as zx,readdirSync as Tx,readFileSync as Ox,rmSync as qx,writeFileSync as Mx}from"node:fs";import{dirname as Rx,join as bU}from"node:path";import{CONNECTOR_PLATFORMS as Ex,connectorChannelsFromPlatforms as Nx,listConnectorCatalog as kU,shouldIncludeConnectorField as wx}from"@cline/shared";import{resolveConnectorDataDir as Cx,resolveConnectorSettingsPath as dY}from"@cline/shared/storage";var Px=1,yU={startedAt:($)=>typeof $.startedAt==="string"?$.startedAt:void 0,port:($)=>typeof $.port==="number"?$.port:void 0,baseUrl:($)=>typeof $.baseUrl==="string"?$.baseUrl:void 0,connectionMode:($)=>typeof $.connectionMode==="string"?$.connectionMode:void 0,userName:($)=>typeof $.userName==="string"?$.userName:void 0,botUsername:($)=>typeof $.botUsername==="string"?$.botUsername:void 0,applicationId:($)=>typeof $.applicationId==="string"?$.applicationId:void 0,phoneNumberId:($)=>typeof $.phoneNumberId==="string"?$.phoneNumberId:void 0},Sx={discord:{required:["userName","applicationId"],optional:["startedAt","port","baseUrl"]},telegram:{required:["botUsername"],optional:["startedAt"]},gchat:{required:["userName"],optional:["startedAt","port","baseUrl"]},linear:{required:["userName"],optional:["startedAt","port","baseUrl"]},slack:{required:["userName"],optional:["startedAt","connectionMode","port","baseUrl"]},whatsapp:{required:["userName"],optional:["startedAt","phoneNumberId","port","baseUrl"]}};function d$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function H9($){return typeof $==="string"?$.trim():void 0}function IU($){if(!hU($))return;try{let Z=JSON.parse(Ox($,"utf8"));return d$(Z)?Z:void 0}catch{return}}function lY(){let $=IU(dY()),Z=d$($?.connectors)?$.connectors:{},Q={};for(let[W,J]of Object.entries(Z)){if(!d$(J))continue;let X=H9(J.type),Y=H9(J.configuredAt),j=H9(J.updatedAt);if(!X||!Y||!j)continue;let V=t7(J.values),H=d$(J.security)?{enabled:J.security.enabled===!0,values:t7(J.security.values)}:void 0;Q[W]={type:X,values:V,security:H,configuredAt:Y,updatedAt:j}}return{version:Px,connectors:Q}}function xU($){let Z=dY();zx(Rx(Z),{recursive:!0}),Mx(Z,`${JSON.stringify($,null,2)}
737
- `,"utf8")}function t7($){if(!d$($))return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W.trim();return Z}function bx($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function yx($){let Z=bU(Cx(),$);if(!hU(Z))return[];return Tx(Z).filter((Q)=>Q.endsWith(".json")&&!Q.endsWith(".threads.json")).map((Q)=>bU(Z,Q))}function hx($,Z,Q){let W=Z.botUsername??Z.userName??Z.applicationId??Z.phoneNumberId??String(Q);return`${$}:${W}`}function kx($,Z){let Q=IU(Z);if(!Q)return;let W=typeof Q.pid==="number"?Q.pid:void 0,J=typeof Q.hubUrl==="string"?Q.hubUrl:typeof Q.rpcAddress==="string"?Q.rpcAddress:void 0;if(!W||!J||!bx(W))return;let X=Sx[$];if(!X)return;let Y={};for(let j of X.required){let V=yU[j](Q);if(!V||typeof V==="string"&&!V.trim())return;Y[j]=V}for(let j of X.optional){let V=yU[j](Q);if(V!==void 0)Y[j]=V}return{id:hx($,Y,W),type:$,pid:W,hubUrl:J,...Y}}function Ix(){let $=[];for(let{name:Z}of kU())for(let Q of yx(Z)){let W=kx(Z,Q);if(W)$.push(W)}return $.sort((Z,Q)=>{if(Z.type!==Q.type)return Z.type.localeCompare(Q.type);let W=Z.botUsername??Z.userName??"",J=Q.botUsername??Q.userName??"";return W.localeCompare(J)})}function xx(){let $=lY();return Object.entries($.connectors).map(([Z,Q])=>({id:Z,type:Q.type,configuredAt:Q.configuredAt,updatedAt:Q.updatedAt})).sort((Z,Q)=>Z.type.localeCompare(Q.type))}function pY(){return{available:Nx(),active:Ix(),configured:xx()}}function gx($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function mx($,Z){let Q={};for(let J of $.fields)Q[J.flag]=Z[J.flag]??J.initialValue??"";let W={};for(let J of $.fields){if(!wx(J,Q))continue;gx(J,Q),W[J.flag]=Q[J.flag]}return W}function vx($){if(!d$($))throw Error("connector.configure payload must be an object.");let Z=H9($.channel);if(!Z)throw Error("channel is required");let Q=Ex.find((K)=>K.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(kU().map((K)=>K.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let J=t7($.values),X=mx(Q,J),Y=d$($.security)?$.security:{},j=Y.enabled===!0,V=t7(Y.values);if(j&&Q.security)for(let K of Q.security.fields){let F=V[K.key];if(!F)throw Error(K.requiredMessage);let A=K.validate?.(F);if(A)throw Error(A)}let H=lY(),B=new Date().toISOString(),G=H.connectors[Z];return H.connectors[Z]={type:Z,values:X,security:j?{enabled:!0,values:V}:{enabled:!1,values:{}},configuredAt:G?.configuredAt??B,updatedAt:B},xU(H),pY()}function cx($){if(!d$($))throw Error("connector.delete_config payload must be an object.");let Z=H9($.channel);if(!Z)throw Error("channel is required");let Q=lY();if(delete Q.connectors[Z],Object.keys(Q.connectors).length>0)xU(Q);else qx(dY(),{force:!0});return pY()}function ux($){return $==="connector.configure"||$==="connector.delete_config"}function uY($,Z,Q){if(!ux(Z.command))return;W8($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function gU($,Z){try{if(Z.command==="connector.channels")return c(Z,pY());if(Z.command==="connector.configure"){let Q=vx(Z.payload);return uY($,Z,!0),c(Z,Q)}if(Z.command==="connector.delete_config"){let Q=cx(Z.payload);return uY($,Z,!0),c(Z,Q)}return x(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return uY($,Z,!1),x(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var dx=30000;function lx($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function px($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function rx($,Z,Q){let W=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return x($,s$,W)}function ix($){return $?$:void 0}function nx($){let Z=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(Z&&Number.isFinite(Z)&&Z>0)return Math.floor(Z);let Q=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(Q&&Number.isFinite(Q)&&Q>0)return Math.floor(Q*1000);return}async function ax($,Z,Q,W){let J=performance.now(),X=!1,Y={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:W},j=setInterval(()=>{if(X)return;let B=Math.round(performance.now()-J);u("warn","run.heartbeat",{...Y,elapsedMs:B}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:B,...W?{timeoutMs:W}:{}},Q.sessionId))},dx),V=$.sessionHost.runTurn(Q);V.then((B)=>{if(!X)return;u("warn","run.late_end",{...Y,elapsedMs:Math.round(performance.now()-J),finishReason:B?.finishReason})},(B)=>{if(!X)return;u("error","run.late_error",{...Y,elapsedMs:Math.round(performance.now()-J),error:B})});let H;try{if(!W)return await V;return await Promise.race([V,new Promise((B,G)=>{H=setTimeout(()=>{let K=`Hub run ${Z.command} timed out after ${W}ms.`;X=!0,clearInterval(j),G(Error(K)),u("error","run.timeout",{...Y,elapsedMs:Math.round(performance.now()-J)}),vY($,(F)=>F.sessionId===Q.sessionId,K),u$($,(F)=>F.sessionId===Q.sessionId,K),$.sessionHost.abort(Q.sessionId,K).catch((F)=>{u("error","run.timeout_abort_failed",{...Y,error:F})})},W)})])}finally{if(X=!0,clearInterval(j),H)clearTimeout(H)}}async function mU($,Z){let Q=I0(Z),W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.prompt==="string"?W.prompt:typeof W.input==="string"?W.input:"";if(!J.trim())return x(Z,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let X=W.attachments&&typeof W.attachments==="object"&&!Array.isArray(W.attachments)?W.attachments:void 0,Y=Array.isArray(X?.userFiles)?X.userFiles.filter((B)=>typeof B==="string"):void 0,j=nx(W);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let V;try{V=await ax($,Z,{sessionId:Q,prompt:J,mode:ix(W.mode),delivery:W.delivery==="queue"||W.delivery==="steer"?W.delivery:void 0,userImages:Array.isArray(X?.userImages)?X.userImages:void 0,userFiles:Y,timeoutMs:j},j)}catch(B){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(I1(B))return rx(Z,Q,B);throw $.publish($.buildEvent("run.failed",{reason:"error",error:B instanceof Error?B.message:String(B)},Q)),B}if(V){let B=await t0($,Q),G=px(V);if($.publish($.buildEvent(lx(V.finishReason),{reason:V.finishReason,...G?{error:G}:{},result:V,...B?{snapshot:B}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let H=await t0($,Q);return c(Z,V||H?{...V?{result:V}:{},...H?{snapshot:H}:{}}:void 0)}async function vU($,Z){let Q=I0(Z),W=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";vY($,(J)=>J.sessionId===Q,W);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(J){u("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:J})}finally{u$($,(J)=>J.sessionId===Q,W)}return c(Z,{applied:!0})}async function cU($,Z){let Q=D4(Z.payload?.payload);if(!Q)return x(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),c(Z,{applied:!0})}async function uU($,Z){switch(Z.type){case"chunk":return;case"agent_event":await sx($,Z);return;case"hook":if(Z.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:Z.payload.toolName},Z.payload.sessionId));else if(Z.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:Z.payload.toolName},Z.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:Z.payload.sessionId,summary:Z.payload.summary,lastEvent:Z.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,Z.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:Z.payload.sessionId,prompts:Z.payload.prompts},Z.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:Z.payload.id,prompt:Z.payload.prompt,delivery:Z.payload.delivery,attachmentCount:Z.payload.attachmentCount,userImages:Z.payload.userImages,userFiles:Z.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:Z.payload.sessionId,prompt:Q},Z.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:Z.payload.sessionId,snapshot:Z.payload.snapshot},Z.payload.sessionId));return;case"status":{let[Q,W]=await Promise.all([o0($,Z.payload.sessionId),t0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...W?{snapshot:W}:{}},Z.payload.sessionId));return}case"ended":await ox($,Z);return;default:return}}async function sx($,Z){let{sessionId:Q,event:W}=Z.payload;if(W.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:W.iteration},Q));return}if(W.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:W.iteration,hadToolCalls:W.hadToolCalls,toolCallCount:W.toolCallCount},Q));return}if(W.type==="content_start"){if(W.contentType==="text"&&typeof W.text==="string"&&W.text.length>0){$.publish($.buildEvent("assistant.delta",{text:W.text},Q));return}if(W.contentType==="reasoning"){if(W.redacted&&!W.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof W.reasoning==="string"&&W.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:W.reasoning,redacted:W.redacted===!0},Q));return}if(W.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:W.toolCallId,toolName:W.toolName,input:W.input},Q));return}}if(W.type==="content_end"){switch(W.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:W.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:W.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:W.toolCallId,toolName:W.toolName,output:W.output,error:W.error},Q));break}return}if(W.type==="usage"){let J;try{J=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{J=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:W.inputTokens,outputTokens:W.outputTokens,cacheReadTokens:W.cacheReadTokens??0,cacheWriteTokens:W.cacheWriteTokens??0,totalCost:W.cost??0},totals:{inputTokens:W.totalInputTokens,outputTokens:W.totalOutputTokens,cacheReadTokens:W.totalCacheReadTokens??0,cacheWriteTokens:W.totalCacheWriteTokens??0,totalCost:W.totalCost??0},usage:J?.usage,aggregateUsage:J?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":W.parentAgentId?"subagent":"lead",agentId:W.agentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(W.type==="done")$.publish($.buildEvent("agent.done",{reason:W.reason,text:W.text,iterations:W.iterations,usage:W.usage},Q))}async function ox($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),W=Q===Z.payload.reason||Q==="run.start.reply";if(W)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[J,X]=await Promise.all([o0($,Z.payload.sessionId),t0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let Y=await TU(J);$.publish($.buildEvent("ui.notify",Y,Z.payload.sessionId))}if(W)return;$.publish($.buildEvent(Z.payload.reason==="aborted"?"run.aborted":Z.payload.reason==="error"||Z.payload.reason==="failed"?"run.failed":"run.completed",{reason:Z.payload.reason,...X?{snapshot:X}:{}},Z.payload.sessionId))}import{createSessionId as pU,parseRuntimeConfigExtensions as rU}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as V10,HUB_COMPACTION_CAPABILITY as H10,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as B10,HUB_HOOK_CAPABILITY_PREFIX as G10,HUB_MISTAKE_LIMIT_CAPABILITY as K10,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as F10,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as A10,isHubToolExecutorName as tx}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as _10,HUB_COMPACTION_CAPABILITY as z10,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as T10,HUB_HOOK_CAPABILITY_PREFIX as O10,HUB_MISTAKE_LIMIT_CAPABILITY as q10,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as M10,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as R10}from"@cline/shared";var ex=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function i2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function $g($,Z){let Q=typeof $.name==="string"?$.name.trim():"",W=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",X=i2($.inputSchema);if(!Q||!W||!X||!J||Z.has(J))return;return Z.add(J),{kind:"tool",capabilityName:J,name:Q,description:W,inputSchema:X,...i2($.lifecycle)?{lifecycle:i2($.lifecycle)}:{}}}function iY($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let W of $){if(!W||typeof W!=="object"||Array.isArray(W))continue;let J=W,X=J.kind,Y=typeof J.capabilityName==="string"?J.capabilityName.trim():"";if(!Y||Q.has(Y))continue;if(X==="tool"){let j=$g(J,Q);if(j)Z.push(j);continue}if(X==="toolExecutor"){let j=J.executor;if(!tx(j))continue;Q.add(Y),Z.push({kind:"toolExecutor",capabilityName:Y,executor:j});continue}if(X==="hook"){let j=typeof J.name==="string"?J.name.trim():"";if(!j)continue;Q.add(Y),Z.push({kind:"hook",capabilityName:Y,name:j});continue}if(X==="compaction"){Q.add(Y),Z.push({kind:"compaction",capabilityName:Y,...i2(J.config)?{config:i2(J.config)}:{}});continue}if(X==="checkpoint"){Q.add(Y),Z.push({kind:"checkpoint",capabilityName:Y,...i2(J.config)?{config:i2(J.config)}:{}});continue}if(X==="mistakeLimit"){Q.add(Y),Z.push({kind:"mistakeLimit",capabilityName:Y});continue}if(X==="userInstructionService")Q.add(Y),Z.push({kind:"userInstructionService",capabilityName:Y})}return Z}function lU($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function Zg($){return Object.hasOwn($,"update")?$.update:$}function B9($){return $.trim().replace(/^\/+/,"").toLowerCase()}function Qg($){let Z=($??[]).map(B9).filter(Boolean);return Z.length>0?new Set(Z):void 0}function Wg($,Z,Q){if(!Q)return!0;let W=B9($),J=B9(Z),X=W.includes(":")?W.split(":").at(-1)??W:W,Y=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(W)||Q.has(J)||Q.has(X)||Q.has(Y)}function rY($,Z){let Q=Qg(Z);return $.records.skill.map((W)=>({id:W.id,name:W.item.name,description:"description"in W.item&&typeof W.item.description==="string"?W.item.description:void 0,disabled:W.item.disabled===!0,skill:W.item})).filter((W)=>Wg(W.id,W.name,Q))}function dU($,Z){let Q=async(W,J)=>{let X=B9(W),j=rY($,Z).filter((K)=>K.id===X||B9(K.name)===X||K.id.endsWith(`:${X}`)).filter((K)=>!K.disabled);if(j.length!==1)return j.length>1?`Skill "${W}" is ambiguous. Use one of: ${j.map((K)=>K.id).join(", ")}`:`Skill "${W}" not found.`;let V=j[0].skill,H=J?.trim(),B=H?`
738
- <command-args>${H}</command-args>`:"",G=V.description?.trim()?`Description: ${V.description.trim()}
739
-
740
- `:"";return`<command-name>${V.name}</command-name>${B}
728
+ `)}}async function dX($,Z={}){if($.type==="mcp"){let Q=o5($);if(Z.deleteMcpServer)await Z.deleteMcpServer(Q);else K7($,Z);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Q??$.id}.`}}if($.type==="skill")return A7($,Z);if($.type==="plugin")return f7($,Z);throw Error(`Unsupported marketplace entry type: ${$.type}`)}var Lf={};N(Lf,{parsePluginSource:()=>M7,isOfficialPluginSlug:()=>q7,installPlugin:()=>aX,collectPluginMcpOAuthCandidates:()=>R7});import{spawn as ny}from"node:child_process";import{createHash as ay}from"node:crypto";import{existsSync as O1,mkdirSync as rX,readdirSync as sy,readFileSync as oy,renameSync as U7,rmSync as _7,statSync as iX}from"node:fs";import{cp as pX,mkdir as Kf,writeFile as z7}from"node:fs/promises";import{homedir as Xf}from"node:os";import{basename as W$,dirname as Yf,extname as ty,join as n,relative as Ff,resolve as v$,sep as ey}from"node:path";import{isPluginModulePath as L7,resolveClineDir as $h,resolvePluginModuleEntries as Zh}from"@cline/shared/storage";var M4="_installed",T7="package",Qh="https://github.com/cline/plugins.git",jf=30000,D7=10485760,Vf="@cline/",Wh=["dependencies","devDependencies","optionalDependencies","peerDependencies"],Jh={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function O7($){if($==="~")return Xf();if($.startsWith("~/"))return n(Xf(),$.slice(2));return $}function Af($){return $.split(ey).join("/")}function d2($){return ay("sha256").update($).digest("hex").slice(0,12)}function Xh($){let Z=0;while(Z<$.length&&$[Z]==="-")Z++;let Q=$.length;while(Q>Z&&$[Q-1]==="-")Q--;return $.slice(Z,Q)}function Q$($){let Z="",Q=!1,W=$.startsWith("@")?$.slice(1):$;for(let X of W.slice(0,256)){if(X>="a"&&X<="z"||X>="A"&&X<="Z"||X>="0"&&X<="9"||X==="."||X==="_"||X==="-")Z+=X,Q=X==="-";else if(!Q)Z+="-",Q=!0;if(Z.length>=80)break}return Xh(Z)||"plugin"}function q7($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function Yh($){return $?.trim()||Qh}function Bf($){let Q=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Q?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Q[1]}}function jh($){if($.startsWith(".")||$.startsWith("/")||$==="~"||$.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test($))return!1;let[Z,...Q]=$.split("/");return!!Z&&Q.length>=2&&Z.includes(".")&&!Z.startsWith(".")&&!Z.endsWith(".")}function Vh($){let Z=$.match(/^git@([^:]+):(.+)$/);if(Z){let Y=Z[2]??"",j=Y.indexOf("@");if(j<0)return{repo:$};return{repo:`git@${Z[1]}:${Y.slice(0,j)}`,ref:Y.slice(j+1)||void 0}}if($.includes("://"))try{let Y=new URL($),j=Y.pathname.replace(/^\/+/,""),V=j.indexOf("@");if(V<0)return{repo:$};return Y.pathname=`/${j.slice(0,V)}`,{repo:Y.toString().replace(/\/$/,""),ref:j.slice(V+1)||void 0}}catch{return{repo:$}}let Q=$.indexOf("/");if(Q<0)return{repo:$};let W=$.slice(0,Q),J=$.slice(Q+1),X=J.indexOf("@");if(X<0)return{repo:$};return{repo:`${W}/${J.slice(0,X)}`,ref:J.slice(X+1)||void 0}}function Bh($){try{return decodeURIComponent($)}catch{return $}}function Hh($){return W$(Bh($))||"plugin"}function Gh($){let Z=$.split("/").filter(Boolean);return Z.length>=5&&(Z[2]==="blob"||Z[2]==="raw")}function Hf($){if(!/^https?:\/\//i.test($))return null;let Z;try{Z=new URL($)}catch{return null}let Q=Z.hostname.toLowerCase(),W=Hh(Z.pathname),J=L7(W),X=(Q==="github.com"||Q==="www.github.com")&&Gh(Z.pathname);if(Z.protocol!=="https:"){if(X||Q==="raw.githubusercontent.com"||J)throw Error(`Remote plugin file URLs must use https: ${$}`);return null}if(Q==="github.com"||Q==="www.github.com"){let Y=Z.pathname.split("/").filter(Boolean);if(!X)return null;if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:`https://raw.githubusercontent.com/${[Y[0],Y[1],...Y.slice(3)].join("/")}`,filename:W}}if(Q==="raw.githubusercontent.com"){if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:Z.toString(),filename:W}}if(!J)return null;return{type:"remote",url:Z.toString(),filename:W}}function Gf($,Z={}){let Q=$.trim(),W=Q.startsWith("git:")&&!Q.startsWith("git://"),J=W?Q.slice(4).trim():Q;if(!Z.force&&!W&&!/^(https?|ssh|git):\/\//i.test(J))return null;let{repo:X,ref:Y}=Vh(J),j="",V="";if(X.startsWith("git@")){let G=X.match(/^git@([^:]+):(.+)$/);j=G?.[1]??"",V=G?.[2]??""}else if(/^(https?|ssh|git):\/\//i.test(X)){let G=new URL(X);j=G.hostname,V=G.pathname.replace(/^\/+/,"")}else{let G=X.indexOf("/");if(G<0)return null;j=X.slice(0,G),V=X.slice(G+1)}let B=V.replace(/\.git$/,"").replace(/^\/+/,"");if(!j||!B||B.split("/").length<2)return null;return{type:"git",repo:X.startsWith("git@")||/^(https?|ssh|git):\/\//i.test(X)?X:`https://${X}`,ref:Y,host:j,path:B}}function M7($,Z){let Q=$.trim();if(!Q)throw Error("plugin install requires a source");if(Z==="npm"){let Y=Q.startsWith("npm:")?Q.slice(4).trim():Q,{name:j}=Bf(Y);return{type:"npm",spec:Y,name:j}}if(Z==="git"){let Y=Gf(Q,{force:!0});if(!Y)throw Error(`Invalid git plugin source: ${$}`);return Y}if(Z==="local")return{type:"local",path:$};if(Z==="remote"){let Y=Hf(Q);if(!Y)throw Error(`Invalid remote plugin source: ${$}`);return Y}if(Q.startsWith("npm:")){let Y=Q.slice(4).trim(),{name:j}=Bf(Y);return{type:"npm",spec:Y,name:j}}if(Q.startsWith(".")||Q.startsWith("/")||Q==="~"||Q.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test(Q))return{type:"local",path:$};let J=Hf(Q);if(J)return J;let X=Gf(Q);if(X)return X;if(q7(Q))return{type:"official",slug:Q};if(jh(Q))throw Error(`Unrecognized plugin source "${$}". Use --git for hostname-style repositories or pass an explicit local path such as ./github.com/owner/repo.`);return{type:"local",path:$}}function Kh($){return $?n($,".cline","plugins"):n($h(),"plugins")}function Fh($,Z,Q){if(Z.type==="npm")return n($,M4,"npm",`${Q$(Z.name)}-${d2(Q)}`);if(Z.type==="git")return n($,M4,"git",Q$(Z.host),`${Q$(Z.path)}-${d2(Q)}`);if(Z.type==="remote")return n($,M4,"remote",`${Q$(Z.filename)}-${d2(Q)}`);if(Z.type==="official")return n($,M4,"official",`${Q$(Z.slug)}-${d2(Q)}`);return n($,M4,"local",`${Q$(W$(O7(Z.path)))}-${d2(Q)}`)}function Ah($,Z,Q){if($.type==="npm")return`npm:${$.spec}`;if($.type==="git")return`git:${$.repo}${$.ref?`#${$.ref}`:""}`;if($.type==="remote")return`remote:${$.url}`;if($.type==="official")return`official:${Q}#plugins/${$.slug}`;return`local:${v$(Z,O7($.path))}`}function fh($,Z){if($.type==="npm")return $.name;if($.type==="git")return Q$(W$($.path));if($.type==="remote")return Q$(W$($.filename,ty($.filename)));if($.type==="official")return $.slug;return Q$(W$(v$(Z,O7($.path))))}async function R4($,Z,Q={}){await new Promise((W,J)=>{let X=ny($,Z,{cwd:Q.cwd,stdio:["ignore","ignore","pipe"],env:process.env,windowsHide:!0}),Y="";X.stderr.on("data",(j)=>{Y+=String(j)}),X.on("error",J),X.on("close",(j)=>{if(j===0){W();return}let V=Y.trim();J(Error(`${$} ${Z.join(" ")} failed with exit code ${j}${V?`: ${V}`:""}`))})})}function ff($){let Z=n($,"package.json");if(!O1(Z))return null;try{return JSON.parse(oy(Z,"utf8"))}catch{return null}}function Uh($){let Z=$?.cline?.plugins;if(!Array.isArray(Z))return[];return Z.flatMap((Q)=>{if(typeof Q==="string")return[Q];return Q.paths??[]})}async function Dh($){let Z=n($,"package.json"),Q=ff($);if(!Q)return;let W=!1;for(let J of Wh){let X=Q[J];if(!X||typeof X!=="object")continue;for(let Y of Object.keys(X)){if(!Y.startsWith(Vf))continue;delete X[Y],delete Q.peerDependenciesMeta?.[Y],W=!0}if(Object.keys(X).length===0)delete Q[J]}if(Q.peerDependenciesMeta){for(let J of Object.keys(Q.peerDependenciesMeta)){if(!J.startsWith(Vf))continue;delete Q.peerDependenciesMeta[J],W=!0}if(Object.keys(Q.peerDependenciesMeta).length===0)delete Q.peerDependenciesMeta}if(!W)return;await z7(Z,`${JSON.stringify(Q,null,2)}
729
+ `,"utf8")}function Lh($,Z){let Q=n($,"node_modules","@cline");if(!O1(Q))return;for(let W of Df(Q)){if(`@cline/${W.name}`===Z)continue;_7(n(Q,W.name),{recursive:!0,force:!0})}}function Uf($){let Z=Uh(ff($)).map((X)=>v$($,X)).filter((X)=>O1(X)&&iX(X).isFile()&&L7(X));if(Z.length>0)return Z;let Q=Zh($);if(Q?.length)return Q;let W=[],J=[$];while(J.length>0){let X=J.pop();if(!X)continue;for(let Y of Df(X)){let j=n(X,Y.name);if(Y.name==="node_modules"||Y.name===".git")continue;if(Y.isDirectory()){J.push(j);continue}if(Y.isFile()&&!Y.name.startsWith(".")&&L7(j))W.push(j)}}return W.sort((X,Y)=>X.localeCompare(Y))}function Df($){try{return sy($,{withFileTypes:!0})}catch{return[]}}function _h($,Z){let Q=Uf(Z);if(Q.length===0)throw Error(`No plugin entry files found in ${Z}`);return Q.map((W)=>`./${Af(Ff($,W))}`)}async function zh($,Z,Q){let W=_h($,Z);return await z7(n($,"package.json"),JSON.stringify({...Jh,name:Q,cline:{plugins:[{paths:W}]}},null,2),"utf8"),W}async function Th($,Z,Q){let W=n(Z,T7);return await Kf(W,{recursive:!0}),await z7(n(W,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await R4(Q,["install",$.spec,"--prefix",W,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),Lh(W,$.name),n(W,"node_modules",$.name)}async function nX($,Z){if(!O1(n($,"package.json")))return;await Dh($),await R4(Z,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function Oh($,Z,Q){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let W=n(Z,T7),J=["clone","--filter=blob:none"];if($.ref)J.push("--branch",$.ref);J.push("--",$.repo,W);try{await R4("git",J)}catch(X){if(!$.ref)throw X;await R4("git",["clone","--filter=blob:none","--",$.repo,W]),await R4("git",["checkout","--detach",$.ref],{cwd:W})}return await nX(W,Q),W}async function qh($,Z,Q,W){let J=n(Z,"repo");await R4("git",["clone","--filter=blob:none","--depth","1","--",W,J]);let X=n(J,"plugins",$.slug);if(!O1(X)||!iX(X).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${W}`);let Y=n(Z,T7);return await pX(X,Y,{recursive:!0,filter:(j)=>{let V=W$(j);return V!==".git"&&V!=="node_modules"}}),_7(J,{recursive:!0,force:!0}),await nX(Y,Q),Y}function lX($){return Error(`Remote plugin file from ${$} exceeds the ${D7} byte limit`)}function Mh($){let Z=$.headers.get("content-length");if(!Z)return;let Q=Number(Z);if(!Number.isFinite(Q)||Q<0)return;return Q}async function Rh($,Z){let Q=Mh($);if(Q!==void 0&&Q>D7)throw lX(Z);if(!$.body){let Y=Buffer.from(await $.text(),"utf8");if(Y.byteLength>D7)throw lX(Z);return Y}let W=$.body.getReader(),J=[],X=0;try{while(!0){let{done:Y,value:j}=await W.read();if(Y)break;let V=Buffer.from(j);if(X+=V.byteLength,X>D7)throw await W.cancel().catch(()=>{return}),lX(Z);J.push(V)}return Buffer.concat(J,X)}finally{W.releaseLock()}}async function Eh($,Z){let Q=new AbortController,W=setTimeout(()=>{Q.abort()},jf);try{let J=await fetch($.url,{signal:Q.signal});if(!J.ok){let Y=J.statusText?` ${J.statusText}`:"";throw Error(`Failed to download plugin file from ${$.url}: ${J.status}${Y}`)}let X=await Rh(J,$.url);return rX(Z,{recursive:!0}),await z7(n(Z,$.filename),X),Z}catch(J){if(J instanceof Error&&J.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${jf}ms`);throw J}finally{clearTimeout(W)}}async function Nh($,Z,Q,W){let J=v$(Q,O7($.path));if(!O1(J))throw Error(`Plugin source path does not exist: ${J}`);let X=iX(J);if(X.isFile()){if(!L7(J))throw Error(`Plugin file must be .js or .ts: ${J}`);rX(Z,{recursive:!0});let j=n(Z,W$(J));return await pX(J,j),Z}if(!X.isDirectory())throw Error(`Plugin source must be a file or directory: ${J}`);let Y=n(Z,T7);return await pX(J,Y,{recursive:!0,filter:(j)=>{let V=W$(j);return V!==".git"&&V!=="node_modules"}}),await nX(Y,W),Y}function Ch($,Z){if(O1($)&&!Z)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function wh($,Z,Q){if(rX(Yf(Z),{recursive:!0}),!O1(Z)){U7($,Z);return}if(!Q)throw Error(`Plugin is already installed at ${Z}. Use --force to replace it.`);let W=n(Yf(Z),`.replace-${W$(Z)}-${Date.now()}-${process.pid}-${d2(`${Z}:${Math.random()}`)}`);U7(Z,W);try{U7($,Z)}catch(J){if(!O1(Z)&&O1(W))U7(W,Z);throw J}try{_7(W,{recursive:!0,force:!0})}catch{}}function Ph($){let Z=$.transport;if(Z.type==="stdio")return!1;return Z.headers!==void 0&&Object.keys(Z.headers).length>0}function Sh($){let Z=$.oauth?.tokens?.access_token;return typeof Z==="string"&&Z.trim().length>0}function bh($){let Z=$.metadata;if(!Z||Z.source!=="plugin"||typeof Z.pluginName!=="string"||typeof Z.pluginPath!=="string")return;return{pluginName:Z.pluginName,pluginPath:Z.pluginPath}}function R7($){let Z=new Set($.pluginPaths.map((J)=>v$(J)));if(Z.size===0)return[];let Q;try{Q=p0({filePath:$.settingsPath??Z0()})}catch{return[]}let W=[];for(let J of Q){let X=bh(J);if(!X||!Z.has(v$(X.pluginPath)))continue;let Y=J.transport.type;if(Y==="stdio")continue;if(Ph(J)||Sh(J))continue;W.push({name:J.name,pluginName:X.pluginName,pluginPath:X.pluginPath,transportType:Y,lastError:J.oauth?.lastError})}return W.sort((J,X)=>J.name.localeCompare(X.name))}async function aX($){let Z=$.source.trim(),Q=M7(Z,$.sourceType),W=$.cwd?.trim(),J=W?v$(W):process.cwd(),X=Kh(W?J:void 0),Y=Yh($.officialPluginsRepo),j=Ah(Q,J,Y),V=Fh(X,Q,j),B=fh(Q,J),H=n(X,M4,".tmp"),G=n(H,`${Date.now()}-${process.pid}-${d2(`${Z}:${Math.random()}`)}`),K=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;Ch(V,F),await Kf(H,{recursive:!0});let A;try{if(Q.type==="npm")A=await Th(Q,G,K);else if(Q.type==="git")A=await Oh(Q,G,K);else if(Q.type==="official")A=await qh(Q,G,K,Y);else if(Q.type==="remote")A=await Eh(Q,G);else A=await Nh(Q,G,J,K);let L=(Q.type==="local"||Q.type==="remote")&&A===G?Uf(G).map((U)=>`./${Af(Ff(G,U))}`):await zh(G,A,B);if(L.length===0)throw Error(`No plugin entry files found for ${Z}`);wh(G,V,F);let f={source:Z,installPath:V,entryPaths:L.map((U)=>v$(V,U)),mcpSyncFailures:[],mcpOAuthCandidates:[]},D=await i5({pluginPaths:f.entryPaths,cwd:J,workspacePath:J});return f.mcpSyncFailures=D.failures,f.mcpOAuthCandidates=R7({pluginPaths:f.entryPaths}),f}catch(L){throw _7(G,{recursive:!0,force:!0}),L}}var mf={};N(mf,{updateLocalProvider:()=>y7,saveLocalProviderSettings:()=>WY,saveLocalProviderOAuthCredentials:()=>jY,resolveLocalClineAuthToken:()=>BY,refreshProviderModelsFromSource:()=>JY,normalizeOAuthProvider:()=>XY,loginLocalProvider:()=>YY,loginAndSaveLocalProviderOAuthCredentials:()=>VY,listLocalProviders:()=>ZY,getLocalProviderModels:()=>QY,ensureCustomProvidersLoaded:()=>P7,deleteLocalProvider:()=>h7,addLocalProvider:()=>$Y});import*as C0 from"@cline/llms";import{existsSync as yh,mkdirSync as hh,readFileSync as kh,writeFileSync as Ih}from"node:fs";import{mkdir as xh,readFile as gh,writeFile as mh}from"node:fs/promises";import{dirname as sX,join as vh}from"node:path";import*as h0 from"@cline/llms";import{ModelCapabilitySchema as ch,ProviderCapabilitySchema as uh,ProviderClientSchema as dh,ProviderProtocolSchema as lh}from"@cline/shared";import{z as a}from"zod";var ph=a.object({id:a.string().optional(),name:a.string().optional(),maxTokens:a.number().optional(),contextWindow:a.number().optional(),maxInputTokens:a.number().optional(),capabilities:a.array(ch).optional(),supportsVision:a.boolean().optional(),supportsAttachments:a.boolean().optional(),supportsReasoning:a.boolean().optional()}).passthrough(),rh=a.object({name:a.string(),baseUrl:a.string(),defaultModelId:a.string().optional(),protocol:lh.optional(),client:dh.optional(),capabilities:a.array(uh).optional(),modelsSourceUrl:a.string().optional()}).passthrough(),_f=a.object({provider:rh.optional(),models:a.record(a.string(),ph).optional()}).passthrough(),zf=a.object({version:a.literal(1),providers:a.record(a.string(),_f)}),ih=a.object({version:a.literal(1),providers:a.record(a.string(),a.unknown())}),E7=new Set;function Tf($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function l2($){return vh(sX($.getFilePath()),"models.json")}function N7(){return{version:1,providers:{}}}function Of($){let Z=ih.safeParse($);if(!Z.success)return N7();let Q={};for(let[W,J]of Object.entries(Z.data.providers)){let X=_f.safeParse(J);if(X.success)Q[W]=X.data}return{version:1,providers:Q}}function oX($){if(!yh($))return N7();try{let Z=kh($,"utf8");return Of(JSON.parse(Z))}catch{}return N7()}async function E4($){try{let Z=await gh($,"utf8");return Of(JSON.parse(Z))}catch{}return N7()}function qf($,Z){hh(sX($),{recursive:!0});let Q=zf.parse(Z);Ih($,`${JSON.stringify(Q,null,2)}
730
+ `,"utf8")}async function C7($,Z){await xh(sX($),{recursive:!0});let Q=zf.parse(Z);await mh($,`${JSON.stringify(Q,null,2)}
731
+ `,"utf8")}function Mf($,Z){return{id:$,name:Z.name??$,supportsAttachments:Z.capabilities?.includes("files"),supportsVision:Z.capabilities?.includes("images"),supportsReasoning:Z.capabilities?.includes("reasoning")||Z.thinkingConfig!=null}}function Rf($){if(!$||$.length===0)return;let Z=new Set;if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("tools"))Z.add("tools");return Z.size>0?[...Z]:void 0}function Ef($){let Z=new Set;if(!$||$.length===0)return[...Z];if($.includes("streaming"))Z.add("streaming");if($.includes("tools"))Z.add("tools");if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("vision"))Z.add("images"),Z.add("files");return[...Z]}function nh($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function Nf($,Z){return $??Z??"openai-chat"}function Cf($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function wf($,Z,Q){let W=new Set(Z?.capabilities??Q??[]);if(Z?.supportsVision)W.add("images");if(Z?.supportsAttachments)W.add("files");if(Z?.supportsReasoning)W.add("reasoning");return{id:$,name:Z?.name??$,maxTokens:Z?.maxTokens,contextWindow:Z?.contextWindow,maxInputTokens:Z?.maxInputTokens,capabilities:W.size>0?[...W]:void 0}}function ah($,Z){for(let[Q,W]of Object.entries(Z??{})){let J=W.id?.trim()||Q.trim();if(!J)continue;h0.registerModel($,J,wf(J,W))}}function sh($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function oh($){return Object.assign({},...h0.resolveProviderModelCatalogKeys($).map((Q)=>h0.getGeneratedModelsForProvider(Q)))}function th($){let Z=$.provider.trim();if(!Z||h0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let W=h0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],J=oh(Z),X=Ef($.capabilities),Y=X.length>0?X:void 0,j=$.model?.trim(),V={...J,...W?.models??{}};if(j)V[j]=sh(j,V[j],Y);let B=Object.keys(V).filter(Boolean),H=j||B[0];if(!H)return;let G=Nf($.protocol,W?.provider.protocol),K=Cf($.client,G,W?.provider.client);h0.registerProvider({provider:{id:Z,name:W?.provider.name??Tf(Z),description:W?.provider.description,protocol:G,client:K,baseUrl:Q,modelsSourceUrl:W?.provider.modelsSourceUrl,defaultModelId:H,capabilities:Rf($.capabilities)??W?.provider.capabilities,source:"file"},models:V})}function w7($){for(let Z of Object.values($.providers))th(Z.settings)}function Z9($,Z){let Q=Z.models??{};if(!nh(Z.provider)){ah($,Q);return}let W=Ef(Z.provider.capabilities),J=Object.entries(Q).map(([B,H])=>({id:H.id?.trim()||B.trim(),model:H})).filter(({id:B})=>B.length>0),X=Z.provider.defaultModelId?.trim()||J[0]?.id||"default",Y=Nf(Z.provider.protocol,void 0),j=Cf(Z.provider.client,Y,void 0),V=Object.fromEntries(J.map(({id:B,model:H})=>[B,{...wf(B,H,W.length>0?W:void 0),status:"active"}]));h0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||Tf($),protocol:Y,client:j,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:X,capabilities:Rf(Z.provider.capabilities),source:"file"},models:V})}function Pf($){let Z=l2($);if(E7.has(Z))return;let Q=oX(Z);for(let[W,J]of Object.entries(Q.providers))Z9(W,J);E7.add(Z)}async function P7($){let Z=l2($);if(E7.has(Z))return;let Q=await E4(Z);for(let[W,J]of Object.entries(Q.providers))Z9(W,J);E7.add(Z)}var bf="cline-pass";function eh($){return $.apiKey??$.auth?.apiKey}function $k($){return($.auth?.accessToken?.trim()??"").length>0}function yf($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function Zk($){let Z=$.split(/\s+/).filter(Boolean);if(Z.length===0)return"?";if(Z.length===1)return Z[0].slice(0,2).toUpperCase();return`${Z[0][0]}${Z[1][0]}`.toUpperCase()}function Qk($){let Z=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let W of $)Q=Q*31+W.charCodeAt(0)>>>0;return Z[Q%Z.length]}function hf($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>Mf(Z,Q))}async function Wk($,Z){let Q=await C0.getModelsForProvider($),W=$===bf;if(!Z&&!W)return Q;let J=await Z5($,{loadLatestOnInit:W,loadPrivateOnAuth:!0,failOnError:!1},Z);if($==="litellm"&&J?.knownModels)return J.knownModels;if(W&&J?.knownModels)return J.knownModels;return J?.knownModels?{...Q,...J.knownModels}:Q}function tX($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function Jk($){if(!$?.length)return;return[...new Set($)]}function Xk($,Z){return Jk([...$??[],...Z??[]])}function Yk($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function jk($){if(!$||typeof $!=="object")return!1;let Z=$;return typeof Z.path==="string"&&Z.path.trim().length>0&&typeof Z.label==="string"&&Z.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(Z.type))}function Vk($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(jk)}var S7={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},Sf={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function Bk($){if(!$)return[S7];if($.source!=="system")return $.baseUrl?[S7,Sf]:[S7];let Z=[];if($.env?.length)Z.push(S7);if($.baseUrl)Z.push(Sf);return Z}function Hk($,Z){return Z.split(".").reduce((Q,W)=>{if(!Q||typeof Q!=="object")return;return Q[W]},$)}function Gk($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function Kk($,Z,Q){if(!$?.length)return;let W={};for(let J of $){let Y=Gk(J.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:Hk(Z,J.path))??J.defaultValue;if(Y!==void 0)W[J.path]=Y}return W}function kf($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function eX($,Z){let Q=Z?.includes("vision")??!1,W=Z?.includes("reasoning")??!1;return Object.fromEntries($.map((J)=>[J,{id:J,name:J,supportsVision:Q,supportsAttachments:Q,supportsReasoning:W}]))}async function If($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await iZ($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function xf($,Z){let Q=$.read(),W=!1;if(Q.providers[Z])delete Q.providers[Z],W=!0;if(Q.lastUsedProvider===Z)delete Q.lastUsedProvider,W=!0;if(W)$.write(Q);C0.unregisterProvider(Z)}async function $Y($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=Z.baseUrl.trim(),J=Z.apiKey?.trim()??"";if(!W&&!J){let A=l2($);if((await E4(A)).providers[Q]){let f=await h7($,{providerId:Q});return{providerId:Q,settingsPath:f.settingsPath,modelsPath:f.modelsPath,modelsCount:0}}return xf($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(C0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let X=Z.name.trim();if(!X)throw Error("name is required");if(!W)throw Error("baseUrl is required");let Y=tX(Z.models),j=Z.modelsSourceUrl?.trim(),V=await If({providerId:Q,explicitModels:Y,modelsSourceUrl:j,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let B=Z.defaultModelId?.trim()&&V.includes(Z.defaultModelId.trim())?Z.defaultModelId.trim():V[0],H=Z.capabilities?.length?[...new Set(Z.capabilities)]:void 0,G=kf(Z.headers);$.saveProviderSettings({provider:Q,apiKey:J||void 0,baseUrl:W,headers:G,timeout:Z.timeoutMs,model:B,protocol:Z.protocol,client:Z.client},{setLastUsed:!1});let K=l2($),F=await E4(K);return F.providers[Q]={provider:{name:X,baseUrl:W,defaultModelId:B,protocol:Z.protocol,client:Z.client,capabilities:H,modelsSourceUrl:j},models:eX(V,H)},await C7(K,F),Z9(Q,F.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function y7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=l2($),J=await E4(W),X=J.providers[Q];if(!X){let q=$.getProviderSettings(Q);if(!q)throw Error(`provider "${Q}" does not exist`);let z=Z.modelsSourceUrl?.trim(),_=tX(Z.models)[0]??q.model?.trim();if(!_&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);X={provider:{name:Z.name?.trim()||yf(Q),baseUrl:Z.baseUrl?.trim()??q.baseUrl?.trim()??"",defaultModelId:_,protocol:q.protocol,client:q.client,capabilities:q.capabilities},models:_?eX([_],q.capabilities):{}}}if(!X.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let Y=Z.name?.trim()??X.provider.name.trim();if(!Y)throw Error("name is required");let j=Z.baseUrl?.trim()??X.provider.baseUrl.trim();if(!j)throw Error("baseUrl is required");let V=Z.capabilities===void 0?X.provider.capabilities:Z.capabilities===null?void 0:[...new Set(Z.capabilities)],B=Z.protocol===void 0?X.provider.protocol:Z.protocol??void 0,H=Z.client===void 0?X.provider.client:Z.client??void 0,G=tX(Z.models),K=Z.modelsSourceUrl===void 0?X.provider.modelsSourceUrl:Z.modelsSourceUrl?.trim()||void 0,F=Z.models!==void 0||Z.modelsSourceUrl!==void 0&&!!K,A=Object.keys(X.models??{}).map((q)=>q.trim()).filter(Boolean),L=await If({providerId:Q,explicitModels:G,modelsSourceUrl:K,fallbackModelIds:A,shouldRecompute:F});if(L.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let f=Z.defaultModelId===void 0?X.provider.defaultModelId?.trim():Z.defaultModelId?.trim(),D=f&&L.includes(f)?f:L[0],T={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:j,model:D};if(B)T.protocol=B;else delete T.protocol;if(H)T.client=H;else delete T.client;if(Z.apiKey!==void 0){let q=Z.apiKey?.trim()??"";if(q)T.apiKey=q;else delete T.apiKey}if(Z.headers!==void 0){let q=kf(Z.headers);if(q)T.headers=q;else delete T.headers}if(Z.timeoutMs!==void 0)if(typeof Z.timeoutMs==="number")T.timeout=Z.timeoutMs;else delete T.timeout;return $.saveProviderSettings(T,{setLastUsed:!1}),J.providers[Q]={provider:{name:Y,baseUrl:j,defaultModelId:D,protocol:B,client:H,capabilities:V,modelsSourceUrl:K},models:eX(L,V)},await C7(W,J),Z9(Q,J.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W,modelsCount:L.length}}async function h7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=l2($),J=await E4(W);if(!J.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete J.providers[Q],await C7(W,J),C0.unregisterProvider(Q),xf($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W}}async function ZY($,Z={}){let Q=$.read(),W=C0.getProviderIds(),J=await Promise.all(W.map(async(Y)=>{let[j,V]=await Promise.all([C0.getProvider(Y),C0.getModelsForProvider(Y)]),B=hf(V),H=Q.providers[Y]?.settings,G=j?.name??yf(Y),K=Xk(j?.capabilities,H?.capabilities),F=Vk(j?.metadata)??Bk(j);return{provider:{id:Y,name:G,models:B.length,color:Qk(Y),letter:Zk(G),enabled:Boolean(H),apiKey:H?eh(H):void 0,oauthAccessTokenPresent:H?$k(H):void 0,baseUrl:H?.baseUrl??j?.baseUrl,defaultModelId:j?.defaultModelId,protocol:H?.protocol??j?.protocol,client:H?.client??j?.client,capabilities:K,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:F,configValues:Kk(F,H,j),modelList:B},rank:Yk(j?.metadata)}}));J.sort((Y,j)=>{if(Y.rank!==j.rank)return Y.rank-j.rank;return Y.provider.name.localeCompare(j.provider.name)||Y.provider.id.localeCompare(j.provider.id)});let X=J.map((Y)=>Y.provider);if(Z.isClinePassEnabled!==!0)X=X.filter((Y)=>Y.id!==bf);return{providers:X,settingsPath:$.getFilePath()}}async function QY($,Z){let Q=$.trim(),W=await Wk(Q,Z),J=hf(W);return{providerId:Q,models:J}}function b7($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function gf($,Z){if(!b7(Z))return b7($)?{...$}:void 0;let Q=b7($)?{...$}:{};for(let[W,J]of Object.entries(Z)){if(J==null||J===""){delete Q[W];continue}if(b7(J)){let X=gf(Q[W],J);if(X&&Object.keys(X).length>0)Q[W]=X;else delete Q[W];continue}Q[W]=J}return Object.keys(Q).length>0?Q:void 0}function WY($,Z){let Q=Z.providerId.trim();if(Z.enabled===!1){let X=$.read();if(delete X.providers[Q],X.lastUsedProvider===Q)delete X.lastUsedProvider;return $.write(X),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let J={...$.getProviderSettings(Q)??{},provider:Q};for(let X of["apiKey","baseUrl","model","region"])if(Object.hasOwn(Z,X)&&typeof Z[X]==="string")if(Z[X].trim().length===0)delete J[X];else J[X]=Z[X];for(let X of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(Z,X))J[X]=Z[X];for(let X of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(Z,X)&&Z[X]!=null){let Y=gf(J[X],Z[X]);if(Y)J[X]=Y;else delete J[X]}return $.saveProviderSettings(J,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function JY($,Z){let Q=Z.trim(),W=$.getProviderSettings(Q),X=C0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,Y=W?.baseUrl?.trim()||X?.baseUrl?.trim(),j=nZ(Y,X?.baseUrl,X?.modelsSourceUrl);if(!W||!X||!Y||!j)return{providerId:Q,refreshed:!1};let V=await y7($,{providerId:Q,name:X.name,baseUrl:Y,apiKey:W.apiKey,headers:W.headers??null,timeoutMs:W.timeout??null,modelsSourceUrl:j,protocol:W.protocol??X.protocol??null,client:W.client??X.client??null,capabilities:W.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:V.modelsCount}}function XY($){let Z=$.trim().toLowerCase(),Q=j0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function YY($,Z,Q,W){let J=j0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let X=n8({onPrompt:async(Y)=>Y.defaultValue??"",openUrl:Q,onOpenUrlError:({error:Y})=>{throw Y instanceof Error?Y:Error(String(Y))}});return J.login({settings:Z,callbacks:X,telemetry:W})}function jY($,Z,Q,W,J){return W2({manager:$,providerId:Z,settings:Q,credentials:W,setLastUsed:J?.setLastUsed})}async function VY($,Z,Q,W){let J=n8({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return X6($,Z,{callbacks:J,telemetry:W})}function BY($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}var vf={};N(vf,{getProviderConfigFields:()=>HY});import*as k7 from"@cline/llms";var Fk=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],Ak={"openai-compatible":{description:"For Azure AI Foundry deployments, use a Base URL ending at /openai/deployments/<deployment> and set the Azure API version.",fields:{azureApiVersion:{label:"Azure API Version (optional)",placeholder:"2025-01-01-preview",note:"Required for Azure AI Foundry deployment URLs.",optional:!0}}},vertex:{mode:"replace",description:"Vertex AI can use Google Cloud Application Default Credentials with a project/region. An API key is optional for supported Gemini models.",fields:{gcpProjectId:{label:"Google Cloud Project ID",placeholder:"my-gcp-project"},gcpRegion:{label:"Google Cloud Region",placeholder:"us-central1",defaultValue:"us-central1"},apiKey:{label:"API Key (optional)",placeholder:"Leave blank to use Google Cloud credentials",optional:!0}}},bedrock:{mode:"replace",description:"AWS region is required for Bedrock. It can be auto-filled from AWS_REGION, AWS_DEFAULT_REGION, or ~/.aws/config.",fields:{awsRegion:{label:"AWS Region",placeholder:"us-east-1"},apiKey:{label:"AWS Bedrock API Key (optional)",placeholder:"Leave blank to use AWS profile/default chain",optional:!0},awsProfile:{label:"AWS Profile Name (optional)",placeholder:"default",optional:!0}}},ollama:{fields:{apiKey:{note:"Keep empty if no API key for local inference."}}},sapaicore:{mode:"replace",description:"SAP AI Core uses OAuth client credentials and an AI Core API URL, not a generic API key.",fields:{baseUrl:{label:"AI Core Base URL",placeholder:"https://api.ai.<region>.aws.ml.hana.ondemand.com"},sapClientId:{label:"Client ID",placeholder:"sb-...|xsuaa_std!b..."},sapClientSecret:{label:"Client Secret",placeholder:"SAP AI Core client secret"},sapTokenUrl:{label:"Token URL",placeholder:"https://<subdomain>.authentication.sap.hana.ondemand.com"},sapResourceGroup:{label:"Resource Group",placeholder:"default",optional:!0},sapDeploymentId:{label:"Deployment ID",placeholder:"SAP AI Core deployment id",optional:!0}}}};function fk($,Z){let Q={};for(let W of Fk){let J=$[W],X=Z[W];if(J||X)Q[W]={...J,...X}}return Q}function Uk($){let Z=Ak[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:fk($.fields,Z.fields)}}var Dk=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function Lk($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return Dk.has($)}function HY($){let Z=k7.normalizeProviderId($);if(Q2(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=k7.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:Z,authMethod:"local",fields:{}};let W=Q?.provider.baseUrl,J={apiKey:{}};if(Lk(Z,Q))J.baseUrl={defaultValue:W};return Uk({providerId:Z,authMethod:"api-key",fields:J})}var lf={};N(lf,{resolveLegacyClineAuth:()=>FY,migrateLegacyProviderSettings:()=>Q9});import{existsSync as _k,readFileSync as zk}from"node:fs";import{dirname as Tk,join as GY}from"node:path";import*as N4 from"@cline/llms";import{resolveClineDataDir as Ok}from"@cline/shared/storage";var I7="openai",df=N4.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,cf=128000;function FY($){let Z=$?.trim();if(!Z)return;try{let Q=JSON.parse(Z);if(!Q)return;let W=typeof Q.expiresAt==="number"&&Number.isFinite(Q.expiresAt)?Q.expiresAt<10000000000?Q.expiresAt*1000:Q.expiresAt:void 0;return{accessToken:Q.idToken,refreshToken:Q.refreshToken,expiresAt:W,accountId:Q.userInfo?.id}}catch{return}}function b($){let Z=$?.trim();return Z?Z:void 0}function qk($){return $==="credentials"?"iam":$}function uf($){if(!_k($))return;try{let Z=zk($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function Mk($){let Z=$.dataDir??Ok(),Q=$.globalStatePath??GY(Z,"globalState.json"),W=$.secretsPath??GY(Z,"secrets.json"),J=uf(Q),X=uf(W);if(!J&&!X)return;return{globalState:J??{},secrets:X??{}}}function KY($){if($===I7)return df;return $}function Rk($,Z,Q,W){let J=Q==="plan"?"planMode":"actMode",X=Z===W?b(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,j={openrouter:`${J}OpenRouterModelId`,cline:`${J}ClineModelId`,openai:`${J}OpenAiModelId`,ollama:`${J}OllamaModelId`,lmstudio:`${J}LmStudioModelId`,litellm:`${J}LiteLlmModelId`,requesty:`${J}RequestyModelId`,together:`${J}TogetherModelId`,fireworks:`${J}FireworksModelId`,sapaicore:`${J}SapAiCoreModelId`,groq:`${J}GroqModelId`,baseten:`${J}BasetenModelId`,huggingface:`${J}HuggingFaceModelId`,"huawei-cloud-maas":`${J}HuaweiCloudMaasModelId`,oca:`${J}OcaModelId`,aihubmix:`${J}AihubmixModelId`,hicap:`${J}HicapModelId`,nousResearch:`${J}NousResearchModelId`,"vercel-ai-gateway":`${J}VercelAiGatewayModelId`}[Z];return(j?b(typeof $[j]==="string"?$[j]:void 0):void 0)??X}function Ek($,Z,Q){let W=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,J=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(b).find(Boolean),X=J==="none"||J==="low"||J==="medium"||J==="high"||J==="xhigh"?J:void 0,Y=typeof W==="number"&&Number.isInteger(W)&&W>0?W:void 0;if(!X&&Y===void 0)return;return{...X?{effort:X}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function Nk($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),W=b(Q.access_token),J=b(Q.refresh_token),X=b(Q.accountId);if(!W&&!J&&!X)return;return{...W?{apiKey:W}:{},auth:{...W?{accessToken:W}:{},...J?{refreshToken:J}:{},...X?{accountId:X}:{}}}}catch{return}}function Ck($){let Z=N4.getGeneratedModelsForProvider($),W=N4.getProviderCollectionSync($)?.provider.defaultModelId;if(W&&Z[W])return W;return Object.keys(Z)[0]??void 0}function wk($,Z,Q,W){let J=KY($),X=b(W==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),Y=Rk(Z,$,W,X)??Ck(J),j=Ek(Z,J,W),V=typeof Z.requestTimeoutMs==="number"&&Number.isInteger(Z.requestTimeoutMs)&&Z.requestTimeoutMs>0?Z.requestTimeoutMs:void 0,B={anthropic:Q.apiKey,cline:Q.clineApiKey,openai:Q.openAiApiKey,"openai-native":Q.openAiNativeApiKey,openrouter:Q.openRouterApiKey,bedrock:Q.awsBedrockApiKey,gemini:Q.geminiApiKey,ollama:Q.ollamaApiKey,deepseek:Q.deepSeekApiKey,requesty:Q.requestyApiKey,together:Q.togetherApiKey,fireworks:Q.fireworksApiKey,qwen:Q.qwenApiKey,doubao:Q.doubaoApiKey,mistral:Q.mistralApiKey,litellm:Q.liteLlmApiKey,asksage:Q.asksageApiKey,xai:Q.xaiApiKey,moonshot:Q.moonshotApiKey,zai:Q.zaiApiKey,huggingface:Q.huggingFaceApiKey,nebius:Q.nebiusApiKey,sambanova:Q.sambanovaApiKey,cerebras:Q.cerebrasApiKey,groq:Q.groqApiKey,"huawei-cloud-maas":Q.huaweiCloudMaasApiKey,baseten:Q.basetenApiKey,"vercel-ai-gateway":Q.vercelAiGatewayApiKey,dify:Q.difyApiKey,minimax:Q.minimaxApiKey,hicap:Q.hicapApiKey,aihubmix:Q.aihubmixApiKey,nousResearch:Q.nousResearchApiKey,oca:Q.ocaApiKey},H={};if($==="openai-codex")Object.assign(H,Nk(Q));if($==="cline")try{let D=b(Q["cline:clineAccountId"]);if(D)H.auth={...H.auth??{},...FY(D)}}catch{}if($===I7&&Z.openAiHeaders)H.headers=Z.openAiHeaders;if($==="bedrock"){let D=qk(Z.awsAuthentication),U=D==="profile"||Z.awsUseProfile===!0;H.aws={accessKey:b(Q.awsAccessKey),secretKey:b(Q.awsSecretKey),sessionToken:b(Q.awsSessionToken),region:b(Z.awsRegion),authentication:D,profile:U?b(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:b(Z.awsBedrockEndpoint),customModelBaseId:b(W==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")H.gcp={projectId:b(Z.vertexProjectId),region:b(Z.vertexRegion)};if($===I7&&(Z.azureApiVersion||Z.azureIdentity!==void 0))H.azure={apiVersion:b(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let D=Z.sapAiCoreUseOrchestrationMode??!0;H.sap={clientId:b(Q.sapAiCoreClientId),clientSecret:b(Q.sapAiCoreClientSecret),tokenUrl:b(Z.sapAiCoreTokenUrl),resourceGroup:b(Z.sapAiResourceGroup),deploymentId:D?void 0:b(W==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:D}}if($==="oca"){H.oca={mode:Z.ocaMode};let D=b(Q.ocaRefreshToken);if(D)H.auth={...H.auth??{},refreshToken:D}}if($==="qwen")H.apiLine=Z.qwenApiLine;if($==="moonshot")H.apiLine=Z.moonshotApiLine;if($==="zai")H.apiLine=Z.zaiApiLine;if($==="minimax")H.apiLine=Z.minimaxApiLine;let G={anthropic:Z.anthropicBaseUrl,openai:Z.openAiBaseUrl,ollama:Z.ollamaBaseUrl,lmstudio:Z.lmStudioBaseUrl,litellm:Z.liteLlmBaseUrl,gemini:Z.geminiBaseUrl,requesty:Z.requestyBaseUrl,asksage:Z.asksageApiUrl,dify:Z.difyBaseUrl,oca:Z.ocaBaseUrl,aihubmix:Z.aihubmixBaseUrl,sapaicore:Z.sapAiCoreBaseUrl},K=b(B[$]),F=b(G[$]),A={provider:J,...K?{apiKey:K}:{},...Y?{model:Y}:{},...F?{baseUrl:F}:{},...j?{reasoning:j}:{},...V?{timeout:V}:{},...H},L=p8.safeParse(A);if(!L.success)return;return Object.keys(A).filter((D)=>D!=="provider").length>0?L.data:void 0}function Pk($,Z){if($!==df)return;if(!Z.baseUrl||!Z.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:Z.baseUrl,defaultModelId:Z.model},models:{[Z.model]:{id:Z.model,name:Z.model,contextWindow:cf,maxInputTokens:cf,capabilities:["streaming","tools","images"]}}}}function Sk($,Z){let Q=new Set;for(let J of[$.actModeApiProvider,$.planModeApiProvider]){let X=b(J);if(X)Q.add(X)}if(b(Z.apiKey))Q.add("anthropic");if(b(Z.openRouterApiKey))Q.add("openrouter");if(b(Z.openAiApiKey))Q.add(I7);if(b(Z.openAiNativeApiKey))Q.add("openai-native");if(b(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(b(Z.geminiApiKey))Q.add("gemini");if(b(Z.ollamaApiKey))Q.add("ollama");if(b(Z.awsAccessKey)||b(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||b($.awsProfile))Q.add("bedrock");if(b($.vertexProjectId)||b($.vertexRegion))Q.add("vertex");if(b(Z.clineApiKey))Q.add("cline");let W=FY(b(Z["cline:clineAccountId"]));if(W?.accessToken||W?.refreshToken||W?.accountId)Q.add("cline");if(b(Z.ocaApiKey))Q.add("oca");if(b(Z.sapAiCoreClientId)||b(Z.sapAiCoreClientSecret)||b($.sapAiCoreTokenUrl)||b($.sapAiCoreBaseUrl)||b($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function Q9($){let Z=$.providerSettingsManager.read(),Q=Mk($);if(!Q)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let{globalState:W,secrets:J}=Q,X=W.mode==="plan"?"plan":"act",Y=Sk(W,J),j=S$();j.providers={...Z.providers},j.lastUsedProvider=Z.lastUsedProvider;let V=new Date().toISOString(),B=0,H=GY(Tk($.providerSettingsManager.getFilePath()),"models.json"),G=oX(H),K=0;for(let L of Y){let f=KY(L);if(j.providers[f])continue;let D=wk(L,W,J,X);if(!D)continue;j.providers[f]={settings:D,updatedAt:V,tokenSource:"migration"},B+=1;let U=Pk(f,D);if(U&&!G.providers[f])G.providers[f]=U,K+=1}if(B===0&&K===0)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let F=b(X==="plan"?W.planModeApiProvider:W.actModeApiProvider),A=F?KY(F):void 0;if(j.lastUsedProvider=Z.lastUsedProvider??(A&&j.providers[A]?A:Object.keys(j.providers)[0]),$.providerSettingsManager.write(j),K>0)qf(H,G);return{migrated:B>0||K>0,providerCount:Object.keys(j.providers).length,lastUsedProvider:j.lastUsedProvider}}$7();_0();u9();var pf={};N(pf,{SessionVersioningService:()=>c$,SessionVersioningError:()=>k0});class k0 extends Error{code;constructor($,Z){super(Z);this.code=$;this.name="SessionVersioningError"}}function bk($){let Z=$.sessionId.trim();if(!Z)throw new k0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new k0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new k0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new k0("invalid_restore","checkpointRunCount must be a positive integer");return Z}class c${async restoreCheckpoint($){let Z=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,W=bk({sessionId:$.sessionId,restoreMessages:Z,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(W);if(!J)throw new k0("session_not_found",`Session ${W} not found`);let X=Z?await $.readMessages(W):void 0;if(Z&&X?.length===0)throw new k0("session_messages_not_found",`No messages found for session ${W}`);let Y=fX({session:J,messages:X,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:Z});if(Q)await($.applyWorkspaceCheckpoint??UX)(Y.cwd,Y.checkpoint);let j=U1({session:J,messages:X});if(!Z)return{checkpoint:Y.checkpoint,sourceSnapshot:j};let V=FX(J,$.checkpointRunCount),B=$.restore?.omitCheckpointMessageFromSession?AX(X??[],$.checkpointRunCount):Y.messages??[],H={sourceSession:J,sourceMessages:X,sourceSnapshot:j,plan:Y,restoredCheckpointMetadata:V,initialMessages:B,restoreMessages:Z,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new k0("invalid_restore","start is required when restore.messages is true");let G=$.buildStartInput?await $.buildStartInput(H,$.start):$.start,K=await $.startSession(G),F=$.getStartedSessionId?.(K);if(F)await($.retainCheckpointRefs??bG)(Y.cwd,F,V?.history??[]);let A=F&&$.readRestoredSession?await $.readRestoredSession(F):void 0;return{sessionId:F,startResult:K,messages:Y.messages,checkpoint:Y.checkpoint,sourceSnapshot:j,...A?{restoredSnapshot:U1({session:A,messages:B})}:{}}}}var rf={};N(rf,{FileTeamPersistenceStore:()=>x7});import{appendFileSync as yk,existsSync as AY,mkdirSync as hk,readFileSync as kk,renameSync as Ik,unlinkSync as xk,writeFileSync as gk}from"node:fs";import{join as fY}from"node:path";import{resolveTeamDataDir as mk}from"@cline/shared/storage";function vk($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class x7{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=vk($.teamName),Q=$.baseDir?.trim()||mk();this.dirPath=fY(Q,Z),this.statePath=fY(this.dirPath,"state.json"),this.taskHistoryPath=fY(this.dirPath,"task-history.jsonl")}loadState(){if(!AY(this.statePath))return;try{let $=kk(this.statePath,"utf8"),Z=JSON.parse($);if(Z.version!==1||!Z.teamState)return;for(let Q of Z.teammates??[])this.teammateSpecs.set(Q.agentId,Q);return KA(Z.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec($){this.teammateSpecs.set($.agentId,$)}removeTeammateSpec($){this.teammateSpecs.delete($)}persist($){if(!this.hasPersistableState($)){this.clearPersistedState();return}this.ensureDir();let Z={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Q=`${this.statePath}.tmp`;gk(Q,`${JSON.stringify(Z,null,2)}
732
+ `,"utf8"),Ik(Q,this.statePath)}appendTaskHistory($){let Z={};switch($.type){case"team_task_updated":Z=$.task;break;case"team_message":Z={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":Z={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":Z={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":Z={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":Z={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),yk(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:Z})}
733
+ `,"utf8")}ensureDir(){if(!AY(this.dirPath))hk(this.dirPath,{recursive:!0})}hasPersistableState($){let Z=$.exportState();if(this.teammateSpecs.size>0)return!0;if(Z.members.some((Q)=>Q.role==="teammate"))return!0;return Z.tasks.length>0||Z.mailbox.length>0||Z.missionLog.length>0}clearPersistedState(){if(AY(this.statePath))xk(this.statePath)}}var nf={};N(nf,{ChatViewStateSchema:()=>UY,ChatSummarySchema:()=>u7,ChatSessionStatusSchema:()=>m7,ChatSessionConfigSchema:()=>g7,ChatMessageSchema:()=>c7,ChatMessageRoleSchema:()=>v7});import{z as h}from"zod";var g7=h.object({workspaceRoot:h.string().min(1),cwd:h.string().optional(),provider:h.string().min(1),model:h.string().min(1),mode:h.enum(["act","plan"]).default("act"),apiKey:h.string(),systemPrompt:h.string().optional(),rules:h.string().optional(),maxIterations:h.number().int().positive().optional(),enableTools:h.boolean(),enableSpawn:h.boolean().optional(),enableTeams:h.boolean().optional(),autoApproveTools:h.boolean().optional(),missionStepInterval:h.number().int().positive().optional(),missionTimeIntervalMs:h.number().int().positive().optional()}),m7=h.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),v7=h.enum(["user","assistant","tool","system","status","error"]),c7=h.object({id:h.string().min(1),sessionId:h.string().nullable(),role:v7,content:h.string(),createdAt:h.number().int().nonnegative(),meta:h.object({stream:h.enum(["stdout","stderr"]).optional(),toolName:h.string().optional(),iteration:h.number().int().nonnegative().optional(),agentId:h.string().optional(),conversationId:h.string().optional(),hookEventName:h.string().optional(),inputTokens:h.number().int().nonnegative().optional(),outputTokens:h.number().int().nonnegative().optional(),checkpoint:h.object({ref:h.string(),createdAt:h.number().int().nonnegative(),runCount:h.number().int().positive(),kind:h.enum(["stash","commit"]).optional()}).optional()}).optional()}),u7=h.object({toolCalls:h.number().int().nonnegative(),tokensIn:h.number().int().nonnegative(),tokensOut:h.number().int().nonnegative()}),UY=h.object({sessionId:h.string().nullable(),status:m7,config:g7,messages:h.array(c7),rawTranscript:h.string(),error:h.string().nullable(),summary:u7});var af={};N(af,{CORE_BUILD_VERSION:()=>DY});var DY=rj;import{Agent as yI,createAgentRuntime as hI}from"@cline/agents";var sf={};N(sf,{fetchClineRecommendedModels:()=>_Y,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>d7});import{getClineEnvironmentConfig as ck}from"@cline/shared";var uk=5000,d7={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}],clinePass:[]};function dk($){return{recommended:$.recommended.map((Z)=>({...Z,tags:[...Z.tags]})),free:$.free.map((Z)=>({...Z,tags:[...Z.tags]})),clinePass:$.clinePass.map((Z)=>({...Z,tags:[...Z.tags]}))}}function LY($){if(!$||typeof $!=="object")return null;let Z=$;if(typeof Z.id!=="string"||Z.id.length===0)return null;return{id:Z.id,name:typeof Z.name==="string"&&Z.name.length>0?Z.name:Z.id,description:typeof Z.description==="string"?Z.description:"",tags:Array.isArray(Z.tags)?Z.tags.filter((Q)=>typeof Q==="string"):[]}}function lk($){if(!$||typeof $!=="object")return null;let Z=$,Q=Array.isArray(Z.recommended)?Z.recommended:[],W=Array.isArray(Z.free)?Z.free:[],J=Array.isArray(Z.clinePass)?Z.clinePass:[],X=Q.map(LY).filter((V)=>V!==null),Y=W.map(LY).filter((V)=>V!==null),j=J.map(LY).filter((V)=>V!==null);if(X.length===0&&Y.length===0&&j.length===0)return null;return{recommended:X,free:Y,clinePass:j}}function pk($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=ck().apiBaseUrl;try{return($.providerSettingsManager??new q1).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function rk($,Z,Q){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await $(Z,{signal:W.signal})}finally{clearTimeout(J)}}async function _Y($={}){try{let Z=pk($),Q=$.fetchImpl??fetch,W=await rk(Q,`${Z}/api/v1/ai/cline/recommended-models`,$.timeoutMs??uk);if(!W.ok)throw Error(`HTTP ${W.status}`);let J=await W.json(),X=lk(J);if(X)return X}catch{}return dk(d7)}var of={};N(of,{loadLlmsConfigFromFile:()=>TY,defineLlmsConfig:()=>zY});import{readFile as ik}from"node:fs/promises";import nk from"node:path";function zY($){return $}async function TY($){let Z=nk.resolve($),Q=await ik(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(J){let X=J instanceof Error?J.message:String(J);throw Error(`Failed to parse JSON config at "${Z}": ${X}`)}return ak(W,Z)}function ak($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let W=$.providers;if(!Array.isArray(W))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!W.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}var WU={};N(WU,{createLlmsSdk:()=>qY,DefaultLlmsSdk:()=>W9});import{BUILT_IN_PROVIDER_IDS as $U,createHandler as tk,createHandlerAsync as ek,getProviderCollection as $I,hasProvider as ZU,registerAsyncHandler as ZI,registerHandler as QI,registerModel as WI,registerProvider as QU}from"@cline/llms";function tf($){return $?{...$}:{}}function sk($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function ok($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function ef($){let Z=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:Z,defaultModel:$.collection.provider.defaultModelId,modelCount:Z.length}}class OY{providers=new Map;register($){ok($.id,$.models);let Z=$.defaultModel??$.models[0];if(!Z)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(Z))throw Error(`Default model "${Z}" is not included in configured models for "${$.id}".`);let Q=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Q?.models??[],...$.models]),defaultModel:Z,defaults:{...Q?.defaults??{},...tf($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:sk($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...tf($.settings)}})}registerModel($,Z){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([Z]),defaultModel:Z,defaults:{}});return}Q.models.add(Z)}createHandlerConfig($){let Z=this.require($.providerId),Q=$.modelId??Z.defaultModel;if(!Z.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...Z.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,Z){return this.providers.get($)?.models.has(Z)??!1}require($){let Z=this.providers.get($);if(!Z)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return Z}}class W9{configuredProviders=new OY;constructor($){this.applyConfig($)}createHandler($){return tk(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return ek(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(QU($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)QI($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)ZI($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let Z=$.exposeModels??Object.keys($.models),Q=$.defaultModel??Z[0];if(!Q)throw Error(`Provider "${$.id}" must define a default model.`);QU({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Q,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:Z,defaultModel:Q,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){WI($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...$U]}async getBuiltInProviders(){return(await Promise.all($U.map((Z)=>$I(Z)))).filter((Z)=>Z!==void 0).map((Z)=>ef({collection:Z}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,Z){return this.configuredProviders.hasModel($,Z)}applyConfig($){for(let Z of $.providers)this.configuredProviders.registerSelectionConfig(Z);for(let Z of $.models??[])this.registerModel(Z);for(let Z of $.customProviders??[])this.registerProvider(Z);for(let Z of this.configuredProviders.list()){let Q=ZU(Z.id),W=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,J=typeof W==="string"&&ZU(W);if(!Q&&!J)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function qY($){return new W9($)}UW();async function JI(){return Promise.resolve().then(() => ($7(),hA))}function mI(){return new Date().toISOString()}var vI="cline",cI="cline-pass";function uI($){if(GU($)!=="providers.json")return;let Z=EY($);if(GU(Z)!=="settings")return;return EY(Z)}class q1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??gI(),this.dataDir=$.dataDir??uI(this.filePath),this.dataDir||!$.filePath)Q9({providerSettingsManager:this,dataDir:this.dataDir});if(Pf(this),w7(this.read()),RY(this.filePath))try{HU(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!RY(this.filePath))return S$();try{let $=II(this.filePath,"utf8"),Z=JSON.parse($),Q=r8.safeParse(Z);if(Q.success)return w7(Q.data),Q.data}catch{}return S$()}write($){let Z=r8.parse($),Q=EY(this.filePath);if(!RY(Q))kI(Q,{recursive:!0,mode:448});xI(this.filePath,`${JSON.stringify(Z,null,2)}
734
+ `,"utf8");try{HU(this.filePath,384)}catch{}w7(Z)}saveProviderSettings($,Z={}){let Q=p8.parse($),W=this.read(),J=Q.provider,X=Z.setLastUsed!==!1,Y=W.providers[J],j=Z.tokenSource??Y?.tokenSource??"manual",V={...W,providers:{...W.providers,[J]:{settings:Q,updatedAt:mI(),tokenSource:j}},lastUsedProvider:X?J:W.lastUsedProvider};return this.write(V),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,J=j0(Z)?.storageProviderId;if(!J||J===Z)return Q;let X=$.providers[J]?.settings;if(!X)return Q;return p8.parse({...X.auth?{auth:X.auth}:{},...X.apiKey?{apiKey:X.apiKey}:{},...X.baseUrl?{baseUrl:X.baseUrl}:{},...Q??{},provider:Z})}getProviderSettings($){let Z=this.read();return this.resolveProviderSettings(Z,$)}resolveLastUsedProviderId($,Z){let Q=$.lastUsedProvider;if(Q===cI&&Z.isClinePassEnabled===!1)return vI;return Q}getLastUsedProviderSettings($={}){let Z=this.read(),Q=this.resolveLastUsedProviderId(Z,$);if(!Q)return;return this.resolveProviderSettings(Z,Q)}getProviderConfig($,Z){let Q=this.getProviderSettings($);if(!Q)return;return l0(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return l0(Z,$)}async refreshCatalog(){try{await d8({})}catch{}}}_0();J8();function dI($,Z){let Q=$?.expiresAt,W=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===W}class i7 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 NY{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new q1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=j0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let W=this.refreshInFlight.get(Z);if(W)return W;let J=this.resolveProviderApiKeyInternal($,Z,Q).catch((X)=>{throw X}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,J),J}async resolveProviderApiKeyInternal($,Z,Q){let W=j0($);if(!W)return null;let J=this.providerSettingsManager.getProviderSettings(Z);if(!J)return null;let X=Y6($,J);if(!X)return null;let Y=await W.refresh({settings:J,credentials:X,forceRefresh:Q,telemetry:this.telemetry});if(!Y)throw new i7($);let j=W2({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:Y,setLastUsed:!1,save:!1}),V=!dI(J.auth,j.auth);if(V)this.providerSettingsManager.saveProviderSettings(j,{setLastUsed:!1,tokenSource:"oauth"});return{apiKey:W.getApiKey(j)??Y.access,accountId:Y.accountId,refreshed:V}}}import{normalizeUserInput as lI}from"@cline/shared";import{nanoid as pI}from"nanoid";class KU{list($){return $?s0($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((V)=>V.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:s0($),updated:!1};let J=$.pendingPrompts[W];if(!J)return{sessionId:Z.sessionId,prompts:s0($),updated:!1};let X=Z.prompt===void 0?J.prompt:lI(Z.prompt).trim();if(!X)throw Error("prompt cannot be empty");let Y=Z.delivery??J.delivery,j={...J,prompt:X,mode:Z.mode??J.mode,delivery:Y};return $.pendingPrompts.splice(W,1),rI($,j,W,J.delivery),{sessionId:Z.sessionId,prompts:s0($),prompt:n7(j),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((X)=>X.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:s0($),removed:!1};let[J]=$.pendingPrompts.splice(W,1);return{sessionId:Z.sessionId,prompts:s0($),prompt:J?n7(J):void 0,removed:!0}}enqueue($,Z){let{prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y}=Z,j=$.pendingPrompts.findIndex((V)=>V.prompt===Q);if(j>=0){let[V]=$.pendingPrompts.splice(j,1),B={...V,prompt:Q,mode:W??V.mode,userImages:X??V.userImages,userFiles:Y??V.userFiles};if(J==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...B,delivery:"steer"});else $.pendingPrompts.push(B)}else{let V={id:`pending_${Date.now()}_${pI(5)}`,prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return s0($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((W)=>W.delivery==="steer");if(Z<0)return{prompts:s0($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:s0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:s0($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),s0($)}clear($){return $.pendingPrompts.length=0,[]}}class CY{deps;service=new KU;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}delete($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}enqueue($,Z){let Q=this.deps.getSession($);if(!Q||Q.aborting)return;this.service.enqueue(Q,Z),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let Z=this.deps.getSession($);if(!Z)return;let{entry:Q}=this.service.consumeSteer(Z);if(!Q)return;return this.emitPrompts(Z),this.emitSubmitted(Z,Q),Q}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:s0($)}})}scheduleDrain($,Z){if(Z.pendingPrompts.length===0||Z.aborting||Z.drainingPendingPrompts||!Z.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let Z=this.deps.getSession($);if(!Z)return;if(Z.aborting||Z.drainingPendingPrompts)return;if(!Z.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(Z);if(!Q)return;this.emitPrompts(Z),this.emitSubmitted(Z,Q),Z.drainingPendingPrompts=!0;let W=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{W=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,W&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=n7(Z);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}})}}function n7($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function s0($){return $.pendingPrompts.map(n7)}function rI($,Z,Q,W){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(W==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}_0();class PY{deps;constructor($){this.deps=$}dispatchAgentEvent($,Z,Q){let W=this.deps.getSession($),J={sessionId:$,config:Z,liveSession:W,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},X=x3(Q),Y=!!W&&(!X.agentId||X.agentId===wY(W.agent));g3(J,Q,Y?{isPrimaryAgentEvent:!0,agentId:wY(W.agent),conversationId:W.agent.getConversationId(),...W?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(eJ(Q,Z),Z.type==="agent_event"){let W={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};g3(W,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let W=r1({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:wY(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(W)B$(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...W})}}if(await $X($,Z,this.deps.invokeBackendOptional),Q)ZX(Q,$,Z,this.deps.emit)}async handlePluginEvent($,Z,Q){if(Z.name==="plugin_log"){this.handlePluginLog($,Z.payload);return}if(Z.name==="automation_event"){let V=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!V)return;let B=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!B)return;await V.ingestEvent(B);return}if(Z.name!=="steer_message"&&Z.name!=="queue_message"&&Z.name!=="pending_prompt")return;let W=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0,J=typeof W?.sessionId==="string"&&W.sessionId.trim().length>0?W.sessionId.trim():$,X=typeof W?.prompt==="string"?W.prompt.trim():"";if(!X)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":W?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(J,{prompt:X,delivery:Y})}handlePluginLog($,Z,Q){let W=this.deps.getSession($),J=Q??W?.config.extensionContext?.logger??W?.config.logger;if(!J||!Z||typeof Z!=="object")return;let X=Z,Y=typeof X.message==="string"?X.message:"";if(!Y)return;let j=X.metadata&&typeof X.metadata==="object"?{...X.metadata}:{};if(j.sessionId??=$,typeof X.pluginName==="string"&&X.pluginName)j.pluginName=X.pluginName;if(X.level==="debug"){J.debug(Y,j);return}if(X.level==="error"){if(J.error)J.error(Y,j);else J.log(Y,{...j,severity:"error"});return}J.log(Y,j)}}function wY($){return $.getAgentId()}function SY($){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:R$($.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 bY($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function FU($,Z,...Q){let W=bY($,Z);if(!W)throw Error(`session service method not available: ${Z}`);return Promise.resolve(W.apply($,Q))}async function AU($,Z,...Q){let W=bY($,Z);if(!W)return;await Promise.resolve(W.apply($,Q))}async function fU($,Z,...Q){let W=bY($,Z);if(!W)return;return await Promise.resolve(W.apply($,Q))}$1();_0();function yY($,Z,Q){return{onSubAgentEvent:(W)=>$.onAgentEvent(Q,Z,W),onSubAgentStart:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(W.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let X=r1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId});if(X)B$(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...X});v4(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:W.parentAgentId,agentId:W.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",Q,W)},onSubAgentEnd:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime,X=$.subAgentStarts.get(W.subAgentId),Y=X?Date.now()-X.startedAt:0,j=W.result?.text?W.result.text.split(`
735
+ `).length:0;v4(Z.telemetry,{event:"ended",ulid:Q,durationMs:Y,outputLines:j,errorMessage:W.error?String(W.error):void 0,agentId:W.subAgentId,parentId:W.parentAgentId,...r1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId})}),$.subAgentStarts.delete(W.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,W)}}}function hY($,Z,Q,W){let J=yY($,Z,Q);return q$({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let Y=Z.enableTools?U2({cwd:Z.cwd,...u0[l1({mode:Z.mode})],executors:W}):[];if(Z.enableSpawnAgent)Y.push(hY($,Z,Q,W));return y1(Y)},...J})}import{readFile as iI,stat as nI}from"node:fs/promises";var aI=20480000;async function UU($){let Z=await nI($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>aI)throw Error("File is too large to read into context.");let Q=await iI($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var DU=5000;function V9($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Wx($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=V9(Z.inputTokens),W=V9(Z.outputTokens),J=V9(Z.cacheReadTokens),X=V9(Z.cacheWriteTokens),Y=V9(Z.totalCost);if(Q===void 0||W===void 0||J===void 0||X===void 0||Y===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:J,cacheWriteTokens:X,totalCost:Y}}function Jx($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}class T1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new S5;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new c$;constructor($){let Z=oI();if(Z)Qx(Z);let Q=P0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new T4,this.createAgentInstance=$.createAgent??((W)=>new z$(W)),this.defaultCapabilities=M0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new q1,this.oauthTokenManager=$.oauthTokenManager??new NY({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new CY({getSession:(W)=>this.sessions.get(W),emit:(W)=>this.emit(W),send:(W)=>this.runTurn(W)}),this.pendingPrompts={list:async(W)=>this.pendingPromptsController.list(W.sessionId),update:async(W)=>this.pendingPromptsController.update(W),delete:async(W)=>this.pendingPromptsController.delete(W)},this.eventBridge=new PY({getSession:(W)=>this.sessions.get(W),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(W)=>this.emit(W),persistMessages:(W,J,X)=>{this.invoke("persistSessionMessages",W,J,X)},enqueuePendingPrompt:(W,J)=>this.pendingPromptsController.enqueue(W,J),invokeBackendOptional:(W,...J)=>this.invokeOptional(W,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.source??T0.CLI,Q=J0(),W=$.config.sessionId?.trim()??"",J=W||eI(),X=await this.applyInitialOAuthCredentials($),Y=X.initialMessages??[],j=Y.length>0?b8(Y):D0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let B=kY(V,J),H=kY(B,`${J}.messages.json`),G=kY(B,`${J}.json`),K=R$($.config),F=b0.parse({version:1,session_id:J,source:Z,pid:process.pid,started_at:Q,status:"running",interactive:$.interactive===!0,provider:X.config.providerId,model:X.config.modelId,cwd:X.config.cwd,workspace_root:K,team_name:X.config.teamName,enable_tools:X.config.enableTools,enable_spawn:X.config.enableSpawnAgent,enable_teams:X.config.enableAgentTeams,prompt:X.prompt?.trim()||void 0,messages_path:H}),A;if(W.length>0&&Y.length>0&&!X.prompt?.trim()){let P=await this.invokeOptionalValue("readSessionManifest",J);if(P)F=P,A={manifestPath:G,messagesPath:P.messages_path||H,manifest:P}}let f=await this.seedAggregateUsageFromArtifacts({initialUsage:j,sessionDir:B,rootMessagesPath:A?.messagesPath??H,manifest:F});this.usageBySession.set(J,j),this.aggregateUsageBySession.set(J,f);let D=M0(this.defaultCapabilities,$.capabilities),U=D?.toolExecutors??this.toolExecutors,T=$.localRuntime,q=T?.extensionContext?.logger??T?.logger,z=T?.extensionContext?.automation,_,E={getSession:(P)=>this.sessions.get(P),subAgentStarts:this.subAgentStarts,onAgentEvent:(P,H0,G0)=>this.eventBridge.dispatchAgentEvent(P,H0,G0),invokeBackendOptional:(P,...H0)=>this.invokeOptional(P,...H0)};_=await WK({input:X,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:D,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(P)=>{if(P.name==="plugin_log"){this.eventBridge.handlePluginLog(J,P.payload,q);return}this.eventBridge.handlePluginEvent(J,P,z)},onTeamEvent:(P)=>{this.eventBridge.handleTeamEvent(J,P),_.config.onTeamEvent?.(P)},createSpawnTool:()=>hY(E,_.config,J,U),createSubAgentLifecycleCallbacks:(P)=>yY(E,P,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(P)=>{await this.persistSessionMetadata(J,()=>P)}});let w=await this.runtimeBuilder.build(_.runtimeBuilderInput),y=_.config,l=_.providerConfig;if(w.teamRuntime&&!y.teamName?.trim())y.teamName=w.teamRuntime.getTeamName();let o=[...w.tools,...y.extraTools??[]],t=w.extensions??_.extensions,Q0={sessionId:J,providerId:l.providerId,modelId:l.modelId,apiKey:l.apiKey,baseUrl:l.baseUrl,headers:l.headers,knownModels:l.knownModels,providerConfig:l,thinking:y.thinking,reasoningEffort:y.reasoningEffort??l.reasoningEffort,maxTokensPerTurn:y.maxTokensPerTurn,systemPrompt:y.systemPrompt,maxIterations:y.maxIterations,execution:y.execution,prepareTurn:F6(y),tools:o,hooks:_.hooks,extensions:t,hookErrorMode:y.hookErrorMode,initialMessages:_.effectiveInput.initialMessages,userFileContentLoader:UU,toolPolicies:_.toolPolicies,requestToolApproval:_.requestToolApproval?async(P)=>{let H0=_.requestToolApproval,G0=this.sessions.get(J);if(G0)await this.markTurnPending(G0);try{if(!H0)return{approved:!1,reason:"Tool approval callback is not configured."};return await H0(P)}finally{let w0=this.sessions.get(J);if(w0?.status==="pending")await this.markTurnRunning(w0)}}:void 0,telemetry:y.telemetry,onConsecutiveMistakeLimitReached:y.onConsecutiveMistakeLimitReached,completionPolicy:w.completionPolicy,consumePendingUserMessage:()=>{let P=this.pendingPromptsController.consumeSteer(J);return P?v5(P.prompt,P.mode??y.mode):void 0},logger:w.logger??y.logger,extensionContext:y.extensionContext,onEvent:(P)=>this.eventBridge.dispatchAgentEvent(J,y,P)};Q0.hooks={...Q0.hooks,onEvent:async(P)=>{if(await _.hooks?.onEvent?.(P),P.type!=="assistant-message")return;let H0=this.sessions.get(J);if(!H0)return;let G0=H0.agent.getMessages();try{await this.invoke("persistSessionMessages",J,G0,y.systemPrompt)}catch(w0){y.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:w0}),p2(y.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:w0,severity:"warn",handled:!0,context:{sessionId:J,providerId:y.providerId,modelId:y.modelId}})}}};let e0=this.createAgentInstance(Q0);if(Q0.onEvent)e0.subscribeEvents(Q0.onEvent);w.registerLeadAgent?.(e0);let l$=r1({agentId:e0.getAgentId(),conversationId:e0.getConversationId(),teamId:w.teamRuntime?.getTeamId(),teamName:w.teamRuntime?.getTeamName(),teamRole:w.teamRuntime?"lead":void 0});if(XK(y,J,W.length>0,K,l$),l$)B$(y.telemetry,{ulid:J,modelId:y.modelId,provider:y.providerId,...l$});if(w.teamRuntime)b9(y.telemetry,{ulid:J,teamId:w.teamRuntime.getTeamId(),teamName:w.teamRuntime.getTeamName(),leadAgentId:e0.getAgentId(),restoredFromPersistence:w.teamRestoredFromPersistence===!0});let r={sessionId:J,config:y,sessionMetadata:X.sessionMetadata,...A?{artifacts:A}:{},source:Z,startedAt:A?.manifest.started_at??Q,updatedAt:A?.manifest.ended_at??A?.manifest.started_at??Q,pendingPrompt:F.prompt,runtime:w,agent:e0,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:_.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(this.sessions.set(J,r),this.emitStatus(J,"running"),Y.length>0&&!A){if(await this.ensureSessionPersisted(r),await this.invoke("persistSessionMessages",r.sessionId,Y,r.config.systemPrompt),!X.prompt?.trim())await this.updateStatus(r,"completed",0)}let M1;try{if(X.prompt?.trim())if(M1=await this.executeTurn(r,{prompt:X.prompt,userImages:X.userImages,userFiles:X.userFiles}),!r.interactive)await this.finalizeSingleRun(r,M1.finishReason);else await this.completeInteractiveTurn(r,M1.finishReason)}catch(P){if(r.interactive&&r.aborting)M1=await this.completeAbortedInteractiveTurn(r);else{p2(r.config.telemetry,{component:"core",operation:"session.start",error:P,severity:"error",handled:!1,context:{sessionId:r.sessionId,providerId:r.config.providerId,modelId:r.config.modelId}});try{await this.failSession(r)}catch(H0){r.config.logger?.error?.("Session failure cleanup threw",{sessionId:r.sessionId,error:H0})}throw P}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:H,result:M1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let W=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...W?{sessionMetadata:W}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),W=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:W??"immediate"}}),W==="queue"||W==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:W,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,J.finishReason);else await this.completeInteractiveTurn(Z,J.finishReason);if(J.finishReason==="error"||J.finishReason==="aborted")return J;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),J}catch(J){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw p2(Z.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),J}}async getAccumulatedUsage($){let Z=dJ(this.usageBySession.get($)),Q=dJ(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,this.pendingPromptsController.clearAborted(Q),Q.agent.abort(Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!B0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!B0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return SY(Z);let Q=$.trim();if(!Q)return;let W=await this.getRow(Q);if(W)return v6(W);let J=await this.readManifest(Q);return J?vQ(J):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(v6),W=new Set(Q.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(W.has(J.sessionId))continue;Q.unshift(SY(J))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return I$(Q.messagesPath);let W=await this.readManifest(Z);return I$(W?.messages_path)}async dispatchHookEvent($){await RF($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){let Q=this.getSessionOrThrow($);Q.config.modelId=Z,Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:Z}),Q.agent.updateConnection({modelId:Z})}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),W=Q.prompt.trim();if(!W)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=W;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let J=await this.executeAgentTurn($,W,Q.userImages,Q.userFiles);while(QX($,J.finishReason)){let X=await WX($);if(X.length===0)break;let Y=JX($,X);J=await this.executeAgentTurn($,Y)}return J}async completeInteractiveTurn($,Z){if(m5($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),W=D0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:W}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:W,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,W){let J=$.started||$.agent.getMessages().length>0,X=$.persistedMessages??$.agent.getMessages(),Y=this.usageBySession.get($.sessionId)??D0(),j=this.aggregateUsageBySession.get($.sessionId)??Y;$.turnUsageBaseline=Y,$.turnAggregateUsageBaseline=j,$.turnPrimaryUsage=D0(),$.turnUsageByAgent=new Map,E9($.config.telemetry,$.sessionId,$.config.mode),Q8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(Z,Q,W):()=>$.agent.run(Z,Q,W),B=await this.runWithAuthRetry($,V,X);$.started=!0;let H=IZ(B.messages,B,X);$.persistedMessages=H;let G=u6($.turnUsageByAgent?.values()??[]),K=f0(Y,B.usage),F=f0(f0(D0(),B.usage),G),A=f0(j,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(L)=>({...L??{},totalCost:K.totalCost,aggregatedAgentsCost:A.totalCost,usage:K,aggregateUsage:A})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,B),B}catch(V){throw p2($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((W)=>W.name===U0.SUBMIT_AND_EXIT&&W.error===void 0))return;$.submitAndExitObserved=!0,g4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,Z){let Q=R$($.config),W=Zx(Z.prompt).trim();if(!W)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let J=await T8(W,Q);YK($.config.telemetry,J);let X=v5(J.prompt,Z.mode??$.config.mode),Y=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),j=this.resolveAbsoluteFilePaths(Q,J.matchedFiles),V=Array.from(new Set([...Y,...j]));return{prompt:X,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=R$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:Z,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,Z){let Q=this.sessions.get($),W=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,J=Z(W?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Q.sessionMetadata=J,Q.artifacts.manifest.metadata=J}async finalizeSingleRun($,Z){if(m5($))return;let Q=Z==="aborted"||$.aborting,W=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":W?"failed":"completed",exitCode:W?1:0,shutdownReason:W?"session_error":"session_complete",endReason:Z})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(Z.status==="completed"&&!$.submitAndExitObserved)g4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});iQ($);let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),p2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,Z.status,Z.exitCode)}catch(J){W("update_status",J)}try{await $.agent.shutdown(Z.shutdownReason)}catch(J){W("agent_shutdown",J)}}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),p2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(Z)}catch(J){W("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let W=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!W.updated)return;let J=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(J.status=Z,B0(Z))delete J.ended_at,J.exit_code=null;else J.ended_at=W.endedAt??J0(),J.exit_code=typeof Q==="number"?Q:null;$.artifacts.manifest=J,$.status=Z,$.updatedAt=W.endedAt??J0(),$.endedAt=B0(Z)?null:J.ended_at,$.exitCode=J.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,J),this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(W){if(!Q2($.config.providerId)||!$x(W))throw W;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),Z()}}async syncOAuthCredentials($,Z){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:Z?.forceRefresh})}catch(W){if(W instanceof i7)throw Error(`${W.providerId} requires re-authentication.`);throw W}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new k1($);throw p2(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>tI(W)?W:IY($,W));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return r1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let Z=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=f0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let W=IY(Z),J=`${Q}.messages.json`,X;try{X=sI($)}catch{return D0()}let Y=D0();for(let j of X){if(!j.endsWith(".messages.json"))continue;if(j===J)continue;let V=IY($,j);if(V===W)continue;let B=await I$(V);if(B.length===0)continue;Y=f0(Y,b8(B))}return Y}withPersistedAggregateUsageFloor($,Z){let Q=Wx(Z.metadata?.aggregateUsage);if(Q)return Jx($,Q);let W=Z.metadata?.aggregatedAgentsCost;if(typeof W!=="number"||!Number.isFinite(W)||W<=$.totalCost)return $;return{...$,totalCost:W}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:U1({session:Z,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),DU))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(DU)).find((W)=>W.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return FU(this.sessionService,$,...Z)}invokeOptional($,...Z){return AU(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return fU(this.sessionService,$,...Z)}}function Yx($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function jx($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function YU($={}){let Z=new T1({sessionService:new z1(new L1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||T0.CLI,interactive:!1,config:{providerId:Xx(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:jx(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{configExtensions:Q.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Q,W){let J=await Z.runTurn({sessionId:Q,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((X)=>X.content)});if(!J)throw Error("local hub schedule runtime returned no turn result");return{result:Yx(J)}},async abortSession(Q){return await Z.abort(Q,Error("hub schedule abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}import{resolveClineBuildEnv as fD}from"@cline/shared";function Vx($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
736
+ `).trim()||void 0}var LU=120,xY="...";function J9($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=LU)return Z;let Q=LU-Buffer.byteLength(xY,"utf8");if(Q<=0)return xY;let W="";for(let J of Z){if(Buffer.byteLength(W+J,"utf8")>Q)break;W+=J}return`${W}${xY}`}async function _U($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await I$(Q)].reverse().find((V)=>V.role==="assistant"),X=J?Vx(J.content):void 0,Y=$?.workspaceRoot?.trim()||"workspace",j=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():Y;return{title:`Task completed (${Z})`,body:J9(X&&X.length>0?X:j.length>0?j:Y),severity:"info"}}import{captureSdkError as e7,createSessionId as Yg}from"@cline/shared";import{createSessionId as Kx}from"@cline/shared";import{createSessionId as Gx}from"@cline/shared";function Bx($){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 Hx($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())Z.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())Z.parentAgentId=$.parentAgentId;if($.agentId?.trim())Z.agentId=$.agentId;if($.conversationId?.trim())Z.conversationId=$.conversationId;if($.messagesPath?.trim())Z.messagesPath=$.messagesPath;if($.prompt?.trim())Z.prompt=$.prompt;if($.provider?.trim())Z.provider=$.provider;if($.model?.trim())Z.model=$.model;if($.source?.trim())Z.source=$.source;if(typeof $.pid==="number")Z.pid=$.pid;return Object.keys(Z).length>0?Z:void 0}function a7($,Z,Q,W){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:Bx($.status),participants:Z?[...Z.participants.values()]:[],metadata:Hx($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Q?{usage:{...Q}}:{},...W?{aggregateUsage:{...W}}:{}}}function c($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function x($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function s7($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function I0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function r2($,Z,Q){return{version:"v1",event:$,eventId:Gx("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function o0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let W=await $.sessionHost.getAccumulatedUsage?.(Z);return a7(Q,$.sessionState.get(Z),W?.usage,W?.aggregateUsage)}async function t0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[W,J]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return U1({session:Q,messages:W,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function o7($,Z,Q,W,J={}){let X=$.sessionState.get(Z);if(X){if(J.interactive!==void 0)X.interactive=J.interactive;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:W});return X}let Y={createdByClientId:Q,interactive:J.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:W}]])};return $.sessionState.set(Z,Y),Y}async function gY($,Z){let Q=Kx("approval_"),W=Z.sessionId;if($.sessionState.get(W)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((X)=>{$.pendingApprovals.set(Q,{sessionId:W,resolve:X}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:Z.sessionId,agentId:Z.agentId,conversationId:Z.conversationId,iteration:Z.iteration,toolCallId:Z.toolCallId,toolName:Z.toolName,inputJson:JSON.stringify(Z.input??null),policy:Z.policy},W))})}function mY($,Z,Q){let W=$.pendingApprovals.get(Z);if(!W)return;return $.pendingApprovals.delete(Z),W.resolve(Q),{sessionId:W.sessionId}}function vY($,Z,Q){let W=0;for(let[J,X]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:J,sessionId:X.sessionId}))continue;$.pendingApprovals.delete(J),X.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:J,approved:!1,cancelled:!0,reason:Q},X.sessionId)),W+=1}return W}async function zU($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return x(Z,"approval_not_found",`Unknown approval: ${Q}`);let J=typeof Z.payload?.reason==="string"?Z.payload.reason:Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)&&typeof Z.payload.payload.reason==="string"?Z.payload.payload.reason:void 0,X=Z.payload?.approved===!0,Y=mY($,Q,{approved:X,reason:J});if(!Y)return x(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:X,reason:J},Y.sessionId)),c(Z,{approvalId:Q,approved:X})}import{createSessionId as fx}from"@cline/shared";function Fx($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var TU={debug:10,info:20,warn:30,error:40,silent:50};function Ax(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function u($,Z,Q={}){if(TU[$]<TU[Ax()])return;let W=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([J,X])=>[J,Fx(X)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${W}`);return}console.log(`[hub] ${W}`)}function cY($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);u("error",$,{error:Q})}async function OU($,Z,Q,W,J,X){let Y=fx("capreq_"),j=performance.now();return u("info","capability.request.start",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J}),await new Promise((V,B)=>{$.pendingCapabilityRequests.set(Y,{sessionId:Z,targetClientId:J,capabilityName:Q,onProgress:X,resolve:(H)=>{if(u(H.ok?"info":"warn","capability.request.end",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J,ok:H.ok,error:H.error,durationMs:Math.round(performance.now()-j)}),!H.ok){B(Error(H.error||`Capability ${Q} was rejected by ${J}.`));return}V(H.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:Y,targetClientId:J,capabilityName:Q,payload:W},Z)),u("info","capability.request.published",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J})})}function qU($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);if((Z.clientId?.trim()||"")!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return W.onProgress?.(X),c(Z,{requestId:Q})}function u$($,Z,Q){let W=0;for(let[J,X]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:J,...X}))continue;$.pendingCapabilityRequests.delete(J),u("warn","capability.request.cancelled",{requestId:J,sessionId:X.sessionId,capabilityName:X.capabilityName,targetClientId:X.targetClientId,reason:Q}),X.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:X.capabilityName,targetClientId:X.targetClientId,ok:!1,cancelled:!0,error:Q},X.sessionId)),W+=1}return W}async function MU($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",W=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",J=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!W||!J)return x(Z,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{},Y=await $.requestCapability(Q,W,X,J);return c(Z,Y)}catch(X){return x(Z,"capability_request_failed",X instanceof Error?X.message:String(X))}}function RU($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);let J=Z.clientId?.trim()||"";if(J!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);$.pendingCapabilityRequests.delete(Q);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,Y=typeof Z.payload?.error==="string"?Z.payload.error:void 0,j=Z.payload?.ok===!0;return u(j?"info":"warn","capability.respond",{requestId:Q,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,error:Y}),W.resolve({ok:j,payload:X,error:Y}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,payload:X,error:Y},W.sessionId)),c(Z,{requestId:Q,ok:j})}import{createSessionId as Ux}from"@cline/shared";function EU($,Z){let Q=Z.payload,W=Q?.clientId?.trim()||Z.clientId?.trim()||Ux("client_");return $.clients.set(W,{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,actorKind:Q?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Q?.transport??"native",capabilities:Q?.capabilities??[],metadata:Q?.metadata,workspaceContext:Q?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),c(Z,{clientId:W})}function NU($,Z){let Q=Z.clientId?.trim(),W=Q?$.clients.get(Q):void 0;if(!Q||!W)return x(Z,"client_not_found","Client is not registered with this hub.");let J=s7(Z.payload?.metadata);if(W.lastSeenAt=Date.now(),J)W.metadata=JSON.parse(JSON.stringify(J));return c(Z)}function CU($,Z,Q){let W=Z.clientId?.trim();if(W)$.clients.delete(W),Q(W),$.publish($.buildEvent("hub.client.disconnected",{clientId:W}));return c(Z)}function wU($,Z){return c(Z,{clients:[...$.clients.values()]})}_0();import{existsSync as bU,mkdirSync as Dx,readdirSync as Lx,readFileSync as _x,rmSync as zx,writeFileSync as Tx}from"node:fs";import{dirname as Ox,join as PU}from"node:path";import{CONNECTOR_PLATFORMS as qx,connectorChannelsFromPlatforms as Mx,listConnectorCatalog as yU,shouldIncludeConnectorField as Rx}from"@cline/shared";import{resolveConnectorDataDir as Ex,resolveConnectorSettingsPath as dY}from"@cline/shared/storage";var Nx=1,SU={startedAt:($)=>typeof $.startedAt==="string"?$.startedAt:void 0,port:($)=>typeof $.port==="number"?$.port:void 0,baseUrl:($)=>typeof $.baseUrl==="string"?$.baseUrl:void 0,connectionMode:($)=>typeof $.connectionMode==="string"?$.connectionMode:void 0,userName:($)=>typeof $.userName==="string"?$.userName:void 0,botUsername:($)=>typeof $.botUsername==="string"?$.botUsername:void 0,applicationId:($)=>typeof $.applicationId==="string"?$.applicationId:void 0,phoneNumberId:($)=>typeof $.phoneNumberId==="string"?$.phoneNumberId:void 0},Cx={discord:{required:["userName","applicationId"],optional:["startedAt","port","baseUrl"]},telegram:{required:["botUsername"],optional:["startedAt"]},gchat:{required:["userName"],optional:["startedAt","port","baseUrl"]},linear:{required:["userName"],optional:["startedAt","port","baseUrl"]},slack:{required:["userName"],optional:["startedAt","connectionMode","port","baseUrl"]},whatsapp:{required:["userName"],optional:["startedAt","phoneNumberId","port","baseUrl"]}};function d$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function B9($){return typeof $==="string"?$.trim():void 0}function hU($){if(!bU($))return;try{let Z=JSON.parse(_x($,"utf8"));return d$(Z)?Z:void 0}catch{return}}function lY(){let $=hU(dY()),Z=d$($?.connectors)?$.connectors:{},Q={};for(let[W,J]of Object.entries(Z)){if(!d$(J))continue;let X=B9(J.type),Y=B9(J.configuredAt),j=B9(J.updatedAt);if(!X||!Y||!j)continue;let V=t7(J.values),B=d$(J.security)?{enabled:J.security.enabled===!0,values:t7(J.security.values)}:void 0;Q[W]={type:X,values:V,security:B,configuredAt:Y,updatedAt:j}}return{version:Nx,connectors:Q}}function kU($){let Z=dY();Dx(Ox(Z),{recursive:!0}),Tx(Z,`${JSON.stringify($,null,2)}
737
+ `,"utf8")}function t7($){if(!d$($))return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W.trim();return Z}function wx($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function Px($){let Z=PU(Ex(),$);if(!bU(Z))return[];return Lx(Z).filter((Q)=>Q.endsWith(".json")&&!Q.endsWith(".threads.json")).map((Q)=>PU(Z,Q))}function Sx($,Z,Q){let W=Z.botUsername??Z.userName??Z.applicationId??Z.phoneNumberId??String(Q);return`${$}:${W}`}function bx($,Z){let Q=hU(Z);if(!Q)return;let W=typeof Q.pid==="number"?Q.pid:void 0,J=typeof Q.hubUrl==="string"?Q.hubUrl:typeof Q.rpcAddress==="string"?Q.rpcAddress:void 0;if(!W||!J||!wx(W))return;let X=Cx[$];if(!X)return;let Y={};for(let j of X.required){let V=SU[j](Q);if(!V||typeof V==="string"&&!V.trim())return;Y[j]=V}for(let j of X.optional){let V=SU[j](Q);if(V!==void 0)Y[j]=V}return{id:Sx($,Y,W),type:$,pid:W,hubUrl:J,...Y}}function yx(){let $=[];for(let{name:Z}of yU())for(let Q of Px(Z)){let W=bx(Z,Q);if(W)$.push(W)}return $.sort((Z,Q)=>{if(Z.type!==Q.type)return Z.type.localeCompare(Q.type);let W=Z.botUsername??Z.userName??"",J=Q.botUsername??Q.userName??"";return W.localeCompare(J)})}function hx(){let $=lY();return Object.entries($.connectors).map(([Z,Q])=>({id:Z,type:Q.type,configuredAt:Q.configuredAt,updatedAt:Q.updatedAt})).sort((Z,Q)=>Z.type.localeCompare(Q.type))}function pY(){return{available:Mx(),active:yx(),configured:hx()}}function kx($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function Ix($,Z){let Q={};for(let J of $.fields)Q[J.flag]=Z[J.flag]??J.initialValue??"";let W={};for(let J of $.fields){if(!Rx(J,Q))continue;kx(J,Q),W[J.flag]=Q[J.flag]}return W}function xx($){if(!d$($))throw Error("connector.configure payload must be an object.");let Z=B9($.channel);if(!Z)throw Error("channel is required");let Q=qx.find((K)=>K.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(yU().map((K)=>K.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let J=t7($.values),X=Ix(Q,J),Y=d$($.security)?$.security:{},j=Y.enabled===!0,V=t7(Y.values);if(j&&Q.security)for(let K of Q.security.fields){let F=V[K.key];if(!F)throw Error(K.requiredMessage);let A=K.validate?.(F);if(A)throw Error(A)}let B=lY(),H=new Date().toISOString(),G=B.connectors[Z];return B.connectors[Z]={type:Z,values:X,security:j?{enabled:!0,values:V}:{enabled:!1,values:{}},configuredAt:G?.configuredAt??H,updatedAt:H},kU(B),pY()}function gx($){if(!d$($))throw Error("connector.delete_config payload must be an object.");let Z=B9($.channel);if(!Z)throw Error("channel is required");let Q=lY();if(delete Q.connectors[Z],Object.keys(Q.connectors).length>0)kU(Q);else zx(dY(),{force:!0});return pY()}function mx($){return $==="connector.configure"||$==="connector.delete_config"}function uY($,Z,Q){if(!mx(Z.command))return;W8($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function IU($,Z){try{if(Z.command==="connector.channels")return c(Z,pY());if(Z.command==="connector.configure"){let Q=xx(Z.payload);return uY($,Z,!0),c(Z,Q)}if(Z.command==="connector.delete_config"){let Q=gx(Z.payload);return uY($,Z,!0),c(Z,Q)}return x(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return uY($,Z,!1),x(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var vx=30000;function cx($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function ux($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function dx($,Z,Q){let W=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return x($,s$,W)}function lx($){return $?$:void 0}function px($){let Z=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(Z&&Number.isFinite(Z)&&Z>0)return Math.floor(Z);let Q=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(Q&&Number.isFinite(Q)&&Q>0)return Math.floor(Q*1000);return}async function rx($,Z,Q,W){let J=performance.now(),X=!1,Y={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:W},j=setInterval(()=>{if(X)return;let H=Math.round(performance.now()-J);u("warn","run.heartbeat",{...Y,elapsedMs:H}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:H,...W?{timeoutMs:W}:{}},Q.sessionId))},vx),V=$.sessionHost.runTurn(Q);V.then((H)=>{if(!X)return;u("warn","run.late_end",{...Y,elapsedMs:Math.round(performance.now()-J),finishReason:H?.finishReason})},(H)=>{if(!X)return;u("error","run.late_error",{...Y,elapsedMs:Math.round(performance.now()-J),error:H})});let B;try{if(!W)return await V;return await Promise.race([V,new Promise((H,G)=>{B=setTimeout(()=>{let K=`Hub run ${Z.command} timed out after ${W}ms.`;X=!0,clearInterval(j),G(Error(K)),u("error","run.timeout",{...Y,elapsedMs:Math.round(performance.now()-J)}),vY($,(F)=>F.sessionId===Q.sessionId,K),u$($,(F)=>F.sessionId===Q.sessionId,K),$.sessionHost.abort(Q.sessionId,K).catch((F)=>{u("error","run.timeout_abort_failed",{...Y,error:F})})},W)})])}finally{if(X=!0,clearInterval(j),B)clearTimeout(B)}}async function xU($,Z){let Q=I0(Z),W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.prompt==="string"?W.prompt:typeof W.input==="string"?W.input:"";if(!J.trim())return x(Z,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let X=W.attachments&&typeof W.attachments==="object"&&!Array.isArray(W.attachments)?W.attachments:void 0,Y=Array.isArray(X?.userFiles)?X.userFiles.filter((H)=>typeof H==="string"):void 0,j=px(W);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let V;try{V=await rx($,Z,{sessionId:Q,prompt:J,mode:lx(W.mode),delivery:W.delivery==="queue"||W.delivery==="steer"?W.delivery:void 0,userImages:Array.isArray(X?.userImages)?X.userImages:void 0,userFiles:Y,timeoutMs:j},j)}catch(H){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(I1(H))return dx(Z,Q,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Q)),H}if(V){let H=await t0($,Q),G=ux(V);if($.publish($.buildEvent(cx(V.finishReason),{reason:V.finishReason,...G?{error:G}:{},result:V,...H?{snapshot:H}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let B=await t0($,Q);return c(Z,V||B?{...V?{result:V}:{},...B?{snapshot:B}:{}}:void 0)}async function gU($,Z){let Q=I0(Z),W=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";vY($,(J)=>J.sessionId===Q,W);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(J){u("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:J})}finally{u$($,(J)=>J.sessionId===Q,W)}return c(Z,{applied:!0})}async function mU($,Z){let Q=D4(Z.payload?.payload);if(!Q)return x(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),c(Z,{applied:!0})}async function vU($,Z){switch(Z.type){case"chunk":return;case"agent_event":await ix($,Z);return;case"hook":if(Z.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:Z.payload.toolName},Z.payload.sessionId));else if(Z.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:Z.payload.toolName},Z.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:Z.payload.sessionId,summary:Z.payload.summary,lastEvent:Z.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,Z.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:Z.payload.sessionId,prompts:Z.payload.prompts},Z.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:Z.payload.id,prompt:Z.payload.prompt,delivery:Z.payload.delivery,attachmentCount:Z.payload.attachmentCount,userImages:Z.payload.userImages,userFiles:Z.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:Z.payload.sessionId,prompt:Q},Z.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:Z.payload.sessionId,snapshot:Z.payload.snapshot},Z.payload.sessionId));return;case"status":{let[Q,W]=await Promise.all([o0($,Z.payload.sessionId),t0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...W?{snapshot:W}:{}},Z.payload.sessionId));return}case"ended":await nx($,Z);return;default:return}}async function ix($,Z){let{sessionId:Q,event:W}=Z.payload;if(W.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:W.iteration},Q));return}if(W.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:W.iteration,hadToolCalls:W.hadToolCalls,toolCallCount:W.toolCallCount},Q));return}if(W.type==="content_start"){if(W.contentType==="text"&&typeof W.text==="string"&&W.text.length>0){$.publish($.buildEvent("assistant.delta",{text:W.text},Q));return}if(W.contentType==="reasoning"){if(W.redacted&&!W.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof W.reasoning==="string"&&W.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:W.reasoning,redacted:W.redacted===!0},Q));return}if(W.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:W.toolCallId,toolName:W.toolName,input:W.input},Q));return}}if(W.type==="content_end"){switch(W.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:W.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:W.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:W.toolCallId,toolName:W.toolName,output:W.output,error:W.error},Q));break}return}if(W.type==="usage"){let J;try{J=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{J=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:W.inputTokens,outputTokens:W.outputTokens,cacheReadTokens:W.cacheReadTokens??0,cacheWriteTokens:W.cacheWriteTokens??0,totalCost:W.cost??0},totals:{inputTokens:W.totalInputTokens,outputTokens:W.totalOutputTokens,cacheReadTokens:W.totalCacheReadTokens??0,cacheWriteTokens:W.totalCacheWriteTokens??0,totalCost:W.totalCost??0},usage:J?.usage,aggregateUsage:J?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":W.parentAgentId?"subagent":"lead",agentId:W.agentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(W.type==="done")$.publish($.buildEvent("agent.done",{reason:W.reason,text:W.text,iterations:W.iterations,usage:W.usage},Q))}async function nx($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),W=Q===Z.payload.reason||Q==="run.start.reply";if(W)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[J,X]=await Promise.all([o0($,Z.payload.sessionId),t0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let Y=await _U(J);$.publish($.buildEvent("ui.notify",Y,Z.payload.sessionId))}if(W)return;$.publish($.buildEvent(Z.payload.reason==="aborted"?"run.aborted":Z.payload.reason==="error"||Z.payload.reason==="failed"?"run.failed":"run.completed",{reason:Z.payload.reason,...X?{snapshot:X}:{}},Z.payload.sessionId))}import{createSessionId as dU,parseRuntimeConfigExtensions as lU}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as J10,HUB_COMPACTION_CAPABILITY as X10,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Y10,HUB_HOOK_CAPABILITY_PREFIX as j10,HUB_MISTAKE_LIMIT_CAPABILITY as V10,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as B10,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as H10,isHubToolExecutorName as ax}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as f10,HUB_COMPACTION_CAPABILITY as U10,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as D10,HUB_HOOK_CAPABILITY_PREFIX as L10,HUB_MISTAKE_LIMIT_CAPABILITY as _10,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as z10,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as T10}from"@cline/shared";var sx=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function i2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function ox($,Z){let Q=typeof $.name==="string"?$.name.trim():"",W=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",X=i2($.inputSchema);if(!Q||!W||!X||!J||Z.has(J))return;return Z.add(J),{kind:"tool",capabilityName:J,name:Q,description:W,inputSchema:X,...i2($.lifecycle)?{lifecycle:i2($.lifecycle)}:{}}}function iY($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let W of $){if(!W||typeof W!=="object"||Array.isArray(W))continue;let J=W,X=J.kind,Y=typeof J.capabilityName==="string"?J.capabilityName.trim():"";if(!Y||Q.has(Y))continue;if(X==="tool"){let j=ox(J,Q);if(j)Z.push(j);continue}if(X==="toolExecutor"){let j=J.executor;if(!ax(j))continue;Q.add(Y),Z.push({kind:"toolExecutor",capabilityName:Y,executor:j});continue}if(X==="hook"){let j=typeof J.name==="string"?J.name.trim():"";if(!j)continue;Q.add(Y),Z.push({kind:"hook",capabilityName:Y,name:j});continue}if(X==="compaction"){Q.add(Y),Z.push({kind:"compaction",capabilityName:Y,...i2(J.config)?{config:i2(J.config)}:{}});continue}if(X==="checkpoint"){Q.add(Y),Z.push({kind:"checkpoint",capabilityName:Y,...i2(J.config)?{config:i2(J.config)}:{}});continue}if(X==="mistakeLimit"){Q.add(Y),Z.push({kind:"mistakeLimit",capabilityName:Y});continue}if(X==="userInstructionService")Q.add(Y),Z.push({kind:"userInstructionService",capabilityName:Y})}return Z}function uU($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function tx($){return Object.hasOwn($,"update")?$.update:$}function H9($){return $.trim().replace(/^\/+/,"").toLowerCase()}function ex($){let Z=($??[]).map(H9).filter(Boolean);return Z.length>0?new Set(Z):void 0}function $g($,Z,Q){if(!Q)return!0;let W=H9($),J=H9(Z),X=W.includes(":")?W.split(":").at(-1)??W:W,Y=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(W)||Q.has(J)||Q.has(X)||Q.has(Y)}function rY($,Z){let Q=ex(Z);return $.records.skill.map((W)=>({id:W.id,name:W.item.name,description:"description"in W.item&&typeof W.item.description==="string"?W.item.description:void 0,disabled:W.item.disabled===!0,skill:W.item})).filter((W)=>$g(W.id,W.name,Q))}function cU($,Z){let Q=async(W,J)=>{let X=H9(W),j=rY($,Z).filter((K)=>K.id===X||H9(K.name)===X||K.id.endsWith(`:${X}`)).filter((K)=>!K.disabled);if(j.length!==1)return j.length>1?`Skill "${W}" is ambiguous. Use one of: ${j.map((K)=>K.id).join(", ")}`:`Skill "${W}" not found.`;let V=j[0].skill,B=J?.trim(),H=B?`
738
+ <command-args>${B}</command-args>`:"",G=V.description?.trim()?`Description: ${V.description.trim()}
739
+
740
+ `:"";return`<command-name>${V.name}</command-name>${H}
741
741
  <command-instructions>
742
742
  ${G}${V.instructions}
743
- </command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>rY($,Z).map(({skill:W,...J})=>J),enumerable:!0}),Q}function Jg($,Z,Q,W){let J={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},X=async()=>{let Y=await W($,Q.capabilityName,{},Z);if(Y?.snapshot)J=Y.snapshot};return{start:X,stop:()=>{},refreshType:async()=>{await X()},listRecords:(Y)=>[...J.records[Y]],listRuntimeCommands:()=>[...J.runtimeCommands],resolveRuntimeSlashCommand:(Y)=>{if(!Y.startsWith("/")||Y.length<2)return Y;let V=Y.match(/^\/(\S+)/)?.[1];if(!V)return Y;let H=J.runtimeCommands.find((B)=>B.name===V);return H?`${H.instructions}${Y.slice(V.length+1)}`:Y},hasConfiguredSkills:(Y)=>rY(J,Y).some((j)=>!j.disabled),createSkillsExecutor:(Y)=>dU(J,Y),createExtension:(Y)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[Y.includeRules?"rules":void 0,Y.registerSkillsTool?"tools":void 0,Y.includeSkills||Y.includeWorkflows?"commands":void 0].filter((j)=>Boolean(j))},setup(j){if(Y.includeRules)j.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>t2(J.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(Y.registerSkillsTool)j.registerTool(V2(dU(J,Y.allowedSkillNames)));for(let V of J.runtimeCommands.filter((H)=>H.kind==="skill"&&Y.includeSkills||H.kind==="workflow"&&Y.includeWorkflows))j.registerCommand({name:V.name,description:V.description,handler:(H)=>{let B=H.trim();return B?`${V.instructions}
743
+ </command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>rY($,Z).map(({skill:W,...J})=>J),enumerable:!0}),Q}function Zg($,Z,Q,W){let J={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},X=async()=>{let Y=await W($,Q.capabilityName,{},Z);if(Y?.snapshot)J=Y.snapshot};return{start:X,stop:()=>{},refreshType:async()=>{await X()},listRecords:(Y)=>[...J.records[Y]],listRuntimeCommands:()=>[...J.runtimeCommands],resolveRuntimeSlashCommand:(Y)=>{if(!Y.startsWith("/")||Y.length<2)return Y;let V=Y.match(/^\/(\S+)/)?.[1];if(!V)return Y;let B=J.runtimeCommands.find((H)=>H.name===V);return B?`${B.instructions}${Y.slice(V.length+1)}`:Y},hasConfiguredSkills:(Y)=>rY(J,Y).some((j)=>!j.disabled),createSkillsExecutor:(Y)=>cU(J,Y),createExtension:(Y)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[Y.includeRules?"rules":void 0,Y.registerSkillsTool?"tools":void 0,Y.includeSkills||Y.includeWorkflows?"commands":void 0].filter((j)=>Boolean(j))},setup(j){if(Y.includeRules)j.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>t2(J.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(Y.registerSkillsTool)j.registerTool(V2(cU(J,Y.allowedSkillNames)));for(let V of J.runtimeCommands.filter((B)=>B.kind==="skill"&&Y.includeSkills||B.kind==="workflow"&&Y.includeWorkflows))j.registerCommand({name:V.name,description:V.description,handler:(B)=>{let H=B.trim();return H?`${V.instructions}
744
744
 
745
- ${B}`:V.instructions}})}})}}function Xg($,Z,Q,W){let J=Q.map((X)=>[X.executor,async(...Y)=>{let j=Y.at(-1),V=Y.slice(0,-1);return(await W($,X.capabilityName,{executor:X.executor,args:V,context:lU(j)},Z))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function Yg($,Z,Q,W){if(Q.length===0)return;return Q.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema,lifecycle:J.lifecycle,async execute(X,Y){return(await W($,J.capabilityName,{toolName:J.name,input:X,context:lU(Y)},Z,Y.emitUpdate?(V)=>{Y.emitUpdate?.(Zg(V))}:void 0))?.result}}))}function jg($,Z,Q,W){let J=new Map(Q.map((Y)=>[Y.name,Y])),X={};for(let Y of ex){let j=J.get(Y);if(!j)continue;X[Y]=async(V)=>{return(await W($,j.capabilityName,{context:V},Z))?.control}}return Object.keys(X).length>0?X:void 0}function nY($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),W=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),X=$.contributions.find((V)=>V.kind==="checkpoint"),Y=$.contributions.find((V)=>V.kind==="mistakeLimit"),j=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:Xg($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...W.length>0?{hooks:jg($.sessionId,$.targetClientId,W,$.requestCapability)}:{},...Q.length>0?{extraTools:Yg($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...J?{compaction:{...$.sessionConfig?.compaction??{},...J.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,J.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{checkpoint:{...$.sessionConfig?.checkpoint??{},...X.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...Y?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,Y.capabilityName,{context:V},$.targetClientId))?.result}}:{},...j?{userInstructionService:Jg($.sessionId,$.targetClientId,j,$.requestCapability)}:{}}}}var iU="hubCapabilityOwnerClientId";function nU($,Z){$[iU]=Z}function Vg($){let Z=$?.[iU];return typeof Z==="string"&&Z.trim()?Z.trim():void 0}async function aU($,Z,Q){let W=performance.now(),J={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};u("info","session.create.begin",J);let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{},j=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0,V=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{};if(typeof j?.mode==="string")Y.mode=j.mode;else if(typeof V.mode==="string")Y.mode=V.mode;if(typeof j?.systemPrompt==="string")Y.systemPrompt=j.systemPrompt;else if(typeof V.systemPrompt==="string")Y.systemPrompt=V.systemPrompt;if(j?.checkpoint?.enabled===!0)Y.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)Y.checkpointEnabled=!0;let H=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},B=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():"";if(!B)return u("warn","session.create.invalid",{...J,reason:"missing_workspace_root"}),x(Z,"invalid_session_create","session.create requires workspaceRoot or cwd");let G=Z.clientId?.trim()||"hub-client",K=iY(V.clientContributions);if(u("info","session.create.contributions_parsed",{...J,clientId:G,workspaceRoot:B,cwd:typeof X.cwd==="string"?X.cwd:void 0,contributionCount:K.length}),K.length>0)nU(Y,G);let A=(typeof j?.sessionId==="string"?j.sessionId.trim():"")||pU(),L=rU(V.configExtensions);u("info","session.create.runtime_build.begin",{...J,sessionId:A,configExtensionCount:L?.length??0});let f=nY({sessionId:A,targetClientId:G,contributions:K,sessionConfig:j,requestCapability:$.requestCapability});u("info","session.create.start_session.begin",{...J,sessionId:A,provider:j?.providerId??(typeof H.provider==="string"?H.provider:typeof Y.provider==="string"?Y.provider:"hub"),model:j?.modelId??(typeof H.model==="string"?H.model:typeof Y.model==="string"?Y.model:"hub")});let D=await $.sessionHost.startSession({source:typeof Y.source==="string"?Y.source:void 0,interactive:Y.interactive!==!1,sessionMetadata:Object.keys(Y).length>0?Y:void 0,initialMessages:Array.isArray(X.initialMessages)?X.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:L,...f.localRuntime},capabilities:{toolExecutors:f.toolExecutors,requestToolApproval:Q},config:{...j??{},sessionId:A,providerId:j?.providerId??(typeof H.provider==="string"?H.provider:typeof Y.provider==="string"?Y.provider:"hub"),modelId:j?.modelId??(typeof H.model==="string"?H.model:typeof Y.model==="string"?Y.model:"hub"),apiKey:j?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:j?.cwd??(typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():B),workspaceRoot:j?.workspaceRoot??B,systemPrompt:j?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:j?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:j?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:j?.enableTools??V.enableTools!==!1,enableSpawnAgent:j?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:j?.enableAgentTeams??V.enableTeams!==!1,checkpoint:j?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:j?.teamName??(typeof Y.teamName==="string"?Y.teamName:void 0)},toolPolicies:X.toolPolicies&&typeof X.toolPolicies==="object"&&!Array.isArray(X.toolPolicies)?JSON.parse(JSON.stringify(X.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});u("info","session.create.start_session.end",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W),hasImmediateResult:!!D.result}),o7($,D.sessionId,G,"creator",{interactive:Y.interactive!==!1}),u("info","session.create.read_records.begin",{...J,sessionId:D.sessionId});let[U,T]=await Promise.all([o0($,D.sessionId),t0($,D.sessionId)]);if(u("info","session.create.read_records.end",{...J,sessionId:D.sessionId,hasSession:!!U,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-W)}),U)$.publish($.buildEvent("session.created",{session:U,...T?{snapshot:T}:{}},D.sessionId));return u("info","session.create.reply",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W)}),c(Z,{session:U,...T?{snapshot:T}:{}})}async function sU($,Z,Q){let W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.sessionId==="string"?W.sessionId.trim():Z.sessionId?.trim()||"",X=W.checkpointRunCount;if(!J)return x(Z,"invalid_restore","session.restore requires a session id");let Y=W.restore&&typeof W.restore==="object"?W.restore:{},j=Y.messages!==!1;if(typeof X!=="number")return x(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0;if(j&&!V)return x(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let H=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{},B=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{};if(typeof V?.mode==="string")B.mode=V.mode;else if(typeof H.mode==="string")B.mode=H.mode;if(typeof V?.systemPrompt==="string")B.systemPrompt=V.systemPrompt;else if(typeof H.systemPrompt==="string")B.systemPrompt=H.systemPrompt;if(V?.checkpoint?.enabled===!0)B.checkpointEnabled=!0;else if(H.checkpointEnabled===!0)B.checkpointEnabled=!0;let G=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},K=Z.clientId?.trim()||"hub-client",F=iY(H.clientContributions);if(F.length>0)nU(B,K);let L=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||pU(),f=rU(H.configExtensions),D=nY({sessionId:L,targetClientId:K,contributions:F,sessionConfig:V,requestCapability:$.requestCapability}),T=await new c$().restoreCheckpoint({sessionId:J,checkpointRunCount:X,restore:{messages:Y.messages,workspace:Y.workspace,omitCheckpointMessageFromSession:Y.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(E)=>$.sessionHost.getSession(E),readMessages:(E)=>$.sessionHost.readSessionMessages(E),buildStartInput:(E)=>{if(E.restoredCheckpointMetadata)B.checkpoint=E.restoredCheckpointMetadata;let C=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():E.sourceSession.workspaceRoot||E.sourceSession.cwd;return{source:typeof B.source==="string"?B.source:void 0,interactive:B.interactive!==!1,sessionMetadata:{...B,restoredFromSessionId:J,restoredCheckpointRunCount:X},initialMessages:E.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:f,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:L,providerId:V?.providerId??(typeof G.provider==="string"?G.provider:E.sourceSession.provider),modelId:V?.modelId??(typeof G.model==="string"?G.model:E.sourceSession.model),apiKey:V?.apiKey??(typeof G.apiKey==="string"?G.apiKey:""),cwd:V?.cwd??E.plan.cwd,workspaceRoot:V?.workspaceRoot??C,systemPrompt:V?.systemPrompt??(typeof H.systemPrompt==="string"?H.systemPrompt:""),mode:V?.mode??(H.mode==="plan"||H.mode==="yolo"?H.mode:"act"),maxIterations:V?.maxIterations??(typeof H.maxIterations==="number"?H.maxIterations:void 0),enableTools:V?.enableTools??H.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??H.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??H.enableTeams!==!1,checkpoint:V?.checkpoint??(H.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof B.teamName==="string"?B.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}},startSession:(E)=>$.sessionHost.startSession(E),getStartedSessionId:(E)=>E.sessionId,readRestoredSession:(E)=>$.sessionHost.getSession(E)});if(!j)return c(Z,{checkpoint:T.checkpoint});let q=T.startResult;if(!q)return x(Z,"restore_failed","Checkpoint restore did not start a session");o7($,q.sessionId,K,"creator",{interactive:B.interactive!==!1});let[z,_]=await Promise.all([o0($,q.sessionId),t0($,q.sessionId)]);if(z)$.publish($.buildEvent("session.created",{session:z,..._?{snapshot:_}:{}},q.sessionId));return c(Z,{session:z,..._?{snapshot:_}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof k0)return x(Z,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return x(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function oU($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_attach","session.attach requires a session id");o7($,Q,Z.clientId?.trim()||"hub-client","participant");let W=await o0($,Q);if(W)$.publish($.buildEvent("session.attached",{session:W},Q));return W?c(Z,{session:W}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function tU($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_detach","session.detach requires a session id");let W=Z.clientId?.trim()||"hub-client",[J]=await Promise.all([o0($,Q)]),X=Vg(J?.metadata)??W,Y=$.sessionState.get(Q);if(Y){if(Y.participants.delete(W),Y.createdByClientId===W)Y.createdByClientId=X;if(Y.participants.size===0)$.sessionState.delete(Q)}u$($,(H)=>H.sessionId===Q&&H.targetClientId===W,`Capability owner client ${W} detached before request was resolved.`);let[j,V]=await Promise.all([o0($,Q),t0($,Q)]);return $.publish($.buildEvent("session.detached",j?{session:j,...V?{snapshot:V}:{},clientId:W}:{clientId:W},Q)),c(Z)}async function eU($,Z){let Q=I0(Z),W=Z.payload?.includeSnapshot===!0,[J,X]=await Promise.all([o0($,Q),W?t0($,Q):Promise.resolve(void 0)]);return J?c(Z,{session:J,...X?{snapshot:X}:{}}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function $D($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_id","session.messages requires a session id");if(!await o0($,Q))return x(Z,"session_not_found",`Unknown session: ${Q}`);let J=await $.sessionHost.readSessionMessages(Q);return c(Z,{sessionId:Q,messages:J})}async function ZD($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,J=(await $.sessionHost.listSessions(Q)).map((X)=>a7(X,$.sessionState.get(X.sessionId)));return c(Z,{sessions:J})}async function QD($,Z){let Q=I0(Z),W=s7(Z.payload?.metadata),J=await $.sessionHost.updateSession(Q,{metadata:W}),[X,Y]=await Promise.all([o0($,Q),t0($,Q)]);if(X)$.publish($.buildEvent("session.updated",{session:X,...Y?{snapshot:Y}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:J.updated,payload:{updated:J.updated,session:X,...Y?{snapshot:Y}:{}}}}async function WD($,Z){let Q=I0(Z),W=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),c(Z,{deleted:W})}async function JD($,Z){let Q=I0(Z),W=$.sessionHost.pendingPrompts;if(!W)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await W.list({sessionId:Q});return c(Z,{sessionId:Q,prompts:J})}async function XD($,Z){let Q=I0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,X=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,Y=$.sessionHost.pendingPrompts;if(!Y)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await Y.update({sessionId:Q,promptId:W,prompt:J,delivery:X});return c(Z,j)}async function YD($,Z){let Q=I0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await J.delete({sessionId:Q,promptId:W});return c(Z,X)}function jD($){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 Bg=new Set(["skills","workflows","rules","tools","mcp"]);function aY($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function G9($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="string")throw Error(`settings payload '${Z}' must be a string.`);return Q}function Gg($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="boolean")throw Error(`settings payload '${Z}' must be a boolean.`);return Q}function VD($){if($===void 0)return{};if(!aY($))throw Error("settings.list payload must be an object.");return{cwd:G9($,"cwd"),workspaceRoot:G9($,"workspaceRoot"),availabilityContext:aY($.availabilityContext)?$.availabilityContext:void 0}}function Kg($){if(!aY($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!Bg.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...VD($),type:Z,id:G9($,"id"),path:G9($,"path"),name:G9($,"name"),enabled:Gg($,"enabled")}}class w4{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=Hg("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new T1({sessionService:new z1(new L1),fetch:$.fetch,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(Z)=>this.publish(Z),buildEvent:r2,requestCapability:(Z,Q,W,J,X)=>MU(this.ctx,Z,Q,W,J,X)},this.schedules=new Z8({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let W=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!W)return;this.publish(r2(W,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new o2(this.schedules),this.settings=$.settingsService??new k$,$.cronOptions)this.cronService=new P5({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{uU(this.ctx,Z).catch((Q)=>{cY("session event handling failed",Q),e7(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Q,severity:"error",handled:!0,context:{eventType:Z.type,sessionId:Z.payload.sessionId}})})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}}async stop(){for(let $ of this.pendingApprovals.keys())mY(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(u$(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.sessionHost.dispose("hub_server_stop"),await this.schedules.dispose(),this.cronService)try{await this.cronService.dispose()}catch($){console.error("[hub] cron service stop failed",$)}}async handleCommand($){try{let Z=await this.dispatchCommand($);return this.captureFailedReply($,Z),Z}catch(Z){throw e7(this.options.telemetry,{component:"core",operation:"hub.command",error:Z,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),Z}}async dispatchCommand($){switch($.command){case"client.register":return wU(this.ctx,$);case"client.update":return CU(this.ctx,$);case"client.unregister":return PU(this.ctx,$,(Z)=>{this.listeners.delete(Z),this.detachClientFromSessions(Z)});case"client.list":return SU(this.ctx,$);case"session.create":return await aU(this.ctx,$,(Z)=>gY(this.ctx,Z));case"session.restore":return await sU(this.ctx,$,(Z)=>gY(this.ctx,Z));case"session.attach":return await oU(this.ctx,$);case"session.detach":return await tU(this.ctx,$);case"session.get":return await eU(this.ctx,$);case"session.messages":return await $D(this.ctx,$);case"session.list":return await ZD(this.ctx,$);case"session.update":return await QD(this.ctx,$);case"session.pending_prompts":return await JD(this.ctx,$);case"session.update_pending_prompt":return await XD(this.ctx,$);case"session.remove_pending_prompt":return await YD(this.ctx,$);case"session.delete":return await WD(this.ctx,$);case"session.hook":return await cU(this.ctx,$);case"run.start":case"session.send_input":return await mU(this.ctx,$);case"run.abort":return await vU(this.ctx,$);case"capability.request":return await EU(this.ctx,$);case"approval.respond":return await OU(this.ctx,$);case"capability.respond":return NU(this.ctx,$);case"capability.progress":return RU(this.ctx,$);case"ui.notify":return this.publish(r2("ui.notify",$.payload??{})),c($);case"ui.show_window":return this.publish(r2("ui.show_window",$.payload??{})),c($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"connector.channels":case"connector.configure":case"connector.delete_config":return await gU(this.ctx,$);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let Z=await this.scheduleCommands.handleCommand($);if(Z.ok){let Q=jD($.command);if(Q)this.publish(r2(Q,Z.payload))}return Z}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!Fg(Z.error.code))return;e7(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(Z.error.message),severity:Z.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:Z.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let Z=await this.settings.list(VD($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:Z instanceof Error?Z.message:String(Z)}}}}async handleSettingsToggle($){try{let Z=await this.settings.toggle(Kg($.payload));return this.publish(r2("settings.changed",{types:Z.changedTypes,snapshot:Z.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z.snapshot,changedTypes:Z.changedTypes}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:Z instanceof Error?Z.message:String(Z)}}}}subscribe($,Z,Q){let W=this.listeners.get($)??new Set,J={sessionId:Q?.sessionId,listener:Z};return W.add(J),this.listeners.set($,W),()=>{let X=this.listeners.get($);if(!X)return;if(X.delete(J),X.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries())if(Q.participants.delete($),Q.participants.size===0)this.sessionState.delete(Z);u$(this.ctx,(Z)=>Z.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let Z of this.listeners.values())for(let Q of Z){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(W){cY(`listener threw while publishing ${$.event}`,W),e7(this.options.telemetry,{component:"core",operation:"hub.publish",error:W,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function Fg($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as Dg}from"node:crypto";import Lg from"node:http";import _g from"node:net";import{URL as eY}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as GD,HUB_CAPABILITIES as zg,isHubProtocolCompatible as Tg,MAX_CLIENT_HUB_PROTOCOL_VERSION as KD,MIN_CLIENT_HUB_PROTOCOL_VERSION as FD}from"@cline/shared";import{WebSocketServer as Og}from"ws";import{captureSdkError as HD,HUB_COMMAND_SLOW_LOG_MS as Ag,resolveHubCommandTimeoutMs as fg,safeJsonParse as Ug}from"@cline/shared";function sY($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function BD($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}class X9{transport;telemetry;constructor($,Z){this.transport=$;this.telemetry=Z}attach($){let Z=new Map,Q=new Set,W=!1,J=(V)=>{try{$.send(JSON.stringify(V))}catch(H){console.error(`[hub] failed to send websocket frame: ${H instanceof Error?H.stack||H.message:String(H)}`)}},X=(V)=>{J({kind:"event",envelope:V})},Y=async(V)=>{try{let H=JSON.parse(V.data);switch(H.kind){case"command":{let B=performance.now(),G=!1,K=sY(H);u("info","command.start",K);let F=setTimeout(()=>{if(G)return;u("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-B)})},Ag),A=this.transport.command(H.envelope);A.then((q)=>{if(!G)return;u(q.ok?"warn":"error","command.late_end",{...K,elapsedMs:Math.round(performance.now()-B),ok:q.ok,errorCode:q.error?.code,errorMessage:q.error?.message})},(q)=>{if(!G)return;u("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-B),error:q})});let L=!1,f,D,U=fg(H.envelope.command,H.envelope.timeoutMs);try{D=U===null?await A:await Promise.race([A,new Promise((q)=>{f=setTimeout(()=>{L=!0,HD(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${H.envelope.command} did not complete within ${U}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:U}}),q(BD(H,"hub_command_timeout",`Hub command ${H.envelope.command} did not complete within ${U}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${H.envelope.requestId}.`))},U)})])}catch(q){if(clearTimeout(F),f)clearTimeout(f);throw q}if(G=L,clearTimeout(F),f)clearTimeout(f);let T=Math.round(performance.now()-B);if(L)u("error","command.timeout",{...K,durationMs:T,timeoutMs:U});else u(D.ok?"info":"warn","command.end",{...K,durationMs:T,ok:D.ok,errorCode:D.error?.code,errorMessage:D.error?.message});if(H.envelope.command==="client.register"&&D.ok){let z=(H.envelope.payload??{}).clientId?.trim()||H.envelope.clientId?.trim();if(z)Q.add(z)}else if(H.envelope.command==="client.unregister"&&D.ok){let q=H.envelope.clientId?.trim();if(q)Q.delete(q)}J({kind:"reply",envelope:D});break}case"stream.subscribe":{let B=`${H.clientId}:${H.sessionId??"*"}`;if(Z.has(B))break;let G=await this.transport.subscribe(H.clientId,X,{sessionId:H.sessionId});Z.set(B,G);break}case"stream.unsubscribe":{let B=`${H.clientId}:${H.sessionId??"*"}`;Z.get(B)?.(),Z.delete(B);break}case"reply":case"event":break}}catch(H){let B=typeof V.data==="string"?Ug(V.data):void 0;if(!B||B.kind!=="command"){u("error","rejected malformed websocket frame",{error:H});return}u("error","command.error",{...sY(B),error:H}),HD(this.telemetry,{component:"core",operation:"hub.websocket_command",error:H,severity:"error",handled:!0,context:sY(B)}),J({kind:"reply",envelope:BD(B,"command_failed",H instanceof Error?H.message:"Unknown hub error")})}},j=()=>{if(W)return;W=!0;for(let V of Z.values())V();Z.clear();for(let V of Q)this.transport.command({version:"v1",command:"client.unregister",clientId:V});Q.clear(),$.removeEventListener("message",Y),$.removeEventListener("close",j)};return $.addEventListener("message",Y),$.addEventListener("close",j),j}}class Y9{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}}function qg($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();return String($)}function Mg($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(W)=>{Q({data:qg(W)})});return}$.on("close",Q)},removeEventListener(){}}}function Rg($){try{$.write(`HTTP/1.1 400 Bad Request\r
745
+ ${H}`:V.instructions}})}})}}function Qg($,Z,Q,W){let J=Q.map((X)=>[X.executor,async(...Y)=>{let j=Y.at(-1),V=Y.slice(0,-1);return(await W($,X.capabilityName,{executor:X.executor,args:V,context:uU(j)},Z))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function Wg($,Z,Q,W){if(Q.length===0)return;return Q.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema,lifecycle:J.lifecycle,async execute(X,Y){return(await W($,J.capabilityName,{toolName:J.name,input:X,context:uU(Y)},Z,Y.emitUpdate?(V)=>{Y.emitUpdate?.(tx(V))}:void 0))?.result}}))}function Jg($,Z,Q,W){let J=new Map(Q.map((Y)=>[Y.name,Y])),X={};for(let Y of sx){let j=J.get(Y);if(!j)continue;X[Y]=async(V)=>{return(await W($,j.capabilityName,{context:V},Z))?.control}}return Object.keys(X).length>0?X:void 0}function nY($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),W=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),X=$.contributions.find((V)=>V.kind==="checkpoint"),Y=$.contributions.find((V)=>V.kind==="mistakeLimit"),j=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:Qg($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...W.length>0?{hooks:Jg($.sessionId,$.targetClientId,W,$.requestCapability)}:{},...Q.length>0?{extraTools:Wg($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...J?{compaction:{...$.sessionConfig?.compaction??{},...J.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,J.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{checkpoint:{...$.sessionConfig?.checkpoint??{},...X.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...Y?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,Y.capabilityName,{context:V},$.targetClientId))?.result}}:{},...j?{userInstructionService:Zg($.sessionId,$.targetClientId,j,$.requestCapability)}:{}}}}var pU="hubCapabilityOwnerClientId";function rU($,Z){$[pU]=Z}function Xg($){let Z=$?.[pU];return typeof Z==="string"&&Z.trim()?Z.trim():void 0}async function iU($,Z,Q){let W=performance.now(),J={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};u("info","session.create.begin",J);let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{},j=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0,V=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{};if(typeof j?.mode==="string")Y.mode=j.mode;else if(typeof V.mode==="string")Y.mode=V.mode;if(typeof j?.systemPrompt==="string")Y.systemPrompt=j.systemPrompt;else if(typeof V.systemPrompt==="string")Y.systemPrompt=V.systemPrompt;if(j?.checkpoint?.enabled===!0)Y.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)Y.checkpointEnabled=!0;let B=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},H=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():"";if(!H)return u("warn","session.create.invalid",{...J,reason:"missing_workspace_root"}),x(Z,"invalid_session_create","session.create requires workspaceRoot or cwd");let G=Z.clientId?.trim()||"hub-client",K=iY(V.clientContributions);if(u("info","session.create.contributions_parsed",{...J,clientId:G,workspaceRoot:H,cwd:typeof X.cwd==="string"?X.cwd:void 0,contributionCount:K.length}),K.length>0)rU(Y,G);let A=(typeof j?.sessionId==="string"?j.sessionId.trim():"")||dU(),L=lU(V.configExtensions);u("info","session.create.runtime_build.begin",{...J,sessionId:A,configExtensionCount:L?.length??0});let f=nY({sessionId:A,targetClientId:G,contributions:K,sessionConfig:j,requestCapability:$.requestCapability});u("info","session.create.start_session.begin",{...J,sessionId:A,provider:j?.providerId??(typeof B.provider==="string"?B.provider:typeof Y.provider==="string"?Y.provider:"hub"),model:j?.modelId??(typeof B.model==="string"?B.model:typeof Y.model==="string"?Y.model:"hub")});let D=await $.sessionHost.startSession({source:typeof Y.source==="string"?Y.source:void 0,interactive:Y.interactive!==!1,sessionMetadata:Object.keys(Y).length>0?Y:void 0,initialMessages:Array.isArray(X.initialMessages)?X.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:L,...f.localRuntime},capabilities:{toolExecutors:f.toolExecutors,requestToolApproval:Q},config:{...j??{},sessionId:A,providerId:j?.providerId??(typeof B.provider==="string"?B.provider:typeof Y.provider==="string"?Y.provider:"hub"),modelId:j?.modelId??(typeof B.model==="string"?B.model:typeof Y.model==="string"?Y.model:"hub"),apiKey:j?.apiKey??(typeof B.apiKey==="string"?B.apiKey:void 0),cwd:j?.cwd??(typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():H),workspaceRoot:j?.workspaceRoot??H,systemPrompt:j?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:j?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:j?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:j?.enableTools??V.enableTools!==!1,enableSpawnAgent:j?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:j?.enableAgentTeams??V.enableTeams!==!1,checkpoint:j?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:j?.teamName??(typeof Y.teamName==="string"?Y.teamName:void 0)},toolPolicies:X.toolPolicies&&typeof X.toolPolicies==="object"&&!Array.isArray(X.toolPolicies)?JSON.parse(JSON.stringify(X.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});u("info","session.create.start_session.end",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W),hasImmediateResult:!!D.result}),o7($,D.sessionId,G,"creator",{interactive:Y.interactive!==!1}),u("info","session.create.read_records.begin",{...J,sessionId:D.sessionId});let[U,T]=await Promise.all([o0($,D.sessionId),t0($,D.sessionId)]);if(u("info","session.create.read_records.end",{...J,sessionId:D.sessionId,hasSession:!!U,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-W)}),U)$.publish($.buildEvent("session.created",{session:U,...T?{snapshot:T}:{}},D.sessionId));return u("info","session.create.reply",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W)}),c(Z,{session:U,...T?{snapshot:T}:{}})}async function nU($,Z,Q){let W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.sessionId==="string"?W.sessionId.trim():Z.sessionId?.trim()||"",X=W.checkpointRunCount;if(!J)return x(Z,"invalid_restore","session.restore requires a session id");let Y=W.restore&&typeof W.restore==="object"?W.restore:{},j=Y.messages!==!1;if(typeof X!=="number")return x(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0;if(j&&!V)return x(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let B=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{},H=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{};if(typeof V?.mode==="string")H.mode=V.mode;else if(typeof B.mode==="string")H.mode=B.mode;if(typeof V?.systemPrompt==="string")H.systemPrompt=V.systemPrompt;else if(typeof B.systemPrompt==="string")H.systemPrompt=B.systemPrompt;if(V?.checkpoint?.enabled===!0)H.checkpointEnabled=!0;else if(B.checkpointEnabled===!0)H.checkpointEnabled=!0;let G=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},K=Z.clientId?.trim()||"hub-client",F=iY(B.clientContributions);if(F.length>0)rU(H,K);let L=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||dU(),f=lU(B.configExtensions),D=nY({sessionId:L,targetClientId:K,contributions:F,sessionConfig:V,requestCapability:$.requestCapability}),T=await new c$().restoreCheckpoint({sessionId:J,checkpointRunCount:X,restore:{messages:Y.messages,workspace:Y.workspace,omitCheckpointMessageFromSession:Y.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(E)=>$.sessionHost.getSession(E),readMessages:(E)=>$.sessionHost.readSessionMessages(E),buildStartInput:(E)=>{if(E.restoredCheckpointMetadata)H.checkpoint=E.restoredCheckpointMetadata;let w=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():E.sourceSession.workspaceRoot||E.sourceSession.cwd;return{source:typeof H.source==="string"?H.source:void 0,interactive:H.interactive!==!1,sessionMetadata:{...H,restoredFromSessionId:J,restoredCheckpointRunCount:X},initialMessages:E.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:f,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:L,providerId:V?.providerId??(typeof G.provider==="string"?G.provider:E.sourceSession.provider),modelId:V?.modelId??(typeof G.model==="string"?G.model:E.sourceSession.model),apiKey:V?.apiKey??(typeof G.apiKey==="string"?G.apiKey:""),cwd:V?.cwd??E.plan.cwd,workspaceRoot:V?.workspaceRoot??w,systemPrompt:V?.systemPrompt??(typeof B.systemPrompt==="string"?B.systemPrompt:""),mode:V?.mode??(B.mode==="plan"||B.mode==="yolo"?B.mode:"act"),maxIterations:V?.maxIterations??(typeof B.maxIterations==="number"?B.maxIterations:void 0),enableTools:V?.enableTools??B.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??B.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??B.enableTeams!==!1,checkpoint:V?.checkpoint??(B.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof H.teamName==="string"?H.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):B.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(E)=>$.sessionHost.startSession(E),getStartedSessionId:(E)=>E.sessionId,readRestoredSession:(E)=>$.sessionHost.getSession(E)});if(!j)return c(Z,{checkpoint:T.checkpoint});let q=T.startResult;if(!q)return x(Z,"restore_failed","Checkpoint restore did not start a session");o7($,q.sessionId,K,"creator",{interactive:H.interactive!==!1});let[z,_]=await Promise.all([o0($,q.sessionId),t0($,q.sessionId)]);if(z)$.publish($.buildEvent("session.created",{session:z,..._?{snapshot:_}:{}},q.sessionId));return c(Z,{session:z,..._?{snapshot:_}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof k0)return x(Z,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return x(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function aU($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_attach","session.attach requires a session id");o7($,Q,Z.clientId?.trim()||"hub-client","participant");let W=await o0($,Q);if(W)$.publish($.buildEvent("session.attached",{session:W},Q));return W?c(Z,{session:W}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function sU($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_detach","session.detach requires a session id");let W=Z.clientId?.trim()||"hub-client",[J]=await Promise.all([o0($,Q)]),X=Xg(J?.metadata)??W,Y=$.sessionState.get(Q);if(Y){if(Y.participants.delete(W),Y.createdByClientId===W)Y.createdByClientId=X;if(Y.participants.size===0)$.sessionState.delete(Q)}u$($,(B)=>B.sessionId===Q&&B.targetClientId===W,`Capability owner client ${W} detached before request was resolved.`);let[j,V]=await Promise.all([o0($,Q),t0($,Q)]);return $.publish($.buildEvent("session.detached",j?{session:j,...V?{snapshot:V}:{},clientId:W}:{clientId:W},Q)),c(Z)}async function oU($,Z){let Q=I0(Z),W=Z.payload?.includeSnapshot===!0,[J,X]=await Promise.all([o0($,Q),W?t0($,Q):Promise.resolve(void 0)]);return J?c(Z,{session:J,...X?{snapshot:X}:{}}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function tU($,Z){let Q=I0(Z);if(!Q)return x(Z,"invalid_session_id","session.messages requires a session id");if(!await o0($,Q))return x(Z,"session_not_found",`Unknown session: ${Q}`);let J=await $.sessionHost.readSessionMessages(Q);return c(Z,{sessionId:Q,messages:J})}async function eU($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,J=(await $.sessionHost.listSessions(Q)).map((X)=>a7(X,$.sessionState.get(X.sessionId)));return c(Z,{sessions:J})}async function $D($,Z){let Q=I0(Z),W=s7(Z.payload?.metadata),J=await $.sessionHost.updateSession(Q,{metadata:W}),[X,Y]=await Promise.all([o0($,Q),t0($,Q)]);if(X)$.publish($.buildEvent("session.updated",{session:X,...Y?{snapshot:Y}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:J.updated,payload:{updated:J.updated,session:X,...Y?{snapshot:Y}:{}}}}async function ZD($,Z){let Q=I0(Z),W=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),c(Z,{deleted:W})}async function QD($,Z){let Q=I0(Z),W=$.sessionHost.pendingPrompts;if(!W)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await W.list({sessionId:Q});return c(Z,{sessionId:Q,prompts:J})}async function WD($,Z){let Q=I0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,X=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,Y=$.sessionHost.pendingPrompts;if(!Y)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await Y.update({sessionId:Q,promptId:W,prompt:J,delivery:X});return c(Z,j)}async function JD($,Z){let Q=I0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await J.delete({sessionId:Q,promptId:W});return c(Z,X)}function XD($){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 jg=new Set(["skills","workflows","rules","tools","mcp"]);function aY($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function G9($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="string")throw Error(`settings payload '${Z}' must be a string.`);return Q}function Vg($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="boolean")throw Error(`settings payload '${Z}' must be a boolean.`);return Q}function YD($){if($===void 0)return{};if(!aY($))throw Error("settings.list payload must be an object.");return{cwd:G9($,"cwd"),workspaceRoot:G9($,"workspaceRoot"),availabilityContext:aY($.availabilityContext)?$.availabilityContext:void 0}}function Bg($){if(!aY($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!jg.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...YD($),type:Z,id:G9($,"id"),path:G9($,"path"),name:G9($,"name"),enabled:Vg($,"enabled")}}class C4{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=Yg("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new T1({sessionService:new z1(new L1),fetch:$.fetch,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(Z)=>this.publish(Z),buildEvent:r2,requestCapability:(Z,Q,W,J,X)=>OU(this.ctx,Z,Q,W,J,X)},this.schedules=new Z8({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let W=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!W)return;this.publish(r2(W,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new o2(this.schedules),this.settings=$.settingsService??new k$,$.cronOptions)this.cronService=new P5({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{vU(this.ctx,Z).catch((Q)=>{cY("session event handling failed",Q),e7(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Q,severity:"error",handled:!0,context:{eventType:Z.type,sessionId:Z.payload.sessionId}})})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}}async stop(){for(let $ of this.pendingApprovals.keys())mY(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(u$(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.sessionHost.dispose("hub_server_stop"),await this.schedules.dispose(),this.cronService)try{await this.cronService.dispose()}catch($){console.error("[hub] cron service stop failed",$)}}async handleCommand($){try{let Z=await this.dispatchCommand($);return this.captureFailedReply($,Z),Z}catch(Z){throw e7(this.options.telemetry,{component:"core",operation:"hub.command",error:Z,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),Z}}async dispatchCommand($){switch($.command){case"client.register":return EU(this.ctx,$);case"client.update":return NU(this.ctx,$);case"client.unregister":return CU(this.ctx,$,(Z)=>{this.listeners.delete(Z),this.detachClientFromSessions(Z)});case"client.list":return wU(this.ctx,$);case"session.create":return await iU(this.ctx,$,(Z)=>gY(this.ctx,Z));case"session.restore":return await nU(this.ctx,$,(Z)=>gY(this.ctx,Z));case"session.attach":return await aU(this.ctx,$);case"session.detach":return await sU(this.ctx,$);case"session.get":return await oU(this.ctx,$);case"session.messages":return await tU(this.ctx,$);case"session.list":return await eU(this.ctx,$);case"session.update":return await $D(this.ctx,$);case"session.pending_prompts":return await QD(this.ctx,$);case"session.update_pending_prompt":return await WD(this.ctx,$);case"session.remove_pending_prompt":return await JD(this.ctx,$);case"session.delete":return await ZD(this.ctx,$);case"session.hook":return await mU(this.ctx,$);case"run.start":case"session.send_input":return await xU(this.ctx,$);case"run.abort":return await gU(this.ctx,$);case"capability.request":return await MU(this.ctx,$);case"approval.respond":return await zU(this.ctx,$);case"capability.respond":return RU(this.ctx,$);case"capability.progress":return qU(this.ctx,$);case"ui.notify":return this.publish(r2("ui.notify",$.payload??{})),c($);case"ui.show_window":return this.publish(r2("ui.show_window",$.payload??{})),c($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"connector.channels":case"connector.configure":case"connector.delete_config":return await IU(this.ctx,$);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let Z=await this.scheduleCommands.handleCommand($);if(Z.ok){let Q=XD($.command);if(Q)this.publish(r2(Q,Z.payload))}return Z}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!Hg(Z.error.code))return;e7(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(Z.error.message),severity:Z.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:Z.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let Z=await this.settings.list(YD($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:Z instanceof Error?Z.message:String(Z)}}}}async handleSettingsToggle($){try{let Z=await this.settings.toggle(Bg($.payload));return this.publish(r2("settings.changed",{types:Z.changedTypes,snapshot:Z.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z.snapshot,changedTypes:Z.changedTypes}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:Z instanceof Error?Z.message:String(Z)}}}}subscribe($,Z,Q){let W=this.listeners.get($)??new Set,J={sessionId:Q?.sessionId,listener:Z};return W.add(J),this.listeners.set($,W),()=>{let X=this.listeners.get($);if(!X)return;if(X.delete(J),X.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries())if(Q.participants.delete($),Q.participants.size===0)this.sessionState.delete(Z);u$(this.ctx,(Z)=>Z.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let Z of this.listeners.values())for(let Q of Z){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(W){cY(`listener threw while publishing ${$.event}`,W),e7(this.options.telemetry,{component:"core",operation:"hub.publish",error:W,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function Hg($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as Ag}from"node:crypto";import fg from"node:http";import Ug from"node:net";import{URL as eY}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as BD,HUB_CAPABILITIES as Dg,isHubProtocolCompatible as Lg,MAX_CLIENT_HUB_PROTOCOL_VERSION as HD,MIN_CLIENT_HUB_PROTOCOL_VERSION as GD}from"@cline/shared";import{WebSocketServer as _g}from"ws";import{captureSdkError as jD,HUB_COMMAND_SLOW_LOG_MS as Gg,resolveHubCommandTimeoutMs as Kg,safeJsonParse as Fg}from"@cline/shared";function sY($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function VD($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}class X9{transport;telemetry;constructor($,Z){this.transport=$;this.telemetry=Z}attach($){let Z=new Map,Q=new Set,W=!1,J=(V)=>{try{$.send(JSON.stringify(V))}catch(B){console.error(`[hub] failed to send websocket frame: ${B instanceof Error?B.stack||B.message:String(B)}`)}},X=(V)=>{J({kind:"event",envelope:V})},Y=async(V)=>{try{let B=JSON.parse(V.data);switch(B.kind){case"command":{let H=performance.now(),G=!1,K=sY(B);u("info","command.start",K);let F=setTimeout(()=>{if(G)return;u("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-H)})},Gg),A=this.transport.command(B.envelope);A.then((q)=>{if(!G)return;u(q.ok?"warn":"error","command.late_end",{...K,elapsedMs:Math.round(performance.now()-H),ok:q.ok,errorCode:q.error?.code,errorMessage:q.error?.message})},(q)=>{if(!G)return;u("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-H),error:q})});let L=!1,f,D,U=Kg(B.envelope.command,B.envelope.timeoutMs);try{D=U===null?await A:await Promise.race([A,new Promise((q)=>{f=setTimeout(()=>{L=!0,jD(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${B.envelope.command} did not complete within ${U}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:U}}),q(VD(B,"hub_command_timeout",`Hub command ${B.envelope.command} did not complete within ${U}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${B.envelope.requestId}.`))},U)})])}catch(q){if(clearTimeout(F),f)clearTimeout(f);throw q}if(G=L,clearTimeout(F),f)clearTimeout(f);let T=Math.round(performance.now()-H);if(L)u("error","command.timeout",{...K,durationMs:T,timeoutMs:U});else u(D.ok?"info":"warn","command.end",{...K,durationMs:T,ok:D.ok,errorCode:D.error?.code,errorMessage:D.error?.message});if(B.envelope.command==="client.register"&&D.ok){let z=(B.envelope.payload??{}).clientId?.trim()||B.envelope.clientId?.trim();if(z)Q.add(z)}else if(B.envelope.command==="client.unregister"&&D.ok){let q=B.envelope.clientId?.trim();if(q)Q.delete(q)}J({kind:"reply",envelope:D});break}case"stream.subscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;if(Z.has(H))break;let G=await this.transport.subscribe(B.clientId,X,{sessionId:B.sessionId});Z.set(H,G);break}case"stream.unsubscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;Z.get(H)?.(),Z.delete(H);break}case"reply":case"event":break}}catch(B){let H=typeof V.data==="string"?Fg(V.data):void 0;if(!H||H.kind!=="command"){u("error","rejected malformed websocket frame",{error:B});return}u("error","command.error",{...sY(H),error:B}),jD(this.telemetry,{component:"core",operation:"hub.websocket_command",error:B,severity:"error",handled:!0,context:sY(H)}),J({kind:"reply",envelope:VD(H,"command_failed",B instanceof Error?B.message:"Unknown hub error")})}},j=()=>{if(W)return;W=!0;for(let V of Z.values())V();Z.clear();for(let V of Q)this.transport.command({version:"v1",command:"client.unregister",clientId:V});Q.clear(),$.removeEventListener("message",Y),$.removeEventListener("close",j)};return $.addEventListener("message",Y),$.addEventListener("close",j),j}}class Y9{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}}function zg($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();return String($)}function Tg($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(W)=>{Q({data:zg(W)})});return}$.on("close",Q)},removeEventListener(){}}}function Og($){try{$.write(`HTTP/1.1 400 Bad Request\r
746
746
  Connection: close\r
747
747
  Content-Length: 0\r
748
748
  \r
749
- `),$.end()}catch{$.destroy()}}function Eg($){try{$.write(`HTTP/1.1 401 Unauthorized\r
749
+ `),$.end()}catch{$.destroy()}}function qg($){try{$.write(`HTTP/1.1 401 Unauthorized\r
750
750
  Connection: close\r
751
751
  Content-Length: 0\r
752
752
  \r
753
- `),$.end()}catch{$.destroy()}}function oY($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),W=Buffer.from(Z,"utf8");return Q.length===W.length&&Dg(Q,W)}function AD($,Z){let Q=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,W=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",J=`Failed to start hub server on ${Z.host}:${Z.port}${Z.pathname}: ${W}`,X=Error(Q?`${J} (${Q})`:J);if(Q)$.code=Q,X.code=Q;if($ instanceof Error&&$.stack)X.stack=`${X.name}: ${X.message}
754
- Caused by: ${$.stack}`;return X}async function Ng($){return await new Promise((Z,Q)=>{let W=_g.createServer();W.once("error",Q),W.listen(0,$,()=>{let J=W.address();if(!J||typeof J==="string"){W.close(()=>Q(Error("Failed to resolve free port")));return}let X=J.port;W.close((Y)=>{if(Y){Q(Y);return}Z(X)})})})}function wg($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var tY=new Map,fD="cline-hub-auth.",Cg=30000;function $j($){return Array.isArray($)?$.join(","):$??""}function UD($){return $===32||$===9}function l7($){let Z=$j($).trim(),Q="bearer";if(Z.length<=6||Z.slice(0,6).toLowerCase()!=="bearer"||!UD(Z.charCodeAt(6)))return null;let W=7;while(W<Z.length&&UD(Z.charCodeAt(W)))W+=1;return Z.slice(W).trim()||null}function Pg($){for(let Z of $j($).split(",")){let Q=Z.trim();if(Q.startsWith(fD))return Q.slice(fD.length).trim()||null}return null}function p7($){let Z=$.trim().toLowerCase();return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"||Z==="[::1]"}function MY($){let Z=$j($).trim();if(!Z)return!1;try{return p7(new eY(Z).hostname)}catch{return!1}}async function j9($){let Z=$.owner??x1(),Q=$.host??"127.0.0.1",W=$.pathname??"/hub",J=$.port??V8(),X=J===0?await Ng(Q):J,Y=X,j=Z1(Q,X,W),V=l9(),H=d9(),B=new w4($);await B.start();let G=new X9(new Y9(B),$.telemetry),K=new Set,F=new Date().toISOString(),A={protocolVersion:GD,minClientProtocolVersion:FD,maxClientProtocolVersion:KD,capabilities:zg,coreVersion:n4.version,buildId:V,pid:process.pid,startedAt:F},L=new Set,f,D,U=async()=>{if(D)return D;return D=(async()=>{if(f)clearInterval(f),f=void 0;for(let _ of L)_.terminate?.();L.clear();for(let _ of K)_();if(K.clear(),await new Promise((_,E)=>{q.close((C)=>{if(C){E(C);return}_()})}),await new Promise((_,E)=>{T.close((C)=>{if(C){E(C);return}_()})}),await B.stop(),(await K0(Z.discoveryPath))?.url===j)await S0(Z.discoveryPath)})(),D},T=Lg.createServer((z,_)=>{if((z.url??"/")==="/health"){let C=JSON.stringify({ok:!0,protocolVersion:A.protocolVersion,minClientProtocolVersion:A.minClientProtocolVersion,maxClientProtocolVersion:A.maxClientProtocolVersion,coreVersion:A.coreVersion,host:Q,port:Y,url:j});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(C);return}if((z.url??"/")==="/status"){if(!oY(l7(z.headers.authorization),H)){_.statusCode=401,_.end("Unauthorized");return}let C=JSON.stringify({hubId:B.getHubId(),...A,authToken:H,host:Q,port:Y,url:j,updatedAt:new Date().toISOString()});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(C);return}if((z.url??"/")==="/version"){_.statusCode=200,_.setHeader("content-type","application/json"),_.end(JSON.stringify(A));return}if(new eY(z.url??"/",`http://${Q}:${Y}`).pathname==="/shutdown"&&z.method==="POST"){if(!oY(l7(z.headers.authorization),H)){_.statusCode=401,_.end("Unauthorized");return}_.statusCode=202,_.setHeader("content-type","application/json"),_.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{U()});return}_.statusCode=404,_.end("Not found")}),q=new Og({noServer:!0});f=setInterval(()=>{for(let z of L){if(z.isAlive===!1){try{z.terminate?.()}catch{}L.delete(z);continue}z.isAlive=!1;try{z.ping?.()}catch{try{z.terminate?.()}catch{}L.delete(z)}}},Cg),T.on("upgrade",(z,_,E)=>{if(new eY(z.url??"/",`http://${Q}:${Y}`).pathname!==W){_.destroy();return}if(!(oY(Pg(z.headers["sec-websocket-protocol"]),H)||p7(Q)&&MY(z.headers.origin))){Eg(_);return}try{q.handleUpgrade(z,_,E,(l)=>{let o=l;o.isAlive=!0,o.on("pong",()=>{o.isAlive=!0}),L.add(o);let t=G.attach(Mg(l));K.add(t),l.once("close",()=>{L.delete(o),t(),K.delete(t)})})}catch{Rg(_)}});try{await new Promise((z,_)=>{T.once("error",(E)=>{_(AD(E,{host:Q,port:X,pathname:W}))}),T.listen(X,Q,()=>{let E=T.address();if(!E||typeof E==="string"){_(AD(Error("Failed to resolve hub port"),{host:Q,port:X,pathname:W}));return}Y=E.port,j=Z1(Q,Y,W),z()})})}catch(z){if(f)clearInterval(f),f=void 0;throw await B.stop().catch(()=>{return}),z}return await p9(Z.discoveryPath,{hubId:B.getHubId(),protocolVersion:GD,minClientProtocolVersion:FD,maxClientProtocolVersion:KD,capabilities:[...A.capabilities],coreVersion:n4.version,buildId:V,authToken:H,host:Q,port:Y,url:j,pid:process.pid,startedAt:F,updatedAt:F}),{host:Q,port:Y,url:j,authToken:H,close:U}}async function r7($){let Z=$.owner??x1(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=$.host??"127.0.0.1",J=$.port??V8(),X=$.pathname??"/hub",Y=Z1(W,J,X),j=Z.discoveryPath,V=(B)=>{if(!Q)B$(B.url,B.authToken);return B},H=tY.get(j);if(H){let B=await H;if(B.url===Y)return V({server:B,url:B.url,authToken:B.authToken,action:"reuse"})}return await r9(Z.discoveryPath,async()=>{let B=await K0(Z.discoveryPath);if(B?.url&&(B.url===Y||$.allowPortFallback===!0)){let F=await g1(B.url,{authToken:B.authToken});if(F?.url&&Tg(F).compatible&&await A1(F.url,{authToken:B.authToken}))return V({url:F.url,authToken:B.authToken,action:"reuse"})}if(B?.url)await S0(Z.discoveryPath);let K=async(F)=>{let A=j9({...F,owner:Z});tY.set(j,A);try{let L=await A;return V({server:L,url:L.url,authToken:L.authToken,action:"started"})}catch(L){throw tY.delete(j),L}};try{return await K($)}catch(F){if(!$.allowPortFallback||!wg(F))throw F;return await K({...$,port:0})}})}function LD(){return DD()==="production"?F1():Q1()}function Sg($){return DD()!=="production"&&!$}async function HU($){let Z=K1({host:$.host,port:$.port,pathname:$.pathname});return await j9({...$,...Z,owner:LD()})}async function BU($){let Z=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=K1({host:$.host,port:$.port,pathname:$.pathname});return await r7({...$,...Q,allowPortFallback:$.allowPortFallback??Sg(Z),owner:LD()})}export{p9 as writeHubDiscovery,r9 as withHubStartupLock,A1 as verifyHubConnection,J9 as truncateNotificationBody,OW as toHubStatusUrl,i9 as toHubHealthUrl,hW as stopLocalHubServerGracefully,j9 as startHubWebSocketServer,HU as startHubServer,H8 as spawnDetachedHubServerWithRetry,wW as spawnDetachedHubServer,_V as sendHubCommand,t9 as restartLocalHubIfIdleAfterStartupTimeout,QV as resolveWorkspaceHubOwnerContext,Q1 as resolveSharedHubOwnerContext,F1 as resolveProductionHubOwnerContext,kW as resolveHubUrl,x1 as resolveHubOwnerContext,K1 as resolveHubEndpointOptions,l9 as resolveHubBuildId,V8 as resolveDefaultHubPort,NW as resolveDefaultHubPathname,EW as resolveDefaultHubHost,o4 as resolveCompatibleLocalHubUrl,tj as resolveClineDir,o$ as resolveClineDataDir,s4 as requestHubShutdown,B$ as rememberRecoverableLocalHubUrl,K0 as readHubDiscovery,l7 as readBearerToken,g1 as probeHubServer,LV as probeHubConnection,a9 as prewarmDetachedHubServer,G$ as normalizeHubWebSocketUrl,MY as isLocalHubOrigin,p7 as isLocalHubHostName,bW as isHubReconnectableTransportError,o9 as isHubCommandTimeoutError,$V as isDiscoveryFilePresent,r7 as ensureHubWebSocketServer,BU as ensureHubServer,VV as ensureDetachedHubServer,$2 as ensureCompatibleLocalHubUrl,VU as createLocalHubScheduleRuntimeHandlers,ej as createInMemoryHubOwnerContext,Z1 as createHubServerUrl,d9 as createHubAuthToken,h1 as createConfiguredTelemetryService,j8 as createConfiguredTelemetryHandle,e9 as connectToHub,S0 as clearHubDiscovery,W1 as NodeHubClient,Y9 as NativeHubTransportAdapter,gW as HubUIClient,R0 as HubTransportError,xW as HubSessionClient,w4 as HubServerTransport,Z8 as HubScheduleService,o2 as HubScheduleCommandService,B8 as HubCommandError,MW as DEFAULT_HUB_PORT,RW as DEFAULT_HUB_PATHNAME,qW as DEFAULT_HUB_HOST,X9 as BrowserWebSocketHubAdapter};
753
+ `),$.end()}catch{$.destroy()}}function oY($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),W=Buffer.from(Z,"utf8");return Q.length===W.length&&Ag(Q,W)}function KD($,Z){let Q=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,W=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",J=`Failed to start hub server on ${Z.host}:${Z.port}${Z.pathname}: ${W}`,X=Error(Q?`${J} (${Q})`:J);if(Q)$.code=Q,X.code=Q;if($ instanceof Error&&$.stack)X.stack=`${X.name}: ${X.message}
754
+ Caused by: ${$.stack}`;return X}async function Mg($){return await new Promise((Z,Q)=>{let W=Ug.createServer();W.once("error",Q),W.listen(0,$,()=>{let J=W.address();if(!J||typeof J==="string"){W.close(()=>Q(Error("Failed to resolve free port")));return}let X=J.port;W.close((Y)=>{if(Y){Q(Y);return}Z(X)})})})}function Rg($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var tY=new Map,FD="cline-hub-auth.",Eg=30000;function $j($){return Array.isArray($)?$.join(","):$??""}function AD($){return $===32||$===9}function l7($){let Z=$j($).trim(),Q="bearer";if(Z.length<=6||Z.slice(0,6).toLowerCase()!=="bearer"||!AD(Z.charCodeAt(6)))return null;let W=7;while(W<Z.length&&AD(Z.charCodeAt(W)))W+=1;return Z.slice(W).trim()||null}function Ng($){for(let Z of $j($).split(",")){let Q=Z.trim();if(Q.startsWith(FD))return Q.slice(FD.length).trim()||null}return null}function p7($){let Z=$.trim().toLowerCase();return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"||Z==="[::1]"}function MY($){let Z=$j($).trim();if(!Z)return!1;try{return p7(new eY(Z).hostname)}catch{return!1}}async function j9($){let Z=$.owner??x1(),Q=$.host??"127.0.0.1",W=$.pathname??"/hub",J=$.port??V8(),X=J===0?await Mg(Q):J,Y=X,j=Z1(Q,X,W),V=l9(),B=d9(),H=new C4($);await H.start();let G=new X9(new Y9(H),$.telemetry),K=new Set,F=new Date().toISOString(),A={protocolVersion:BD,minClientProtocolVersion:GD,maxClientProtocolVersion:HD,capabilities:Dg,coreVersion:n4.version,buildId:V,pid:process.pid,startedAt:F},L=new Set,f,D,U=async()=>{if(D)return D;return D=(async()=>{if(f)clearInterval(f),f=void 0;for(let _ of L)_.terminate?.();L.clear();for(let _ of K)_();if(K.clear(),await new Promise((_,E)=>{q.close((w)=>{if(w){E(w);return}_()})}),await new Promise((_,E)=>{T.close((w)=>{if(w){E(w);return}_()})}),await H.stop(),(await K0(Z.discoveryPath))?.url===j)await S0(Z.discoveryPath)})(),D},T=fg.createServer((z,_)=>{if((z.url??"/")==="/health"){let w=JSON.stringify({ok:!0,protocolVersion:A.protocolVersion,minClientProtocolVersion:A.minClientProtocolVersion,maxClientProtocolVersion:A.maxClientProtocolVersion,coreVersion:A.coreVersion,host:Q,port:Y,url:j});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(w);return}if((z.url??"/")==="/status"){if(!oY(l7(z.headers.authorization),B)){_.statusCode=401,_.end("Unauthorized");return}let w=JSON.stringify({hubId:H.getHubId(),...A,authToken:B,host:Q,port:Y,url:j,updatedAt:new Date().toISOString()});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(w);return}if((z.url??"/")==="/version"){_.statusCode=200,_.setHeader("content-type","application/json"),_.end(JSON.stringify(A));return}if(new eY(z.url??"/",`http://${Q}:${Y}`).pathname==="/shutdown"&&z.method==="POST"){if(!oY(l7(z.headers.authorization),B)){_.statusCode=401,_.end("Unauthorized");return}_.statusCode=202,_.setHeader("content-type","application/json"),_.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{U()});return}_.statusCode=404,_.end("Not found")}),q=new _g({noServer:!0});f=setInterval(()=>{for(let z of L){if(z.isAlive===!1){try{z.terminate?.()}catch{}L.delete(z);continue}z.isAlive=!1;try{z.ping?.()}catch{try{z.terminate?.()}catch{}L.delete(z)}}},Eg),T.on("upgrade",(z,_,E)=>{if(new eY(z.url??"/",`http://${Q}:${Y}`).pathname!==W){_.destroy();return}if(!(oY(Ng(z.headers["sec-websocket-protocol"]),B)||p7(Q)&&MY(z.headers.origin))){qg(_);return}try{q.handleUpgrade(z,_,E,(l)=>{let o=l;o.isAlive=!0,o.on("pong",()=>{o.isAlive=!0}),L.add(o);let t=G.attach(Tg(l));K.add(t),l.once("close",()=>{L.delete(o),t(),K.delete(t)})})}catch{Og(_)}});try{await new Promise((z,_)=>{T.once("error",(E)=>{_(KD(E,{host:Q,port:X,pathname:W}))}),T.listen(X,Q,()=>{let E=T.address();if(!E||typeof E==="string"){_(KD(Error("Failed to resolve hub port"),{host:Q,port:X,pathname:W}));return}Y=E.port,j=Z1(Q,Y,W),z()})})}catch(z){if(f)clearInterval(f),f=void 0;throw await H.stop().catch(()=>{return}),z}return await p9(Z.discoveryPath,{hubId:H.getHubId(),protocolVersion:BD,minClientProtocolVersion:GD,maxClientProtocolVersion:HD,capabilities:[...A.capabilities],coreVersion:n4.version,buildId:V,authToken:B,host:Q,port:Y,url:j,pid:process.pid,startedAt:F,updatedAt:F}),{host:Q,port:Y,url:j,authToken:B,close:U}}async function r7($){let Z=$.owner??x1(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=$.host??"127.0.0.1",J=$.port??V8(),X=$.pathname??"/hub",Y=Z1(W,J,X),j=Z.discoveryPath,V=(H)=>{if(!Q)H$(H.url,H.authToken);return H},B=tY.get(j);if(B){let H=await B;if(H.url===Y)return V({server:H,url:H.url,authToken:H.authToken,action:"reuse"})}return await r9(Z.discoveryPath,async()=>{let H=await K0(Z.discoveryPath);if(H?.url&&(H.url===Y||$.allowPortFallback===!0)){let F=await g1(H.url,{authToken:H.authToken});if(F?.url&&Lg(F).compatible&&await A1(F.url,{authToken:H.authToken}))return V({url:F.url,authToken:H.authToken,action:"reuse"})}if(H?.url)await S0(Z.discoveryPath);let K=async(F)=>{let A=j9({...F,owner:Z});tY.set(j,A);try{let L=await A;return V({server:L,url:L.url,authToken:L.authToken,action:"started"})}catch(L){throw tY.delete(j),L}};try{return await K($)}catch(F){if(!$.allowPortFallback||!Rg(F))throw F;return await K({...$,port:0})}})}function UD(){return fD()==="production"?F1():Q1()}function Cg($){return fD()!=="production"&&!$}async function jU($){let Z=K1({host:$.host,port:$.port,pathname:$.pathname});return await j9({...$,...Z,owner:UD()})}async function VU($){let Z=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=K1({host:$.host,port:$.port,pathname:$.pathname});return await r7({...$,...Q,allowPortFallback:$.allowPortFallback??Cg(Z),owner:UD()})}export{p9 as writeHubDiscovery,r9 as withHubStartupLock,A1 as verifyHubConnection,J9 as truncateNotificationBody,OW as toHubStatusUrl,i9 as toHubHealthUrl,hW as stopLocalHubServerGracefully,j9 as startHubWebSocketServer,jU as startHubServer,B8 as spawnDetachedHubServerWithRetry,CW as spawnDetachedHubServer,_V as sendHubCommand,t9 as restartLocalHubIfIdleAfterStartupTimeout,QV as resolveWorkspaceHubOwnerContext,Q1 as resolveSharedHubOwnerContext,F1 as resolveProductionHubOwnerContext,kW as resolveHubUrl,x1 as resolveHubOwnerContext,K1 as resolveHubEndpointOptions,l9 as resolveHubBuildId,V8 as resolveDefaultHubPort,NW as resolveDefaultHubPathname,EW as resolveDefaultHubHost,o4 as resolveCompatibleLocalHubUrl,tj as resolveClineDir,o$ as resolveClineDataDir,s4 as requestHubShutdown,H$ as rememberRecoverableLocalHubUrl,K0 as readHubDiscovery,l7 as readBearerToken,g1 as probeHubServer,LV as probeHubConnection,a9 as prewarmDetachedHubServer,G$ as normalizeHubWebSocketUrl,MY as isLocalHubOrigin,p7 as isLocalHubHostName,bW as isHubReconnectableTransportError,o9 as isHubCommandTimeoutError,$V as isDiscoveryFilePresent,r7 as ensureHubWebSocketServer,VU as ensureHubServer,VV as ensureDetachedHubServer,$2 as ensureCompatibleLocalHubUrl,YU as createLocalHubScheduleRuntimeHandlers,ej as createInMemoryHubOwnerContext,Z1 as createHubServerUrl,d9 as createHubAuthToken,h1 as createConfiguredTelemetryService,j8 as createConfiguredTelemetryHandle,e9 as connectToHub,S0 as clearHubDiscovery,W1 as NodeHubClient,Y9 as NativeHubTransportAdapter,gW as HubUIClient,R0 as HubTransportError,xW as HubSessionClient,C4 as HubServerTransport,Z8 as HubScheduleService,o2 as HubScheduleCommandService,H8 as HubCommandError,MW as DEFAULT_HUB_PORT,RW as DEFAULT_HUB_PATHNAME,qW as DEFAULT_HUB_HOST,X9 as BrowserWebSocketHubAdapter};