@cline/core 0.0.49 → 0.0.50
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/daemon/entry.js +158 -146
- package/dist/hub/index.js +145 -133
- package/dist/index.d.ts +1 -0
- package/dist/index.js +149 -137
- package/dist/session/services/message-builder.d.ts +33 -6
- package/package.json +4 -4
package/dist/hub/daemon/entry.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import{createRequire as
|
|
2
|
-
`,"utf8"),
|
|
3
|
-
`)}function
|
|
4
|
-
`)}function V2($,J={}){let Q=
|
|
5
|
-
`,"utf8"),Y??{}}function g6($={}){return A1($).map((Q)=>{let Z=Q.transport.type!=="stdio",W=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:Z,oauthConfigured:Z&&typeof W==="string"&&W.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,Z)=>Q.serverName.localeCompare(Z.serverName))}async function B2($,J={}){let Q=A1(J);for(let Z of Q)await $.registerServer(Z);return Q}var x6,GH,s7,CO,yO,EO,bO,hO,kO,FH,IO,xO,gO,mO;var q9=h$(()=>{x6=y.record(y.string(),y.string()),GH=y.record(y.string(),y.unknown()),s7=y.object({clientInformation:y.record(y.string(),y.unknown()).optional(),tokens:y.record(y.string(),y.unknown()).optional(),codeVerifier:y.string().optional(),discoveryState:y.record(y.string(),y.unknown()).optional(),redirectUrl:y.string().url().optional(),lastError:y.string().optional(),lastAuthenticatedAt:y.number().int().positive().optional()}).strip(),CO=y.object({type:y.literal("stdio"),command:y.string().min(1),args:y.array(y.string()).optional(),cwd:y.string().min(1).optional(),env:x6.optional()}),yO=y.object({type:y.literal("sse"),url:y.string().url(),headers:x6.optional()}),EO=y.object({type:y.literal("streamableHttp"),url:y.string().url(),headers:x6.optional()}),bO=y.discriminatedUnion("type",[CO,yO,EO]),hO=y.object({transport:bO,disabled:y.boolean().optional(),metadata:GH.optional(),oauth:s7.optional()}),kO=y.enum(["stdio","sse","http","streamableHttp"]).optional(),FH=y.object({type:y.enum(["stdio","sse","streamableHttp"]).optional(),transportType:kO,disabled:y.boolean().optional(),metadata:GH.optional(),oauth:s7.optional()});IO=FH.extend({command:y.string().min(1),args:y.array(y.string()).optional(),cwd:y.string().min(1).optional(),env:x6.optional()}).superRefine(($,J)=>{let Q=$.type??n7($.transportType);if(Q&&Q!=="stdio")J.addIssue({code:y.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth})),xO=FH.extend({url:y.string().url(),headers:x6.optional()}).superRefine(($,J)=>{let Q=$.type??n7($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")J.addIssue({code:y.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??n7($.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}}),gO=y.union([hO,IO,xO]),mO=y.object({mcpServers:y.record(y.string(),gO)}).passthrough()});import{existsSync as aP,mkdirSync as sP,readFileSync as oP,writeFileSync as tP}from"node:fs";import{resolve as eP}from"node:path";import{resolveSessionDataDir as $N}from"@cline/shared/storage";import{nanoid as JN}from"nanoid";import*as QN from"node-machine-id";function b0($){let J=$?.trim();if(J)return J;let Q=jN();if(Q)return Q;return fN()}function WN(){let $=QN;return $.machineIdSync??$.default?.machineIdSync}function jN(){try{let $=WN();if(!$)return;return $().trim()||void 0}catch{return}}function fN(){let $=$N(),J=eP($,ZN);try{if(aP(J)){let Z=oP(J,"utf8").trim();if(Z.length>0)return Z}}catch{}let Q=`cl-${JN()}`;try{sP($,{recursive:!0}),tP(J,Q,"utf8")}catch{}return Q}var ZN="machine-id";var g8=()=>{};class GJ{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,J){if(!this.isEnabled())return;this.emitLog($,J,!1)}emitRequired($,J){this.emitLog($,J,!0)}recordCounter($,J,Q,Z,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let j=this.counters.get($);if(!j)j=this.meter.createCounter($,Z?{description:Z}:void 0),this.counters.set($,j);j.add(J,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,J,Q,Z,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let j=this.histograms.get($);if(!j)j=this.meter.createHistogram($,Z?{description:Z}:void 0),this.histograms.set($,j);j.record(J,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,J,Q,Z,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let j=this.buildAttributes(Q),f=JSON.stringify(j),X=this.gaugeValues.get($);if(J===null){if(X){if(X.delete(f),X.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let Y=X;if(!Y)Y=new Map,this.gaugeValues.set($,Y);if(!this.gauges.has($)){let V=this.meter.createObservableGauge($,Z?{description:Z}:void 0);V.addCallback((H)=>{for(let B of this.snapshotGaugeSeries($))H.observe(B.value,this.flattenProperties(B.attributes))}),this.gauges.set($,V)}Y.set(f,{value:J,attributes:j})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,J,Q){if(!this.logger)return;let Z=this.flattenProperties(this.buildAttributes(J,Q));this.logger.emit({severityText:"INFO",body:$,attributes:Z})}buildAttributes($,J=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...J?{_required:!0}:{}}}snapshotGaugeSeries($){let J=this.gaugeValues.get($);if(!J)return[];return Array.from(J.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,J="",Q=new WeakSet,Z=0){if(!$)return{};let W={},j=100,f=10;for(let[X,Y]of Object.entries($)){if(X==="__proto__"||X==="constructor"||X==="prototype")continue;let V=J?`${J}.${X}`:X;if(Y===null||Y===void 0){W[V]=String(Y);continue}if(Array.isArray(Y)){let H=Y.length>j?Y.slice(0,j):Y;try{W[V]=JSON.stringify(H)}catch{W[V]="[UnserializableArray]"}if(Y.length>j)W[`${V}_truncated`]=!0,W[`${V}_original_length`]=Y.length;continue}if(typeof Y==="object"){if(Y instanceof Date){W[V]=Y.toISOString();continue}if(Y instanceof Error){W[V]=Y.message;continue}if(Q.has(Y)){W[V]="[Circular]";continue}if(Z>=f){W[V]="[MaxDepthExceeded]";continue}Q.add(Y),Object.assign(W,this.flattenProperties(Y,V,Q,Z+1));continue}if(Ow(Y)){W[V]=Y;continue}try{W[V]=JSON.stringify(Y)}catch{W[V]=String(Y)}}return W}}function Ow($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class FJ{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,J){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:J})}emitRequired($,J){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:J})}recordCounter($,J,Q,Z,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:J,attributes:Q,description:Z,required:W===!0})}recordHistogram($,J,Q,Z,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:J,attributes:Q,description:Z,required:W===!0})}recordGauge($,J,Q,Z,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:J,attributes:Q,description:Z,required:W===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class o8{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new FJ({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let J=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,J)}captureRequired($,J){let Q=this.buildAttributes(J);for(let Z of this.adapters)Z.emitRequired($,Q)}recordCounter($,J,Q,Z,W=!1){let j=this.buildAttributes(Q);for(let f of this.adapters)f.recordCounter($,J,j,Z,W)}recordHistogram($,J,Q,Z,W=!1){let j=this.buildAttributes(Q);for(let f of this.adapters)f.recordHistogram($,J,j,Z,W)}recordGauge($,J,Q,Z,W=!1){let j=this.buildAttributes(Q);for(let f of this.adapters)f.recordGauge($,J,j,Z,W)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var X3=()=>{};import{metrics as Tw,trace as Mw}from"@opentelemetry/api";import{logs as qw}from"@opentelemetry/api-logs";import{OTLPLogExporter as Pw}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as Nw}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as ww}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as Sw}from"@opentelemetry/resources";import{BatchLogRecordProcessor as Cw,ConsoleLogRecordExporter as yw,LoggerProvider as Ew}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as bw,MeterProvider as hw,PeriodicExportingMetricReader as xA}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as kw,ConsoleSpanExporter as Iw,SimpleSpanProcessor as xw}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as gw}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as mw,ATTR_SERVICE_VERSION as vw}from"@opentelemetry/semantic-conventions";class gA{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,J){this.resolveProperties(J)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class t8{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let J=Sw({[mw]:$.serviceName??"cline",...$.serviceVersion?{[vw]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(J),this.loggerProvider=this.createLoggerProvider(J),this.tracerProvider=this.createTracerProvider(J),this.meterProvider)Tw.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)qw.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",J){return Mw.getTracer($,J??this.options.serviceVersion)}createAdapter($){return new GJ({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let J=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new o8({...$,adapters:[J],distinctId:b0($.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider($){let J=Y3(this.options.metricsExporter);if(J.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),Z=Math.min(30000,Math.floor(Q*0.8)),W=J.map((j)=>dw(j,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:Z})).filter((j)=>j!==null);if(W.length===0)return null;return new hw({resource:$,readers:W})}createTracerProvider($){let J=Y3(this.options.tracesExporter);if(J.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,Z=this.options.otlpTracesHeaders??this.options.otlpHeaders,W=[];for(let j of J){let f=uw(j,{endpoint:Q,headers:Z,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(f)W.push(f)}if(W.length===0)return null;return new gw({resource:$,spanProcessors:W})}createLoggerProvider($){let J=Y3(this.options.logsExporter);if(J.length===0)return null;let Q=J.map((Z)=>{let W=cw(Z,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!W)return null;return new Cw(W,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((Z)=>Z!==null);if(Q.length===0)return null;return new Ew({resource:$,processors:Q})}}function DJ($){let J=new t8($),Q=J.createTelemetryService($);return Q.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion}),{provider:J,telemetry:Q}}function s1($){if(R5())return{telemetry:new gA($)};if($.enabled!==!0)return{telemetry:new o8({...$,distinctId:b0($.distinctId)})};return DJ($)}function e8($){let{telemetry:J,provider:Q}=s1($);return{telemetry:J,provider:Q,flush:async()=>{let j=Q;if(j&&typeof j.forceFlush==="function")try{await j.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([J.dispose(),Q?.dispose()])}}}function Y3($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function cw($,J){if($==="console")return new yw;if(!J.endpoint)return null;let Q=V3(J.endpoint,"/v1/logs");return new Pw({url:Q,headers:J.headers})}function uw($,J){if($==="console")return new xw(new Iw);if(!J.endpoint)return null;let Q=V3(J.endpoint,"/v1/traces");return new kw(new ww({url:Q,headers:J.headers}))}function dw($,J){if($==="console")return new xA({exporter:new bw,exportIntervalMillis:J.interval,exportTimeoutMillis:J.timeout});if(!J.endpoint)return null;let Q=V3(J.endpoint,"/v1/metrics");return new xA({exporter:new Nw({url:Q,headers:J.headers}),exportIntervalMillis:J.interval,exportTimeoutMillis:J.timeout})}function V3($,J){let Q=new URL($),Z=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=Z.endsWith(J)?Z:`${Z}${J}`,Q.toString()}var YQ=h$(()=>{W1();g8();X3()});var pK={};w(pK,{resolveCoreDistinctId:()=>b0,createOpenTelemetryTelemetryService:()=>DJ,createConfiguredTelemetryService:()=>s1,createConfiguredTelemetryHandle:()=>e8,OpenTelemetryProvider:()=>t8,OpenTelemetryAdapter:()=>GJ});var RQ=h$(()=>{g8();YQ()});import{AgentRuntimeAbortError as hb}from"@cline/agents";import{initVcr as kb,resolveClineBuildEnv as Ib}from"@cline/shared";import{normalizeProviderId as yb}from"@cline/llms";var nG={};w(nG,{LocalRuntimeHost:()=>L1});import{readdirSync as Ob}from"node:fs";import{homedir as Tb}from"node:os";import{isAbsolute as Mb,join as Ij,resolve as xj}from"node:path";import{captureSdkError as h2,createSessionId as qb,isLikelyAuthError as Pb,normalizeUserInput as Nb}from"@cline/shared";import{setHomeDirIfUnset as wb}from"@cline/shared/storage";var Tf={};w(Tf,{saveProviderOAuthCredentials:()=>x$,resolveProviderApiKeyFromSettings:()=>HZ,loginAndSaveProviderOAuthCredentials:()=>z4,isOAuthProvider:()=>I$,getProviderOAuthCredentialsFromSettings:()=>L4,getProviderAuthStorageId:()=>VZ,getProviderAuthHandler:()=>Z0,getPersistedProviderApiKey:()=>l2,formatProviderOAuthApiKey:()=>BZ});import{getClineEnvironmentConfig as _f}from"@cline/shared";O0();var Wf={};w(Wf,{startClineDeviceAuth:()=>WZ,refreshClineToken:()=>tJ,loginClineOAuth:()=>A4,getValidClineCredentials:()=>K4,completeClineDeviceAuth:()=>jZ});import{getClineEnvironmentConfig as eQ}from"@cline/shared";var aj={};w(aj,{startLocalOAuthServer:()=>J1});function GF(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function J1($){let J=await import("node:http"),Q=$.host??"127.0.0.1",Z=$.timeoutMs??300000,W=$.successHtml??FF,j=GF(),f=!1,X=null,Y=null,V=null,H=(K)=>{if(f)return;f=!0,j.resolve(K)},B=()=>{if(X)clearTimeout(X),X=null;let K=V;if(V=null,Y)Y.close(),Y=null;if(K!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:K})).catch(()=>{})},A=async()=>{return X=setTimeout(()=>{B(),H(null)},Z),j.promise};for(let K of $.ports){let G=J.createServer((D,U)=>{try{let F=new URL(D.url||"",`http://${Q}:${K}`);if(F.pathname!==$.callbackPath){U.statusCode=404,U.end("Not found");return}let O={url:F,code:F.searchParams.get("code")??void 0,state:F.searchParams.get("state")??void 0,provider:F.searchParams.get("provider")??void 0,error:F.searchParams.get("error")??void 0};if(O.error){U.statusCode=400,U.end(`Authentication failed: ${O.error}`),B(),H(O);return}if(!O.code){U.statusCode=400,U.end("Missing authorization code");return}if($.expectedState&&O.state!==$.expectedState){U.statusCode=400,U.end("State mismatch");return}U.statusCode=200,U.setHeader("Content-Type","text/html; charset=utf-8"),U.end(W),B(),H(O)}catch{U.statusCode=500,U.end("Internal error")}}),R=await new Promise((D)=>{let U=(F)=>{G.off("error",U),D({bound:!1,error:F})};G.once("error",U),G.listen(K,Q,()=>{G.off("error",U),Y=G,D({bound:!0})})});if(R.error){if(R.error.code==="EADDRINUSE")continue;throw B(),R.error}if(R.bound){V=K;let D=`http://${Q}:${K}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:K,callbackUrl:D})).catch(()=>{});return{callbackUrl:D,waitForCallback:A,cancelWait:()=>{B(),H(null)},close:()=>{B(),H(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var FF=`<!DOCTYPE html>
|
|
1
|
+
import{createRequire as RF}from"node:module";var{defineProperty:WZ,getOwnPropertyNames:FF}=Object;var dj=Object.prototype.hasOwnProperty;function lj($){return this[$]}var q=($,J,Q)=>{var Z=FF(J);for(let W of Z)if(!dj.call($,W)&&W!=="default")WZ($,W,{get:lj.bind(J,W),enumerable:!0});if(Q){for(let W of Z)if(!dj.call(Q,W)&&W!=="default")WZ(Q,W,{get:lj.bind(J,W),enumerable:!0});return Q}};var DF=($)=>$;function UF($,J){this[$]=DF.bind(null,J)}var w=($,J)=>{for(var Q in J)WZ($,Q,{get:J[Q],enumerable:!0,configurable:!0,set:UF.bind(J,Q)})};var h$=($,J)=>()=>($&&(J=$($=0)),J);var pj=RF(import.meta.url);import{SDK_ERROR_TELEMETRY_EVENT as LF}from"@cline/shared";function i($,J,Q){$?.capture({event:J,properties:Q})}function IJ($){if(!$)return;return $.substring(0,zF)}function _F($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function OF($){return typeof $==="string"?$:$.message}function rj($,J){return $.some((Q)=>J.has(Q.trim().toLowerCase()))}function ij($){i($,x.CLIENT.EXTENSION_ACTIVATED)}function xJ($,J){let Q=[...J.vcs_types],Z={root_count:J.root_count,vcs_types:Q,is_multi_root:J.root_count>1,has_git:rj(Q,new Set(["git"])),has_mercurial:rj(Q,new Set(["mercurial","hg"]))};if(J.init_duration_ms!==void 0)Z.init_duration_ms=J.init_duration_ms;if(J.feature_flag_enabled!==void 0)Z.feature_flag_enabled=J.feature_flag_enabled;if(J.is_remote_workspace!==void 0)Z.is_remote_workspace=J.is_remote_workspace;i($,x.WORKSPACE.INITIALIZED,Z)}function gJ($,J,Q){i($,x.WORKSPACE.INIT_ERROR,{error_type:_F(J),error_message:IJ(OF(J)),fallback_to_single_root:Q.fallback_to_single_root,workspace_count:Q.workspace_count??0})}function nj($,J){i($,x.WORKSPACE.PATH_RESOLVED,{...J})}function P1($,J){i($,x.USER.AUTH_STARTED,{provider:J})}function N1($,J){i($,x.USER.AUTH_SUCCEEDED,{provider:J})}function w1($,J,Q){i($,x.USER.AUTH_FAILED,{provider:J,errorMessage:IJ(Q)})}function e1($,J,Q){i($,x.USER.AUTH_LOGGED_OUT,{provider:J,reason:Q})}function aj($,J){i($,x.USER.PROVIDER_CONFIGURED,{provider:J})}function sj($,J){$?.captureRequired(x.USER.TELEMETRY_OPT_OUT,J)}function S1($,J){let Q=J.id?.trim();if(Q)$?.setDistinctId(Q);$?.updateCommonProperties({account_id:J.id,account_email:J.email,provider:J.provider,organization_id:J.organizationId,organization_name:J.organizationName,member_id:J.memberId})}function mJ($,J){i($,x.TASK.CREATED,J)}function vJ($,J){i($,x.TASK.RESTARTED,J)}function H4($,J){i($,x.TASK.COMPLETED,J)}function g2($,J){i($,x.TASK.CONVERSATION_TURN,{...J,timestamp:new Date().toISOString()})}function cJ($,J){i($,x.TASK.TOKEN_USAGE,J)}function uJ($,J,Q){i($,x.TASK.MODE_SWITCH,{ulid:J,mode:Q})}function dJ($,J){i($,x.TASK.TOOL_USED,J)}function lJ($,J){i($,x.TASK.SKILL_USED,J)}function pJ($,J){i($,x.TASK.DIFF_EDIT_FAILED,J)}function B4($,J){i($,x.TASK.PROVIDER_API_ERROR,{...J,errorMessage:IJ(J.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function oj($,J){i($,x.SDK.TOOL_TIMEOUT,TF(J))}function TF($){let J={};for(let[Q,Z]of Object.entries($))if(Z!==void 0)J[Q]=Z;return J}function rJ($,J,Q){i($,x.TASK.MENTION_USED,{mentionType:J,contentLength:Q,timestamp:new Date().toISOString()})}function iJ($,J,Q,Z){i($,x.TASK.MENTION_FAILED,{mentionType:J,errorType:Q,errorMessage:IJ(Z),timestamp:new Date().toISOString()})}function nJ($,J,Q,Z,W){i($,x.TASK.MENTION_SEARCH_RESULTS,{queryLength:J.length,resultCount:Q,searchType:Z,isEmpty:W,timestamp:new Date().toISOString()})}function $$($,J){i($,x.TASK.AGENT_CREATED,{...J,timestamp:new Date().toISOString()})}function aJ($,J){i($,x.TASK.AGENT_TEAM_CREATED,{...J,timestamp:new Date().toISOString()})}function A4($,J){i($,J.event==="ended"?x.TASK.SUBAGENT_COMPLETED:x.TASK.SUBAGENT_STARTED,{...J,timestamp:new Date().toISOString()})}function sJ($,J,Q,Z){i($,x.HOOKS.DISCOVERY_COMPLETED,{hookName:J,globalCount:Q,workspaceCount:Z,totalCount:Q+Z,timestamp:new Date().toISOString()})}function oJ($,J){i($,x.TASK.COMPACTION_EXECUTED,{...J,timestamp:new Date().toISOString()})}function tJ($,J){i($,x.TASK.COMPACTION_SKIPPED,{...J,timestamp:new Date().toISOString()})}var zF=500,x;var O0=h$(()=>{x={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",PROVIDER_CONFIGURED:"user.provider_configured",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed",COMPACTION_EXECUTED:"task.compaction_executed",COMPACTION_SKIPPED:"task.compaction_skipped"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:LF,TOOL_TIMEOUT:"sdk.tool_timeout"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as xU,readFileSync as gU,statSync as mU,writeFileSync as vU}from"node:fs";import{dirname as cU}from"node:path";import{resolveGlobalSettingsPath as Ef}from"@cline/shared/storage";import{z as e2}from"zod";function z5(){return p4.parse({})}function uU(){_5=void 0}function dU($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function lU($){let J;try{J=gU($,"utf8")}catch{return z5()}try{let Q=p4.safeParse(JSON.parse(J));return Q.success?Q.data:z5()}catch{return z5()}}function pU(){let $=Ef(),J=mU($,{throwIfNoEntry:!1}),Q=J?.mtimeMs??0,Z=J?.size??0,W=_5;if(W&&W.path===$&&W.mtimeMs===Q&&W.size===Z)return W;let j=dU(J?lU($):z5());return _5={path:$,mtimeMs:Q,size:Z,value:j},_5}function M0(){return pU().value}function k1($,J={}){let Q=Ef(),Z=M0();xU(cU(Q),{recursive:!0});let W=p4.parse($);if(!Z.telemetryOptOut&&W.telemetryOptOut)sj(J.telemetry);vU(Q,`${JSON.stringify(W,null,2)}
|
|
2
|
+
`,"utf8"),uU()}function O5(){return M0().telemetryOptOut}function bf($,J={}){k1({...M0(),telemetryOptOut:$},J)}function hf(){return M0().autoUpdateEnabled}function kf($,J={}){k1({...M0(),autoUpdateEnabled:$},J)}function B1($){return new Set($??M0().disabledTools??[])}function r4($){return new Set($??M0().disabledPlugins??[])}function If($){return B1().has($)}function T5($){let J=M0(),Q=new Set(J.disabledTools??[]),Z=Q.has($);if(Z)Q.delete($);else Q.add($);return k1({...J,disabledTools:[...Q]}),!Z}function uZ($,J){let Q=[...new Set($.map((j)=>j.trim()).filter(Boolean))];if(Q.length===0)return;let Z=M0(),W=B1(Z.disabledTools);for(let j of Q)if(J)W.add(j);else W.delete(j);k1({...Z,disabledTools:[...W]})}function xf($,J){return uZ([$],J),J}function gf($){return r4().has($)}function mf($,J){let Q=$.trim();if(!Q)return;let Z=M0(),W=r4(Z.disabledPlugins);if(J)W.add(Q);else W.delete(Q);k1({...Z,disabledPlugins:[...W]})}function M5($,J){let Q=r4(J);if(Q.size===0)return[...$];return $.filter((Z)=>!Q.has(Z))}function I1($,J){let Q=B1(J);if(Q.size===0)return[...$];return $.filter((Z)=>!Q.has(Z.name))}function q5($,J){if(!$||$.length===0)return $;let Q=B1(J);if(Q.size===0)return $;return $.map((Z)=>{if(!Z.setup)return Z;return{...Z,setup:(W,j)=>Z.setup?.({...W,registerTool:(X)=>{if(!Q.has(X.name))W.registerTool(X)}},j)}})}var yf,p4,_5;var W1=h$(()=>{O0();yf=e2.preprocess(($)=>Array.isArray($)?$.filter((J)=>typeof J==="string").map((J)=>J.trim()).filter(Boolean):void 0,e2.array(e2.string()).optional()).transform(($)=>{if(!$)return;let J=[...new Set($)].sort((Q,Z)=>Q.localeCompare(Z));return J.length>0?J:void 0}),p4=e2.object({telemetryOptOut:e2.boolean().default(!1).catch(!1),autoUpdateEnabled:e2.boolean().default(!0).catch(!0),disabledTools:yf.optional(),disabledPlugins:yf.optional()}).strip().transform(($)=>{let J={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.disabledTools?.length)J.disabledTools=$.disabledTools;if($.disabledPlugins?.length)J.disabledPlugins=$.disabledPlugins;return J})});var XY={};w(XY,{normalizeUserMessage:()=>cR,buildInitialUserContent:()=>vR});async function vR($,J,Q,Z){let W=uR(J),j=await lR(Q,Z);if(W.length===0&&!j)return $;let X=[{type:"text",text:$},...W];if(j)X.push(...j);return X}function cR($){if($==null)return"";if(typeof $==="string")return $;let J=$.content;if(typeof J==="string")return J;if(!Array.isArray(J))return"";let Q=[];for(let Z of J)if(Z&&typeof Z==="object"&&Z.type==="text"){let W=Z.text;if(typeof W==="string")Q.push(W)}return Q.join(`
|
|
3
|
+
`)}function uR($){if(!$||$.length===0)return[];let J=[];for(let Q of $){let Z=dR(Q);if(Z)J.push(Z)}return J}function dR($){let J=$.trim();if(!J)return;let Q=J.match(/^data:([^;,]+);base64,(.+)$/);if(Q){let Z=Q[1],W=Q[2];if(!Z||!W)return;return{type:"image",mediaType:Z,data:W}}return{type:"image",mediaType:"image/png",data:J}}async function lR($,J){if(!$||$.length===0)return;let Q=J??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),Z=await Promise.all($.map(async(W)=>{let j=W.replace(/\\/g,"/");try{let X=await Q(W);return{type:"file",path:j,content:X}}catch(X){let f=X instanceof Error?X.message:String(X);return{type:"file",path:j,content:`Error fetching content: ${f}`}}}));if(Z.length===0)return;return Z}var NH={};w(NH,{updateMcpServerOAuthState:()=>H2,setMcpServerDisabled:()=>Y2,resolveMcpServerRegistrations:()=>A1,resolveDefaultMcpSettingsPath:()=>K0,registerMcpServersFromSettingsFile:()=>B2,normalizeMcpServerOAuthState:()=>S8,loadMcpSettingsFile:()=>f2,listMcpServerOAuthStatuses:()=>u6,hasMcpSettingsFile:()=>c1,getMcpServerOAuthState:()=>V2});import{existsSync as uO,mkdirSync as _H,readFileSync as tW,writeFileSync as OH}from"node:fs";import{dirname as TH}from"node:path";import{resolveMcpSettingsPath as dO}from"@cline/shared/storage";import{z as y}from"zod";function oW($){if(!$)return;if($==="http")return"streamableHttp";return $}function K0(){return dO()}function $T($){let J=tW($,"utf8"),Q;try{Q=JSON.parse(J)}catch(Z){let W=Z instanceof Error?Z.message:String(Z);throw Error(`Failed to parse MCP settings JSON at "${$}": ${W}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function PH($,J){if(!Object.hasOwn($,J))return;let Q=$[J];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function JT($,J,Q){Object.defineProperty($,J,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function f2($={}){let J=$.filePath??K0(),Q=tW(J,"utf8"),Z;try{Z=JSON.parse(Q)}catch(j){let X=j instanceof Error?j.message:String(j);throw Error(`Failed to parse MCP settings JSON at "${J}": ${X}`)}let W=eO.safeParse(Z);if(!W.success){let j=W.error.issues.map((X)=>{let f=X.path.join(".");return f?`${f}: ${X.message}`:X.message}).join("; ");throw Error(`Invalid MCP settings at "${J}": ${j}`)}return W.data}function QT($){let J=tW($,"utf8"),Q;try{Q=JSON.parse(J)}catch(j){let X=j instanceof Error?j.message:String(j);throw Error(`Failed to parse MCP settings JSON at "${$}": ${X}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object`);let Z=Q,W=Z.mcpServers;if(!W||typeof W!=="object"||Array.isArray(W))throw Error(`Invalid MCP settings at "${$}": mcpServers must be an object`);return Z}function S8($){if(!$)return;let J={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(J).length>0?J:void 0}function ZT($){if($===void 0)return;let J=eW.safeParse($);if(!J.success)return;return S8(J.data)}function c1($={}){let J=$.filePath??K0();return uO(J)}function A1($={}){let J=f2($);return Object.entries(J.mcpServers).map(([Q,Z])=>({name:Q,transport:Z.transport,disabled:Z.disabled,metadata:Z.metadata,oauth:Z.oauth}))}function Y2($){let J=$.filePath??K0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");let Z=$T(J),W=Z.mcpServers;if(!W||typeof W!=="object"||Array.isArray(W))throw Error(`Invalid MCP settings at "${J}": mcpServers must be an object.`);let j={...W},X=PH(j,Q);if(!X)throw Error(`Unknown MCP server: ${Q}`);let f={...X};if($.disabled)f.disabled=!0;else delete f.disabled;JT(j,Q,f),_H(TH(J),{recursive:!0}),OH(J,`${JSON.stringify({...Z,mcpServers:j},null,2)}
|
|
4
|
+
`)}function V2($,J={}){let Q=f2(J);if(!Object.hasOwn(Q.mcpServers,$))return;return S8(Q.mcpServers[$]?.oauth)}function H2($,J,Q={}){let Z=Q.filePath??K0(),W=QT(Z),j=W.mcpServers,X=PH(j,$);if(!X)throw Error(`Unknown MCP server: ${$}`);let f=ZT(X.oauth)??{},Y=S8(J(f));if(Y)X.oauth=Y;else delete X.oauth;return _H(TH(Z),{recursive:!0}),OH(Z,`${JSON.stringify(W,null,2)}
|
|
5
|
+
`,"utf8"),Y??{}}function u6($={}){return A1($).map((Q)=>{let Z=Q.transport.type!=="stdio",W=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:Z,oauthConfigured:Z&&typeof W==="string"&&W.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,Z)=>Q.serverName.localeCompare(Z.serverName))}async function B2($,J={}){let Q=A1(J);for(let Z of Q)await $.registerServer(Z);return Q}var c6,MH,eW,lO,pO,rO,iO,nO,aO,qH,sO,oO,tO,eO;var yQ=h$(()=>{c6=y.record(y.string(),y.string()),MH=y.record(y.string(),y.unknown()),eW=y.object({clientInformation:y.record(y.string(),y.unknown()).optional(),tokens:y.record(y.string(),y.unknown()).optional(),codeVerifier:y.string().optional(),discoveryState:y.record(y.string(),y.unknown()).optional(),redirectUrl:y.string().url().optional(),lastError:y.string().optional(),lastAuthenticatedAt:y.number().int().positive().optional()}).strip(),lO=y.object({type:y.literal("stdio"),command:y.string().min(1),args:y.array(y.string()).optional(),cwd:y.string().min(1).optional(),env:c6.optional()}),pO=y.object({type:y.literal("sse"),url:y.string().url(),headers:c6.optional()}),rO=y.object({type:y.literal("streamableHttp"),url:y.string().url(),headers:c6.optional()}),iO=y.discriminatedUnion("type",[lO,pO,rO]),nO=y.object({transport:iO,disabled:y.boolean().optional(),metadata:MH.optional(),oauth:eW.optional()}),aO=y.enum(["stdio","sse","http","streamableHttp"]).optional(),qH=y.object({type:y.enum(["stdio","sse","streamableHttp"]).optional(),transportType:aO,disabled:y.boolean().optional(),metadata:MH.optional(),oauth:eW.optional()});sO=qH.extend({command:y.string().min(1),args:y.array(y.string()).optional(),cwd:y.string().min(1).optional(),env:c6.optional()}).superRefine(($,J)=>{let Q=$.type??oW($.transportType);if(Q&&Q!=="stdio")J.addIssue({code:y.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth})),oO=qH.extend({url:y.string().url(),headers:c6.optional()}).superRefine(($,J)=>{let Q=$.type??oW($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")J.addIssue({code:y.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??oW($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth}}),tO=y.union([nO,sO,oO]),eO=y.object({mcpServers:y.record(y.string(),tO)}).passthrough()});import{existsSync as VN,mkdirSync as HN,readFileSync as BN,writeFileSync as AN}from"node:fs";import{resolve as KN}from"node:path";import{resolveSessionDataDir as GN}from"@cline/shared/storage";import{nanoid as FN}from"nanoid";import*as DN from"node-machine-id";function b0($){let J=$?.trim();if(J)return J;let Q=LN();if(Q)return Q;return zN()}function RN(){let $=DN;return $.machineIdSync??$.default?.machineIdSync}function LN(){try{let $=RN();if(!$)return;return $().trim()||void 0}catch{return}}function zN(){let $=GN(),J=KN($,UN);try{if(VN(J)){let Z=BN(J,"utf8").trim();if(Z.length>0)return Z}}catch{}let Q=`cl-${FN()}`;try{HN($,{recursive:!0}),AN(J,Q,"utf8")}catch{}return Q}var UN="machine-id";var m8=()=>{};class RJ{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,J){if(!this.isEnabled())return;this.emitLog($,J,!1)}emitRequired($,J){this.emitLog($,J,!0)}recordCounter($,J,Q,Z,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let j=this.counters.get($);if(!j)j=this.meter.createCounter($,Z?{description:Z}:void 0),this.counters.set($,j);j.add(J,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,J,Q,Z,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let j=this.histograms.get($);if(!j)j=this.meter.createHistogram($,Z?{description:Z}:void 0),this.histograms.set($,j);j.record(J,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,J,Q,Z,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let j=this.buildAttributes(Q),X=JSON.stringify(j),f=this.gaugeValues.get($);if(J===null){if(f){if(f.delete(X),f.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let Y=f;if(!Y)Y=new Map,this.gaugeValues.set($,Y);if(!this.gauges.has($)){let V=this.meter.createObservableGauge($,Z?{description:Z}:void 0);V.addCallback((H)=>{for(let B of this.snapshotGaugeSeries($))H.observe(B.value,this.flattenProperties(B.attributes))}),this.gauges.set($,V)}Y.set(X,{value:J,attributes:j})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,J,Q){if(!this.logger)return;let Z=this.flattenProperties(this.buildAttributes(J,Q));this.logger.emit({severityText:"INFO",body:$,attributes:Z})}buildAttributes($,J=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...J?{_required:!0}:{}}}snapshotGaugeSeries($){let J=this.gaugeValues.get($);if(!J)return[];return Array.from(J.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,J="",Q=new WeakSet,Z=0){if(!$)return{};let W={},j=100,X=10;for(let[f,Y]of Object.entries($)){if(f==="__proto__"||f==="constructor"||f==="prototype")continue;let V=J?`${J}.${f}`:f;if(Y===null||Y===void 0){W[V]=String(Y);continue}if(Array.isArray(Y)){let H=Y.length>j?Y.slice(0,j):Y;try{W[V]=JSON.stringify(H)}catch{W[V]="[UnserializableArray]"}if(Y.length>j)W[`${V}_truncated`]=!0,W[`${V}_original_length`]=Y.length;continue}if(typeof Y==="object"){if(Y instanceof Date){W[V]=Y.toISOString();continue}if(Y instanceof Error){W[V]=Y.message;continue}if(Q.has(Y)){W[V]="[Circular]";continue}if(Z>=X){W[V]="[MaxDepthExceeded]";continue}Q.add(Y),Object.assign(W,this.flattenProperties(Y,V,Q,Z+1));continue}if(Iw(Y)){W[V]=Y;continue}try{W[V]=JSON.stringify(Y)}catch{W[V]=String(Y)}}return W}}function Iw($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class LJ{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,J){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:J})}emitRequired($,J){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:J})}recordCounter($,J,Q,Z,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:J,attributes:Q,description:Z,required:W===!0})}recordHistogram($,J,Q,Z,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:J,attributes:Q,description:Z,required:W===!0})}recordGauge($,J,Q,Z,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:J,attributes:Q,description:Z,required:W===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class t8{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new LJ({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let J=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,J)}captureRequired($,J){let Q=this.buildAttributes(J);for(let Z of this.adapters)Z.emitRequired($,Q)}recordCounter($,J,Q,Z,W=!1){let j=this.buildAttributes(Q);for(let X of this.adapters)X.recordCounter($,J,j,Z,W)}recordHistogram($,J,Q,Z,W=!1){let j=this.buildAttributes(Q);for(let X of this.adapters)X.recordHistogram($,J,j,Z,W)}recordGauge($,J,Q,Z,W=!1){let j=this.buildAttributes(Q);for(let X of this.adapters)X.recordGauge($,J,j,Z,W)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var H3=()=>{};import{metrics as xw,trace as gw}from"@opentelemetry/api";import{logs as mw}from"@opentelemetry/api-logs";import{OTLPLogExporter as vw}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as cw}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as uw}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as dw}from"@opentelemetry/resources";import{BatchLogRecordProcessor as lw,ConsoleLogRecordExporter as pw,LoggerProvider as rw}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as iw,MeterProvider as nw,PeriodicExportingMetricReader as iA}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as aw,ConsoleSpanExporter as sw,SimpleSpanProcessor as ow}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as tw}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as ew,ATTR_SERVICE_VERSION as $S}from"@opentelemetry/semantic-conventions";class nA{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,J){this.resolveProperties(J)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class e8{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let J=dw({[ew]:$.serviceName??"cline",...$.serviceVersion?{[$S]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(J),this.loggerProvider=this.createLoggerProvider(J),this.tracerProvider=this.createTracerProvider(J),this.meterProvider)xw.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)mw.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",J){return gw.getTracer($,J??this.options.serviceVersion)}createAdapter($){return new RJ({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let J=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new t8({...$,adapters:[J],distinctId:b0($.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider($){let J=B3(this.options.metricsExporter);if(J.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),Z=Math.min(30000,Math.floor(Q*0.8)),W=J.map((j)=>ZS(j,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:Z})).filter((j)=>j!==null);if(W.length===0)return null;return new nw({resource:$,readers:W})}createTracerProvider($){let J=B3(this.options.tracesExporter);if(J.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,Z=this.options.otlpTracesHeaders??this.options.otlpHeaders,W=[];for(let j of J){let X=QS(j,{endpoint:Q,headers:Z,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(X)W.push(X)}if(W.length===0)return null;return new tw({resource:$,spanProcessors:W})}createLoggerProvider($){let J=B3(this.options.logsExporter);if(J.length===0)return null;let Q=J.map((Z)=>{let W=JS(Z,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!W)return null;return new lw(W,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((Z)=>Z!==null);if(Q.length===0)return null;return new rw({resource:$,processors:Q})}}function zJ($){let J=new e8($),Q=J.createTelemetryService($);return Q.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion}),{provider:J,telemetry:Q}}function s1($){if(O5())return{telemetry:new nA($)};if($.enabled!==!0)return{telemetry:new t8({...$,distinctId:b0($.distinctId)})};return zJ($)}function $4($){let{telemetry:J,provider:Q}=s1($);return{telemetry:J,provider:Q,flush:async()=>{let j=Q;if(j&&typeof j.forceFlush==="function")try{await j.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([J.dispose(),Q?.dispose()])}}}function B3($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function JS($,J){if($==="console")return new pw;if(!J.endpoint)return null;let Q=A3(J.endpoint,"/v1/logs");return new vw({url:Q,headers:J.headers})}function QS($,J){if($==="console")return new ow(new sw);if(!J.endpoint)return null;let Q=A3(J.endpoint,"/v1/traces");return new aw(new uw({url:Q,headers:J.headers}))}function ZS($,J){if($==="console")return new iA({exporter:new iw,exportIntervalMillis:J.interval,exportTimeoutMillis:J.timeout});if(!J.endpoint)return null;let Q=A3(J.endpoint,"/v1/metrics");return new iA({exporter:new cw({url:Q,headers:J.headers}),exportIntervalMillis:J.interval,exportTimeoutMillis:J.timeout})}function A3($,J){let Q=new URL($),Z=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=Z.endsWith(J)?Z:`${Z}${J}`,Q.toString()}var G9=h$(()=>{W1();m8();H3()});var JG={};w(JG,{resolveCoreDistinctId:()=>b0,createOpenTelemetryTelemetryService:()=>zJ,createConfiguredTelemetryService:()=>s1,createConfiguredTelemetryHandle:()=>$4,OpenTelemetryProvider:()=>e8,OpenTelemetryAdapter:()=>RJ});var M9=h$(()=>{m8();G9()});import{AgentRuntimeAbortError as eb}from"@cline/agents";import{initVcr as $h,resolveClineBuildEnv as Jh}from"@cline/shared";import{normalizeProviderId as sb}from"@cline/llms";var WF={};w(WF,{LocalRuntimeHost:()=>z1});import{readdirSync as cb}from"node:fs";import{homedir as ub}from"node:os";import{isAbsolute as db,join as mj,resolve as vj}from"node:path";import{captureSdkError as h2,createSessionId as lb,isLikelyAuthError as pb,normalizeUserInput as rb}from"@cline/shared";import{setHomeDirIfUnset as ib}from"@cline/shared/storage";var PX={};w(PX,{saveProviderOAuthCredentials:()=>x$,resolveProviderApiKeyFromSettings:()=>DZ,loginAndSaveProviderOAuthCredentials:()=>z4,isOAuthProvider:()=>I$,getProviderOAuthCredentialsFromSettings:()=>_4,getProviderAuthStorageId:()=>FZ,getProviderAuthHandler:()=>Z0,getPersistedProviderApiKey:()=>l2,formatProviderOAuthApiKey:()=>UZ});import{getClineEnvironmentConfig as MX}from"@cline/shared";O0();var fX={};w(fX,{startClineDeviceAuth:()=>HZ,refreshClineToken:()=>Q5,loginClineOAuth:()=>K4,getValidClineCredentials:()=>G4,completeClineDeviceAuth:()=>BZ});import{getClineEnvironmentConfig as jZ}from"@cline/shared";var tj={};w(tj,{startLocalOAuthServer:()=>J1});function MF(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function J1($){let J=await import("node:http"),Q=$.host??"127.0.0.1",Z=$.timeoutMs??300000,W=$.successHtml??qF,j=MF(),X=!1,f=null,Y=null,V=null,H=(K)=>{if(X)return;X=!0,j.resolve(K)},B=()=>{if(f)clearTimeout(f),f=null;let K=V;if(V=null,Y)Y.close(),Y=null;if(K!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:K})).catch(()=>{})},A=async()=>{return f=setTimeout(()=>{B(),H(null)},Z),j.promise};for(let K of $.ports){let G=J.createServer((D,U)=>{try{let F=new URL(D.url||"",`http://${Q}:${K}`);if(F.pathname!==$.callbackPath){U.statusCode=404,U.end("Not found");return}let O={url:F,code:F.searchParams.get("code")??void 0,state:F.searchParams.get("state")??void 0,provider:F.searchParams.get("provider")??void 0,error:F.searchParams.get("error")??void 0};if(O.error){U.statusCode=400,U.end(`Authentication failed: ${O.error}`),B(),H(O);return}if(!O.code){U.statusCode=400,U.end("Missing authorization code");return}if($.expectedState&&O.state!==$.expectedState){U.statusCode=400,U.end("State mismatch");return}U.statusCode=200,U.setHeader("Content-Type","text/html; charset=utf-8"),U.end(W),B(),H(O)}catch{U.statusCode=500,U.end("Internal error")}}),R=await new Promise((D)=>{let U=(F)=>{G.off("error",U),D({bound:!1,error:F})};G.once("error",U),G.listen(K,Q,()=>{G.off("error",U),Y=G,D({bound:!0})})});if(R.error){if(R.error.code==="EADDRINUSE")continue;throw B(),R.error}if(R.bound){V=K;let D=`http://${Q}:${K}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:K,callbackUrl:D})).catch(()=>{});return{callbackUrl:D,waitForCallback:A,cancelWait:()=>{B(),H(null)},close:()=>{B(),H(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var qF=`<!DOCTYPE html>
|
|
6
6
|
<html lang="en">
|
|
7
7
|
<head>
|
|
8
8
|
<meta charset="utf-8">
|
|
@@ -43,22 +43,22 @@ import{createRequire as YF}from"node:module";var{defineProperty:tQ,getOwnPropert
|
|
|
43
43
|
</div>
|
|
44
44
|
<script>setTimeout(() => window.close(), 3000);</script>
|
|
45
45
|
</body>
|
|
46
|
-
</html>`;function sj($){let J="";for(let Q=0;Q<$.length;Q+=1)J+=String.fromCharCode($[Q]??0);return btoa(J).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function DF($){let Q=new TextEncoder().encode($),Z=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(Z)}function UF($=32){let J=new Uint8Array($);return crypto.getRandomValues(J),sj(J)}async function aJ(){let $=UF(),J=sj(await DF($));return{verifier:$,challenge:J}}function sJ($){return $.endsWith("/")?$.slice(0,-1):$}function k$($,J){return new URL(J,`${sJ($)}/`).toString()}function m2($,J={}){let Q=$.trim();if(!Q)return{};try{let Z=new URL(Q);return{code:Z.searchParams.get("code")??void 0,state:Z.searchParams.get("state")??void 0,provider:J.includeProvider?Z.searchParams.get("provider")??void 0:void 0}}catch{}if(J.allowHashCodeState&&Q.includes("#")){let[Z,W]=Q.split("#",2);return{code:Z||void 0,state:W||void 0}}if(Q.includes("code=")){let Z=new URLSearchParams(Q);return{code:Z.get("code")??void 0,state:Z.get("state")??void 0,provider:J.includeProvider?Z.get("provider")??void 0:void 0}}return{code:Q}}function RF($){if(typeof atob==="function")try{return atob($)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from($,"base64").toString("utf8")}catch{return null}return null}function T0($){if(!$)return null;try{let J=$.split(".");if(J.length!==3)return null;let Q=J[1];if(!Q)return null;let Z=Q.replace(/-/g,"+").replace(/_/g,"/"),W=Z.padEnd(Z.length+(4-Z.length%4)%4,"="),j=RF(W);if(!j)return null;return JSON.parse(j)}catch{return null}}function v2($){try{let J=JSON.parse($),Q=J.error,Z=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,W=typeof J.error_description==="string"?J.error_description:typeof J.message==="string"?J.message:Q&&typeof Q==="object"&&typeof Q.message==="string"?Q.message:void 0;return{code:Z,message:W}}catch{return{}}}function c2($,J){return Date.now()>=$.expires-J}async function u2($){if(!$.onManualCodeInput){let j=await $.waitForCallback();return{code:j?.code,state:j?.state,provider:j?.provider,error:j?.error}}let J,Q,Z=$.onManualCodeInput().then((j)=>{J=j,$.cancelWait()}).catch((j)=>{Q=j instanceof Error?j:Error(String(j)),$.cancelWait()}),W=await $.waitForCallback();if(Q)throw Q;if(W?.code||W?.error)return{code:W.code,state:W.state,provider:W.provider,error:W.error};if(J)return m2(J,$.parseOptions);if(await Z,Q)throw Q;if(J)return m2(J,$.parseOptions);return{}}var oJ={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},$f={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},$Z="https://api.workos.com",zF="/auth",oj=Array.from({length:11},($,J)=>48801+J),LF=300000,_F=30000,d2=30000,OF=300,TF=5;class J$ extends Error{status;errorCode;constructor($,J){super($);this.name="ClineOAuthTokenError",this.status=J?.status,this.errorCode=J?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function MF($){let J=Date.parse($);if(Number.isNaN(J))throw Error(`Invalid expiresAt value: ${$}`);return J}function JZ($,J,Q={}){let Z=$.userInfo.clineUserId??Q.accountId,W=$.refreshToken??Q.refresh;if(!W)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:W,expires:MF($.expiresAt),accountId:Z??void 0,email:$.userInfo.email||Q.email,metadata:{provider:J,tokenType:$.tokenType,userInfo:$.userInfo}}}async function QZ($){if(!$)return{};return typeof $==="function"?await $():$}function tj($,J){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return J;return Math.floor($)}async function ej($){await new Promise((J)=>setTimeout(J,$))}function ZZ($,J){if(!$.success||!$.data?.accessToken)throw Error(J);return $.data}async function Jf($,J){let Q=await fetch(k$($Z,$f.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(J?.requestTimeoutMs??d2)}),Z=await Q.json().catch(()=>({}));if(!Q.ok)throw new J$(`Device authorization failed: ${Q.status}${Z.error_description?` - ${Z.error_description}`:""}`,{status:Q.status,errorCode:Z.error});if(!Z.device_code||!Z.user_code||!Z.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:Z.device_code,userCode:Z.user_code,verificationUri:Z.verification_uri,verificationUriComplete:Z.verification_uri_complete,expiresInSeconds:tj(Z.expires_in,OF),pollIntervalSeconds:tj(Z.interval,TF)}}async function Qf($){let J=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=J){let Z=await fetch(k$($.workosApiBaseUrl,$f.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),W=await Z.json().catch(()=>({}));if(Z.ok){if(!W.access_token||!W.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:W.access_token,refreshToken:W.refresh_token,tokenType:W.token_type??"Bearer"}}switch(W.error){case"authorization_pending":{await ej(Q*1000);break}case"slow_down":{Q+=1,await ej(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new J$(W.error_description||"WorkOS authorization failed",{status:Z.status,errorCode:W.error});default:throw new J$(`WorkOS token polling failed: ${Z.status}${W.error_description?` - ${W.error_description}`:""}`,{status:Z.status,errorCode:W.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function Zf($,J,Q){let Z={accessToken:$.accessToken,refreshToken:$.refreshToken},W=await fetch(k$(J.apiBaseUrl,oJ.register),{method:"POST",headers:{"Content-Type":"application/json",...await QZ(J.headers)},body:JSON.stringify(Z),signal:AbortSignal.timeout(J.requestTimeoutMs??d2)});if(!W.ok){let f=await W.text().catch(()=>""),X=v2(f);throw new J$(`Token registration failed: ${W.status}${X.message?` - ${X.message}`:""}`,{status:W.status,errorCode:X.code})}let j=await W.json();return JZ(ZZ(j,"Invalid token exchange response"),Q??J.provider)}async function qF($,J,Q,Z){let W={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:J,provider:Z??Q.provider},j=await fetch(k$(Q.apiBaseUrl,oJ.token),{method:"POST",headers:{"Content-Type":"application/json",...await QZ(Q.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Q.requestTimeoutMs??d2)});if(!j.ok){let X=await j.text().catch(()=>""),Y=v2(X);throw new J$(`Token exchange failed: ${j.status}${Y.message?` - ${Y.message}`:""}`,{status:j.status,errorCode:Y.code})}let f=await j.json();return JZ(ZZ(f,"Invalid token exchange response"),Z??Q.provider)}async function A4($){P1($.telemetry,$.provider??"cline");let J=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:oj,Z=$.callbackPath??zF,W=J?null:await J1({ports:Q,callbackPath:Z,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=W?.callbackUrl||`http://127.0.0.1:${Q[0]??oj[0]}${Z}`;try{let f;if(J){let X=eQ().workOsClientId,Y=await Jf(X,$);$.callbacks.onAuth({url:Y.verificationUriComplete??Y.verificationUri,instructions:`Enter this code in your browser: ${Y.userCode}`});let V=await Qf({clientId:X,deviceCode:Y.deviceCode,expiresInSeconds:Y.expiresInSeconds,initialPollIntervalSeconds:Y.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??d2,workosApiBaseUrl:$Z,onProgress:$.callbacks.onProgress});f=await Zf(V,$,$.provider)}else{let X=new URL(k$($.apiBaseUrl,oJ.authorize));X.searchParams.set("client_type","extension"),X.searchParams.set("callback_url",j),X.searchParams.set("redirect_uri",j),$.callbacks.onAuth({url:X.toString(),instructions:"Continue the authentication process in your browser."});let Y,V=$.provider,H=await u2({waitForCallback:W?.waitForCallback??(async()=>null),cancelWait:W?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(H.error)throw Error(`OAuth error: ${H.error}`);if(Y=H.code,V=H.provider??V,!Y){let B=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),A=m2(B,{includeProvider:!0});Y=A.code,V=A.provider??V}if(!Y)throw Error("Missing authorization code");f=await qF(Y,j,$,V)}return N1($.telemetry,$.provider??"cline"),S1($.telemetry,{id:f.accountId,email:f.email,provider:$.provider??"cline"}),f}catch(f){throw w1($.telemetry,$.provider??"cline",f instanceof Error?f.message:String(f)),f}finally{W?.close()}}async function WZ($){return await Jf(eQ().workOsClientId,$)}async function jZ($){let J=$.provider??"cline";P1($.telemetry,J);try{let Q=await Qf({clientId:eQ().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??d2,workosApiBaseUrl:$Z}),Z=await Zf(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return N1($.telemetry,J),S1($.telemetry,{id:Z.accountId,email:Z.email,provider:J}),Z}catch(Q){throw w1($.telemetry,J,Q instanceof Error?Q.message:String(Q)),Q}}async function tJ($,J){let Q=await fetch(k$(J.apiBaseUrl,oJ.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await QZ(J.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(J.requestTimeoutMs??d2)});if(!Q.ok){let j=await Q.text().catch(()=>""),f=v2(j);throw new J$(`Token refresh failed: ${Q.status}${f.message?` - ${f.message}`:""}`,{status:Q.status,errorCode:f.code})}let Z=await Q.json(),W=$.metadata?.provider??J.provider;return JZ(ZZ(Z,"Invalid token refresh response"),W,$)}async function K4($,J,Q){if(!$)return null;let Z=Q?.refreshBufferMs??LF,W=Q?.retryableTokenGraceMs??_F;if(Q?.forceRefresh!==!0&&!c2($,Z))return $;try{return await tJ($,J)}catch(f){if(f instanceof J$&&f.isLikelyInvalidGrant())return e1(J.telemetry,J.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}O0();var ff={};w(ff,{refreshOpenAICodexToken:()=>$5,loginOpenAICodex:()=>G4,getValidOpenAICodexCredentials:()=>F4,OPENAI_CODEX_OAUTH_CONFIG:()=>$0});import{nanoid as PF}from"nanoid";var $0={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class eJ extends Error{status;errorCode;constructor($,J){super($);this.name="OpenAICodexOAuthTokenError",this.status=J?.status,this.errorCode=J?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function NF($,J,Q=$0.redirectUri){let Z=await fetch($0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:$0.clientId,code:$,code_verifier:J,redirect_uri:Q}),signal:AbortSignal.timeout($0.httpTimeoutMs)});if(!Z.ok)return{type:"failed"};let W=await Z.json();if(!W.access_token||!W.refresh_token||typeof W.expires_in!=="number")return{type:"failed"};return{type:"success",access:W.access_token,refresh:W.refresh_token,expires:Date.now()+W.expires_in*1000,email:W.email,idToken:W.id_token}}async function wF($){try{let J=await fetch($0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:$0.clientId}),signal:AbortSignal.timeout($0.httpTimeoutMs)});if(!J.ok){let Z=await J.text().catch(()=>""),W=v2(Z);throw new eJ(`Token refresh failed: ${J.status}${W.message?` - ${W.message}`:""}`,{status:J.status,errorCode:W.code})}let Q=await J.json();if(!Q.access_token||!Q.refresh_token||typeof Q.expires_in!=="number")return{type:"failed"};return{type:"success",access:Q.access_token,refresh:Q.refresh_token,expires:Date.now()+Q.expires_in*1000,email:Q.email,idToken:Q.id_token}}catch(J){if(J instanceof eJ)throw J;return{type:"failed"}}}async function SF($="pi"){let{verifier:J,challenge:Q}=await aJ(),Z=PF(32),W=new URL($0.authorizationEndpoint);return W.searchParams.set("response_type","code"),W.searchParams.set("client_id",$0.clientId),W.searchParams.set("redirect_uri",$0.redirectUri),W.searchParams.set("scope",$0.scopes),W.searchParams.set("code_challenge",Q),W.searchParams.set("code_challenge_method","S256"),W.searchParams.set("state",Z),W.searchParams.set("id_token_add_organizations","true"),W.searchParams.set("codex_cli_simplified_flow","true"),W.searchParams.set("originator",$),{verifier:J,state:Z,url:W.toString()}}function CF(){try{let $=new URL($0.redirectUri),J=$.port.length>0?Number.parseInt($.port,10):$0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(J)?J:$0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:$0.callbackPort,callbackPath:"/auth/callback",redirectUri:$0.redirectUri}}}function yF($,J){let Q=J?T0(J):T0($),Z=Q?Q:T0($),j=Z?.[$0.jwtClaimPath]?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;let f=Z?.organizations;if(Array.isArray(f)&&f.length>0){let Y=f[0];if(typeof Y?.id==="string"&&Y.id.length>0)return Y.id}let X=Z?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;return null}function jf($,J){let Q=yF($.access,$.idToken)??J?.accountId;if(!Q)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||J?.refresh||"",expires:$.expires,accountId:Q,email:$.email??J?.email,metadata:{...J?.metadata??{},provider:"openai-codex"}}}async function G4($){P1($.telemetry,"openai-codex");let J=CF(),{verifier:Q,state:Z,url:W}=await SF($.originator),j=await J1({host:J.host,ports:[J.port],callbackPath:J.callbackPath,expectedState:Z});$.onAuth({url:W,instructions:"Continue the authentication process in your browser."});let f;try{let X=await u2({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(X.state&&X.state!==Z)throw Error("State mismatch");if(f=X.code,!f){let H=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),B=m2(H,{allowHashCodeState:!0});if(B.state&&B.state!==Z)throw Error("State mismatch");f=B.code}if(!f)throw Error("Missing authorization code");let Y=await NF(f,Q,J.redirectUri);if(Y.type!=="success")throw Error("Token exchange failed");let V=jf(Y);return N1($.telemetry,"openai-codex"),S1($.telemetry,{id:V.accountId,email:V.email,provider:"openai-codex"}),V}catch(X){throw w1($.telemetry,"openai-codex",X instanceof Error?X.message:String(X)),X}finally{j.close()}}async function $5($,J){let Q=await wF($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let Z=jf(Q,J);if(!Z.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return Z}async function F4($,J){if(!$)return null;let Q=J?.refreshBufferMs??$0.refreshBufferMs,Z=J?.retryableTokenGraceMs??$0.retryableTokenGraceMs;if(J?.forceRefresh!==!0&&!c2($,Q))return $;try{return await $5($.refresh,$)}catch(j){if(j instanceof eJ&&j.isLikelyInvalidGrant())return e1(J?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>Z)return $;return null}}O0();var Lf={};w(Lf,{refreshOcaToken:()=>W5,loginOcaOAuth:()=>U4,getValidOcaCredentials:()=>R4,OCI_HEADER_OPC_REQUEST_ID:()=>EF,DEFAULT_INTERNAL_OCA_BASE_URL:()=>J5,DEFAULT_INTERNAL_IDCS_URL:()=>Vf,DEFAULT_INTERNAL_IDCS_SCOPES:()=>Hf,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>Yf,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>Q5,DEFAULT_EXTERNAL_IDCS_URL:()=>Af,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>Kf,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>Bf});import{nanoid as Xf}from"nanoid";class fZ{ttlMs;maxEntries;entries=new Map;constructor($,J){this.ttlMs=$;this.maxEntries=J}get($,J=Date.now()){this.pruneExpired(J);let Q=this.entries.get($);if(!Q)return;return this.entries.delete($),this.entries.set($,Q),Q.value}set($,J,Q=Date.now(),Z=this.ttlMs){this.pruneExpired(Q),this.entries.delete($);while(this.entries.size>=this.maxEntries){let W=this.entries.keys().next().value;if(W===void 0)break;this.entries.delete(W)}this.entries.set($,{value:J,expiresAt:Q+Z})}pruneExpired($){for(let[J,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(J)}}var Yf="a8331954c0cf48ba99b5dd223a14c6ea",Vf="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",Hf="openid offline_access",J5="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",Bf="c1aba3deed5740659981a752714eba33",Af="https://login-ext.identity.oraclecloud.com",Kf="openid offline_access",Q5="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",EF="opc-request-id",bF="/auth/oca",hF=Array.from({length:11},($,J)=>48801+J),kF=300000,IF=30000,Gf=30000,xF=600000;class Z5 extends Error{status;errorCode;constructor($,J){super($);this.name="OcaOAuthTokenError",this.status=J?.status,this.errorCode=J?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var Q$={internal:{clientId:Yf,idcsUrl:Vf,scopes:Hf,baseUrl:J5},external:{clientId:Bf,idcsUrl:Af,scopes:Kf,baseUrl:Q5}},D4=new Map,gF=86400000,mF=300000,vF=32,XZ=new fZ(gF,vF);function Ff($){if(typeof $==="function")return $();return $??"internal"}function Df($){return{internal:{clientId:$?.internal?.clientId??Q$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??Q$.internal.idcsUrl,scopes:$?.internal?.scopes??Q$.internal.scopes,baseUrl:$?.internal?.baseUrl??Q$.internal.baseUrl},external:{clientId:$?.external?.clientId??Q$.external.clientId,idcsUrl:$?.external?.idcsUrl??Q$.external.idcsUrl,scopes:$?.external?.scopes??Q$.external.scopes,baseUrl:$?.external?.baseUrl??Q$.external.baseUrl}}}function cF($=Date.now()){let J=$-xF;for(let[Q,Z]of D4.entries())if(Z.createdAt<J)D4.delete(Q)}function uF($,J,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let W=T0(J)?.exp;if(typeof W==="number"&&W>0)return W*1000;let f=T0(Q)?.exp;if(typeof f==="number"&&f>0)return f*1000;return Date.now()+3600000}function Uf($,J,Q){let Z=$.access_token;if(!Z)throw Error("Token response did not include an access token");let W=$.refresh_token??Q?.refresh;if(!W)throw Error("Token response did not include a refresh token");let j=T0($.id_token),f=T0(Z),X=j?.sub??f?.sub,Y=j?.email??f?.email;return{access:Z,refresh:W,expires:uF($,Z,$.id_token),accountId:X??Q?.accountId,email:Y??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:J,subject:X,idToken:$.id_token}}}async function Rf($,J){let Q=sJ($),Z=XZ.get(Q);if(Z)return Z;let W=`${Q}/.well-known/openid-configuration`,j=await fetch(W,{method:"GET",signal:AbortSignal.timeout(J)});if(!j.ok){let Y=`${Q}/oauth2/v1/token`;return XZ.set(Q,Y,Date.now(),mF),Y}let X=(await j.json()).token_endpoint||`${Q}/oauth2/v1/token`;return XZ.set(Q,X),X}function zf($){return{code:$.error,message:$.error_description}}async function dF($){let J=D4.get($.state);if(!J)throw Error("No PKCE verifier found for this state");D4.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,Z=await Rf(Q.idcsUrl,$.requestTimeoutMs),W=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:J.redirectUri,client_id:Q.clientId,code_verifier:J.verifier}),j=await fetch(Z,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:W,signal:AbortSignal.timeout($.requestTimeoutMs)}),f=await j.json();if(!j.ok){let Y=zf(f);throw new Z5(`Token exchange failed: ${j.status}${Y.message?` - ${Y.message}`:""}`,{status:j.status,errorCode:Y.code})}let X=T0(f.id_token);if(!f.id_token||!X)throw Error("No ID token received from OCA");if(X.nonce!==J.nonce)throw Error("OIDC nonce verification failed");return Uf(f,$.mode)}function lF($){let J=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${sJ(J.idcsUrl)}/oauth2/v1/authorize`);return Q.searchParams.set("client_id",J.clientId),Q.searchParams.set("response_type","code"),Q.searchParams.set("scope",J.scopes),Q.searchParams.set("code_challenge",$.challenge),Q.searchParams.set("code_challenge_method","S256"),Q.searchParams.set("redirect_uri",$.callbackUrl),Q.searchParams.set("state",$.state),Q.searchParams.set("nonce",$.nonce),Q.toString()}async function U4($){P1($.telemetry,"oca");let J=Df($.config),Q=Ff($.mode),Z=$.callbackPorts?.length?$.callbackPorts:hF,W=$.callbackPath??bF,j=$.requestTimeoutMs??Gf,f=await J1({ports:Z,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=f.callbackUrl;if(!X)throw Error("Unable to bind local OAuth callback server");let Y=Xf(16),V=Xf(16),{verifier:H,challenge:B}=await aJ();cF(),D4.set(Y,{verifier:H,nonce:V,mode:Q,redirectUri:X,createdAt:Date.now()});let A=lF({callbackUrl:X,mode:Q,state:Y,nonce:V,challenge:B,config:J});$.callbacks.onAuth({url:A,instructions:"Continue the authentication process in your browser."});try{let K=await u2({waitForCallback:f.waitForCallback,cancelWait:f.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),G=K.code,R=K.state;if(K.error)throw Error(`OAuth error: ${K.error}`);if(!G){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!R||R!==Y)throw Error("State mismatch");let D=await dF({code:G,state:R,mode:Q,config:J,requestTimeoutMs:j});return N1($.telemetry,"oca"),S1($.telemetry,{id:D.accountId,email:D.email,provider:"oca"}),D}catch(K){throw w1($.telemetry,"oca",K instanceof Error?K.message:String(K)),K}finally{f.close()}}async function W5($,J={}){let Q=Df(J.config),Z=J.requestTimeoutMs??Gf,W=$.metadata?.mode,j=W==="internal"||W==="external"?W:Ff(J.mode),f=j==="external"?Q.external:Q.internal,X=await Rf(f.idcsUrl,Z),Y=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:f.clientId}),V=await fetch(X,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:Y,signal:AbortSignal.timeout(Z)}),H=await V.json();if(!V.ok){let B=zf(H);throw new Z5(`Token refresh failed: ${V.status}${B.message?` - ${B.message}`:""}`,{status:V.status,errorCode:B.code})}return Uf(H,j,$)}async function R4($,J,Q){if(!$)return null;let Z=J?.refreshBufferMs??Q?.refreshBufferMs??kF,W=J?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??IF;if(J?.forceRefresh!==!0&&!c2($,Z))return $;try{return await W5($,Q)}catch(f){if(f instanceof Z5&&f.isLikelyInvalidGrant())return e1(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}var j5="workos:";function pF($){let J=$.trim();return J.toLowerCase().startsWith(j5)?J:`${j5}${J}`}function rF($){let J=$.trim();return J.toLowerCase().startsWith(j5)?J.slice(j5.length):J}function iF($){let Q=T0($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function nF($,J){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let Z=iF(J);if(Z)return Z;return Date.now()-1}function aF($,J){let Q=$.auth?.accessToken?.trim(),Z=$.auth?.refreshToken?.trim();if(!Q||!Z)return null;let W=J?.normalizeAccessToken?.(Q)??Q;if(!W)return null;return{access:W,refresh:Z,expires:nF($,W),accountId:$.auth?.accountId}}function sF($){let J=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:J,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},Z={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(Z,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return Z}function YZ($){let J=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:J,getApiKey(Q){let Z=Q?.auth?.accessToken?.trim();if(Z)return $.formatAccessToken?.(Z)??Z;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return sF({...Q,storageProviderId:J,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function Of($){return YZ({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:pF,normalizeStoredAccessToken:rF,login:({settings:J,callbacks:Q,telemetry:Z})=>A4({apiBaseUrl:J?.baseUrl?.trim()||_f().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:Z}),refresh:({settings:J,credentials:Q,forceRefresh:Z,telemetry:W})=>K4(Q,{apiBaseUrl:J.baseUrl?.trim()||_f().apiBaseUrl,telemetry:W},{forceRefresh:Z})})}var oF=[Of({providerId:"cline"}),Of({providerId:"cline-pass",storageProviderId:"cline"}),YZ({providerId:"oca",login:({settings:$,callbacks:J,telemetry:Q})=>U4({mode:$?.oca?.mode,callbacks:J,telemetry:Q}),refresh:({settings:$,credentials:J,forceRefresh:Q,telemetry:Z})=>R4(J,{forceRefresh:Q,telemetry:Z},{mode:$.oca?.mode,telemetry:Z})}),YZ({providerId:"openai-codex",login:({callbacks:$,telemetry:J})=>G4({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:J}),refresh:({credentials:$,forceRefresh:J,telemetry:Q})=>F4($,{forceRefresh:J,telemetry:Q})})],tF=new Map(oF.map(($)=>[$.providerId,$]));function Z0($){return tF.get($.trim().toLowerCase())}function I$($){return Z0($)!==void 0}function VZ($){return Z0($)?.storageProviderId}function HZ($,J){let Q=Z0(J),Z=Q?.storageProviderId??J,W=$.getProviderSettings(Z);return Q?.getApiKey(W)??l2(J,W)}async function z4($,J,Q){let Z=Z0(J);if(!Z)throw Error(`Provider "${J}" does not support OAuth login`);let W=$.getProviderSettings(Z.storageProviderId),j=await Z.login({settings:W,callbacks:Q.callbacks,telemetry:Q.telemetry});return Z.saveCredentials({manager:$,settings:W,credentials:j})}function L4($,J){let Q=Z0($);if(!Q)return null;return aF(J,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function x$($){let J=Z0($.providerId);if(!J)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return J.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function l2($,J){let Q=Z0($);if(Q)return Q.getApiKey(J);return J?.auth?.accessToken?.trim()||J?.apiKey?.trim()||J?.auth?.apiKey?.trim()||void 0}function BZ($,J){let Q=Z0($);if(!Q)return J.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:J.access}})??J.access}O0();var sf={};w(sf,{createContextCompactionPrepareTurn:()=>P4});import{createHandlerAsync as ZD}from"@cline/llms";import{estimateTokens as AZ}from"@cline/shared";var Pf=200000,KZ=0.9,Nf=16384,GZ=20000,Mf=1024,qf=2000,wf=2000,Sf=8;function Z$($,J){if($.length<=J)return $;return`${$.slice(0,J)}
|
|
47
|
-
...[truncated ${$.length-J} chars]`}function
|
|
46
|
+
</html>`;function ej($){let J="";for(let Q=0;Q<$.length;Q+=1)J+=String.fromCharCode($[Q]??0);return btoa(J).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function PF($){let Q=new TextEncoder().encode($),Z=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(Z)}function NF($=32){let J=new Uint8Array($);return crypto.getRandomValues(J),ej(J)}async function eJ(){let $=NF(),J=ej(await PF($));return{verifier:$,challenge:J}}function $5($){return $.endsWith("/")?$.slice(0,-1):$}function k$($,J){return new URL(J,`${$5($)}/`).toString()}function m2($,J={}){let Q=$.trim();if(!Q)return{};try{let Z=new URL(Q);return{code:Z.searchParams.get("code")??void 0,state:Z.searchParams.get("state")??void 0,provider:J.includeProvider?Z.searchParams.get("provider")??void 0:void 0}}catch{}if(J.allowHashCodeState&&Q.includes("#")){let[Z,W]=Q.split("#",2);return{code:Z||void 0,state:W||void 0}}if(Q.includes("code=")){let Z=new URLSearchParams(Q);return{code:Z.get("code")??void 0,state:Z.get("state")??void 0,provider:J.includeProvider?Z.get("provider")??void 0:void 0}}return{code:Q}}function wF($){if(typeof atob==="function")try{return atob($)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from($,"base64").toString("utf8")}catch{return null}return null}function T0($){if(!$)return null;try{let J=$.split(".");if(J.length!==3)return null;let Q=J[1];if(!Q)return null;let Z=Q.replace(/-/g,"+").replace(/_/g,"/"),W=Z.padEnd(Z.length+(4-Z.length%4)%4,"="),j=wF(W);if(!j)return null;return JSON.parse(j)}catch{return null}}function v2($){try{let J=JSON.parse($),Q=J.error,Z=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,W=typeof J.error_description==="string"?J.error_description:typeof J.message==="string"?J.message:Q&&typeof Q==="object"&&typeof Q.message==="string"?Q.message:void 0;return{code:Z,message:W}}catch{return{}}}function c2($,J){return Date.now()>=$.expires-J}async function u2($){if(!$.onManualCodeInput){let j=await $.waitForCallback();return{code:j?.code,state:j?.state,provider:j?.provider,error:j?.error}}let J,Q,Z=$.onManualCodeInput().then((j)=>{J=j,$.cancelWait()}).catch((j)=>{Q=j instanceof Error?j:Error(String(j)),$.cancelWait()}),W=await $.waitForCallback();if(Q)throw Q;if(W?.code||W?.error)return{code:W.code,state:W.state,provider:W.provider,error:W.error};if(J)return m2(J,$.parseOptions);if(await Z,Q)throw Q;if(J)return m2(J,$.parseOptions);return{}}var J5={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},ZX={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},XZ="https://api.workos.com",SF="/auth",$X=Array.from({length:11},($,J)=>48801+J),CF=300000,yF=30000,d2=30000,EF=300,bF=5;class J$ extends Error{status;errorCode;constructor($,J){super($);this.name="ClineOAuthTokenError",this.status=J?.status,this.errorCode=J?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function hF($){let J=Date.parse($);if(Number.isNaN(J))throw Error(`Invalid expiresAt value: ${$}`);return J}function fZ($,J,Q={}){let Z=$.userInfo.clineUserId??Q.accountId,W=$.refreshToken??Q.refresh;if(!W)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:W,expires:hF($.expiresAt),accountId:Z??void 0,email:$.userInfo.email||Q.email,metadata:{provider:J,tokenType:$.tokenType,userInfo:$.userInfo}}}async function YZ($){if(!$)return{};return typeof $==="function"?await $():$}function JX($,J){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return J;return Math.floor($)}async function QX($){await new Promise((J)=>setTimeout(J,$))}function VZ($,J){if(!$.success||!$.data?.accessToken)throw Error(J);return $.data}async function WX($,J){let Q=await fetch(k$(XZ,ZX.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(J?.requestTimeoutMs??d2)}),Z=await Q.json().catch(()=>({}));if(!Q.ok)throw new J$(`Device authorization failed: ${Q.status}${Z.error_description?` - ${Z.error_description}`:""}`,{status:Q.status,errorCode:Z.error});if(!Z.device_code||!Z.user_code||!Z.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:Z.device_code,userCode:Z.user_code,verificationUri:Z.verification_uri,verificationUriComplete:Z.verification_uri_complete,expiresInSeconds:JX(Z.expires_in,EF),pollIntervalSeconds:JX(Z.interval,bF)}}async function jX($){let J=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=J){let Z=await fetch(k$($.workosApiBaseUrl,ZX.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),W=await Z.json().catch(()=>({}));if(Z.ok){if(!W.access_token||!W.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:W.access_token,refreshToken:W.refresh_token,tokenType:W.token_type??"Bearer"}}switch(W.error){case"authorization_pending":{await QX(Q*1000);break}case"slow_down":{Q+=1,await QX(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new J$(W.error_description||"WorkOS authorization failed",{status:Z.status,errorCode:W.error});default:throw new J$(`WorkOS token polling failed: ${Z.status}${W.error_description?` - ${W.error_description}`:""}`,{status:Z.status,errorCode:W.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function XX($,J,Q){let Z={accessToken:$.accessToken,refreshToken:$.refreshToken},W=await fetch(k$(J.apiBaseUrl,J5.register),{method:"POST",headers:{"Content-Type":"application/json",...await YZ(J.headers)},body:JSON.stringify(Z),signal:AbortSignal.timeout(J.requestTimeoutMs??d2)});if(!W.ok){let X=await W.text().catch(()=>""),f=v2(X);throw new J$(`Token registration failed: ${W.status}${f.message?` - ${f.message}`:""}`,{status:W.status,errorCode:f.code})}let j=await W.json();return fZ(VZ(j,"Invalid token exchange response"),Q??J.provider)}async function kF($,J,Q,Z){let W={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:J,provider:Z??Q.provider},j=await fetch(k$(Q.apiBaseUrl,J5.token),{method:"POST",headers:{"Content-Type":"application/json",...await YZ(Q.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Q.requestTimeoutMs??d2)});if(!j.ok){let f=await j.text().catch(()=>""),Y=v2(f);throw new J$(`Token exchange failed: ${j.status}${Y.message?` - ${Y.message}`:""}`,{status:j.status,errorCode:Y.code})}let X=await j.json();return fZ(VZ(X,"Invalid token exchange response"),Z??Q.provider)}async function K4($){P1($.telemetry,$.provider??"cline");let J=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:$X,Z=$.callbackPath??SF,W=J?null:await J1({ports:Q,callbackPath:Z,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=W?.callbackUrl||`http://127.0.0.1:${Q[0]??$X[0]}${Z}`;try{let X;if(J){let f=jZ().workOsClientId,Y=await WX(f,$);$.callbacks.onAuth({url:Y.verificationUriComplete??Y.verificationUri,instructions:`Enter this code in your browser: ${Y.userCode}`});let V=await jX({clientId:f,deviceCode:Y.deviceCode,expiresInSeconds:Y.expiresInSeconds,initialPollIntervalSeconds:Y.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??d2,workosApiBaseUrl:XZ,onProgress:$.callbacks.onProgress});X=await XX(V,$,$.provider)}else{let f=new URL(k$($.apiBaseUrl,J5.authorize));f.searchParams.set("client_type","extension"),f.searchParams.set("callback_url",j),f.searchParams.set("redirect_uri",j),$.callbacks.onAuth({url:f.toString(),instructions:"Continue the authentication process in your browser."});let Y,V=$.provider,H=await u2({waitForCallback:W?.waitForCallback??(async()=>null),cancelWait:W?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(H.error)throw Error(`OAuth error: ${H.error}`);if(Y=H.code,V=H.provider??V,!Y){let B=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),A=m2(B,{includeProvider:!0});Y=A.code,V=A.provider??V}if(!Y)throw Error("Missing authorization code");X=await kF(Y,j,$,V)}return N1($.telemetry,$.provider??"cline"),S1($.telemetry,{id:X.accountId,email:X.email,provider:$.provider??"cline"}),X}catch(X){throw w1($.telemetry,$.provider??"cline",X instanceof Error?X.message:String(X)),X}finally{W?.close()}}async function HZ($){return await WX(jZ().workOsClientId,$)}async function BZ($){let J=$.provider??"cline";P1($.telemetry,J);try{let Q=await jX({clientId:jZ().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??d2,workosApiBaseUrl:XZ}),Z=await XX(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return N1($.telemetry,J),S1($.telemetry,{id:Z.accountId,email:Z.email,provider:J}),Z}catch(Q){throw w1($.telemetry,J,Q instanceof Error?Q.message:String(Q)),Q}}async function Q5($,J){let Q=await fetch(k$(J.apiBaseUrl,J5.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await YZ(J.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(J.requestTimeoutMs??d2)});if(!Q.ok){let j=await Q.text().catch(()=>""),X=v2(j);throw new J$(`Token refresh failed: ${Q.status}${X.message?` - ${X.message}`:""}`,{status:Q.status,errorCode:X.code})}let Z=await Q.json(),W=$.metadata?.provider??J.provider;return fZ(VZ(Z,"Invalid token refresh response"),W,$)}async function G4($,J,Q){if(!$)return null;let Z=Q?.refreshBufferMs??CF,W=Q?.retryableTokenGraceMs??yF;if(Q?.forceRefresh!==!0&&!c2($,Z))return $;try{return await Q5($,J)}catch(X){if(X instanceof J$&&X.isLikelyInvalidGrant())return e1(J.telemetry,J.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}O0();var VX={};w(VX,{refreshOpenAICodexToken:()=>W5,loginOpenAICodex:()=>F4,getValidOpenAICodexCredentials:()=>D4,OPENAI_CODEX_OAUTH_CONFIG:()=>$0});import{nanoid as IF}from"nanoid";var $0={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class Z5 extends Error{status;errorCode;constructor($,J){super($);this.name="OpenAICodexOAuthTokenError",this.status=J?.status,this.errorCode=J?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function xF($,J,Q=$0.redirectUri){let Z=await fetch($0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:$0.clientId,code:$,code_verifier:J,redirect_uri:Q}),signal:AbortSignal.timeout($0.httpTimeoutMs)});if(!Z.ok)return{type:"failed"};let W=await Z.json();if(!W.access_token||!W.refresh_token||typeof W.expires_in!=="number")return{type:"failed"};return{type:"success",access:W.access_token,refresh:W.refresh_token,expires:Date.now()+W.expires_in*1000,email:W.email,idToken:W.id_token}}async function gF($){try{let J=await fetch($0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:$0.clientId}),signal:AbortSignal.timeout($0.httpTimeoutMs)});if(!J.ok){let Z=await J.text().catch(()=>""),W=v2(Z);throw new Z5(`Token refresh failed: ${J.status}${W.message?` - ${W.message}`:""}`,{status:J.status,errorCode:W.code})}let Q=await J.json();if(!Q.access_token||!Q.refresh_token||typeof Q.expires_in!=="number")return{type:"failed"};return{type:"success",access:Q.access_token,refresh:Q.refresh_token,expires:Date.now()+Q.expires_in*1000,email:Q.email,idToken:Q.id_token}}catch(J){if(J instanceof Z5)throw J;return{type:"failed"}}}async function mF($="pi"){let{verifier:J,challenge:Q}=await eJ(),Z=IF(32),W=new URL($0.authorizationEndpoint);return W.searchParams.set("response_type","code"),W.searchParams.set("client_id",$0.clientId),W.searchParams.set("redirect_uri",$0.redirectUri),W.searchParams.set("scope",$0.scopes),W.searchParams.set("code_challenge",Q),W.searchParams.set("code_challenge_method","S256"),W.searchParams.set("state",Z),W.searchParams.set("id_token_add_organizations","true"),W.searchParams.set("codex_cli_simplified_flow","true"),W.searchParams.set("originator",$),{verifier:J,state:Z,url:W.toString()}}function vF(){try{let $=new URL($0.redirectUri),J=$.port.length>0?Number.parseInt($.port,10):$0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(J)?J:$0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:$0.callbackPort,callbackPath:"/auth/callback",redirectUri:$0.redirectUri}}}function cF($,J){let Q=J?T0(J):T0($),Z=Q?Q:T0($),j=Z?.[$0.jwtClaimPath]?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;let X=Z?.organizations;if(Array.isArray(X)&&X.length>0){let Y=X[0];if(typeof Y?.id==="string"&&Y.id.length>0)return Y.id}let f=Z?.chatgpt_account_id;if(typeof f==="string"&&f.length>0)return f;return null}function YX($,J){let Q=cF($.access,$.idToken)??J?.accountId;if(!Q)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||J?.refresh||"",expires:$.expires,accountId:Q,email:$.email??J?.email,metadata:{...J?.metadata??{},provider:"openai-codex"}}}async function F4($){P1($.telemetry,"openai-codex");let J=vF(),{verifier:Q,state:Z,url:W}=await mF($.originator),j=await J1({host:J.host,ports:[J.port],callbackPath:J.callbackPath,expectedState:Z});$.onAuth({url:W,instructions:"Continue the authentication process in your browser."});let X;try{let f=await u2({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(f.state&&f.state!==Z)throw Error("State mismatch");if(X=f.code,!X){let H=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),B=m2(H,{allowHashCodeState:!0});if(B.state&&B.state!==Z)throw Error("State mismatch");X=B.code}if(!X)throw Error("Missing authorization code");let Y=await xF(X,Q,J.redirectUri);if(Y.type!=="success")throw Error("Token exchange failed");let V=YX(Y);return N1($.telemetry,"openai-codex"),S1($.telemetry,{id:V.accountId,email:V.email,provider:"openai-codex"}),V}catch(f){throw w1($.telemetry,"openai-codex",f instanceof Error?f.message:String(f)),f}finally{j.close()}}async function W5($,J){let Q=await gF($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let Z=YX(Q,J);if(!Z.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return Z}async function D4($,J){if(!$)return null;let Q=J?.refreshBufferMs??$0.refreshBufferMs,Z=J?.retryableTokenGraceMs??$0.retryableTokenGraceMs;if(J?.forceRefresh!==!0&&!c2($,Q))return $;try{return await W5($.refresh,$)}catch(j){if(j instanceof Z5&&j.isLikelyInvalidGrant())return e1(J?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>Z)return $;return null}}O0();var TX={};w(TX,{refreshOcaToken:()=>Y5,loginOcaOAuth:()=>R4,getValidOcaCredentials:()=>L4,OCI_HEADER_OPC_REQUEST_ID:()=>uF,DEFAULT_INTERNAL_OCA_BASE_URL:()=>j5,DEFAULT_INTERNAL_IDCS_URL:()=>AX,DEFAULT_INTERNAL_IDCS_SCOPES:()=>KX,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>BX,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>X5,DEFAULT_EXTERNAL_IDCS_URL:()=>FX,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>DX,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>GX});import{nanoid as HX}from"nanoid";class AZ{ttlMs;maxEntries;entries=new Map;constructor($,J){this.ttlMs=$;this.maxEntries=J}get($,J=Date.now()){this.pruneExpired(J);let Q=this.entries.get($);if(!Q)return;return this.entries.delete($),this.entries.set($,Q),Q.value}set($,J,Q=Date.now(),Z=this.ttlMs){this.pruneExpired(Q),this.entries.delete($);while(this.entries.size>=this.maxEntries){let W=this.entries.keys().next().value;if(W===void 0)break;this.entries.delete(W)}this.entries.set($,{value:J,expiresAt:Q+Z})}pruneExpired($){for(let[J,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(J)}}var BX="a8331954c0cf48ba99b5dd223a14c6ea",AX="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",KX="openid offline_access",j5="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",GX="c1aba3deed5740659981a752714eba33",FX="https://login-ext.identity.oraclecloud.com",DX="openid offline_access",X5="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",uF="opc-request-id",dF="/auth/oca",lF=Array.from({length:11},($,J)=>48801+J),pF=300000,rF=30000,UX=30000,iF=600000;class f5 extends Error{status;errorCode;constructor($,J){super($);this.name="OcaOAuthTokenError",this.status=J?.status,this.errorCode=J?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var Q$={internal:{clientId:BX,idcsUrl:AX,scopes:KX,baseUrl:j5},external:{clientId:GX,idcsUrl:FX,scopes:DX,baseUrl:X5}},U4=new Map,nF=86400000,aF=300000,sF=32,KZ=new AZ(nF,sF);function RX($){if(typeof $==="function")return $();return $??"internal"}function LX($){return{internal:{clientId:$?.internal?.clientId??Q$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??Q$.internal.idcsUrl,scopes:$?.internal?.scopes??Q$.internal.scopes,baseUrl:$?.internal?.baseUrl??Q$.internal.baseUrl},external:{clientId:$?.external?.clientId??Q$.external.clientId,idcsUrl:$?.external?.idcsUrl??Q$.external.idcsUrl,scopes:$?.external?.scopes??Q$.external.scopes,baseUrl:$?.external?.baseUrl??Q$.external.baseUrl}}}function oF($=Date.now()){let J=$-iF;for(let[Q,Z]of U4.entries())if(Z.createdAt<J)U4.delete(Q)}function tF($,J,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let W=T0(J)?.exp;if(typeof W==="number"&&W>0)return W*1000;let X=T0(Q)?.exp;if(typeof X==="number"&&X>0)return X*1000;return Date.now()+3600000}function zX($,J,Q){let Z=$.access_token;if(!Z)throw Error("Token response did not include an access token");let W=$.refresh_token??Q?.refresh;if(!W)throw Error("Token response did not include a refresh token");let j=T0($.id_token),X=T0(Z),f=j?.sub??X?.sub,Y=j?.email??X?.email;return{access:Z,refresh:W,expires:tF($,Z,$.id_token),accountId:f??Q?.accountId,email:Y??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:J,subject:f,idToken:$.id_token}}}async function _X($,J){let Q=$5($),Z=KZ.get(Q);if(Z)return Z;let W=`${Q}/.well-known/openid-configuration`,j=await fetch(W,{method:"GET",signal:AbortSignal.timeout(J)});if(!j.ok){let Y=`${Q}/oauth2/v1/token`;return KZ.set(Q,Y,Date.now(),aF),Y}let f=(await j.json()).token_endpoint||`${Q}/oauth2/v1/token`;return KZ.set(Q,f),f}function OX($){return{code:$.error,message:$.error_description}}async function eF($){let J=U4.get($.state);if(!J)throw Error("No PKCE verifier found for this state");U4.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,Z=await _X(Q.idcsUrl,$.requestTimeoutMs),W=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:J.redirectUri,client_id:Q.clientId,code_verifier:J.verifier}),j=await fetch(Z,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:W,signal:AbortSignal.timeout($.requestTimeoutMs)}),X=await j.json();if(!j.ok){let Y=OX(X);throw new f5(`Token exchange failed: ${j.status}${Y.message?` - ${Y.message}`:""}`,{status:j.status,errorCode:Y.code})}let f=T0(X.id_token);if(!X.id_token||!f)throw Error("No ID token received from OCA");if(f.nonce!==J.nonce)throw Error("OIDC nonce verification failed");return zX(X,$.mode)}function $D($){let J=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${$5(J.idcsUrl)}/oauth2/v1/authorize`);return Q.searchParams.set("client_id",J.clientId),Q.searchParams.set("response_type","code"),Q.searchParams.set("scope",J.scopes),Q.searchParams.set("code_challenge",$.challenge),Q.searchParams.set("code_challenge_method","S256"),Q.searchParams.set("redirect_uri",$.callbackUrl),Q.searchParams.set("state",$.state),Q.searchParams.set("nonce",$.nonce),Q.toString()}async function R4($){P1($.telemetry,"oca");let J=LX($.config),Q=RX($.mode),Z=$.callbackPorts?.length?$.callbackPorts:lF,W=$.callbackPath??dF,j=$.requestTimeoutMs??UX,X=await J1({ports:Z,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),f=X.callbackUrl;if(!f)throw Error("Unable to bind local OAuth callback server");let Y=HX(16),V=HX(16),{verifier:H,challenge:B}=await eJ();oF(),U4.set(Y,{verifier:H,nonce:V,mode:Q,redirectUri:f,createdAt:Date.now()});let A=$D({callbackUrl:f,mode:Q,state:Y,nonce:V,challenge:B,config:J});$.callbacks.onAuth({url:A,instructions:"Continue the authentication process in your browser."});try{let K=await u2({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),G=K.code,R=K.state;if(K.error)throw Error(`OAuth error: ${K.error}`);if(!G){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!R||R!==Y)throw Error("State mismatch");let D=await eF({code:G,state:R,mode:Q,config:J,requestTimeoutMs:j});return N1($.telemetry,"oca"),S1($.telemetry,{id:D.accountId,email:D.email,provider:"oca"}),D}catch(K){throw w1($.telemetry,"oca",K instanceof Error?K.message:String(K)),K}finally{X.close()}}async function Y5($,J={}){let Q=LX(J.config),Z=J.requestTimeoutMs??UX,W=$.metadata?.mode,j=W==="internal"||W==="external"?W:RX(J.mode),X=j==="external"?Q.external:Q.internal,f=await _X(X.idcsUrl,Z),Y=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:X.clientId}),V=await fetch(f,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:Y,signal:AbortSignal.timeout(Z)}),H=await V.json();if(!V.ok){let B=OX(H);throw new f5(`Token refresh failed: ${V.status}${B.message?` - ${B.message}`:""}`,{status:V.status,errorCode:B.code})}return zX(H,j,$)}async function L4($,J,Q){if(!$)return null;let Z=J?.refreshBufferMs??Q?.refreshBufferMs??pF,W=J?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??rF;if(J?.forceRefresh!==!0&&!c2($,Z))return $;try{return await Y5($,Q)}catch(X){if(X instanceof f5&&X.isLikelyInvalidGrant())return e1(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}var V5="workos:";function JD($){let J=$.trim();return J.toLowerCase().startsWith(V5)?J:`${V5}${J}`}function QD($){let J=$.trim();return J.toLowerCase().startsWith(V5)?J.slice(V5.length):J}function ZD($){let Q=T0($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function WD($,J){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let Z=ZD(J);if(Z)return Z;return Date.now()-1}function jD($,J){let Q=$.auth?.accessToken?.trim(),Z=$.auth?.refreshToken?.trim();if(!Q||!Z)return null;let W=J?.normalizeAccessToken?.(Q)??Q;if(!W)return null;return{access:W,refresh:Z,expires:WD($,W),accountId:$.auth?.accountId}}function XD($){let J=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:J,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},Z={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(Z,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return Z}function GZ($){let J=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:J,getApiKey(Q){let Z=Q?.auth?.accessToken?.trim();if(Z)return $.formatAccessToken?.(Z)??Z;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return XD({...Q,storageProviderId:J,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function qX($){return GZ({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:JD,normalizeStoredAccessToken:QD,login:({settings:J,callbacks:Q,telemetry:Z})=>K4({apiBaseUrl:J?.baseUrl?.trim()||MX().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:Z}),refresh:({settings:J,credentials:Q,forceRefresh:Z,telemetry:W})=>G4(Q,{apiBaseUrl:J.baseUrl?.trim()||MX().apiBaseUrl,telemetry:W},{forceRefresh:Z})})}var fD=[qX({providerId:"cline"}),qX({providerId:"cline-pass",storageProviderId:"cline"}),GZ({providerId:"oca",login:({settings:$,callbacks:J,telemetry:Q})=>R4({mode:$?.oca?.mode,callbacks:J,telemetry:Q}),refresh:({settings:$,credentials:J,forceRefresh:Q,telemetry:Z})=>L4(J,{forceRefresh:Q,telemetry:Z},{mode:$.oca?.mode,telemetry:Z})}),GZ({providerId:"openai-codex",login:({callbacks:$,telemetry:J})=>F4({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:J}),refresh:({credentials:$,forceRefresh:J,telemetry:Q})=>D4($,{forceRefresh:J,telemetry:Q})})],YD=new Map(fD.map(($)=>[$.providerId,$]));function Z0($){return YD.get($.trim().toLowerCase())}function I$($){return Z0($)!==void 0}function FZ($){return Z0($)?.storageProviderId}function DZ($,J){let Q=Z0(J),Z=Q?.storageProviderId??J,W=$.getProviderSettings(Z);return Q?.getApiKey(W)??l2(J,W)}async function z4($,J,Q){let Z=Z0(J);if(!Z)throw Error(`Provider "${J}" does not support OAuth login`);let W=$.getProviderSettings(Z.storageProviderId),j=await Z.login({settings:W,callbacks:Q.callbacks,telemetry:Q.telemetry});return Z.saveCredentials({manager:$,settings:W,credentials:j})}function _4($,J){let Q=Z0($);if(!Q)return null;return jD(J,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function x$($){let J=Z0($.providerId);if(!J)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return J.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function l2($,J){let Q=Z0($);if(Q)return Q.getApiKey(J);return J?.auth?.accessToken?.trim()||J?.apiKey?.trim()||J?.auth?.apiKey?.trim()||void 0}function UZ($,J){let Q=Z0($);if(!Q)return J.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:J.access}})??J.access}O0();var tX={};w(tX,{createContextCompactionPrepareTurn:()=>N4});import{createHandlerAsync as KD}from"@cline/llms";import{estimateTokens as RZ}from"@cline/shared";var SX=200000,LZ=0.9,CX=16384,zZ=20000,NX=1024,wX=2000,yX=2000,EX=8;function Z$($,J){if($.length<=J)return $;return`${$.slice(0,J)}
|
|
47
|
+
...[truncated ${$.length-J} chars]`}function VD($){let J=_Z($);if(typeof J==="string")return J;return J.map((Q)=>{switch(Q.type){case"text":return Q.text;case"file":return`<file path="${Q.path}">
|
|
48
48
|
${Q.content}
|
|
49
49
|
</file>`;case"image":return`[image:${Q.mediaType}]`;default:return""}}).join(`
|
|
50
|
-
`)}function
|
|
51
|
-
`)}function
|
|
50
|
+
`)}function _Z($){if(typeof $==="string")return Z$($,wX);return $.map((J)=>{switch(J.type){case"text":return{...J,text:Z$(J.text,wX)};case"file":return{...J,content:Z$(J.content,yX)};case"image":return J;default:return J}})}function HD($){return Object.entries($).map(([J,Q])=>`${J}=${JSON.stringify(Q)}`).join(", ")}function bX($){if(typeof $.content==="string")return`[${$.role==="user"?"User":"Bot"}]: ${$.content}`;let J=[];for(let Q of $.content)switch(Q.type){case"text":J.push(`[${$.role==="user"?"User":"Bot"}]: ${Q.text}`);break;case"thinking":J.push(`[Bot thinking]: ${Z$(Q.thinking,2000)}`);break;case"redacted_thinking":J.push("[Bot thinking]: [redacted]");break;case"tool_use":J.push(`[Bot tool calls]: ${Q.name}(${HD(Q.input)})`);break;case"tool_result":J.push(`[Tool result]: ${VD(Q.content)}`);break;case"file":J.push(`[${$.role==="user"?"User":"Bot"} file ${Q.path}]: ${Z$(Q.content,yX)}`);break;case"image":J.push(`[${$.role==="user"?"User":"Bot"} image]: ${Q.mediaType}`);break}return J.join(`
|
|
51
|
+
`)}function hX($){return $.map(bX).join(`
|
|
52
52
|
|
|
53
|
-
`).trim()}function
|
|
53
|
+
`).trim()}function kX(){let $=new WeakMap;return(J)=>{let Q=J,Z=$.get(Q);if(typeof Z==="number")return Z;let W;try{W=JSON.stringify(J)}catch{W=bX(J)}let j=RZ(W.length);return $.set(Q,j),j}}function M4($){return $.metadata?.kind==="compaction_summary"}function OZ($){if(!M4($))return;let J=$.metadata;if(!J)return;let Q=J.details;return{kind:"compaction_summary",summary:String(J.summary??""),details:{readFiles:Array.isArray(Q?.readFiles)?Q.readFiles.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter((Z)=>Z.length>0):[],modifiedFiles:Array.isArray(Q?.modifiedFiles)?Q.modifiedFiles.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter((Z)=>Z.length>0):[]},tokensBefore:Number(J.tokensBefore??0),generatedAt:Number(J.generatedAt??0)}}function BD($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((J)=>J.type==="tool_result")}function q4($){return $.role==="user"&&!BD($)&&!M4($)}function IX($){for(let J=0;J<$.length;J+=1)if(q4($[J]))return J;return-1}function H5($){for(let J=$.length-1;J>=0;J-=1)if(q4($[J]))return J;return 0}function xX($){for(let J=$.length-1;J>=0;J-=1)if($[J].role==="assistant")return J;return-1}function gX($){for(let J=$.length-1;J>=0;J-=1)if(M4($[J]))return J;return-1}function mX($,J,Q){let Z=H5($);if(Z<=0)return 0;let W=0,j=$.length;for(let f=$.length-1;f>=0;f-=1)if(W+=Q($[f]),j=f,W>=J)break;if(j<=0)return 0;let X=Math.min(j,Z);while(X>0&&!q4($[X]))X-=1;return X}function T4($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((J)=>T4(J));if($&&typeof $==="object"){let J=$,Q=[];for(let Z of["path","file_path","target_file","new_file_path","old_file_path"])Q.push(...T4(J[Z]));if(Array.isArray(J.files)){for(let Z of J.files)if(Z&&typeof Z==="object")Q.push(...T4(Z.path))}if(Array.isArray(J.file_paths))Q.push(...T4(J.file_paths));return Q}return[]}function O4($,J){let Q=new Set($);for(let Z of J){let W=Z.trim();if(!W)continue;Q.add(W)}return[...Q].sort((Z,W)=>Z.localeCompare(W))}function vX($){let J=[],Q=[];for(let Z of $){let W=OZ(Z);if(W){J=O4(J,W.details.readFiles),Q=O4(Q,W.details.modifiedFiles);continue}if(!Array.isArray(Z.content))continue;for(let j of Z.content){if(j.type==="file"){J=O4(J,[j.path]);continue}if(j.type!=="tool_use")continue;let X=T4(j.input);if(j.name==="read_files"){J=O4(J,X);continue}if(j.name==="editor"||j.name==="apply_patch")Q=O4(Q,X)}}return{readFiles:J,modifiedFiles:Q}}function AD($){let J=$.readFiles.length>0?$.readFiles.map((Z)=>`- ${Z}`).join(`
|
|
54
54
|
`):"- none",Q=$.modifiedFiles.length>0?$.modifiedFiles.map((Z)=>`- ${Z}`).join(`
|
|
55
55
|
`):"- none";return`## Files
|
|
56
56
|
Read:
|
|
57
57
|
${J}
|
|
58
58
|
Modified:
|
|
59
|
-
${Q}`}function
|
|
59
|
+
${Q}`}function cX($,J){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
|
|
60
60
|
|
|
61
|
-
${
|
|
61
|
+
${AD(J)}`.trim()}function uX($){let J=[`Summarize this session for continuation. Be concise and factual.
|
|
62
62
|
|
|
63
63
|
## Goal
|
|
64
64
|
One sentence: what is being built or fixed.
|
|
@@ -80,19 +80,19 @@ Edited: ${$.fileOps.modifiedFiles.join(", ")||"none"}`];if($.previousSummary?.tr
|
|
|
80
80
|
${$.previousSummary.trim()}`);return J.push(`Conversation:
|
|
81
81
|
${$.conversationText||"(empty)"}`),J.join(`
|
|
82
82
|
|
|
83
|
-
`)}function
|
|
83
|
+
`)}function dX($){let J=$.summarizer,Q=(W)=>{if(W.providerId==="openai-codex"){let{maxOutputTokens:j,...X}=W;return{...X,thinking:!1}}return{...W,maxOutputTokens:W.maxOutputTokens??NX,thinking:!1}};if(!J)return Q($.activeProviderConfig);let Z=J.providerConfig?.providerId===J.providerId?J.providerConfig:void 0;return Q({...Z??{},providerId:J.providerId,modelId:J.modelId,apiKey:J.apiKey??Z?.apiKey,baseUrl:J.baseUrl??Z?.baseUrl,headers:J.headers??Z?.headers,knownModels:J.knownModels??Z?.knownModels,maxOutputTokens:J.maxOutputTokens??NX})}function lX($){return{role:"user",content:`Context summary:
|
|
84
84
|
|
|
85
|
-
${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}async function WD($){let J=await ZD($.providerConfig),Q="";for await(let Z of J.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(Z.type==="text"){Q+=Z.text;continue}if(Z.type==="done"&&!Z.success&&Z.error)throw Error(Z.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Q.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Q.trim()}function jD($){try{return JSON.stringify($).length}catch{return String($).length}}async function uf($){let J=$.context.messages;if(J.length<2)return;let Q=If(J,$.preserveRecentTokens,$.estimateMessageTokens);if(Q<=0||Q>=J.length)return;let Z=J.slice(0,Q),W=kf(Z),j=W>=0?DZ(Z[W])?.summary:void 0,f=W>=0?Z.slice(W+1):Z;if(f.length===0)return;let X=xf(Z),Y=yf(f),V=mf({previousSummary:j,conversationText:Y,fileOps:X});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:Z.length,newMessagesToFold:f.length,preservedMessages:J.length-Q,previousSummaryChars:j?.length??0,conversationTextChars:Y.length,summaryRequestChars:V.length,summaryRequestEstimatedTokens:AZ(V.length),newMessagesJsonChars:jD(f),maxInputTokens:$.context.maxInputTokens,triggerTokens:$.context.triggerTokens});let H=await WD({providerConfig:vf({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),request:V,logger:$.logger});if(!H.trim())return;let B=gf(H,X),A=J.reduce((R,D)=>R+$.estimateMessageTokens(D),0),K=[cf({summary:B,fileOps:X,tokensBefore:A}),...J.slice(Q)],G=K.reduce((R,D)=>R+$.estimateMessageTokens(D),0);return $.logger?.debug("Performed agentic compaction",{messagesBefore:J.length,messagesAfter:K.length,messagesSummarized:Q,messagesPreserved:J.length-Q,tokensBefore:A,tokensAfter:G,maxInputTokens:$.context.maxInputTokens}),{messages:K}}function pf($){if(T4($))return;if(typeof $.content==="string"){let Q=$.content.trim();return Q?{...$,content:Q}:void 0}let J=$.content.filter((Q)=>Q.type!=="text"||Q.text.trim());if(J.length===0)return;return{...$,content:J.map((Q)=>Q.type==="text"?{...Q,text:Q.text.trim()}:Q.type==="tool_result"?{...Q,content:FZ(Q.content)}:Q)}}function q4($,J){return $.reduce((Q,Z)=>Q+J(Z),0)}function df($,J){let Q=Math.max(1,J),Z=Math.max(16,Q*4);if(typeof $.content==="string"){let f=Z$($.content,Z).trim();return{...$,content:f||"..."}}let W=Z,j=$.content.map((f)=>{if(f.type!=="text"||W<=0)return f;let X=Z$(f.text,W).trim();return W-=X.length,{...f,text:X||"..."}});return{...$,content:j}}function fD($,J){let Q=bf($),Z=f5($),W=hf($),j=[];for(let f=0;f<$.length;f+=1){let X=pf($[f]);if(!X)continue;j.push({index:f,message:X,estimatedTokens:J(X),isFirstUser:f===Q,isLastUser:f===Z,isLastAssistant:f===W})}return j}function lf($,J,Q,Z){let W=$[J];W.message=Q,W.estimatedTokens=Z(Q)}function XD($){let J=new Set;if(!Array.isArray($.content))return J;for(let Q of $.content)if(Q.type==="tool_use")J.add(Q.id);return J}function YD($){let J=new Set;if(!Array.isArray($.content))return J;for(let Q of $.content)if(Q.type==="tool_result")J.add(Q.tool_use_id);return J}function rf($){return new Set([...XD($.message),...YD($.message)])}function VD($){let J=new Map;for(let Q=0;Q<$.length;Q+=1)for(let Z of rf($[Q])){let W=J.get(Z);if(W)W.add(Q);else J.set(Z,new Set([Q]))}return J}function HD($,J){let Q=VD($),Z=new Set,W=[J];while(W.length>0){let j=W.shift();if(j===void 0||Z.has(j))continue;Z.add(j);for(let f of rf($[j]))for(let X of Q.get(f)??[])if(!Z.has(X))W.push(X)}return Z}function X5($,J,Q,Z){let W=q4($.map((j)=>j.message),Z);for(let j=0;j<$.length&&W>Q;){if(!J($[j])){j+=1;continue}let f=HD($,j);W-=Array.from(f).reduce((X,Y)=>X+$[Y].estimatedTokens,0);for(let X of Array.from(f).sort((Y,V)=>V-Y))$.splice(X,1)}}function BD($,J,Q){let Z=q4($.map((j)=>j.message),Q);if(Z<=J)return;for(let j=$.length-1;j>=0&&Z>J;j-=1){let f=$[j];if(f.isFirstUser)continue;let X=Math.max(Sf,f.estimatedTokens-(Z-J));if(X>=f.estimatedTokens)continue;lf($,j,df(f.message,X),Q),Z=q4($.map((Y)=>Y.message),Q)}if(Z<=J)return;let W=$.findIndex((j)=>j.isFirstUser);if(W>=0){let j=Math.max(1,$[W].estimatedTokens-(Z-J));lf($,W,df($[W].message,j),Q)}}function AD($,J){return JSON.stringify($)!==JSON.stringify(J)}function KD($){let J=f5($);if(J<0||J===0&&!M4($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,J),protectedTail:$.slice(J)}}function nf($){let J=Math.max(1,Math.min($.context.triggerTokens,$.context.maxInputTokens)),{compactable:Q,protectedTail:Z}=KD($.context.messages);if(Q.length===0)return;let W=fD(Q,$.estimateMessageTokens);if(W.length===0)return;X5(W,(Y)=>Y.message.role==="assistant"&&!Y.isLastAssistant,J,$.estimateMessageTokens),X5(W,(Y)=>Y.message.role==="user"&&!Y.isFirstUser&&!Y.isLastUser,J,$.estimateMessageTokens),X5(W,(Y)=>Y.message.role==="assistant"&&Y.isLastAssistant,J,$.estimateMessageTokens),X5(W,(Y)=>Y.message.role==="user"&&Y.isLastUser&&!Y.isFirstUser,J,$.estimateMessageTokens),BD(W,J,$.estimateMessageTokens);let j=[...W.map((Y)=>Y.message),...Z];if(!AD($.context.messages,j))return;let f=q4([...Q.map((Y)=>pf(Y)??Y),...Z],$.estimateMessageTokens),X=q4(j,$.estimateMessageTokens);return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:j.length,messagesRemoved:$.context.messages.length-j.length,tokensBefore:f,tokensAfter:X,targetTokens:J,maxInputTokens:$.context.maxInputTokens}),{messages:j}}function af($){try{return JSON.stringify($).length}catch{return String($).length}}function GD($){let J=0,Q=0,Z=0;for(let W of $){if(!Array.isArray(W.content))continue;for(let j of W.content){if(j.type!=="tool_result")continue;let f=af(j.content);J+=1,Q+=f,Z=Math.max(Z,f)}}return{toolResultCount:J,toolResultSerializedChars:Q,maxToolResultSerializedChars:Z}}var FD={basic:({context:$,estimateMessageTokens:J,logger:Q})=>nf({context:$,estimateMessageTokens:J,logger:Q}),agentic:({context:$,providerConfig:J,compaction:Q,mode:Z,estimateMessageTokens:W,logger:j})=>uf({context:$,providerConfig:J,summarizer:Q?.summarizer,preserveRecentTokens:Z==="manual"?Math.min(Q?.preserveRecentTokens??GZ,$.triggerTokens):Q?.preserveRecentTokens??GZ,estimateMessageTokens:W,logger:j})};function DD($){if(typeof $.config.reserveTokens==="number"){let Z=Math.max(0,$.config.reserveTokens),W=Math.max(0,$.maxInputTokens-Z);return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio!=="number"){let Z=Math.max(0,Math.min($.maxInputTokens-Nf,$.maxInputTokens*KZ));return{shouldCompact:$.inputTokens>Z,triggerTokens:Z,thresholdRatio:$.maxInputTokens>0?Z/$.maxInputTokens:0}}let J=$.config.thresholdRatio??KZ,Q=$.maxInputTokens*J;return{shouldCompact:$.inputTokens>Q,triggerTokens:Q,thresholdRatio:J}}function UD($){let J=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,J)),Z=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*Q)));return{triggerTokens:Z,thresholdRatio:$.maxInputTokens>0?Z/$.maxInputTokens:0}}function P4($,J={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let Z=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},W=Ef(),j=Q?.strategy??"basic",f=FD[j],X=J.mode??"auto",Y=Q?.compact?"custom":j;return async(V)=>{let H=V.apiMessages.reduce((z,P)=>z+W(P),0),B=Q?.maxInputTokens??V.model.info?.maxInputTokens??V.model.info?.contextWindow??Pf;if(typeof B!=="number"||!Number.isFinite(B)||B<=0)return;let A=DD({inputTokens:H,maxInputTokens:B,config:{reserveTokens:Q?.reserveTokens,thresholdRatio:Q?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:X,strategy:j,iteration:V.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:H,maxInputTokens:B,triggerTokens:A.triggerTokens,thresholdRatio:A.thresholdRatio,shouldCompact:A.shouldCompact,messageCount:V.messages.length,apiMessageCount:V.apiMessages.length,apiMessagesJsonChars:af(V.apiMessages),...GD(V.apiMessages)}),X==="auto"&&!A.shouldCompact)return;let K=X==="manual"?UD({inputTokens:H,maxInputTokens:B,autoTriggerTokens:A.triggerTokens,manualTargetRatio:J.manualTargetRatio}):A,G={agentId:V.agentId,conversationId:V.conversationId,parentAgentId:V.parentAgentId,iteration:V.iteration,messages:V.messages,model:V.model,maxInputTokens:B,triggerTokens:K.triggerTokens,thresholdRatio:K.thresholdRatio,utilizationRatio:B>0?H/B:0},R=X==="manual"?"manual_compaction":"auto_compaction";V.emitStatusNotice?.(X==="manual"?"compacting":"auto-compacting",{kind:R,reason:R,iteration:V.iteration,triggerTokens:K.triggerTokens,maxInputTokens:B});let D=V.messages.length,U=Date.now(),F=Q?.compact?await Q.compact(G):await f({context:G,providerConfig:{...Z,abortSignal:V.abortSignal},compaction:Q,mode:X,estimateMessageTokens:W,logger:$.logger}),O=Date.now()-U,T=$.sessionId??V.conversationId,L={agentId:V.agentId,conversationId:V.conversationId,parentAgentId:V.parentAgentId??void 0};if(F?.messages){let z=F.messages.reduce((P,S)=>P+W(S),0);$.logger?.log("Context compaction completed",{severity:"info",strategy:j,maxInputTokens:B,inputTokens:H,afterTokens:z,tokensSaved:H-z,utilizationBefore:`${(H/B*100).toFixed(1)}%`,utilizationAfter:`${(z/B*100).toFixed(1)}%`,thresholdTrigger:`${(K.thresholdRatio*100).toFixed(1)}%`,messagesBefore:D,messagesAfter:F.messages.length,messagesRemoved:D-F.messages.length}),iJ($.telemetry,{ulid:T,strategy:Y,mode:X,messagesBefore:D,messagesAfter:F.messages.length,messagesRemoved:D-F.messages.length,tokensBefore:H,tokensAfter:z,tokensSaved:H-z,triggerTokens:K.triggerTokens,maxInputTokens:B,thresholdRatio:K.thresholdRatio,durationMs:O,provider:$.providerId,modelId:$.modelId,...L})}else nJ($.telemetry,{ulid:T,strategy:Y,mode:X,reason:"no_result",tokensBefore:H,triggerTokens:K.triggerTokens,maxInputTokens:B,thresholdRatio:K.thresholdRatio,durationMs:O,provider:$.providerId,modelId:$.modelId,...L});return F}}var NY={};w(NY,{zodToJsonSchema:()=>Kz,validateWithZod:()=>Az,resolveToolRoutingConfig:()=>t2,resolveToolPresetName:()=>h1,resolveCoreSelectedToolIds:()=>w5,getCoreHeadlessToolNames:()=>a4,getCoreDefaultEnabledToolIds:()=>N5,getCoreBuiltinToolCatalog:()=>i$,getCoreAcpToolNames:()=>S5,createWindowsShellTool:()=>PZ,createWebFetchTool:()=>NZ,createWebFetchExecutor:()=>d4,createToolPoliciesWithPreset:()=>G5,createSubmitAndExitTool:()=>yZ,createSkillsTool:()=>v$,createSearchTool:()=>MZ,createSearchExecutor:()=>u4,createReadFilesTool:()=>TZ,createFileReadExecutor:()=>c4,createEditorTool:()=>SZ,createEditorExecutor:()=>v4,createDefaultToolsWithPreset:()=>F5,createDefaultTools:()=>X$,createDefaultExecutors:()=>s2,createBuiltinTools:()=>n$,createBashTool:()=>qZ,createBashExecutor:()=>g4,createAskQuestionTool:()=>CZ,createApplyPatchTool:()=>wZ,createApplyPatchExecutor:()=>m4,WebFetchRequestSchema:()=>zZ,ToolPresets:()=>c0,TEAM_TOOL_NAMES:()=>J8,SubmitInputSchema:()=>k4,SkillsInputSchema:()=>b4,SearchCodebaseInputSchema:()=>S4,RunCommandsInputSchema:()=>p2,ReadFilesInputSchema:()=>w4,ReadFileRequestSchema:()=>C1,FetchWebContentInputSchema:()=>C4,EditFileInputSchema:()=>y4,DefaultToolNames:()=>K0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>o2,AskQuestionInputSchema:()=>h4,ApplyPatchInputSchema:()=>E4,ALL_DEFAULT_TOOL_NAMES:()=>W$});import{validateWithZod as Az,zodToJsonSchema as Kz}from"@cline/shared";var K0={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"},W$=[K0.READ_FILES,K0.SEARCH_CODEBASE,K0.RUN_COMMANDS,K0.FETCH_WEB_CONTENT,K0.APPLY_PATCH,K0.EDITOR,K0.SKILLS,K0.ASK,K0.SUBMIT_AND_EXIT];O0();import{createTool as y1,validateWithZod as E1,zodToJsonSchema as H1}from"@cline/shared";var of="__clineInternalTelemetry";function tf($){let J=$?.__clineInternalTelemetry;return J&&typeof J==="object"&&"capture"in J&&typeof J.capture==="function"?J:void 0}import{spawn as VX}from"node:child_process";import{StringDecoder as LD}from"node:string_decoder";import{getDefaultShell as _D,getShellArgs as OD}from"@cline/shared";import{validateWithZod as RD}from"@cline/shared";import{z as _}from"zod";var j$=6000,N4=_.string().describe("The absolute file path of a text file to read content from"),ef=_.object({start_line:_.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:_.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"),C1=_.object({path:N4,start_line:ef.shape.start_line,end_line:ef.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),w4=_.object({files:_.array(C1).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.")}),$X=_.union([w4,C1,_.array(C1),_.array(_.string()),_.string(),_.object({files:_.array(_.union([N4,C1]))}),_.object({files:C1}),_.object({files:N4}),_.object({file_paths:_.array(N4)}),_.object({file_paths:_.string()}),_.object({paths:_.array(_.union([N4,C1]))}),_.object({paths:C1}),_.object({paths:_.string()})]),S4=_.object({queries:_.array(_.string()).describe("Array of regex search queries to execute")}),JX=_.union([S4,_.array(_.string()),_.string(),_.object({queries:_.string()})]),g$=_.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${j$*2} characters) to avoid timeouts.`),p2=_.object({commands:_.array(g$).describe("Array of shell commands to execute")}),QX=_.union([p2,_.object({commands:g$}),_.object({command:g$}),_.object({cmd:g$}),_.array(_.string()),_.string()]),UZ=_.object({command:_.string().min(1).describe("The executable to run directly without shell parsing."),args:_.array(_.string()).optional().describe("Optional argv list passed directly to the executable.")}),ZX=_.union([g$,UZ]),RZ=_.object({commands:_.array(ZX).describe("Array of commands to execute. Prefer structured { command, args } entries for portability; plain strings are still supported and are interpreted by the active shell.")}),WX=_.union([p2,RZ,_.object({commands:ZX}),_.array(UZ),UZ,_.object({command:g$}),_.object({cmd:g$}),_.array(_.string()),_.string()]),zZ=_.object({url:_.string().describe("The URL to fetch"),prompt:_.string().min(2).describe("Analysis prompt for the fetched content")}),C4=_.object({requests:_.array(zZ).describe("Array of the URLs for the web fetch requests")}),y4=_.object({path:_.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:_.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 ${j$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:_.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 ${j$} 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:_.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."),E4=_.object({input:_.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."),jX=_.union([E4,_.string()]),b4=_.object({skill:_.string().min(1).describe("Name of the skill to execute."),args:_.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),h4=_.object({question:_.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:_.array(_.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),k4=_.object({summary:_.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:_.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.
|
|
85
|
+
${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}async function GD($){let J=await KD($.providerConfig),Q="";for await(let Z of J.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(Z.type==="text"){Q+=Z.text;continue}if(Z.type==="done"&&!Z.success&&Z.error)throw Error(Z.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Q.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Q.trim()}function FD($){try{return JSON.stringify($).length}catch{return String($).length}}async function pX($){let J=$.context.messages;if(J.length<2)return;let Q=mX(J,$.preserveRecentTokens,$.estimateMessageTokens);if(Q<=0||Q>=J.length)return;let Z=J.slice(0,Q),W=gX(Z),j=W>=0?OZ(Z[W])?.summary:void 0,X=W>=0?Z.slice(W+1):Z;if(X.length===0)return;let f=vX(Z),Y=hX(X),V=uX({previousSummary:j,conversationText:Y,fileOps:f});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:Z.length,newMessagesToFold:X.length,preservedMessages:J.length-Q,previousSummaryChars:j?.length??0,conversationTextChars:Y.length,summaryRequestChars:V.length,summaryRequestEstimatedTokens:RZ(V.length),newMessagesJsonChars:FD(X),maxInputTokens:$.context.maxInputTokens,triggerTokens:$.context.triggerTokens});let H=await GD({providerConfig:dX({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),request:V,logger:$.logger});if(!H.trim())return;let B=cX(H,f),A=J.reduce((R,D)=>R+$.estimateMessageTokens(D),0),K=[lX({summary:B,fileOps:f,tokensBefore:A}),...J.slice(Q)],G=K.reduce((R,D)=>R+$.estimateMessageTokens(D),0);return $.logger?.debug("Performed agentic compaction",{messagesBefore:J.length,messagesAfter:K.length,messagesSummarized:Q,messagesPreserved:J.length-Q,tokensBefore:A,tokensAfter:G,maxInputTokens:$.context.maxInputTokens}),{messages:K}}function nX($){if(M4($))return;if(typeof $.content==="string"){let Q=$.content.trim();return Q?{...$,content:Q}:void 0}let J=$.content.filter((Q)=>Q.type!=="text"||Q.text.trim());if(J.length===0)return;return{...$,content:J.map((Q)=>Q.type==="text"?{...Q,text:Q.text.trim()}:Q.type==="tool_result"?{...Q,content:_Z(Q.content)}:Q)}}function P4($,J){return $.reduce((Q,Z)=>Q+J(Z),0)}function rX($,J){let Q=Math.max(1,J),Z=Math.max(16,Q*4);if(typeof $.content==="string"){let X=Z$($.content,Z).trim();return{...$,content:X||"..."}}let W=Z,j=$.content.map((X)=>{if(X.type!=="text"||W<=0)return X;let f=Z$(X.text,W).trim();return W-=f.length,{...X,text:f||"..."}});return{...$,content:j}}function DD($,J){let Q=IX($),Z=H5($),W=xX($),j=[];for(let X=0;X<$.length;X+=1){let f=nX($[X]);if(!f)continue;j.push({index:X,message:f,estimatedTokens:J(f),isFirstUser:X===Q,isLastUser:X===Z,isLastAssistant:X===W})}return j}function iX($,J,Q,Z){let W=$[J];W.message=Q,W.estimatedTokens=Z(Q)}function UD($){let J=new Set;if(!Array.isArray($.content))return J;for(let Q of $.content)if(Q.type==="tool_use")J.add(Q.id);return J}function RD($){let J=new Set;if(!Array.isArray($.content))return J;for(let Q of $.content)if(Q.type==="tool_result")J.add(Q.tool_use_id);return J}function aX($){return new Set([...UD($.message),...RD($.message)])}function LD($){let J=new Map;for(let Q=0;Q<$.length;Q+=1)for(let Z of aX($[Q])){let W=J.get(Z);if(W)W.add(Q);else J.set(Z,new Set([Q]))}return J}function zD($,J){let Q=LD($),Z=new Set,W=[J];while(W.length>0){let j=W.shift();if(j===void 0||Z.has(j))continue;Z.add(j);for(let X of aX($[j]))for(let f of Q.get(X)??[])if(!Z.has(f))W.push(f)}return Z}function B5($,J,Q,Z){let W=P4($.map((j)=>j.message),Z);for(let j=0;j<$.length&&W>Q;){if(!J($[j])){j+=1;continue}let X=zD($,j);W-=Array.from(X).reduce((f,Y)=>f+$[Y].estimatedTokens,0);for(let f of Array.from(X).sort((Y,V)=>V-Y))$.splice(f,1)}}function _D($,J,Q){let Z=P4($.map((j)=>j.message),Q);if(Z<=J)return;for(let j=$.length-1;j>=0&&Z>J;j-=1){let X=$[j];if(X.isFirstUser)continue;let f=Math.max(EX,X.estimatedTokens-(Z-J));if(f>=X.estimatedTokens)continue;iX($,j,rX(X.message,f),Q),Z=P4($.map((Y)=>Y.message),Q)}if(Z<=J)return;let W=$.findIndex((j)=>j.isFirstUser);if(W>=0){let j=Math.max(1,$[W].estimatedTokens-(Z-J));iX($,W,rX($[W].message,j),Q)}}function OD($,J){return JSON.stringify($)!==JSON.stringify(J)}function TD($){let J=H5($);if(J<0||J===0&&!q4($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,J),protectedTail:$.slice(J)}}function sX($){let J=Math.max(1,Math.min($.context.triggerTokens,$.context.maxInputTokens)),{compactable:Q,protectedTail:Z}=TD($.context.messages);if(Q.length===0)return;let W=DD(Q,$.estimateMessageTokens);if(W.length===0)return;B5(W,(Y)=>Y.message.role==="assistant"&&!Y.isLastAssistant,J,$.estimateMessageTokens),B5(W,(Y)=>Y.message.role==="user"&&!Y.isFirstUser&&!Y.isLastUser,J,$.estimateMessageTokens),B5(W,(Y)=>Y.message.role==="assistant"&&Y.isLastAssistant,J,$.estimateMessageTokens),B5(W,(Y)=>Y.message.role==="user"&&Y.isLastUser&&!Y.isFirstUser,J,$.estimateMessageTokens),_D(W,J,$.estimateMessageTokens);let j=[...W.map((Y)=>Y.message),...Z];if(!OD($.context.messages,j))return;let X=P4([...Q.map((Y)=>nX(Y)??Y),...Z],$.estimateMessageTokens),f=P4(j,$.estimateMessageTokens);return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:j.length,messagesRemoved:$.context.messages.length-j.length,tokensBefore:X,tokensAfter:f,targetTokens:J,maxInputTokens:$.context.maxInputTokens}),{messages:j}}function oX($){try{return JSON.stringify($).length}catch{return String($).length}}function MD($){let J=0,Q=0,Z=0;for(let W of $){if(!Array.isArray(W.content))continue;for(let j of W.content){if(j.type!=="tool_result")continue;let X=oX(j.content);J+=1,Q+=X,Z=Math.max(Z,X)}}return{toolResultCount:J,toolResultSerializedChars:Q,maxToolResultSerializedChars:Z}}var qD={basic:({context:$,estimateMessageTokens:J,logger:Q})=>sX({context:$,estimateMessageTokens:J,logger:Q}),agentic:({context:$,providerConfig:J,compaction:Q,mode:Z,estimateMessageTokens:W,logger:j})=>pX({context:$,providerConfig:J,summarizer:Q?.summarizer,preserveRecentTokens:Z==="manual"?Math.min(Q?.preserveRecentTokens??zZ,$.triggerTokens):Q?.preserveRecentTokens??zZ,estimateMessageTokens:W,logger:j})};function PD($){if(typeof $.config.reserveTokens==="number"){let Z=Math.max(0,$.config.reserveTokens),W=Math.max(0,$.maxInputTokens-Z);return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio!=="number"){let Z=Math.max(0,Math.min($.maxInputTokens-CX,$.maxInputTokens*LZ));return{shouldCompact:$.inputTokens>Z,triggerTokens:Z,thresholdRatio:$.maxInputTokens>0?Z/$.maxInputTokens:0}}let J=$.config.thresholdRatio??LZ,Q=$.maxInputTokens*J;return{shouldCompact:$.inputTokens>Q,triggerTokens:Q,thresholdRatio:J}}function ND($){let J=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,J)),Z=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*Q)));return{triggerTokens:Z,thresholdRatio:$.maxInputTokens>0?Z/$.maxInputTokens:0}}function N4($,J={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let Z=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},W=kX(),j=Q?.strategy??"basic",X=qD[j],f=J.mode??"auto",Y=Q?.compact?"custom":j;return async(V)=>{let H=V.apiMessages.reduce((L,P)=>L+W(P),0),B=Q?.maxInputTokens??V.model.info?.maxInputTokens??V.model.info?.contextWindow??SX;if(typeof B!=="number"||!Number.isFinite(B)||B<=0)return;let A=PD({inputTokens:H,maxInputTokens:B,config:{reserveTokens:Q?.reserveTokens,thresholdRatio:Q?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:f,strategy:j,iteration:V.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:H,maxInputTokens:B,triggerTokens:A.triggerTokens,thresholdRatio:A.thresholdRatio,shouldCompact:A.shouldCompact,messageCount:V.messages.length,apiMessageCount:V.apiMessages.length,apiMessagesJsonChars:oX(V.apiMessages),...MD(V.apiMessages)}),f==="auto"&&!A.shouldCompact)return;let K=f==="manual"?ND({inputTokens:H,maxInputTokens:B,autoTriggerTokens:A.triggerTokens,manualTargetRatio:J.manualTargetRatio}):A,G={agentId:V.agentId,conversationId:V.conversationId,parentAgentId:V.parentAgentId,iteration:V.iteration,messages:V.messages,model:V.model,maxInputTokens:B,triggerTokens:K.triggerTokens,thresholdRatio:K.thresholdRatio,utilizationRatio:B>0?H/B:0},R=f==="manual"?"manual_compaction":"auto_compaction";V.emitStatusNotice?.(f==="manual"?"compacting":"auto-compacting",{kind:R,reason:R,iteration:V.iteration,triggerTokens:K.triggerTokens,maxInputTokens:B});let D=V.messages.length,U=Date.now(),F=Q?.compact?await Q.compact(G):await X({context:G,providerConfig:{...Z,abortSignal:V.abortSignal},compaction:Q,mode:f,estimateMessageTokens:W,logger:$.logger}),O=Date.now()-U,T=$.sessionId??V.conversationId,z={agentId:V.agentId,conversationId:V.conversationId,parentAgentId:V.parentAgentId??void 0};if(F?.messages){let L=F.messages.reduce((P,S)=>P+W(S),0);$.logger?.log("Context compaction completed",{severity:"info",strategy:j,maxInputTokens:B,inputTokens:H,afterTokens:L,tokensSaved:H-L,utilizationBefore:`${(H/B*100).toFixed(1)}%`,utilizationAfter:`${(L/B*100).toFixed(1)}%`,thresholdTrigger:`${(K.thresholdRatio*100).toFixed(1)}%`,messagesBefore:D,messagesAfter:F.messages.length,messagesRemoved:D-F.messages.length}),oJ($.telemetry,{ulid:T,strategy:Y,mode:f,messagesBefore:D,messagesAfter:F.messages.length,messagesRemoved:D-F.messages.length,tokensBefore:H,tokensAfter:L,tokensSaved:H-L,triggerTokens:K.triggerTokens,maxInputTokens:B,thresholdRatio:K.thresholdRatio,durationMs:O,provider:$.providerId,modelId:$.modelId,...z})}else tJ($.telemetry,{ulid:T,strategy:Y,mode:f,reason:"no_result",tokensBefore:H,triggerTokens:K.triggerTokens,maxInputTokens:B,thresholdRatio:K.thresholdRatio,durationMs:O,provider:$.providerId,modelId:$.modelId,...z});return F}}var xY={};w(xY,{zodToJsonSchema:()=>NL,validateWithZod:()=>PL,resolveToolRoutingConfig:()=>t2,resolveToolPresetName:()=>h1,resolveCoreSelectedToolIds:()=>h5,getCoreHeadlessToolNames:()=>e4,getCoreDefaultEnabledToolIds:()=>b5,getCoreBuiltinToolCatalog:()=>i$,getCoreAcpToolNames:()=>k5,createWindowsShellTool:()=>EZ,createWebFetchTool:()=>bZ,createWebFetchExecutor:()=>l4,createToolPoliciesWithPreset:()=>R5,createSubmitAndExitTool:()=>xZ,createSkillsTool:()=>v$,createSearchTool:()=>CZ,createSearchExecutor:()=>d4,createReadFilesTool:()=>SZ,createFileReadExecutor:()=>u4,createEditorTool:()=>kZ,createEditorExecutor:()=>c4,createDefaultToolsWithPreset:()=>L5,createDefaultTools:()=>f$,createDefaultExecutors:()=>s2,createBuiltinTools:()=>n$,createBashTool:()=>yZ,createBashExecutor:()=>m4,createAskQuestionTool:()=>IZ,createApplyPatchTool:()=>hZ,createApplyPatchExecutor:()=>v4,WebFetchRequestSchema:()=>qZ,ToolPresets:()=>c0,TEAM_TOOL_NAMES:()=>Q8,SubmitInputSchema:()=>I4,SkillsInputSchema:()=>h4,SearchCodebaseInputSchema:()=>C4,RunCommandsInputSchema:()=>p2,ReadFilesInputSchema:()=>S4,ReadFileRequestSchema:()=>C1,FetchWebContentInputSchema:()=>y4,EditFileInputSchema:()=>E4,DefaultToolNames:()=>F0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>o2,AskQuestionInputSchema:()=>k4,ApplyPatchInputSchema:()=>b4,ALL_DEFAULT_TOOL_NAMES:()=>W$});import{validateWithZod as PL,zodToJsonSchema as NL}from"@cline/shared";var F0={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"},W$=[F0.READ_FILES,F0.SEARCH_CODEBASE,F0.RUN_COMMANDS,F0.FETCH_WEB_CONTENT,F0.APPLY_PATCH,F0.EDITOR,F0.SKILLS,F0.ASK,F0.SUBMIT_AND_EXIT];O0();import{createTool as y1,validateWithZod as E1,zodToJsonSchema as H1}from"@cline/shared";var eX="__clineInternalTelemetry";function $f($){let J=$?.__clineInternalTelemetry;return J&&typeof J==="object"&&"capture"in J&&typeof J.capture==="function"?J:void 0}import{spawn as Bf}from"node:child_process";import{StringDecoder as CD}from"node:string_decoder";import{getDefaultShell as yD,getShellArgs as ED}from"@cline/shared";import{validateWithZod as wD}from"@cline/shared";import{z as _}from"zod";var j$=6000,w4=_.string().describe("The absolute file path of a text file to read content from"),Jf=_.object({start_line:_.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:_.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"),C1=_.object({path:w4,start_line:Jf.shape.start_line,end_line:Jf.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),S4=_.object({files:_.array(C1).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.")}),Qf=_.union([S4,C1,_.array(C1),_.array(_.string()),_.string(),_.object({files:_.array(_.union([w4,C1]))}),_.object({files:C1}),_.object({files:w4}),_.object({file_paths:_.array(w4)}),_.object({file_paths:_.string()}),_.object({paths:_.array(_.union([w4,C1]))}),_.object({paths:C1}),_.object({paths:_.string()})]),C4=_.object({queries:_.array(_.string()).describe("Array of regex search queries to execute")}),Zf=_.union([C4,_.array(_.string()),_.string(),_.object({queries:_.string()})]),g$=_.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${j$*2} characters) to avoid timeouts.`),p2=_.object({commands:_.array(g$).describe("Array of shell commands to execute")}),Wf=_.union([p2,_.object({commands:g$}),_.object({command:g$}),_.object({cmd:g$}),_.array(_.string()),_.string()]),TZ=_.object({command:_.string().min(1).describe("The executable to run directly without shell parsing."),args:_.array(_.string()).optional().describe("Optional argv list passed directly to the executable.")}),jf=_.union([g$,TZ]),MZ=_.object({commands:_.array(jf).describe("Array of commands to execute. Prefer structured { command, args } entries for portability; plain strings are still supported and are interpreted by the active shell.")}),Xf=_.union([p2,MZ,_.object({commands:jf}),_.array(TZ),TZ,_.object({command:g$}),_.object({cmd:g$}),_.array(_.string()),_.string()]),qZ=_.object({url:_.string().describe("The URL to fetch"),prompt:_.string().min(2).describe("Analysis prompt for the fetched content")}),y4=_.object({requests:_.array(qZ).describe("Array of the URLs for the web fetch requests")}),E4=_.object({path:_.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:_.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 ${j$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:_.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 ${j$} 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:_.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."),b4=_.object({input:_.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."),ff=_.union([b4,_.string()]),h4=_.object({skill:_.string().min(1).describe("Name of the skill to execute."),args:_.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),k4=_.object({question:_.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:_.array(_.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),I4=_.object({summary:_.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:_.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.
|
|
86
86
|
'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
|
|
87
|
-
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
|
|
87
|
+
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 X$($){if($ instanceof Error)return $.message;return String($)}function Yf($){if(typeof $.old_text==="string"&&$.old_text.length>j$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${j$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>j$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${j$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class m$ extends Error{timeoutMs;constructor($,J){super($);this.name="TimeoutError",this.timeoutMs=J}}function V1($,J,Q){return Promise.race([$,new Promise((Z,W)=>{setTimeout(()=>W(new m$(Q,J)),J)})])}function A5($){let{path:J,start_line:Q,end_line:Z}=$;if(Q==null&&Z==null)return J;return`${J}:${Q??1}-${Z??"EOF"}`}function Vf($){let{start_line:J,end_line:Q}=$;if(J==null||Q==null||J<=Q)return null;return`start_line must be less than or equal to end_line (received start_line: ${J}, end_line: ${Q})`}function Hf($){let J=wD(Xf,$);if(typeof J==="string")return[J];if(Array.isArray(J))return J;if("commands"in J)return Array.isArray(J.commands)?J.commands:[J.commands];if("command"in J)return"args"in J?[J]:[J.command];if("cmd"in J)return[J.cmd];return[J]}function SD($){if(typeof $==="string")return $;let J=$.args??[];if(J.length===0)return $.command;let Q=J.map((Z)=>/[\s"]/u.test(Z)?JSON.stringify(Z):Z);return`${$.command} ${Q.join(" ")}`}var PZ=200;function NZ($){let J=SD($);if(J.length<=PZ)return J;let Q=J.length-PZ;return`${J.slice(0,PZ)} ... [command truncated: ${Q} more chars; full command is in the tool call input]`}var x4=48000,r2=2000,wZ=2000,K5=48000,i2=48000;class g4 extends Error{exitCode;output;constructor($,J){super(`Command exited with code ${$}`);this.exitCode=$;this.output=J;this.name="CommandExitError"}}function Af($){let J=Math.ceil($/2),Q=Math.max(1,$-J),Z=new CD("utf8"),W="",j="",X=0,f=(Y)=>{if(!Y)return;X+=Y.length;let V=J-W.length;if(V>0){W+=Y.slice(0,V),j=(j+Y.slice(V)).slice(-Q);return}j=(j+Y).slice(-Q)};return{append(Y){f(Z.write(Y))},snapshot(){return f(Z.end()),{text:W+j,totalChars:X,dropped:X>W.length+j.length}}}}function Kf($,J,Q){let Z=Math.ceil(J/2),W=Math.max(1,J-Z);return`${$.slice(0,Z)}
|
|
88
88
|
[... output truncated: ${Q} chars total. Refine the command (grep, head, tail) to view the elided middle ...]
|
|
89
|
-
`+$.slice(-W)}function
|
|
89
|
+
`+$.slice(-W)}function bD($,J,Q,Z,W){return new Promise((j,X)=>{let f=process.platform==="win32",Y=Bf($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!f,windowsHide:!0}),V=Y.pid,H=Af(Z),B=Af(Z),A=!1,K=!1,G=(T)=>{if(K)return;K=!0,T()},R=()=>{if(!V)return;if(f){Bf("taskkill",["/pid",String(V),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-V,"SIGKILL")}catch{Y.kill("SIGKILL")}},D=(T)=>{A=!0,R(),G(()=>X(T))},U=setTimeout(()=>D(new m$(`Command timed out after ${Q}ms`,Q)),Q),F=()=>D(Error("Command was aborted"));if(J.signal)J.signal.addEventListener("abort",F);let O=()=>{clearTimeout(U),J.signal?.removeEventListener("abort",F)};Y.stdout?.on("data",(T)=>{H.append(T)}),Y.stderr?.on("data",(T)=>{B.append(T)}),Y.on("close",(T)=>{if(O(),A)return;let z=H.snapshot(),L=B.snapshot();if(T!==0){let P=T??1,S=W?z.text+(L.text?`
|
|
90
90
|
[stderr]
|
|
91
|
-
${
|
|
92
|
-
${S}`:`[Command exited with code ${P}]`;G(()=>
|
|
91
|
+
${L.text}`:""):z.text,b=z.dropped||W&&L.dropped,u=W?z.totalChars+L.totalChars:z.totalChars;if(b||S.length>Z)S=Kf(S,Z,u);let o=S.length>0?`[Command exited with code ${P}]
|
|
92
|
+
${S}`:`[Command exited with code ${P}]`;G(()=>X(new g4(P,o)))}else{let P=W?z.text+(L.text?`
|
|
93
93
|
[stderr]
|
|
94
|
-
${
|
|
95
|
-
`))}return J}function
|
|
94
|
+
${L.text}`:""):z.text;if(z.dropped||W&&L.dropped||P.length>Z){let b=W?z.totalChars+L.totalChars:z.totalChars;P=Kf(P,Z,b)}G(()=>j(P))}}),Y.on("error",(T)=>{O(),G(()=>X(Error(`Failed to execute command: ${T.message}`)))})})}function m4($={}){let{shell:J=yD(process.platform),timeoutMs:Q=30000,env:Z={},combineOutput:W=!0}=$,j=$.maxOutputChars??$.maxOutputBytes??x4;return(X,f,Y)=>{let V=typeof X!=="string";return bD({executable:V?X.command:J,args:V?X.args??[]:ED(J,X),cwd:f,env:Z},Y,Q,j,W)}}function Gf($,J){let Q=$.metadata?.[J];return typeof Q==="string"?Q:void 0}function Ff($,J){oj($f($.metadata),{tool_name:"run_commands",effective_timeout_ms:J.effectiveTimeoutMs,timeout_source:J.timeoutSource,command_count:J.commandCount,duration_ms:J.durationMs,ulid:$.sessionId,mode:Gf($,"mode"),source:Gf($,"source"),session_id:$.sessionId,agent_id:$.agentId,conversation_id:$.conversationId,run_id:$.runId,iteration:$.iteration,tool_call_id:$.toolCallId})}function hD($){let J=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return J?.[1]??J?.[2]??J?.[3]}function kD($){let J=[];for(let Q=0;Q<$.length;Q+=1){let Z=$[Q],W=hD(Z);if(!W){J.push(Z);continue}let j=$.findIndex((f,Y)=>Y>Q&&f.trim()===W);if(j===-1){J.push(Z);continue}let X=[Z];while(Q<j){Q+=1;let f=$[Q];X.push(f)}J.push(X.join(`
|
|
95
|
+
`))}return J}function SZ($,J={}){let Q=J.fileReadTimeoutMs??1e4;return y1({name:"read_files",description:`Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. When you already know multiple files you need, read them together in one call, and call this tool in the same response as other independent tool calls. Each read returns at most ${r2} lines / ~${Math.round(K5/1024)}k characters; longer files report their total line count, page through them with start_line/end_line. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. `,inputSchema:H1(S4),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(Z,W)=>{let j=E1(Qf,Z),X;if(typeof j==="string")X=[{path:j}];else if(Array.isArray(j))X=j.map((f)=>typeof f==="string"?{path:f}:f);else if("files"in j)X=(Array.isArray(j.files)?j.files:[j.files]).map((Y)=>typeof Y==="string"?{path:Y}:Y);else if("file_paths"in j)X=(Array.isArray(j.file_paths)?j.file_paths:[j.file_paths]).map((Y)=>({path:Y}));else if("paths"in j)X=(Array.isArray(j.paths)?j.paths:[j.paths]).map((Y)=>typeof Y==="string"?{path:Y}:Y);else X=[j];return Promise.all(X.map(async(f)=>{let Y=Vf(f);if(Y)return{query:A5(f),result:"",error:`Invalid file range: ${Y}`,success:!1};try{let V=await V1($(f,W),Q,`File read timed out after ${Q}ms`);return{query:A5(f),result:V,success:!0}}catch(V){let H=X$(V);return{query:A5(f),result:"",error:`Error reading file: ${H}`,success:!1}}}))}})}function CZ($,J={}){let Q=J.searchTimeoutMs??30000,Z=J.cwd??process.cwd();return y1({name:"search_codebase",description:`Perform regex pattern searches across the codebase. Supports multiple parallel searches. When several search patterns could be useful and do not depend on each other, run them together in one call, and call this tool in the same response as other independent tool calls. Use for finding code patterns, function definitions, class names, imports, etc. Output beyond ~${Math.round(i2/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:H1(C4),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(W,j)=>{let X=E1(Zf,W),f=Array.isArray(X)?X:typeof X==="object"?Array.isArray(X.queries)?X.queries:[X.queries]:[X];return Promise.all(f.map(async(Y)=>{try{let V=await V1($(Y,Z,j),Q,`Search timed out after ${Q}ms`);return{query:Y,result:V,success:!0}}catch(V){let H=X$(V);return{query:Y,result:"",error:`Search failed: ${H}`,success:!1}}}))}})}function yZ($,J={}){let Q=J.bashTimeoutMs??30000,Z=J.bashTimeoutMs===void 0?"default_setting":"configured_setting",W=J.cwd??process.cwd();return y1({name:"run_commands",description:`Run shell commands from the root of the workspace. Use for listing files, checking git status, running builds, executing tests, etc. Commands should be properly shell-escaped and targeted to avoid error or timeout. Include multiple commands in the same call when they are independent complete shell commands and safe to run concurrently; multiline scripts and heredocs must be a single command string. When independent reads, searches, or edits are also needed, call those tools in the same response. Output beyond ~${Math.round(x4/1000)}k characters is middle-truncated (start and end preserved); pipe through grep/head/tail when you need specific sections of large output. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.`,inputSchema:H1(p2),timeoutMs:Q*2,retryable:!1,maxRetries:0,execute:async(j,X)=>{let f=E1(Wf,j),Y;if(typeof f==="string")Y=[f];else if(Array.isArray(f))Y=f;else if("commands"in f)Y=Array.isArray(f.commands)?f.commands:[f.commands];else if("command"in f)Y=[f.command];else Y=[f.cmd];return Y=kD(Y),Promise.all(Y.map(async(V)=>{let H=Date.now(),B=NZ(V);try{let A=await V1($(V,W,X),Q,`Command timed out after ${Q}ms`);return{query:B,result:A,success:!0}}catch(A){if(A instanceof m$)Ff(X,{effectiveTimeoutMs:A.timeoutMs,timeoutSource:Z,commandCount:Y.length,durationMs:Date.now()-H});if(A instanceof g4)return{query:B,result:A.output,error:A.message,success:!1};let K=X$(A);return{query:B,result:"",error:`Command failed: ${K}`,success:!1}}}))}})}function EZ($,J={}){let Q=J.bashTimeoutMs??30000,Z=J.bashTimeoutMs===void 0?"default_setting":"configured_setting",W=J.cwd??process.cwd();return y1({name:"run_commands",description:`Run shell commands from the root of the workspace in Windows environment. Use for listing files, checking git status, running builds, executing tests, etc. Output beyond ~${Math.round(x4/1000)}k characters is middle-truncated (start and end preserved); filter output when you need specific sections. Prefer structured { command, args } entries for portability; plain string commands should be properly shell-escaped. Include multiple commands in the same call when they are independent and safe to run concurrently. When independent reads, searches, or edits are also needed, call those tools in the same response.`,inputSchema:H1(MZ),timeoutMs:Q*2,retryable:!1,maxRetries:0,execute:async(j,X)=>{let f=Hf(j);return Promise.all(f.map(async(Y)=>{let V=Date.now(),H=NZ(Y);try{let B=await V1($(Y,W,X),Q,`Command timed out after ${Q}ms`);return{query:H,result:B,success:!0}}catch(B){if(B instanceof m$)Ff(X,{effectiveTimeoutMs:B.timeoutMs,timeoutSource:Z,commandCount:f.length,durationMs:Date.now()-V});if(B instanceof g4)return{query:H,result:B.output,error:B.message,success:!1};let A=X$(B);return{query:H,result:"",error:`Command failed: ${A}`,success:!1}}}))}})}function bZ($,J={}){let Q=J.webFetchTimeoutMs??30000;return y1({name:"fetch_web_content",description:"Fetch content from URLs and analyze them using the provided prompts. Use for retrieving documentation, API references, or any web content. Each request includes a URL and a prompt describing what information to extract. Fetch independent URLs together in one call, and call this tool in the same response as other independent tool calls.",inputSchema:H1(y4),timeoutMs:Q*2,retryable:!0,maxRetries:2,execute:async(Z,W)=>{let j=E1(y4,Z);return Promise.all(j.requests.map(async(X)=>{try{let f=await V1($(X.url,X.prompt,W),Q,`Web fetch timed out after ${Q}ms`);return{query:X.url,result:f,success:!0}}catch(f){let Y=X$(f);return{query:X.url,result:"",error:`Error fetching web content: ${Y}`,success:!1}}}))}})}var ID=`Use \`apply_patch\` to edit files with the canonical freeform patch grammar. Pass the patch text directly as the \`input\` string. Prefer the exact format below:
|
|
96
96
|
|
|
97
97
|
*** Begin Patch
|
|
98
98
|
*** Update File: path/to/file.ts
|
|
@@ -128,97 +128,109 @@ Example:
|
|
|
128
128
|
</div>
|
|
129
129
|
);
|
|
130
130
|
}
|
|
131
|
-
*** End Patch`;function
|
|
132
|
-
`),W=0,j=[d.END,d.UPDATE,d.DELETE,d.ADD,d.END_FILE];while(!j.some((
|
|
133
|
-
${this.lines[this.index]}`);if(
|
|
131
|
+
*** End Patch`;function hZ($,J={}){let Q=J.applyPatchTimeoutMs??30000,Z=J.cwd??process.cwd();return y1({name:"apply_patch",description:ID,inputSchema:H1(b4),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(W,j)=>{let X=E1(ff,W),f=typeof X==="string"?X:X.input;try{return{query:"apply_patch",result:await V1($({input:f},Z,j),Q,`apply_patch timed out after ${Q}ms`),success:!0}}catch(Y){return{query:"apply_patch",result:"",error:`apply_patch failed: ${X$(Y)}`,success:!1}}}})}function kZ($,J={}){let Q=J.editorTimeoutMs??30000,Z=J.cwd??process.cwd();return y1({name:"editor",description:"An editor for controlled filesystem edits on the text file at the provided path. Provide `insert_line` to insert `new_text` at a specific line number. Otherwise, the tool replaces `old_text` with `new_text`, or creates the file with `new_text` if file does not exist. Use this tool for making small, precise edits to existing files or creating new files over shell commands. If several edits to different files or non-overlapping regions are already known, emit multiple editor tool calls in the same response instead of serializing them across turns.",inputSchema:H1(E4),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(W,j)=>{let X=E1(E4,W),f=X.insert_line==null?"edit":"insert",Y=Yf(X);if(Y)return{query:`${f}:${X.path}`,result:"",error:Y,success:!1};try{let V=await V1($(X,Z,j),Q,`Editor operation timed out after ${Q}ms`);return{query:`${f}:${X.path}`,result:V,success:!0}}catch(V){let H=X$(V);return{query:`${f}:${X.path}`,result:"",error:`Editor operation failed: ${H}`,success:!1}}}})}function v$($,J={}){let Q=J.skillsTimeoutMs??15000,Z='Execute a skill within the main conversation. When users ask you to perform tasks, check if any available skills match. When users reference a slash command, invoke it with this tool. Input: `skill` (required) and optional `args`. Example: `skill: "pdf"`, `skill: "commit", args: "-m \\"Fix bug\\""`, `skill: "review-pr", args: "123"`, `skill: "ms-office-suite:pdf"`. When a skill matches the user\'s request, invoking this tool is a blocking requirement before any other response. Never mention a skill without invoking this tool.',W=y1({name:"skills",description:Z,inputSchema:H1(h4),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(j,X)=>{let f=E1(h4,j);return V1($(f.skill,f.args||void 0,X),Q,`Skills operation timed out after ${Q}ms`)}});return Object.defineProperty(W,"description",{get(){let j=$.configuredSkills?.filter((X)=>!X.disabled).map((X)=>X.name);if(j&&j.length>0)return`${Z} Available skills: ${j.join(", ")}.`;return Z},enumerable:!0,configurable:!0}),W}function IZ($){return{name:"ask_question",description:"Ask user a question for clarifying or gathering information needed to complete the task. For example, ask the user clarifying questions about a key implementation decision. You should only ask one question. Provide an array of 2-5 options for the user to choose from. Never include an option to toggle to Act mode.",inputSchema:H1(k4),retryable:!1,maxRetries:0,execute:async(J,Q)=>{let Z=E1(k4,J);return $(Z.question,Z.options,Q)}}}function xZ($,J={}){let Q=J.submitTimeoutMs??15000;return y1({name:"submit_and_exit",description:"Submit the final answer and exit the conversation. For example, submit a summary of the investigation and confirm the issue is resolved. You should only submit once all necessary steps are completed. Make sure to verify your output matches the expected format, data types, and file locations specified. Provide a summary of the investigation and confirm the issue is resolved.",inputSchema:H1(I4),lifecycle:{completesRun:!0},timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=E1(I4,Z);return V1($(j.summary,j.verified,W),Q,`submit_and_exit timed out after ${Q}ms`)}})}function f$($){let{executors:J,enableReadFiles:Q=!0,enableSearch:Z=!0,enableBash:W=!0,enableWebFetch:j=!0,enableApplyPatch:X=!1,enableEditor:f=!0,enableSkills:Y=!0,enableAskQuestion:V=!0,enableSubmitAndExit:H=!1,...B}=$,A=[];if(Q&&J.readFile)A.push(SZ(J.readFile,B));if(Z&&J.search)A.push(CZ(J.search,B));if(W&&J.bash)if(process.platform==="win32")A.push(EZ(J.bash,B));else A.push(yZ(J.bash,B));if(j&&J.webFetch)A.push(bZ(J.webFetch,B));if(f&&J.editor)A.push(kZ(J.editor,B));else if(X&&J.applyPatch)A.push(hZ(J.applyPatch,B));if(Y&&J.skills)A.push(v$(J.skills,B));let K=H?J.submit:void 0;if(V&&J.askQuestion&&!K)A.push(IZ(J.askQuestion));if(K)A.push(xZ(K,B));return A}import*as m0 from"node:fs/promises";import*as v0 from"node:path";var d={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},Uf=["%%bash","apply_patch","EOF","```"];class W0 extends Error{constructor($){super($);this.name="DiffError"}}function g0($){let J={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(Q)=>J[Q]??Q).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class gZ{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor($,J){this.lines=$;this.currentFiles=J}parse(){this.skipBeginSentinel();while(this.hasMoreLines()&&!this.isEndMarker())this.parseNextAction();if(this.patch.warnings?.length===0)delete this.patch.warnings;return{patch:this.patch,fuzz:this.fuzz}}addWarning($){if(!this.patch.warnings)this.patch.warnings=[];this.patch.warnings.push($)}skipBeginSentinel(){if(this.lines[this.index]?.startsWith(d.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(d.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(d.UPDATE)){this.parseUpdate($.substring(d.UPDATE.length).trim());return}if($?.startsWith(d.DELETE)){this.parseDelete($.substring(d.DELETE.length).trim());return}if($?.startsWith(d.ADD)){this.parseAdd($.substring(d.ADD.length).trim());return}throw new W0(`Unknown line while parsing: ${$}`)}checkDuplicate($,J){if($ in this.patch.actions)throw new W0(`Duplicate ${J} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let J=this.lines[this.index]?.startsWith(d.MOVE)?(this.lines[this.index++]??"").substring(d.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new W0(`Update File Error: Missing File: ${$}`);let Q=this.currentFiles[$]??"",Z=this.parseUpdateFile(Q,$);Z.movePath=J,this.patch.actions[$]=Z,this.currentPath=void 0}parseUpdateFile($,J){let Q={type:"update",chunks:[]},Z=$.split(`
|
|
132
|
+
`),W=0,j=[d.END,d.UPDATE,d.DELETE,d.ADD,d.END_FILE];while(!j.some((X)=>this.lines[this.index]?.startsWith(X.trim()))){let X=this.lines[this.index],f=X?.startsWith("@@ ")?X.substring(3):void 0;if(f!==void 0||(X==="@@"?X:void 0)!==void 0)this.index++;else if(W!==0)throw new W0(`Invalid Line:
|
|
133
|
+
${this.lines[this.index]}`);if(f?.trim()){let D=g0(f.trim());for(let U=W;U<Z.length;U++){let F=Z[U];if(F&&(g0(F)===D||g0(F.trim())===D)){if(W=U+1,g0(F.trim())===D&&g0(F)!==D)this.fuzz++;break}}}let[V,H,B,A]=mD(this.lines,this.index),[K,G,R]=gD(Z,V,W,A);if(K===-1){let D=V.join(`
|
|
134
134
|
`);this.addWarning({path:this.currentPath||J,chunkIndex:Q.chunks.length,message:`Could not find matching context (similarity: ${R.toFixed(2)}). Chunk skipped.`,context:D.length>200?`${D.substring(0,200)}...`:D}),this.index=B}else{this.fuzz+=G;for(let D of H)D.origIndex+=K,Q.chunks.push(D);W=K+V.length,this.index=B}}return Q}parseDelete($){if(this.checkDuplicate($,"delete"),!($ in this.currentFiles))throw new W0(`Delete File Error: Missing File: ${$}`);this.patch.actions[$]={type:"delete",chunks:[]},this.index++}parseAdd($){if(this.checkDuplicate($,"add"),$ in this.currentFiles)throw new W0(`Add File Error: File already exists: ${$}`);this.index++;let J=[],Q=[d.END,d.UPDATE,d.DELETE,d.ADD];while(this.hasMoreLines()&&!Q.some((Z)=>this.lines[this.index]?.startsWith(Z.trim()))){let Z=this.lines[this.index++];if(Z===void 0)break;if(!Z.startsWith("+"))throw new W0(`Invalid Add File line (missing '+'): ${Z}`);J.push(Z.substring(1))}this.patch.actions[$]={type:"add",newFile:J.join(`
|
|
135
|
-
`),chunks:[]}}}function
|
|
136
|
-
`));for(let V=
|
|
137
|
-
`));if(H===
|
|
135
|
+
`),chunks:[]}}}function Df($,J){let Q=$.length>J.length?$:J,Z=$.length>J.length?J:$;if(Q.length===0)return 1;let W=xD(Z,Q);return(Q.length-W)/Q.length}function xD($,J){let Q=J.length+1,Z=$.length+1,W=Array(Q*Z).fill(0),j=(f,Y)=>W[f*Z+Y]??0,X=(f,Y,V)=>{W[f*Z+Y]=V};for(let f=0;f<=J.length;f++)X(f,0,f);for(let f=0;f<=$.length;f++)X(0,f,f);for(let f=1;f<=J.length;f++)for(let Y=1;Y<=$.length;Y++)if(J[f-1]===$[Y-1])X(f,Y,j(f-1,Y-1));else X(f,Y,1+Math.min(j(f-1,Y-1),j(f,Y-1),j(f-1,Y)));return j(J.length,$.length)}function gD($,J,Q,Z){if(J.length===0)return[Q,0,1];let W=0,j=(X)=>{let f=g0(J.join(`
|
|
136
|
+
`));for(let V=X;V<$.length;V++){let H=g0($.slice(V,V+J.length).join(`
|
|
137
|
+
`));if(H===f)return[V,0,1];let B=Df(H,f);if(B>W)W=B}for(let V=X;V<$.length;V++){let H=g0($.slice(V,V+J.length).map((A)=>A.trimEnd()).join(`
|
|
138
138
|
`)),B=g0(J.map((A)=>A.trimEnd()).join(`
|
|
139
|
-
`));if(H===B)return[V,1,1]}for(let V=
|
|
139
|
+
`));if(H===B)return[V,1,1]}for(let V=X;V<$.length;V++){let H=g0($.slice(V,V+J.length).map((A)=>A.trim()).join(`
|
|
140
140
|
`)),B=g0(J.map((A)=>A.trim()).join(`
|
|
141
|
-
`));if(H===B)return[V,100,1]}let Y=0.66;for(let V=
|
|
142
|
-
`)),B=
|
|
143
|
-
`).map((J)=>J.replace(/\r$/,""))}function
|
|
144
|
-
`),W=[],j=0;for(let
|
|
145
|
-
`)}async function
|
|
146
|
-
`)}return j}function
|
|
141
|
+
`));if(H===B)return[V,100,1]}let Y=0.66;for(let V=X;V<$.length;V++){let H=g0($.slice(V,V+J.length).join(`
|
|
142
|
+
`)),B=Df(H,f);if(B>=Y)return[V,1000,B];if(B>W)W=B}return[-1,0,W]};if(Z){let[X,f,Y]=j($.length-J.length);if(X!==-1)return[X,f,Y];return[X,f,Y]=j(Q),[X,f+1e4,Y]}return j(Q)}function mD($,J){let Q=J,Z=[],W=[],j=[],X=[],f="keep",Y=["@@",d.END,d.UPDATE,d.DELETE,d.ADD,d.END_FILE];while(Q<$.length){let V=$[Q];if(!V||Y.some((A)=>V.startsWith(A.trim())))break;if(V==="***")break;if(V.startsWith("***"))throw new W0(`Invalid line: ${V}`);Q++;let H=f,B=V;if(B[0]==="+")f="add";else if(B[0]==="-")f="delete";else if(B[0]===" ")f="keep";else f="keep",B=` ${B}`;if(B=B.slice(1),f==="keep"&&H!==f){if(j.length||W.length)X.push({origIndex:Z.length-W.length,delLines:W,insLines:j});W=[],j=[]}if(f==="delete")W.push(B),Z.push(B);else if(f==="add")j.push(B);else Z.push(B)}if(j.length||W.length)X.push({origIndex:Z.length-W.length,delLines:W,insLines:j});if(Q<$.length&&$[Q]===d.END_FILE)return Q++,[Z,X,Q,!0];return[Z,X,Q,!1]}function mZ($,J,Q){let Z=v0.isAbsolute(J),W=Z?v0.normalize(J):v0.resolve($,J);if(!Q||Z)return W;let j=v0.relative($,W);if(j.startsWith("..")||v0.isAbsolute(j))throw new W0(`Path must stay within cwd: ${J}`);return W}function vD($){return $.split(`
|
|
143
|
+
`).map((J)=>J.replace(/\r$/,""))}function Rf($){if($.trim()==="")return!1;return Uf.some((J)=>$.startsWith(J))}function cD($){let J=0,Q=$.length;while(J<Q&&Rf($[J]??""))J++;while(Q>J&&Rf($[Q-1]??""))Q--;return $.slice(J,Q)}function uD($){let J=vD($),Q=J.findIndex((X)=>X.startsWith(d.BEGIN)),Z=-1;for(let X=J.length-1;X>=0;X--)if(J[X]?.startsWith(d.END)){Z=X;break}if(Q!==-1||Z!==-1){if(Q===-1||Z===-1||Z<Q)throw new W0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:J.slice(Q,Z+1)}}let W=cD(J);while(W.length>0&&W[0]==="")W.shift();while(W.length>0&&W[W.length-1]==="")W.pop();return{lines:[d.BEGIN,...W,d.END]}}function dD($,J){let Q=new Set;for(let Z of $)for(let W of J)if(Z.startsWith(W)){Q.add(Z.substring(W.length).trim());break}return[...Q]}function lD($,J,Q){if(J.length===0)return $;let Z=$.split(`
|
|
144
|
+
`),W=[],j=0;for(let X of J){if(X.origIndex>Z.length)throw new W0(`${Q}: chunk.origIndex ${X.origIndex} > lines.length ${Z.length}`);if(j>X.origIndex)throw new W0(`${Q}: currentIndex ${j} > chunk.origIndex ${X.origIndex}`);W.push(...Z.slice(j,X.origIndex)),W.push(...X.insLines),j=X.origIndex+X.delLines.length}return W.push(...Z.slice(j)),W.join(`
|
|
145
|
+
`)}async function pD($,J,Q,Z){let W=dD($,[d.UPDATE,d.DELETE]),j={};for(let X of W){let f=mZ(J,X,Z),Y;try{Y=await m0.readFile(f,Q)}catch{throw new W0(`File not found: ${X}`)}j[X]=Y.replace(/\r\n/g,`
|
|
146
|
+
`)}return j}function rD($,J){let Q={};for(let[Z,W]of Object.entries($.actions))switch(W.type){case"delete":Q[Z]={type:"delete",oldContent:J[Z]};break;case"add":if(W.newFile===void 0)throw new W0("ADD action without file content");Q[Z]={type:"add",newContent:W.newFile};break;case"update":Q[Z]={type:"update",oldContent:J[Z],newContent:lD(J[Z]??"",W.chunks,Z),movePath:W.movePath};break}return Q}function iD($){let J=[`Patch could not be applied because ${$.length} hunk${$.length===1?"":"s"} did not match the current file content.`];for(let Q of $){let Z=Q.chunkIndex===void 0?"unknown":String(Q.chunkIndex+1);if(J.push(`${Q.path}: hunk ${Z}: ${Q.message}`),Q.context)J.push(`Context:
|
|
147
147
|
${Q.context}`)}return J.join(`
|
|
148
|
-
`)}async function
|
|
149
|
-
`)}}import*as Z1 from"node:fs/promises";import*as Q1 from"node:path";function
|
|
148
|
+
`)}async function nD($,J,Q,Z){let W=[];for(let[j,X]of Object.entries($)){let f=mZ(J,j,Z);switch(X.type){case"delete":await m0.rm(f,{force:!0}),W.push(`${j}: [deleted]`);break;case"add":if(X.newContent===void 0)throw new W0(`Cannot create ${j} with no content`);await m0.mkdir(v0.dirname(f),{recursive:!0}),await m0.writeFile(f,X.newContent,{encoding:Q}),W.push(j);break;case"update":{if(X.newContent===void 0)throw new W0(`UPDATE change for ${j} has no new content`);if(X.movePath){let Y=mZ(J,X.movePath,Z);await m0.mkdir(v0.dirname(Y),{recursive:!0}),await m0.writeFile(Y,X.newContent,{encoding:Q}),await m0.rm(f,{force:!0}),W.push(`${j} -> ${X.movePath}`)}else await m0.writeFile(f,X.newContent,{encoding:Q}),W.push(j);break}}}return W}function v4($={}){let{encoding:J="utf-8",restrictToCwd:Q=!0}=$;return async(Z,W,j)=>{let X=uD(Z.input),f=await pD(X.lines,W,J,Q),Y=new gZ(X.lines,f),{patch:V,fuzz:H}=Y.parse();if(V.warnings&&V.warnings.length>0)throw new W0(iD(V.warnings));let B=rD(V,f),A=await nD(B,W,J,Q),K=["Successfully applied patch to the following files:"];for(let G of A)K.push(G);if(H>0)K.push(`Note: Patch applied with fuzz factor ${H}`);return K.join(`
|
|
149
|
+
`)}}import*as Z1 from"node:fs/promises";import*as Q1 from"node:path";function aD($,J,Q){let Z=Q1.isAbsolute(J),W=Z?Q1.normalize(J):Q1.resolve($,J);if(!Q)return W;if(Z)return W;let j=Q1.relative($,W);if(j.startsWith("..")||Q1.isAbsolute(j))throw Error(`Path must stay within cwd: ${J}`);return W}function sD($,J){if(J.length===0)return 0;return $.split(J).length-1}function oD($,J,Q){let Z=$.split(`
|
|
150
150
|
`),W=J.split(`
|
|
151
|
-
`),j=Math.max(Z.length,W.length),
|
|
152
|
-
`)}async function
|
|
153
|
-
${Y}`}async function
|
|
154
|
-
`),
|
|
151
|
+
`),j=Math.max(Z.length,W.length),X=["```diff"],f=0;for(let Y=0;Y<j;Y++){if(f>=Q){X.push("... diff truncated ...");break}let V=Z[Y],H=W[Y];if(V===H)continue;let B=Y+1;if(V!==void 0)X.push(`-${B}: ${V}`),f++;if(H!==void 0&&f<Q)X.push(`+${B}: ${H}`),f++}return X.push("```"),X.join(`
|
|
152
|
+
`)}async function tD($,J,Q){return await Z1.mkdir(Q1.dirname($),{recursive:!0}),await Z1.writeFile($,J,{encoding:Q}),`File created successfully at: ${$}`}async function eD($){try{return await Z1.access($),!0}catch{return!1}}async function $U($,J,Q,Z,W){let j=await Z1.readFile($,Z),X=sD(j,J);if(X===0)throw Error(`No replacement performed: text not found in ${$}.`);if(X>1)throw Error(`No replacement performed: multiple occurrences of text found in ${$}.`);let f=j.replace(J,Q??"");await Z1.writeFile($,f,{encoding:Z});let Y=oD(j,f,W);return`Edited ${$}
|
|
153
|
+
${Y}`}async function JU($,J,Q,Z){let j=(await Z1.readFile($,Z)).split(`
|
|
154
|
+
`),X=j.length+1;if(J<1||J>X)throw Error(`Invalid insert_line: ${J}. insert_line must be a positive one-based boundary line in the range 1-${X}. Use ${X} to append at EOF.`);let f=J-1;return j.splice(f,0,...Q.split(`
|
|
155
155
|
`)),await Z1.writeFile($,j.join(`
|
|
156
|
-
`),{encoding:Z}),`Inserted content at line ${J} in ${$}.`}function
|
|
157
|
-
`),
|
|
158
|
-
|
|
159
|
-
[Showing lines ${
|
|
160
|
-
`).filter((D)=>D.trim());for(let D of R){if(G.length>=Q)break;let U=JSON.parse(D);if(U.type==="match"){let F=U.data,O=[];if(U.data.submatches&&U.data.submatches.length>0){let T=U.data.submatches[0];G.push({file:F.path.text,line:F.line_number,column:(T?.start??0)+1,match:T?.match?.text??"",context:O})}}else if(U.type==="context"&&G.length>0){let F=G[G.length-1],O=U.data.line_number===F.line?">":" ";F.context.push(`${O} ${U.data.line_number}: ${U.data.lines?.text??U.data.line?.text??""}`)}}A(G.length>0?G:null)}catch{A(null)}return}A(null)}),
|
|
161
|
-
`))}let K;try{K=new RegExp(Y,"gim")}catch(F){throw Error(`Invalid regex pattern: ${Y}. ${F instanceof Error?F.message:""}`)}let G=[],R=0,D=await b1(V);for(let F of D){if(H.signal?.aborted)throw Error("Search operation aborted");if(!
|
|
162
|
-
`);for(let
|
|
163
|
-
Searched ${R} files.`;let U=[`Found ${G.length} result${G.length===1?"":"s"} for pattern: ${Y}`,`Searched ${R} files.`,""];for(let F of G)U.push(`${F.file}:${F.line}:${F.column}`),U.push(...F.context),U.push("");if(G.length>=Z)U.push(`(Showing first ${Z} results. Refine your search for more specific results.)`);return
|
|
164
|
-
`))}}function
|
|
156
|
+
`),{encoding:Z}),`Inserted content at line ${J} in ${$}.`}function c4($={}){let{encoding:J="utf-8",restrictToCwd:Q=!0,maxDiffLines:Z=200}=$;return async(W,j,X)=>{let f=aD(j,W.path,Q);if(W.insert_line!=null)return JU(f,W.insert_line,W.new_text,J);if(!await eD(f))return tD(f,W.new_text,J);if(W.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return $U(f,W.old_text,W.new_text,J,Z)}}import{createReadStream as QU}from"node:fs";import*as G5 from"node:fs/promises";import*as Y$ from"node:path";import{createInterface as ZU}from"node:readline";import{resolveExistingFilePath as WU}from"@cline/shared/storage";var jU=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),XU={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},Lf=1e8,fU=50000;function zf($){let{reason:J}=$;if(J instanceof Error)return J;if(J!==void 0)return Error(String(J));return Error("File read was aborted")}async function YU($,J,Q,Z,W,j){if(j?.aborted)throw zf(j);let X=Math.max(Z??1,1),f=W??Number.POSITIVE_INFINITY,Y=Number.isFinite(f),V=Y?f:X+fU-1,H=[],B=0,A=0,K=!1,G=!1,R=Number.isFinite(f)?Math.min(f,X+r2-1):X+r2-1,D=Q?String(R).length+3:0,U=QU($,{encoding:J}),F=ZU({input:U,crlfDelay:Number.POSITIVE_INFINITY}),O=j?()=>U.destroy(zf(j)):void 0;if(j&&O)j.addEventListener("abort",O,{once:!0});try{for await(let b of F){if(A+=1,A>f){A=f;break}if(!Y&&K&&A>=V){G=!0;break}if(A<X||K)continue;if(H.length>=r2){K=!0;continue}let u=b;if(u.length>wZ)u=`${u.slice(0,wZ)} [line truncated]`;let o=B+u.length+D+1;if(o>K5&&H.length>0){K=!0;continue}H.push({lineNumber:A,text:u}),B=o}}finally{if(j&&O)j.removeEventListener("abort",O);F.close(),U.destroy()}let T=String(H[H.length-1]?.lineNumber??A).length,z=H.map(({lineNumber:b,text:u})=>Q?`${String(b).padStart(T," ")} | ${u}`:u).join(`
|
|
157
|
+
`),L=H[H.length-1]?.lineNumber;if(L===void 0)return z;let P=Math.min(f,A);if(L>=P)return z;let S=G?`${A}+ lines`:P;return`${z}
|
|
158
|
+
|
|
159
|
+
[Showing lines ${X}-${L} of ${S}. Use start_line/end_line to read other sections.]`}function u4($={}){let{maxFileSizeBytes:J,encoding:Q,includeLineNumbers:Z}={...XU,...$};return async(W,j)=>{let{path:X,start_line:f,end_line:Y}=W,V=Y$.isAbsolute(X)?Y$.normalize(X):Y$.resolve(process.cwd(),X),H=WU(V)??V,B=Y$.extname(H).toLowerCase(),A=jU.get(B),K=await G5.stat(H);if(!K.isFile())throw Error(`Path is not a file: ${H}`);if(A){if(K.size>J)throw Error(`Image file too large: ${K.size} bytes (max: ${J} bytes).`);if(j.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let G=await G5.readFile(H);return[{type:"text",text:"Successfully read image"},{type:"image",data:G.toString("base64"),mediaType:A}]}if(K.size>Lf)throw Error(`Text file too large to stream safely: ${K.size} bytes (max: ${Lf} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return YU(H,Q,Z,f,Y,j.signal)}}import{spawn as wf}from"node:child_process";import*as Sf from"node:fs/promises";import*as U5 from"node:path";var Pf={};w(Pf,{prewarmFileIndex:()=>D5,getFileIndex:()=>b1,enrichPromptWithMentions:()=>a2});import{spawn as VU}from"node:child_process";import{readdir as HU}from"node:fs/promises";import cZ from"node:path";import{isMainThread as Tf,parentPort as _f,Worker as BU}from"node:worker_threads";var AU=15000,KU=600000,GU=1000,FU=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function Of($){let J=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return J==="EACCES"||J==="EPERM"||J==="ENOENT"}var n2=new Map;function DU(){if(!Tf)return!1;return!0}function UU($){if(n2.size<=1)return;for(let[J,Q]of n2.entries()){if(Q.pending)continue;if($-Q.lastAccessedAt>KU)n2.delete(J)}}function RU($,J){return cZ.relative($,J).split(cZ.sep).join("/")}async function LU($){let Q=(await new Promise((Z,W)=>{let j=VU("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"],windowsHide:!0}),X="",f="";j.stdout.on("data",(Y)=>{X+=Y.toString()}),j.stderr.on("data",(Y)=>{f+=Y.toString()}),j.on("error",W),j.on("close",(Y)=>{if(Y===0){Z(X);return}W(Error(f||`rg exited with code ${Y}`))})})).split(/\r?\n/).map((Z)=>Z.trim()).filter((Z)=>Z.length>0).map((Z)=>Z.replace(/\\/g,"/"));return new Set(Q)}async function Mf($,J,Q){let Z;try{Z=await HU(J,{withFileTypes:!0})}catch(W){if(Of(W))return;throw W}for(let W of Z){let j=cZ.join(J,W.name);if(W.isDirectory()){if(FU.has(W.name))continue;try{await Mf($,j,Q)}catch(X){if(Of(X))continue;throw X}continue}if(W.isFile())Q.add(RU($,j))}}async function zU($){let J=new Set;return await Mf($,$,J),J}async function F5($){try{return await LU($)}catch{return zU($)}}function _U(){if(Tf||!_f)return;let $=_f;$.on("message",(J)=>{if(J.type!=="index")return;F5(J.cwd).then((Q)=>{let Z={type:"indexResult",requestId:J.requestId,files:Array.from(Q)};$.postMessage(Z)}).catch((Q)=>{let Z={type:"indexResult",requestId:J.requestId,error:Q instanceof Error?Q.message:"Failed to build file index"};$.postMessage(Z)})})}class qf{worker=new BU(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",($)=>{if($.type!=="indexResult")return;let J=this.pending.get($.requestId);if(!J)return;if(this.pending.delete($.requestId),$.error){J.reject(Error($.error));return}J.resolve($.files??[])}),this.worker.on("error",($)=>{this.flushPending($)}),this.worker.on("exit",($)=>{if($!==0)this.flushPending(Error(`File index worker exited with code ${$}`))})}requestIndex($){let J=++this.nextRequestId,Q=new Promise((W,j)=>{let X=setTimeout(()=>{this.pending.delete(J),W(null)},GU);X.unref(),this.pending.set(J,{resolve:(f)=>{clearTimeout(X),W(f)},reject:(f)=>{clearTimeout(X),j(f)}})}),Z={type:"index",requestId:J,cwd:$};return this.worker.postMessage(Z),Q}flushPending($){for(let[J,Q]of this.pending.entries())Q.reject($),this.pending.delete(J)}}_U();var vZ;function OU(){if(!DU())return null;if(vZ===void 0)vZ=new qf;return vZ}async function TU($){let J=OU();if(!J)return F5($);try{let Q=await J.requestIndex($);if(Q===null)return F5($);return new Set(Q)}catch{return F5($)}}async function b1($,J={}){let Q=J.ttlMs??AU,Z=Date.now();UU(Z);let W=n2.get($);if(W&&Q>0&&Z-W.lastBuiltAt<=Q&&W.files.size>0)return W.lastAccessedAt=Z,W.files;if(W?.pending)return W.lastAccessedAt=Z,W.pending;let j=TU($).then((X)=>{return n2.set($,{files:X,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),X});return n2.set($,{files:W?.files??new Set,lastBuiltAt:W?.lastBuiltAt??0,lastAccessedAt:Z,pending:j}),j}async function D5($,J={}){await b1($,{...J,ttlMs:0})}import{stat as MU}from"node:fs/promises";import c$ from"node:path";var qU=/[),.:;!?`'"]+$/,PU=/^[(`'"]+/;function NU($){let J=$.matchAll(/(^|[\s])@([^\s]+)/g),Q=[];for(let Z of J){let W=(Z[2]??"").trim();if(W.length===0)continue;let j=W.replace(PU,"").replace(qU,"");if(j.length===0||j.includes("@"))continue;Q.push(j)}return Array.from(new Set(Q))}function wU($,J){let Q=$.replace(/\\/g,"/"),Z=c$.isAbsolute(Q)?c$.resolve(Q):c$.resolve(J,Q),W=c$.relative(J,Z);if(W.startsWith("..")||c$.isAbsolute(W))return;return W.split(c$.sep).join("/")}async function a2($,J,Q={}){let Z=NU($);if(Z.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:W,maxFileBytes:j,maxTotalBytes:X}=Q,f=await b1(J,{ttlMs:Q.ttlMs}),Y=[],V=[],H=[],B=0;for(let A of Z){if(W&&H.length>=W){V.push(A);continue}let K=wU(A,J);if(!K||!f.has(K)){V.push(A);continue}if(!j||!X){Y.push(K);continue}let G=c$.join(J,K);try{if(!(await MU(G)).isFile()){V.push(A);continue}let D=B+j;if(D>X){V.push(A);continue}B=D,Y.push(K)}catch{V.push(A)}}return{prompt:$,mentions:Z,matchedFiles:Y,ignoredMentions:V}}var SU=["ts","tsx","js","jsx","mjs","cjs","json","md","mdx","txt","yaml","yml","toml","py","rb","go","rs","java","kt","swift","c","cpp","h","hpp","css","scss","less","html","vue","svelte","sql","sh","bash","zsh","fish","ps1","env","gitignore","dockerignore","editorconfig"],CU=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],u$=null;function yU(){if(u$!==null)return Promise.resolve(u$);return new Promise(($)=>{let J=wf("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});J.on("close",(Q)=>{u$=Q===0,$(u$)}),J.on("error",()=>{u$=!1,$(!1)}),setTimeout(()=>{if(!J.killed)J.kill("SIGTERM");if(u$===null)u$=!1,$(!1)},1000)})}function EU($,J,Q,Z,W=5000,j){return new Promise((X)=>{let f=wf("rg",["--json",`--context=${Z}`,"--max-count=1","-i",$],{cwd:J,stdio:["ignore","pipe","pipe"],windowsHide:!0}),Y="",V=!1,H=()=>{if(!f.killed)f.kill("SIGTERM")},B=setTimeout(()=>{if(!V)V=!0,H(),X(null)},W),A=(K)=>{if(!V)V=!0,clearTimeout(B),H(),X(K)};if(j?.aborted){H(),X(null);return}j?.addEventListener("abort",()=>{A(null)}),f.stdout.on("data",(K)=>{Y+=K.toString()}),f.stderr.on("data",()=>{}),f.on("close",(K)=>{if(K===0||K===1){try{let G=[],R=Y.split(`
|
|
160
|
+
`).filter((D)=>D.trim());for(let D of R){if(G.length>=Q)break;let U=JSON.parse(D);if(U.type==="match"){let F=U.data,O=[];if(U.data.submatches&&U.data.submatches.length>0){let T=U.data.submatches[0];G.push({file:F.path.text,line:F.line_number,column:(T?.start??0)+1,match:T?.match?.text??"",context:O})}}else if(U.type==="context"&&G.length>0){let F=G[G.length-1],O=U.data.line_number===F.line?">":" ";F.context.push(`${O} ${U.data.line_number}: ${U.data.lines?.text??U.data.line?.text??""}`)}}A(G.length>0?G:null)}catch{A(null)}return}A(null)}),f.on("error",()=>{A(null)})})}function bU($,J,Q,Z){let W=$.split("/"),j=W[W.length-1]??"";if(W.length-1>Z)return!1;for(let Y=0;Y<W.length-1;Y++)if(J.has(W[Y]??""))return!1;let f=U5.posix.extname(j).slice(1).toLowerCase();return Q.has(f)||!f&&!j.startsWith(".")}function d4($={}){let{includeExtensions:J=SU,excludeDirs:Q=CU,maxResults:Z=100,contextLines:W=2,maxDepth:j=20}=$,X=new Set(Q),f=new Set(J.map((Y)=>Y.toLowerCase()));return async(Y,V,H)=>{if(H.signal?.aborted)throw Error("Search operation aborted");let B=await yU(),A=null;if(B)A=await EU(Y,V,Z,W,5000,H.signal);if(A){let F=[`Found ${A.length} result${A.length===1?"":"s"} for pattern: ${Y}`,""];for(let O of A)F.push(`${O.file}:${O.line}:${O.column}`),F.push(...O.context),F.push("");if(A.length>=Z)F.push(`(Showing first ${Z} results. Refine your search for more specific results.)`);return Nf(F.join(`
|
|
161
|
+
`))}let K;try{K=new RegExp(Y,"gim")}catch(F){throw Error(`Invalid regex pattern: ${Y}. ${F instanceof Error?F.message:""}`)}let G=[],R=0,D=await b1(V);for(let F of D){if(H.signal?.aborted)throw Error("Search operation aborted");if(!bU(F,X,f,j))continue;if(G.length>=Z)break;R++;let O=U5.join(V,F);try{let z=(await Sf.readFile(O,"utf-8")).split(`
|
|
162
|
+
`);for(let L=0;L<z.length;L++){let P=z[L];K.lastIndex=0;let S=K.exec(P);while(S!==null){if(G.length>=Z)break;let b=Math.max(0,L-W),u=Math.min(z.length-1,L+W),o=[];for(let J0=b;J0<=u;J0++){let t=J0===L?">":" ";o.push(`${t} ${J0+1}: ${z[J0]}`)}if(G.push({file:F,line:L+1,column:S.index+1,match:S[0],context:o}),S.index===K.lastIndex)K.lastIndex++;S=K.exec(P)}}}catch{}}if(G.length===0)return`No results found for pattern: ${Y}
|
|
163
|
+
Searched ${R} files.`;let U=[`Found ${G.length} result${G.length===1?"":"s"} for pattern: ${Y}`,`Searched ${R} files.`,""];for(let F of G)U.push(`${F.file}:${F.line}:${F.column}`),U.push(...F.context),U.push("");if(G.length>=Z)U.push(`(Showing first ${Z} results. Refine your search for more specific results.)`);return Nf(U.join(`
|
|
164
|
+
`))}}function Nf($){if($.length<=i2)return $;let J=Math.ceil(i2/2),Q=Math.max(1,i2-J);return`${$.slice(0,J)}
|
|
165
165
|
[... search output truncated: ${$.length} chars total. Narrow the pattern or scope to view the elided matches ...]
|
|
166
|
-
`+$.slice(-Q)}function
|
|
166
|
+
`+$.slice(-Q)}function hU($){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,`
|
|
167
167
|
`).replace(/<[^>]+>/g," ").replace(/ /g," ").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/&#(\d+);/g,(J,Q)=>String.fromCharCode(parseInt(Q,10))).replace(/\s+/g," ").replace(/\n\s+/g,`
|
|
168
168
|
`).replace(/\n{3,}/g,`
|
|
169
169
|
|
|
170
|
-
`).trim()}function
|
|
171
|
-
[Content truncated: showing first 50000 of ${
|
|
172
|
-
`)}catch(K){if(clearTimeout(B),K instanceof Error){if(K.name==="AbortError")throw Error(`Request timed out after ${J}ms`);throw K}throw Error(`Fetch failed: ${String(K)}`)}finally{if(Y.signal&&A)Y.signal.removeEventListener("abort",A)}}}function s2($={}){return{readFile:c4($.fileRead),search:u4($.search),bash:g4($.bash),webFetch:d4($.webFetch),applyPatch:m4($.applyPatch),editor:v4($.editor)}}var qU={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion",submit_and_exit:"enableSubmitAndExit"},o2=[{name:"openai-native-use-apply-patch",mode:"act",providerIdIncludes:["openai-native"],enableTools:["apply_patch"],disableTools:["editor"]},{name:"codex-and-gpt-use-apply-patch",mode:"act",modelIdIncludes:["codex","gpt"],enableTools:["apply_patch"],disableTools:["editor"]}];function wX($,J){if(!J||J.length===0)return!0;let Q=$.toLowerCase();return J.some((Z)=>Q.includes(Z.toLowerCase()))}function PU($,J,Q,Z){if($.mode&&$.mode!=="any"&&$.mode!==Z)return!1;return wX(J,$.providerIdIncludes)&&wX(Q,$.modelIdIncludes)}function t2($,J,Q,Z){if(!Z||Z.length===0)return{};let W=new Map;for(let f of Z){if(!PU(f,$,J,Q))continue;for(let X of f.disableTools??[])W.set(X,!1);for(let X of f.enableTools??[])W.set(X,!0)}let j={};for(let[f,X]of W.entries())j[qU[f]]=X;return j}var c0={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 h1($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function G5($){if($!=="yolo")return{};let J={enabled:!0,autoApprove:!0},Q={"*":J};for(let Z of W$)Q[Z]=J;return Q}function F5($,J){let Q=c0[$],{enableSpawnAgent:Z,enableAgentTeams:W,...j}=Q;return X$({...j,...J})}import{createTool as dR,zodToJsonSchema as lR}from"@cline/shared";import{z as sZ}from"zod";W1();import{createAgentRuntime as yR}from"@cline/agents";import{createContributionRegistry as ER,mergeModelOptions as oX}from"@cline/shared";import{createGateway as pU,createHandlerAsync as rU,hasRegisteredHandler as iU,MODEL_COLLECTIONS_BY_PROVIDER_ID as nU,normalizeProviderId as aU}from"@cline/llms";import{EMPTY_CONTENT_TEXT as IU}from"@cline/shared";function xU($){let J=mU($.content),Q=[],Z=$.id??uU(),W=0,j=[],f=()=>{if(j.length===0)return;let X=W===0?Z:`${Z}_part_${W}`;W+=1,Q.push({id:X,role:$.role,content:j.map(vU),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:gX($.metrics)}),j=[]};if(J.length===0)return Q.push({id:Z,role:$.role,content:[{type:"text",text:IU}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:gX($.metrics)}),Q;for(let X of J){if(X.type!=="tool_result"){j.push(X);continue}f(),Q.push({id:`${Z}_tool_${X.tool_use_id}`,role:"tool",content:[vX(X)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return f(),Q}function O5($){return $.flatMap(xU)}function gU($){let J=$.content.map(cX).filter((Q)=>Q!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:J,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:cU($.metrics)}}function $8($){return $.map(gU)}function T5($){let J=[];for(let Q of $){let Z=Q.content.map(cX).filter((f)=>f!==void 0),W=Q.role==="tool"?"user":Q.role,j=J[J.length-1];if(W==="user"&&Z.length>0&&Z.every((f)=>f.type==="tool_result")&&j?.role==="user"&&Array.isArray(j.content)&&j.content.every((f)=>f.type==="tool_result")){j.content.push(...Z);continue}J.push({role:W,content:Z})}return J}function mU($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function vU($){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 vX($)}}function vX($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function cX($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let J=$.metadata;return{type:"thinking",thinking:$.text,signature:J?.signature,details:J?.details}}case"image":return typeof $.image==="string"?{type:"image",data:$.image,mediaType:$.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:$.path,content:$.content};case"tool-call":{let J=$.metadata;return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:J?.thoughtSignature??J?.signature}}case"tool-result":{let J=$.output,Q=typeof J==="string"?J:Array.isArray(J)?J:JSON.stringify(J);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:Q,is_error:$.isError}}}}function gX($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function cU($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var mX=0;function uU(){return mX+=1,`msg_${Date.now().toString(36)}_${mX.toString(36)}`}function dU($){switch($.type){case"text":return[{type:"text-delta",text:$.text}];case"reasoning":return[{type:"reasoning-delta",text:$.reasoning,metadata:$.signature?{thoughtSignature:$.signature,details:$.details}:{details:$.details}}];case"tool_calls":{let J=$.tool_call.function,Q=J.arguments;return[{type:"tool-call-delta",toolCallId:$.tool_call.call_id??J.id,toolName:J.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,totalCost:$.totalCost}}];case"done":return[{type:"finish",reason:lU($),error:$.error}];default:return[]}}function lU($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function uX($){return{async*stream(J){let Q=!1,Z=!1;try{let W=typeof $==="function"?await $():$;W.setAbortSignal?.(J.signal);let j=T5(J.messages),f=J.tools.map((X)=>({name:X.name,description:X.description,inputSchema:X.inputSchema}));for await(let X of W.createMessage(J.systemPrompt??"",j,f))for(let Y of dU(X)){if(Y.type==="finish")Q=!0;else if(Y.type==="tool-call-delta")Z=!0;yield Y}if(!Q)yield{type:"finish",reason:Z?"tool-calls":"stop"}}catch(W){if(!Q)yield{type:"finish",reason:J.signal?.aborted?"aborted":"error",error:W instanceof Error?W.message:String(W)}}}}}function sU($){let J=Object.fromEntries(Object.entries($).filter(([,Q])=>Q!==void 0));return Object.keys(J).length>0?J:void 0}function oU($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function tU($){let J={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(oU($))Object.assign(J,{apiVersion:$.azure?.apiVersion,useIdentity:$.azure?.useIdentity});if($.providerId==="bedrock")Object.assign(J,{authentication:$.aws?.authentication,profile:$.aws?.profile,accessKeyId:$.aws?.accessKey,secretAccessKey:$.aws?.secretKey,sessionToken:$.aws?.sessionToken,usePromptCache:$.aws?.usePromptCache,useCrossRegionInference:$.useCrossRegionInference,useGlobalInference:$.useGlobalInference,endpoint:$.aws?.endpoint,customModelBaseId:$.aws?.customModelBaseId});if($.providerId==="vertex"){let Q=$.gcp?.region??$.region;Object.assign(J,{project:$.gcp?.projectId,projectId:$.gcp?.projectId,location:Q,region:Q})}return sU(J)}function xZ($){let J=$.providerConfig;if(J?.knownModels)return J.knownModels;if($.knownModels)return $.knownModels;return nU[$.providerId]?.models??void 0}function eU($){if(!$?.length)return;let J=new Set;for(let Q of $)switch(Q){case"tools":case"reasoning":case"prompt-cache":case"images":J.add(Q);break;case"structured_output":J.add("structured-output");break;default:J.add("text")}return J.add("text"),[...J]}function $R($,J){return{id:$,name:J.name??$,description:J.description,contextWindow:J.contextWindow,maxInputTokens:J.maxInputTokens,maxOutputTokens:J.maxTokens,capabilities:eU(J.capabilities),metadata:{family:J.family,pricing:J.pricing,status:J.status,releaseDate:J.releaseDate}}}function dX($,J,Q){let Z=$.providerConfig,W=Z?.providerId===$.providerId?Z:void 0,j={...W??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??W?.apiKey,baseUrl:$.baseUrl??W?.baseUrl,headers:$.headers??W?.headers,knownModels:xZ($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:J,extensionContext:$.extensionContext};if(iU(aU(j.providerId)))return uX(()=>rU(j));return pU({providerConfigs:[{providerId:j.providerId,apiKey:j.apiKey,baseUrl:j.baseUrl,headers:j.headers,options:tU(j),models:j.knownModels?Object.entries(j.knownModels).map(([f,X])=>$R(f,X)):void 0}],logger:J,telemetry:Q??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:j.providerId,modelId:j.modelId},{maxTokens:j.maxOutputTokens})}import{createMediaBudgetState as JR,IMAGE_OMITTED_PLACEHOLDER as lX,normalizeUserInput as pX,resolveMediaBudget as QR,validateAndReserveImageMedia as ZR}from"@cline/shared";var WR=50000,jR=6000000,rX=8000,fR=new Set(["read","read_files","search","search_codebase","bash","run_commands","fetch_web_content"]),XR=new Set(["read","read_files"]),d$="[outdated - see the latest file content]",iX="Tool execution was interrupted before a result was produced.",YR=($)=>`
|
|
170
|
+
`).trim()}function l4($={}){let{timeoutMs:J=30000,maxResponseBytes:Q=5000000,userAgent:Z="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:W={},followRedirects:j=!0}=$;return async(X,f,Y)=>{let V;try{V=new URL(X)}catch{throw Error(`Invalid URL: ${X}`)}if(!["http:","https:"].includes(V.protocol))throw Error(`Invalid protocol: ${V.protocol}. Only http and https are supported.`);let H=new AbortController,B=setTimeout(()=>H.abort(),J),A;if(Y.signal)A=()=>H.abort(),Y.signal.addEventListener("abort",A);try{let K=await fetch(X,{method:"GET",headers:{"User-Agent":Z,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...W},redirect:j?"follow":"manual",signal:H.signal});if(clearTimeout(B),!j&&K.status>=300&&K.status<400)return`Redirect to: ${K.headers.get("location")}`;if(!K.ok)throw Error(`HTTP ${K.status}: ${K.statusText}`);let G=K.headers.get("content-type")||"",R=K.body?.getReader();if(!R)throw Error("Failed to read response body");let D=[],U=0;while(!0){let{done:P,value:S}=await R.read();if(P)break;if(U+=S.length,U>Q)throw R.cancel(),Error(`Response too large: exceeded ${Q} bytes`);D.push(S)}let F=new Uint8Array(U),O=0;for(let P of D)F.set(P,O),O+=P.length;let T=new TextDecoder("utf-8").decode(F),z;if(G.includes("text/html")||G.includes("application/xhtml"))z=hU(T);else if(G.includes("application/json"))try{let P=JSON.parse(T);z=JSON.stringify(P,null,2)}catch{z=T}else z=T;let L=[`URL: ${X}`,`Content-Type: ${G}`,`Size: ${U} bytes`,"","--- Content ---",z.slice(0,50000)];if(z.length>50000)L.push(`
|
|
171
|
+
[Content truncated: showing first 50000 of ${z.length} characters]`);return L.push("","--- Analysis Request ---",`Prompt: ${f}`),L.join(`
|
|
172
|
+
`)}catch(K){if(clearTimeout(B),K instanceof Error){if(K.name==="AbortError")throw Error(`Request timed out after ${J}ms`);throw K}throw Error(`Fetch failed: ${String(K)}`)}finally{if(Y.signal&&A)Y.signal.removeEventListener("abort",A)}}}function s2($={}){return{readFile:u4($.fileRead),search:d4($.search),bash:m4($.bash),webFetch:l4($.webFetch),applyPatch:v4($.applyPatch),editor:c4($.editor)}}var kU={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion",submit_and_exit:"enableSubmitAndExit"},o2=[{name:"openai-native-use-apply-patch",mode:"act",providerIdIncludes:["openai-native"],enableTools:["apply_patch"],disableTools:["editor"]},{name:"codex-and-gpt-use-apply-patch",mode:"act",modelIdIncludes:["codex","gpt"],enableTools:["apply_patch"],disableTools:["editor"]}];function Cf($,J){if(!J||J.length===0)return!0;let Q=$.toLowerCase();return J.some((Z)=>Q.includes(Z.toLowerCase()))}function IU($,J,Q,Z){if($.mode&&$.mode!=="any"&&$.mode!==Z)return!1;return Cf(J,$.providerIdIncludes)&&Cf(Q,$.modelIdIncludes)}function t2($,J,Q,Z){if(!Z||Z.length===0)return{};let W=new Map;for(let X of Z){if(!IU(X,$,J,Q))continue;for(let f of X.disableTools??[])W.set(f,!1);for(let f of X.enableTools??[])W.set(f,!0)}let j={};for(let[X,f]of W.entries())j[kU[X]]=f;return j}var c0={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 h1($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function R5($){if($!=="yolo")return{};let J={enabled:!0,autoApprove:!0},Q={"*":J};for(let Z of W$)Q[Z]=J;return Q}function L5($,J){let Q=c0[$],{enableSpawnAgent:Z,enableAgentTeams:W,...j}=Q;return f$({...j,...J})}import{createTool as ZL,zodToJsonSchema as WL}from"@cline/shared";import{z as eZ}from"zod";W1();import{createAgentRuntime as pR}from"@cline/agents";import{createContributionRegistry as rR,mergeModelOptions as fY}from"@cline/shared";import{createGateway as JR,createHandlerAsync as QR,hasRegisteredHandler as ZR,MODEL_COLLECTIONS_BY_PROVIDER_ID as WR,normalizeProviderId as jR}from"@cline/llms";import{EMPTY_CONTENT_TEXT as rU}from"@cline/shared";function iU($){let J=aU($.content),Q=[],Z=$.id??tU(),W=0,j=[],X=()=>{if(j.length===0)return;let f=W===0?Z:`${Z}_part_${W}`;W+=1,Q.push({id:f,role:$.role,content:j.map(sU),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:vf($.metrics)}),j=[]};if(J.length===0)return Q.push({id:Z,role:$.role,content:[{type:"text",text:rU}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:vf($.metrics)}),Q;for(let f of J){if(f.type!=="tool_result"){j.push(f);continue}X(),Q.push({id:`${Z}_tool_${f.tool_use_id}`,role:"tool",content:[uf(f)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return X(),Q}function P5($){return $.flatMap(iU)}function nU($){let J=$.content.map(df).filter((Q)=>Q!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:J,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:oU($.metrics)}}function $8($){return $.map(nU)}function N5($){let J=[];for(let Q of $){let Z=Q.content.map(df).filter((X)=>X!==void 0),W=Q.role==="tool"?"user":Q.role,j=J[J.length-1];if(W==="user"&&Z.length>0&&Z.every((X)=>X.type==="tool_result")&&j?.role==="user"&&Array.isArray(j.content)&&j.content.every((X)=>X.type==="tool_result")){j.content.push(...Z);continue}J.push({role:W,content:Z})}return J}function aU($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function sU($){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 uf($)}}function uf($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function df($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let J=$.metadata;return{type:"thinking",thinking:$.text,signature:J?.signature,details:J?.details}}case"image":return typeof $.image==="string"?{type:"image",data:$.image,mediaType:$.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:$.path,content:$.content};case"tool-call":{let J=$.metadata;return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:J?.thoughtSignature??J?.signature}}case"tool-result":{let J=$.output,Q=typeof J==="string"?J:Array.isArray(J)?J:JSON.stringify(J);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:Q,is_error:$.isError}}}}function vf($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function oU($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var cf=0;function tU(){return cf+=1,`msg_${Date.now().toString(36)}_${cf.toString(36)}`}function eU($){switch($.type){case"text":return[{type:"text-delta",text:$.text}];case"reasoning":return[{type:"reasoning-delta",text:$.reasoning,metadata:$.signature?{thoughtSignature:$.signature,details:$.details}:{details:$.details}}];case"tool_calls":{let J=$.tool_call.function,Q=J.arguments;return[{type:"tool-call-delta",toolCallId:$.tool_call.call_id??J.id,toolName:J.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,totalCost:$.totalCost}}];case"done":return[{type:"finish",reason:$R($),error:$.error}];default:return[]}}function $R($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function lf($){return{async*stream(J){let Q=!1,Z=!1;try{let W=typeof $==="function"?await $():$;W.setAbortSignal?.(J.signal);let j=N5(J.messages),X=J.tools.map((f)=>({name:f.name,description:f.description,inputSchema:f.inputSchema}));for await(let f of W.createMessage(J.systemPrompt??"",j,X))for(let Y of eU(f)){if(Y.type==="finish")Q=!0;else if(Y.type==="tool-call-delta")Z=!0;yield Y}if(!Q)yield{type:"finish",reason:Z?"tool-calls":"stop"}}catch(W){if(!Q)yield{type:"finish",reason:J.signal?.aborted?"aborted":"error",error:W instanceof Error?W.message:String(W)}}}}}function XR($){let J=Object.fromEntries(Object.entries($).filter(([,Q])=>Q!==void 0));return Object.keys(J).length>0?J:void 0}function fR($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function YR($){let J={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(fR($))Object.assign(J,{apiVersion:$.azure?.apiVersion,useIdentity:$.azure?.useIdentity});if($.providerId==="bedrock")Object.assign(J,{authentication:$.aws?.authentication,profile:$.aws?.profile,accessKeyId:$.aws?.accessKey,secretAccessKey:$.aws?.secretKey,sessionToken:$.aws?.sessionToken,usePromptCache:$.aws?.usePromptCache,useCrossRegionInference:$.useCrossRegionInference,useGlobalInference:$.useGlobalInference,endpoint:$.aws?.endpoint,customModelBaseId:$.aws?.customModelBaseId});if($.providerId==="vertex"){let Q=$.gcp?.region??$.region;Object.assign(J,{project:$.gcp?.projectId,projectId:$.gcp?.projectId,location:Q,region:Q})}return XR(J)}function dZ($){let J=$.providerConfig;if(J?.knownModels)return J.knownModels;if($.knownModels)return $.knownModels;return WR[$.providerId]?.models??void 0}function VR($){if(!$?.length)return;let J=new Set;for(let Q of $)switch(Q){case"tools":case"reasoning":case"prompt-cache":case"images":J.add(Q);break;case"structured_output":J.add("structured-output");break;default:J.add("text")}return J.add("text"),[...J]}function HR($,J){return{id:$,name:J.name??$,description:J.description,contextWindow:J.contextWindow,maxInputTokens:J.maxInputTokens,maxOutputTokens:J.maxTokens,capabilities:VR(J.capabilities),metadata:{family:J.family,pricing:J.pricing,status:J.status,releaseDate:J.releaseDate}}}function pf($,J,Q){let Z=$.providerConfig,W=Z?.providerId===$.providerId?Z:void 0,j={...W??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??W?.apiKey,baseUrl:$.baseUrl??W?.baseUrl,headers:$.headers??W?.headers,knownModels:dZ($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:J,extensionContext:$.extensionContext};if(ZR(jR(j.providerId)))return lf(()=>QR(j));return JR({providerConfigs:[{providerId:j.providerId,apiKey:j.apiKey,baseUrl:j.baseUrl,headers:j.headers,options:YR(j),models:j.knownModels?Object.entries(j.knownModels).map(([X,f])=>HR(X,f)):void 0}],logger:J,telemetry:Q??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:j.providerId,modelId:j.modelId},{maxTokens:j.maxOutputTokens})}import{createMediaBudgetState as BR,IMAGE_OMITTED_PLACEHOLDER as rf,normalizeUserInput as nf,resolveMediaBudget as AR,validateAndReserveImageMedia as KR}from"@cline/shared";var GR=8000,FR=50000,DR=6000000,UR=200000,RR=12000,a4=2000,af=40000,LR=8,sf={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES"},zR=new Set(["read","read_files"]),d$="[outdated - see the latest file content]",of="Tool execution was interrupted before a result was produced.",tf=($)=>`
|
|
173
173
|
|
|
174
174
|
...[truncated ${$} chars]...
|
|
175
175
|
|
|
176
|
-
`,
|
|
176
|
+
`,s4=($)=>`
|
|
177
177
|
|
|
178
178
|
...[truncated ${$} chars to fit provider request budget]...
|
|
179
179
|
|
|
180
|
-
`;class uZ{maxToolResultChars;targetToolNames;maxTotalTextBytes;mediaBudget;indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;constructor($=WR,J=fR,Q=jR,Z={}){this.maxToolResultChars=$;this.targetToolNames=J;this.maxTotalTextBytes=Q;this.mediaBudget=Z}buildForApi($){this.reindex($);let Q=this.addMissingToolResults($).map((W)=>{if(!Array.isArray(W.content)){if(W.role==="user"&&typeof W.content==="string"){let X=pX(W.content);if(X!==W.content)return{...W,content:X}}return W}let j=!1,f=W.content.map((X)=>{let Y=this.transformBlock(X,W.role);if(Y!==X)j=!0;return Y});return j?{...W,content:f}:W}),Z=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(Z)}transformBlock($,J){if(J==="user"&&$.type==="text"&&typeof $.text==="string"){let W=pX($.text);if(W!==$.text)return{...$,text:W};return $}if($.type==="file"){let W=this.truncateMiddle($.content);return W===$.content?$:{...$,content:W}}if($.type!=="tool_result")return $;let Q=this.toolNameByIdCache.get($.tool_use_id),Z=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let W=this.getReadLocators($);if(W.length>0){let j=W.filter((f)=>this.isOutdatedReadLocator(f,$.tool_use_id));if(j.length>0)Z=this.replaceOutdatedReadContent(Z,j)}}if(this.shouldTruncateTool(Q))Z=this.truncateToolResultContent(Z);return Z===$.content?$:{...$,content:Z}}reindex($){let J=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!J)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let Z=$[Q];if(!Array.isArray(Z.content))continue;for(let W=0;W<Z.content.length;W++){let j=Z.content[W];if(j.type==="file")this.latestFullContentOwnerByPathCache.set(j.path,`file:${Q}:${W}`);else if(j.type==="tool_use"){let f=j.name.toLowerCase();if(this.toolNameByIdCache.set(j.id,f),this.isReadTool(f)){let X=this.extractLocatorsFromReadToolInput(j.input);if(X.length>0)this.readLocatorsByToolUseIdCache.set(j.id,X)}}else if(j.type==="tool_result"){let f=this.toolNameByIdCache.get(j.tool_use_id);if(!this.isReadTool(f)||j.is_error===!0)continue;let X=this.getReadLocators(j);for(let Y of X)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(Y),j.tool_use_id),this.isFullFileRead(Y))this.latestFullContentOwnerByPathCache.set(Y.path,j.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}addMissingToolResults($){let J=this.collectToolResultIds($),Q=[],Z=new Map,W=!1,j=()=>{if(Z.size===0)return;f(this.createMissingToolResultMessage(Z)),Z.clear(),W=!0},f=(X)=>{let Y=Q.at(-1);if(this.shouldMergeUserAfterToolResults(Y,X)){Q[Q.length-1]={...Y,content:[...Y.content,...this.contentBlocksForUserMerge(X.content)]},W=!0;return}Q.push(X)};for(let X of $){if(this.isToolResultOnlyMessage(X)){if(f(this.appendMissingToolResults(X,Z)),Z.size>0)Z.clear(),W=!0;continue}if(Array.isArray(X.content)){let Y=X.content.filter((H)=>H.type==="tool_result"),V=X.content.filter((H)=>H.type!=="tool_result");if(Y.length>0){let H=this.appendMissingToolResults({...X,role:"user",content:Y},Z);if(f(H),Z.size>0)Z.clear();W=!0}if(V.length>0||Y.length===0){if(Y.length===0)j();let H=Y.length>0?{...X,content:V}:X;if(f(H),H.role==="assistant")this.trackMissingToolCalls(H,J,Z)}continue}j(),f(X)}return j(),W?Q:$}appendMissingToolResults($,J){if(J.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(J)]}}shouldMergeUserAfterToolResults($,J){return $?.role==="user"&&J.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(J.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let J=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let Z of Q.content)if(Z.type==="tool_result")J.add(Z.tool_use_id)}return J}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((J)=>J.type==="tool_result")}trackMissingToolCalls($,J,Q){if(!Array.isArray($.content))return;for(let Z of $.content){if(Z.type!=="tool_use"||J.has(Z.id))continue;Q.set(Z.id,Z.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([J,Q])=>({type:"tool_result",tool_use_id:J,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${iX} Tool: ${$}.`:iX}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let J=$,Q=this.readResultLocatorCache.get(J);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(J,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let J=$,Q=[],Z=this.extractLocatorFromReadRequest(J);if(Z)Q.push(Z);if(Array.isArray(J.files))for(let W of J.files){let j=this.extractLocatorFromReadRequest(W);if(j)Q.push(j)}if(Array.isArray(J.file_paths)){for(let W of J.file_paths)if(typeof W==="string"&&W.length>0)Q.push({path:W,startLine:null,endLine:null})}return this.dedupeReadLocators(Q)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);for(let J of $){if(J.type!=="text")continue;let Q=this.tryParseReadLocators(J.text);if(Q.length>0)return Q}return[]}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let Z of $){let W=this.extractLocatorFromResultEntry(Z);if(W)Q.push(W)}return this.dedupeReadLocators(Q)}let J=this.extractLocatorFromResultEntry($);return J?[J]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let J=$,Q=this.extractPath(J);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(J.start_line),endLine:this.extractLineNumber(J.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let J=$,Q=this.extractPath(J);if(Q)return{path:Q,startLine:this.extractLineNumber(J.start_line),endLine:this.extractLineNumber(J.end_line)};if(typeof J.query==="string"&&J.query.length>0)return this.parseReadQuery(J.query);return}extractPath($){let J=[$.path,$.file_path,$.filePath];for(let Q of J)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let J=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!J)return{path:$,startLine:null,endLine:null};return{path:J[1],startLine:Number(J[2]),endLine:J[3]==="EOF"?null:Number(J[3])}}dedupeReadLocators($){let J=new Map;for(let Q of $)J.set(this.toReadLocatorKey(Q),Q);return Array.from(J.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,J){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==J)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==J}replaceOutdatedReadContent($,J){let Q=new Set(J.map((j)=>this.toReadLocatorKey(j))),Z=new Set(J.map((j)=>j.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??d$;let W=0;for(let j of $)if(j.type==="text")W+=this.countOutdatedImageEntries(j.text,Q);return $.map((j)=>{if(j.type==="file"){if(!Z.has(j.path))return j;return{...j,content:d$}}if(j.type==="image"){if(W===0)return j;return W-=1,{type:"text",text:d$}}if(j.type!=="text")return j;let f=this.replaceOutdatedInString(j.text,Q);if(f===null)return{...j,text:d$};return f===j.text?j:{...j,text:f}})}countOutdatedImageEntries($,J){let Q;try{Q=JSON.parse($)}catch{return 0}let Z=Array.isArray(Q)?Q:[Q],W=0;for(let j of Z){if(!j||typeof j!=="object")continue;let f=j,X=this.extractLocatorFromResultEntry(f);if(!X)continue;if(!J.has(this.toReadLocatorKey(X)))continue;if(f.result==="Successfully read image"||f.content==="Successfully read image")W+=1}return W}replaceOutdatedInString($,J){let Q;try{Q=JSON.parse($)}catch{return null}let Z=Array.isArray(Q)?Q.map((W)=>this.replaceOutdatedReadEntry(W,J)):this.replaceOutdatedReadEntry(Q,J);return JSON.stringify(Z)}replaceOutdatedReadEntry($,J){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!J.has(this.toReadLocatorKey(Q)))return $;let Z={...$};if(typeof Z.result==="string")Z.result=d$;else if(typeof Z.content==="string")Z.content=d$;else Z.result=d$;return Z}isReadTool($){return!!$&&XR.has($)}shouldTruncateTool($){return!!$&&this.targetToolNames.has($)}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((J)=>{if(J.type==="file"){let Q=this.truncateMiddle(J.content);return Q===J.content?J:{...J,content:Q}}if(J.type==="text"){let Q=this.truncateMiddle(J.text);return Q===J.text?J:{...J,text:Q}}if(r4(J))return this.truncateNestedStrings(J);return J})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let J=!1,Q=$.map((Z)=>{let W=this.truncateNestedStrings(Z);if(W!==Z)J=!0;return W});return J?Q:$}if($!==null&&typeof $==="object"){if(M5($))return $;let J=!1,Q={};for(let[Z,W]of Object.entries($)){let j=this.truncateNestedStrings(W);if(j!==W)J=!0;Q[Z]=j}return J?Q:$}return $}truncateMiddle($){return gZ($,this.maxToolResultChars,YR)}truncateToTotalTextBudget($){if(this.maxTotalTextBytes<=0)return $;let J=this.countMessageTextBytes($);if(J<=this.maxTotalTextBytes)return $;let Q=$.map((W)=>{if(!Array.isArray(W.content))return W;return{...W,content:W.content.map((j)=>BR(j))}}),Z=this.collectTruncationCandidates(Q);for(let W of Z){if(J<=this.maxTotalTextBytes)break;let j=W.byteLength;if(j<=rX)continue;let f=J-this.maxTotalTextBytes,X=Math.max(rX,j-f),Y=HR(W.get(),X,VR);W.set(Y),J-=j-D0(Y)}return Q}countMessageTextBytes($){let J=0;for(let Q of $){if(typeof Q.content==="string"){J+=D0(Q.content);continue}for(let Z of Q.content)if(Z.type==="text")J+=D0(Z.text);else if(Z.type==="thinking")J+=D0(Z.thinking);else if(Z.type==="file")J+=D0(Z.content);else if(Z.type==="tool_result"){if(typeof Z.content==="string")J+=D0(Z.content);else for(let W of Z.content)if(W.type==="text")J+=D0(W.text);else if(W.type==="file")J+=D0(W.content);else if(r4(W))J+=mZ(W)}}return J}collectTruncationCandidates($){let J=[];for(let Q of $){if(!Array.isArray(Q.content))continue;for(let Z of Q.content){if(Z.type!=="tool_result")continue;let W=this.toolNameByIdCache.get(Z.tool_use_id);if(!this.shouldTruncateTool(W))continue;if(typeof Z.content==="string"){J.push({byteLength:D0(Z.content),get:()=>Z.content,set:(j)=>{Z.content=j}});continue}for(let j of Z.content)if(j.type==="text")J.push({byteLength:D0(j.text),get:()=>j.text,set:(f)=>{j.text=f}});else if(j.type==="file")J.push({byteLength:D0(j.content),get:()=>j.content,set:(f)=>{j.content=f}});else if(r4(j))vZ(j,J)}}return J.sort((Q,Z)=>Z.byteLength-Q.byteLength)}applyMediaBudget($){let J=this.resolveMediaBudget();if(J.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&J.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&J.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=JR(),Z=!1,W=$.map((j)=>{if(!Array.isArray(j.content))return j;let f=!1,X=j.content.map((Y)=>{let V=this.applyMediaBudgetToBlock(Y,J,Q);if(V!==Y)f=!0;return V});if(!f)return j;return Z=!0,{...j,content:X}});return Z?W:$}resolveMediaBudget(){return QR(this.mediaBudget)}applyMediaBudgetToBlock($,J,Q){if(M5($))return this.limitImageContent($,J,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let Z=!1,W=$.content.map((j)=>{let f=this.applyMediaBudgetToToolResultEntry(j,J,Q);if(f!==j)Z=!0;return f});return Z?{...$,content:W}:$}applyMediaBudgetToToolResultEntry($,J,Q){if(M5($))return this.limitImageContent($,J,Q);if(r4($))return this.limitNestedMedia($,J,Q);return $}limitNestedMedia($,J,Q){if(M5($)){let Z=this.limitImageContent($,J,Q);return Z.type==="text"?Z.text:Z}if(Array.isArray($)){let Z=!1,W=$.map((j)=>{let f=this.limitNestedMedia(j,J,Q);if(f!==j)Z=!0;return f});return Z?W:$}if($!==null&&typeof $==="object"){let Z=!1,W={};for(let[j,f]of Object.entries($)){let X=this.limitNestedMedia(f,J,Q);if(X!==f)Z=!0;W[j]=X}return Z?W:$}return $}limitImageContent($,J,Q){if(!dZ($))return{type:"text",text:lX};let Z=ZR($.mediaType,$.data,{maxImageEncodedBytes:J.maxImageEncodedBytes,maxImageDecodedBytes:J.maxImageDecodedBytes,maxTotalMediaBytes:J.maxTotalMediaBytes},Q);if(!Z.ok)return{type:"text",text:lX};return{...$,data:Z.base64,mediaType:Z.mediaType}}}function D0($){return Buffer.byteLength($,"utf8")}function gZ($,J,Q){if($.length<=J)return $;let Z=Q($.length-J),W=Math.max(0,Math.floor((J-Z.length)/2)),j=Math.max(0,$.length-W*2),f=Q(j),X=Math.max(0,Math.floor((J-f.length)/2)),Y=$.slice(0,X),V=X>0?$.slice(-X):"";return`${Y}${f}${V}`}function HR($,J,Q){if(D0($)<=J)return $;let Z=0,W=$.length,j=gZ($,0,Q);while(Z<=W){let f=Z+W>>>1,X=gZ($,f,Q);if(D0(X)<=J)j=X,Z=f+1;else W=f-1}return j}function BR($){if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((J)=>r4(J)?cZ(J):{...J})}}function r4($){if($===null||typeof $!=="object")return!1;let J=$.type;return J!=="text"&&J!=="image"&&J!=="file"}function M5($){return $!==null&&typeof $==="object"&&$.type==="image"}function dZ($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function mZ($){if(typeof $==="string")return D0($);if(Array.isArray($)){let J=0;for(let Q of $)J+=mZ(Q);return J}if($!==null&&typeof $==="object"){if(dZ($))return 0;let J=0;for(let Q of Object.values($))J+=mZ(Q);return J}return 0}function vZ($,J){if(Array.isArray($)){$.forEach((Q,Z)=>{if(typeof Q==="string")J.push({byteLength:D0(Q),get:()=>$[Z],set:(W)=>{$[Z]=W}});else vZ(Q,J)});return}if($!==null&&typeof $==="object"){if(dZ($))return;let Q=$;for(let Z of Object.keys(Q)){let W=Q[Z];if(typeof W==="string")J.push({byteLength:D0(W),get:()=>Q[Z],set:(j)=>{Q[Z]=j}});else vZ(W,J)}}}function cZ($){if(Array.isArray($))return $.map(cZ);if($!==null&&typeof $==="object"){let J={};for(let[Q,Z]of Object.entries($))J[Q]=cZ(Z);return J}return $}function lZ(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class pZ{messages=[];conversationId=lZ();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=lZ(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=lZ(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function nX($){let{agentConfig:J}=$,Q=AR(J),Z=KR(J),W=$.hooks,j=GR(J.maxParallelToolCalls);return{sessionId:$.sessionId??J.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??J.systemPrompt,messageModelInfo:Z,model:$.model,modelOptions:Q,tools:$.tools,hooks:W,prepareTurn:$.prepareTurn,consumePendingUserMessage:J.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??J.logger,telemetry:$.telemetry??J.telemetry,initialMessages:$.initialMessages,completionPolicy:J.completionPolicy,maxIterations:J.maxIterations,toolExecution:j,toolPolicies:J.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:J.requestToolApproval}}function AR($){let J={};if($.thinking!==void 0)J.thinking=$.thinking;if($.reasoningEffort!==void 0)J.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)J.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)J.maxTokensPerTurn=$.maxTokensPerTurn;if($.apiTimeoutMs!==void 0)J.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(J).length>0?J:void 0}function KR($){let J=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:J}}function GR($){if($===void 0)return;return $>=2?"parallel":"sequential"}function FR(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function DR($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function rZ($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(rZ);let J={};for(let Q of Object.keys($).sort())J[Q]=rZ($[Q]);return J}function UR($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(rZ($))}catch{return String($)}}function RR($,J,Q,Z){if(J===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=J,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===Z.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=Z.hardThreshold}}var aX={softThreshold:3,hardThreshold:5};class iZ{config;state=FR();constructor($){this.config={softThreshold:$?.softThreshold??aX.softThreshold,hardThreshold:$?.hardThreshold??aX.hardThreshold}}inspect($){let J=UR($.input),Q=RR(this.state,$.name,J,this.config);if(Q.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Q.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){DR(this.state)}}class nZ{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let J=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&J?J:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let Z=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(Z),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Q,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!J||Q<J)return{action:"continue"};let W=await LR({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:J,reason:$.reason,details:$.details},this.options.onLimitReached);if(W.action==="continue"){let j=W.guidance?.trim();if(j)this.options.appendRecoveryNotice(j,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:j}}return{action:"stop",reason:W.reason?.trim()||void 0,message:zR({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:J,reason:$.reason,details:$.details,stopReason:W.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function zR($){let J=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)J.push(`Error: ${Q}`);let Z=$.stopReason?.trim();if(Z)J.push(`Decision: ${Z}`);return J.push("Session state was preserved. Send a new prompt to resume from the latest state."),J.join(" ")}async function LR($,J){if(!J)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await J($)}catch(Q){return{action:"stop",reason:Q instanceof Error?Q.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function _R($){let J=$.content.filter((Q)=>Q.type==="text");if(J.length===0)return;return J.map((Q)=>Q.text).join("")}function OR($){let J=$.content.filter((Q)=>Q.type==="reasoning");if(J.length===0)return;return{reasoning:J.map((Q)=>Q.text).join(""),redacted:J.some((Q)=>Q.redacted===!0)}}function TR($){return $.content.find((J)=>J.type==="tool-result")}function MR($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function qR($){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 aZ{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:$.metadata?.reason==="auto_compaction"?"auto_compaction":void 0,metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let J=[],Q=_R($);if(Q!==void 0)J.push({type:"content_end",contentType:"text",text:Q});let Z=OR($);if(Z!==void 0)J.push({type:"content_end",contentType:"reasoning",reasoning:Z.reasoning});return J}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input}]}translateToolFinished($){let J=this.toolStartedAt.get($.toolCall.toolCallId),Q=J===void 0?void 0:Date.now()-J;this.toolStartedAt.delete($.toolCall.toolCallId);let Z=TR($.message),W=Z?.output,j=qR(Z);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:W,error:j,durationMs:Q}]}translateUsage($){let J=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,Z=$.cacheReadTokens-this.lastUsage.cacheReadTokens,W=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,j=this.lastUsage.totalCost??0,X=($.totalCost??0)-j;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,J),outputTokens:Math.max(0,Q),cacheReadTokens:Z===0?void 0:Math.max(0,Z),cacheWriteTokens:W===0?void 0:Math.max(0,W),cost:X===0?void 0:X,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let J={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:MR($.status),text:$.outputText,iterations:$.iterations,usage:J}]}}function bR($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function hR($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function kR($,J){let Q=$.trim(),Z=J.map((W)=>W.trim()).filter(Boolean).join(`
|
|
180
|
+
`,_R=($)=>`
|
|
181
|
+
|
|
182
|
+
...[assistant text truncated: omitted ${$} chars]...
|
|
183
|
+
|
|
184
|
+
`,ef=($)=>`
|
|
185
|
+
|
|
186
|
+
...[assistant text truncated: omitted ${$} chars to fit provider request budget]...
|
|
187
|
+
|
|
188
|
+
`,OR=($)=>`
|
|
189
|
+
|
|
190
|
+
...[assistant text truncated: omitted ${$} chars due to repeated tool-call markup]...
|
|
191
|
+
|
|
192
|
+
`;function QY($=process.env){return{maxToolResultChars:JY($[sf.maxToolResultChars]),maxTotalTextBytes:JY($[sf.maxTotalTextBytes])}}class pZ{indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;constructor($={}){this.maxToolResultChars=i4($.maxToolResultChars,GR),this.maxFileContentChars=i4($.maxFileContentChars,FR),this.maxTotalTextBytes=i4($.maxTotalTextBytes,DR),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=i4($.maxAssistantTextChars,UR),this.maxAssistantToolMarkupChars=i4($.maxAssistantToolMarkupChars,RR)}buildForApi($){this.reindex($);let Q=this.addMissingToolResults($).map((W)=>{if(!Array.isArray(W.content)){if(W.role==="user"&&typeof W.content==="string"){let f=nf(W.content);if(f!==W.content)return{...W,content:f}}if(W.role==="assistant"&&typeof W.content==="string"){let f=this.truncateAssistantText(W.content);if(f!==W.content)return{...W,content:f}}return W}let j=!1,X=W.content.map((f)=>{let Y=this.transformBlock(f,W.role);if(Y!==f)j=!0;return Y});return j?{...W,content:X}:W}),Z=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(Z)}transformBlock($,J){if(J==="user"&&$.type==="text"&&typeof $.text==="string"){let W=nf($.text);if(W!==$.text)return{...$,text:W};return $}if(J==="assistant"&&$.type==="text"&&typeof $.text==="string"){let W=this.truncateAssistantText($.text);return W===$.text?$:{...$,text:W}}if($.type==="file"){let W=J8($.content,this.maxFileContentChars,tf);return W===$.content?$:{...$,content:W}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),Z=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let W=this.getReadLocators($);if(W.length>0){let j=W.filter((X)=>this.isOutdatedReadLocator(X,$.tool_use_id));if(j.length>0)Z=this.replaceOutdatedReadContent(Z,j)}}return Z=this.truncateToolResultContent(Z),Z===$.content?$:{...$,content:Z}}reindex($){let J=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!J)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let Z=$[Q];if(!Array.isArray(Z.content))continue;for(let W=0;W<Z.content.length;W++){let j=Z.content[W];if(j.type==="file")this.latestFullContentOwnerByPathCache.set(j.path,`file:${Q}:${W}`);else if(j.type==="tool_use"){let X=j.name.toLowerCase();if(this.toolNameByIdCache.set(j.id,X),this.isReadTool(X)){let f=this.extractLocatorsFromReadToolInput(j.input);if(f.length>0)this.readLocatorsByToolUseIdCache.set(j.id,f)}}else if(j.type==="tool_result"){let X=this.resolveToolName(j);if(!this.isReadTool(X)||j.is_error===!0)continue;let f=this.getReadLocators(j);for(let Y of f)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(Y),j.tool_use_id),this.isFullFileRead(Y))this.latestFullContentOwnerByPathCache.set(Y.path,j.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}addMissingToolResults($){let J=this.collectToolResultIds($),Q=[],Z=new Map,W=!1,j=()=>{if(Z.size===0)return;X(this.createMissingToolResultMessage(Z)),Z.clear(),W=!0},X=(f)=>{let Y=Q.at(-1);if(this.shouldMergeUserAfterToolResults(Y,f)){Q[Q.length-1]={...Y,content:[...Y.content,...this.contentBlocksForUserMerge(f.content)]},W=!0;return}Q.push(f)};for(let f of $){if(this.isToolResultOnlyMessage(f)){if(X(this.appendMissingToolResults(f,Z)),Z.size>0)Z.clear(),W=!0;continue}if(Array.isArray(f.content)){let Y=f.content.filter((H)=>H.type==="tool_result"),V=f.content.filter((H)=>H.type!=="tool_result");if(Y.length>0){let H=this.appendMissingToolResults({...f,role:"user",content:Y},Z);if(X(H),Z.size>0)Z.clear();W=!0}if(V.length>0||Y.length===0){if(Y.length===0)j();let H=Y.length>0?{...f,content:V}:f;if(X(H),H.role==="assistant")this.trackMissingToolCalls(H,J,Z)}continue}j(),X(f)}return j(),W?Q:$}appendMissingToolResults($,J){if(J.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(J)]}}shouldMergeUserAfterToolResults($,J){return $?.role==="user"&&J.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(J.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let J=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let Z of Q.content)if(Z.type==="tool_result")J.add(Z.tool_use_id)}return J}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((J)=>J.type==="tool_result")}trackMissingToolCalls($,J,Q){if(!Array.isArray($.content))return;for(let Z of $.content){if(Z.type!=="tool_use"||J.has(Z.id))continue;Q.set(Z.id,Z.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([J,Q])=>({type:"tool_result",tool_use_id:J,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${of} Tool: ${$}.`:of}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let J=$,Q=this.readResultLocatorCache.get(J);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(J,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let J=$,Q=[],Z=this.extractLocatorFromReadRequest(J);if(Z)Q.push(Z);if(Array.isArray(J.files))for(let W of J.files){let j=this.extractLocatorFromReadRequest(W);if(j)Q.push(j)}if(Array.isArray(J.file_paths)){for(let W of J.file_paths)if(typeof W==="string"&&W.length>0)Q.push({path:W,startLine:null,endLine:null})}return this.dedupeReadLocators(Q)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);for(let J of $){if(J.type!=="text")continue;let Q=this.tryParseReadLocators(J.text);if(Q.length>0)return Q}return[]}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let Z of $){let W=this.extractLocatorFromResultEntry(Z);if(W)Q.push(W)}return this.dedupeReadLocators(Q)}let J=this.extractLocatorFromResultEntry($);return J?[J]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let J=$,Q=this.extractPath(J);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(J.start_line),endLine:this.extractLineNumber(J.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let J=$,Q=this.extractPath(J);if(Q)return{path:Q,startLine:this.extractLineNumber(J.start_line),endLine:this.extractLineNumber(J.end_line)};if(typeof J.query==="string"&&J.query.length>0)return this.parseReadQuery(J.query);return}extractPath($){let J=[$.path,$.file_path,$.filePath];for(let Q of J)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let J=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!J)return{path:$,startLine:null,endLine:null};return{path:J[1],startLine:Number(J[2]),endLine:J[3]==="EOF"?null:Number(J[3])}}dedupeReadLocators($){let J=new Map;for(let Q of $)J.set(this.toReadLocatorKey(Q),Q);return Array.from(J.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,J){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==J)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==J}replaceOutdatedReadContent($,J){let Q=new Set(J.map((j)=>this.toReadLocatorKey(j))),Z=new Set(J.map((j)=>j.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??d$;let W=0;for(let j of $)if(j.type==="text")W+=this.countOutdatedImageEntries(j.text,Q);return $.map((j)=>{if(j.type==="file"){if(!Z.has(j.path))return j;return{...j,content:d$}}if(j.type==="image"){if(W===0)return j;return W-=1,{type:"text",text:d$}}if(j.type!=="text")return j;let X=this.replaceOutdatedInString(j.text,Q);if(X===null)return{...j,text:d$};return X===j.text?j:{...j,text:X}})}countOutdatedImageEntries($,J){let Q;try{Q=JSON.parse($)}catch{return 0}let Z=Array.isArray(Q)?Q:[Q],W=0;for(let j of Z){if(!j||typeof j!=="object")continue;let X=j,f=this.extractLocatorFromResultEntry(X);if(!f)continue;if(!J.has(this.toReadLocatorKey(f)))continue;if(X.result==="Successfully read image"||X.content==="Successfully read image")W+=1}return W}replaceOutdatedInString($,J){let Q;try{Q=JSON.parse($)}catch{return null}let Z=Array.isArray(Q)?Q.map((W)=>this.replaceOutdatedReadEntry(W,J)):this.replaceOutdatedReadEntry(Q,J);return JSON.stringify(Z)}replaceOutdatedReadEntry($,J){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!J.has(this.toReadLocatorKey(Q)))return $;let Z={...$};if(typeof Z.result==="string")Z.result=d$;else if(typeof Z.content==="string")Z.content=d$;else Z.result=d$;return Z}isReadTool($){return!!$&&zR.has($)}resolveToolName($){let J=this.toolNameByIdCache.get($.tool_use_id);if(J!==void 0)return J;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((J)=>{if(J.type==="file"){let Q=this.truncateMiddle(J.content);return Q===J.content?J:{...J,content:Q}}if(J.type==="text"){let Q=this.truncateMiddle(J.text);return Q===J.text?J:{...J,text:Q}}if(n4(J))return this.truncateNestedStrings(J);return J})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let J=!1,Q=$.map((Z)=>{let W=this.truncateNestedStrings(Z);if(W!==Z)J=!0;return W});return J?Q:$}if($!==null&&typeof $==="object"){if(rZ($))return $;let J=!1,Q={};for(let[Z,W]of Object.entries($)){let j=this.truncateNestedStrings(W);if(j!==W)J=!0;Q[Z]=j}return J?Q:$}return $}truncateMiddle($){return J8($,this.maxToolResultChars,tf)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return J8($,this.maxAssistantToolMarkupChars,OR);return J8($,this.maxAssistantTextChars,_R)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let J=0;for(let Q of $.matchAll(TR))if(J+=1,J>=LR)return!0;return!1}truncateToTotalTextBudget($){let J=this.countMessageTextBytes($);if(J<=this.maxTotalTextBytes)return $;let Q=$.map((W)=>{if(!Array.isArray(W.content))return{...W};return{...W,content:W.content.map((j)=>qR(j))}}),Z=this.collectTruncationCandidates(Q);for(let W of Z){if(J<=this.maxTotalTextBytes)break;let j=W.byteLength;if(j<=W.minBytes)continue;let X=J-this.maxTotalTextBytes,f=Math.max(W.minBytes,j-X),Y=MR(W.get(),f,W.makeMarker);W.set(Y),J-=j-Y0(Y)}return Q}countMessageTextBytes($){let J=0;for(let Q of $){if(typeof Q.content==="string"){J+=Y0(Q.content);continue}for(let Z of Q.content)if(Z.type==="text")J+=Y0(Z.text);else if(Z.type==="thinking")J+=Y0(Z.thinking);else if(Z.type==="file")J+=Y0(Z.content);else if(Z.type==="tool_use")J+=w5(Z.input);else if(Z.type==="tool_result"){if(typeof Z.content==="string")J+=Y0(Z.content);else for(let W of Z.content)if(W.type==="text")J+=Y0(W.text);else if(W.type==="file")J+=Y0(W.content);else if(n4(W))J+=w5(W)}}return J}collectTruncationCandidates($){let J=[],Q=[];for(let Z of $){if(Z.role==="assistant"&&typeof Z.content==="string"){J.push({byteLength:Y0(Z.content),minBytes:af,makeMarker:ef,get:()=>Z.content,set:(W)=>{Z.content=W}});continue}if(!Array.isArray(Z.content))continue;for(let W of Z.content){if(W.type==="tool_use"){S5(W.input,Q);continue}if(Z.role==="assistant"&&W.type==="text"){J.push({byteLength:Y0(W.text),minBytes:af,makeMarker:ef,get:()=>W.text,set:(j)=>{W.text=j}});continue}if(W.type!=="tool_result")continue;if(typeof W.content==="string"){J.push({byteLength:Y0(W.content),minBytes:a4,makeMarker:s4,get:()=>W.content,set:(j)=>{W.content=j}});continue}for(let j of W.content)if(j.type==="text")J.push({byteLength:Y0(j.text),minBytes:a4,makeMarker:s4,get:()=>j.text,set:(X)=>{j.text=X}});else if(j.type==="file")J.push({byteLength:Y0(j.content),minBytes:a4,makeMarker:s4,get:()=>j.content,set:(X)=>{j.content=X}});else if(n4(j))S5(j,J)}}return J.sort((Z,W)=>W.byteLength-Z.byteLength),Q.sort((Z,W)=>W.byteLength-Z.byteLength),[...J,...Q]}applyMediaBudget($){let J=this.resolveMediaBudget();if(J.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&J.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&J.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=BR(),Z=!1,W=$.map((j)=>{if(!Array.isArray(j.content))return j;let X=!1,f=j.content.map((Y)=>{let V=this.applyMediaBudgetToBlock(Y,J,Q);if(V!==Y)X=!0;return V});if(!X)return j;return Z=!0,{...j,content:f}});return Z?W:$}resolveMediaBudget(){return AR(this.mediaBudget)}applyMediaBudgetToBlock($,J,Q){if(lZ($))return this.limitImageContent($,J,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let Z=!1,W=$.content.map((j)=>{let X=this.applyMediaBudgetToToolResultEntry(j,J,Q);if(X!==j)Z=!0;return X});return Z?{...$,content:W}:$}applyMediaBudgetToToolResultEntry($,J,Q){if(lZ($))return this.limitImageContent($,J,Q);if(n4($))return this.limitNestedMedia($,J,Q);return $}limitNestedMedia($,J,Q){if(lZ($)){let Z=this.limitImageContent($,J,Q);return Z.type==="text"?Z.text:Z}if(Array.isArray($)){let Z=!1,W=$.map((j)=>{let X=this.limitNestedMedia(j,J,Q);if(X!==j)Z=!0;return X});return Z?W:$}if($!==null&&typeof $==="object"){let Z=!1,W={};for(let[j,X]of Object.entries($)){let f=this.limitNestedMedia(X,J,Q);if(f!==X)Z=!0;W[j]=f}return Z?W:$}return $}limitImageContent($,J,Q){if(!ZY($))return{type:"text",text:rf};let Z=KR($.mediaType,$.data,{maxImageEncodedBytes:J.maxImageEncodedBytes,maxImageDecodedBytes:J.maxImageDecodedBytes,maxTotalMediaBytes:J.maxTotalMediaBytes},Q);if(!Z.ok)return{type:"text",text:rf};return{...$,data:Z.base64,mediaType:Z.mediaType}}}var $Y=String.raw`[\|\uFF5C]`,TR=new RegExp(String.raw`<\s*(?:${$Y}\s*)?DSML\s*(?:${$Y}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function Y0($){return Buffer.byteLength($,"utf8")}function JY($){if($===void 0)return;let J=Number.parseInt($,10);return Number.isFinite(J)&&J>0?J:void 0}function i4($,J){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):J}function J8($,J,Q){if($.length<=J)return $;let Z=Q($.length-J),W=Math.max(0,Math.floor((J-Z.length)/2)),j=Math.max(0,$.length-W*2),X=Q(j),f=Math.max(0,Math.floor((J-X.length)/2)),Y=$.slice(0,f),V=f>0?$.slice(-f):"";return`${Y}${X}${V}`}function MR($,J,Q){if(Y0($)<=J)return $;let Z=0,W=$.length,j=J8($,0,Q);while(Z<=W){let X=Z+W>>>1,f=J8($,X,Q);if(Y0(f)<=J)j=f,Z=X+1;else W=X-1}return j}function qR($){if($.type==="tool_use")return{...$,input:C5($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((J)=>n4(J)?C5(J):{...J})}}function n4($){if($===null||typeof $!=="object")return!1;let J=$.type;return J!=="text"&&J!=="image"&&J!=="file"}function lZ($){return $!==null&&typeof $==="object"&&$.type==="image"}function ZY($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function rZ($){return ZY($)}function w5($){if(typeof $==="string")return Y0($);if(Array.isArray($)){let J=0;for(let Q of $)J+=w5(Q);return J}if($!==null&&typeof $==="object"){if(rZ($))return 0;let J=0;for(let Q of Object.values($))J+=w5(Q);return J}return 0}function S5($,J){if(Array.isArray($)){$.forEach((Q,Z)=>{if(typeof Q==="string")J.push({byteLength:Y0(Q),minBytes:a4,makeMarker:s4,get:()=>$[Z],set:(W)=>{$[Z]=W}});else S5(Q,J)});return}if($!==null&&typeof $==="object"){if(rZ($))return;let Q=$;for(let Z of Object.keys(Q)){let W=Q[Z];if(typeof W==="string")J.push({byteLength:Y0(W),minBytes:a4,makeMarker:s4,get:()=>Q[Z],set:(j)=>{Q[Z]=j}});else S5(W,J)}}}function C5($){if(Array.isArray($))return $.map(C5);if($!==null&&typeof $==="object"){let J={};for(let[Q,Z]of Object.entries($))J[Q]=C5(Z);return J}return $}function iZ(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class nZ{messages=[];conversationId=iZ();sessionStarted=!1;constructor($){if(($?.length??0)>0)this.restore($??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage($){this.messages.push($)}appendMessages($){if($.length===0)return;this.messages.push(...$)}replaceMessages($){this.messages=[...$]}resetForRun(){this.messages=[],this.conversationId=iZ(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=iZ(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function WY($){let{agentConfig:J}=$,Q=PR(J),Z=NR(J),W=$.hooks,j=wR(J.maxParallelToolCalls);return{sessionId:$.sessionId??J.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??J.systemPrompt,messageModelInfo:Z,model:$.model,modelOptions:Q,tools:$.tools,hooks:W,prepareTurn:$.prepareTurn,consumePendingUserMessage:J.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??J.logger,telemetry:$.telemetry??J.telemetry,initialMessages:$.initialMessages,completionPolicy:J.completionPolicy,maxIterations:J.maxIterations,toolExecution:j,toolPolicies:J.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:J.requestToolApproval}}function PR($){let J={};if($.thinking!==void 0)J.thinking=$.thinking;if($.reasoningEffort!==void 0)J.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)J.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)J.maxTokensPerTurn=$.maxTokensPerTurn;if($.apiTimeoutMs!==void 0)J.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(J).length>0?J:void 0}function NR($){let J=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:J}}function wR($){if($===void 0)return;return $>=2?"parallel":"sequential"}function SR(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function CR($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function aZ($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(aZ);let J={};for(let Q of Object.keys($).sort())J[Q]=aZ($[Q]);return J}function yR($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(aZ($))}catch{return String($)}}function ER($,J,Q,Z){if(J===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=J,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===Z.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=Z.hardThreshold}}var jY={softThreshold:3,hardThreshold:5};class sZ{config;state=SR();constructor($){this.config={softThreshold:$?.softThreshold??jY.softThreshold,hardThreshold:$?.hardThreshold??jY.hardThreshold}}inspect($){let J=yR($.input),Q=ER(this.state,$.name,J,this.config);if(Q.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Q.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){CR(this.state)}}class oZ{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let J=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&J?J:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let Z=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(Z),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Q,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!J||Q<J)return{action:"continue"};let W=await hR({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:J,reason:$.reason,details:$.details},this.options.onLimitReached);if(W.action==="continue"){let j=W.guidance?.trim();if(j)this.options.appendRecoveryNotice(j,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:j}}return{action:"stop",reason:W.reason?.trim()||void 0,message:bR({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:J,reason:$.reason,details:$.details,stopReason:W.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function bR($){let J=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)J.push(`Error: ${Q}`);let Z=$.stopReason?.trim();if(Z)J.push(`Decision: ${Z}`);return J.push("Session state was preserved. Send a new prompt to resume from the latest state."),J.join(" ")}async function hR($,J){if(!J)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await J($)}catch(Q){return{action:"stop",reason:Q instanceof Error?Q.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function kR($){let J=$.content.filter((Q)=>Q.type==="text");if(J.length===0)return;return J.map((Q)=>Q.text).join("")}function IR($){let J=$.content.filter((Q)=>Q.type==="reasoning");if(J.length===0)return;return{reasoning:J.map((Q)=>Q.text).join(""),redacted:J.some((Q)=>Q.redacted===!0)}}function xR($){return $.content.find((J)=>J.type==="tool-result")}function gR($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function mR($){if(!$||$.isError!==!0)return;if(typeof $.output==="string")return $.output;if($.output instanceof Error)return $.output.message;try{return JSON.stringify($.output)}catch{return String($.output)}}class tZ{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:$.metadata?.reason==="auto_compaction"?"auto_compaction":void 0,metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let J=[],Q=kR($);if(Q!==void 0)J.push({type:"content_end",contentType:"text",text:Q});let Z=IR($);if(Z!==void 0)J.push({type:"content_end",contentType:"reasoning",reasoning:Z.reasoning});return J}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input}]}translateToolFinished($){let J=this.toolStartedAt.get($.toolCall.toolCallId),Q=J===void 0?void 0:Date.now()-J;this.toolStartedAt.delete($.toolCall.toolCallId);let Z=xR($.message),W=Z?.output,j=mR(Z);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:W,error:j,durationMs:Q}]}translateUsage($){let J=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,Z=$.cacheReadTokens-this.lastUsage.cacheReadTokens,W=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,j=this.lastUsage.totalCost??0,f=($.totalCost??0)-j;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,J),outputTokens:Math.max(0,Q),cacheReadTokens:Z===0?void 0:Math.max(0,Z),cacheWriteTokens:W===0?void 0:Math.max(0,W),cost:f===0?void 0:f,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let J={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:gR($.status),text:$.outputText,iterations:$.iterations,usage:J}]}}function iR($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function nR($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function aR($,J){let Q=$.trim(),Z=J.map((W)=>W.trim()).filter(Boolean).join(`
|
|
181
193
|
|
|
182
194
|
`);if(Q&&Z)return`${Q}
|
|
183
195
|
|
|
184
|
-
${Z}`;return Q||Z}function IR($,J){let Q=J?.["*"]??{},Z=J?.[$]??{};return{...Q,...Z}.enabled!==!1}function xR($,J){return $.filter((Q)=>IR(Q.name,J))}function gR($,J){return I1(xR($,J))}function mR($){let J=$.filter((Q)=>Q!==void 0);if(J.length===0)return{};return{beforeRun:async(Q)=>{for(let Z of J){let W=await Z.beforeRun?.(Q);if(W?.stop)return W}return},afterRun:async(Q)=>{for(let Z of J)await Z.afterRun?.(Q)},beforeModel:async(Q)=>{let Z=Q.request,W;for(let j of J){let f=await j.beforeModel?.({...Q,request:Z});if(!f)continue;if(f.stop)return f;W={...W,...f,options:oX(W?.options,f.options)},Z={...Z,...f.messages?{messages:f.messages}:{},...f.tools?{tools:f.tools}:{},...f.options?{options:oX(Z.options,f.options)}:{}}}return W},afterModel:async(Q)=>{for(let Z of J){let W=await Z.afterModel?.(Q);if(W?.stop)return W}return},beforeTool:async(Q)=>{let Z=Q.input,W;for(let j of J){let f=await j.beforeTool?.({...Q,input:Z});if(!f)continue;if(f.stop||f.skip)return f;if(W={...W,...f},Object.hasOwn(f,"input"))Z=f.input}return W},afterTool:async(Q)=>{let Z=Q.result,W;for(let j of J){let f=await j.afterTool?.({...Q,result:Z});if(!f)continue;if(f.stop)return f;if(W={...W,...f},f.result)Z=f.result}return W},onEvent:async(Q)=>{for(let Z of J)await Z.onEvent?.(Q)}}}class V${config;agentId;parentAgentId;logger;telemetry;conversation;mistakeTracker;loopTracker;loopDetectionDisabled;messageBuilder;contributionRegistry;extensionsInitialized=!1;listeners=new Set;createAgentRuntimeImpl;activeRunId=null;running=!1;abortRequested=!1;abortReason;activeRuntime=null;activeRunPromise=null;eventAdapter=new aZ;shutdownCalled=!1;currentRunToolCalls=[];currentRunUsage={inputTokens:0,outputTokens:0};toolStartedAt=new Map;toolInputs=new Map;currentTurnSuccessfulTools=0;currentTurnFailedTools=0;currentTurnFailureDetails=[];activeTrackerWork=Promise.resolve();trackerAbortInFlight=!1;constructor($,J={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=J.logger??$.logger,this.telemetry=J.telemetry??$.telemetry,this.createAgentRuntimeImpl=J.createAgentRuntimeImpl??yR,this.conversation=new pZ($.initialMessages),this.messageBuilder=new uZ,this.contributionRegistry=ER({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 nZ({maxConsecutiveMistakes:Q,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(j)=>this.emitLegacyEvent(j),log:(j,f,X)=>vR(this.logger,j,f,X),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(j,f)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:j}]})}});let Z=$.execution?.loopDetection;this.loopDetectionDisabled=Z===!1;let W=Z===!1||Z===void 0?void 0:Z;this.loopTracker=new iZ(W)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools($){if($.length===0)return;let J=new Set(this.config.tools.map((Z)=>Z.name)),Q=[...this.config.tools];for(let Z of $)if(!J.has(Z.name))Q.push(Z),J.add(Z.name);this.config={...this.config,tools:Q}}updateConnection($){let J={...this.config};if($.providerId!==void 0)J.providerId=$.providerId;if($.modelId!==void 0)J.modelId=$.modelId;if($.apiKey!==void 0)J.apiKey=$.apiKey;if($.baseUrl!==void 0)J.baseUrl=$.baseUrl;if($.headers!==void 0)J.headers=$.headers;if($.providerConfig!==void 0)J.providerConfig=$.providerConfig;if($.reasoningEffort!==void 0)J.reasoningEffort=$.reasoningEffort;if($.thinking!==void 0)J.thinking=$.thinking;if($.thinkingBudgetTokens!==void 0)J.thinkingBudgetTokens=$.thinkingBudgetTokens;this.config=J}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let J=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=J,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(J)}async shutdown($,J){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run($,J,Q){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:J,userFiles:Q,isContinue:!1})}continue($,J,Q){return this.executeRun({userMessage:$,userImages:J,userFiles:Q,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let J of this.contributionRegistry.getRegisteredRules()){let Q=await hR(J);if(Q)$.push(Q)}return kR(this.config.systemPrompt,$)}executeRun($){let J;return J=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===J)this.activeRunPromise=null}),this.activeRunPromise=J,J}async executeRunInternal($){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let J=new Date,Q=$.userMessage;if(Q!==void 0){let F=await uR(Q,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:F})}let Z=await this.composeSystemPrompt(),W=dX(this.config,this.logger,this.telemetry),j=new Map;for(let F of this.contributionRegistry.getRegisteredTools())j.set(F.name,F);let f=gR([...j.values()],this.config.toolPolicies),X=new Map;for(let F of f)X.set(F.name,F);for(let F of this.config.tools)X.set(F.name,F);let Y=this.conversation.getConversationId(),V=tX(this.config),H=Array.from(X.values()),B=O5(this.conversation.getMessages()),A=nX({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:Y,parentAgentId:this.parentAgentId,model:W,logger:this.logger,telemetry:this.telemetry,tools:H,toolContextMetadata:{modelSupportsImages:V?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[of]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(V,H),initialMessages:B,systemPrompt:Z}),K=this.createAgentRuntimeImpl(A);if(this.activeRuntime=K,this.abortRequested)K.abort(this.abortReason);let G=K.subscribe((F)=>{this.handleRuntimeEvent(F)}),R,D;try{if($.isContinue)R=await K.continue(void 0);else R=await K.run("")}catch(F){D=F instanceof Error?F:Error(String(F))}finally{G();try{await this.activeTrackerWork}catch(F){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:F})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(R&&R.messages.length>0){let F=$8(R.messages);this.conversation.replaceMessages(F)}let U=new Date;try{return this.buildLegacyResult({runResult:R,thrownError:D,startedAt:J,endedAt:U})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize({tolerateSetupErrors:this.config.hookErrorMode!=="throw"})}catch($){if(this.config.hookErrorMode==="throw")throw $;this.emitLegacyEvent({type:"error",error:$ instanceof Error?$:Error(String($)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let $=mR([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((J)=>J.hooks)]);return{...$,beforeModel:async(J)=>{let Q=await $.beforeModel?.(J);if(Q?.stop)return Q;let Z=Q?.messages??J.request.messages,W=await this.prepareMessagesForModelRequest(Z);return{...Q,messages:W}}}}createRuntimePrepareTurn($,J){let Q=this.config.prepareTurn;if(!Q)return;return async(Z)=>{let W=$8(Z.messages),j=await this.prepareProviderMessagesForApi(W),f=await Q({agentId:Z.agentId,conversationId:Z.conversationId??this.conversation.getConversationId(),parentAgentId:Z.parentAgentId??null,iteration:Z.iteration,messages:W,apiMessages:j,abortSignal:Z.signal??new AbortController().signal,systemPrompt:Z.systemPrompt??"",tools:J,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:Z.emitStatusNotice});if(!f)return;return{...f.messages?{messages:O5(f.messages)}:{},...f.systemPrompt!==void 0?{systemPrompt:f.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let J=await this.prepareProviderMessagesForApi(T5($));return O5(J)}async prepareProviderMessagesForApi($){let J=$,Q=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let Z of Q)J=await Z.build(J);return this.messageBuilder.buildForApi(J)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let J=this.toolStartedAt.get($.toolCall.toolCallId),Q=new Date,Z=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let W=$.message.content.find((Y)=>Y.type==="tool-result"),j=W?.type==="tool-result"&&W.isError===!0,f=j?bR(W?.type==="tool-result"?W.output:void 0):void 0,X={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:Z,output:W?.type==="tool-result"?W.output:void 0,error:f,durationMs:J===void 0?0:Q.getTime()-J.getTime(),startedAt:J??Q,endedAt:Q};if(this.currentRunToolCalls.push(X),j){if(this.currentTurnFailedTools+=1,f)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${f}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let J=this.currentTurnFailedTools,Q=this.currentTurnSuccessfulTools;if(J>0&&Q===0){let Z=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${J} tool call(s) failed${Z?`: ${Z}`:""}`})}else if(Q>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let J of this.eventAdapter.translate($))this.emitLegacyEvent(J)}syncConversationFromRuntimeMessage($,J){if($.length>0){this.conversation.replaceMessages($8($));return}if(J.length===0)return;let Q=new Set(this.conversation.getMessages().map((W)=>W.id).filter((W)=>typeof W==="string")),Z=$8(J).filter((W)=>!W.id||!Q.has(W.id));if(Z.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...Z])}emitLegacyEvent($){for(let J of this.listeners)try{J($)}catch(Q){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Q})}}inspectLoopForToolCall($,J,Q){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let Z=this.loopTracker.inspect({name:$,input:J});if(Z.kind==="ok")return;if(Z.kind==="soft"){if(Z.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:Z.message}]});return}this.enqueueMistakeRecord({iteration:Q,reason:"tool_execution_failed",forceAtLimit:!0,details:Z.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let J=await this.mistakeTracker.record($);if(J.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:J.message}]}),this.activeRuntime?.abort(J.reason??J.message)})}buildLegacyResult($){let{runResult:J,thrownError:Q,startedAt:Z,endedAt:W}=$,j=W.getTime()-Z.getTime(),f=Q?"error":cR(J),X=J?.outputText||(J?.status==="failed"?J.error?.message:void 0)||"",Y=J?{inputTokens:J.usage.inputTokens,outputTokens:J.usage.outputTokens,cacheReadTokens:J.usage.cacheReadTokens>0?J.usage.cacheReadTokens:void 0,cacheWriteTokens:J.usage.cacheWriteTokens>0?J.usage.cacheWriteTokens:void 0,totalCost:J.usage.totalCost}:this.currentRunUsage,V=J?$8(J.messages):this.conversation.getMessages(),H=tX(this.config);if(Q)throw Q;return{text:X,usage:Y,messages:V,toolCalls:this.currentRunToolCalls,iterations:J?.iterations??0,finishReason:f,model:{id:this.config.modelId,provider:this.config.providerId,info:H},startedAt:Z,endedAt:W,durationMs:j}}}function vR($,J,Q,Z){if(!$)return;if(J==="debug"){$.debug(Q,Z);return}if(J==="error"&&$.error){$.error(Q,Z);return}let W=J==="warn"?"warn":J==="error"?"error":"info";$.log(Q,{...Z,severity:W})}function cR($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function uR($,J,Q,Z){let{buildInitialUserContent:W}=await Promise.resolve().then(() => sX);return W($,J,Q,Z)}function tX($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let J=xZ($);if(J?.[$.modelId])return J[$.modelId];return}import{buildClineSystemPrompt as eX}from"@cline/shared";function $Y($,J){let Q=$.trim();if(J.providerId.toLowerCase()!=="cline")return Q;return eX({ide:J.clineIdeName?.trim()||"Terminal",workspaceRoot:J.cwd?.trim()||"/",providerId:J.providerId,rules:`# Team Teammate Role
|
|
185
|
-
${Q}`,platform:J.clinePlatform,metadata:J.workspaceMetadata})}function JY($,J){let Q=$.trim();if(J.providerId.toLowerCase()!=="cline")return Q;return eX({ide:J.clineIdeName||"Terminal",workspaceRoot:J.cwd?.trim()||"/",providerId:J.providerId,overridePrompt:Q,metadata:J.workspaceMetadata,platform:J.clinePlatform})}function H$($){let J={...$};return{getRuntimeConfig:()=>J,getConnectionConfig:()=>({providerId:J.providerId,modelId:J.modelId,apiKey:J.apiKey,baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking}),updateConnectionDefaults:(Q)=>{J={...J,...Q}}}}function l$($){let J=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?$Y($.prompt,J):JY($.prompt,J);return{...$.configProvider.getConnectionConfig(),systemPrompt:Q,tools:$.tools,maxIterations:$.maxIterations??J.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:J.hooks,extensions:J.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:J.logger,role:$.role}}function B$($){let J=l$($),Q=new V$(J);if(J.onEvent)Q.subscribeEvents(J.onEvent);return Q}var pR=sZ.object({systemPrompt:sZ.string().describe("System prompt defining the sub-agent's behavior"),task:sZ.string().describe("Task for the sub-agent to complete")});function A$($){return dR({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:lR(pR),execute:async(J,Q)=>{let Z=$.createSubAgentTools?await $.createSubAgentTools(J,Q):$.subAgentTools??[],W=B$({kind:"subagent",prompt:J.systemPrompt,configProvider:$.configProvider,tools:Z,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),j=W.getAgentId(),f=W.getConversationId(),X=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:j,conversationId:f,parentAgentId:X,input:J})}catch{}try{let Y=await W.run(J.task),V={text:Y.text,iterations:Y.iterations,finishReason:Y.finishReason,usage:{inputTokens:Y.usage.inputTokens,outputTokens:Y.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:j,conversationId:f,parentAgentId:X,input:J,result:V,agentResult:Y})}catch{}return V}catch(Y){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:j,conversationId:f,parentAgentId:X,input:J,error:Y instanceof Error?Y:Error(String(Y))})}catch{}throw Y}},timeoutMs:300000,retryable:!1})}import{createTool as X0,TEAM_AWAIT_TIMEOUT_MS as rR,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as iR,TEAM_RUN_TEXT_PREVIEW_LIMIT as nR,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as aR,TeamAttachOutcomeFragmentInputSchema as QY,TeamAwaitRunsInputSchema as ZY,TeamBroadcastInputSchema as WY,TeamBroadcastToolResultSchema as sR,TeamCancelRunInputSchema as jY,TeamCancelRunToolResultSchema as oR,TeamCleanupInputSchema as fY,TeamCleanupToolResultSchema as tR,TeamCreateOutcomeInputSchema as XY,TeamCreateOutcomeToolResultSchema as eR,TeamFinalizeOutcomeInputSchema as YY,TeamFinalizeOutcomeToolResultSchema as $z,TeamListOutcomesInputSchema as VY,TeamListRunsInputSchema as HY,TeamMailboxMessageToolResultSchema as Jz,TeamMissionLogInputSchema as BY,TeamMissionLogToolResultSchema as Qz,TeamOutcomeFragmentToolResultSchema as AY,TeamOutcomeToolResultSchema as Zz,TeamReadMailboxInputSchema as KY,TeamReviewOutcomeFragmentInputSchema as GY,TeamRunTaskInputSchema as FY,TeamRunTaskToolResultSchema as oZ,TeamRunToolSummarySchema as tZ,TeamSendMessageInputSchema as DY,TeamSendMessageToolResultSchema as Wz,TeamShutdownTeammateInputSchema as UY,TeamSimpleAgentStatusToolResultSchema as RY,TeamSpawnTeammateInputSchema as zY,TeamStatusInputSchema as LY,TeamStatusToolResultSchema as jz,TeamTaskInputSchema as _Y,TeamTaskToolResultSchema as n4,validateWithZod as k,zodToJsonSchema as Y0}from"@cline/shared";function OY($,J){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=J)return Q;return`${Q.slice(0,Math.max(0,J-3)).trimEnd()}...`}function p$($,J){if($===void 0)throw Error(`Missing required field: ${J}`);return $}function fz($){let J=$.result;if(!J)return;return{textPreview:OY(J.text,nR),iterations:J.iterations,finishReason:J.finishReason,durationMs:J.durationMs,usage:{inputTokens:J.usage.inputTokens,outputTokens:J.usage.outputTokens,cacheReadTokens:J.usage.cacheReadTokens,cacheWriteTokens:J.usage.cacheWriteTokens,totalCost:J.usage.totalCost}}}function q5($){return $?.toISOString()}function eZ($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:OY($.message,iR),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:q5($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:q5($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:q5($.heartbeatAt),lastProgressAt:q5($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:fz($)}}function Xz($){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 J8=["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 TY($){let J=[];if($.createBaseTools)J.push(...$.createBaseTools());J.push(...r$({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:l$({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:J,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function Q8($){let J=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,Z=r$({runtime:$.runtime,requesterId:J,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),W=[];for(let j of $.restoredTeammates??[]){if($.runtime.isTeammateActive(j.agentId))continue;TY({runtime:$.runtime,requesterId:J,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:j}),W.push(j.agentId)}return{tools:Z,restoredFromPersistence:Q,restoredTeammates:W}}function r$($){let J=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,Z=$.includeManagementTools??!0,W=[];if(Q)W.push(X0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:Y0(zY),execute:async(f)=>{let X=k(zY,f);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!J)throw Error("Spawning teammates is disabled in this context.");let Y={agentId:X.agentId,rolePrompt:X.rolePrompt};if(TY({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:Y}),!Z)$.onLeadToolsUnlocked?.(r$({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return k(RY,{agentId:X.agentId,status:"spawned"})}}));if(!Z)return W;W.push(X0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:Y0(UY),execute:async(f)=>{let X=k(UY,f);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(X.agentId,X.reason),k(RY,{agentId:X.agentId,status:"stopped"})}})),W.push(X0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:Y0(LY),execute:async(f)=>{return k(LY,f),k(jz,$.runtime.getSnapshot())}})),W.push(X0({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:Y0(_Y),execute:async(f)=>{let X=k(_Y,f);switch(X.action){case"create":{let Y=new Set(aR.create??[]),V=Object.entries(f).filter(([B,A])=>Y.has(B)&&A!=null).map(([B])=>B),H=$.runtime.createTask({title:p$(X.title,"title"),description:p$(X.description,"description"),dependsOn:X.dependsOn,assignee:X.assignee,createdBy:$.requesterId});return k(n4,{action:"create",taskId:H.id,status:H.status,...V.length>0?{ignoredFields:V,note:`Ignored fields for action=create: ${V.join(", ")}`}:{}})}case"list":return k(n4,{action:"list",tasks:$.runtime.listTaskItems({status:X.status,assignee:X.assignee})});case"claim":{let Y=$.runtime.claimTask(p$(X.taskId,"taskId"),$.requesterId);return k(n4,{action:"claim",taskId:Y.id,status:Y.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_task with action=complete when done."})}case"complete":{let Y=$.runtime.completeTask(p$(X.taskId,"taskId"),$.requesterId,p$(X.summary,"summary"));return k(n4,{action:"complete",taskId:Y.id,status:Y.status})}case"block":{let Y=$.runtime.blockTask(p$(X.taskId,"taskId"),$.requesterId,p$(X.reason,"reason"));return k(n4,{action:"block",taskId:Y.id,status:Y.status})}}}}));let j=new Map;return W.push(X0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:Y0(FY),execute:async(f)=>{let X=k(FY,f);if(X.runMode==="async"){let H=$.runtime.startTeammateRun(X.agentId,X.task,{taskId:X.taskId||void 0,fromAgentId:$.requesterId,continueConversation:X.continueConversation||void 0});return k(oZ,{agentId:X.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${X.agentId} and queued as ${H.id}.`,runId:H.id})}let Y=j.get(X.agentId);if(Y){let H=await Y;return k(oZ,{...H,status:"joined",deduped:!0,message:`Task for ${X.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let V=$.runtime.routeToTeammate(X.agentId,X.task,{taskId:X.taskId||void 0,fromAgentId:$.requesterId,continueConversation:X.continueConversation||void 0}).then((H)=>k(oZ,{agentId:X.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${X.agentId} and completed in sync mode.`,text:H.text,iterations:H.iterations})).finally(()=>{j.delete(X.agentId)});return j.set(X.agentId,V),await V}})),W.push(X0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:Y0(jY),execute:async(f)=>{let X=k(jY,f),Y=$.runtime.cancelRun(X.runId,X.reason);return k(oR,{runId:Y.id,status:Y.status})}})),W.push(X0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:Y0(HY),execute:async(f)=>k(tZ.array(),$.runtime.listRuns(k(HY,f)).map(eZ))})),W.push(X0({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:Y0(ZY),timeoutMs:rR,execute:async(f)=>{let X=k(ZY,f);if(X.runId){let H=await $.runtime.awaitRun(X.runId);return Xz(H),k(tZ,eZ(H))}let Y=await $.runtime.awaitAllRuns(),V=Y.filter((H)=>["failed","cancelled","interrupted"].includes(H.status));if(V.length>0){let H=V.map((B)=>`${B.id}:${B.status}${B.error?`(${B.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${H}`)}return k(tZ.array(),Y.map(eZ))}})),W.push(X0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:Y0(DY),execute:async(f)=>{let X=k(DY,f),Y=$.runtime.sendMessage($.requesterId,X.toAgentId,X.subject,X.body,X.taskId??void 0);return k(Wz,{id:Y.id,toAgentId:Y.toAgentId})}})),W.push(X0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:Y0(WY),execute:async(f)=>{let X=k(WY,f),Y=$.runtime.broadcast($.requesterId,X.subject,X.body,{taskId:X.taskId??void 0});return k(sR,{delivered:Y.length})}})),W.push(X0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:Y0(KY),execute:async(f)=>{let X=k(KY,f);return k(Jz.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:X.unreadOnly,markRead:!0}))}})),W.push(X0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:Y0(BY),execute:async(f)=>{let X=k(BY,f),Y=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:X.taskId||void 0,kind:X.kind,summary:X.summary,evidence:X.evidence?.length?X.evidence:void 0,nextAction:X.nextAction||void 0});return k(Qz,{id:Y.id})}})),W.push(X0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:Y0(fY),execute:async(f)=>{if(k(fY,f),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),k(tR,{status:"cleaned"})}})),W.push(X0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:Y0(XY),execute:async(f)=>{let X=k(XY,f),Y=$.runtime.createOutcome({title:X.title,requiredSections:X.requiredSections,createdBy:$.requesterId});return k(eR,{outcomeId:Y.id,status:Y.status,requiredSections:Y.requiredSections})}})),W.push(X0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:Y0(QY),execute:async(f)=>{let X=k(QY,f),Y=$.runtime.attachOutcomeFragment({outcomeId:X.outcomeId,section:X.section,sourceAgentId:$.requesterId,sourceRunId:X.sourceRunId||void 0,content:X.content});return k(AY,{fragmentId:Y.id,status:Y.status})}})),W.push(X0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:Y0(GY),execute:async(f)=>{let X=k(GY,f),Y=$.runtime.reviewOutcomeFragment({fragmentId:X.fragmentId,reviewedBy:$.requesterId,approved:X.approved});return k(AY,{fragmentId:Y.id,status:Y.status})}})),W.push(X0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:Y0(YY),execute:async(f)=>{let X=k(YY,f),Y=$.runtime.finalizeOutcome(X.outcomeId);return k($z,{outcomeId:Y.id,status:Y.status})}})),W.push(X0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:Y0(VY),execute:async(f)=>{return k(VY,f),k(Zz.array(),$.runtime.listOutcomes())}})),W}function P5($){return{...$,tasks:$.tasks.map((J)=>({...J,createdAt:new Date(J.createdAt),updatedAt:new Date(J.updatedAt)})),mailbox:$.mailbox.map((J)=>({...J,sentAt:new Date(J.sentAt),readAt:J.readAt?new Date(J.readAt):void 0})),missionLog:$.missionLog.map((J)=>({...J,ts:new Date(J.ts)})),runs:($.runs??[]).map((J)=>({...J,startedAt:new Date(J.startedAt),endedAt:J.endedAt?new Date(J.endedAt):void 0,nextAttemptAt:J.nextAttemptAt?new Date(J.nextAttemptAt):void 0,heartbeatAt:J.heartbeatAt?new Date(J.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),finalizedAt:J.finalizedAt?new Date(J.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),reviewedAt:J.reviewedAt?new Date(J.reviewedAt):void 0}))}}function MY($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var Yz=[{id:"read_files",description:"Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. Long files are windowed; page with start_line/end_line.",headlessToolNames:["read_files"]},{id:"search_codebase",description:"Perform regex pattern searches across the codebase for code patterns, definitions, imports, and other text matches.",headlessToolNames:["search_codebase"]},{id:"run_commands",description:"Run shell commands from the root of the workspace for listing files, checking git status, builds, tests, and similar tasks.",headlessToolNames:["run_commands"]},{id:"editor",description:"Make controlled filesystem edits on text files with create, replace, and insert operations.",headlessToolNames:["editor"]},{id:"fetch_web_content",description:"Fetch URL content and analyze it with a prompt describing what to extract.",headlessToolNames:["fetch_web_content"]},{id:"skills",description:"Execute a configured skill within the main conversation when a matching skill exists for the task.",headlessToolNames:["skills"]},{id:"ask_question",description:"Ask the user a single clarifying question with 2-5 selectable options.",headlessToolNames:["ask_question"]},{id:"spawn_agent",description:A$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...J8]}],Vz={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function Hz($){return $==="plan"||$==="yolo"?$:"act"}function PY($){let J=Hz($.mode),Q=c0[h1({mode:J})],Z=t2($.providerId??"",$.modelId??"",J,o2);return{mode:J,flags:{...Q,...Z,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function qY($,J){if(J.disabledToolIds?.has($))return!1;let{flags:Q}=PY(J);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let Z=Vz[$];return Z?Q[Z]===!0:!1}function Bz($,J){if($.id==="editor"){let{flags:Q}=PY(J),Z=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:qY($.id,J),headlessToolNames:[Z?"apply_patch":"editor"]}}return{...$,defaultEnabled:qY($.id,J)}}function i$($={}){return Yz.map((J)=>Bz(J,$))}function N5($={}){return i$($).filter((J)=>J.defaultEnabled).map((J)=>J.id)}function w5($){if(!$.enabled)return new Set;let J=i$($.availabilityContext),Q=new Set(J.map((Z)=>Z.id));if(!$.allowlist||$.allowlist.length===0)return new Set(J.filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id));for(let Z of $.allowlist)if(!Q.has(Z))throw Error(`Unknown tool "${Z}". Available tools: ${J.map((W)=>W.id).join(", ")}`);return new Set($.allowlist)}function a4($,J={}){return i$(J).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function S5($,J={}){return a4($,J)}function n$($={}){let{executorOptions:J={},executors:Q,...Z}=$,W={...s2(J),...Q??{}};return X$({...Z,executors:W})}import{mkdirSync as Uz,writeFileSync as Rz}from"node:fs";import{dirname as zz}from"node:path";import{normalizeUserInput as Lz}from"@cline/shared";import{nanoid as _z}from"nanoid";var wY={};w(wY,{sanitizeSessionToken:()=>a$,parseTeamTaskSubSessionId:()=>W8,parseSubSessionId:()=>o4,makeTeamTaskSubSessionId:()=>s4,makeSubSessionId:()=>Z8,deriveSubsessionStatus:()=>t4});import{nanoid as Gz}from"nanoid";function a$($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function Z8($,J){let Q=a$($),Z=a$(J),W=`${Q}__${Z}`;return W.length>180?W.slice(0,180):W}function s4($,J){let Q=a$($),Z=a$(J);return`${Q}__teamtask__${Z}__${Gz(6)}`}function W8($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let Z=$.slice(0,Q),W=$.slice(Q+12),j=W.lastIndexOf("__");if(j<=0)return null;let f=W.slice(0,j),X=W.slice(j+2);if(!Z||!f||!X)return null;return{rootSessionId:Z,agentId:f,teamTaskId:X}}function o4($){if(W8($))return null;let J="__",Q=$.indexOf(J);if(Q<=0)return null;let Z=$.slice(0,Q),W=$.slice(Q+J.length);if(!Z||!W)return null;return{rootSessionId:Z,agentId:W}}function t4($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let J=String($.reason??"").toLowerCase();if(J.includes("cancel")||J.includes("abort")||J.includes("interrupt"))return"cancelled";if(J.includes("fail")||J.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as a}from"zod";var yY={};w(yY,{isTerminalSessionStatus:()=>CY,isNonTerminalSessionStatus:()=>j0,SessionSource:()=>U0,SESSION_STATUSES:()=>e4,NON_TERMINAL_SESSION_STATUSES:()=>SY});import{SESSION_STATUS_VALUES as Fz}from"@cline/shared";var e4=Fz,SY=["idle","running","pending"];function CY($){return!SY.includes($)}function j0($){return!CY($)}var U0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var Dz=a.enum(e4),S0=a.object({version:a.literal(1),session_id:a.string().min(1),source:a.string().min(1),pid:a.number().int(),started_at:a.string().min(1),ended_at:a.string().min(1).optional(),exit_code:a.number().int().nullable().optional(),status:Dz,interactive:a.boolean(),provider:a.string().min(1),model:a.string().min(1),cwd:a.string().min(1),workspace_root:a.string().min(1),team_name:a.string().min(1).optional(),enable_tools:a.boolean(),enable_spawn:a.boolean(),enable_teams:a.boolean(),prompt:a.string().optional(),metadata:a.record(a.string(),a.unknown()).optional(),messages_path:a.string().min(1).optional()});function EY($){if(!$)return!1;return Object.values($).some((J)=>typeof J==="function")}function J7($,J){let Q=[...$??[],...J??[]];if(Q.length===0)return;let Z=[],W=new Set;for(let j of Q){if(W.has(j.name))continue;W.add(j.name),Z.push(j)}return Z}function bY($){return JSON.stringify($,(J,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function x1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function $7($,J){let Q={...$};Q.id=x1(Q.id)??_z();let Z=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,W={id:x1(Z?.id)??x1(Q.modelId)??x1(J?.id),provider:x1(Z?.provider)??x1(Q.providerId)??x1(J?.provider),family:x1(Z?.family)??x1(J?.family)};if(delete Q.providerId,delete Q.modelId,W.id&&W.provider)Q.modelInfo={id:W.id,provider:W.provider,...W.family?{family:W.family}:{}};else delete Q.modelInfo;return Q}function C5($){return $.map((J)=>$7(J))}function y5($,J,Q=[]){let Z=$.map((Y,V)=>{let H=Q[V],A=H?.role===Y.role&&JSON.stringify(H.content)===JSON.stringify(Y.content)?{...H,...Y}:{...Y};return $7(A)}),W=Q.length,j=[];for(let Y=W;Y<Z.length;Y+=1)if(Z[Y]?.role==="assistant")j.push(Y);if(j.length===0){let Y=[...Z].reverse().findIndex((V)=>V.role==="assistant");if(Y===-1)return Z;j.push(Z.length-1-Y)}let f=j[j.length-1],X=j.some((Y)=>Z[Y]?.metrics);for(let Y of j){let V=Z[Y],H=V.metrics;if(!H&&Y===f&&!X){let B=J.usage;H={inputTokens:B.inputTokens,outputTokens:B.outputTokens,cacheReadTokens:B.cacheReadTokens??0,cacheWriteTokens:B.cacheWriteTokens??0,cost:B.totalCost}}Z[Y]={...$7(V,{id:J.model.id,provider:J.model.provider,family:J.model.info?.family}),...H?{metrics:H}:{},ts:V.ts??J.endedAt.getTime()}}return Z}function $6($){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 Oz=120;function s$($){let J=$?.trim();return J?J.slice(0,Oz):void 0}function Q7($){let J=Lz($??"").trim();if(!J)return;return s$(J.split(`
|
|
186
|
-
`)[0]?.trim())}function K$($){if(!$)return;let J={...$},Q=s$(typeof J.title==="string"?J.title:void 0);if(Q)J.title=Q;else delete J.title;return Object.keys(J).length>0?J:void 0}function
|
|
187
|
-
`,"utf8")}function kY($,J){return S0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:J?.endedAt??$.endedAt??void 0,exit_code:J?.exitCode??$.exitCode??void 0,status:J?.status??$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName??void 0,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt??void 0,metadata:J?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function IY($,J,Q){let Z=0;while(!0){let W=await $();if(W===void 0)return{updated:!1};let j=await J(W);if(typeof j==="object"&&j!==null&&"updated"in j&&j.updated===!1){if(Z+=1,Z>=Q)return j;continue}return j}}O0();var xY={};w(xY,{summarizeUsageFromMessages:()=>f8,sumUsageTotals:()=>Q6,getCurrentContextSize:()=>j7,createInitialAccumulatedUsage:()=>G0,accumulateUsageTotals:()=>V0});function G0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function V0($,J){return{inputTokens:$.inputTokens+Math.max(0,J.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,J.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,J.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,J.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,J.totalCost??0)}}function Q6($){let J=G0();for(let Q of $)J=V0(J,Q);return J}function j8($){return typeof $==="number"&&Number.isFinite($)?$:0}function f8($){let J=G0();for(let Q of $){let Z=Q.metrics;if(!Z)continue;J=V0(J,{inputTokens:j8(Z.inputTokens),outputTokens:j8(Z.outputTokens),cacheReadTokens:j8(Z.cacheReadTokens),cacheWriteTokens:j8(Z.cacheWriteTokens),totalCost:j8(Z.cost)})}return J}function j7($){for(let J=$.length-1;J>=0;J-=1){let Q=$[J];if(Q?.role!=="assistant")continue;let Z=j8(Q.metrics?.inputTokens);return Z>0?Z:void 0}return}function Tz($){if(!$||typeof $!=="object")return;let J=$,Q=J.skill??J.skill_name??J.skillName;if(typeof Q!=="string")return;let Z=Q.trim();return Z.length>0?Z:void 0}function f7($){if(!$||typeof $!=="object")return{};let J=$;return{agentId:typeof J.agentId==="string"?J.agentId:void 0,conversationId:typeof J.conversationId==="string"?J.conversationId:void 0,parentAgentId:typeof J.parentAgentId==="string"?J.parentAgentId:void 0}}function g1($){let J=$.agentId?.trim();if(!J)return;let Q=$.parentAgentId?.trim()||void 0,Z=$.teamRole,W="root";if(Z==="teammate")W="team_teammate";else if(Z==="lead")W="team_lead";else if(Q)W="subagent";return{agentId:J,agentKind:W,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Q,createdByAgentId:$.createdByAgentId?.trim()||Q||void 0,isSubagent:Boolean(Q),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:Z,teamAgentId:$.teamAgentId?.trim()||void 0}}function Mz($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function qz($){let J=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of J){let Z=Q?.trim();if(Z)return Z}return $.isPrimaryAgentEvent?"root":"unknown"}function X7($,J,Q){let{sessionId:Z,config:W,liveSession:j,emit:f}=$,X=W.telemetry,Y=j?.runtime.teamRuntime,V=Q?.isPrimaryAgentEvent??!0,H=f7(J),B=g1({agentId:Q?.agentId??H.agentId,conversationId:Q?.conversationId??H.conversationId,parentAgentId:Q?.parentAgentId??H.parentAgentId,createdByAgentId:Q?.createdByAgentId,teamId:Q?.teamId??Y?.getTeamId(),teamName:Q?.teamName??Y?.getTeamName(),teamRole:Q?.teamRole,teamAgentId:Q?.teamAgentId});if(J.type==="content_start"&&J.contentType==="tool"&&J.toolName==="skills"){let A=Tz(J.input);if(A)vJ(X,{ulid:Z,skillName:A,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:W.providerId,modelId:W.modelId,...B})}if(J.type==="content_end"&&J.contentType==="tool"){let A=J.toolName??"unknown",K=!J.error;if(mJ(X,{ulid:Z,tool:A,autoApproved:void 0,success:K,modelId:W.modelId,provider:W.providerId,...B}),!K&&(A==="editor"||A==="apply_patch"))cJ(X,{ulid:Z,modelId:W.modelId,provider:W.providerId,errorType:J.error,...B})}if(J.type==="notice"&&J.reason==="api_error")H4(X,{ulid:Z,model:W.modelId,provider:W.providerId,errorMessage:J.message,...B});if(J.type==="error")H4(X,{ulid:Z,model:W.modelId,provider:W.providerId,errorMessage:J.error?.message??"unknown error",...B});if(J.type==="usage"&&j?.turnUsageBaseline){let A=Mz(J);if(V){j.turnPrimaryUsage=V0(j.turnPrimaryUsage??G0(),A);let G=V0(j.turnUsageBaseline,j.turnPrimaryUsage);$.usageBySession.set(Z,G),g2(X,{ulid:Z,provider:W.providerId,model:W.modelId,source:"assistant",mode:W.mode,...B}),xJ(X,{ulid:Z,tokensIn:J.inputTokens,tokensOut:J.outputTokens,cacheWriteTokens:J.cacheWriteTokens,cacheReadTokens:J.cacheReadTokens,totalCost:J.cost,model:W.modelId,...B})}else{let G=qz({isPrimaryAgentEvent:V,overrides:Q,eventMetadata:H}),R=j.turnUsageByAgent??new Map;j.turnUsageByAgent=R,R.set(G,V0(R.get(G)??G0(),A))}let K=V0(j.turnPrimaryUsage??G0(),Q6(j.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(Z,V0(j.turnAggregateUsageBaseline??j.turnUsageBaseline,K))}if(J.type==="iteration_end"&&V)$.persistMessages(Z,j?.agent.getMessages()??[],j?.config.systemPrompt);f({type:"agent_event",payload:{sessionId:Z,event:J,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(V?"lead":void 0):void 0}}),f({type:"chunk",payload:{sessionId:Z,stream:"agent",chunk:bY(J),ts:Date.now()}})}function G$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as h_}from"@cline/shared";W1();import{existsSync as x5,readFileSync as AL,statSync as KL}from"node:fs";import{basename as GL,dirname as k5,join as g5,resolve as I5}from"node:path";import{discoverPluginModulePaths as FL,resolveConfiguredPluginModulePaths as WV,resolvePluginConfigSearchPaths as DL,SKILLS_CONFIG_DIRECTORY_NAME as UL}from"@cline/shared/storage";import{resolve as pz}from"node:path";import{normalizePluginManifest as rz}from"@cline/shared";import{existsSync as R0,readFileSync as Y8}from"node:fs";import{builtinModules as Pz,createRequire as B7}from"node:module";import{dirname as F$,extname as W6,isAbsolute as Nz,resolve as p}from"node:path";import{fileURLToPath as mY}from"node:url";import{PLUGIN_FILE_EXTENSIONS as wz}from"@cline/shared";var vY=F$(mY(import.meta.url)),Sz=B7(import.meta.url),Cz=p(vY,"..","..","..","..",".."),Y7=bz(Cz),yz=["@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"],A7=new Set(Pz.flatMap(($)=>[$,$.replace(/^node:/,"")])),Z6=new Set(wz),Ez=["development","node","import","require","default"];function bz($){let J={},Q={"@cline/sdk":p($,"packages/sdk/src/index.ts"),"@cline/agents":p($,"packages/agents/src/index.ts"),"@cline/core":p($,"packages/core/src/index.ts"),"@cline/llms":p($,"packages/llms/src/index.ts"),"@cline/shared":p($,"packages/shared/src/index.ts"),"@cline/shared/storage":p($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":p($,"packages/shared/src/db/index.ts")};for(let[Z,W]of Object.entries(Q))if(R0(W))J[Z]=W;for(let Z of["agents","core","llms","shared"]){let W=p($,"packages",Z),j=p(W,"package.json");if(!R0(j))continue;try{let f=JSON.parse(Y8(j,"utf8"));if(typeof f.name!=="string"||!f.exports)continue;if(typeof f.exports==="string"){let X=p(W,f.exports);if(R0(X))J[f.name]=X;continue}if(typeof f.exports!=="object")continue;for(let[X,Y]of Object.entries(f.exports)){let V=hz(W,Y);if(!V)continue;let H=X==="."?f.name:`${f.name}/${X.replace(/^\.\//,"")}`;J[H]=V}}catch{}}return J}function hz($,J){let Q=K7(J);if(!Q)return null;let Z=cY($,Q);for(let W of Z)if(R0(W))return W;return null}function K7($,J=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(J.has($))return null;J.add($);let Q=$;for(let Z of Ez){let W=K7(Q[Z],J);if(W)return W}return null}function cY($,J){let Q=J.replace(/^\.\//,""),Z=[p($,J)];if(Q.startsWith("dist/")){let W=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[p($,`${W}.ts`),p($,`${W}.tsx`),p($,`${W}.mts`),p($,`${W}.cts`),...Z]}return Z}function kz($){return Object.fromEntries(Object.entries($).sort(([J],[Q])=>Q.length-J.length))}function E5($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function X8($){if($.startsWith("@")){let[J,Q]=$.split("/",3);return Q?`${J}/${Q}`:$}return $.split("/",1)[0]??$}function Iz($){let J=X8($);if($===J)return".";return`.${$.slice(J.length)}`}function uY($){return X8($).startsWith("@cline/")}function V7($,J){let Q=X8(J),Z=F$($);while(!0){let W=p(Z,"node_modules",Q);if(R0(W)||R0(p(W,"package.json")))return!0;let j=p(Z,"..");if(j===Z)return!1;Z=j}}function gY($){return H7($)!==null}function H7($){try{return Sz.resolve($)}catch{}return xz($)}function xz($){let J=X8($),Q=dY(J);if(!Q)return null;let Z=p(Q,"package.json");try{let W=JSON.parse(Y8(Z,"utf8")),j=Iz($),f=j==="."&&typeof W.exports==="string"?W.exports:W.exports&&typeof W.exports==="object"&&Object.hasOwn(W.exports,j)?W.exports[j]:void 0,X=K7(f)??(j==="."&&typeof W.main==="string"?W.main:null);if(!X)return null;let Y=p(Q,X),V=[Y,...cY(Q,X).filter((H)=>H!==Y)];for(let H of V)if(R0(H))return H;return null}catch{return null}}function gz(){let $=[vY],J=process.env.CLINE_WRAPPER_PATH?.trim();if(J)$.push(F$(F$(J)));let Q=process.execPath?.trim();if(Q)$.push(F$(Q));return[...new Set($.map((Z)=>p(Z)))]}function mz($,J){let Q=$;while(!0){let Z=p(Q,"package.json");if(R0(Z))try{if(JSON.parse(Y8(Z,"utf8")).name===J)return Q}catch{}let W=p(Q,"node_modules",J,"package.json");if(R0(W))return F$(W);let j=p(Q,"..");if(j===Q)return null;Q=j}}function dY($){for(let J of gz()){let Q=mz(J,$);if(Q)return Q}return null}function vz($){let Q=F$($);for(let Z=0;Z<4;Z++){let W=p(Q,"package.json");if(R0(W))try{let f=JSON.parse(Y8(W,"utf8"));return f!=null&&typeof f==="object"&&"cline"in f}catch{return!1}let j=p(Q,"..");if(j===Q)return!1;Q=j}return!1}function lY($,J){let Q=J.startsWith("file:")?mY(J):Nz(J)?J:p(F$($),J);if(R0(Q)&&Z6.has(W6(Q)))return Q;for(let Z of Z6){let W=`${Q}${Z}`;if(R0(W))return W}for(let Z of Z6){let W=p(Q,`index${Z}`);if(R0(W))return W}return null}function pY($){let J=new Set,Q=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let Z of Q)for(let W of $.matchAll(Z)){let j=W[1];if(j)J.add(j)}return[...J]}function cz($){return W6($)!==".ts"}function rY($,J,Q=new Set){if(Q.has($)||!R0($))return;if(Q.add($),!Z6.has(W6($)))return;let Z=Y8($,"utf8"),W=cz($);for(let j of pY(Z)){if(j.startsWith("node:")||A7.has(j))continue;if(E5(j)){if(!W)continue;if(Object.hasOwn(Y7,j)||Object.hasOwn(Y7,X8(j))||V7($,j)||uY(j)&&gY(j)||J&&gY(j))continue;throw Error(`Cannot find module '${X8(j)}'`)}let f=lY($,j);if(f)rY(f,J,Q)}}function iY($,J=new Set,Q=new Set){if(J.has($)||!R0($))return Q;if(J.add($),!Z6.has(W6($)))return Q;let Z=Y8($,"utf8");for(let W of pY(Z)){if(Q.add(W),E5(W))continue;let j=lY($,W);if(j)iY(j,J,Q)}return Q}function uz($,J){let Q=B7($),Z={},W=iY($),j=new Set(yz);for(let[f,X]of Object.entries(Y7)){try{Q.resolve(f);continue}catch{}Z[f]=X}for(let f of W)if(E5(f)&&(uY(f)||J))j.add(f);for(let f of j){if(Object.hasOwn(Z,f)||V7($,f))continue;let X=H7(f);if(X)Z[f]=X}if(!J)return Z;for(let f of W){if(!E5(f)||Object.hasOwn(Z,f)||V7($,f)||f.startsWith("node:")||A7.has(f))continue;let X=H7(f);if(X)Z[f]=X}return Z}function dz($){let J=W6($);return J===".ts"||J===".tsx"||J===".mts"||J===".cts"}var o$;function lz(){if(o$!==void 0)return o$;let $=dY("jiti");if(!$)return o$=null,null;let J=p($,"dist","babel.cjs");if(!R0(J))return o$=null,null;try{let Z=B7(J)(J);o$=typeof Z==="function"?Z:null}catch{o$=null}return o$}async function nY($,J={}){let Q=!vz($);rY($,Q);let Z=uz($,Q),W=kz(Z),j=await import("jiti"),f=typeof j==="function"?j:typeof j.default==="function"?j.default:void 0;if(!f)throw Error("Unable to load jiti");let X=Object.entries(W).filter(([,B])=>dz(B)).map(([B])=>B),Y=lz(),V=Y?(B)=>Y({...B,interopDefault:!0}):void 0;return await f($,{alias:W,cache:J.useCache,requireCache:J.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...A7],transformModules:X,tryNative:!1,...V?{transform:V}:{}}).import($,{})}function aY($,J){if(!$)return!0;if($.providerIds?.length){if(!J?.providerId||!$.providerIds.includes(J.providerId))return!1}if($.modelIds?.length){if(!J?.modelId||!$.modelIds.includes(J.modelId))return!1}return!0}function sY($){return typeof $==="object"&&$!==null}function G7($){return Array.isArray($)&&$.every((J)=>typeof J==="string")}function iz($,J){if(!sY($.manifest))throw Error(`Invalid plugin module at ${J}: missing required "manifest"`);if(!G7($.manifest.capabilities))throw Error(`Invalid plugin module at ${J}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${J}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!G7($.manifest.providerIds))throw Error(`Invalid plugin module at ${J}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!G7($.manifest.modelIds))throw Error(`Invalid plugin module at ${J}: manifest.modelIds must be a string array when provided`)}function nz($,J){if(!sY($))throw Error(`Invalid plugin module at ${J}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${J}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${J}: missing required "manifest"`);iz($,J)}async function j6($,J={}){let Q=pz(J.cwd??process.cwd(),$),Z=await nY(Q,{useCache:J.useCache}),W=J.exportName??"plugin",j=Z.default??Z[W];nz(j,Q);let f=j,X=f.setup,Y=X?(V,H)=>{let B={...J.session,...H.session},A={...H,session:Object.keys(B).length>0?B:void 0,client:J.client??H.client,user:J.user??H.user,workspaceInfo:J.workspaceInfo??H.workspaceInfo,automation:J.automation??H.automation,logger:J.logger??H.logger,telemetry:J.telemetry??H.telemetry};return X(V,A)}:void 0;return{...f,manifest:rz(f.manifest),setup:Y}}async function b5($,J={}){return(await t$($,J)).plugins}async function t$($,J={}){let Q=[],Z=[],W=new Map,j=0;for(let X of $)try{let Y=await j6(X,J);if(!aY(Y.manifest,J))continue;let V=W.get(Y.name);if(V)Z.push({type:"duplicate_plugin_override",pluginName:Y.name,pluginPath:X,overriddenPluginPath:V.pluginPath,message:`Plugin "${Y.name}" from ${X} overrides ${V.pluginPath}`});W.set(Y.name,{plugin:Y,pluginPath:X,order:j++})}catch(Y){let V=Y instanceof Error?Y.message:String(Y);Q.push({pluginPath:X,phase:"load",message:V,stack:Y instanceof Error?Y.stack:void 0})}let f=[...W.values()].sort((X,Y)=>X.order-Y.order);return{plugins:f.map((X)=>X.plugin),pluginPaths:f.map((X)=>X.pluginPath),failures:Q,warnings:Z}}import{existsSync as R7}from"node:fs";import{createRequire as ZV}from"node:module";import{dirname as h5,join as H8}from"node:path";import{fileURLToPath as ez}from"node:url";var JV={};w(JV,{resolveSubprocessRuntimeExecutable:()=>F7,buildSubprocessSandboxCommand:()=>$V,SubprocessSandbox:()=>V8,CLINE_JS_RUNTIME_PATH_ENV:()=>eY});import{spawn as az}from"node:child_process";import{basename as sz}from"node:path";import{augmentNodeCommandForDebug as oz,withResolvedClineBuildEnv as tz}from"@cline/shared";function oY($){if($ instanceof Error)return $;return Error(String($))}var eY="CLINE_JS_RUNTIME_PATH";function tY($){let J=$?.trim();if(!J)return!1;let Q=sz(J).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function F7($={}){let J=$.env??process.env,Q=$.runtimeExecutable?.trim()||J[eY]?.trim();if(Q)return Q;let Z=$.execPath?.trim()||process.execPath;if(tY(Z))return Z;for(let W of[J.BUN_EXEC_PATH,J.npm_node_execpath,J.NODE]){let j=W?.trim();if(j&&tY(j))return j}return"node"}function $V($,J={}){let Q=F7({env:J.env,execPath:J.execPath,runtimeExecutable:J.runtimeExecutable});return oz([Q,...$],{env:J.env,execArgv:J.execArgv,debugRole:J.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class V8{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let J=this.pending.get($);if(!J)return;if(this.pending.delete($),J.timeout)clearTimeout(J.timeout);return J}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],J=$V($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=az(J[0]??F7(this.options),J.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:tz(process.env),windowsHide:!0});this.process=Q;let Z="",W=(j)=>{let f=Z+j;Z=f.length>4000?f.slice(-4000):f};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(j)=>{W(j)}),Q.on("message",(j)=>{this.onMessage(j)}),Q.on("error",(j)=>{this.failPending(Error(`${this.processLabel} process error: ${oY(j).message}`))}),Q.on("exit",(j,f)=>{this.process=null;let X=Z.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(j)}, signal=${String(f)})${X?`: ${X}`:""}`))})}async call($,J,Q={}){this.start();let Z=this.process;if(!Z||Z.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let W=`req_${++this.requestCounter}`,j={type:"call",id:W,method:$,args:J};return await new Promise((f,X)=>{let Y={resolve:(V)=>f(V),reject:X};if((Q.timeoutMs??0)>0)Y.timeout=setTimeout(()=>{this.clearPendingRequest(W),this.shutdown().catch(()=>{}),X(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(W,Y),Z.send(j,(V)=>{if(!V)return;let H=this.clearPendingRequest(W);if(!H)return;H.reject(Error(`${this.processLabel} failed to send call "${$}": ${oY(V).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((J)=>{let Q=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}J()},300);$.once("exit",()=>{clearTimeout(Q),J()});try{$.kill("SIGTERM")}catch{clearTimeout(Q),J()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let J=this.clearPendingRequest($.id);if(!J)return;if($.ok){J.resolve($.result);return}J.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[J,Q]of this.pending.entries()){if(this.pending.delete(J),Q.timeout)clearTimeout(Q.timeout);Q.reject($)}}}function $L($){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 f6($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function JL(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function QL(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=ZV($).resolve(`${JL()}/package.json`),Z=H8(h5(Q),"extensions","plugin-sandbox-bootstrap.js");return R7(Z)?Z:void 0}catch{return}}function ZL(){let $=process.execPath?.trim();if(!$)return;let J=H8(h5(h5($)),"extensions","plugin-sandbox-bootstrap.js");return R7(J)?J:void 0}function WL(){let $=h5(ez(import.meta.url)),J=ZV(import.meta.url),Q=[H8($,"plugin-sandbox-bootstrap.js"),H8($,"extensions","plugin-sandbox-bootstrap.js"),H8($,"agents","plugin-sandbox-bootstrap.js"),QL(),ZL()];for(let j of Q.filter((f)=>typeof f==="string"))if(R7(j))return{file:j};let Z=H8($,"plugin-sandbox-bootstrap.ts"),W="jiti";try{W=J.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(W)});`,`const jiti = createJiti(${JSON.stringify(Z)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(Z)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
|
|
188
|
-
`)}}var
|
|
189
|
-
`).filter(Boolean);await Promise.allSettled(W.map((j)=>J2($,["update-ref","-d",j])))}catch{}}async function
|
|
190
|
-
`),Z=[...$.appendMessages??[],...J.appendMessages??[]];return{cancel:$.cancel===!0||J.cancel===!0?!0:void 0,review:$.review===!0||J.review===!0?!0:void 0,context:Q||void 0,overrideInput:J.overrideInput!==void 0?J.overrideInput:$.overrideInput,systemPrompt:J.systemPrompt!==void 0?J.systemPrompt:$.systemPrompt,appendMessages:Z.length>0?Z:void 0}}function
|
|
191
|
-
`).map((j)=>j.trim()).filter(Boolean).filter((j)=>j.startsWith("HOOK_CONTROL\t")).map((j)=>j.slice(13)),W=Z.length>0?Z[Z.length-1]:J;try{return{parsedJson:JSON.parse(W)}}catch(j){return{parseError:j instanceof Error?j.message:"Failed to parse hook stdout JSON"}}}async function
|
|
192
|
-
`,f=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??cL(BV(),"hooks.jsonl");BV(f),mL(f,W,"utf8")};return{beforeRun:async(Z)=>{let W=q7(Z,"");Q({...z0(W,J),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Z)=>{let W=DV(Z);Q({...z0(W,J),hookName:"tool_call",iteration:W.iteration,tool_call:{id:W.call.id,name:W.call.name,input:W.call.input},preToolUse:{toolName:W.call.name,parameters:c5(W.call.input)}});return},afterTool:async(Z)=>{let W=UV(Z);Q({...z0(W,J),hookName:"tool_result",iteration:W.iteration,tool_result:W.record,postToolUse:{toolName:W.record.name,parameters:c5(W.record.input),result:typeof W.record.output==="string"?W.record.output:JSON.stringify(W.record.output),success:!W.record.error,executionTimeMs:W.record.durationMs}});return},afterRun:async({snapshot:Z,result:W})=>{let j=U$(Z);if(W.status==="completed"){Q({...z0(j,J),hookName:"agent_end",iteration:W.iterations,turn:{outputText:W.outputText,status:W.status},taskComplete:{taskMetadata:{}}});return}if(W.status==="aborted"||M7(W.error?.message)){Q({...z0(j,J),hookName:"agent_abort",reason:W.error?.message,taskCancel:{taskMetadata:{}}});return}if(W.error)Q({...z0(j,J),hookName:"agent_error",iteration:W.iterations,error:{name:W.error.name,message:W.error.message,stack:W.error.stack}})},onEvent:async(Z)=>{if(Z.type!=="message-added"||Z.message.role!=="user")return;let W=q7({snapshot:Z.snapshot},RV(Z.message.content));Q({...z0(W,J),hookName:"prompt_submit",userPromptSubmit:{prompt:W.userMessage,attachments:[]}})}}}function A6($){let J=sL($.workspacePath);if(!Object.values(J).some((B)=>B.length>0))return;let Z=async(B,A)=>{let K=J[A]??[];if(K.length===0)return;Q2({commands:K,cwd:$.cwd,logger:$.logger,payload:A==="agent_resume"?{...z0(B,$),hookName:A,taskResume:{taskMetadata:{},previousState:{}}}:{...z0(B,$),hookName:A,taskStart:{taskMetadata:{}}}})},W=async(B)=>{let A=J.prompt_submit??[];if(A.length>0)Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...z0(B,$),hookName:"prompt_submit",userPromptSubmit:{prompt:B.userMessage,attachments:[]}}})},j=async(B)=>{let A=J.tool_call??[];if(A.length===0)return;return oL({commands:A,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...z0(B,$),hookName:"tool_call",iteration:B.iteration,tool_call:{id:B.call.id,name:B.call.name,input:B.call.input},preToolUse:{toolName:B.call.name,parameters:c5(B.call.input)}}})},f=async(B)=>{let A=J.tool_result??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...z0(B,$),hookName:"tool_result",iteration:B.iteration,tool_result:B.record,postToolUse:{toolName:B.record.name,parameters:c5(B.record.input),result:typeof B.record.output==="string"?B.record.output:JSON.stringify(B.record.output),success:!B.record.error,executionTimeMs:B.record.durationMs}}})},X=async(B)=>{let A=J.agent_end??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...z0(B,$),hookName:"agent_end",iteration:B.iteration,turn:B.turn,taskComplete:{taskMetadata:{}}}})},Y=async(B)=>{let A=J.agent_error??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...z0(B,$),hookName:"agent_error",iteration:B.iteration,error:{name:B.error.name,message:B.error.message,stack:B.error.stack}}})},V=async(B)=>{if(M7(B.reason)){let K=J.agent_abort??[];if(K.length>0)Q2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...z0(B,$),hookName:"agent_abort",reason:B.reason,taskCancel:{taskMetadata:{}}}})}let A=J.session_shutdown??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...z0(B,$),hookName:"session_shutdown",reason:B.reason}})},H={};if((J.agent_start?.length??0)>0||(J.agent_resume?.length??0)>0||(J.prompt_submit?.length??0)>0){if((J.agent_start?.length??0)>0||(J.agent_resume?.length??0)>0)H.beforeRun=async(B)=>{let A=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await Z(U$(B.snapshot),A);return};if((J.prompt_submit?.length??0)>0)H.onEvent=async(B)=>{if(B.type!=="message-added"||B.message.role!=="user")return;await W(q7({snapshot:B.snapshot},RV(B.message.content)))}}if((J.tool_call?.length??0)>0)H.beforeTool=async(B)=>{let A=await j(DV(B));return tL(A)};if((J.tool_result?.length??0)>0)H.afterTool=async(B)=>{await f(UV(B));return};if((J.agent_end?.length??0)>0)H.afterRun=async({snapshot:B,result:A})=>{if(A.status!=="completed")return;await X({...U$(B),iteration:A.iterations,turn:{outputText:A.outputText,status:A.status}})};if((J.agent_error?.length??0)>0||(J.agent_abort?.length??0)>0||(J.session_shutdown?.length??0)>0){let B=H.afterRun;H.afterRun=async(A)=>{await B?.(A);let{snapshot:K,result:G}=A;if(G.status==="aborted"||M7(G.error?.message)){await V({...U$(K),reason:G.error?.message});return}if(G.error)await Y({...U$(K),iteration:G.iterations,error:G.error})}}return H}function D8($){return K8("core.hook_config_files",A6($))}function Z2($,J){let Q=$.map((Z)=>Z[J]).filter((Z)=>typeof Z==="function");if(Q.length===0)return;return async(Z)=>{let W;for(let j of Q){let f=await j(Z);if(!f||typeof f!=="object")continue;let X=f;W={...W??{},...X,stop:W?.stop===!0||X.stop===!0?!0:X.stop,options:W?.options||X.options?{...W?.options??{},...X.options??{}}:void 0}}return W}}function W2($){let J=$.filter((Q)=>Q!==void 0);if(J.length===0)return;return{beforeRun:Z2(J,"beforeRun"),afterRun:Z2(J,"afterRun"),beforeModel:Z2(J,"beforeModel"),afterModel:Z2(J,"afterModel"),beforeTool:Z2(J,"beforeTool"),afterTool:Z2(J,"afterTool"),onEvent:Z2(J,"onEvent")}}var zV={};w(zV,{normalizeRuntimeCapabilities:()=>L0});function L0(...$){let J,Q;for(let W of $){if(!W)continue;if(W.toolExecutors)J={...J??{},...W.toolExecutors};if(W.requestToolApproval)Q=W.requestToolApproval}let Z=J&&Object.keys(J).length>0;if(!Z&&!Q)return;return{...Z?{toolExecutors:J}:{},...Q?{requestToolApproval:Q}:{}}}var wV={};w(wV,{toProviderConfig:()=>d0,emptyStoredProviderSettings:()=>L$,StoredProviderSettingsSchema:()=>L8,StoredProviderSettingsEntrySchema:()=>H9,ProviderSettingsSchemaTyped:()=>z8});import{z as z$}from"zod";var NV={};w(NV,{toProviderConfig:()=>d0,safeParseSettings:()=>V9,safeCreateProviderConfig:()=>I7,parseSettings:()=>Y9,normalizeProviderId:()=>R8,isBuiltInProviderId:()=>h7,createProviderConfig:()=>k7,SapSettingsSchema:()=>j9,ReasoningSettingsSchema:()=>J9,ProviderSettingsSchema:()=>R$,ProviderProtocolSchema:()=>t5,ProviderIdSchema:()=>U6,ProviderClientSchema:()=>e5,OcaSettingsSchema:()=>f9,ModelCatalogSettingsSchema:()=>X9,GcpSettingsSchema:()=>Z9,BUILT_IN_PROVIDER_IDS:()=>b7,BUILT_IN_PROVIDER:()=>D6,AzureSettingsSchema:()=>W9,AwsSettingsSchema:()=>Q9,AuthSettingsSchema:()=>$9});import*as u0 from"@cline/llms";import{z as N}from"zod";var PV={};w(PV,{resolveProviderConfig:()=>F6,getProviderConfig:()=>o5,getLiveModelsCatalog:()=>U8,clearPublicModelsCatalogCache:()=>z_,clearPrivateModelsCatalogCache:()=>E7,clearLiveModelsCatalogCache:()=>y7,OPENAI_COMPATIBLE_PROVIDERS:()=>G6,DEFAULT_MODELS_CATALOG_URL:()=>i5});import*as H0 from"@cline/llms";function N7($){if(!Array.isArray($))return[];return $.map((J)=>{if(typeof J==="string")return J.trim();if(J&&typeof J==="object"){let Q=J;for(let Z of[Q.id,Q.name,Q.model])if(typeof Z==="string"&&Z.trim())return Z.trim()}return""}).filter((J)=>J.length>0)}function eL($,J){let Q=N7($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let Z=$,W=N7(Z.data??Z.models);if(W.length>0)return W;if(Z.models&&typeof Z.models==="object"&&!Array.isArray(Z.models)){let f=Object.keys(Z.models).filter((X)=>X.trim().length>0);if(f.length>0)return f}let j=Z.providers?.[J];if(j&&typeof j==="object"){let X=N7(j.models??j);if(X.length>0)return X}return[]}async function u5($,J){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return eL(await Q.json(),J)}function LV($){return $.replace(/\/+$/,"")}function d5($,J,Q){let Z=Q?.trim();if(!Z)return;let W=$?.trim();if(!W||!J?.trim())return Z;try{let j=new URL(Z),f=new URL(J),X=new URL(W);if(j.origin!==f.origin)return Z;let Y=LV(f.pathname),V=LV(X.pathname);if(Y&&j.pathname.startsWith(`${Y}/`)){let H=j.pathname.slice(Y.length);X.pathname=`${V}${H}`}else X.pathname=j.pathname;return X.search=j.search,X.hash=j.hash,X.toString()}catch{return Z}}function $_($){return Object.fromEntries(Object.entries($).map(([J,Q])=>[J,{...Q}]))}function J_($){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 Q_=Object.values(H0.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:$_($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),OV=Object.fromEntries(Q_.map(($)=>[$.id,$]));function Z_($){return OV[$]}function W_(){return Object.fromEntries(Object.entries(OV).filter(([,$])=>J_($)))}function TV($=[]){let J=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return J.length>0?J:void 0}var i5="https://models.dev/api.json",j_=600000,MV=300000,f_=5000,r5=new Map,K6=new Map,w7=new Map,l5=new Map;async function X_(){return H0.getGeneratedProviderModels()}async function Y_($,J={},Q={},Z={},W={},j={}){let f=await X_(),X=H0.resolveProviderModelCatalogKeys($),Y=Object.assign({},...X.map((B)=>f[B]??{})),V=Boolean(H0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),H=Object.keys(W).length>0;if(V&&H)return H0.sortModelsByReleaseDate({...W,...j});if($==="openai-codex")return H0.sortModelsByReleaseDate({...J,...H0.filterOpenAICodexModels(Q),...W,...j});return H0.sortModelsByReleaseDate({...Y,...J,...Q,...Z,...W,...j})}function V_($,J){let Q=H0.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((Z)=>J[Z]??{}))}function n5($){let J=$?.trim();return J&&J.length>0?J:""}function C7($){let J=$.apiKey?.trim()||$.accessToken?.trim();return J&&J.length>0?J:void 0}function H_($){let J=2166136261;for(let Q=0;Q<$.length;Q+=1)J^=$.charCodeAt(Q),J+=(J<<1)+(J<<4)+(J<<7)+(J<<8)+(J<<24);return(J>>>0).toString(16)}function B_($,J){return`${$}:${n5(J.baseUrl)}:${H_(C7(J)??"")}`}async function a5($,J,Q=f_){let Z=new AbortController,W=setTimeout(()=>Z.abort(),Q);try{return await fetch($,{...J,signal:Z.signal})}finally{clearTimeout(W)}}function j2($,J,Q){if(Q&&!$.includes(J))$.push(J)}function s5($,J){let Q=["streaming","tools"];return j2(Q,"images",Boolean(J.supportsImages)),j2(Q,"prompt-cache",Boolean(J.supportsPromptCache)),j2(Q,"reasoning",Boolean(J.supportsReasoning)),{id:$,name:J.name??$,contextWindow:J.contextWindow,maxInputTokens:J.maxInputTokens,maxTokens:J.maxTokens,capabilities:Q,releaseDate:J.releaseDate,status:"active"}}async function A_($,J){let Q=await a5("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${J}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let W=(await Q.json())?.data??[],j={};for(let f of W){let X=f.id?.trim();if(!X)continue;if(X.includes("whisper")||X.includes("tts")||X.includes("embedding"))continue;let Y=f.supported_features??[];j[X]=s5(X,{name:X,contextWindow:f.context_length,maxInputTokens:f.context_length,maxTokens:f.max_completion_tokens,supportsReasoning:Y.includes("reasoning")||Y.includes("reasoning_effort"),supportsImages:!1})}return j}function _V($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let J=Number($);return Number.isFinite(J)?J:void 0}return}async function K_($,J){let Q=await a5("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":J}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let W=(await Q.json())?.data??[],j={};for(let f of W){let X=f.id?.trim();if(!X)continue;j[X]=s5(X,{name:X,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return j}async function G_($,J){let Z=`${(n5($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,W=await a5(Z,{method:"GET",headers:{Authorization:`Bearer ${J}`,accept:"application/json"}});if(!W.ok)throw Error(`Poolside model refresh failed: HTTP ${W.status}`);let f=(await W.json())?.data??[],X={};for(let Y of f){let V=Y.id?.trim();if(!V)continue;let H=Y.supported_features??[],B=Y.supported_sampling_parameters??[],A=Y.input_modalities??[],K=["streaming"];j2(K,"tools",H.includes("tools")),j2(K,"reasoning",H.includes("reasoning")),j2(K,"temperature",B.includes("temperature")),j2(K,"images",A.includes("image"));let G={input:_V(Y.pricing?.prompt),output:_V(Y.pricing?.completion)};X[V]={id:V,name:Y.name??V,description:Y.description,contextWindow:Y.context_length,maxInputTokens:Y.context_length,maxTokens:Y.max_completion_tokens,capabilities:K,pricing:G.input!==void 0||G.output!==void 0?G:void 0,status:"active"}}return X}function F_($){let J=n5($);if(!J)return"http://localhost:4000";return J.endsWith("/v1")?J.slice(0,-3):J}async function D_($,J){let Z=`${F_($.baseUrl)}/v1/model/info`,W=async(V)=>a5(Z,{method:"GET",headers:{accept:"application/json",...V}}),j=await W({"x-litellm-api-key":J});if(!j.ok)j=await W({Authorization:`Bearer ${J}`});if(!j.ok)throw Error(`LiteLLM model refresh failed: HTTP ${j.status}`);let X=(await j.json())?.data??[],Y={};for(let V of X){let H=V.model_name?.trim(),A=V.litellm_params?.model?.trim()||H;if(!A)continue;let K=V.model_info,G=s5(A,{name:H??A,maxTokens:K?.max_output_tokens??K?.max_tokens,maxInputTokens:K?.max_input_tokens??K?.max_tokens,supportsImages:K?.supports_vision,supportsPromptCache:K?.supports_prompt_caching,supportsReasoning:K?.supports_reasoning});if(Y[A]=G,H)Y[H]={...G,id:H,name:H}}return Y}var qV={baseten:A_,hicap:K_,litellm:D_,poolside:G_},S7=new Map,p5=new Map;function U_($,J){return`${$}:${n5(J.baseUrl)}`}async function R_($,J,Q){let Z=H0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],W=d5(Q.baseUrl,Z?.provider.baseUrl,Z?.provider.modelsSourceUrl);if(!W)return{};let j=J?.cacheTtlMs??MV,f=U_($,Q),X=Date.now(),Y=S7.get(f);if(Y&&Y.expiresAt>X)return Y.data;let V=p5.get(f);if(V)return V;let H=u5(W,$).then((B)=>{let A=Object.fromEntries(B.map((K)=>[K,s5(K,{name:K})]));return S7.set(f,{data:A,expiresAt:X+j}),A}).finally(()=>{p5.delete(f)});return p5.set(f,H),H}function z_(){S7.clear(),p5.clear()}async function L_($,J){let Q=C7(J);if(!Q)return{};let Z=qV[$];if(!Z)return{};return Z(J,Q)}function __($,J,Q){if(!Q)return!1;if(!qV[$])return!1;if(J?.loadPrivateOnAuth===!1)return!1;return Boolean(C7(Q))}async function O_($,J,Q){let Z=J?.cacheTtlMs??MV,W=B_($,Q),j=Date.now(),f=w7.get(W);if(f&&f.expiresAt>j)return f.data;let X=l5.get(W);if(X)return X;let Y=L_($,Q).then((V)=>{return w7.set(W,{data:V,expiresAt:j+Z}),V}).finally(()=>{l5.delete(W)});return l5.set(W,Y),Y}async function T_($){return H0.fetchModelsDevProviderModels($,globalThis.fetch)}async function U8($={}){let J=$.url??i5,Q=$.cacheTtlMs??j_,Z=Date.now(),W=r5.get(J);if(W&&W.expiresAt>Z)return W.data;let j=K6.get(J);if(j)return j;let f=T_(J).then((X)=>{return r5.set(J,{data:X,expiresAt:Z+Q}),X}).finally(()=>{K6.delete(J)});return K6.set(J,f),f}function y7($){if($){r5.delete($),K6.delete($);return}r5.clear(),K6.clear()}function E7(){w7.clear(),l5.clear()}function M_($){return Object.fromEntries(Object.entries($).map(([J,Q])=>[J,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:TV(Q.capabilities)}]))}var G6=M_(W_());function o5($){let J=Z_($);if(!J)return;return{baseUrl:J.baseUrl||void 0,modelId:J.modelId,knownModels:J.knownModels,capabilities:TV(J.capabilities)}}async function F6($,J,Q){let Z=o5($);if(!Z)return;try{let W=J?.loadLatestOnInit?await U8(J):void 0,j=W?V_($,W):{},f=Q&&__($,J,Q)?await O_($,J,Q):{},Y=Boolean(H0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:Z.modelId,baseUrl:Z.baseUrl}:Q,V=Y?await R_($,J,Y).catch(()=>({})):{},H=await Y_($,Z.knownModels,j,f,V,Q?.knownModels);return{...Z,knownModels:H}}catch(W){if(J?.failOnError)throw W;return Z}}var D6=u0.BUILT_IN_PROVIDER,b7=u0.BUILT_IN_PROVIDER_IDS,h7=u0.isBuiltInProviderId,R8=u0.normalizeProviderId,U6=N.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),t5=N.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),e5=N.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),$9=N.object({apiKey:N.string().optional(),accessToken:N.string().optional(),refreshToken:N.string().optional(),expiresAt:N.number().int().positive().optional(),accountId:N.string().optional()}),q_=N.enum(["none","low","medium","high","xhigh"]),J9=N.object({enabled:N.boolean().optional(),effort:q_.optional(),budgetTokens:N.number().int().positive().optional()}),Q9=N.object({accessKey:N.string().optional(),secretKey:N.string().optional(),sessionToken:N.string().optional(),region:N.string().optional(),profile:N.string().optional(),authentication:N.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:N.boolean().optional(),useCrossRegionInference:N.boolean().optional(),useGlobalInference:N.boolean().optional(),endpoint:N.string().url().optional(),customModelBaseId:N.string().optional()}),Z9=N.object({projectId:N.string().optional(),region:N.string().optional()}),W9=N.object({apiVersion:N.string().optional(),useIdentity:N.boolean().optional()}),j9=N.object({clientId:N.string().optional(),clientSecret:N.string().optional(),tokenUrl:N.string().url().optional(),resourceGroup:N.string().optional(),deploymentId:N.string().optional(),useOrchestrationMode:N.boolean().optional(),api:N.enum(["orchestration","foundation-models"]).optional(),defaultSettings:N.record(N.string(),N.unknown()).optional()}),f9=N.object({mode:N.enum(["internal","external"]).optional(),usePromptCache:N.boolean().optional()}),X9=N.object({loadLatestOnInit:N.boolean().optional(),loadPrivateOnAuth:N.boolean().optional(),url:N.string().url().optional(),cacheTtlMs:N.number().int().positive().optional(),failOnError:N.boolean().optional()}),R$=N.object({provider:U6,apiKey:N.string().optional(),auth:$9.optional(),model:N.string().optional(),protocol:t5.optional(),client:e5.optional(),routingProviderId:U6.optional(),maxTokens:N.number().int().positive().optional(),contextWindow:N.number().int().positive().optional(),baseUrl:N.string().url().optional(),headers:N.record(N.string(),N.string()).optional(),timeout:N.number().int().positive().optional(),reasoning:J9.optional(),aws:Q9.optional(),gcp:Z9.optional(),azure:W9.optional(),sap:j9.optional(),oca:f9.optional(),region:N.string().optional(),apiLine:N.enum(["china","international"]).optional(),capabilities:N.array(N.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:X9.optional()});function Y9($){return R$.parse($)}function V9($){return R$.safeParse($)}function P_($){return $.protocol==="openai-responses"||$.client==="openai"}function d0($,J={}){let Q=$.provider,Z=R8(Q),W=J.includeKnownModels!==!1,j=$.reasoning?.effort||"none",f=j==="none"?void 0:j,X=G6[Z],Y=Object.assign({},...u0.resolveProviderModelCatalogKeys(Z).map((R)=>u0.getGeneratedModelsForProvider(R))),V=Object.keys(Y)[0],H=l2(Z,$),B=$.baseUrl??(Z==="oca"?$.oca?.mode==="internal"?J5:Q5:X?.baseUrl),A=$.routingProviderId??(P_($)&&Z!==D6.OPENAI_NATIVE?D6.OPENAI_NATIVE:void 0),K=W?X?.knownModels??(Object.keys(Y).length>0?Y:void 0):void 0,G={providerId:Q,clientType:$.client,routingProviderId:A,modelId:$.model??X?.modelId??V??"default",...W?{knownModels:K}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:B,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:f,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??X?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(G).filter(([R,D])=>D!==void 0))}function k7($){let J=Y9($);return d0(J)}function I7($){let J=V9($);if(J.success)return{success:!0,config:d0(J.data)};return{success:!1,error:J.error}}var z8=R$;var H9=z$.object({settings:R$,updatedAt:z$.string().datetime(),tokenSource:z$.enum(["manual","oauth","migration"]).default("manual")}),L8=z$.object({version:z$.literal(1),lastUsedProvider:z$.string().min(1).optional(),providers:z$.record(z$.string(),H9)});function L$(){return{version:1,providers:{}}}W1();var EV={};w(EV,{InMemoryWorkspaceManager:()=>O8});import{upsertWorkspaceInfo as C_,WorkspaceManifestSchema as g7}from"@cline/shared";var yV={};w(yV,{normalizeWorkspacePath:()=>m1,generateWorkspaceInfoWithDiagnostics:()=>R6,generateWorkspaceInfo:()=>_8,buildWorkspaceMetadataWithInfo:()=>x7,buildWorkspaceMetadata:()=>z6});import{basename as N_,resolve as w_}from"node:path";import{performance as SV}from"node:perf_hooks";import{processWorkspaceInfo as CV}from"@cline/shared";import S_ from"simple-git";function m1($){return w_($)}async function _8($){return(await R6($)).info}function B9($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function R6($){let J=m1($),Q={rootPath:J,hint:N_(J)},Z;try{let W=S_({baseDir:J});if(!await W.checkIsRepo())return{info:Q,vcsType:"none"};try{let f=await W.getRemotes(!0);if(f.length>0){let X=f.map((Y)=>{let V=Y.refs.fetch||Y.refs.push;return`${Y.name}: ${V}`});Q.associatedRemoteUrls=X}}catch(f){Z??=B9(f)}try{let f=(await W.revparse(["HEAD"])).trim();if(f.length>0)Q.latestGitCommitHash=f}catch(f){Z??=B9(f)}try{let f=(await W.branch()).current.trim();if(f.length>0)Q.latestGitBranchName=f}catch(f){Z??=B9(f)}return{info:Q,vcsType:"git",error:Z}}catch(W){return{info:Q,vcsType:"none",error:B9(W)}}}async function z6($){let J=await _8($);return CV(J)}async function x7($){let J=SV.now(),Q=await R6($),Z=SV.now()-J,W=Q.info;return{workspaceInfo:W,workspaceMetadata:CV(W),durationMs:Z,vcsType:Q.vcsType,initError:Q.error}}class O8{manifest;listeners=new Set;constructor($){this.manifest=g7.parse($??{workspaces:{}})}async addWorkspacePath($){let J=await _8($);return this.manifest=C_(this.manifest,J),this.emit({type:"workspace_added",workspace:J}),J}async switchWorkspace($){let J=m1($),Q=this.manifest.workspaces[J];if(Q)return this.manifest=g7.parse({...this.manifest,currentWorkspacePath:J}),this.emit({type:"workspace_switched",workspace:Q}),Q;let Z=await this.addWorkspacePath(J);return this.manifest=g7.parse({...this.manifest,currentWorkspacePath:Z.rootPath}),this.emit({type:"workspace_switched",workspace:Z}),Z}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let J=m1($);return this.manifest.workspaces[J]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let J of this.listeners)J($)}}O0();import{createHash as y_}from"node:crypto";var bV=new Set,hV=new Set;function E_($){return y_("sha256").update($).digest("hex")}function b_($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function kV($){if(!$.telemetry)return;let J=E_($.rootPath),Q=$.rootCount??1;if(!bV.has(J))bV.add(J),bJ($.telemetry,{root_count:Q,vcs_types:b_($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!hV.has(J)){hV.add(J);let Z=Error($.initError.message);Z.name=$.initError.errorType||"Error",hJ($.telemetry,Z,{fallback_to_single_root:!0,workspace_count:Q})}}function k_($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function I_($,J,Q){if(J.length>0)for(let j of J)Q?.log(j.message,{severity:"warn"});if($.length===0)return;let Z=$.slice(0,3).map(k_).join("; "),W=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${Z}${W}. Use --verbose for more details.`,{severity:"warn"});for(let j of $)Q?.log(`Plugin initialization failed (${j.phase}) for ${j.pluginPath}`,{severity:"warn",stack:j.stack,pluginPath:j.pluginPath,pluginName:j.pluginName})}function x_($,J){let Q=typeof $.thinking==="boolean",Z=typeof $.reasoningEffort==="string";if(!Q&&!Z)return J;return{...J??{},...Q?{enabled:$.thinking}:{},...Z?{effort:$.reasoningEffort}:{}}}function IV($,J){return h_($,J)}function g_($){let J=0;for(let Q of $??[]){if(Q.role!=="user")continue;if(("metadata"in Q&&Q.metadata&&typeof Q.metadata==="object"&&!Array.isArray(Q.metadata)?Q.metadata:void 0)?.kind==="recovery_notice")continue;J+=1}return J}function m_($){let J={...$.storedHeaders??{},...$.configHeaders??{}},Q=$.accountId?.trim()||v_($.accessToken);if(J.originator="cline",J.session_id=$.sessionId,J["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,Q)J["ChatGPT-Account-Id"]=Q;return J}function v_($){let J=$?.trim();if(!J)return;let Q=T0(J),Z=Q?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof Z==="string"&&Z.length>0)return Z;let W=Q?.organizations?.[0]?.id;if(typeof W==="string"&&W.length>0)return W;let j=Q?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return}function c_($,J,Q,Z,W){let j=Q.getProviderSettings($.providerId),f=Z||j?.modelCatalog?{...Z??{},...j?.modelCatalog??{}}:void 0,X=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,Y={...j??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??j?.apiKey,baseUrl:$.baseUrl??j?.baseUrl,headers:$.providerId==="openai-codex"?m_({sessionId:J,configHeaders:$.headers,storedHeaders:j?.headers,accountId:j?.auth?.accountId,accessToken:$.apiKey??j?.auth?.accessToken??j?.apiKey}):$.headers??j?.headers,reasoning:x_($,j?.reasoning),modelCatalog:f},V={...d0(Y),...X??{}};if($.knownModels)V.knownModels=$.knownModels;if($.extensionContext)V.extensionContext=$.extensionContext;let B=$.fetch??V.fetch??W;if(B)V.fetch=B;return V}async function xV($){let{input:J,sessionId:Q,providerSettingsManager:Z,defaultTelemetry:W,defaultCapabilities:j,defaultToolPolicies:f,defaultFetch:X,onPluginEvent:Y,onTeamEvent:V,createSubAgentLifecycleCallbacks:H,createSpawnTool:B,localRuntime:A,readSessionMetadata:K,writeSessionMetadata:G}=$,R=G$(J.config),{modelCatalogDefaults:D,userInstructionService:U,configExtensions:F,onTeamRestored:O,...T}=A??{},L=Object.keys(T).length>0?T:void 0,{workspaceInfo:z,workspaceMetadata:P,durationMs:S,vcsType:b,initError:u}=await x7(R),o=L?.extensionContext,J0={...o??{},workspace:{...z,...o?.workspace??{}},session:{...o?.session??{},sessionId:Q},logger:o?.logger??L?.logger,telemetry:o?.telemetry??L?.telemetry??W};kV({telemetry:J0.telemetry,rootPath:z.rootPath,workspaceInfo:z,rootCount:1,vcsType:b,durationMs:S,initError:u,featureFlagEnabled:!0});let t=D8({cwd:J.config.cwd,workspacePath:R,rootSessionId:Q,logger:L?.logger,workspaceInfo:z}),$1=EY(L?.hooks)?void 0:F8({rootSessionId:Q,workspacePath:R,workspaceInfo:z}),b$=W2([L?.hooks,$1]),n;if(IV(F,"plugins"))try{n=await A8({pluginPaths:L?.pluginPaths,workspacePath:R,cwd:J.config.cwd,onEvent:Y,providerId:J.config.providerId,modelId:J.config.modelId,workspaceInfo:z,session:J0.session,client:J0.client,user:J0.user,logger:J0.logger,telemetry:J0.telemetry,automation:J0.automation}),I_(n.failures,n.warnings,L?.logger)}catch(x2){let sQ=x2 instanceof Error?x2.message:String(x2);L?.logger?.log?.(`plugin loading failed; continuing without plugins (${sQ})`)}let C=J7(t?[t]:void 0,J7(L?.extensions,_5(n?.extensions))),F0=IV(F,"plugins")?$2(n?.pluginPaths??[]):void 0,f0={...J.config,...L??{},sessionId:Q,hooks:b$,extensions:C,extensionContext:J0,telemetry:J0.telemetry},w0=c_(f0,Q,Z,D,X),k2=W2([f0.hooks,f0.checkpoint?.enabled===!0?HV({cwd:f0.cwd,sessionId:Q,logger:f0.logger,createCheckpoint:f0.checkpoint?.createCheckpoint,initialRunCount:g_(J.initialMessages),readSessionMetadata:K,writeSessionMetadata:G}):void 0]),T1={...f0,providerConfig:w0,workspaceMetadata:P,hooks:k2},Y1=J.toolPolicies??f0.toolPolicies??f,Y4=L0(j,J.capabilities),I2=Y4?.requestToolApproval,SJ=Y4?.toolExecutors,M1=H?.(T1),CJ=new O8({currentWorkspacePath:z.rootPath,workspaces:{[z.rootPath]:z}});return{effectiveInput:J,config:T1,providerConfig:w0,workspaceMetadata:P,workspaceInfo:z,extensions:C,hooks:k2,toolPolicies:Y1,requestToolApproval:I2,pluginSandboxShutdown:n?.shutdown,runtimeBuilderInput:{config:T1,hooks:k2,extensions:C,onTeamEvent:V,createSpawnTool:B,onTeamRestored:O,onSubAgentEvent:M1?.onSubAgentEvent,onSubAgentStart:M1?.onSubAgentStart,onSubAgentEnd:M1?.onSubAgentEnd,userInstructionService:U,pluginSkillDirectories:F0,configExtensions:F,toolExecutors:SJ,toolPolicies:Y1,workspaceManager:CJ,logger:T1.logger,telemetry:T1.telemetry,requestToolApproval:I2}}}import{existsSync as K9,mkdirSync as u_,readdirSync as d_,rmdirSync as l_,rmSync as p_,unlinkSync as r_}from"node:fs";import{dirname as gV,join as A9}from"node:path";function e(){return new Date().toISOString()}function L6($){if(!$||!K9($))return;try{r_($)}catch{}}function i_($){let J=W8($);if(J)return{rootSessionId:J.rootSessionId,fileStem:`${J.agentId}__${J.teamTaskId}`};let Q=o4($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class m7{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return A9(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let J=this.sessionArtifactsDir($);if(!K9(J))u_(J,{recursive:!0});return J}sessionMessagesPath($){return A9(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,J=!1){let Q=J?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return A9(Q,`${$}.json`)}removeSessionDirIfEmpty($){let J=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(J.startsWith(Q)&&J!==Q){if(!K9(J)){J=gV(J);continue}try{if(d_(J).length>0)break;l_(J)}catch{break}J=gV(J)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!K9($))return;try{p_($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,J,Q){let{rootSessionId:Z,fileStem:W}=i_($),j=this.sessionArtifactsDir(Z);return{messagesPath:A9(j,`${W}.messages.json`)}}}import{resolveDocumentsExtensionPath as n_}from"@cline/shared/storage";O0();function mV($,J,Q,Z,W){if(Q)IJ($.telemetry,{ulid:J,apiProvider:$.providerId,...W});else kJ($.telemetry,{ulid:J,apiProvider:$.providerId,...W});a_($.telemetry,{workspacePath:Z})}function a_($,J){let Q=n_("Hooks"),Z=D$(J.workspacePath),W=new Map;for(let j of Z){let f=j.hookEventName??"unknown",X=W.get(f)??{global:0,workspace:0};if(j.path===Q||j.path.startsWith(`${Q}/`))X.global+=1;else X.workspace+=1;W.set(f,X)}for(let[j,f]of W.entries())rJ($,j,f.global,f.workspace)}function vV($,J){for(let Q of J.mentions)lJ($,Q,J.matchedFiles.includes(Q)?1:0,"file",!J.matchedFiles.includes(Q));for(let Q of J.matchedFiles)uJ($,"file",Q.length);for(let Q of J.ignoredMentions)dJ($,"file","not_found",Q)}var iG={};w(iG,{ProviderSettingsManager:()=>_1});import{chmodSync as aG,existsSync as Pj,mkdirSync as Xb,readFileSync as Yb,writeFileSync as Vb}from"node:fs";import{basename as sG,dirname as Nj}from"node:path";import{resolveProviderSettingsPath as Hb}from"@cline/shared/storage";var M={};w(M,{writeHubDiscovery:()=>d9,writeGlobalSettings:()=>k1,withHubStartupLock:()=>l9,verifyHubConnection:()=>G1,updateMcpServerOAuthState:()=>H2,updateLocalProvider:()=>IQ,uninstallPlugin:()=>t3,truncateNotificationBody:()=>UJ,toggleDisabledTool:()=>z5,toTeamProgressLifecycleEvent:()=>u8,toProviderConfig:()=>d0,toHubStatusUrl:()=>PW,toHubHealthUrl:()=>p9,toHookConfigFileName:()=>B6,syncPluginMcpServersToSettings:()=>d3,summarizeUsageFromMessages:()=>f8,stopLocalHubServerGracefully:()=>gW,startLocalOAuthServer:()=>J1,startHubWebSocketServer:()=>C2,startHubServer:()=>uK,startClineDeviceAuth:()=>WZ,splitCoreSessionConfig:()=>u6,spawnDetachedHubServerWithRetry:()=>h8,spawnDetachedHubServer:()=>EW,setTelemetryOptOutGlobally:()=>yX,setMcpServerDisabled:()=>Y2,setDisabledTools:()=>IZ,setDisabledPlugin:()=>xX,setAutoUpdateEnabledGlobally:()=>bX,sendHubCommand:()=>cA,saveProviderOAuthCredentials:()=>x$,saveLocalProviderSettings:()=>fj,saveLocalProviderOAuthCredentials:()=>Hj,sanitizeSessionToken:()=>a$,safeParseSettings:()=>V9,safeCreateProviderConfig:()=>I7,runSubprocessEvent:()=>r8,runHook:()=>n8,reviveTeamStateDates:()=>P5,restartLocalHubIfIdleAfterStartupTimeout:()=>s9,resolveWorkspaceHubOwnerContext:()=>PB,resolveWorkflowsConfigSearchPaths:()=>y6,resolveSkillsConfigSearchPaths:()=>S6,resolveSharedHubOwnerContext:()=>E0,resolveSessionBackend:()=>W3,resolveRulesConfigSearchPaths:()=>C6,resolveProviderConfig:()=>F6,resolveProviderApiKeyFromSettings:()=>HZ,resolveProductionHubOwnerContext:()=>n0,resolvePluginSkillDirectoriesFromPaths:()=>$2,resolvePluginConfigSearchPaths:()=>X6,resolveMcpServerRegistrations:()=>A1,resolveLocalClineAuthToken:()=>Aj,resolveHubUrl:()=>H3,resolveHubOwnerContext:()=>l1,resolveHubEndpointOptions:()=>i0,resolveHubBuildId:()=>u9,resolveHooksConfigSearchPaths:()=>V6,resolveDisabledToolNames:()=>B1,resolveDisabledPluginPaths:()=>p4,resolveDefaultMcpSettingsPath:()=>B0,resolveDefaultHubPort:()=>b8,resolveDefaultHubPathname:()=>yW,resolveDefaultHubHost:()=>CW,resolveCoreSelectedToolIds:()=>w5,resolveCoreDistinctId:()=>b0,resolveCompatibleLocalHubUrl:()=>QJ,resolveClineDir:()=>OB,resolveClineDataDir:()=>R2,resolveAndLoadAgentPlugins:()=>A8,resolveAgentPluginPaths:()=>e$,requestHubShutdown:()=>JJ,requestDesktopToolApproval:()=>m3,removePluginMcpServersFromSettings:()=>MJ,rememberRecoverableLocalHubUrl:()=>P$,registerRemoteConfigSessionBlobUpload:()=>_Q,registerMcpServersFromSettingsFile:()=>B2,registerDisposable:()=>Zb,refreshProviderModelsFromSource:()=>Xj,refreshOpenAICodexToken:()=>$5,refreshOcaToken:()=>W5,refreshClineToken:()=>tJ,readSessionCheckpointHistory:()=>RJ,readRemoteConfigSessionBlobUploadMetadata:()=>C3,readHubDiscovery:()=>A0,readGlobalSettings:()=>M0,readBearerToken:()=>FQ,probeHubServer:()=>p1,probeHubConnection:()=>vA,prewarmFileIndex:()=>A5,prewarmDetachedHubServer:()=>i9,prepareRemoteConfigCoreIntegration:()=>E3,parseWorkflowConfigFromMarkdown:()=>w6,parseUserCommandEnvelope:()=>Qb,parseSkillConfigFromMarkdown:()=>P6,parseSettings:()=>Y9,parseRuleConfigFromMarkdown:()=>N6,parseHookEventPayload:()=>i8,parseConfiguredAgentConfig:()=>fJ,normalizeWorkspacePath:()=>m1,normalizeUserInput:()=>Jb,normalizeSdkError:()=>$b,normalizeRuntimeCapabilities:()=>L0,normalizeProviderId:()=>R8,normalizeOAuthProvider:()=>Yj,normalizeHubWebSocketUrl:()=>N$,noopBasicLogger:()=>eE,migrateLegacyProviderSettings:()=>PJ,mergeRulesForSystemPrompt:()=>N8,mergeAgentHooks:()=>W2,makeTeamTaskSubSessionId:()=>s4,makeSubSessionId:()=>Z8,loginOpenAICodex:()=>G4,loginOcaOAuth:()=>U4,loginLocalProvider:()=>Vj,loginClineOAuth:()=>A4,loginAndSaveProviderOAuthCredentials:()=>z4,loginAndSaveLocalProviderOAuthCredentials:()=>Bj,loadOpenTelemetryAdapter:()=>mE,loadMcpSettingsFile:()=>X2,loadLlmsConfigFromFile:()=>Tj,loadConfiguredAgentConfigs:()=>m8,loadAgentPluginsFromPathsWithDiagnostics:()=>t$,loadAgentPluginsFromPaths:()=>b5,loadAgentPluginFromPath:()=>j6,listSessionHistoryFromBackend:()=>OW,listPluginToolsWithDiagnostics:()=>b9,listPluginTools:()=>v6,listMcpServerOAuthStatuses:()=>g6,listLocalProviders:()=>Wj,listHookConfigFiles:()=>D$,isToolDisabledGlobally:()=>hX,isTelemetryOptedOutGlobally:()=>R5,isSessionNotFoundError:()=>d1,isRuleEnabled:()=>T9,isPluginDisabledGlobally:()=>IX,isOAuthProvider:()=>I$,isHubReconnectableTransportError:()=>IW,isHubCommandTimeoutError:()=>a9,isDiscoveryFilePresent:()=>MB,isClineAccountActionRequest:()=>G9,isBuiltInProviderId:()=>h7,isAutoUpdateEnabledGlobally:()=>EX,identifyAccount:()=>S1,hasMcpSettingsFile:()=>c1,getValidOpenAICodexCredentials:()=>F4,getValidOcaCredentials:()=>R4,getValidClineCredentials:()=>K4,getProviderOAuthCredentialsFromSettings:()=>L4,getProviderConfigFields:()=>Kj,getProviderConfig:()=>o5,getProviderAuthStorageId:()=>VZ,getProviderAuthHandler:()=>Z0,getPersistedProviderApiKey:()=>l2,getMcpServerOAuthState:()=>V2,getLocalProviderModels:()=>jj,getLiveModelsCatalog:()=>U8,getFileIndex:()=>b1,getCurrentContextSize:()=>j7,getCoreHeadlessToolNames:()=>a4,getCoreDefaultEnabledToolIds:()=>N5,getCoreBuiltinToolCatalog:()=>i$,getCoreAcpToolNames:()=>S5,getClineDefaultSystemPrompt:()=>cE,generateWorkspaceInfoWithDiagnostics:()=>R6,generateWorkspaceInfo:()=>_8,formatRulesForSystemPrompt:()=>P8,formatProviderOAuthApiKey:()=>BZ,formatDisplayUserInput:()=>tE,filterExtensionToolRegistrations:()=>_5,filterDisabledTools:()=>I1,filterDisabledPluginPaths:()=>L5,fetchClineRecommendedModels:()=>_j,executeClineAccountAction:()=>F9,ensureHubWebSocketServer:()=>DQ,ensureHubServer:()=>dK,ensureDetachedHubServer:()=>EB,ensureCustomProvidersLoaded:()=>bQ,ensureCompatibleLocalHubUrl:()=>_2,enrichPromptWithMentions:()=>a2,emptyWorkspaceManifest:()=>aE,emptyStoredProviderSettings:()=>L$,discoverPluginModulePaths:()=>Y6,disablePluginMcpServersInSettings:()=>l3,deriveSubsessionStatus:()=>t4,deleteLocalProvider:()=>xQ,defineLlmsConfig:()=>Oj,createWorkflowsConfigDefinition:()=>h6,createUserInstructionConfigService:()=>_$,createToolPoliciesWithPreset:()=>G5,createTool:()=>nE,createTeamName:()=>MQ,createSubprocessHooks:()=>jQ,createSpawnAgentTool:()=>A$,createSkillsConfigDefinition:()=>E6,createSessionHost:()=>p8,createRuntimeHost:()=>p8,createRulesConfigDefinition:()=>b6,createRemoteConfigSessionMessagesArtifactUploader:()=>y3,createProviderConfig:()=>k7,createOpenTelemetryTelemetryService:()=>DJ,createOAuthClientCallbacks:()=>T8,createMcpTools:()=>y8,createLocalHubScheduleRuntimeHandlers:()=>UQ,createLlmsSdk:()=>qj,createInitialAccumulatedUsage:()=>G0,createInMemoryHubOwnerContext:()=>TB,createHubServerUrl:()=>j1,createHubAuthToken:()=>c9,createHookConfigFileHooks:()=>A6,createHookConfigFileExtension:()=>D8,createHookAuditHooks:()=>F8,createDisabledMcpToolPolicy:()=>m6,createDisabledMcpToolPolicies:()=>E9,createDelegatedAgentConfigProvider:()=>H$,createDelegatedAgent:()=>B$,createDefaultToolsWithPreset:()=>F5,createDefaultTools:()=>X$,createDefaultMcpServerClientFactory:()=>S8,createDefaultExecutors:()=>s2,createCoreSettingsService:()=>K2,createCoreSessionSnapshot:()=>F1,createContributionRegistry:()=>iE,createContextCompactionPrepareTurn:()=>P4,createConfiguredTelemetryService:()=>s1,createConfiguredTelemetryHandle:()=>e8,createConfiguredAgentTools:()=>v8,createClineTelemetryServiceMetadata:()=>rE,createClineTelemetryServiceConfig:()=>pE,createBuiltinTools:()=>n$,createAgentTeamsTools:()=>r$,createAgentRuntime:()=>fb,createAgentHooksExtension:()=>K8,connectToHub:()=>VQ,completeClineDeviceAuth:()=>jZ,clearPrivateModelsCatalogCache:()=>E7,clearLiveModelsCatalogCache:()=>y7,clearHubDiscovery:()=>y0,captureWorkspacePathResolved:()=>pj,captureWorkspaceInitialized:()=>bJ,captureWorkspaceInitError:()=>hJ,captureToolUsage:()=>mJ,captureTokenUsage:()=>xJ,captureTaskRestarted:()=>IJ,captureTaskCreated:()=>kJ,captureTaskCompleted:()=>V4,captureSubagentExecution:()=>B4,captureSkillUsed:()=>vJ,captureSdkError:()=>lE,captureProviderConfigured:()=>rj,captureProviderApiError:()=>H4,captureModeSwitch:()=>gJ,captureMentionUsed:()=>uJ,captureMentionSearchResults:()=>lJ,captureMentionFailed:()=>dJ,captureHookDiscovery:()=>rJ,captureExtensionActivated:()=>lj,captureDiffEditFailure:()=>cJ,captureConversationTurnEvent:()=>g2,captureCompactionSkipped:()=>nJ,captureCompactionExecuted:()=>iJ,captureAuthSucceeded:()=>N1,captureAuthStarted:()=>P1,captureAuthLoggedOut:()=>e1,captureAuthFailed:()=>w1,captureAgentTeamCreated:()=>pJ,captureAgentCreated:()=>$$,buildWorkspaceMetadata:()=>z6,buildTeamProgressSummary:()=>c8,buildSdkErrorProperties:()=>uE,buildRemoteConfigSessionBlobUploadMetadata:()=>zQ,buildDelegatedAgentConfig:()=>l$,buildConfiguredAgentToolName:()=>XJ,buildConfiguredAgentToolDescriptors:()=>YJ,bootstrapAgentTeams:()=>Q8,authorizeMcpServerOAuth:()=>w9,addLocalProvider:()=>Zj,accumulateUsageTotals:()=>V0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>q6,UnifiedConfigFileWatcher:()=>f2,ToolPresets:()=>c0,TelemetryService:()=>o8,TelemetryLoggerSink:()=>FJ,TEAM_TOOL_NAMES:()=>J8,SubprocessSandbox:()=>V8,StoredProviderSettingsSchema:()=>L8,StoredProviderSettingsEntrySchema:()=>H9,SqliteTeamStore:()=>y2,SqliteSessionStore:()=>U1,SessionVersioningService:()=>y$,SessionVersioningError:()=>k0,SessionSource:()=>U0,SessionNotFoundError:()=>u1,SapSettingsSchema:()=>j9,SKILLS_CONFIG_DIRECTORY_NAME:()=>M6,SESSION_STATUSES:()=>e4,SESSION_NOT_FOUND_ERROR_CODE:()=>G2,SDK_ERROR_TELEMETRY_EVENT:()=>Wb,RpcClineAccountService:()=>O6,RemoteRuntimeHost:()=>x8,ReasoningSettingsSchema:()=>J9,RULES_CONFIG_DIRECTORY_NAME:()=>O9,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>LQ,ProviderSettingsSchema:()=>R$,ProviderSettingsManager:()=>_1,ProviderProtocolSchema:()=>t5,ProviderIdSchema:()=>U6,ProviderClientSchema:()=>e5,OpenTelemetryProvider:()=>t8,OcaSettingsSchema:()=>f9,OPENAI_COMPATIBLE_PROVIDERS:()=>G6,NodeHubClient:()=>f1,NoOpFeatureFlagsProvider:()=>q2,NativeHubTransportAdapter:()=>OJ,ModelCatalogSettingsSchema:()=>X9,LocalRuntimeHost:()=>L1,Llms:()=>vE,InMemoryWorkspaceManager:()=>O8,InMemoryMcpManager:()=>A2,HubUIClient:()=>K3,HubTransportError:()=>q0,HubSessionClient:()=>A3,HubServerTransport:()=>J4,HubScheduleService:()=>s8,HubScheduleCommandService:()=>a8,HubRuntimeHost:()=>r1,HubCommandError:()=>k8,HookEventPayloadSchema:()=>WQ,HookEventNameSchema:()=>ZQ,HookConfigFileName:()=>G8,HOOK_CONFIG_FILE_EVENT_MAP:()=>H6,HOOKS_CONFIG_DIRECTORY_NAME:()=>m5,GlobalSettingsSchema:()=>l4,GcpSettingsSchema:()=>Z9,FileTeamPersistenceStore:()=>cQ,FeatureFlagsService:()=>M2,FeatureFlagDefaultValue:()=>oE,FEATURE_FLAGS:()=>sE,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>iQ,DefaultToolNames:()=>K0,DefaultRuntimeBuilder:()=>W4,DefaultLlmsSdk:()=>NJ,DEFAULT_MODELS_CATALOG_URL:()=>i5,DEFAULT_HUB_PORT:()=>wW,DEFAULT_HUB_PATHNAME:()=>SW,DEFAULT_HUB_HOST:()=>NW,CoreSettingsService:()=>O$,CoreSessionService:()=>z1,ContributionRegistry:()=>dE,ClineCore:()=>KJ,ClineAccountService:()=>_6,ChatViewStateSchema:()=>zj,ChatSummarySchema:()=>rQ,ChatSessionStatusSchema:()=>dQ,ChatSessionConfigSchema:()=>uQ,ChatMessageSchema:()=>pQ,ChatMessageRoleSchema:()=>lQ,CORE_TELEMETRY_EVENTS:()=>x,CORE_BUILD_VERSION:()=>Lj,BrowserWebSocketHubAdapter:()=>_J,BUILT_IN_PROVIDER_IDS:()=>b7,BUILT_IN_PROVIDER:()=>D6,AzureSettingsSchema:()=>W9,AwsSettingsSchema:()=>Q9,AuthSettingsSchema:()=>$9,AgentTeamsRuntime:()=>T2,AgentTeam:()=>l8,Agent:()=>jb,ALL_DEFAULT_TOOL_NAMES:()=>W$});q(M,kn);import*as vE from"@cline/llms";import{buildClineSystemPrompt as cE,buildSdkErrorProperties as uE,ContributionRegistry as dE,captureSdkError as lE,createClineTelemetryServiceConfig as pE,createClineTelemetryServiceMetadata as rE,createContributionRegistry as iE,createTool as nE,emptyWorkspaceManifest as aE,FEATURE_FLAGS as sE,FeatureFlagDefaultValue as oE,formatDisplayUserInput as tE,noopBasicLogger as eE,normalizeSdkError as $b,normalizeUserInput as Jb,parseUserCommandEnvelope as Qb,registerDisposable as Zb,SDK_ERROR_TELEMETRY_EVENT as Wb}from"@cline/shared";import"@cline/shared/storage";var uV={};w(uV,{isClineAccountActionRequest:()=>G9,executeClineAccountAction:()=>F9,RpcClineAccountService:()=>O6,ClineAccountService:()=>_6});function s_($){if(typeof $!=="object"||$===null||!("error"in $))return;let J=$.error;return typeof J==="string"&&J.trim()?J:void 0}function cV($,J,Q){let Z=s_(Q);if(Z)return Z;let W=J.trim();if(W){let j=W.length>200?`${W.slice(0,200)}...`:W;return`Cline account request failed with status ${$}: ${j}`}return`Cline account request failed with status ${$}`}class _6{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let J=$.apiBaseUrl.trim();if(!J)throw Error("apiBaseUrl is required");this.apiBaseUrl=J,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let J=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(J)}/balance`)}async fetchUsageTransactions($){let J=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(J)}/usages`)).items??[]}async fetchPaymentTransactions($){let J=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(J)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchOrganization($){let J=$.trim();if(!J)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(J)}`)}async fetchOrganizationBalance($){let J=$.trim();if(!J)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(J)}/balance`)}async fetchOrganizationUsageTransactions($){let J=$.organizationId.trim();if(!J)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(J,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(J)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let J=$?.trim();if(J)return J;let Z=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(Z)return Z;let W=await this.fetchMe();if(!W.id?.trim())throw Error("Unable to resolve current user id");return W.id}async resolveOrganizationMemberId($,J){let Q=J?.trim();if(Q)return Q;let W=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(W)return W;let f=(await this.fetchUserOrganizations()).find((X)=>X.organizationId===$)?.memberId;if(!f?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return f}async request($,J){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let Z=this.getHeadersFn?await this.getHeadersFn():{},W=new AbortController,j=setTimeout(()=>W.abort(),this.requestTimeoutMs);try{let f=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:J?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...Z??{}},body:J?.body!==void 0?JSON.stringify(J.body):void 0,signal:W.signal});if(f.status===204||J?.expectNoContent){if(!f.ok)throw Error(`Cline account request failed with status ${f.status}`);return}let X=await f.text(),Y;if(X.trim())try{Y=JSON.parse(X)}catch{if(!f.ok)throw Error(cV(f.status,X,void 0));throw Error("Cline account response was not valid JSON")}if(!f.ok)throw Error(cV(f.status,X,Y));if(typeof Y==="object"&&Y!==null){let V=Y;if(typeof V.success==="boolean"){if(!V.success)throw Error(V.error||"Cline account request failed");if(V.data!==void 0)return V.data}}if(Y===void 0||Y===null)throw Error("Cline account response payload was empty");return Y}finally{clearTimeout(j)}}}function G9($){return $.action==="clineAccount"}async function F9($,J){switch($.operation){case"fetchMe":return J.fetchMe();case"fetchBalance":return J.fetchBalance($.userId);case"fetchUsageTransactions":return J.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return J.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return J.fetchUserOrganizations();case"fetchOrganizationBalance":return J.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return J.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await J.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return J.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class O6{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let J=$.trim();if(!J)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:J})}async fetchOrganizationUsageTransactions($){let J=$.organizationId.trim();if(!J)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:J,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var dV={};w(dV,{createOAuthClientCallbacks:()=>T8});function T8($){return{onAuth:({url:J,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(J)).catch((Z)=>{$.onOpenUrlError?.({url:J,error:Z})})}catch(Z){$.onOpenUrlError?.({url:J,error:Z})}$.onOutput?.(J)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var yA={};w(yA,{ClineCore:()=>KJ});function lV($){if($===!0)return{};if(!$)return;return $}function pV($){if($==="user")return"global";return $}class v7{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let J=this.getService().ingestEvent($);return{event:J.event,duplicate:J.duplicate,matchedSpecIds:J.matchedSpecs.map((Q)=>Q.specId),queuedRuns:J.queuedRuns,suppressions:J.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function rV($){let{host:J}=$;return{async startSession(Q){let Z=(Q.cwd?.trim()||Q.workspaceRoot).trim(),W=await J.startSession({source:Q.source?.trim()||U0.CLI,interactive:!1,config:{providerId:R8(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:Z,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:e_(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Q.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(Q,Z){let W=await J.runTurn({sessionId:Q,prompt:Z.prompt,userImages:Z.attachments?.userImages,userFiles:Z.attachments?.userFiles?.map((j)=>j.content),delivery:Z.delivery});if(!W)throw Error("ClineCore automation runtime returned no result");return{result:t_(W)}},async abortSession(Q){return await J.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await J.stopSession(Q),{applied:!0}}}}function D9($){let J=o_($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),Z=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),W=$.context?.logger??$.logger,j=$.context?.telemetry??$.telemetry;if(!J&&!Q&&!Z&&!W&&!j)return $.context;return{...$.context??{},...Q?{client:Q}:{},...Z?{user:Z}:{},...W?{logger:W}:{},...j?{telemetry:j}:{},...J?{automation:J}:{}}}function o_($,J){if(!$)return;return{ingestEvent:(Q)=>{J.ingestEvent(Q)}}}function t_($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((J)=>({name:J.name,input:J.input,output:J.output,error:J.error,durationMs:J.durationMs}))}}function e_($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var IH={};w(IH,{createCoreSettingsService:()=>K2,CoreSettingsService:()=>O$});import{existsSync as h9}from"node:fs";import{basename as bH,isAbsolute as PT,relative as NT}from"node:path";var XH={};w(XH,{resolveWorkflowsConfigSearchPaths:()=>y6,resolveSkillsConfigSearchPaths:()=>S6,resolveRulesConfigSearchPaths:()=>C6,parseWorkflowConfigFromMarkdown:()=>w6,parseSkillConfigFromMarkdown:()=>P6,parseRuleConfigFromMarkdown:()=>N6,createWorkflowsConfigDefinition:()=>h6,createUserInstructionConfigService:()=>_$,createSkillsConfigDefinition:()=>E6,createRulesConfigDefinition:()=>b6,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>q6,UnifiedConfigFileWatcher:()=>f2,SKILLS_CONFIG_DIRECTORY_NAME:()=>M6,RULES_CONFIG_DIRECTORY_NAME:()=>O9});import{createHash as $O}from"node:crypto";import{watch as JO}from"node:fs";import{readdir as QO,readFile as ZO}from"node:fs/promises";import{join as WO}from"node:path";function jO($){return $O("sha1").update($).digest("hex")}function aV($){return Boolean($&&typeof $==="object"&&"code"in $)}function iV($){return aV($)&&$.code==="ENOENT"}function nV($){return aV($)&&($.code==="EACCES"||$.code==="EPERM")}class f2{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,J){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=J?.debounceMs??75,this.emitParseErrors=J?.emitParseErrors??!1;for(let Q of $){if(this.definitionsByType.has(Q.type))throw Error(`Duplicate unified config definition type '${Q.type}'.`);this.definitionsByType.set(Q.type,Q),this.recordsByType.set(Q.type,new Map),this.discoveredDirectoriesByType.set(Q.type,new Set);for(let Z of Q.directories){let W=this.baseTypesByDirectory.get(Z);if(W)W.add(Q.type);else this.baseTypesByDirectory.set(Z,new Set([Q.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let J=this.definitionsByType.get($);if(!J)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(J)})}getSnapshot($){let J=this.recordsByType.get($);return new Map([...J?.entries()??[]].map(([Q,Z])=>[Q,{...Z}]))}getAllSnapshots(){let $=new Map;for(let[J,Q]of this.recordsByType.entries())$.set(J,new Map([...Q.entries()].map(([Z,W])=>[Z,{...W}])));return $}emit($){for(let J of this.listeners)J($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[J,Q]of this.watchersByDirectory.entries()){if($.has(J))continue;Q.close(),this.watchersByDirectory.delete(J)}this.watchedTypesByDirectory=$;for(let J of $.keys()){if(this.watchersByDirectory.has(J))continue;try{let Q=JO(J,()=>{let Z=this.watchedTypesByDirectory.get(J);if(!Z)return;for(let W of Z)this.pendingTypes.add(W);this.scheduleFlush()});this.watchersByDirectory.set(J,Q),Q.on("error",(Z)=>{let W=this.watchedTypesByDirectory.get(J);if(!W)return;for(let j of W)this.emit({kind:"error",type:j,error:Z,filePath:J})})}catch(Q){if(!iV(Q)&&!nV(Q)){let Z=$.get(J);if(!Z)continue;for(let W of Z)this.emit({kind:"error",type:W,error:Q,filePath:J})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let J of $){let Q=this.definitionsByType.get(J);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:J,discoveredDirectories:Q}=await this.loadDefinition($),Z=this.recordsByType.get($.type)??new Map;for(let[W,j]of Z.entries()){if(J.has(W))continue;this.emit({kind:"remove",type:$.type,id:W,filePath:j.filePath})}for(let[W,j]of J.entries()){let f=Z.get(W);if(f&&f.filePath===j.filePath&&f.fingerprint===j.fingerprint)continue;this.emit({kind:"upsert",record:{type:j.type,id:W,item:j.item,filePath:j.filePath}})}if(this.recordsByType.set($.type,J),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let J=new Map,Q=new Set;for(let Z of $.directories){Q.add(Z);let W=$.discoverFiles?await $.discoverFiles(Z):await this.readDirectoryFileCandidates(Z);for(let j of W){let{fileName:f,filePath:X}=j;if(Q.add(j.directoryPath),$.includeFile&&!$.includeFile(f,X))continue;try{let Y=await ZO(X,"utf8"),V={type:$.type,directoryPath:j.directoryPath,fileName:f,filePath:X,content:Y},H=$.parseFile(V),B=$.resolveId(H,V).trim();if(!B)continue;J.set(B,{type:$.type,id:B,item:H,filePath:X,fingerprint:jO(Y)})}catch(Y){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:Y,filePath:X})}}}return{records:J,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[J,Q]of this.baseTypesByDirectory.entries())$.set(J,new Set(Q));for(let[J,Q]of this.discoveredDirectoriesByType.entries())for(let Z of Q){let W=$.get(Z);if(W)W.add(J);else $.set(Z,new Set([J]))}return $}async readDirectoryFileCandidates($){try{return(await QO($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:WO($,Q.name)})).sort((Q,Z)=>Q.fileName.localeCompare(Z.fileName))}catch(J){if(iV(J)||nV(J))return[];throw J}}}import{readdir as u7,readFile as fO,stat as c7}from"node:fs/promises";import{basename as v1,dirname as XO,extname as R9,join as C0,resolve as T6}from"node:path";import{AGENTS_RULES_FILE_NAME as sV,RULES_CONFIG_DIRECTORY_NAME as O9,resolveGlobalAgentsRulesPath as YO,resolveRulesConfigSearchPaths as VO,resolveSkillsConfigSearchPaths as HO,resolveWorkflowsConfigSearchPaths as BO,SKILLS_CONFIG_DIRECTORY_NAME as M6,WORKFLOWS_CONFIG_DIRECTORY_NAME as q6}from"@cline/shared/storage";import AO from"yaml";var U9="SKILL.md",KO="managed.json",GO=new Set([".md",".markdown",".txt"]);function d7($){return $.trim().toLowerCase()}function M8($){let J=$;return J?.code==="ENOENT"||J?.code==="EACCES"||J?.code==="EPERM"||J?.code==="ELOOP"}function z9($){return GO.has(R9($).toLowerCase())}function oV($){let J=[],Q=new Set;for(let Z of $){let W=T6(Z);if(Q.has(W))continue;Q.add(W),J.push(Z)}return J}function FO($){let J=[...$?.directories??S6($?.workspacePath)];if($?.pluginSkillDirectories)J.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)J.push(...YV({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return oV(J)}async function l7($){try{let J=await u7($,{withFileTypes:!0}),Q=[];for(let Z of J){if(!Z.isDirectory())continue;let W=C0($,Z.name),j=C0(W,KO);try{let f=await fO(j,"utf8"),X=JSON.parse(f);if(X&&typeof X==="object")Q.push(W)}catch(f){if(M8(f))continue;if(f?.name==="SyntaxError")continue;throw f}}return Q.sort((Z,W)=>Z.localeCompare(W))}catch(J){if(M8(J))return[];throw J}}function p7($){let J=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(J);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,Z,W]=Q;try{let j=AO.parse(Z);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:W,hadFrontmatter:!0}}catch(j){let f=j instanceof Error?j.message:String(j);return{data:{},body:$,hadFrontmatter:!0,parseError:f}}}function L9($,J,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${J}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${J}' must be a string.`);let Z=$.trim();if(!Z&&Q)throw Error(`Frontmatter field '${J}' cannot be empty.`);return Z||void 0}function q8($,J){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${J}' must be a boolean.`);return $}function DO($,J){if(v1($.filePath).toLowerCase()!==sV.toLowerCase())return v1($.filePath,R9($.filePath));if(J&&T6($.filePath)===T6(J,sV))return"Workspace AGENTS.md";if(T6($.filePath)===T6(YO()))return"Global AGENTS.md";return v1($.filePath,R9($.filePath))}function P6($,J){let{data:Q,body:Z,parseError:W}=p7($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let j=Z.trim();if(!j)throw Error("Missing instructions body in skill file.");let X=L9(Q.name,"name",!1)??J.trim();if(!X)throw Error("Missing skill name.");return{name:X,description:L9(Q.description,"description",!1),disabled:q8(Q.disabled,"disabled")??(q8(Q.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Q}}function N6($,J){let{data:Q,body:Z,parseError:W}=p7($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let j=Z.trim();if(!j)throw Error("Missing instructions body in rule file.");let f=L9(Q.name,"name",!1)??J.trim();if(!f)throw Error("Missing rule name.");return{name:f,disabled:q8(Q.disabled,"disabled")??(q8(Q.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Q}}function w6($,J){let{data:Q,body:Z,parseError:W}=p7($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let j=Z.trim();if(!j)throw Error("Missing instructions body in workflow file.");let f=L9(Q.name,"name",!1)??J.trim();if(!f)throw Error("Missing workflow name.");return{name:f,disabled:q8(Q.disabled,"disabled")??(q8(Q.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Q}}function S6($){return HO($)}function C6($){return VO($)}function y6($){return BO($)}async function tV($){if(v1($)===".cline"){let J=await l7($);return(await Promise.all(J.map((Z)=>tV(C0(Z,M6))))).flat()}try{let J=await u7($,{withFileTypes:!0}),Q=[];for(let Z of J){if(Z.isFile()&&Z.name===U9){Q.push({directoryPath:$,fileName:Z.name,filePath:C0($,Z.name)});continue}let W=C0($,Z.name);if(Z.isDirectory()||Z.isSymbolicLink()&&await c7(W).then((f)=>f.isDirectory()).catch((f)=>{if(M8(f))return!1;throw f}))Q.push({directoryPath:W,fileName:U9,filePath:C0(W,U9)})}return Q}catch(J){if(M8(J))return[];throw J}}async function _9($){if(v1($)===".cline"){let J=await l7($);return(await Promise.all(J.map((Z)=>_9(C0(Z,"rules.md"))))).flat()}try{if((await c7($)).isFile())return[{directoryPath:XO($),fileName:v1($),filePath:$}]}catch(J){if(!M8(J))throw J}try{let Q=(await u7($,{withFileTypes:!0})).filter((W)=>W.isFile()&&z9(W.name)).map((W)=>({directoryPath:$,fileName:W.name,filePath:C0($,W.name)})),Z=C0($,"AGENTS.md");try{if((await c7(Z)).isFile()){if(!Q.some((f)=>f.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:Z})}}catch{}return Q}catch(J){if(M8(J))return[];throw J}}async function UO($){if(v1($)===".cline"){let J=await l7($);return(await Promise.all(J.map((Z)=>_9(C0(Z,q6))))).flat()}return _9($)}function E6($){let J=FO($),Q=$?.workspacePath?C0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?oV([...J,Q]):J,discoverFiles:tV,includeFile:(Z)=>Z===U9,parseFile:(Z)=>P6(Z.content,v1(Z.directoryPath)),resolveId:(Z)=>d7(Z.name)}}function b6($){let J=$?.directories??C6($?.workspacePath),Q=$?.workspacePath?C0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...J,Q]:J,discoverFiles:_9,includeFile:(Z,W)=>Z===".clinerules"||z9(Z)||z9(W),parseFile:(Z)=>N6(Z.content,DO(Z,$?.workspacePath)),resolveId:(Z)=>d7(Z.name)}}function h6($){let J=$?.directories??y6($?.workspacePath),Q=$?.workspacePath?C0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...J,Q]:J,discoverFiles:UO,includeFile:(Z)=>z9(Z),parseFile:(Z)=>w6(Z.content,v1(Z.filePath,R9(Z.filePath))),resolveId:(Z)=>d7(Z.name)}}function eV($){let J=[E6($?.skills),b6($?.rules),h6($?.workflows)];return new f2(J,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as $H}from"@cline/shared";function RO($,J){if($.description?.trim())return $H($.description,".");if(J==="workflow")return;return $H($.instructions,".")}function zO($){return $.disabled!==!0}function JH($,J){return[...$.getSnapshot(J).entries()].map(([Q,Z])=>({id:Q,record:Z})).filter(({record:Q})=>zO(Q.item)).map(({id:Q,record:Z})=>({id:Q,name:Z.item.name,instructions:Z.item.instructions,description:RO(Z.item,J),kind:J})).sort((Q,Z)=>Q.name.localeCompare(Z.name))}function k6($){let J=new Map;for(let Q of[...JH($,"workflow"),...JH($,"skill")])if(!J.has(Q.name))J.set(Q.name,Q);return[...J.values()].sort((Q,Z)=>Q.name.localeCompare(Z.name))}function QH($,J){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let Z=Q[1];if(!Z)return $;let W=Z.length+1,j=$.slice(W),f=k6(J).find((X)=>X.name===Z);return f?`${f.instructions}${j}`:$}var WH={};w(WH,{mergeRulesForSystemPrompt:()=>N8,loadRulesForSystemPromptFromWatcher:()=>r7,listEnabledRulesFromWatcher:()=>ZH,isRuleEnabled:()=>T9,formatRulesForSystemPrompt:()=>P8});function T9($){return $.disabled!==!0}function P8($){if($.length===0)return"";return`
|
|
196
|
+
${Z}`;return Q||Z}function sR($,J){let Q=J?.["*"]??{},Z=J?.[$]??{};return{...Q,...Z}.enabled!==!1}function oR($,J){return $.filter((Q)=>sR(Q.name,J))}function tR($,J){return I1(oR($,J))}function eR($){let J=$.filter((Q)=>Q!==void 0);if(J.length===0)return{};return{beforeRun:async(Q)=>{for(let Z of J){let W=await Z.beforeRun?.(Q);if(W?.stop)return W}return},afterRun:async(Q)=>{for(let Z of J)await Z.afterRun?.(Q)},beforeModel:async(Q)=>{let Z=Q.request,W;for(let j of J){let X=await j.beforeModel?.({...Q,request:Z});if(!X)continue;if(X.stop)return X;W={...W,...X,options:fY(W?.options,X.options)},Z={...Z,...X.messages?{messages:X.messages}:{},...X.tools?{tools:X.tools}:{},...X.options?{options:fY(Z.options,X.options)}:{}}}return W},afterModel:async(Q)=>{for(let Z of J){let W=await Z.afterModel?.(Q);if(W?.stop)return W}return},beforeTool:async(Q)=>{let Z=Q.input,W;for(let j of J){let X=await j.beforeTool?.({...Q,input:Z});if(!X)continue;if(X.stop||X.skip)return X;if(W={...W,...X},Object.hasOwn(X,"input"))Z=X.input}return W},afterTool:async(Q)=>{let Z=Q.result,W;for(let j of J){let X=await j.afterTool?.({...Q,result:Z});if(!X)continue;if(X.stop)return X;if(W={...W,...X},X.result)Z=X.result}return W},onEvent:async(Q)=>{for(let Z of J)await Z.onEvent?.(Q)}}}class V${config;agentId;parentAgentId;logger;telemetry;conversation;mistakeTracker;loopTracker;loopDetectionDisabled;messageBuilder;contributionRegistry;extensionsInitialized=!1;listeners=new Set;createAgentRuntimeImpl;activeRunId=null;running=!1;abortRequested=!1;abortReason;activeRuntime=null;activeRunPromise=null;eventAdapter=new tZ;shutdownCalled=!1;currentRunToolCalls=[];currentRunUsage={inputTokens:0,outputTokens:0};toolStartedAt=new Map;toolInputs=new Map;currentTurnSuccessfulTools=0;currentTurnFailedTools=0;currentTurnFailureDetails=[];activeTrackerWork=Promise.resolve();trackerAbortInFlight=!1;constructor($,J={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=J.logger??$.logger,this.telemetry=J.telemetry??$.telemetry,this.createAgentRuntimeImpl=J.createAgentRuntimeImpl??pR,this.conversation=new nZ($.initialMessages),this.messageBuilder=new pZ(QY()),this.contributionRegistry=rR({extensions:$.extensions?[...$.extensions]:[],setupContext:{session:$.extensionContext?.session,client:$.extensionContext?.client,user:$.extensionContext?.user,workspaceInfo:$.extensionContext?.workspace,automation:$.extensionContext?.automation,logger:$.extensionContext?.logger??this.logger,telemetry:$.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let Q=$.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new oZ({maxConsecutiveMistakes:Q,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(j)=>this.emitLegacyEvent(j),log:(j,X,f)=>$L(this.logger,j,X,f),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(j,X)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:j}]})}});let Z=$.execution?.loopDetection;this.loopDetectionDisabled=Z===!1;let W=Z===!1||Z===void 0?void 0:Z;this.loopTracker=new sZ(W)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools($){if($.length===0)return;let J=new Set(this.config.tools.map((Z)=>Z.name)),Q=[...this.config.tools];for(let Z of $)if(!J.has(Z.name))Q.push(Z),J.add(Z.name);this.config={...this.config,tools:Q}}updateConnection($){let J={...this.config};if($.providerId!==void 0)J.providerId=$.providerId;if($.modelId!==void 0)J.modelId=$.modelId;if($.apiKey!==void 0)J.apiKey=$.apiKey;if($.baseUrl!==void 0)J.baseUrl=$.baseUrl;if($.headers!==void 0)J.headers=$.headers;if($.providerConfig!==void 0)J.providerConfig=$.providerConfig;if($.reasoningEffort!==void 0)J.reasoningEffort=$.reasoningEffort;if($.thinking!==void 0)J.thinking=$.thinking;if($.thinkingBudgetTokens!==void 0)J.thinkingBudgetTokens=$.thinkingBudgetTokens;this.config=J}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let J=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=J,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(J)}async shutdown($,J){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run($,J,Q){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:J,userFiles:Q,isContinue:!1})}continue($,J,Q){return this.executeRun({userMessage:$,userImages:J,userFiles:Q,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let J of this.contributionRegistry.getRegisteredRules()){let Q=await nR(J);if(Q)$.push(Q)}return aR(this.config.systemPrompt,$)}executeRun($){let J;return J=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===J)this.activeRunPromise=null}),this.activeRunPromise=J,J}async executeRunInternal($){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let J=new Date,Q=$.userMessage;if(Q!==void 0){let F=await QL(Q,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:F})}let Z=await this.composeSystemPrompt(),W=pf(this.config,this.logger,this.telemetry),j=new Map;for(let F of this.contributionRegistry.getRegisteredTools())j.set(F.name,F);let X=tR([...j.values()],this.config.toolPolicies),f=new Map;for(let F of X)f.set(F.name,F);for(let F of this.config.tools)f.set(F.name,F);let Y=this.conversation.getConversationId(),V=YY(this.config),H=Array.from(f.values()),B=P5(this.conversation.getMessages()),A=WY({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:Y,parentAgentId:this.parentAgentId,model:W,logger:this.logger,telemetry:this.telemetry,tools:H,toolContextMetadata:{modelSupportsImages:V?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[eX]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(V,H),initialMessages:B,systemPrompt:Z}),K=this.createAgentRuntimeImpl(A);if(this.activeRuntime=K,this.abortRequested)K.abort(this.abortReason);let G=K.subscribe((F)=>{this.handleRuntimeEvent(F)}),R,D;try{if($.isContinue)R=await K.continue(void 0);else R=await K.run("")}catch(F){D=F instanceof Error?F:Error(String(F))}finally{G();try{await this.activeTrackerWork}catch(F){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:F})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(R&&R.messages.length>0){let F=$8(R.messages);this.conversation.replaceMessages(F)}let U=new Date;try{return this.buildLegacyResult({runResult:R,thrownError:D,startedAt:J,endedAt:U})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize({tolerateSetupErrors:this.config.hookErrorMode!=="throw"})}catch($){if(this.config.hookErrorMode==="throw")throw $;this.emitLegacyEvent({type:"error",error:$ instanceof Error?$:Error(String($)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let $=eR([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((J)=>J.hooks)]);return{...$,beforeModel:async(J)=>{let Q=await $.beforeModel?.(J);if(Q?.stop)return Q;let Z=Q?.messages??J.request.messages,W=await this.prepareMessagesForModelRequest(Z);return{...Q,messages:W}}}}createRuntimePrepareTurn($,J){let Q=this.config.prepareTurn;if(!Q)return;return async(Z)=>{let W=$8(Z.messages),j=await this.prepareProviderMessagesForApi(W),X=await Q({agentId:Z.agentId,conversationId:Z.conversationId??this.conversation.getConversationId(),parentAgentId:Z.parentAgentId??null,iteration:Z.iteration,messages:W,apiMessages:j,abortSignal:Z.signal??new AbortController().signal,systemPrompt:Z.systemPrompt??"",tools:J,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:Z.emitStatusNotice});if(!X)return;return{...X.messages?{messages:P5(X.messages)}:{},...X.systemPrompt!==void 0?{systemPrompt:X.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let J=await this.prepareProviderMessagesForApi(N5($));return P5(J)}async prepareProviderMessagesForApi($){let J=$,Q=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let Z of Q)J=await Z.build(J);return this.messageBuilder.buildForApi(J)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let J=this.toolStartedAt.get($.toolCall.toolCallId),Q=new Date,Z=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let W=$.message.content.find((Y)=>Y.type==="tool-result"),j=W?.type==="tool-result"&&W.isError===!0,X=j?iR(W?.type==="tool-result"?W.output:void 0):void 0,f={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:Z,output:W?.type==="tool-result"?W.output:void 0,error:X,durationMs:J===void 0?0:Q.getTime()-J.getTime(),startedAt:J??Q,endedAt:Q};if(this.currentRunToolCalls.push(f),j){if(this.currentTurnFailedTools+=1,X)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${X}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let J=this.currentTurnFailedTools,Q=this.currentTurnSuccessfulTools;if(J>0&&Q===0){let Z=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${J} tool call(s) failed${Z?`: ${Z}`:""}`})}else if(Q>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let J of this.eventAdapter.translate($))this.emitLegacyEvent(J)}syncConversationFromRuntimeMessage($,J){if($.length>0){this.conversation.replaceMessages($8($));return}if(J.length===0)return;let Q=new Set(this.conversation.getMessages().map((W)=>W.id).filter((W)=>typeof W==="string")),Z=$8(J).filter((W)=>!W.id||!Q.has(W.id));if(Z.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...Z])}emitLegacyEvent($){for(let J of this.listeners)try{J($)}catch(Q){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Q})}}inspectLoopForToolCall($,J,Q){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let Z=this.loopTracker.inspect({name:$,input:J});if(Z.kind==="ok")return;if(Z.kind==="soft"){if(Z.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:Z.message}]});return}this.enqueueMistakeRecord({iteration:Q,reason:"tool_execution_failed",forceAtLimit:!0,details:Z.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let J=await this.mistakeTracker.record($);if(J.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:J.message}]}),this.activeRuntime?.abort(J.reason??J.message)})}buildLegacyResult($){let{runResult:J,thrownError:Q,startedAt:Z,endedAt:W}=$,j=W.getTime()-Z.getTime(),X=Q?"error":JL(J),f=J?.outputText||(J?.status==="failed"?J.error?.message:void 0)||"",Y=J?{inputTokens:J.usage.inputTokens,outputTokens:J.usage.outputTokens,cacheReadTokens:J.usage.cacheReadTokens>0?J.usage.cacheReadTokens:void 0,cacheWriteTokens:J.usage.cacheWriteTokens>0?J.usage.cacheWriteTokens:void 0,totalCost:J.usage.totalCost}:this.currentRunUsage,V=J?$8(J.messages):this.conversation.getMessages(),H=YY(this.config);if(Q)throw Q;return{text:f,usage:Y,messages:V,toolCalls:this.currentRunToolCalls,iterations:J?.iterations??0,finishReason:X,model:{id:this.config.modelId,provider:this.config.providerId,info:H},startedAt:Z,endedAt:W,durationMs:j}}}function $L($,J,Q,Z){if(!$)return;if(J==="debug"){$.debug(Q,Z);return}if(J==="error"&&$.error){$.error(Q,Z);return}let W=J==="warn"?"warn":J==="error"?"error":"info";$.log(Q,{...Z,severity:W})}function JL($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function QL($,J,Q,Z){let{buildInitialUserContent:W}=await Promise.resolve().then(() => XY);return W($,J,Q,Z)}function YY($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let J=dZ($);if(J?.[$.modelId])return J[$.modelId];return}import{buildClineSystemPrompt as VY}from"@cline/shared";function HY($,J){let Q=$.trim();if(J.providerId.toLowerCase()!=="cline")return Q;return VY({ide:J.clineIdeName?.trim()||"Terminal",workspaceRoot:J.cwd?.trim()||"/",providerId:J.providerId,rules:`# Team Teammate Role
|
|
197
|
+
${Q}`,platform:J.clinePlatform,metadata:J.workspaceMetadata})}function BY($,J){let Q=$.trim();if(J.providerId.toLowerCase()!=="cline")return Q;return VY({ide:J.clineIdeName||"Terminal",workspaceRoot:J.cwd?.trim()||"/",providerId:J.providerId,overridePrompt:Q,metadata:J.workspaceMetadata,platform:J.clinePlatform})}function H$($){let J={...$};return{getRuntimeConfig:()=>J,getConnectionConfig:()=>({providerId:J.providerId,modelId:J.modelId,apiKey:J.apiKey,baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking}),updateConnectionDefaults:(Q)=>{J={...J,...Q}}}}function l$($){let J=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?HY($.prompt,J):BY($.prompt,J);return{...$.configProvider.getConnectionConfig(),systemPrompt:Q,tools:$.tools,maxIterations:$.maxIterations??J.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:J.hooks,extensions:J.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:J.logger,role:$.role}}function B$($){let J=l$($),Q=new V$(J);if(J.onEvent)Q.subscribeEvents(J.onEvent);return Q}var jL=eZ.object({systemPrompt:eZ.string().describe("System prompt defining the sub-agent's behavior"),task:eZ.string().describe("Task for the sub-agent to complete")});function A$($){return ZL({name:"spawn_agent",description:"Spawn a sub-agent with a custom system prompt for specialized tasks. Use when delegating work that benefits from focused expertise.",inputSchema:WL(jL),execute:async(J,Q)=>{let Z=$.createSubAgentTools?await $.createSubAgentTools(J,Q):$.subAgentTools??[],W=B$({kind:"subagent",prompt:J.systemPrompt,configProvider:$.configProvider,tools:Z,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),j=W.getAgentId(),X=W.getConversationId(),f=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:j,conversationId:X,parentAgentId:f,input:J})}catch{}try{let Y=await W.run(J.task),V={text:Y.text,iterations:Y.iterations,finishReason:Y.finishReason,usage:{inputTokens:Y.usage.inputTokens,outputTokens:Y.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:j,conversationId:X,parentAgentId:f,input:J,result:V,agentResult:Y})}catch{}return V}catch(Y){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:j,conversationId:X,parentAgentId:f,input:J,error:Y instanceof Error?Y:Error(String(Y))})}catch{}throw Y}},timeoutMs:300000,retryable:!1})}import{createTool as V0,TEAM_AWAIT_TIMEOUT_MS as XL,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as fL,TEAM_RUN_TEXT_PREVIEW_LIMIT as YL,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as VL,TeamAttachOutcomeFragmentInputSchema as AY,TeamAwaitRunsInputSchema as KY,TeamBroadcastInputSchema as GY,TeamBroadcastToolResultSchema as HL,TeamCancelRunInputSchema as FY,TeamCancelRunToolResultSchema as BL,TeamCleanupInputSchema as DY,TeamCleanupToolResultSchema as AL,TeamCreateOutcomeInputSchema as UY,TeamCreateOutcomeToolResultSchema as KL,TeamFinalizeOutcomeInputSchema as RY,TeamFinalizeOutcomeToolResultSchema as GL,TeamListOutcomesInputSchema as LY,TeamListRunsInputSchema as zY,TeamMailboxMessageToolResultSchema as FL,TeamMissionLogInputSchema as _Y,TeamMissionLogToolResultSchema as DL,TeamOutcomeFragmentToolResultSchema as OY,TeamOutcomeToolResultSchema as UL,TeamReadMailboxInputSchema as TY,TeamReviewOutcomeFragmentInputSchema as MY,TeamRunTaskInputSchema as qY,TeamRunTaskToolResultSchema as $W,TeamRunToolSummarySchema as JW,TeamSendMessageInputSchema as PY,TeamSendMessageToolResultSchema as RL,TeamShutdownTeammateInputSchema as NY,TeamSimpleAgentStatusToolResultSchema as wY,TeamSpawnTeammateInputSchema as SY,TeamStatusInputSchema as CY,TeamStatusToolResultSchema as LL,TeamTaskInputSchema as yY,TeamTaskToolResultSchema as t4,validateWithZod as k,zodToJsonSchema as H0}from"@cline/shared";function EY($,J){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=J)return Q;return`${Q.slice(0,Math.max(0,J-3)).trimEnd()}...`}function p$($,J){if($===void 0)throw Error(`Missing required field: ${J}`);return $}function zL($){let J=$.result;if(!J)return;return{textPreview:EY(J.text,YL),iterations:J.iterations,finishReason:J.finishReason,durationMs:J.durationMs,usage:{inputTokens:J.usage.inputTokens,outputTokens:J.usage.outputTokens,cacheReadTokens:J.usage.cacheReadTokens,cacheWriteTokens:J.usage.cacheWriteTokens,totalCost:J.usage.totalCost}}}function y5($){return $?.toISOString()}function QW($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:EY($.message,fL),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:y5($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:y5($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:y5($.heartbeatAt),lastProgressAt:y5($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:zL($)}}function _L($){if($.status==="failed")throw Error(`Run "${$.id}" failed${$.error?`: ${$.error}`:""}`);if($.status==="cancelled")throw Error(`Run "${$.id}" was cancelled${$.error?`: ${$.error}`:""}`);if($.status==="interrupted")throw Error(`Run "${$.id}" was interrupted${$.error?`: ${$.error}`:""}`)}var Q8=["team_spawn_teammate","team_shutdown_teammate","team_status","team_task","team_run_task","team_cancel_run","team_list_runs","team_await_runs","team_send_message","team_broadcast","team_read_mailbox","team_mission_log","team_cleanup","team_create_outcome","team_attach_outcome_fragment","team_review_outcome_fragment","team_finalize_outcome","team_list_outcomes"];function bY($){let J=[];if($.createBaseTools)J.push(...$.createBaseTools());J.push(...r$({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:l$({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:J,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function Z8($){let J=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,Z=r$({runtime:$.runtime,requesterId:J,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),W=[];for(let j of $.restoredTeammates??[]){if($.runtime.isTeammateActive(j.agentId))continue;bY({runtime:$.runtime,requesterId:J,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:j}),W.push(j.agentId)}return{tools:Z,restoredFromPersistence:Q,restoredTeammates:W}}function r$($){let J=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,Z=$.includeManagementTools??!0,W=[];if(Q)W.push(V0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:H0(SY),execute:async(X)=>{let f=k(SY,X);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!J)throw Error("Spawning teammates is disabled in this context.");let Y={agentId:f.agentId,rolePrompt:f.rolePrompt};if(bY({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:Y}),!Z)$.onLeadToolsUnlocked?.(r$({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return k(wY,{agentId:f.agentId,status:"spawned"})}}));if(!Z)return W;W.push(V0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:H0(NY),execute:async(X)=>{let f=k(NY,X);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(f.agentId,f.reason),k(wY,{agentId:f.agentId,status:"stopped"})}})),W.push(V0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:H0(CY),execute:async(X)=>{return k(CY,X),k(LL,$.runtime.getSnapshot())}})),W.push(V0({name:"team_task",description:"Manage shared team tasks with action-specific payloads. create requires title and description, with optional dependsOn and assignee. list accepts optional status, assignee. claim requires taskId. complete requires taskId and summary. block requires taskId and reason. Do not include fields from other actions.",inputSchema:H0(yY),execute:async(X)=>{let f=k(yY,X);switch(f.action){case"create":{let Y=new Set(VL.create??[]),V=Object.entries(X).filter(([B,A])=>Y.has(B)&&A!=null).map(([B])=>B),H=$.runtime.createTask({title:p$(f.title,"title"),description:p$(f.description,"description"),dependsOn:f.dependsOn,assignee:f.assignee,createdBy:$.requesterId});return k(t4,{action:"create",taskId:H.id,status:H.status,...V.length>0?{ignoredFields:V,note:`Ignored fields for action=create: ${V.join(", ")}`}:{}})}case"list":return k(t4,{action:"list",tasks:$.runtime.listTaskItems({status:f.status,assignee:f.assignee})});case"claim":{let Y=$.runtime.claimTask(p$(f.taskId,"taskId"),$.requesterId);return k(t4,{action:"claim",taskId:Y.id,status:Y.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_task with action=complete when done."})}case"complete":{let Y=$.runtime.completeTask(p$(f.taskId,"taskId"),$.requesterId,p$(f.summary,"summary"));return k(t4,{action:"complete",taskId:Y.id,status:Y.status})}case"block":{let Y=$.runtime.blockTask(p$(f.taskId,"taskId"),$.requesterId,p$(f.reason,"reason"));return k(t4,{action:"block",taskId:Y.id,status:Y.status})}}}}));let j=new Map;return W.push(V0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:H0(qY),execute:async(X)=>{let f=k(qY,X);if(f.runMode==="async"){let H=$.runtime.startTeammateRun(f.agentId,f.task,{taskId:f.taskId||void 0,fromAgentId:$.requesterId,continueConversation:f.continueConversation||void 0});return k($W,{agentId:f.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${f.agentId} and queued as ${H.id}.`,runId:H.id})}let Y=j.get(f.agentId);if(Y){let H=await Y;return k($W,{...H,status:"joined",deduped:!0,message:`Task for ${f.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let V=$.runtime.routeToTeammate(f.agentId,f.task,{taskId:f.taskId||void 0,fromAgentId:$.requesterId,continueConversation:f.continueConversation||void 0}).then((H)=>k($W,{agentId:f.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${f.agentId} and completed in sync mode.`,text:H.text,iterations:H.iterations})).finally(()=>{j.delete(f.agentId)});return j.set(f.agentId,V),await V}})),W.push(V0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:H0(FY),execute:async(X)=>{let f=k(FY,X),Y=$.runtime.cancelRun(f.runId,f.reason);return k(BL,{runId:Y.id,status:Y.status})}})),W.push(V0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:H0(zY),execute:async(X)=>k(JW.array(),$.runtime.listRuns(k(zY,X)).map(QW))})),W.push(V0({name:"team_await_runs",description:"Wait for async teammate runs. Provide runId to wait for one run, or omit it to wait for all active async runs. Uses a long timeout for legitimate teammate work.",inputSchema:H0(KY),timeoutMs:XL,execute:async(X)=>{let f=k(KY,X);if(f.runId){let H=await $.runtime.awaitRun(f.runId);return _L(H),k(JW,QW(H))}let Y=await $.runtime.awaitAllRuns(),V=Y.filter((H)=>["failed","cancelled","interrupted"].includes(H.status));if(V.length>0){let H=V.map((B)=>`${B.id}:${B.status}${B.error?`(${B.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${H}`)}return k(JW.array(),Y.map(QW))}})),W.push(V0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:H0(PY),execute:async(X)=>{let f=k(PY,X),Y=$.runtime.sendMessage($.requesterId,f.toAgentId,f.subject,f.body,f.taskId??void 0);return k(RL,{id:Y.id,toAgentId:Y.toAgentId})}})),W.push(V0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:H0(GY),execute:async(X)=>{let f=k(GY,X),Y=$.runtime.broadcast($.requesterId,f.subject,f.body,{taskId:f.taskId??void 0});return k(HL,{delivered:Y.length})}})),W.push(V0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:H0(TY),execute:async(X)=>{let f=k(TY,X);return k(FL.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:f.unreadOnly,markRead:!0}))}})),W.push(V0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:H0(_Y),execute:async(X)=>{let f=k(_Y,X),Y=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:f.taskId||void 0,kind:f.kind,summary:f.summary,evidence:f.evidence?.length?f.evidence:void 0,nextAction:f.nextAction||void 0});return k(DL,{id:Y.id})}})),W.push(V0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:H0(DY),execute:async(X)=>{if(k(DY,X),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),k(AL,{status:"cleaned"})}})),W.push(V0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:H0(UY),execute:async(X)=>{let f=k(UY,X),Y=$.runtime.createOutcome({title:f.title,requiredSections:f.requiredSections,createdBy:$.requesterId});return k(KL,{outcomeId:Y.id,status:Y.status,requiredSections:Y.requiredSections})}})),W.push(V0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:H0(AY),execute:async(X)=>{let f=k(AY,X),Y=$.runtime.attachOutcomeFragment({outcomeId:f.outcomeId,section:f.section,sourceAgentId:$.requesterId,sourceRunId:f.sourceRunId||void 0,content:f.content});return k(OY,{fragmentId:Y.id,status:Y.status})}})),W.push(V0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:H0(MY),execute:async(X)=>{let f=k(MY,X),Y=$.runtime.reviewOutcomeFragment({fragmentId:f.fragmentId,reviewedBy:$.requesterId,approved:f.approved});return k(OY,{fragmentId:Y.id,status:Y.status})}})),W.push(V0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:H0(RY),execute:async(X)=>{let f=k(RY,X),Y=$.runtime.finalizeOutcome(f.outcomeId);return k(GL,{outcomeId:Y.id,status:Y.status})}})),W.push(V0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:H0(LY),execute:async(X)=>{return k(LY,X),k(UL.array(),$.runtime.listOutcomes())}})),W}function E5($){return{...$,tasks:$.tasks.map((J)=>({...J,createdAt:new Date(J.createdAt),updatedAt:new Date(J.updatedAt)})),mailbox:$.mailbox.map((J)=>({...J,sentAt:new Date(J.sentAt),readAt:J.readAt?new Date(J.readAt):void 0})),missionLog:$.missionLog.map((J)=>({...J,ts:new Date(J.ts)})),runs:($.runs??[]).map((J)=>({...J,startedAt:new Date(J.startedAt),endedAt:J.endedAt?new Date(J.endedAt):void 0,nextAttemptAt:J.nextAttemptAt?new Date(J.nextAttemptAt):void 0,heartbeatAt:J.heartbeatAt?new Date(J.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),finalizedAt:J.finalizedAt?new Date(J.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),reviewedAt:J.reviewedAt?new Date(J.reviewedAt):void 0}))}}function hY($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var OL=[{id:"read_files",description:"Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. Long files are windowed; page with start_line/end_line.",headlessToolNames:["read_files"]},{id:"search_codebase",description:"Perform regex pattern searches across the codebase for code patterns, definitions, imports, and other text matches.",headlessToolNames:["search_codebase"]},{id:"run_commands",description:"Run shell commands from the root of the workspace for listing files, checking git status, builds, tests, and similar tasks.",headlessToolNames:["run_commands"]},{id:"editor",description:"Make controlled filesystem edits on text files with create, replace, and insert operations.",headlessToolNames:["editor"]},{id:"fetch_web_content",description:"Fetch URL content and analyze it with a prompt describing what to extract.",headlessToolNames:["fetch_web_content"]},{id:"skills",description:"Execute a configured skill within the main conversation when a matching skill exists for the task.",headlessToolNames:["skills"]},{id:"ask_question",description:"Ask the user a single clarifying question with 2-5 selectable options.",headlessToolNames:["ask_question"]},{id:"spawn_agent",description:A$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...Q8]}],TL={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function ML($){return $==="plan"||$==="yolo"?$:"act"}function IY($){let J=ML($.mode),Q=c0[h1({mode:J})],Z=t2($.providerId??"",$.modelId??"",J,o2);return{mode:J,flags:{...Q,...Z,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function kY($,J){if(J.disabledToolIds?.has($))return!1;let{flags:Q}=IY(J);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let Z=TL[$];return Z?Q[Z]===!0:!1}function qL($,J){if($.id==="editor"){let{flags:Q}=IY(J),Z=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:kY($.id,J),headlessToolNames:[Z?"apply_patch":"editor"]}}return{...$,defaultEnabled:kY($.id,J)}}function i$($={}){return OL.map((J)=>qL(J,$))}function b5($={}){return i$($).filter((J)=>J.defaultEnabled).map((J)=>J.id)}function h5($){if(!$.enabled)return new Set;let J=i$($.availabilityContext),Q=new Set(J.map((Z)=>Z.id));if(!$.allowlist||$.allowlist.length===0)return new Set(J.filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id));for(let Z of $.allowlist)if(!Q.has(Z))throw Error(`Unknown tool "${Z}". Available tools: ${J.map((W)=>W.id).join(", ")}`);return new Set($.allowlist)}function e4($,J={}){return i$(J).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function k5($,J={}){return e4($,J)}function n$($={}){let{executorOptions:J={},executors:Q,...Z}=$,W={...s2(J),...Q??{}};return f$({...Z,executors:W})}import{mkdirSync as yL,writeFileSync as EL}from"node:fs";import{dirname as bL}from"node:path";import{normalizeUserInput as hL}from"@cline/shared";import{nanoid as kL}from"nanoid";var gY={};w(gY,{sanitizeSessionToken:()=>a$,parseTeamTaskSubSessionId:()=>j8,parseSubSessionId:()=>J6,makeTeamTaskSubSessionId:()=>$6,makeSubSessionId:()=>W8,deriveSubsessionStatus:()=>Q6});import{nanoid as wL}from"nanoid";function a$($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function W8($,J){let Q=a$($),Z=a$(J),W=`${Q}__${Z}`;return W.length>180?W.slice(0,180):W}function $6($,J){let Q=a$($),Z=a$(J);return`${Q}__teamtask__${Z}__${wL(6)}`}function j8($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let Z=$.slice(0,Q),W=$.slice(Q+12),j=W.lastIndexOf("__");if(j<=0)return null;let X=W.slice(0,j),f=W.slice(j+2);if(!Z||!X||!f)return null;return{rootSessionId:Z,agentId:X,teamTaskId:f}}function J6($){if(j8($))return null;let J="__",Q=$.indexOf(J);if(Q<=0)return null;let Z=$.slice(0,Q),W=$.slice(Q+J.length);if(!Z||!W)return null;return{rootSessionId:Z,agentId:W}}function Q6($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let J=String($.reason??"").toLowerCase();if(J.includes("cancel")||J.includes("abort")||J.includes("interrupt"))return"cancelled";if(J.includes("fail")||J.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as a}from"zod";var cY={};w(cY,{isTerminalSessionStatus:()=>vY,isNonTerminalSessionStatus:()=>j0,SessionSource:()=>U0,SESSION_STATUSES:()=>Z6,NON_TERMINAL_SESSION_STATUSES:()=>mY});import{SESSION_STATUS_VALUES as SL}from"@cline/shared";var Z6=SL,mY=["idle","running","pending"];function vY($){return!mY.includes($)}function j0($){return!vY($)}var U0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var CL=a.enum(Z6),S0=a.object({version:a.literal(1),session_id:a.string().min(1),source:a.string().min(1),pid:a.number().int(),started_at:a.string().min(1),ended_at:a.string().min(1).optional(),exit_code:a.number().int().nullable().optional(),status:CL,interactive:a.boolean(),provider:a.string().min(1),model:a.string().min(1),cwd:a.string().min(1),workspace_root:a.string().min(1),team_name:a.string().min(1).optional(),enable_tools:a.boolean(),enable_spawn:a.boolean(),enable_teams:a.boolean(),prompt:a.string().optional(),metadata:a.record(a.string(),a.unknown()).optional(),messages_path:a.string().min(1).optional()});function uY($){if(!$)return!1;return Object.values($).some((J)=>typeof J==="function")}function WW($,J){let Q=[...$??[],...J??[]];if(Q.length===0)return;let Z=[],W=new Set;for(let j of Q){if(W.has(j.name))continue;W.add(j.name),Z.push(j)}return Z}function dY($){return JSON.stringify($,(J,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function x1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function ZW($,J){let Q={...$};Q.id=x1(Q.id)??kL();let Z=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,W={id:x1(Z?.id)??x1(Q.modelId)??x1(J?.id),provider:x1(Z?.provider)??x1(Q.providerId)??x1(J?.provider),family:x1(Z?.family)??x1(J?.family)};if(delete Q.providerId,delete Q.modelId,W.id&&W.provider)Q.modelInfo={id:W.id,provider:W.provider,...W.family?{family:W.family}:{}};else delete Q.modelInfo;return Q}function I5($){return $.map((J)=>ZW(J))}function x5($,J,Q=[]){let Z=$.map((Y,V)=>{let H=Q[V],A=H?.role===Y.role&&JSON.stringify(H.content)===JSON.stringify(Y.content)?{...H,...Y}:{...Y};return ZW(A)}),W=Q.length,j=[];for(let Y=W;Y<Z.length;Y+=1)if(Z[Y]?.role==="assistant")j.push(Y);if(j.length===0){let Y=[...Z].reverse().findIndex((V)=>V.role==="assistant");if(Y===-1)return Z;j.push(Z.length-1-Y)}let X=j[j.length-1],f=j.some((Y)=>Z[Y]?.metrics);for(let Y of j){let V=Z[Y],H=V.metrics;if(!H&&Y===X&&!f){let B=J.usage;H={inputTokens:B.inputTokens,outputTokens:B.outputTokens,cacheReadTokens:B.cacheReadTokens??0,cacheWriteTokens:B.cacheWriteTokens??0,cost:B.totalCost}}Z[Y]={...ZW(V,{id:J.model.id,provider:J.model.provider,family:J.model.info?.family}),...H?{metrics:H}:{},ts:V.ts??J.endedAt.getTime()}}return Z}function W6($){return{sessionId:$.sessionId,source:$.source,pid:$.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??void 0,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:$.parentSessionId??void 0,parentAgentId:$.parentAgentId??void 0,agentId:$.agentId??void 0,conversationId:$.conversationId??void 0,isSubagent:$.isSubagent,prompt:$.prompt??void 0,metadata:$.metadata??void 0,messagesPath:$.messagesPath??void 0,updatedAt:$.updatedAt}}var IL=120;function s$($){let J=$?.trim();return J?J.slice(0,IL):void 0}function jW($){let J=hL($??"").trim();if(!J)return;return s$(J.split(`
|
|
198
|
+
`)[0]?.trim())}function K$($){if(!$)return;let J={...$},Q=s$(typeof J.title==="string"?J.title:void 0);if(Q)J.title=Q;else delete J.title;return Object.keys(J).length>0?J:void 0}function j6($){let J=K$($.metadata)??{},Q=$.title!==void 0?s$($.title):jW($.prompt);if(Q)J.title=Q;return Object.keys(J).length>0?J:void 0}function XW($){let J=j8($);if(J)return{agent:"teammate",sessionId:J.rootSessionId,taskType:"team"};let Q=J6($);if(Q)return{agent:"subagent",sessionId:Q.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function fW($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:I5($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function lY($,J,Q){yL(bL($),{recursive:!0}),EL($,`${JSON.stringify(fW({updatedAt:J,context:Q,messages:[]}),null,2)}
|
|
199
|
+
`,"utf8")}function pY($,J){return S0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:J?.endedAt??$.endedAt??void 0,exit_code:J?.exitCode??$.exitCode??void 0,status:J?.status??$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName??void 0,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt??void 0,metadata:J?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function rY($,J,Q){let Z=0;while(!0){let W=await $();if(W===void 0)return{updated:!1};let j=await J(W);if(typeof j==="object"&&j!==null&&"updated"in j&&j.updated===!1){if(Z+=1,Z>=Q)return j;continue}return j}}O0();var iY={};w(iY,{summarizeUsageFromMessages:()=>f8,sumUsageTotals:()=>X6,getCurrentContextSize:()=>YW,createInitialAccumulatedUsage:()=>D0,accumulateUsageTotals:()=>B0});function D0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function B0($,J){return{inputTokens:$.inputTokens+Math.max(0,J.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,J.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,J.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,J.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,J.totalCost??0)}}function X6($){let J=D0();for(let Q of $)J=B0(J,Q);return J}function X8($){return typeof $==="number"&&Number.isFinite($)?$:0}function f8($){let J=D0();for(let Q of $){let Z=Q.metrics;if(!Z)continue;J=B0(J,{inputTokens:X8(Z.inputTokens),outputTokens:X8(Z.outputTokens),cacheReadTokens:X8(Z.cacheReadTokens),cacheWriteTokens:X8(Z.cacheWriteTokens),totalCost:X8(Z.cost)})}return J}function YW($){for(let J=$.length-1;J>=0;J-=1){let Q=$[J];if(Q?.role!=="assistant")continue;let Z=X8(Q.metrics?.inputTokens);return Z>0?Z:void 0}return}function xL($){if(!$||typeof $!=="object")return;let J=$,Q=J.skill??J.skill_name??J.skillName;if(typeof Q!=="string")return;let Z=Q.trim();return Z.length>0?Z:void 0}function VW($){if(!$||typeof $!=="object")return{};let J=$;return{agentId:typeof J.agentId==="string"?J.agentId:void 0,conversationId:typeof J.conversationId==="string"?J.conversationId:void 0,parentAgentId:typeof J.parentAgentId==="string"?J.parentAgentId:void 0}}function g1($){let J=$.agentId?.trim();if(!J)return;let Q=$.parentAgentId?.trim()||void 0,Z=$.teamRole,W="root";if(Z==="teammate")W="team_teammate";else if(Z==="lead")W="team_lead";else if(Q)W="subagent";return{agentId:J,agentKind:W,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Q,createdByAgentId:$.createdByAgentId?.trim()||Q||void 0,isSubagent:Boolean(Q),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:Z,teamAgentId:$.teamAgentId?.trim()||void 0}}function gL($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function mL($){let J=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of J){let Z=Q?.trim();if(Z)return Z}return $.isPrimaryAgentEvent?"root":"unknown"}function HW($,J,Q){let{sessionId:Z,config:W,liveSession:j,emit:X}=$,f=W.telemetry,Y=j?.runtime.teamRuntime,V=Q?.isPrimaryAgentEvent??!0,H=VW(J),B=g1({agentId:Q?.agentId??H.agentId,conversationId:Q?.conversationId??H.conversationId,parentAgentId:Q?.parentAgentId??H.parentAgentId,createdByAgentId:Q?.createdByAgentId,teamId:Q?.teamId??Y?.getTeamId(),teamName:Q?.teamName??Y?.getTeamName(),teamRole:Q?.teamRole,teamAgentId:Q?.teamAgentId});if(J.type==="content_start"&&J.contentType==="tool"&&J.toolName==="skills"){let A=xL(J.input);if(A)lJ(f,{ulid:Z,skillName:A,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:W.providerId,modelId:W.modelId,...B})}if(J.type==="content_end"&&J.contentType==="tool"){let A=J.toolName??"unknown",K=!J.error;if(dJ(f,{ulid:Z,tool:A,autoApproved:void 0,success:K,modelId:W.modelId,provider:W.providerId,...B}),!K&&(A==="editor"||A==="apply_patch"))pJ(f,{ulid:Z,modelId:W.modelId,provider:W.providerId,errorType:J.error,...B})}if(J.type==="notice"&&J.reason==="api_error")B4(f,{ulid:Z,model:W.modelId,provider:W.providerId,errorMessage:J.message,...B});if(J.type==="error")B4(f,{ulid:Z,model:W.modelId,provider:W.providerId,errorMessage:J.error?.message??"unknown error",...B});if(J.type==="usage"&&j?.turnUsageBaseline){let A=gL(J);if(V){j.turnPrimaryUsage=B0(j.turnPrimaryUsage??D0(),A);let G=B0(j.turnUsageBaseline,j.turnPrimaryUsage);$.usageBySession.set(Z,G),g2(f,{ulid:Z,provider:W.providerId,model:W.modelId,source:"assistant",mode:W.mode,...B}),cJ(f,{ulid:Z,tokensIn:J.inputTokens,tokensOut:J.outputTokens,cacheWriteTokens:J.cacheWriteTokens,cacheReadTokens:J.cacheReadTokens,totalCost:J.cost,model:W.modelId,...B})}else{let G=mL({isPrimaryAgentEvent:V,overrides:Q,eventMetadata:H}),R=j.turnUsageByAgent??new Map;j.turnUsageByAgent=R,R.set(G,B0(R.get(G)??D0(),A))}let K=B0(j.turnPrimaryUsage??D0(),X6(j.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(Z,B0(j.turnAggregateUsageBaseline??j.turnUsageBaseline,K))}if(J.type==="iteration_end"&&V)$.persistMessages(Z,j?.agent.getMessages()??[],j?.config.systemPrompt);X({type:"agent_event",payload:{sessionId:Z,event:J,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(V?"lead":void 0):void 0}}),X({type:"chunk",payload:{sessionId:Z,stream:"agent",chunk:dY(J),ts:Date.now()}})}function G$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as n_}from"@cline/shared";W1();import{existsSync as d5,readFileSync as Pz,statSync as Nz}from"node:fs";import{basename as wz,dirname as c5,join as l5,resolve as u5}from"node:path";import{discoverPluginModulePaths as Sz,resolveConfiguredPluginModulePaths as GV,resolvePluginConfigSearchPaths as Cz,SKILLS_CONFIG_DIRECTORY_NAME as yz}from"@cline/shared/storage";import{resolve as jz}from"node:path";import{normalizePluginManifest as Xz}from"@cline/shared";import{existsSync as R0,readFileSync as V8}from"node:fs";import{builtinModules as vL,createRequire as GW}from"node:module";import{dirname as F$,extname as Y6,isAbsolute as cL,resolve as p}from"node:path";import{fileURLToPath as aY}from"node:url";import{PLUGIN_FILE_EXTENSIONS as uL}from"@cline/shared";var sY=F$(aY(import.meta.url)),dL=GW(import.meta.url),lL=p(sY,"..","..","..","..",".."),BW=iL(lL),pL=["@cline/sdk","@cline/agents","@cline/core","@cline/core/hub","@cline/core/hub/daemon-entry","@cline/core/telemetry","@cline/llms","@cline/llms/browser","@cline/shared","@cline/shared/automation","@cline/shared/browser","@cline/shared/storage","@cline/shared/db","@cline/shared/types"],FW=new Set(vL.flatMap(($)=>[$,$.replace(/^node:/,"")])),f6=new Set(uL),rL=["development","node","import","require","default"];function iL($){let J={},Q={"@cline/sdk":p($,"packages/sdk/src/index.ts"),"@cline/agents":p($,"packages/agents/src/index.ts"),"@cline/core":p($,"packages/core/src/index.ts"),"@cline/llms":p($,"packages/llms/src/index.ts"),"@cline/shared":p($,"packages/shared/src/index.ts"),"@cline/shared/storage":p($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":p($,"packages/shared/src/db/index.ts")};for(let[Z,W]of Object.entries(Q))if(R0(W))J[Z]=W;for(let Z of["agents","core","llms","shared"]){let W=p($,"packages",Z),j=p(W,"package.json");if(!R0(j))continue;try{let X=JSON.parse(V8(j,"utf8"));if(typeof X.name!=="string"||!X.exports)continue;if(typeof X.exports==="string"){let f=p(W,X.exports);if(R0(f))J[X.name]=f;continue}if(typeof X.exports!=="object")continue;for(let[f,Y]of Object.entries(X.exports)){let V=nL(W,Y);if(!V)continue;let H=f==="."?X.name:`${X.name}/${f.replace(/^\.\//,"")}`;J[H]=V}}catch{}}return J}function nL($,J){let Q=DW(J);if(!Q)return null;let Z=oY($,Q);for(let W of Z)if(R0(W))return W;return null}function DW($,J=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(J.has($))return null;J.add($);let Q=$;for(let Z of rL){let W=DW(Q[Z],J);if(W)return W}return null}function oY($,J){let Q=J.replace(/^\.\//,""),Z=[p($,J)];if(Q.startsWith("dist/")){let W=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[p($,`${W}.ts`),p($,`${W}.tsx`),p($,`${W}.mts`),p($,`${W}.cts`),...Z]}return Z}function aL($){return Object.fromEntries(Object.entries($).sort(([J],[Q])=>Q.length-J.length))}function g5($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function Y8($){if($.startsWith("@")){let[J,Q]=$.split("/",3);return Q?`${J}/${Q}`:$}return $.split("/",1)[0]??$}function sL($){let J=Y8($);if($===J)return".";return`.${$.slice(J.length)}`}function tY($){return Y8($).startsWith("@cline/")}function AW($,J){let Q=Y8(J),Z=F$($);while(!0){let W=p(Z,"node_modules",Q);if(R0(W)||R0(p(W,"package.json")))return!0;let j=p(Z,"..");if(j===Z)return!1;Z=j}}function nY($){return KW($)!==null}function KW($){try{return dL.resolve($)}catch{}return oL($)}function oL($){let J=Y8($),Q=eY(J);if(!Q)return null;let Z=p(Q,"package.json");try{let W=JSON.parse(V8(Z,"utf8")),j=sL($),X=j==="."&&typeof W.exports==="string"?W.exports:W.exports&&typeof W.exports==="object"&&Object.hasOwn(W.exports,j)?W.exports[j]:void 0,f=DW(X)??(j==="."&&typeof W.main==="string"?W.main:null);if(!f)return null;let Y=p(Q,f),V=[Y,...oY(Q,f).filter((H)=>H!==Y)];for(let H of V)if(R0(H))return H;return null}catch{return null}}function tL(){let $=[sY],J=process.env.CLINE_WRAPPER_PATH?.trim();if(J)$.push(F$(F$(J)));let Q=process.execPath?.trim();if(Q)$.push(F$(Q));return[...new Set($.map((Z)=>p(Z)))]}function eL($,J){let Q=$;while(!0){let Z=p(Q,"package.json");if(R0(Z))try{if(JSON.parse(V8(Z,"utf8")).name===J)return Q}catch{}let W=p(Q,"node_modules",J,"package.json");if(R0(W))return F$(W);let j=p(Q,"..");if(j===Q)return null;Q=j}}function eY($){for(let J of tL()){let Q=eL(J,$);if(Q)return Q}return null}function $z($){let Q=F$($);for(let Z=0;Z<4;Z++){let W=p(Q,"package.json");if(R0(W))try{let X=JSON.parse(V8(W,"utf8"));return X!=null&&typeof X==="object"&&"cline"in X}catch{return!1}let j=p(Q,"..");if(j===Q)return!1;Q=j}return!1}function $V($,J){let Q=J.startsWith("file:")?aY(J):cL(J)?J:p(F$($),J);if(R0(Q)&&f6.has(Y6(Q)))return Q;for(let Z of f6){let W=`${Q}${Z}`;if(R0(W))return W}for(let Z of f6){let W=p(Q,`index${Z}`);if(R0(W))return W}return null}function JV($){let J=new Set,Q=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let Z of Q)for(let W of $.matchAll(Z)){let j=W[1];if(j)J.add(j)}return[...J]}function Jz($){return Y6($)!==".ts"}function QV($,J,Q=new Set){if(Q.has($)||!R0($))return;if(Q.add($),!f6.has(Y6($)))return;let Z=V8($,"utf8"),W=Jz($);for(let j of JV(Z)){if(j.startsWith("node:")||FW.has(j))continue;if(g5(j)){if(!W)continue;if(Object.hasOwn(BW,j)||Object.hasOwn(BW,Y8(j))||AW($,j)||tY(j)&&nY(j)||J&&nY(j))continue;throw Error(`Cannot find module '${Y8(j)}'`)}let X=$V($,j);if(X)QV(X,J,Q)}}function ZV($,J=new Set,Q=new Set){if(J.has($)||!R0($))return Q;if(J.add($),!f6.has(Y6($)))return Q;let Z=V8($,"utf8");for(let W of JV(Z)){if(Q.add(W),g5(W))continue;let j=$V($,W);if(j)ZV(j,J,Q)}return Q}function Qz($,J){let Q=GW($),Z={},W=ZV($),j=new Set(pL);for(let[X,f]of Object.entries(BW)){try{Q.resolve(X);continue}catch{}Z[X]=f}for(let X of W)if(g5(X)&&(tY(X)||J))j.add(X);for(let X of j){if(Object.hasOwn(Z,X)||AW($,X))continue;let f=KW(X);if(f)Z[X]=f}if(!J)return Z;for(let X of W){if(!g5(X)||Object.hasOwn(Z,X)||AW($,X)||X.startsWith("node:")||FW.has(X))continue;let f=KW(X);if(f)Z[X]=f}return Z}function Zz($){let J=Y6($);return J===".ts"||J===".tsx"||J===".mts"||J===".cts"}var o$;function Wz(){if(o$!==void 0)return o$;let $=eY("jiti");if(!$)return o$=null,null;let J=p($,"dist","babel.cjs");if(!R0(J))return o$=null,null;try{let Z=GW(J)(J);o$=typeof Z==="function"?Z:null}catch{o$=null}return o$}async function WV($,J={}){let Q=!$z($);QV($,Q);let Z=Qz($,Q),W=aL(Z),j=await import("jiti"),X=typeof j==="function"?j:typeof j.default==="function"?j.default:void 0;if(!X)throw Error("Unable to load jiti");let f=Object.entries(W).filter(([,B])=>Zz(B)).map(([B])=>B),Y=Wz(),V=Y?(B)=>Y({...B,interopDefault:!0}):void 0;return await X($,{alias:W,cache:J.useCache,requireCache:J.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...FW],transformModules:f,tryNative:!1,...V?{transform:V}:{}}).import($,{})}function jV($,J){if(!$)return!0;if($.providerIds?.length){if(!J?.providerId||!$.providerIds.includes(J.providerId))return!1}if($.modelIds?.length){if(!J?.modelId||!$.modelIds.includes(J.modelId))return!1}return!0}function XV($){return typeof $==="object"&&$!==null}function UW($){return Array.isArray($)&&$.every((J)=>typeof J==="string")}function fz($,J){if(!XV($.manifest))throw Error(`Invalid plugin module at ${J}: missing required "manifest"`);if(!UW($.manifest.capabilities))throw Error(`Invalid plugin module at ${J}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${J}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!UW($.manifest.providerIds))throw Error(`Invalid plugin module at ${J}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!UW($.manifest.modelIds))throw Error(`Invalid plugin module at ${J}: manifest.modelIds must be a string array when provided`)}function Yz($,J){if(!XV($))throw Error(`Invalid plugin module at ${J}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${J}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${J}: missing required "manifest"`);fz($,J)}async function V6($,J={}){let Q=jz(J.cwd??process.cwd(),$),Z=await WV(Q,{useCache:J.useCache}),W=J.exportName??"plugin",j=Z.default??Z[W];Yz(j,Q);let X=j,f=X.setup,Y=f?(V,H)=>{let B={...J.session,...H.session},A={...H,session:Object.keys(B).length>0?B:void 0,client:J.client??H.client,user:J.user??H.user,workspaceInfo:J.workspaceInfo??H.workspaceInfo,automation:J.automation??H.automation,logger:J.logger??H.logger,telemetry:J.telemetry??H.telemetry};return f(V,A)}:void 0;return{...X,manifest:Xz(X.manifest),setup:Y}}async function m5($,J={}){return(await t$($,J)).plugins}async function t$($,J={}){let Q=[],Z=[],W=new Map,j=0;for(let f of $)try{let Y=await V6(f,J);if(!jV(Y.manifest,J))continue;let V=W.get(Y.name);if(V)Z.push({type:"duplicate_plugin_override",pluginName:Y.name,pluginPath:f,overriddenPluginPath:V.pluginPath,message:`Plugin "${Y.name}" from ${f} overrides ${V.pluginPath}`});W.set(Y.name,{plugin:Y,pluginPath:f,order:j++})}catch(Y){let V=Y instanceof Error?Y.message:String(Y);Q.push({pluginPath:f,phase:"load",message:V,stack:Y instanceof Error?Y.stack:void 0})}let X=[...W.values()].sort((f,Y)=>f.order-Y.order);return{plugins:X.map((f)=>f.plugin),pluginPaths:X.map((f)=>f.pluginPath),failures:Q,warnings:Z}}import{existsSync as _W}from"node:fs";import{createRequire as KV}from"node:module";import{dirname as v5,join as B8}from"node:path";import{fileURLToPath as Kz}from"node:url";var BV={};w(BV,{resolveSubprocessRuntimeExecutable:()=>RW,buildSubprocessSandboxCommand:()=>HV,SubprocessSandbox:()=>H8,CLINE_JS_RUNTIME_PATH_ENV:()=>VV});import{spawn as Vz}from"node:child_process";import{basename as Hz}from"node:path";import{augmentNodeCommandForDebug as Bz,withResolvedClineBuildEnv as Az}from"@cline/shared";function fV($){if($ instanceof Error)return $;return Error(String($))}var VV="CLINE_JS_RUNTIME_PATH";function YV($){let J=$?.trim();if(!J)return!1;let Q=Hz(J).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function RW($={}){let J=$.env??process.env,Q=$.runtimeExecutable?.trim()||J[VV]?.trim();if(Q)return Q;let Z=$.execPath?.trim()||process.execPath;if(YV(Z))return Z;for(let W of[J.BUN_EXEC_PATH,J.npm_node_execpath,J.NODE]){let j=W?.trim();if(j&&YV(j))return j}return"node"}function HV($,J={}){let Q=RW({env:J.env,execPath:J.execPath,runtimeExecutable:J.runtimeExecutable});return Bz([Q,...$],{env:J.env,execArgv:J.execArgv,debugRole:J.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class H8{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let J=this.pending.get($);if(!J)return;if(this.pending.delete($),J.timeout)clearTimeout(J.timeout);return J}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],J=HV($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=Vz(J[0]??RW(this.options),J.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:Az(process.env),windowsHide:!0});this.process=Q;let Z="",W=(j)=>{let X=Z+j;Z=X.length>4000?X.slice(-4000):X};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(j)=>{W(j)}),Q.on("message",(j)=>{this.onMessage(j)}),Q.on("error",(j)=>{this.failPending(Error(`${this.processLabel} process error: ${fV(j).message}`))}),Q.on("exit",(j,X)=>{this.process=null;let f=Z.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(j)}, signal=${String(X)})${f?`: ${f}`:""}`))})}async call($,J,Q={}){this.start();let Z=this.process;if(!Z||Z.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let W=`req_${++this.requestCounter}`,j={type:"call",id:W,method:$,args:J};return await new Promise((X,f)=>{let Y={resolve:(V)=>X(V),reject:f};if((Q.timeoutMs??0)>0)Y.timeout=setTimeout(()=>{this.clearPendingRequest(W),this.shutdown().catch(()=>{}),f(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(W,Y),Z.send(j,(V)=>{if(!V)return;let H=this.clearPendingRequest(W);if(!H)return;H.reject(Error(`${this.processLabel} failed to send call "${$}": ${fV(V).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((J)=>{let Q=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}J()},300);$.once("exit",()=>{clearTimeout(Q),J()});try{$.kill("SIGTERM")}catch{clearTimeout(Q),J()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let J=this.clearPendingRequest($.id);if(!J)return;if($.ok){J.resolve($.result);return}J.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[J,Q]of this.pending.entries()){if(this.pending.delete(J),Q.timeout)clearTimeout(Q.timeout);Q.reject($)}}}function Gz($){return{...$,contributions:{tools:$.contributions?.tools??[],commands:$.contributions?.commands??[],rules:$.contributions?.rules??[],messageBuilders:$.contributions?.messageBuilders??[],providers:$.contributions?.providers??[],automationEventTypes:$.contributions?.automationEventTypes??[],mcpServers:$.contributions?.mcpServers??[],shortcuts:$.contributions?.shortcuts??[],flags:$.contributions?.flags??[]}}}function H6($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function Fz(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function Dz(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=KV($).resolve(`${Fz()}/package.json`),Z=B8(v5(Q),"extensions","plugin-sandbox-bootstrap.js");return _W(Z)?Z:void 0}catch{return}}function Uz(){let $=process.execPath?.trim();if(!$)return;let J=B8(v5(v5($)),"extensions","plugin-sandbox-bootstrap.js");return _W(J)?J:void 0}function Rz(){let $=v5(Kz(import.meta.url)),J=KV(import.meta.url),Q=[B8($,"plugin-sandbox-bootstrap.js"),B8($,"extensions","plugin-sandbox-bootstrap.js"),B8($,"agents","plugin-sandbox-bootstrap.js"),Dz(),Uz()];for(let j of Q.filter((X)=>typeof X==="string"))if(_W(j))return{file:j};let Z=B8($,"plugin-sandbox-bootstrap.ts"),W="jiti";try{W=J.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(W)});`,`const jiti = createJiti(${JSON.stringify(Z)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(Z)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
|
|
200
|
+
`)}}var LW=Rz();function zW($,J,Q){if(typeof $==="number"&&$>0)return $;if(Q){let Z=process.env[Q];if(Z){let W=Number(Z);if(Number.isInteger(W)&&W>0)return W}}return J}async function A8($){let J=new H8({name:"plugin-sandbox",..."file"in LW?{bootstrapFile:LW.file}:{bootstrapScript:LW.script},onEvent:$.onEvent}),Q=zW($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),Z=zW($.hookTimeoutMs,3000),W=zW($.contributionTimeoutMs,60000),j={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},X,f=()=>{return X??=J.call("initialize",j,{timeoutMs:Q}).finally(()=>{X=void 0}),X},Y;try{Y=await J.call("initialize",j,{timeoutMs:Q})}catch(B){throw await J.shutdown().catch(()=>{}),B}let V=Y.plugins.map(Gz);return{extensions:V.map((B)=>{let A={name:B.name,__clinePluginPath:B.pluginPath,manifest:B.manifest,setup:(K)=>{Lz(K,J,B,W,f),zz(K,J,B,W,f),_z(K,J,B,W,f),Tz(K,J,B,W,f),Oz(K,B)}};return A.hooks=qz(J,B,Z,f),A}),failures:Y.failures,pluginPaths:V.map((B)=>B.pluginPath),shutdown:async()=>{await J.shutdown()},warnings:Y.warnings}}function Lz($,J,Q,Z,W){for(let j of Q.contributions?.tools??[]){let X={name:j.name,description:j.description??"",inputSchema:j.inputSchema??{type:"object",properties:{}},timeoutMs:j.timeoutMs,retryable:j.retryable,execute:async(f,Y)=>{try{return await J.call("executeTool",{pluginId:Q.pluginId,contributionId:j.id,input:f,context:Y},{timeoutMs:Z})}catch(V){if(!H6(V))throw V;return await W(),await J.call("executeTool",{pluginId:Q.pluginId,contributionId:j.id,input:f,context:Y},{timeoutMs:Z})}}};$.registerTool(X)}}function zz($,J,Q,Z,W){for(let j of Q.contributions?.commands??[])$.registerCommand({name:j.name,description:j.description,handler:async(X)=>{try{return await J.call("executeCommand",{pluginId:Q.pluginId,contributionId:j.id,input:X},{timeoutMs:Z})}catch(f){if(!H6(f))throw f;return await W(),await J.call("executeCommand",{pluginId:Q.pluginId,contributionId:j.id,input:X},{timeoutMs:Z})}}})}function _z($,J,Q,Z,W){for(let j of Q.contributions?.rules??[])$.registerRule({id:j.ruleId,source:j.source,content:j.hasContentHandler===!0?async()=>{try{return await J.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:j.id},{timeoutMs:Z})}catch(X){if(!H6(X))throw X;return await W(),await J.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:j.id},{timeoutMs:Z})}}:j.content??""})}function Oz($,J){for(let Q of J.contributions?.providers??[])$.registerProvider({name:Q.name,description:Q.description,metadata:Q.metadata});for(let Q of J.contributions?.automationEventTypes??[])$.registerAutomationEventType({eventType:Q.eventType,source:Q.source,description:Q.description,attributesSchema:Q.attributesSchema,payloadSchema:Q.payloadSchema,examples:Q.examples,metadata:Q.metadata});for(let Q of J.contributions?.mcpServers??[])$.registerMcpServer(Q)}function Tz($,J,Q,Z,W){for(let j of Q.contributions?.messageBuilders??[])$.registerMessageBuilder({name:j.name,async build(X){try{let f=await J.call("buildMessages",{pluginId:Q.pluginId,contributionId:j.id,messages:X},{timeoutMs:Z});return AV(f)?f:X}catch(f){if(!H6(f))throw f;await W();let Y=await J.call("buildMessages",{pluginId:Q.pluginId,contributionId:j.id,messages:X},{timeoutMs:Z});return AV(Y)?Y:X}}})}function AV($){return Array.isArray($)&&$.every((J)=>typeof J==="object"&&J!==null&&("role"in J)&&("content"in J))}function Mz($,J,Q,Z,W){return async(j)=>{try{return await $.call("invokeHook",{pluginId:J,hookName:Q,payload:j},{timeoutMs:Z})}catch(X){if(!H6(X))throw X;return await W(),await $.call("invokeHook",{pluginId:J,hookName:Q,payload:j},{timeoutMs:Z})}}}function qz($,J,Q,Z){let W={};for(let j of J.hooks??[])W[j]=Mz($,J.pluginId,j,Q,Z);return Object.keys(W).length>0?W:void 0}var TW="package.json",Ez="package";function B6($){return Cz($)}function A6($){return Sz($)}function bz($){try{return d5($)&&Nz($).isDirectory()}catch{return!1}}function MW($){let J=[],Q=new Set;for(let Z of $){let W=u5(Z);if(Q.has(W))continue;Q.add(W),J.push(W)}return J}function FV($){let J=MW($);return M5(J)}function DV($){return B6($).flatMap((J)=>A6(J)).filter((J)=>d5(J))}function hz($,J){let Q=[];for(let Z of $)try{Q.push(...GV([Z],J))}catch{}return Q}function OW($){return typeof $==="object"&&$!==null}function kz($){try{let J=JSON.parse(Pz(l5($,TW),"utf8"));if(!OW(J)||!OW(J.cline))return[];let Q=J.cline.plugins;if(!Array.isArray(Q))return[];let Z=[];for(let W of Q){if(typeof W==="string"){Z.push(W);continue}if(!OW(W)||!Array.isArray(W.paths))continue;for(let j of W.paths)if(typeof j==="string")Z.push(j)}return Z}catch{return[]}}function UV($,J){let Q=u5(J);return kz($).some((Z)=>u5($,Z)===Q)}function Iz($,J){return wz($)===Ez&&d5(l5(c5($),TW))&&UV(c5($),J)}function xz($){let J=u5($),Q=[],Z=c5(J);while(!0){if(Iz(Z,J)){Q.push(Z);break}if(d5(l5(Z,TW))){if(UV(Z,J))Q.push(Z);break}let W=c5(Z);if(W===Z)break;Z=W}return MW(Q)}function e$($={}){let J=$.cwd??process.cwd(),Q=DV($.workspacePath),Z=GV($.pluginPaths??[],J);return FV([...Z,...Q])}function gz($={}){let J=$.cwd??process.cwd(),Q=DV($.workspacePath),Z=hz($.pluginPaths??[],J);return FV([...Z,...Q])}function $2($){let J=[];for(let Q of $)for(let Z of xz(Q)){let W=l5(Z,yz);if(bz(W))J.push(W)}return MW(J)}function RV($={}){return $2(gz($))}async function K8($={}){let J=e$($);if(J.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let Z=await t$(J,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:Z.plugins,failures:Z.failures,pluginPaths:Z.pluginPaths,warnings:Z.warnings}}let Q=await A8({pluginPaths:J,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:Q.extensions??[],shutdown:Q.shutdown,failures:Q.failures,pluginPaths:Q.pluginPaths,warnings:Q.warnings}}import{execFile as mz}from"node:child_process";import{promisify as vz}from"node:util";var cz=vz(mz);function qW($,J){$?.log(J,{severity:"warn"})}function uz($){let J=$?.checkpoint;if(!J||typeof J!=="object"||Array.isArray(J))return;let Q=J;if(!Q.latest||!Array.isArray(Q.history))return;let Z=Q.latest,W=Q.history.filter((j)=>!!j&&typeof j==="object"&&typeof j.ref==="string"&&typeof j.createdAt==="number"&&typeof j.runCount==="number");if(typeof Z.ref!=="string"||typeof Z.createdAt!=="number"||typeof Z.runCount!=="number")return;return{latest:Z,history:W}}async function J2($,J){let Q=await cz("git",["-C",$,...J],{windowsHide:!0});return{stdout:Q.stdout.trim(),stderr:Q.stderr.trim()}}async function PW($,J){if(!$)return;let Q=`refs/cline/checkpoints/${J}/`;try{let{stdout:Z}=await J2($,["for-each-ref","--format=%(refname)",Q]),W=Z.trim().split(`
|
|
201
|
+
`).filter(Boolean);await Promise.allSettled(W.map((j)=>J2($,["update-ref","-d",j])))}catch{}}async function LV($,J,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((Z)=>J2($,["update-ref",`refs/cline/checkpoints/${J}/${Z.runCount}`,Z.ref])))}function dz($,J){let Q=$.findIndex((Z)=>Z.runCount===J.runCount);if(Q<0)return[...$,J];return $.map((Z,W)=>W===Q?J:Z)}function zV($){let J=$.initialRunCount??0,Q,Z=async()=>{if(Q!==void 0)return Q;try{Q=(await J2($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Q=!1}return Q},W=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:J});if(!await Z())return;let j=async(V)=>{try{let B=(await J2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!B)return;return{ref:B,createdAt:Date.now(),runCount:J,kind:"commit"}}catch(H){qW($.logger,`${V}: ${H instanceof Error?H.message:String(H)}`);return}},X=`cline checkpoint session=${$.sessionId} run=${J}`,f="";try{f=(await J2($.cwd,["stash","create",X])).stdout.trim()}catch(V){return qW($.logger,`Checkpoint snapshot failed: ${V instanceof Error?V.message:String(V)}`),j("Checkpoint HEAD fallback failed")}if(!f)return j("Checkpoint HEAD fallback failed");let Y=`refs/cline/checkpoints/${$.sessionId}/${J}`;try{await J2($.cwd,["update-ref",Y,f])}catch(V){qW($.logger,`Checkpoint store failed: ${V instanceof Error?V.message:String(V)}`);return}return{ref:f,createdAt:Date.now(),runCount:J,kind:"stash"}};return{beforeRun:async({snapshot:j})=>{if(j.parentAgentId!=null)return;J+=1;return},beforeModel:async({snapshot:j})=>{if(j.parentAgentId!=null||j.iteration!==1||J<1)return;let X=await W();if(!X)return;let f=await $.readSessionMetadata(),Y=uz(f);if(Y?.latest.ref===X.ref)return;let V=dz(Y?.history??[],X);await $.writeSessionMetadata({...f??{},checkpoint:{latest:X,history:V}});return}}}import{spawn as tz}from"node:child_process";import{appendFileSync as ez,readFileSync as $_}from"node:fs";import{join as J_}from"node:path";import{augmentNodeCommandForDebug as TV,withResolvedClineBuildEnv as SW}from"@cline/shared";import{ensureHookLogDir as _V}from"@cline/shared/storage";function G8($,J){if(!J)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:J}}import{existsSync as lz,readdirSync as pz}from"node:fs";import{basename as rz,extname as iz,join as nz}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as p5,resolveHooksConfigSearchPaths as az}from"@cline/shared/storage";function K6($){return az($)}var F8;((H)=>{H.TaskStart="TaskStart";H.TaskResume="TaskResume";H.TaskCancel="TaskCancel";H.TaskComplete="TaskComplete";H.TaskError="TaskError";H.PreToolUse="PreToolUse";H.PostToolUse="PostToolUse";H.UserPromptSubmit="UserPromptSubmit";H.PreCompact="PreCompact";H.SessionShutdown="SessionShutdown"})(F8||={});var G6={["TaskStart"]:"agent_start",["TaskResume"]:"agent_resume",["TaskCancel"]:"agent_abort",["TaskComplete"]:"agent_end",["TaskError"]:"agent_error",["PreToolUse"]:"tool_call",["PostToolUse"]:"tool_result",["UserPromptSubmit"]:"prompt_submit",["PreCompact"]:void 0,["SessionShutdown"]:"session_shutdown"},sz=new Map(Object.values(F8).map(($)=>[$.toLowerCase(),$])),oz=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function F6($){let J=iz($).toLowerCase();if(!oz.has(J))return;let Q=rz($,J).trim().toLowerCase();return sz.get(Q)}function D$($){let J=[],Q=new Set,Z=K6($).filter((W)=>lz(W));for(let W of Z)try{for(let j of pz(W,{withFileTypes:!0})){if(!j.isFile())continue;let X=F6(j.name);if(!X)continue;let f=nz(W,j.name);if(Q.has(f))continue;Q.add(f),J.push({fileName:X,hookEventName:G6[X],path:f})}}catch{}return J.sort((W,j)=>W.path.localeCompare(j.path))}function i5($){if(!$||typeof $!=="object")return{};let J={};for(let[Q,Z]of Object.entries($))J[Q]=typeof Z==="string"?Z:JSON.stringify(Z);return J}function r5($,J,Q){let Z=Q instanceof Error?`: ${Q.message}`:"",W=`${J}${Z}`;if($){try{$.log(W,{severity:"warn",...Q!==void 0?{error:Q}:{}})}catch{}return}console.warn(W)}function Q_($,J){if(!J)return $;if(!$)return{...J};let Q=[$.context,J.context].filter((W)=>typeof W==="string"&&W.length>0).join(`
|
|
202
|
+
`),Z=[...$.appendMessages??[],...J.appendMessages??[]];return{cancel:$.cancel===!0||J.cancel===!0?!0:void 0,review:$.review===!0||J.review===!0?!0:void 0,context:Q||void 0,overrideInput:J.overrideInput!==void 0?J.overrideInput:$.overrideInput,systemPrompt:J.systemPrompt!==void 0?J.systemPrompt:$.systemPrompt,appendMessages:Z.length>0?Z:void 0}}function Z_($){if(!$||typeof $!=="object")return;let J=$,Q=typeof J.context==="string"?J.context:typeof J.contextModification==="string"?J.contextModification:typeof J.errorMessage==="string"?J.errorMessage:void 0;return{cancel:typeof J.cancel==="boolean"?J.cancel:void 0,review:typeof J.review==="boolean"?J.review:void 0,context:Q,overrideInput:Object.hasOwn(J,"overrideInput")?J.overrideInput:void 0}}function NW($){let J=String($??"").toLowerCase();return J.includes("cancel")||J.includes("abort")||J.includes("interrupt")}function L0($,J){let Q=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",Z={rootSessionId:J.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:Z,workspaceRoots:J.workspacePath?[J.workspacePath]:[],workspaceInfo:J.workspaceInfo,userId:Q,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function W_($){let J=$.trim();if(!J)return{};let Z=J.split(`
|
|
203
|
+
`).map((j)=>j.trim()).filter(Boolean).filter((j)=>j.startsWith("HOOK_CONTROL\t")).map((j)=>j.slice(13)),W=Z.length>0?Z[Z.length-1]:J;try{return{parsedJson:JSON.parse(W)}}catch(j){return{parseError:j instanceof Error?j.message:"Failed to parse hook stdout JSON"}}}async function j_($,J){let Q=$.stdin;if(!Q)throw Error("hook command failed to create stdin");await new Promise((Z,W)=>{let j=!1,X=()=>{Q.off("error",Y),Q.off("finish",V),$.off("close",H)},f=(B)=>{if(j)return;if(j=!0,X(),B){let A=B.code;if(A==="EPIPE"||A==="ERR_STREAM_DESTROYED"){Z();return}W(B);return}Z()},Y=(B)=>f(B),V=()=>f(),H=()=>f();Q.on("error",Y),Q.once("finish",V),$.once("close",H);try{Q.end(J)}catch(B){f(B)}})}async function MV($,J){if(J.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await OV($,J)}catch(Q){let Z=Y_(J.command,process.platform,Q);if(!Z)throw Q;return await OV($,{...J,command:Z})}}async function OV($,J){let Q=TV(J.command,{env:J.env,debugRole:"hook"}),Z=tz(Q[0],Q.slice(1),{cwd:J.cwd,env:SW(J.env),stdio:J.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:J.detached,windowsHide:!0}),W=new Promise((A)=>{Z.once("spawn",()=>A())}),j=new Promise((A,K)=>{Z.once("error",(G)=>K(G))}),X=JSON.stringify($);if(await Promise.race([W,j]),await j_(Z,X),J.detached){Z.unref();return}if(!Z.stdout||!Z.stderr)throw Error("hook command failed to create stdout/stderr");let f="",Y="",V=!1,H;Z.stdout.on("data",(A)=>{f+=A.toString()}),Z.stderr.on("data",(A)=>{Y+=A.toString()});let B=new Promise((A)=>{if((J.timeoutMs??0)>0)H=setTimeout(()=>{V=!0,Z.kill("SIGKILL")},J.timeoutMs);Z.once("close",(K)=>{if(H)clearTimeout(H);let{parsedJson:G,parseError:R}=W_(f);A({exitCode:K,stdout:f,stderr:Y,parsedJson:G,parseError:R,timedOut:V})})});return await Promise.race([B,j])}function X_($){try{let Q=$_($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Q?.startsWith("#!"))return;let Z=Q.slice(2).trim();if(!Z)return;let W=Z.split(/\s+/).filter(Boolean);return W.length>0?W:void 0}catch{return}}function f_($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function Y_($,J=process.platform,Q){if(J!=="win32"||!f_(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function qV($){if($.length===0)return;let[J,...Q]=$,Z=J.replace(/\\/g,"/").toLowerCase(),W=Z.split("/").at(-1)??Z;if(W==="env")return qV(Q);if(W==="bash"||W==="sh"||W==="zsh")return[W,...Q];if(W==="python3"||W==="python")return process.platform==="win32"?["py","-3",...Q]:[W,...Q];return $}function V_($){let J=X_($);if(J&&J.length>0)return[...qV(J)??J,$];let Q=$.toLowerCase();if(Q.endsWith(".sh")||Q.endsWith(".bash")||Q.endsWith(".zsh"))return["bash",$];if(Q.endsWith(".js")||Q.endsWith(".mjs")||Q.endsWith(".cjs"))return TV(["node",$],{debugRole:"hook"});if(Q.endsWith(".ts")||Q.endsWith(".mts")||Q.endsWith(".cts"))return["bun","run",$];if(Q.endsWith(".py"))return process.platform==="win32"?["py","-3",$]:["python3",$];if(Q.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",$];return["bash",$]}function H_($){let J={};for(let Q of D$($)){if(!Q.hookEventName)continue;let Z=Q.hookEventName,W=J[Z]??[];W.push(V_(Q.path)),J[Z]=W}return J}async function B_($){let J;for(let Q of $.commands){let Z=Q.join(" ");try{let W=await MV($.payload,{command:Q,cwd:$.cwd,env:SW(process.env),detached:!1,timeoutMs:$.timeoutMs});if(W?.timedOut){r5($.logger,`hook command timed out: ${Z}`);continue}if(W?.parseError){r5($.logger,`hook command returned invalid JSON control output: ${Z} (${W.parseError})`);continue}J=Q_(J,Z_(W?.parsedJson))}catch(W){r5($.logger,`hook command failed: ${Z}`,W)}}return J}function Q2($){for(let J of $.commands){let Q=J.join(" ");MV($.payload,{command:J,cwd:$.cwd,env:SW(process.env),detached:!0}).catch((Z)=>{r5($.logger,`hook command failed: ${Q}`,Z)})}}function U$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function wW($,J){return{...U$($.snapshot),userMessage:J}}function PV($){return{...U$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function NV($){return{...U$($.snapshot),iteration:$.snapshot.iteration,record:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input,output:$.result.output,error:$.result.isError?String($.result.output):void 0,durationMs:$.durationMs,startedAt:$.startedAt,endedAt:$.endedAt}}}function wV($){return $.filter((J)=>J.type==="text"&&typeof J.text==="string").map((J)=>J.text).join("")}function A_($){if(!$)return;let J={};if($.cancel===!0)J.stop=!0;if($.overrideInput!==void 0)J.input=$.overrideInput;return Object.keys(J).length>0?J:void 0}function D8($){let J={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(Z)=>{let W=`${JSON.stringify({ts:new Date().toISOString(),...Z})}
|
|
204
|
+
`,X=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??J_(_V(),"hooks.jsonl");_V(X),ez(X,W,"utf8")};return{beforeRun:async(Z)=>{let W=wW(Z,"");Q({...L0(W,J),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Z)=>{let W=PV(Z);Q({...L0(W,J),hookName:"tool_call",iteration:W.iteration,tool_call:{id:W.call.id,name:W.call.name,input:W.call.input},preToolUse:{toolName:W.call.name,parameters:i5(W.call.input)}});return},afterTool:async(Z)=>{let W=NV(Z);Q({...L0(W,J),hookName:"tool_result",iteration:W.iteration,tool_result:W.record,postToolUse:{toolName:W.record.name,parameters:i5(W.record.input),result:typeof W.record.output==="string"?W.record.output:JSON.stringify(W.record.output),success:!W.record.error,executionTimeMs:W.record.durationMs}});return},afterRun:async({snapshot:Z,result:W})=>{let j=U$(Z);if(W.status==="completed"){Q({...L0(j,J),hookName:"agent_end",iteration:W.iterations,turn:{outputText:W.outputText,status:W.status},taskComplete:{taskMetadata:{}}});return}if(W.status==="aborted"||NW(W.error?.message)){Q({...L0(j,J),hookName:"agent_abort",reason:W.error?.message,taskCancel:{taskMetadata:{}}});return}if(W.error)Q({...L0(j,J),hookName:"agent_error",iteration:W.iterations,error:{name:W.error.name,message:W.error.message,stack:W.error.stack}})},onEvent:async(Z)=>{if(Z.type!=="message-added"||Z.message.role!=="user")return;let W=wW({snapshot:Z.snapshot},wV(Z.message.content));Q({...L0(W,J),hookName:"prompt_submit",userPromptSubmit:{prompt:W.userMessage,attachments:[]}})}}}function D6($){let J=H_($.workspacePath);if(!Object.values(J).some((B)=>B.length>0))return;let Z=async(B,A)=>{let K=J[A]??[];if(K.length===0)return;Q2({commands:K,cwd:$.cwd,logger:$.logger,payload:A==="agent_resume"?{...L0(B,$),hookName:A,taskResume:{taskMetadata:{},previousState:{}}}:{...L0(B,$),hookName:A,taskStart:{taskMetadata:{}}}})},W=async(B)=>{let A=J.prompt_submit??[];if(A.length>0)Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"prompt_submit",userPromptSubmit:{prompt:B.userMessage,attachments:[]}}})},j=async(B)=>{let A=J.tool_call??[];if(A.length===0)return;return B_({commands:A,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...L0(B,$),hookName:"tool_call",iteration:B.iteration,tool_call:{id:B.call.id,name:B.call.name,input:B.call.input},preToolUse:{toolName:B.call.name,parameters:i5(B.call.input)}}})},X=async(B)=>{let A=J.tool_result??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"tool_result",iteration:B.iteration,tool_result:B.record,postToolUse:{toolName:B.record.name,parameters:i5(B.record.input),result:typeof B.record.output==="string"?B.record.output:JSON.stringify(B.record.output),success:!B.record.error,executionTimeMs:B.record.durationMs}}})},f=async(B)=>{let A=J.agent_end??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"agent_end",iteration:B.iteration,turn:B.turn,taskComplete:{taskMetadata:{}}}})},Y=async(B)=>{let A=J.agent_error??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"agent_error",iteration:B.iteration,error:{name:B.error.name,message:B.error.message,stack:B.error.stack}}})},V=async(B)=>{if(NW(B.reason)){let K=J.agent_abort??[];if(K.length>0)Q2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"agent_abort",reason:B.reason,taskCancel:{taskMetadata:{}}}})}let A=J.session_shutdown??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"session_shutdown",reason:B.reason}})},H={};if((J.agent_start?.length??0)>0||(J.agent_resume?.length??0)>0||(J.prompt_submit?.length??0)>0){if((J.agent_start?.length??0)>0||(J.agent_resume?.length??0)>0)H.beforeRun=async(B)=>{let A=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await Z(U$(B.snapshot),A);return};if((J.prompt_submit?.length??0)>0)H.onEvent=async(B)=>{if(B.type!=="message-added"||B.message.role!=="user")return;await W(wW({snapshot:B.snapshot},wV(B.message.content)))}}if((J.tool_call?.length??0)>0)H.beforeTool=async(B)=>{let A=await j(PV(B));return A_(A)};if((J.tool_result?.length??0)>0)H.afterTool=async(B)=>{await X(NV(B));return};if((J.agent_end?.length??0)>0)H.afterRun=async({snapshot:B,result:A})=>{if(A.status!=="completed")return;await f({...U$(B),iteration:A.iterations,turn:{outputText:A.outputText,status:A.status}})};if((J.agent_error?.length??0)>0||(J.agent_abort?.length??0)>0||(J.session_shutdown?.length??0)>0){let B=H.afterRun;H.afterRun=async(A)=>{await B?.(A);let{snapshot:K,result:G}=A;if(G.status==="aborted"||NW(G.error?.message)){await V({...U$(K),reason:G.error?.message});return}if(G.error)await Y({...U$(K),iteration:G.iterations,error:G.error})}}return H}function U8($){return G8("core.hook_config_files",D6($))}function Z2($,J){let Q=$.map((Z)=>Z[J]).filter((Z)=>typeof Z==="function");if(Q.length===0)return;return async(Z)=>{let W;for(let j of Q){let X=await j(Z);if(!X||typeof X!=="object")continue;let f=X;W={...W??{},...f,stop:W?.stop===!0||f.stop===!0?!0:f.stop,options:W?.options||f.options?{...W?.options??{},...f.options??{}}:void 0}}return W}}function W2($){let J=$.filter((Q)=>Q!==void 0);if(J.length===0)return;return{beforeRun:Z2(J,"beforeRun"),afterRun:Z2(J,"afterRun"),beforeModel:Z2(J,"beforeModel"),afterModel:Z2(J,"afterModel"),beforeTool:Z2(J,"beforeTool"),afterTool:Z2(J,"afterTool"),onEvent:Z2(J,"onEvent")}}var SV={};w(SV,{normalizeRuntimeCapabilities:()=>z0});function z0(...$){let J,Q;for(let W of $){if(!W)continue;if(W.toolExecutors)J={...J??{},...W.toolExecutors};if(W.requestToolApproval)Q=W.requestToolApproval}let Z=J&&Object.keys(J).length>0;if(!Z&&!Q)return;return{...Z?{toolExecutors:J}:{},...Q?{requestToolApproval:Q}:{}}}var gV={};w(gV,{toProviderConfig:()=>d0,emptyStoredProviderSettings:()=>z$,StoredProviderSettingsSchema:()=>_8,StoredProviderSettingsEntrySchema:()=>DQ,ProviderSettingsSchemaTyped:()=>z8});import{z as L$}from"zod";var xV={};w(xV,{toProviderConfig:()=>d0,safeParseSettings:()=>FQ,safeCreateProviderConfig:()=>mW,parseSettings:()=>GQ,normalizeProviderId:()=>L8,isBuiltInProviderId:()=>xW,createProviderConfig:()=>gW,SapSettingsSchema:()=>BQ,ReasoningSettingsSchema:()=>fQ,ProviderSettingsSchema:()=>R$,ProviderProtocolSchema:()=>WQ,ProviderIdSchema:()=>_6,ProviderClientSchema:()=>jQ,OcaSettingsSchema:()=>AQ,ModelCatalogSettingsSchema:()=>KQ,GcpSettingsSchema:()=>VQ,BUILT_IN_PROVIDER_IDS:()=>IW,BUILT_IN_PROVIDER:()=>z6,AzureSettingsSchema:()=>HQ,AwsSettingsSchema:()=>YQ,AuthSettingsSchema:()=>XQ});import*as u0 from"@cline/llms";import{z as N}from"zod";var IV={};w(IV,{resolveProviderConfig:()=>L6,getProviderConfig:()=>ZQ,getLiveModelsCatalog:()=>R8,clearPublicModelsCatalogCache:()=>b_,clearPrivateModelsCatalogCache:()=>kW,clearLiveModelsCatalogCache:()=>hW,OPENAI_COMPATIBLE_PROVIDERS:()=>R6,DEFAULT_MODELS_CATALOG_URL:()=>e5});import*as A0 from"@cline/llms";function CW($){if(!Array.isArray($))return[];return $.map((J)=>{if(typeof J==="string")return J.trim();if(J&&typeof J==="object"){let Q=J;for(let Z of[Q.id,Q.name,Q.model])if(typeof Z==="string"&&Z.trim())return Z.trim()}return""}).filter((J)=>J.length>0)}function K_($,J){let Q=CW($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let Z=$,W=CW(Z.data??Z.models);if(W.length>0)return W;if(Z.models&&typeof Z.models==="object"&&!Array.isArray(Z.models)){let X=Object.keys(Z.models).filter((f)=>f.trim().length>0);if(X.length>0)return X}let j=Z.providers?.[J];if(j&&typeof j==="object"){let f=CW(j.models??j);if(f.length>0)return f}return[]}async function n5($,J){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return K_(await Q.json(),J)}function CV($){return $.replace(/\/+$/,"")}function a5($,J,Q){let Z=Q?.trim();if(!Z)return;let W=$?.trim();if(!W||!J?.trim())return Z;try{let j=new URL(Z),X=new URL(J),f=new URL(W);if(j.origin!==X.origin)return Z;let Y=CV(X.pathname),V=CV(f.pathname);if(Y&&j.pathname.startsWith(`${Y}/`)){let H=j.pathname.slice(Y.length);f.pathname=`${V}${H}`}else f.pathname=j.pathname;return f.search=j.search,f.hash=j.hash,f.toString()}catch{return Z}}function G_($){return Object.fromEntries(Object.entries($).map(([J,Q])=>[J,{...Q}]))}function F_($){if($.baseUrl.length===0)return!1;switch($.client){case"openai-compatible":case"openai":case"openai-r1":case"fetch":return!0;default:return $.protocol==="openai-chat"}}var D_=Object.values(A0.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:G_($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),EV=Object.fromEntries(D_.map(($)=>[$.id,$]));function U_($){return EV[$]}function R_(){return Object.fromEntries(Object.entries(EV).filter(([,$])=>F_($)))}function bV($=[]){let J=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return J.length>0?J:void 0}var e5="https://models.dev/api.json",L_=600000,hV=300000,z_=5000,t5=new Map,U6=new Map,yW=new Map,s5=new Map;async function __(){return A0.getGeneratedProviderModels()}async function O_($,J={},Q={},Z={},W={},j={}){let X=await __(),f=A0.resolveProviderModelCatalogKeys($),Y=Object.assign({},...f.map((B)=>X[B]??{})),V=Boolean(A0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),H=Object.keys(W).length>0;if(V&&H)return A0.sortModelsByReleaseDate({...W,...j});if($==="openai-codex")return A0.sortModelsByReleaseDate({...J,...A0.filterOpenAICodexModels(Q),...W,...j});return A0.sortModelsByReleaseDate({...Y,...J,...Q,...Z,...W,...j})}function T_($,J){let Q=A0.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((Z)=>J[Z]??{}))}function $Q($){let J=$?.trim();return J&&J.length>0?J:""}function bW($){let J=$.apiKey?.trim()||$.accessToken?.trim();return J&&J.length>0?J:void 0}function M_($){let J=2166136261;for(let Q=0;Q<$.length;Q+=1)J^=$.charCodeAt(Q),J+=(J<<1)+(J<<4)+(J<<7)+(J<<8)+(J<<24);return(J>>>0).toString(16)}function q_($,J){return`${$}:${$Q(J.baseUrl)}:${M_(bW(J)??"")}`}async function JQ($,J,Q=z_){let Z=new AbortController,W=setTimeout(()=>Z.abort(),Q);try{return await fetch($,{...J,signal:Z.signal})}finally{clearTimeout(W)}}function j2($,J,Q){if(Q&&!$.includes(J))$.push(J)}function QQ($,J){let Q=["streaming","tools"];return j2(Q,"images",Boolean(J.supportsImages)),j2(Q,"prompt-cache",Boolean(J.supportsPromptCache)),j2(Q,"reasoning",Boolean(J.supportsReasoning)),{id:$,name:J.name??$,contextWindow:J.contextWindow,maxInputTokens:J.maxInputTokens,maxTokens:J.maxTokens,capabilities:Q,releaseDate:J.releaseDate,status:"active"}}async function P_($,J){let Q=await JQ("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${J}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let W=(await Q.json())?.data??[],j={};for(let X of W){let f=X.id?.trim();if(!f)continue;if(f.includes("whisper")||f.includes("tts")||f.includes("embedding"))continue;let Y=X.supported_features??[];j[f]=QQ(f,{name:f,contextWindow:X.context_length,maxInputTokens:X.context_length,maxTokens:X.max_completion_tokens,supportsReasoning:Y.includes("reasoning")||Y.includes("reasoning_effort"),supportsImages:!1})}return j}function yV($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let J=Number($);return Number.isFinite(J)?J:void 0}return}async function N_($,J){let Q=await JQ("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":J}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let W=(await Q.json())?.data??[],j={};for(let X of W){let f=X.id?.trim();if(!f)continue;j[f]=QQ(f,{name:f,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return j}async function w_($,J){let Z=`${($Q($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,W=await JQ(Z,{method:"GET",headers:{Authorization:`Bearer ${J}`,accept:"application/json"}});if(!W.ok)throw Error(`Poolside model refresh failed: HTTP ${W.status}`);let X=(await W.json())?.data??[],f={};for(let Y of X){let V=Y.id?.trim();if(!V)continue;let H=Y.supported_features??[],B=Y.supported_sampling_parameters??[],A=Y.input_modalities??[],K=["streaming"];j2(K,"tools",H.includes("tools")),j2(K,"reasoning",H.includes("reasoning")),j2(K,"temperature",B.includes("temperature")),j2(K,"images",A.includes("image"));let G={input:yV(Y.pricing?.prompt),output:yV(Y.pricing?.completion)};f[V]={id:V,name:Y.name??V,description:Y.description,contextWindow:Y.context_length,maxInputTokens:Y.context_length,maxTokens:Y.max_completion_tokens,capabilities:K,pricing:G.input!==void 0||G.output!==void 0?G:void 0,status:"active"}}return f}function S_($){let J=$Q($);if(!J)return"http://localhost:4000";return J.endsWith("/v1")?J.slice(0,-3):J}async function C_($,J){let Z=`${S_($.baseUrl)}/v1/model/info`,W=async(V)=>JQ(Z,{method:"GET",headers:{accept:"application/json",...V}}),j=await W({"x-litellm-api-key":J});if(!j.ok)j=await W({Authorization:`Bearer ${J}`});if(!j.ok)throw Error(`LiteLLM model refresh failed: HTTP ${j.status}`);let f=(await j.json())?.data??[],Y={};for(let V of f){let H=V.model_name?.trim(),A=V.litellm_params?.model?.trim()||H;if(!A)continue;let K=V.model_info,G=QQ(A,{name:H??A,maxTokens:K?.max_output_tokens??K?.max_tokens,maxInputTokens:K?.max_input_tokens??K?.max_tokens,supportsImages:K?.supports_vision,supportsPromptCache:K?.supports_prompt_caching,supportsReasoning:K?.supports_reasoning});if(Y[A]=G,H)Y[H]={...G,id:H,name:H}}return Y}var kV={baseten:P_,hicap:N_,litellm:C_,poolside:w_},EW=new Map,o5=new Map;function y_($,J){return`${$}:${$Q(J.baseUrl)}`}async function E_($,J,Q){let Z=A0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],W=a5(Q.baseUrl,Z?.provider.baseUrl,Z?.provider.modelsSourceUrl);if(!W)return{};let j=J?.cacheTtlMs??hV,X=y_($,Q),f=Date.now(),Y=EW.get(X);if(Y&&Y.expiresAt>f)return Y.data;let V=o5.get(X);if(V)return V;let H=n5(W,$).then((B)=>{let A=Object.fromEntries(B.map((K)=>[K,QQ(K,{name:K})]));return EW.set(X,{data:A,expiresAt:f+j}),A}).finally(()=>{o5.delete(X)});return o5.set(X,H),H}function b_(){EW.clear(),o5.clear()}async function h_($,J){let Q=bW(J);if(!Q)return{};let Z=kV[$];if(!Z)return{};return Z(J,Q)}function k_($,J,Q){if(!Q)return!1;if(!kV[$])return!1;if(J?.loadPrivateOnAuth===!1)return!1;return Boolean(bW(Q))}async function I_($,J,Q){let Z=J?.cacheTtlMs??hV,W=q_($,Q),j=Date.now(),X=yW.get(W);if(X&&X.expiresAt>j)return X.data;let f=s5.get(W);if(f)return f;let Y=h_($,Q).then((V)=>{return yW.set(W,{data:V,expiresAt:j+Z}),V}).finally(()=>{s5.delete(W)});return s5.set(W,Y),Y}async function x_($){return A0.fetchModelsDevProviderModels($,globalThis.fetch)}async function R8($={}){let J=$.url??e5,Q=$.cacheTtlMs??L_,Z=Date.now(),W=t5.get(J);if(W&&W.expiresAt>Z)return W.data;let j=U6.get(J);if(j)return j;let X=x_(J).then((f)=>{return t5.set(J,{data:f,expiresAt:Z+Q}),f}).finally(()=>{U6.delete(J)});return U6.set(J,X),X}function hW($){if($){t5.delete($),U6.delete($);return}t5.clear(),U6.clear()}function kW(){yW.clear(),s5.clear()}function g_($){return Object.fromEntries(Object.entries($).map(([J,Q])=>[J,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:bV(Q.capabilities)}]))}var R6=g_(R_());function ZQ($){let J=U_($);if(!J)return;return{baseUrl:J.baseUrl||void 0,modelId:J.modelId,knownModels:J.knownModels,capabilities:bV(J.capabilities)}}async function L6($,J,Q){let Z=ZQ($);if(!Z)return;try{let W=J?.loadLatestOnInit?await R8(J):void 0,j=W?T_($,W):{},X=Q&&k_($,J,Q)?await I_($,J,Q):{},Y=Boolean(A0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:Z.modelId,baseUrl:Z.baseUrl}:Q,V=Y?await E_($,J,Y).catch(()=>({})):{},H=await O_($,Z.knownModels,j,X,V,Q?.knownModels);return{...Z,knownModels:H}}catch(W){if(J?.failOnError)throw W;return Z}}var z6=u0.BUILT_IN_PROVIDER,IW=u0.BUILT_IN_PROVIDER_IDS,xW=u0.isBuiltInProviderId,L8=u0.normalizeProviderId,_6=N.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),WQ=N.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),jQ=N.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),XQ=N.object({apiKey:N.string().optional(),accessToken:N.string().optional(),refreshToken:N.string().optional(),expiresAt:N.number().int().positive().optional(),accountId:N.string().optional()}),m_=N.enum(["none","low","medium","high","xhigh"]),fQ=N.object({enabled:N.boolean().optional(),effort:m_.optional(),budgetTokens:N.number().int().positive().optional()}),YQ=N.object({accessKey:N.string().optional(),secretKey:N.string().optional(),sessionToken:N.string().optional(),region:N.string().optional(),profile:N.string().optional(),authentication:N.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:N.boolean().optional(),useCrossRegionInference:N.boolean().optional(),useGlobalInference:N.boolean().optional(),endpoint:N.string().url().optional(),customModelBaseId:N.string().optional()}),VQ=N.object({projectId:N.string().optional(),region:N.string().optional()}),HQ=N.object({apiVersion:N.string().optional(),useIdentity:N.boolean().optional()}),BQ=N.object({clientId:N.string().optional(),clientSecret:N.string().optional(),tokenUrl:N.string().url().optional(),resourceGroup:N.string().optional(),deploymentId:N.string().optional(),useOrchestrationMode:N.boolean().optional(),api:N.enum(["orchestration","foundation-models"]).optional(),defaultSettings:N.record(N.string(),N.unknown()).optional()}),AQ=N.object({mode:N.enum(["internal","external"]).optional(),usePromptCache:N.boolean().optional()}),KQ=N.object({loadLatestOnInit:N.boolean().optional(),loadPrivateOnAuth:N.boolean().optional(),url:N.string().url().optional(),cacheTtlMs:N.number().int().positive().optional(),failOnError:N.boolean().optional()}),R$=N.object({provider:_6,apiKey:N.string().optional(),auth:XQ.optional(),model:N.string().optional(),protocol:WQ.optional(),client:jQ.optional(),routingProviderId:_6.optional(),maxTokens:N.number().int().positive().optional(),contextWindow:N.number().int().positive().optional(),baseUrl:N.string().url().optional(),headers:N.record(N.string(),N.string()).optional(),timeout:N.number().int().positive().optional(),reasoning:fQ.optional(),aws:YQ.optional(),gcp:VQ.optional(),azure:HQ.optional(),sap:BQ.optional(),oca:AQ.optional(),region:N.string().optional(),apiLine:N.enum(["china","international"]).optional(),capabilities:N.array(N.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:KQ.optional()});function GQ($){return R$.parse($)}function FQ($){return R$.safeParse($)}function v_($){return $.protocol==="openai-responses"||$.client==="openai"}function d0($,J={}){let Q=$.provider,Z=L8(Q),W=J.includeKnownModels!==!1,j=$.reasoning?.effort||"none",X=j==="none"?void 0:j,f=R6[Z],Y=Object.assign({},...u0.resolveProviderModelCatalogKeys(Z).map((R)=>u0.getGeneratedModelsForProvider(R))),V=Object.keys(Y)[0],H=l2(Z,$),B=$.baseUrl??(Z==="oca"?$.oca?.mode==="internal"?j5:X5:f?.baseUrl),A=$.routingProviderId??(v_($)&&Z!==z6.OPENAI_NATIVE?z6.OPENAI_NATIVE:void 0),K=W?f?.knownModels??(Object.keys(Y).length>0?Y:void 0):void 0,G={providerId:Q,clientType:$.client,routingProviderId:A,modelId:$.model??f?.modelId??V??"default",...W?{knownModels:K}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:B,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:X,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??f?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(G).filter(([R,D])=>D!==void 0))}function gW($){let J=GQ($);return d0(J)}function mW($){let J=FQ($);if(J.success)return{success:!0,config:d0(J.data)};return{success:!1,error:J.error}}var z8=R$;var DQ=L$.object({settings:R$,updatedAt:L$.string().datetime(),tokenSource:L$.enum(["manual","oauth","migration"]).default("manual")}),_8=L$.object({version:L$.literal(1),lastUsedProvider:L$.string().min(1).optional(),providers:L$.record(L$.string(),DQ)});function z$(){return{version:1,providers:{}}}W1();var uV={};w(uV,{InMemoryWorkspaceManager:()=>T8});import{upsertWorkspaceInfo as l_,WorkspaceManifestSchema as cW}from"@cline/shared";var cV={};w(cV,{normalizeWorkspacePath:()=>m1,generateWorkspaceInfoWithDiagnostics:()=>O6,generateWorkspaceInfo:()=>O8,buildWorkspaceMetadataWithInfo:()=>vW,buildWorkspaceMetadata:()=>T6});import{basename as c_,resolve as u_}from"node:path";import{performance as mV}from"node:perf_hooks";import{processWorkspaceInfo as vV}from"@cline/shared";import d_ from"simple-git";function m1($){return u_($)}async function O8($){return(await O6($)).info}function UQ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function O6($){let J=m1($),Q={rootPath:J,hint:c_(J)},Z;try{let W=d_({baseDir:J});if(!await W.checkIsRepo())return{info:Q,vcsType:"none"};try{let X=await W.getRemotes(!0);if(X.length>0){let f=X.map((Y)=>{let V=Y.refs.fetch||Y.refs.push;return`${Y.name}: ${V}`});Q.associatedRemoteUrls=f}}catch(X){Z??=UQ(X)}try{let X=(await W.revparse(["HEAD"])).trim();if(X.length>0)Q.latestGitCommitHash=X}catch(X){Z??=UQ(X)}try{let X=(await W.branch()).current.trim();if(X.length>0)Q.latestGitBranchName=X}catch(X){Z??=UQ(X)}return{info:Q,vcsType:"git",error:Z}}catch(W){return{info:Q,vcsType:"none",error:UQ(W)}}}async function T6($){let J=await O8($);return vV(J)}async function vW($){let J=mV.now(),Q=await O6($),Z=mV.now()-J,W=Q.info;return{workspaceInfo:W,workspaceMetadata:vV(W),durationMs:Z,vcsType:Q.vcsType,initError:Q.error}}class T8{manifest;listeners=new Set;constructor($){this.manifest=cW.parse($??{workspaces:{}})}async addWorkspacePath($){let J=await O8($);return this.manifest=l_(this.manifest,J),this.emit({type:"workspace_added",workspace:J}),J}async switchWorkspace($){let J=m1($),Q=this.manifest.workspaces[J];if(Q)return this.manifest=cW.parse({...this.manifest,currentWorkspacePath:J}),this.emit({type:"workspace_switched",workspace:Q}),Q;let Z=await this.addWorkspacePath(J);return this.manifest=cW.parse({...this.manifest,currentWorkspacePath:Z.rootPath}),this.emit({type:"workspace_switched",workspace:Z}),Z}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let J=m1($);return this.manifest.workspaces[J]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let J of this.listeners)J($)}}O0();import{createHash as p_}from"node:crypto";var dV=new Set,lV=new Set;function r_($){return p_("sha256").update($).digest("hex")}function i_($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function pV($){if(!$.telemetry)return;let J=r_($.rootPath),Q=$.rootCount??1;if(!dV.has(J))dV.add(J),xJ($.telemetry,{root_count:Q,vcs_types:i_($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!lV.has(J)){lV.add(J);let Z=Error($.initError.message);Z.name=$.initError.errorType||"Error",gJ($.telemetry,Z,{fallback_to_single_root:!0,workspace_count:Q})}}function a_($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function s_($,J,Q){if(J.length>0)for(let j of J)Q?.log(j.message,{severity:"warn"});if($.length===0)return;let Z=$.slice(0,3).map(a_).join("; "),W=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${Z}${W}. Use --verbose for more details.`,{severity:"warn"});for(let j of $)Q?.log(`Plugin initialization failed (${j.phase}) for ${j.pluginPath}`,{severity:"warn",stack:j.stack,pluginPath:j.pluginPath,pluginName:j.pluginName})}function o_($,J){let Q=typeof $.thinking==="boolean",Z=typeof $.reasoningEffort==="string";if(!Q&&!Z)return J;return{...J??{},...Q?{enabled:$.thinking}:{},...Z?{effort:$.reasoningEffort}:{}}}function rV($,J){return n_($,J)}function t_($){let J=0;for(let Q of $??[]){if(Q.role!=="user")continue;if(("metadata"in Q&&Q.metadata&&typeof Q.metadata==="object"&&!Array.isArray(Q.metadata)?Q.metadata:void 0)?.kind==="recovery_notice")continue;J+=1}return J}function e_($){let J={...$.storedHeaders??{},...$.configHeaders??{}},Q=$.accountId?.trim()||$O($.accessToken);if(J.originator="cline",J.session_id=$.sessionId,J["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,Q)J["ChatGPT-Account-Id"]=Q;return J}function $O($){let J=$?.trim();if(!J)return;let Q=T0(J),Z=Q?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof Z==="string"&&Z.length>0)return Z;let W=Q?.organizations?.[0]?.id;if(typeof W==="string"&&W.length>0)return W;let j=Q?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return}function JO($,J,Q,Z,W){let j=Q.getProviderSettings($.providerId),X=Z||j?.modelCatalog?{...Z??{},...j?.modelCatalog??{}}:void 0,f=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,Y={...j??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??j?.apiKey,baseUrl:$.baseUrl??j?.baseUrl,headers:$.providerId==="openai-codex"?e_({sessionId:J,configHeaders:$.headers,storedHeaders:j?.headers,accountId:j?.auth?.accountId,accessToken:$.apiKey??j?.auth?.accessToken??j?.apiKey}):$.headers??j?.headers,reasoning:o_($,j?.reasoning),modelCatalog:X},V={...d0(Y),...f??{}};if($.knownModels)V.knownModels=$.knownModels;if($.extensionContext)V.extensionContext=$.extensionContext;let B=$.fetch??V.fetch??W;if(B)V.fetch=B;return V}async function iV($){let{input:J,sessionId:Q,providerSettingsManager:Z,defaultTelemetry:W,defaultCapabilities:j,defaultToolPolicies:X,defaultFetch:f,onPluginEvent:Y,onTeamEvent:V,createSubAgentLifecycleCallbacks:H,createSpawnTool:B,localRuntime:A,readSessionMetadata:K,writeSessionMetadata:G}=$,R=G$(J.config),{modelCatalogDefaults:D,userInstructionService:U,configExtensions:F,onTeamRestored:O,...T}=A??{},z=Object.keys(T).length>0?T:void 0,{workspaceInfo:L,workspaceMetadata:P,durationMs:S,vcsType:b,initError:u}=await vW(R),o=z?.extensionContext,J0={...o??{},workspace:{...L,...o?.workspace??{}},session:{...o?.session??{},sessionId:Q},logger:o?.logger??z?.logger,telemetry:o?.telemetry??z?.telemetry??W};pV({telemetry:J0.telemetry,rootPath:L.rootPath,workspaceInfo:L,rootCount:1,vcsType:b,durationMs:S,initError:u,featureFlagEnabled:!0});let t=U8({cwd:J.config.cwd,workspacePath:R,rootSessionId:Q,logger:z?.logger,workspaceInfo:L}),$1=uY(z?.hooks)?void 0:D8({rootSessionId:Q,workspacePath:R,workspaceInfo:L}),b$=W2([z?.hooks,$1]),r;if(rV(F,"plugins"))try{r=await K8({pluginPaths:z?.pluginPaths,workspacePath:R,cwd:J.config.cwd,onEvent:Y,providerId:J.config.providerId,modelId:J.config.modelId,workspaceInfo:L,session:J0.session,client:J0.client,user:J0.user,logger:J0.logger,telemetry:J0.telemetry,automation:J0.automation}),s_(r.failures,r.warnings,z?.logger)}catch(x2){let QZ=x2 instanceof Error?x2.message:String(x2);z?.logger?.log?.(`plugin loading failed; continuing without plugins (${QZ})`)}let C=WW(t?[t]:void 0,WW(z?.extensions,q5(r?.extensions))),X0=rV(F,"plugins")?$2(r?.pluginPaths??[]):void 0,f0={...J.config,...z??{},sessionId:Q,hooks:b$,extensions:C,extensionContext:J0,telemetry:J0.telemetry},w0=JO(f0,Q,Z,D,f),k2=W2([f0.hooks,f0.checkpoint?.enabled===!0?zV({cwd:f0.cwd,sessionId:Q,logger:f0.logger,createCheckpoint:f0.checkpoint?.createCheckpoint,initialRunCount:t_(J.initialMessages),readSessionMetadata:K,writeSessionMetadata:G}):void 0]),T1={...f0,providerConfig:w0,workspaceMetadata:P,hooks:k2},Y1=J.toolPolicies??f0.toolPolicies??X,V4=z0(j,J.capabilities),I2=V4?.requestToolApproval,bJ=V4?.toolExecutors,M1=H?.(T1),hJ=new T8({currentWorkspacePath:L.rootPath,workspaces:{[L.rootPath]:L}});return{effectiveInput:J,config:T1,providerConfig:w0,workspaceMetadata:P,workspaceInfo:L,extensions:C,hooks:k2,toolPolicies:Y1,requestToolApproval:I2,pluginSandboxShutdown:r?.shutdown,runtimeBuilderInput:{config:T1,hooks:k2,extensions:C,onTeamEvent:V,createSpawnTool:B,onTeamRestored:O,onSubAgentEvent:M1?.onSubAgentEvent,onSubAgentStart:M1?.onSubAgentStart,onSubAgentEnd:M1?.onSubAgentEnd,userInstructionService:U,pluginSkillDirectories:X0,configExtensions:F,toolExecutors:bJ,toolPolicies:Y1,workspaceManager:hJ,logger:T1.logger,telemetry:T1.telemetry,requestToolApproval:I2}}}import{existsSync as LQ,mkdirSync as QO,readdirSync as ZO,rmdirSync as WO,rmSync as jO,unlinkSync as XO}from"node:fs";import{dirname as nV,join as RQ}from"node:path";function e(){return new Date().toISOString()}function M6($){if(!$||!LQ($))return;try{XO($)}catch{}}function fO($){let J=j8($);if(J)return{rootSessionId:J.rootSessionId,fileStem:`${J.agentId}__${J.teamTaskId}`};let Q=J6($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class uW{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return RQ(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let J=this.sessionArtifactsDir($);if(!LQ(J))QO(J,{recursive:!0});return J}sessionMessagesPath($){return RQ(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,J=!1){let Q=J?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return RQ(Q,`${$}.json`)}removeSessionDirIfEmpty($){let J=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(J.startsWith(Q)&&J!==Q){if(!LQ(J)){J=nV(J);continue}try{if(ZO(J).length>0)break;WO(J)}catch{break}J=nV(J)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!LQ($))return;try{jO($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,J,Q){let{rootSessionId:Z,fileStem:W}=fO($),j=this.sessionArtifactsDir(Z);return{messagesPath:RQ(j,`${W}.messages.json`)}}}import{resolveDocumentsExtensionPath as YO}from"@cline/shared/storage";O0();function aV($,J,Q,Z,W){if(Q)vJ($.telemetry,{ulid:J,apiProvider:$.providerId,...W});else mJ($.telemetry,{ulid:J,apiProvider:$.providerId,...W});VO($.telemetry,{workspacePath:Z})}function VO($,J){let Q=YO("Hooks"),Z=D$(J.workspacePath),W=new Map;for(let j of Z){let X=j.hookEventName??"unknown",f=W.get(X)??{global:0,workspace:0};if(j.path===Q||j.path.startsWith(`${Q}/`))f.global+=1;else f.workspace+=1;W.set(X,f)}for(let[j,X]of W.entries())sJ($,j,X.global,X.workspace)}function sV($,J){for(let Q of J.mentions)nJ($,Q,J.matchedFiles.includes(Q)?1:0,"file",!J.matchedFiles.includes(Q));for(let Q of J.matchedFiles)rJ($,"file",Q.length);for(let Q of J.ignoredMentions)iJ($,"file","not_found",Q)}var ZF={};w(ZF,{ProviderSettingsManager:()=>_1});import{chmodSync as jF,existsSync as Sj,mkdirSync as Pb,readFileSync as Nb,writeFileSync as wb}from"node:fs";import{basename as XF,dirname as Cj}from"node:path";import{resolveProviderSettingsPath as Sb}from"@cline/shared/storage";var M={};w(M,{writeHubDiscovery:()=>aQ,writeGlobalSettings:()=>k1,withHubStartupLock:()=>sQ,verifyHubConnection:()=>G1,updateMcpServerOAuthState:()=>H2,updateLocalProvider:()=>u9,uninstallPlugin:()=>Jj,truncateNotificationBody:()=>_J,toggleDisabledTool:()=>T5,toTeamProgressLifecycleEvent:()=>d8,toProviderConfig:()=>d0,toHubStatusUrl:()=>S7,toHubHealthUrl:()=>oQ,toHookConfigFileName:()=>F6,syncPluginMcpServersToSettings:()=>r3,summarizeUsageFromMessages:()=>f8,stopLocalHubServerGracefully:()=>c7,startLocalOAuthServer:()=>J1,startHubWebSocketServer:()=>C2,startHubServer:()=>tK,startClineDeviceAuth:()=>HZ,splitCoreSessionConfig:()=>r6,spawnDetachedHubServerWithRetry:()=>k8,spawnDetachedHubServer:()=>k7,setTelemetryOptOutGlobally:()=>bf,setMcpServerDisabled:()=>Y2,setDisabledTools:()=>uZ,setDisabledPlugin:()=>mf,setAutoUpdateEnabledGlobally:()=>kf,sendHubCommand:()=>oA,saveProviderOAuthCredentials:()=>x$,saveLocalProviderSettings:()=>Vj,saveLocalProviderOAuthCredentials:()=>Kj,sanitizeSessionToken:()=>a$,safeParseSettings:()=>FQ,safeCreateProviderConfig:()=>mW,runSubprocessEvent:()=>i8,runHook:()=>a8,reviveTeamStateDates:()=>E5,restartLocalHubIfIdleAfterStartupTimeout:()=>Q9,resolveWorkspaceHubOwnerContext:()=>IB,resolveWorkflowsConfigSearchPaths:()=>k6,resolveSkillsConfigSearchPaths:()=>b6,resolveSharedHubOwnerContext:()=>E0,resolveSessionBackend:()=>f3,resolveRulesConfigSearchPaths:()=>h6,resolveProviderConfig:()=>L6,resolveProviderApiKeyFromSettings:()=>DZ,resolveProductionHubOwnerContext:()=>n0,resolvePluginSkillDirectoriesFromPaths:()=>$2,resolvePluginConfigSearchPaths:()=>B6,resolveMcpServerRegistrations:()=>A1,resolveLocalClineAuthToken:()=>Fj,resolveHubUrl:()=>K3,resolveHubOwnerContext:()=>l1,resolveHubEndpointOptions:()=>i0,resolveHubBuildId:()=>nQ,resolveHooksConfigSearchPaths:()=>K6,resolveDisabledToolNames:()=>B1,resolveDisabledPluginPaths:()=>r4,resolveDefaultMcpSettingsPath:()=>K0,resolveDefaultHubPort:()=>h8,resolveDefaultHubPathname:()=>h7,resolveDefaultHubHost:()=>b7,resolveCoreSelectedToolIds:()=>h5,resolveCoreDistinctId:()=>b0,resolveCompatibleLocalHubUrl:()=>XJ,resolveClineDir:()=>EB,resolveClineDataDir:()=>R2,resolveAndLoadAgentPlugins:()=>K8,resolveAgentPluginPaths:()=>e$,requestHubShutdown:()=>jJ,requestDesktopToolApproval:()=>u3,removePluginMcpServersFromSettings:()=>wJ,rememberRecoverableLocalHubUrl:()=>P$,registerRemoteConfigSessionBlobUpload:()=>N9,registerMcpServersFromSettingsFile:()=>B2,registerDisposable:()=>Ob,refreshProviderModelsFromSource:()=>Hj,refreshOpenAICodexToken:()=>W5,refreshOcaToken:()=>Y5,refreshClineToken:()=>Q5,readSessionCheckpointHistory:()=>OJ,readRemoteConfigSessionBlobUploadMetadata:()=>b3,readHubDiscovery:()=>G0,readGlobalSettings:()=>M0,readBearerToken:()=>_9,probeHubServer:()=>p1,probeHubConnection:()=>sA,prewarmFileIndex:()=>D5,prewarmDetachedHubServer:()=>eQ,prepareRemoteConfigCoreIntegration:()=>k3,parseWorkflowConfigFromMarkdown:()=>E6,parseUserCommandEnvelope:()=>_b,parseSkillConfigFromMarkdown:()=>C6,parseSettings:()=>GQ,parseRuleConfigFromMarkdown:()=>y6,parseHookEventPayload:()=>n8,parseConfiguredAgentConfig:()=>HJ,normalizeWorkspacePath:()=>m1,normalizeUserInput:()=>zb,normalizeSdkError:()=>Lb,normalizeRuntimeCapabilities:()=>z0,normalizeProviderId:()=>L8,normalizeOAuthProvider:()=>Bj,normalizeHubWebSocketUrl:()=>N$,noopBasicLogger:()=>Rb,migrateLegacyProviderSettings:()=>CJ,mergeRulesForSystemPrompt:()=>w8,mergeAgentHooks:()=>W2,makeTeamTaskSubSessionId:()=>$6,makeSubSessionId:()=>W8,loginOpenAICodex:()=>F4,loginOcaOAuth:()=>R4,loginLocalProvider:()=>Aj,loginClineOAuth:()=>K4,loginAndSaveProviderOAuthCredentials:()=>z4,loginAndSaveLocalProviderOAuthCredentials:()=>Gj,loadOpenTelemetryAdapter:()=>eE,loadMcpSettingsFile:()=>f2,loadLlmsConfigFromFile:()=>Pj,loadConfiguredAgentConfigs:()=>v8,loadAgentPluginsFromPathsWithDiagnostics:()=>t$,loadAgentPluginsFromPaths:()=>m5,loadAgentPluginFromPath:()=>V6,listSessionHistoryFromBackend:()=>q7,listPluginToolsWithDiagnostics:()=>mQ,listPluginTools:()=>l6,listMcpServerOAuthStatuses:()=>u6,listLocalProviders:()=>fj,listHookConfigFiles:()=>D$,isToolDisabledGlobally:()=>If,isTelemetryOptedOutGlobally:()=>O5,isSessionNotFoundError:()=>d1,isRuleEnabled:()=>SQ,isPluginDisabledGlobally:()=>gf,isOAuthProvider:()=>I$,isHubReconnectableTransportError:()=>m7,isHubCommandTimeoutError:()=>J9,isDiscoveryFilePresent:()=>hB,isClineNotSubscribedMessage:()=>jb,isClineNotSubscribedError:()=>Wb,isClineAccountActionRequest:()=>zQ,isBuiltInProviderId:()=>xW,isAutoUpdateEnabledGlobally:()=>hf,identifyAccount:()=>S1,hasMcpSettingsFile:()=>c1,getValidOpenAICodexCredentials:()=>D4,getValidOcaCredentials:()=>L4,getValidClineCredentials:()=>G4,getProviderOAuthCredentialsFromSettings:()=>_4,getProviderConfigFields:()=>Dj,getProviderConfig:()=>ZQ,getProviderAuthStorageId:()=>FZ,getProviderAuthHandler:()=>Z0,getPersistedProviderApiKey:()=>l2,getMcpServerOAuthState:()=>V2,getLocalProviderModels:()=>Yj,getLiveModelsCatalog:()=>R8,getFileIndex:()=>b1,getCurrentContextSize:()=>YW,getCoreHeadlessToolNames:()=>e4,getCoreDefaultEnabledToolIds:()=>b5,getCoreBuiltinToolCatalog:()=>i$,getCoreAcpToolNames:()=>k5,getClinePassSubscriptionUrl:()=>Zb,getClineNotSubscribedMessage:()=>Qb,getClineDefaultSystemPrompt:()=>Xb,generateWorkspaceInfoWithDiagnostics:()=>O6,generateWorkspaceInfo:()=>O8,formatRulesForSystemPrompt:()=>N8,formatProviderOAuthApiKey:()=>UZ,formatDisplayUserInput:()=>Ub,filterExtensionToolRegistrations:()=>q5,filterDisabledTools:()=>I1,filterDisabledPluginPaths:()=>M5,fetchClineRecommendedModels:()=>Mj,executeClineAccountAction:()=>_Q,ensureHubWebSocketServer:()=>O9,ensureHubServer:()=>eK,ensureDetachedHubServer:()=>uB,ensureCustomProvidersLoaded:()=>m9,ensureCompatibleLocalHubUrl:()=>_2,enrichPromptWithMentions:()=>a2,emptyWorkspaceManifest:()=>Gb,emptyStoredProviderSettings:()=>z$,discoverPluginModulePaths:()=>A6,disablePluginMcpServersInSettings:()=>i3,deriveSubsessionStatus:()=>Q6,deleteLocalProvider:()=>d9,defineLlmsConfig:()=>qj,createWorkflowsConfigDefinition:()=>g6,createUserInstructionConfigService:()=>_$,createToolPoliciesWithPreset:()=>R5,createTool:()=>Kb,createTeamName:()=>C9,createSubprocessHooks:()=>B9,createSpawnAgentTool:()=>A$,createSkillsConfigDefinition:()=>I6,createSessionHost:()=>r8,createRuntimeHost:()=>r8,createRulesConfigDefinition:()=>x6,createRemoteConfigSessionMessagesArtifactUploader:()=>h3,createProviderConfig:()=>gW,createOpenTelemetryTelemetryService:()=>zJ,createOAuthClientCallbacks:()=>M8,createMcpTools:()=>E8,createLocalHubScheduleRuntimeHandlers:()=>T9,createLlmsSdk:()=>wj,createInitialAccumulatedUsage:()=>D0,createInMemoryHubOwnerContext:()=>bB,createHubServerUrl:()=>j1,createHubAuthToken:()=>iQ,createHookConfigFileHooks:()=>D6,createHookConfigFileExtension:()=>U8,createHookAuditHooks:()=>D8,createDisabledMcpToolPolicy:()=>d6,createDisabledMcpToolPolicies:()=>gQ,createDelegatedAgentConfigProvider:()=>H$,createDelegatedAgent:()=>B$,createDefaultToolsWithPreset:()=>L5,createDefaultTools:()=>f$,createDefaultMcpServerClientFactory:()=>C8,createDefaultExecutors:()=>s2,createCoreSettingsService:()=>K2,createCoreSessionSnapshot:()=>F1,createContributionRegistry:()=>Ab,createContextCompactionPrepareTurn:()=>N4,createConfiguredTelemetryService:()=>s1,createConfiguredTelemetryHandle:()=>$4,createConfiguredAgentTools:()=>c8,createClineTelemetryServiceMetadata:()=>Bb,createClineTelemetryServiceConfig:()=>Hb,createBuiltinTools:()=>n$,createAgentTeamsTools:()=>r$,createAgentRuntime:()=>qb,createAgentHooksExtension:()=>G8,connectToHub:()=>F9,completeClineDeviceAuth:()=>BZ,clearPrivateModelsCatalogCache:()=>kW,clearLiveModelsCatalogCache:()=>hW,clearHubDiscovery:()=>y0,captureWorkspacePathResolved:()=>nj,captureWorkspaceInitialized:()=>xJ,captureWorkspaceInitError:()=>gJ,captureToolUsage:()=>dJ,captureTokenUsage:()=>cJ,captureTaskRestarted:()=>vJ,captureTaskCreated:()=>mJ,captureTaskCompleted:()=>H4,captureSubagentExecution:()=>A4,captureSkillUsed:()=>lJ,captureSdkError:()=>Vb,captureProviderConfigured:()=>aj,captureProviderApiError:()=>B4,captureModeSwitch:()=>uJ,captureMentionUsed:()=>rJ,captureMentionSearchResults:()=>nJ,captureMentionFailed:()=>iJ,captureHookDiscovery:()=>sJ,captureExtensionActivated:()=>ij,captureDiffEditFailure:()=>pJ,captureConversationTurnEvent:()=>g2,captureCompactionSkipped:()=>tJ,captureCompactionExecuted:()=>oJ,captureAuthSucceeded:()=>N1,captureAuthStarted:()=>P1,captureAuthLoggedOut:()=>e1,captureAuthFailed:()=>w1,captureAgentTeamCreated:()=>aJ,captureAgentCreated:()=>$$,buildWorkspaceMetadata:()=>T6,buildTeamProgressSummary:()=>u8,buildSdkErrorProperties:()=>fb,buildRemoteConfigSessionBlobUploadMetadata:()=>q9,buildDelegatedAgentConfig:()=>l$,buildConfiguredAgentToolName:()=>BJ,buildConfiguredAgentToolDescriptors:()=>AJ,bootstrapAgentTeams:()=>Z8,authorizeMcpServerOAuth:()=>hQ,addLocalProvider:()=>Xj,accumulateUsageTotals:()=>B0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>S6,UnifiedConfigFileWatcher:()=>X2,ToolPresets:()=>c0,TelemetryService:()=>t8,TelemetryLoggerSink:()=>LJ,TEAM_TOOL_NAMES:()=>Q8,SubprocessSandbox:()=>H8,StoredProviderSettingsSchema:()=>_8,StoredProviderSettingsEntrySchema:()=>DQ,SqliteTeamStore:()=>y2,SqliteSessionStore:()=>U1,SessionVersioningService:()=>y$,SessionVersioningError:()=>k0,SessionSource:()=>U0,SessionNotFoundError:()=>u1,SapSettingsSchema:()=>BQ,SKILLS_CONFIG_DIRECTORY_NAME:()=>w6,SESSION_STATUSES:()=>Z6,SESSION_NOT_FOUND_ERROR_CODE:()=>G2,SDK_ERROR_TELEMETRY_EVENT:()=>Tb,RpcClineAccountService:()=>P6,RemoteRuntimeHost:()=>g8,ReasoningSettingsSchema:()=>fQ,RULES_CONFIG_DIRECTORY_NAME:()=>wQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>P9,ProviderSettingsSchema:()=>R$,ProviderSettingsManager:()=>_1,ProviderProtocolSchema:()=>WQ,ProviderIdSchema:()=>_6,ProviderClientSchema:()=>jQ,OpenTelemetryProvider:()=>e8,OcaSettingsSchema:()=>AQ,OPENAI_COMPATIBLE_PROVIDERS:()=>R6,NodeHubClient:()=>X1,NoOpFeatureFlagsProvider:()=>q2,NativeHubTransportAdapter:()=>PJ,ModelCatalogSettingsSchema:()=>KQ,LocalRuntimeHost:()=>z1,Llms:()=>$b,InMemoryWorkspaceManager:()=>T8,InMemoryMcpManager:()=>A2,HubUIClient:()=>D3,HubTransportError:()=>q0,HubSessionClient:()=>F3,HubServerTransport:()=>Q4,HubScheduleService:()=>o8,HubScheduleCommandService:()=>s8,HubRuntimeHost:()=>r1,HubCommandError:()=>I8,HookEventPayloadSchema:()=>H9,HookEventNameSchema:()=>V9,HookConfigFileName:()=>F8,HOOK_CONFIG_FILE_EVENT_MAP:()=>G6,HOOKS_CONFIG_DIRECTORY_NAME:()=>p5,GlobalSettingsSchema:()=>p4,GcpSettingsSchema:()=>VQ,FileTeamPersistenceStore:()=>i9,FeatureFlagsService:()=>M2,FeatureFlagDefaultValue:()=>Db,FEATURE_FLAGS:()=>Fb,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>e9,DefaultToolNames:()=>F0,DefaultRuntimeBuilder:()=>j4,DefaultLlmsSdk:()=>yJ,DEFAULT_MODELS_CATALOG_URL:()=>e5,DEFAULT_HUB_PORT:()=>y7,DEFAULT_HUB_PATHNAME:()=>E7,DEFAULT_HUB_HOST:()=>C7,CoreSettingsService:()=>O$,CoreSessionService:()=>L1,ContributionRegistry:()=>Yb,ClineNotSubscribedError:()=>Jb,ClineCore:()=>UJ,ClineAccountService:()=>q6,ChatViewStateSchema:()=>Oj,ChatSummarySchema:()=>t9,ChatSessionStatusSchema:()=>a9,ChatSessionConfigSchema:()=>n9,ChatMessageSchema:()=>o9,ChatMessageRoleSchema:()=>s9,CORE_TELEMETRY_EVENTS:()=>x,CORE_BUILD_VERSION:()=>Tj,BrowserWebSocketHubAdapter:()=>qJ,BUILT_IN_PROVIDER_IDS:()=>IW,BUILT_IN_PROVIDER:()=>z6,AzureSettingsSchema:()=>HQ,AwsSettingsSchema:()=>YQ,AuthSettingsSchema:()=>XQ,AgentTeamsRuntime:()=>T2,AgentTeam:()=>p8,Agent:()=>Mb,ALL_DEFAULT_TOOL_NAMES:()=>W$});q(M,Qa);import*as $b from"@cline/llms";import{ClineNotSubscribedError as Jb,getClineNotSubscribedMessage as Qb,getClinePassSubscriptionUrl as Zb,isClineNotSubscribedError as Wb,isClineNotSubscribedMessage as jb}from"@cline/llms";import{buildClineSystemPrompt as Xb,buildSdkErrorProperties as fb,ContributionRegistry as Yb,captureSdkError as Vb,createClineTelemetryServiceConfig as Hb,createClineTelemetryServiceMetadata as Bb,createContributionRegistry as Ab,createTool as Kb,emptyWorkspaceManifest as Gb,FEATURE_FLAGS as Fb,FeatureFlagDefaultValue as Db,formatDisplayUserInput as Ub,noopBasicLogger as Rb,normalizeSdkError as Lb,normalizeUserInput as zb,parseUserCommandEnvelope as _b,registerDisposable as Ob,SDK_ERROR_TELEMETRY_EVENT as Tb}from"@cline/shared";import"@cline/shared/storage";var tV={};w(tV,{isClineAccountActionRequest:()=>zQ,executeClineAccountAction:()=>_Q,RpcClineAccountService:()=>P6,ClineAccountService:()=>q6});function HO($){if(typeof $!=="object"||$===null||!("error"in $))return;let J=$.error;return typeof J==="string"&&J.trim()?J:void 0}function oV($,J,Q){let Z=HO(Q);if(Z)return Z;let W=J.trim();if(W){let j=W.length>200?`${W.slice(0,200)}...`:W;return`Cline account request failed with status ${$}: ${j}`}return`Cline account request failed with status ${$}`}class q6{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let J=$.apiBaseUrl.trim();if(!J)throw Error("apiBaseUrl is required");this.apiBaseUrl=J,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let J=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(J)}/balance`)}async fetchUsageTransactions($){let J=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(J)}/usages`)).items??[]}async fetchPaymentTransactions($){let J=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(J)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchOrganization($){let J=$.trim();if(!J)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(J)}`)}async fetchOrganizationBalance($){let J=$.trim();if(!J)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(J)}/balance`)}async fetchOrganizationUsageTransactions($){let J=$.organizationId.trim();if(!J)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(J,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(J)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let J=$?.trim();if(J)return J;let Z=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(Z)return Z;let W=await this.fetchMe();if(!W.id?.trim())throw Error("Unable to resolve current user id");return W.id}async resolveOrganizationMemberId($,J){let Q=J?.trim();if(Q)return Q;let W=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(W)return W;let X=(await this.fetchUserOrganizations()).find((f)=>f.organizationId===$)?.memberId;if(!X?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return X}async request($,J){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let Z=this.getHeadersFn?await this.getHeadersFn():{},W=new AbortController,j=setTimeout(()=>W.abort(),this.requestTimeoutMs);try{let X=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:J?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...Z??{}},body:J?.body!==void 0?JSON.stringify(J.body):void 0,signal:W.signal});if(X.status===204||J?.expectNoContent){if(!X.ok)throw Error(`Cline account request failed with status ${X.status}`);return}let f=await X.text(),Y;if(f.trim())try{Y=JSON.parse(f)}catch{if(!X.ok)throw Error(oV(X.status,f,void 0));throw Error("Cline account response was not valid JSON")}if(!X.ok)throw Error(oV(X.status,f,Y));if(typeof Y==="object"&&Y!==null){let V=Y;if(typeof V.success==="boolean"){if(!V.success)throw Error(V.error||"Cline account request failed");if(V.data!==void 0)return V.data}}if(Y===void 0||Y===null)throw Error("Cline account response payload was empty");return Y}finally{clearTimeout(j)}}}function zQ($){return $.action==="clineAccount"}async function _Q($,J){switch($.operation){case"fetchMe":return J.fetchMe();case"fetchBalance":return J.fetchBalance($.userId);case"fetchUsageTransactions":return J.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return J.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return J.fetchUserOrganizations();case"fetchOrganizationBalance":return J.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return J.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await J.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return J.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class P6{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let J=$.trim();if(!J)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:J})}async fetchOrganizationUsageTransactions($){let J=$.organizationId.trim();if(!J)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:J,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var eV={};w(eV,{createOAuthClientCallbacks:()=>M8});function M8($){return{onAuth:({url:J,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(J)).catch((Z)=>{$.onOpenUrlError?.({url:J,error:Z})})}catch(Z){$.onOpenUrlError?.({url:J,error:Z})}$.onOutput?.(J)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var cA={};w(cA,{ClineCore:()=>UJ});function $H($){if($===!0)return{};if(!$)return;return $}function JH($){if($==="user")return"global";return $}class dW{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let J=this.getService().ingestEvent($);return{event:J.event,duplicate:J.duplicate,matchedSpecIds:J.matchedSpecs.map((Q)=>Q.specId),queuedRuns:J.queuedRuns,suppressions:J.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function QH($){let{host:J}=$;return{async startSession(Q){let Z=(Q.cwd?.trim()||Q.workspaceRoot).trim(),W=await J.startSession({source:Q.source?.trim()||U0.CLI,interactive:!1,config:{providerId:L8(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:Z,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:KO(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Q.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(Q,Z){let W=await J.runTurn({sessionId:Q,prompt:Z.prompt,userImages:Z.attachments?.userImages,userFiles:Z.attachments?.userFiles?.map((j)=>j.content),delivery:Z.delivery});if(!W)throw Error("ClineCore automation runtime returned no result");return{result:AO(W)}},async abortSession(Q){return await J.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await J.stopSession(Q),{applied:!0}}}}function OQ($){let J=BO($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),Z=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),W=$.context?.logger??$.logger,j=$.context?.telemetry??$.telemetry;if(!J&&!Q&&!Z&&!W&&!j)return $.context;return{...$.context??{},...Q?{client:Q}:{},...Z?{user:Z}:{},...W?{logger:W}:{},...j?{telemetry:j}:{},...J?{automation:J}:{}}}function BO($,J){if(!$)return;return{ingestEvent:(Q)=>{J.ingestEvent(Q)}}}function AO($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((J)=>({name:J.name,input:J.input,output:J.output,error:J.error,durationMs:J.durationMs}))}}function KO($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var rH={};w(rH,{createCoreSettingsService:()=>K2,CoreSettingsService:()=>O$});import{existsSync as vQ}from"node:fs";import{basename as dH,isAbsolute as vT,relative as cT}from"node:path";var UH={};w(UH,{resolveWorkflowsConfigSearchPaths:()=>k6,resolveSkillsConfigSearchPaths:()=>b6,resolveRulesConfigSearchPaths:()=>h6,parseWorkflowConfigFromMarkdown:()=>E6,parseSkillConfigFromMarkdown:()=>C6,parseRuleConfigFromMarkdown:()=>y6,createWorkflowsConfigDefinition:()=>g6,createUserInstructionConfigService:()=>_$,createSkillsConfigDefinition:()=>I6,createRulesConfigDefinition:()=>x6,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>S6,UnifiedConfigFileWatcher:()=>X2,SKILLS_CONFIG_DIRECTORY_NAME:()=>w6,RULES_CONFIG_DIRECTORY_NAME:()=>wQ});import{createHash as GO}from"node:crypto";import{watch as FO}from"node:fs";import{readdir as DO,readFile as UO}from"node:fs/promises";import{join as RO}from"node:path";function LO($){return GO("sha1").update($).digest("hex")}function jH($){return Boolean($&&typeof $==="object"&&"code"in $)}function ZH($){return jH($)&&$.code==="ENOENT"}function WH($){return jH($)&&($.code==="EACCES"||$.code==="EPERM")}class X2{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,J){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=J?.debounceMs??75,this.emitParseErrors=J?.emitParseErrors??!1;for(let Q of $){if(this.definitionsByType.has(Q.type))throw Error(`Duplicate unified config definition type '${Q.type}'.`);this.definitionsByType.set(Q.type,Q),this.recordsByType.set(Q.type,new Map),this.discoveredDirectoriesByType.set(Q.type,new Set);for(let Z of Q.directories){let W=this.baseTypesByDirectory.get(Z);if(W)W.add(Q.type);else this.baseTypesByDirectory.set(Z,new Set([Q.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let J=this.definitionsByType.get($);if(!J)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(J)})}getSnapshot($){let J=this.recordsByType.get($);return new Map([...J?.entries()??[]].map(([Q,Z])=>[Q,{...Z}]))}getAllSnapshots(){let $=new Map;for(let[J,Q]of this.recordsByType.entries())$.set(J,new Map([...Q.entries()].map(([Z,W])=>[Z,{...W}])));return $}emit($){for(let J of this.listeners)J($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[J,Q]of this.watchersByDirectory.entries()){if($.has(J))continue;Q.close(),this.watchersByDirectory.delete(J)}this.watchedTypesByDirectory=$;for(let J of $.keys()){if(this.watchersByDirectory.has(J))continue;try{let Q=FO(J,()=>{let Z=this.watchedTypesByDirectory.get(J);if(!Z)return;for(let W of Z)this.pendingTypes.add(W);this.scheduleFlush()});this.watchersByDirectory.set(J,Q),Q.on("error",(Z)=>{let W=this.watchedTypesByDirectory.get(J);if(!W)return;for(let j of W)this.emit({kind:"error",type:j,error:Z,filePath:J})})}catch(Q){if(!ZH(Q)&&!WH(Q)){let Z=$.get(J);if(!Z)continue;for(let W of Z)this.emit({kind:"error",type:W,error:Q,filePath:J})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let J of $){let Q=this.definitionsByType.get(J);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:J,discoveredDirectories:Q}=await this.loadDefinition($),Z=this.recordsByType.get($.type)??new Map;for(let[W,j]of Z.entries()){if(J.has(W))continue;this.emit({kind:"remove",type:$.type,id:W,filePath:j.filePath})}for(let[W,j]of J.entries()){let X=Z.get(W);if(X&&X.filePath===j.filePath&&X.fingerprint===j.fingerprint)continue;this.emit({kind:"upsert",record:{type:j.type,id:W,item:j.item,filePath:j.filePath}})}if(this.recordsByType.set($.type,J),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let J=new Map,Q=new Set;for(let Z of $.directories){Q.add(Z);let W=$.discoverFiles?await $.discoverFiles(Z):await this.readDirectoryFileCandidates(Z);for(let j of W){let{fileName:X,filePath:f}=j;if(Q.add(j.directoryPath),$.includeFile&&!$.includeFile(X,f))continue;try{let Y=await UO(f,"utf8"),V={type:$.type,directoryPath:j.directoryPath,fileName:X,filePath:f,content:Y},H=$.parseFile(V),B=$.resolveId(H,V).trim();if(!B)continue;J.set(B,{type:$.type,id:B,item:H,filePath:f,fingerprint:LO(Y)})}catch(Y){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:Y,filePath:f})}}}return{records:J,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[J,Q]of this.baseTypesByDirectory.entries())$.set(J,new Set(Q));for(let[J,Q]of this.discoveredDirectoriesByType.entries())for(let Z of Q){let W=$.get(Z);if(W)W.add(J);else $.set(Z,new Set([J]))}return $}async readDirectoryFileCandidates($){try{return(await DO($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:RO($,Q.name)})).sort((Q,Z)=>Q.fileName.localeCompare(Z.fileName))}catch(J){if(ZH(J)||WH(J))return[];throw J}}}import{readdir as pW,readFile as zO,stat as lW}from"node:fs/promises";import{basename as v1,dirname as _O,extname as MQ,join as C0,resolve as N6}from"node:path";import{AGENTS_RULES_FILE_NAME as XH,RULES_CONFIG_DIRECTORY_NAME as wQ,resolveGlobalAgentsRulesPath as OO,resolveRulesConfigSearchPaths as TO,resolveSkillsConfigSearchPaths as MO,resolveWorkflowsConfigSearchPaths as qO,SKILLS_CONFIG_DIRECTORY_NAME as w6,WORKFLOWS_CONFIG_DIRECTORY_NAME as S6}from"@cline/shared/storage";import PO from"yaml";var TQ="SKILL.md",NO="managed.json",wO=new Set([".md",".markdown",".txt"]);function rW($){return $.trim().toLowerCase()}function q8($){let J=$;return J?.code==="ENOENT"||J?.code==="EACCES"||J?.code==="EPERM"||J?.code==="ELOOP"}function qQ($){return wO.has(MQ($).toLowerCase())}function fH($){let J=[],Q=new Set;for(let Z of $){let W=N6(Z);if(Q.has(W))continue;Q.add(W),J.push(Z)}return J}function SO($){let J=[...$?.directories??b6($?.workspacePath)];if($?.pluginSkillDirectories)J.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)J.push(...RV({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return fH(J)}async function iW($){try{let J=await pW($,{withFileTypes:!0}),Q=[];for(let Z of J){if(!Z.isDirectory())continue;let W=C0($,Z.name),j=C0(W,NO);try{let X=await zO(j,"utf8"),f=JSON.parse(X);if(f&&typeof f==="object")Q.push(W)}catch(X){if(q8(X))continue;if(X?.name==="SyntaxError")continue;throw X}}return Q.sort((Z,W)=>Z.localeCompare(W))}catch(J){if(q8(J))return[];throw J}}function nW($){let J=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(J);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,Z,W]=Q;try{let j=PO.parse(Z);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:W,hadFrontmatter:!0}}catch(j){let X=j instanceof Error?j.message:String(j);return{data:{},body:$,hadFrontmatter:!0,parseError:X}}}function PQ($,J,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${J}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${J}' must be a string.`);let Z=$.trim();if(!Z&&Q)throw Error(`Frontmatter field '${J}' cannot be empty.`);return Z||void 0}function P8($,J){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${J}' must be a boolean.`);return $}function CO($,J){if(v1($.filePath).toLowerCase()!==XH.toLowerCase())return v1($.filePath,MQ($.filePath));if(J&&N6($.filePath)===N6(J,XH))return"Workspace AGENTS.md";if(N6($.filePath)===N6(OO()))return"Global AGENTS.md";return v1($.filePath,MQ($.filePath))}function C6($,J){let{data:Q,body:Z,parseError:W}=nW($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let j=Z.trim();if(!j)throw Error("Missing instructions body in skill file.");let f=PQ(Q.name,"name",!1)??J.trim();if(!f)throw Error("Missing skill name.");return{name:f,description:PQ(Q.description,"description",!1),disabled:P8(Q.disabled,"disabled")??(P8(Q.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Q}}function y6($,J){let{data:Q,body:Z,parseError:W}=nW($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let j=Z.trim();if(!j)throw Error("Missing instructions body in rule file.");let X=PQ(Q.name,"name",!1)??J.trim();if(!X)throw Error("Missing rule name.");return{name:X,disabled:P8(Q.disabled,"disabled")??(P8(Q.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Q}}function E6($,J){let{data:Q,body:Z,parseError:W}=nW($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let j=Z.trim();if(!j)throw Error("Missing instructions body in workflow file.");let X=PQ(Q.name,"name",!1)??J.trim();if(!X)throw Error("Missing workflow name.");return{name:X,disabled:P8(Q.disabled,"disabled")??(P8(Q.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Q}}function b6($){return MO($)}function h6($){return TO($)}function k6($){return qO($)}async function YH($){if(v1($)===".cline"){let J=await iW($);return(await Promise.all(J.map((Z)=>YH(C0(Z,w6))))).flat()}try{let J=await pW($,{withFileTypes:!0}),Q=[];for(let Z of J){if(Z.isFile()&&Z.name===TQ){Q.push({directoryPath:$,fileName:Z.name,filePath:C0($,Z.name)});continue}let W=C0($,Z.name);if(Z.isDirectory()||Z.isSymbolicLink()&&await lW(W).then((X)=>X.isDirectory()).catch((X)=>{if(q8(X))return!1;throw X}))Q.push({directoryPath:W,fileName:TQ,filePath:C0(W,TQ)})}return Q}catch(J){if(q8(J))return[];throw J}}async function NQ($){if(v1($)===".cline"){let J=await iW($);return(await Promise.all(J.map((Z)=>NQ(C0(Z,"rules.md"))))).flat()}try{if((await lW($)).isFile())return[{directoryPath:_O($),fileName:v1($),filePath:$}]}catch(J){if(!q8(J))throw J}try{let Q=(await pW($,{withFileTypes:!0})).filter((W)=>W.isFile()&&qQ(W.name)).map((W)=>({directoryPath:$,fileName:W.name,filePath:C0($,W.name)})),Z=C0($,"AGENTS.md");try{if((await lW(Z)).isFile()){if(!Q.some((X)=>X.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:Z})}}catch{}return Q}catch(J){if(q8(J))return[];throw J}}async function yO($){if(v1($)===".cline"){let J=await iW($);return(await Promise.all(J.map((Z)=>NQ(C0(Z,S6))))).flat()}return NQ($)}function I6($){let J=SO($),Q=$?.workspacePath?C0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?fH([...J,Q]):J,discoverFiles:YH,includeFile:(Z)=>Z===TQ,parseFile:(Z)=>C6(Z.content,v1(Z.directoryPath)),resolveId:(Z)=>rW(Z.name)}}function x6($){let J=$?.directories??h6($?.workspacePath),Q=$?.workspacePath?C0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...J,Q]:J,discoverFiles:NQ,includeFile:(Z,W)=>Z===".clinerules"||qQ(Z)||qQ(W),parseFile:(Z)=>y6(Z.content,CO(Z,$?.workspacePath)),resolveId:(Z)=>rW(Z.name)}}function g6($){let J=$?.directories??k6($?.workspacePath),Q=$?.workspacePath?C0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...J,Q]:J,discoverFiles:yO,includeFile:(Z)=>qQ(Z),parseFile:(Z)=>E6(Z.content,v1(Z.filePath,MQ(Z.filePath))),resolveId:(Z)=>rW(Z.name)}}function VH($){let J=[I6($?.skills),x6($?.rules),g6($?.workflows)];return new X2(J,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as HH}from"@cline/shared";function EO($,J){if($.description?.trim())return HH($.description,".");if(J==="workflow")return;return HH($.instructions,".")}function bO($){return $.disabled!==!0}function BH($,J){return[...$.getSnapshot(J).entries()].map(([Q,Z])=>({id:Q,record:Z})).filter(({record:Q})=>bO(Q.item)).map(({id:Q,record:Z})=>({id:Q,name:Z.item.name,instructions:Z.item.instructions,description:EO(Z.item,J),kind:J})).sort((Q,Z)=>Q.name.localeCompare(Z.name))}function m6($){let J=new Map;for(let Q of[...BH($,"workflow"),...BH($,"skill")])if(!J.has(Q.name))J.set(Q.name,Q);return[...J.values()].sort((Q,Z)=>Q.name.localeCompare(Z.name))}function AH($,J){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let Z=Q[1];if(!Z)return $;let W=Z.length+1,j=$.slice(W),X=m6(J).find((f)=>f.name===Z);return X?`${X.instructions}${j}`:$}var GH={};w(GH,{mergeRulesForSystemPrompt:()=>w8,loadRulesForSystemPromptFromWatcher:()=>aW,listEnabledRulesFromWatcher:()=>KH,isRuleEnabled:()=>SQ,formatRulesForSystemPrompt:()=>N8});function SQ($){return $.disabled!==!0}function N8($){if($.length===0)return"";return`
|
|
193
205
|
|
|
194
206
|
# Rules
|
|
195
207
|
${$.map((Q)=>`## ${Q.name}
|
|
196
208
|
${Q.instructions}`).join(`
|
|
197
209
|
|
|
198
|
-
`)}`}function
|
|
210
|
+
`)}`}function w8($,J){let Q=$?.trim(),Z=J?.trim();if(Q&&Z)return`${Q}
|
|
199
211
|
|
|
200
|
-
${Z}`;return Q||Z||void 0}function
|
|
212
|
+
${Z}`;return Q||Z||void 0}function KH($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(SQ).sort((Q,Z)=>Q.name.localeCompare(Z.name))}function aW($){return N8(KH($))}function CQ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function hO($){if(!$||$.length===0)return;let J=$.map(CQ).filter((Q)=>Q.length>0);return J.length>0?new Set(J):void 0}function kO($,J,Q){if(!Q)return!0;let Z=CQ($),W=CQ(J),j=Z.includes(":")?Z.split(":").at(-1)??Z:Z,X=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(Z)||Q.has(W)||Q.has(j)||Q.has(X)}function v6($,J){let Q=hO(J);return[...$.getSnapshot("skill").entries()].map(([W,j])=>{let X=j.item;return{id:W,name:X.name.trim(),description:X.description?.trim(),disabled:X.disabled===!0,skill:X}}).filter((W)=>kO(W.id,W.name,Q))}function IO($,J){return v6($,J).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,Z)=>Q.localeCompare(Z))}function xO($,J,Q){let Z=CQ(J);if(!Z)return{error:"Missing skill name."};let W=v6($,Q),j=W.find((H)=>H.id===Z);if(j){let{skill:H}=j;if(H.disabled===!0)return{error:`Skill "${H.name}" is configured but disabled.`};return{id:j.id,skill:H}}let X=Z.includes(":")?Z.split(":").at(-1)??Z:Z,f=W.filter(({id:H})=>{if(H===X)return!0;return H.endsWith(`:${X}`)}),Y=f.filter(({skill:H})=>H.disabled!==!0);if(Y.length===1){let{id:H,skill:B}=Y[0];return{id:H,skill:B}}if(Y.length>1)return{error:`Skill "${J}" is ambiguous. Use one of: ${Y.map(({id:H})=>H).join(", ")}`};if(f.length===1){let{skill:H}=f[0];return{error:`Skill "${H.name}" is configured but disabled.`}}if(f.length>1)return{error:`Skill "${J}" is ambiguous, and all matches are disabled: ${f.map(({id:H})=>H).join(", ")}`};let V=IO($,Q);return{error:V.length>0?`Skill "${J}" not found. Available skills: ${V.join(", ")}`:"No skills are currently available."}}function sW($,J=Promise.resolve(),Q){let Z=new Set,W=async(j,X)=>{await J;let f=xO($,j,Q);if("error"in f)return f.error;let{id:Y,skill:V}=f;if(Z.has(Y))return`Skill "${V.name}" is already running.`;Z.add(Y);try{let H=X?.trim(),B=H?`
|
|
201
213
|
<command-args>${H}</command-args>`:"",A=V.description?.trim()?`Description: ${V.description.trim()}
|
|
202
214
|
|
|
203
215
|
`:"";return`<command-name>${V.name}</command-name>${B}
|
|
204
216
|
<command-instructions>
|
|
205
217
|
${A}${V.instructions}
|
|
206
|
-
</command-instructions>`}finally{Z.delete(Y)}};return Object.defineProperty(W,"configuredSkills",{get:()=>
|
|
218
|
+
</command-instructions>`}finally{Z.delete(Y)}};return Object.defineProperty(W,"configuredSkills",{get:()=>v6($,Q).map(({skill:j,...X})=>X),enumerable:!0,configurable:!1}),W}function FH($){let J=$.watcherReady??Promise.resolve();return{name:"cline-user-instructions",manifest:{capabilities:[$.includeRules?"rules":void 0,$.registerSkillsTool?"tools":void 0,$.includeSkills||$.includeWorkflows?"commands":void 0].filter((Z)=>Boolean(Z))},async setup(Z){if(await J,$.includeRules)Z.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>aW($.watcher)});if($.registerSkillsTool)Z.registerTool(v$(sW($.watcher,J,$.allowedSkillNames)));for(let W of m6($.watcher).filter((j)=>j.kind==="skill"&&$.includeSkills||j.kind==="workflow"&&$.includeWorkflows))Z.registerCommand({name:W.name,description:W.description,handler:(j)=>{let X=j.trim();return X?`${W.instructions}
|
|
207
219
|
|
|
208
|
-
${
|
|
209
|
-
${
|
|
220
|
+
${X}`:W.instructions}})}}}class DH{watcher;ready;stopped=!1;constructor($){this.watcher=VH($)}start(){if(!this.ready)this.stopped=!1,this.ready=this.watcher.start();return this.ready}stop(){if(this.stopped)return;this.stopped=!0,this.watcher.stop(),this.ready=void 0}async refreshType($){await this.start(),await this.watcher.refreshType($)}listRecords($){return[...this.watcher.getSnapshot($).entries()].map(([J,Q])=>({type:$,id:J,filePath:Q.filePath,item:Q.item}))}listRuntimeCommands(){return m6(this.watcher)}resolveRuntimeSlashCommand($){return AH($,this.watcher)}hasConfiguredSkills($){return v6(this.watcher,$).some((J)=>!J.disabled)}createSkillsExecutor($){return sW(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return FH({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function _$($){return new DH($)}import{readFile as gO,writeFile as mO}from"node:fs/promises";import LH from"yaml";function vO($){let J=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(J);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,Z,W]=Q,j=LH.parse(Z);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:W,hadFrontmatter:!0}}function RH($,J){return`---
|
|
221
|
+
${LH.stringify($).trimEnd()}
|
|
210
222
|
---
|
|
211
|
-
${J}`}function
|
|
223
|
+
${J}`}function cO($,J){let{data:Q,body:Z,hadFrontmatter:W}=vO($);if(!W&&J)return $;if(J){if(delete Q.disabled,Q.enabled===!1)delete Q.enabled;if(Object.keys(Q).length===0)return Z;return RH(Q,Z)}return Q.disabled=!0,RH(Q,Z)}async function zH({filePath:$,enabled:J}){let Q=await gO($,"utf8"),Z=cO(Q,J);return await mO($,Z),{filePath:$,enabled:J,disabled:!J}}var mH={};w(mH,{updateMcpServerOAuthState:()=>H2,setMcpServerDisabled:()=>Y2,resolvePluginMcpServerRegistrations:()=>IQ,resolveMcpServerRegistrations:()=>A1,resolveDefaultMcpSettingsPath:()=>K0,registerMcpServersFromSettingsFile:()=>B2,normalizePluginMcpServerRegistration:()=>Q7,loadMcpSettingsFile:()=>f2,listMcpServerOAuthStatuses:()=>u6,hasMcpSettingsFile:()=>c1,getMcpServerOAuthState:()=>V2,createMcpTools:()=>E8,createDisabledMcpToolPolicy:()=>d6,createDisabledMcpToolPolicies:()=>gQ,createDefaultMcpServerClientFactory:()=>C8,authorizeMcpServerOAuth:()=>hQ,InMemoryMcpManager:()=>A2});import{spawn as GT}from"node:child_process";import{StringDecoder as bH}from"node:string_decoder";import{UnauthorizedError as SH}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as FT}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as WT}from"node:crypto";import{UnauthorizedError as jT}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as XT}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as fT}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as YT}from"@modelcontextprotocol/sdk/client/streamableHttp.js";yQ();var VT="/mcp/oauth/callback",HT=[1456,1457,1458],BT=300000;function AT($){if($ instanceof Error){let J=$.message.trim();if(J.length>0)return J}return String($)}function KT($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function bQ($){let J={};try{J=V2($.serverName,{filePath:$.settingsPath})??{}}catch{J={}}let Q,Z,W=async(X)=>{let f=S8(X(J))??{};try{J=H2($.serverName,()=>f,{filePath:$.settingsPath})}catch{J=f}};return{provider:{get redirectUrl(){return J.redirectUrl??$.redirectUrl},get clientMetadata(){return KT(J.redirectUrl??$.redirectUrl)},state:()=>{return Z=WT(),Z},clientInformation:()=>J.clientInformation,saveClientInformation:async(X)=>{await W((f)=>({...f,clientInformation:X,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>J.tokens,saveTokens:async(X)=>{await W((f)=>({...f,tokens:X,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:Date.now()}))},redirectToAuthorization:async(X)=>{Q=X.toString(),await $.onAuthorizationUrl?.(Q)},saveCodeVerifier:async(X)=>{await W((f)=>({...f,codeVerifier:X,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!J.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return J.codeVerifier},invalidateCredentials:async(X)=>{await W((f)=>{if(X==="all")return{lastError:f.lastError,redirectUrl:f.redirectUrl};return{...f,...X==="client"?{clientInformation:void 0}:{},...X==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...X==="verifier"?{codeVerifier:void 0}:{},...X==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(X)=>{await W((f)=>({...f,discoveryState:X}))},discoveryState:()=>J.discoveryState},getLastAuthorizationUrl:()=>Q,getLastOAuthState:()=>Z,resetInteractiveState:async()=>{await W((X)=>({...X,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(X)=>{await W((f)=>({...f,lastError:X}))},clearError:async()=>{await W((X)=>({...X,lastError:void 0}))}}}function EQ($){let J=$.registration.transport;if(J.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let Q=J.headers?{headers:J.headers}:void 0;if(J.type==="sse")return new fT(new URL(J.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch});return new YT(new URL(J.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch})}function wH($){return new XT({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function hQ($){let J=$.serverName.trim();if(!J)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Q}=await Promise.resolve().then(() => (yQ(),NH)),Z=Q({filePath:$.filePath}).find((Y)=>Y.name===J);if(!Z)throw Error(`MCP server "${J}" is not configured.`);if(Z.disabled)throw Error(`MCP server "${J}" is disabled. Enable it before running OAuth.`);if(Z.transport.type==="stdio")throw Error(`MCP server "${J}" uses stdio transport and does not support OAuth browser flow.`);let W=await J1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:HT,callbackPath:$.callbackPath??VT,timeoutMs:$.timeoutMs??BT,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!W.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let j=bQ({settingsPath:$.filePath,serverName:J,redirectUrl:W.callbackUrl,onAuthorizationUrl:async(Y)=>{await $.openUrl?.(Y)}});await j.resetInteractiveState();let X=wH($),f;try{let Y=EQ({registration:Z,oauthProvider:j.provider,fetch:$.fetch});try{return await X.connect(Y),await X.listTools(),await j.clearError(),{serverName:J,authorized:!0,message:`MCP server "${J}" is already authorized.`}}catch(V){if(!(V instanceof jT))throw V;if(!j.getLastAuthorizationUrl())throw Error(`MCP server "${J}" did not provide an authorization URL.`);let B=await W.waitForCallback();if(!B)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(B.error)throw Error(`OAuth authorization failed: ${B.error}`);if(!B.code)throw Error("OAuth callback did not include an authorization code.");let A=j.getLastOAuthState();if(!A)throw Error(`MCP server "${J}" did not start an OAuth stateful authorization flow.`);if(B.state!==A)throw Error("OAuth authorization failed: state mismatch.");await Y.finishAuth(B.code),f=wH($);let K=EQ({registration:Z,oauthProvider:j.provider,fetch:$.fetch});return await f.connect(K),await f.listTools(),await j.clearError(),{serverName:J,authorized:!0,message:`MCP server "${J}" OAuth authorization completed.`}}}catch(Y){let V=AT(Y);throw await j.markError(V),Error(V)}finally{await X.close().catch(()=>{return}),await f?.close().catch(()=>{return}),W.close()}}var DT="2024-11-05",UT=5000,RT=1500,CH="http://127.0.0.1:1456/mcp/oauth/callback";function kQ($){return $ instanceof Error?$.message:String($)}function yH($){let J=Buffer.from(JSON.stringify($),"utf8"),Q=Buffer.from(`Content-Length: ${J.byteLength}\r
|
|
212
224
|
\r
|
|
213
|
-
`,"utf8");return Buffer.concat([Q,J])}function
|
|
214
|
-
`,"utf8")}class
|
|
225
|
+
`,"utf8");return Buffer.concat([Q,J])}function EH($){return Buffer.from(`${JSON.stringify($)}
|
|
226
|
+
`,"utf8")}class $7{buffer="";decoder=new bH("utf8");push($){this.buffer+=this.decoder.write($);let J=[];while(!0){let Q=this.buffer.indexOf(`\r
|
|
215
227
|
\r
|
|
216
|
-
`);if(Q<0)break;let W=this.buffer.slice(0,Q).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!W)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let j=Number.parseInt(W[1],10),
|
|
217
|
-
`);if(Q<0)break;let Z=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),Z.length>0)J.push(Z)}return J}}class MH{registration;process;nextRequestId=1;pending=new Map;framedParser=new o7;newlineParser=new t7;stderrBuffer="";connected=!1;protocolMode="newline";constructor($){this.registration=$}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=["newline","framed"],J;for(let Q of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Q);try{await this.request("initialize",{protocolVersion:QT,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},WT),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Q;return}catch(Z){J=Z instanceof Error?Z:Error(String(Z))}}throw J??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((J)=>typeof J?.name==="string"&&typeof J.inputSchema==="object"&&J.inputSchema!==null).map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let J=this.registration.transport;if(J.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${J.type}`);this.framedParser=new o7,this.newlineParser=new t7,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},Z=$T(J.command,J.args??[],{cwd:J.cwd,env:{...process.env,...J.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=Z,Z.stdout.on("data",(W)=>this.handleStdout(W)),Z.stderr.on("data",(W)=>{if(this.process!==Z)return;if(this.stderrBuffer+=W.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),Z.once("error",(W)=>{if(this.process!==Z)return;this.failAllPending(Error(`MCP process error: ${S9(W)}`))}),Z.once("exit",(W,j)=>{if(this.process!==Z)return;this.connected=!1,this.process=void 0;let f=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${W??"null"}, signal=${j??"null"}).${f}`))})}handleStdout($){try{let J=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of J){let Z=JSON.parse(Q);if(typeof Z.id!=="number")continue;let W=this.pending.get(Z.id);if(!W)continue;if(this.pending.delete(Z.id),clearTimeout(W.timeout),Z.error){let j=Z.error.message||`MCP request failed with code ${Z.error.code??"unknown"}`;W.reject(Error(j));continue}W.resolve(Z.result)}}catch(J){this.handleProtocolFailure(J)}}handleProtocolFailure($){let J=this.process;if(!J)return;this.connected=!1,this.process=void 0;let Q=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${S9($)}.${Q}`)),J.kill()}async request($,J,Q=ZT){let Z=this.process;if(!Z?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let W=this.nextRequestId++,j={jsonrpc:"2.0",id:W,method:$,...J?{params:J}:{}},f=new Promise((X,Y)=>{let V=setTimeout(()=>{this.pending.delete(W),Y(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Q);this.pending.set(W,{resolve:X,reject:Y,timeout:V})});try{Z.stdin.write(this.protocolMode==="framed"?_H(j):OH(j))}catch(X){let Y=this.pending.get(W);if(Y)clearTimeout(Y.timeout),this.pending.delete(W);throw X}return f}notify($,J){let Q=this.process;if(!Q?.stdin.writable)return;let Z={jsonrpc:"2.0",method:$,...J?{params:J}:{}};Q.stdin.write(this.protocolMode==="framed"?_H(Z):OH(Z))}failAllPending($){for(let[J,Q]of this.pending)clearTimeout(Q.timeout),this.pending.delete(J),Q.reject($)}}class qH{registration;options;client;authContext;constructor($,J){this.registration=$;this.options=J}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=N9({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??LH});this.authContext=$;try{let J=new JT({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Q=P9({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await J.connect(Q),await $.clearError(),this.client=J}catch(J){let Q=J instanceof zH?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):S9(J);throw await $.markError(Q),Error(Q)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((Q)=>({name:Q.name,description:Q.description,inputSchema:Q.inputSchema&&typeof Q.inputSchema==="object"&&!Array.isArray(Q.inputSchema)?Q.inputSchema:{}}))}catch(J){return await this.handleOperationError(J)}}async callTool($){let J=await this.ensureConnectedClient();try{return await J.callTool({name:$.name,arguments:$.arguments??{}})}catch(Q){return await this.handleOperationError(Q)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let J=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${J} Run authorizeMcpServerOAuth for this server.`;return`${J} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let J=this.authContext??N9({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??LH}),Q=$ instanceof zH?this.formatUnauthorizedMessage(J.getLastAuthorizationUrl()):S9($);throw await J.markError(Q),Error(Q)}}function S8($={}){return(J)=>J.transport.type==="stdio"?new MH(J):new qH(J,$)}q9();function l0(){return Date.now()}function jT($){return $.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema}))}class A2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let J=this.servers.get($.name);if(!J){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:l0()});return}let Q=JSON.stringify(J.registration.transport)!==JSON.stringify($.transport);if(J.registration={...$},J.updatedAt=l0(),Q)await this.disconnectState(J),J.client=void 0,J.toolCache=void 0,J.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let J=this.requireServer($);await this.disconnectState(J),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let J=this.requireServer($);await this.connectState(J)})}async disconnectServer($){await this.runExclusive($,async()=>{let J=this.requireServer($);await this.disconnectState(J)})}async setServerDisabled($,J){await this.runExclusive($,async()=>{let Q=this.requireServer($);if(Q.registration={...Q.registration,disabled:J},Q.updatedAt=l0(),J)await this.disconnectState(Q)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,J)=>$.name.localeCompare(J.name))}async listTools($){let J=this.requireServer($),Q=J.toolCacheUpdatedAt??0;if(J.toolCache&&l0()-Q<=this.toolsCacheTtlMs)return J.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let J=this.requireServer($),Z=await(await this.ensureConnectedClient(J)).listTools(),W=jT(Z);return J.toolCache=W,J.toolCacheUpdatedAt=l0(),J.updatedAt=l0(),W})}async callTool($){return this.runExclusive($.serverName,async()=>{let J=this.requireServer($.serverName),Q=await this.ensureConnectedClient(J);return J.updatedAt=l0(),Q.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let J of $)await this.unregisterServer(J)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=l0();try{let J=$.client??await this.clientFactory($.registration);await J.connect(),$.client=J,$.status="connected",$.lastError=void 0,$.updatedAt=l0()}catch(J){throw $.status="disconnected",$.lastError=J instanceof Error?J.message:String(J),$.updatedAt=l0(),J}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=l0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=l0()}}requireServer($){let J=this.servers.get($);if(!J)throw Error(`Unknown MCP server: ${$}`);return J}async runExclusive($,J){let Q=this.operationLocks.get($)??Promise.resolve(),Z,W=new Promise((f)=>{Z=f}),j=Q.catch(()=>{return}).then(()=>W);this.operationLocks.set($,j),await Q.catch(()=>{return});try{return await J()}finally{if(Z?.(),this.operationLocks.get($)===j)this.operationLocks.delete($)}}}function C8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function PH($){return C8($)&&Object.values($).every((J)=>typeof J==="string")}function fT($){return Array.isArray($)&&$.every((J)=>typeof J==="string")}function XT($){if(!C8($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function YT($){let J=$.env?Object.entries($.env):[];if(J.length===0)return{ok:!0};let Q={};for(let[Z,W]of J){if(typeof W==="string"){Q[Z]=W;continue}let j=W.fromEnv?.trim()||Z,f=process.env[j];if(typeof f==="string"&&f.length>0){Q[Z]=f;continue}if(typeof W.value==="string"){Q[Z]=W.value;continue}if(W.required===!0)return{ok:!1,reason:`required environment variable "${j}" is not set`}}return{ok:!0,env:Object.keys(Q).length>0?Q:void 0}}function e7($){if(!C8($))return{name:"",loadError:"invalid MCP server registration"};let J=typeof $.name==="string"?$.name.trim():"";if(!J)return{name:J,loadError:"empty MCP server name"};let Q=$.env,Z=Q===void 0?void 0:Q;if(Z!==void 0){if(!C8(Z))return{name:J,loadError:"invalid env"};for(let[Y,V]of Object.entries(Z))if(typeof V!=="string"&&!XT(V))return{name:J,loadError:`invalid env "${Y}"`}}let W=$.transport;if(!C8(W))return{name:J,loadError:"invalid MCP transport"};let j=W.type;if(j!=="stdio"&&j!=="sse"&&j!=="streamableHttp")return{name:J,loadError:"invalid MCP transport type"};if(j!=="stdio"&&Z!==void 0)return{name:J,loadError:"top-level env is only supported for stdio MCP transports"};let f=C8($.metadata)?$.metadata:void 0;if(j==="stdio"){let Y=W.command;if(typeof Y!=="string"||!Y.trim())return{name:J,loadError:"stdio MCP transport requires command"};let V=W.args;if(V!==void 0&&!fT(V))return{name:J,loadError:"stdio MCP transport args must be strings"};let H=W.cwd;if(H!==void 0&&typeof H!=="string")return{name:J,loadError:"stdio MCP transport cwd must be a string"};let B=W.env;if(B!==void 0&&!PH(B))return{name:J,loadError:"stdio MCP transport env must be strings"};let A=YT({name:J,transport:{type:"stdio",command:Y,args:V,cwd:H,env:B},env:Z,metadata:f});if(!A.ok)return{name:J,loadError:A.reason};let K=B||A.env?{...B??{},...A.env??{}}:void 0;return{name:J,registration:{name:J,transport:{type:"stdio",command:Y,args:V,cwd:H,env:K},metadata:f}}}if(typeof W.url!=="string"||!W.url.trim())return{name:J,loadError:`${j} MCP transport requires url`};let X=W.headers;if(X!==void 0&&!PH(X))return{name:J,loadError:`${j} MCP transport headers must be strings`};return{name:J,registration:{name:J,transport:j==="sse"?{type:"sse",url:W.url,headers:X}:{type:"streamableHttp",url:W.url,headers:X},metadata:f}}}function C9($){let J=new Map;return $.map(({server:Q,owner:Z,ownerLabel:W})=>{let j=e7(Q);if(!j.registration)return{owner:Z,name:j.name,loadError:j.loadError??"invalid MCP server registration"};let f=J.get(j.registration.name);if(J.has(j.registration.name)){let X=f?` already registered by ${f}`:"";return{owner:Z,name:j.registration.name,loadError:`duplicate MCP server name "${j.registration.name}"${X}`}}return J.set(j.registration.name,W),{owner:Z,name:j.registration.name,registration:j.registration}})}import{createHash as VT}from"node:crypto";var NH=128,HT=/[^a-zA-Z0-9_-]+/g,wH=8,BT=1,AT="mcp_tool";function KT($){return VT("sha1").update($).digest("hex").slice(0,wH)}function GT($){return $.replace(HT,"_")}var y9=({serverName:$,toolName:J})=>{let Q=`${$}__${J}`,Z=GT(Q);if(Z===Q&&Q.length<=NH)return Q;let W=KT(Q),j=NH-BT-wH;return`${Z.slice(0,j)||AT}_${W}`};function m6($){return{[($.nameTransform??y9)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function E9($){let J={};for(let Q of $.toolNames)Object.assign(J,m6({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return J}import{createTool as FT}from"@cline/shared";function DT($,J){let Q=J.description?.trim();if(Q)return Q;return`Execute MCP tool "${J.name}" from server "${$}".`}async function y8($){let J=await $.provider.listTools($.serverName),Q=$.nameTransform??y9;return J.map((Z)=>{let W=Q({serverName:$.serverName,toolName:Z.name});return FT({name:W,description:DT($.serverName,Z),inputSchema:Z.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(j,f)=>$.provider.callTool({serverName:$.serverName,toolName:Z.name,arguments:j&&typeof j==="object"&&!Array.isArray(j)?j:void 0,context:f})})})}W1();var EH={};w(EH,{listPluginToolsWithDiagnostics:()=>b9,listPluginTools:()=>v6});import{stat as UT}from"node:fs/promises";import{isAbsolute as RT,relative as zT,resolve as CH}from"node:path";W1();function LT($,J){let Q=zT(CH($),CH(J));return Q===""||!Q.startsWith("..")&&!RT(Q)}var _T=32,E8=new Map;function OT($,J){if(!E8.has($)&&E8.size>=_T){let Q=E8.keys().next().value;if(Q)E8.delete(Q)}E8.set($,J)}async function TT($){let J=await Promise.all($.pluginPaths.map(async(Q)=>{try{let Z=await UT(Q);return`${Q}:${Z.mtimeMs}:${Z.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:J})}function yH($,J){return $.map((Q)=>({...Q,enabled:!J.has(Q.name)}))}function MT($){return $.sort((J,Q)=>{let Z=J.name.localeCompare(Q.name);if(Z!==0)return Z;return J.path.localeCompare(Q.path)})}async function qT($,J){if(!$.setup)return{tools:[]};let Q=[],Z={registerTool:(W)=>Q.push(W),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(W)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(Z,{workspaceInfo:J}),{tools:Q}}async function b9($){let J=e$({workspacePath:$.workspacePath,cwd:$.cwd}),Q=B1($.disabledToolNames);if(J.length===0)return{tools:[],failures:[],warnings:[]};let Z=await TT({pluginPaths:J,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),W=E8.get(Z);if(W)return{tools:yH(W.tools,Q),failures:W.failures,warnings:W.warnings};let j=[],f=[],X=[],Y;try{Y=await B8({pluginPaths:J,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),f=[...Y.failures],X=[...Y.warnings];for(let H of Y.extensions??[]){let B=H.__clinePluginPath;if(!B)continue;let A=LT($.workspacePath,B)?"workspace-plugin":"global-plugin",K;try{K=await qT(H,{rootPath:$.workspacePath})}catch(G){f.push({pluginPath:B,pluginName:H.name,phase:"setup",message:G instanceof Error?G.message:String(G),stack:G instanceof Error?G.stack:void 0});continue}for(let G of K.tools)j.push({name:G.name,pluginName:H.name,path:B,source:A,description:G.description?.trim()||void 0})}}catch(H){f=J.map((B)=>({pluginPath:B,phase:"load",message:H instanceof Error?H.message:String(H),stack:H instanceof Error?H.stack:void 0}))}finally{await Y?.shutdown().catch(()=>{})}let V=MT(j);return OT(Z,{tools:V,failures:f,warnings:X}),{tools:yH(V,Q),failures:f,warnings:X}}async function v6($){return(await b9($)).tools}function k9($,J){if(!J)return"global";let Q=NT(J,$);return!Q.startsWith("..")&&!PT(Q)?"workspace":"global"}function c6($){return[...$].sort((J,Q)=>{let Z=(W)=>{switch(W){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(J.source!==Q.source)return Z(J.source)-Z(Q.source);return J.name.localeCompare(Q.name)})}function kH($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}async function hH($,J){if($.userInstructionService)return await J($.userInstructionService);let Q=kH($);if(!Q)return await J(void 0);let Z=$.cwd?.trim()||Q,W=_$({skills:{workspacePath:Q,includePluginSkills:!0,cwd:Z},rules:{workspacePath:Q},workflows:{workspacePath:Q}});try{return await W.start(),await J(W)}finally{W.stop()}}function wT($,J){if(!$)return;let Q=$.listRecords("skill");if(J.id){let Z=Q.find((W)=>W.id===J.id);if(Z)return Z}for(let Z of Q)if(Z.filePath===J.path||Z.item.name===J.name||Z.id===J.name)return Z;return}class O${async list($={}){return await hH($,async(J)=>{let Q=kH($),Z=[],W=[],j=[],f=[],X=[];if(J){for(let V of J.listRecords("workflow")){let H=V.item;Z.push({id:V.id,name:H.name,path:V.filePath,enabled:H.disabled!==!0,kind:"workflow",source:k9(V.filePath,Q),description:H.instructions,toggleable:!1})}for(let V of J.listRecords("rule")){let H=V.item;W.push({id:V.id,name:H.name,path:V.filePath,enabled:H.disabled!==!0,kind:"rule",source:k9(V.filePath,Q),description:H.instructions,toggleable:!1})}for(let V of J.listRecords("skill")){let H=V.item;j.push({id:V.id,name:H.name,path:V.filePath,enabled:H.disabled!==!0,kind:"skill",source:k9(V.filePath,Q),description:H.description,toggleable:!0})}}if(Q)try{for(let V of await v6({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))f.push({id:`${V.pluginName}:${V.name}:${V.path}`,name:V.name,path:V.path,enabled:V.enabled,kind:"tool",source:V.source,description:V.description,toggleable:!0})}catch{}let Y=B0();if(c1({filePath:Y}))try{for(let V of A1({filePath:Y}))X.push({id:V.name,name:V.name,path:Y,enabled:V.disabled!==!0,kind:"mcp",source:k9(Y,Q),description:V.transport.type,toggleable:!0})}catch{}return{workflows:c6(Z.filter((V)=>h9(V.path))),rules:c6(W.filter((V)=>h9(V.path))),skills:c6(j.filter((V)=>h9(V.path))),tools:c6(f),mcp:c6(X.filter((V)=>h9(V.path)))}})}async toggle($){if($.type==="skills")return await hH($,async(J)=>{let Q=wT(J,$),Z=Q?.filePath;if(!Z)throw Error(`Unable to resolve skill setting '${$.id??$.name??bH($.path??"")}'.`);let W=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,j=$.enabled??(W!==void 0?!W:void 0);if(j===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??bH($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await HH({filePath:Z,enabled:j}),await J?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:J}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)z5($.name);else kX($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let J=$.name?.trim()||$.id?.trim();if(!J)throw Error("MCP server settings toggle requires a server name.");let Q=$.path?.trim()||B0(),Z=$.enabled;if(Z===void 0){let W=A1({filePath:Q}).find((j)=>j.name===J);if(!W)throw Error(`Unknown MCP server: ${J}`);Z=W.disabled===!0}return Y2({filePath:Q,name:J,disabled:!Z}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function K2(){return new O$}function xH($){return{async list(J){let Q=$;if(Q.listSettings)return await Q.listSettings(J);return await K2().list(J)},async toggle(J){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(J);return await K2().toggle(J)}}}function gH($){function J(){let Q=$.pendingPrompts;if(!Q)throw Error("Pending prompt service is not available.");return Q}return{list(Q){return J().list(Q)},update(Q){return J().update(Q)},delete(Q){return J().delete(Q)}}}var mH={};w(mH,{splitCoreSessionConfig:()=>u6,isSessionNotFoundError:()=>d1,SessionNotFoundError:()=>u1,SESSION_NOT_FOUND_ERROR_CODE:()=>G2});var G2="session_not_found";class u1 extends Error{sessionId;code="session_not_found";constructor($,J){super(J??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function d1($){return $ instanceof u1||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function u6($){let{hooks:J,logger:Q,telemetry:Z,extensionContext:W,extraTools:j,extensions:f,onTeamEvent:X,onConsecutiveMistakeLimitReached:Y,checkpoint:V,compaction:H,...B}=$,A={};if(J)A.hooks=J;if(Q)A.logger=Q;if(Z)A.telemetry=Z;if(W)A.extensionContext=W;if(j)A.extraTools=j;if(f)A.extensions=f;if(X)A.onTeamEvent=X;if(Y)A.onConsecutiveMistakeLimitReached=Y;if(V?.createCheckpoint)A.checkpoint=V;if(H?.compact)A.compaction=H;let K=Object.keys(A).length>0?A:void 0;return{config:{...B,...V?{checkpoint:{enabled:V.enabled}}:{},...H?{compaction:{enabled:H.enabled,strategy:H.strategy,thresholdRatio:H.thresholdRatio,reserveTokens:H.reserveTokens,preserveRecentTokens:H.preserveRecentTokens,maxInputTokens:H.maxInputTokens,summarizer:H.summarizer}}:{}},...K?{localRuntime:K}:{}}}function vH($){let J=$.config;return"providerId"in J?{...$,config:{...J,...ST($.localRuntime)},localRuntime:$.localRuntime}:$}function $W($,J={}){let Q=u6($.config),Z=L0(J.defaultCapabilities,$.capabilities),W=CT(Q.localRuntime,$.localRuntime),j=J.withExtensionContext?.(W?.extensionContext);if(j)W={...W??{},extensionContext:j};return{...$,...Q,...W?{localRuntime:W}:{},...Z?{capabilities:Z}:{}}}function ST($){if(!$)return{};let{modelCatalogDefaults:J,userInstructionService:Q,configExtensions:Z,onTeamRestored:W,...j}=$;return j}function CT(...$){let J={};for(let Q of $)if(Q)Object.assign(J,Q);return Object.keys(J).length>0?J:void 0}O0();function cH($){let J=$.input.config.telemetry??$.telemetry;if(!J)return;J.capture({event:x.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??U0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function d6($){return!!$&&typeof $==="object"&&!Array.isArray($)}function JW($){let J=$?.trim();return J?J:void 0}function yT($,J){let Q=$?.trim();if(!Q)return J;let Z=Date.parse(Q);if(!Number.isFinite(Z))return J;return new Date(Z).toISOString()}function uH($,J){return new Date(new Date($).getTime()+Math.max(0,Math.floor(J))*1000).toISOString()}function dH($,J){return new Date(new Date($).getTime()-Math.max(0,Math.floor(J))*1000).toISOString()}function ET($,J){if(!$)return J;return new Date($).getTime()>=new Date(J).getTime()?$:J}function bT($,J){let Q=$.eventId.trim(),Z=$.eventType.trim(),W=$.source.trim(),j=JW($.subject),f=JW($.dedupeKey)??`${Z}:${W}:${j??Q}`;return{eventId:Q,eventType:Z,source:W,subject:j,occurredAt:yT($.occurredAt,J),workspaceRoot:JW($.workspaceRoot),payload:d6($.payload)?$.payload:void 0,attributes:d6($.attributes)?$.attributes:void 0,dedupeKey:f}}function QW($,J){if(!J)return;let Q=J.split("."),Z=$;for(let W of Q){if(!d6(Z))return;Z=Z[W]}return Z}function hT($,J){if($.attributes&&Object.hasOwn($.attributes,J))return $.attributes[J];if($.payload&&Object.hasOwn($.payload,J))return $.payload[J];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},Z=QW(Q,J);if(Z!==void 0)return Z;if($.attributes){let W=QW($.attributes,J);if(W!==void 0)return W}if($.payload)return QW($.payload,J);return}function I9($,J){if(Array.isArray(J))return J.some((Q)=>I9($,Q));if(Array.isArray($))return $.some((Q)=>I9(Q,J));if(d6(J)){if(!d6($))return!1;return Object.entries(J).every(([Q,Z])=>I9($[Q],Z))}return Object.is($,J)}function kT($,J){if(!J||Object.keys(J).length===0)return!0;return Object.entries(J).every(([Q,Z])=>I9(hT($,Q),Z))}class ZW{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let J=new Date(this.nowFn()).toISOString(),Q=bT($,J),Z=this.store.insertEventLog(Q,{receivedAtIso:J});if(!Z.created)return this.logger?.debug("cron.event.duplicate",{eventId:Z.record.eventId,eventType:Z.record.eventType,source:Z.record.source}),{event:Z.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:Z.record.dedupeKey}]};try{let W=this.store.listEventSpecsForType(Q.eventType),j=[],f=[],X=[];for(let H of W){if(!kT(Q,H.filters)){j.push({specId:H.specId,externalId:H.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}f.push(H);let B=this.materializeForSpec(H,Q,Z.record.receivedAt);if(B.run)X.push(B.run);else j.push({specId:H.specId,externalId:H.externalId,reason:B.reason,dedupeKey:Q.dedupeKey})}let Y=f.length===0?"unmatched":X.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(Z.record.eventId,{status:Y,matchedSpecCount:f.length,queuedRunCount:X.length,suppressedCount:j.filter((H)=>H.reason!=="filter_mismatch").length});let V=this.store.getEventLog(Z.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:Z.record.eventId,eventType:Z.record.eventType,status:Y,matchedSpecCount:f.length,queuedRunCount:X.length}),{event:V??Z.record,duplicate:!1,matchedSpecs:f,queuedRuns:X,suppressions:j}}catch(W){if(this.store.updateEventLogProcessing(Z.record.eventId,{status:"failed",error:W instanceof Error?W.message:String(W)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:Z.record.eventId,eventType:Z.record.eventType,error:W});throw W}}materializeForSpec($,J,Q){let Z=J.dedupeKey??J.eventId,W=$.debounceSeconds??0;if(W>0){let Y=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:Z});if(Y){let V=ET(Y.scheduledFor,uH(Q,W)),H=this.store.updateQueuedEventRunForDebounce({runId:Y.runId,triggerEventId:J.eventId,scheduledFor:V});if(H)return{run:H,reason:"dedupe_window"}}}let j=$.dedupeWindowSeconds??0;if(j>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:Z,sinceIso:dH(Q,j)}))return{reason:"dedupe_window"};let f=$.cooldownSeconds??0;if(f>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:dH(Q,f)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:J.eventId,scheduledFor:W>0?uH(Q,W):Q}),reason:"dedupe_window"}}}class l6{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},J=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let Z of J)if(this.materializeOneOff(Z))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Z of Q)try{if(this.materializeSchedule(Z))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as uT}from"node:path";import{buildClineSystemPrompt as dT}from"@cline/shared";import{nowIso as lH}from"@cline/shared/db";import{mkdirSync as IT,writeFileSync as xT}from"node:fs";import{join as gT}from"node:path";import{resolveCronReportsDir as mT}from"@cline/shared/storage";function T$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function F2($,J){if(J===void 0||J===null)return;return`${$}: ${T$(J)}`}function vT($,J,Q){let Z=[`runId: ${T$($.runId)}`,`specId: ${T$(J.specId)}`,`externalId: ${T$(J.externalId)}`,`title: ${T$(J.title)}`,`triggerKind: ${T$($.triggerKind)}`,`status: ${T$($.status)}`,`sourcePath: ${T$(J.sourcePath)}`],W=[F2("sessionId",$.sessionId),F2("startedAt",$.startedAt),F2("completedAt",$.completedAt),F2("triggerEventId",$.triggerEventId),F2("triggerEventType",Q?.eventType),F2("triggerEventSource",Q?.source),F2("triggerEventSubject",Q?.subject)];for(let j of W)if(j)Z.push(j);return`---
|
|
228
|
+
`);if(Q<0)break;let W=this.buffer.slice(0,Q).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!W)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let j=Number.parseInt(W[1],10),X=Q+4,f=X+j;if(this.buffer.length<f)break;J.push(this.buffer.slice(X,f)),this.buffer=this.buffer.slice(f)}return J}}class J7{buffer="";decoder=new bH("utf8");push($){this.buffer+=this.decoder.write($);let J=[];while(!0){let Q=this.buffer.indexOf(`
|
|
229
|
+
`);if(Q<0)break;let Z=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),Z.length>0)J.push(Z)}return J}}class hH{registration;process;nextRequestId=1;pending=new Map;framedParser=new $7;newlineParser=new J7;stderrBuffer="";connected=!1;protocolMode="newline";constructor($){this.registration=$}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=["newline","framed"],J;for(let Q of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Q);try{await this.request("initialize",{protocolVersion:DT,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},RT),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Q;return}catch(Z){J=Z instanceof Error?Z:Error(String(Z))}}throw J??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((J)=>typeof J?.name==="string"&&typeof J.inputSchema==="object"&&J.inputSchema!==null).map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let J=this.registration.transport;if(J.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${J.type}`);this.framedParser=new $7,this.newlineParser=new J7,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},Z=GT(J.command,J.args??[],{cwd:J.cwd,env:{...process.env,...J.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=Z,Z.stdout.on("data",(W)=>this.handleStdout(W)),Z.stderr.on("data",(W)=>{if(this.process!==Z)return;if(this.stderrBuffer+=W.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),Z.once("error",(W)=>{if(this.process!==Z)return;this.failAllPending(Error(`MCP process error: ${kQ(W)}`))}),Z.once("exit",(W,j)=>{if(this.process!==Z)return;this.connected=!1,this.process=void 0;let X=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${W??"null"}, signal=${j??"null"}).${X}`))})}handleStdout($){try{let J=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of J){let Z=JSON.parse(Q);if(typeof Z.id!=="number")continue;let W=this.pending.get(Z.id);if(!W)continue;if(this.pending.delete(Z.id),clearTimeout(W.timeout),Z.error){let j=Z.error.message||`MCP request failed with code ${Z.error.code??"unknown"}`;W.reject(Error(j));continue}W.resolve(Z.result)}}catch(J){this.handleProtocolFailure(J)}}handleProtocolFailure($){let J=this.process;if(!J)return;this.connected=!1,this.process=void 0;let Q=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${kQ($)}.${Q}`)),J.kill()}async request($,J,Q=UT){let Z=this.process;if(!Z?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let W=this.nextRequestId++,j={jsonrpc:"2.0",id:W,method:$,...J?{params:J}:{}},X=new Promise((f,Y)=>{let V=setTimeout(()=>{this.pending.delete(W),Y(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Q);this.pending.set(W,{resolve:f,reject:Y,timeout:V})});try{Z.stdin.write(this.protocolMode==="framed"?yH(j):EH(j))}catch(f){let Y=this.pending.get(W);if(Y)clearTimeout(Y.timeout),this.pending.delete(W);throw f}return X}notify($,J){let Q=this.process;if(!Q?.stdin.writable)return;let Z={jsonrpc:"2.0",method:$,...J?{params:J}:{}};Q.stdin.write(this.protocolMode==="framed"?yH(Z):EH(Z))}failAllPending($){for(let[J,Q]of this.pending)clearTimeout(Q.timeout),this.pending.delete(J),Q.reject($)}}class kH{registration;options;client;authContext;constructor($,J){this.registration=$;this.options=J}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=bQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??CH});this.authContext=$;try{let J=new FT({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Q=EQ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await J.connect(Q),await $.clearError(),this.client=J}catch(J){let Q=J instanceof SH?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):kQ(J);throw await $.markError(Q),Error(Q)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((Q)=>({name:Q.name,description:Q.description,inputSchema:Q.inputSchema&&typeof Q.inputSchema==="object"&&!Array.isArray(Q.inputSchema)?Q.inputSchema:{}}))}catch(J){return await this.handleOperationError(J)}}async callTool($){let J=await this.ensureConnectedClient();try{return await J.callTool({name:$.name,arguments:$.arguments??{}})}catch(Q){return await this.handleOperationError(Q)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let J=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${J} Run authorizeMcpServerOAuth for this server.`;return`${J} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let J=this.authContext??bQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??CH}),Q=$ instanceof SH?this.formatUnauthorizedMessage(J.getLastAuthorizationUrl()):kQ($);throw await J.markError(Q),Error(Q)}}function C8($={}){return(J)=>J.transport.type==="stdio"?new hH(J):new kH(J,$)}yQ();function l0(){return Date.now()}function LT($){return $.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema}))}class A2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let J=this.servers.get($.name);if(!J){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:l0()});return}let Q=JSON.stringify(J.registration.transport)!==JSON.stringify($.transport);if(J.registration={...$},J.updatedAt=l0(),Q)await this.disconnectState(J),J.client=void 0,J.toolCache=void 0,J.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let J=this.requireServer($);await this.disconnectState(J),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let J=this.requireServer($);await this.connectState(J)})}async disconnectServer($){await this.runExclusive($,async()=>{let J=this.requireServer($);await this.disconnectState(J)})}async setServerDisabled($,J){await this.runExclusive($,async()=>{let Q=this.requireServer($);if(Q.registration={...Q.registration,disabled:J},Q.updatedAt=l0(),J)await this.disconnectState(Q)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,J)=>$.name.localeCompare(J.name))}async listTools($){let J=this.requireServer($),Q=J.toolCacheUpdatedAt??0;if(J.toolCache&&l0()-Q<=this.toolsCacheTtlMs)return J.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let J=this.requireServer($),Z=await(await this.ensureConnectedClient(J)).listTools(),W=LT(Z);return J.toolCache=W,J.toolCacheUpdatedAt=l0(),J.updatedAt=l0(),W})}async callTool($){return this.runExclusive($.serverName,async()=>{let J=this.requireServer($.serverName),Q=await this.ensureConnectedClient(J);return J.updatedAt=l0(),Q.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let J of $)await this.unregisterServer(J)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=l0();try{let J=$.client??await this.clientFactory($.registration);await J.connect(),$.client=J,$.status="connected",$.lastError=void 0,$.updatedAt=l0()}catch(J){throw $.status="disconnected",$.lastError=J instanceof Error?J.message:String(J),$.updatedAt=l0(),J}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=l0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=l0()}}requireServer($){let J=this.servers.get($);if(!J)throw Error(`Unknown MCP server: ${$}`);return J}async runExclusive($,J){let Q=this.operationLocks.get($)??Promise.resolve(),Z,W=new Promise((X)=>{Z=X}),j=Q.catch(()=>{return}).then(()=>W);this.operationLocks.set($,j),await Q.catch(()=>{return});try{return await J()}finally{if(Z?.(),this.operationLocks.get($)===j)this.operationLocks.delete($)}}}function y8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function IH($){return y8($)&&Object.values($).every((J)=>typeof J==="string")}function zT($){return Array.isArray($)&&$.every((J)=>typeof J==="string")}function _T($){if(!y8($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function OT($){let J=$.env?Object.entries($.env):[];if(J.length===0)return{ok:!0};let Q={};for(let[Z,W]of J){if(typeof W==="string"){Q[Z]=W;continue}let j=W.fromEnv?.trim()||Z,X=process.env[j];if(typeof X==="string"&&X.length>0){Q[Z]=X;continue}if(typeof W.value==="string"){Q[Z]=W.value;continue}if(W.required===!0)return{ok:!1,reason:`required environment variable "${j}" is not set`}}return{ok:!0,env:Object.keys(Q).length>0?Q:void 0}}function Q7($){if(!y8($))return{name:"",loadError:"invalid MCP server registration"};let J=typeof $.name==="string"?$.name.trim():"";if(!J)return{name:J,loadError:"empty MCP server name"};let Q=$.env,Z=Q===void 0?void 0:Q;if(Z!==void 0){if(!y8(Z))return{name:J,loadError:"invalid env"};for(let[Y,V]of Object.entries(Z))if(typeof V!=="string"&&!_T(V))return{name:J,loadError:`invalid env "${Y}"`}}let W=$.transport;if(!y8(W))return{name:J,loadError:"invalid MCP transport"};let j=W.type;if(j!=="stdio"&&j!=="sse"&&j!=="streamableHttp")return{name:J,loadError:"invalid MCP transport type"};if(j!=="stdio"&&Z!==void 0)return{name:J,loadError:"top-level env is only supported for stdio MCP transports"};let X=y8($.metadata)?$.metadata:void 0;if(j==="stdio"){let Y=W.command;if(typeof Y!=="string"||!Y.trim())return{name:J,loadError:"stdio MCP transport requires command"};let V=W.args;if(V!==void 0&&!zT(V))return{name:J,loadError:"stdio MCP transport args must be strings"};let H=W.cwd;if(H!==void 0&&typeof H!=="string")return{name:J,loadError:"stdio MCP transport cwd must be a string"};let B=W.env;if(B!==void 0&&!IH(B))return{name:J,loadError:"stdio MCP transport env must be strings"};let A=OT({name:J,transport:{type:"stdio",command:Y,args:V,cwd:H,env:B},env:Z,metadata:X});if(!A.ok)return{name:J,loadError:A.reason};let K=B||A.env?{...B??{},...A.env??{}}:void 0;return{name:J,registration:{name:J,transport:{type:"stdio",command:Y,args:V,cwd:H,env:K},metadata:X}}}if(typeof W.url!=="string"||!W.url.trim())return{name:J,loadError:`${j} MCP transport requires url`};let f=W.headers;if(f!==void 0&&!IH(f))return{name:J,loadError:`${j} MCP transport headers must be strings`};return{name:J,registration:{name:J,transport:j==="sse"?{type:"sse",url:W.url,headers:f}:{type:"streamableHttp",url:W.url,headers:f},metadata:X}}}function IQ($){let J=new Map;return $.map(({server:Q,owner:Z,ownerLabel:W})=>{let j=Q7(Q);if(!j.registration)return{owner:Z,name:j.name,loadError:j.loadError??"invalid MCP server registration"};let X=J.get(j.registration.name);if(J.has(j.registration.name)){let f=X?` already registered by ${X}`:"";return{owner:Z,name:j.registration.name,loadError:`duplicate MCP server name "${j.registration.name}"${f}`}}return J.set(j.registration.name,W),{owner:Z,name:j.registration.name,registration:j.registration}})}import{createHash as TT}from"node:crypto";var xH=128,MT=/[^a-zA-Z0-9_-]+/g,gH=8,qT=1,PT="mcp_tool";function NT($){return TT("sha1").update($).digest("hex").slice(0,gH)}function wT($){return $.replace(MT,"_")}var xQ=({serverName:$,toolName:J})=>{let Q=`${$}__${J}`,Z=wT(Q);if(Z===Q&&Q.length<=xH)return Q;let W=NT(Q),j=xH-qT-gH;return`${Z.slice(0,j)||PT}_${W}`};function d6($){return{[($.nameTransform??xQ)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function gQ($){let J={};for(let Q of $.toolNames)Object.assign(J,d6({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return J}import{createTool as ST}from"@cline/shared";function CT($,J){let Q=J.description?.trim();if(Q)return Q;return`Execute MCP tool "${J.name}" from server "${$}".`}async function E8($){let J=await $.provider.listTools($.serverName),Q=$.nameTransform??xQ;return J.map((Z)=>{let W=Q({serverName:$.serverName,toolName:Z.name});return ST({name:W,description:CT($.serverName,Z),inputSchema:Z.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(j,X)=>$.provider.callTool({serverName:$.serverName,toolName:Z.name,arguments:j&&typeof j==="object"&&!Array.isArray(j)?j:void 0,context:X})})})}W1();var uH={};w(uH,{listPluginToolsWithDiagnostics:()=>mQ,listPluginTools:()=>l6});import{stat as yT}from"node:fs/promises";import{isAbsolute as ET,relative as bT,resolve as vH}from"node:path";W1();function hT($,J){let Q=bT(vH($),vH(J));return Q===""||!Q.startsWith("..")&&!ET(Q)}var kT=32,b8=new Map;function IT($,J){if(!b8.has($)&&b8.size>=kT){let Q=b8.keys().next().value;if(Q)b8.delete(Q)}b8.set($,J)}async function xT($){let J=await Promise.all($.pluginPaths.map(async(Q)=>{try{let Z=await yT(Q);return`${Q}:${Z.mtimeMs}:${Z.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:J})}function cH($,J){return $.map((Q)=>({...Q,enabled:!J.has(Q.name)}))}function gT($){return $.sort((J,Q)=>{let Z=J.name.localeCompare(Q.name);if(Z!==0)return Z;return J.path.localeCompare(Q.path)})}async function mT($,J){if(!$.setup)return{tools:[]};let Q=[],Z={registerTool:(W)=>Q.push(W),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(W)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(Z,{workspaceInfo:J}),{tools:Q}}async function mQ($){let J=e$({workspacePath:$.workspacePath,cwd:$.cwd}),Q=B1($.disabledToolNames);if(J.length===0)return{tools:[],failures:[],warnings:[]};let Z=await xT({pluginPaths:J,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),W=b8.get(Z);if(W)return{tools:cH(W.tools,Q),failures:W.failures,warnings:W.warnings};let j=[],X=[],f=[],Y;try{Y=await A8({pluginPaths:J,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),X=[...Y.failures],f=[...Y.warnings];for(let H of Y.extensions??[]){let B=H.__clinePluginPath;if(!B)continue;let A=hT($.workspacePath,B)?"workspace-plugin":"global-plugin",K;try{K=await mT(H,{rootPath:$.workspacePath})}catch(G){X.push({pluginPath:B,pluginName:H.name,phase:"setup",message:G instanceof Error?G.message:String(G),stack:G instanceof Error?G.stack:void 0});continue}for(let G of K.tools)j.push({name:G.name,pluginName:H.name,path:B,source:A,description:G.description?.trim()||void 0})}}catch(H){X=J.map((B)=>({pluginPath:B,phase:"load",message:H instanceof Error?H.message:String(H),stack:H instanceof Error?H.stack:void 0}))}finally{await Y?.shutdown().catch(()=>{})}let V=gT(j);return IT(Z,{tools:V,failures:X,warnings:f}),{tools:cH(V,Q),failures:X,warnings:f}}async function l6($){return(await mQ($)).tools}function cQ($,J){if(!J)return"global";let Q=cT(J,$);return!Q.startsWith("..")&&!vT(Q)?"workspace":"global"}function p6($){return[...$].sort((J,Q)=>{let Z=(W)=>{switch(W){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(J.source!==Q.source)return Z(J.source)-Z(Q.source);return J.name.localeCompare(Q.name)})}function pH($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}async function lH($,J){if($.userInstructionService)return await J($.userInstructionService);let Q=pH($);if(!Q)return await J(void 0);let Z=$.cwd?.trim()||Q,W=_$({skills:{workspacePath:Q,includePluginSkills:!0,cwd:Z},rules:{workspacePath:Q},workflows:{workspacePath:Q}});try{return await W.start(),await J(W)}finally{W.stop()}}function uT($,J){if(!$)return;let Q=$.listRecords("skill");if(J.id){let Z=Q.find((W)=>W.id===J.id);if(Z)return Z}for(let Z of Q)if(Z.filePath===J.path||Z.item.name===J.name||Z.id===J.name)return Z;return}class O${async list($={}){return await lH($,async(J)=>{let Q=pH($),Z=[],W=[],j=[],X=[],f=[];if(J){for(let V of J.listRecords("workflow")){let H=V.item;Z.push({id:V.id,name:H.name,path:V.filePath,enabled:H.disabled!==!0,kind:"workflow",source:cQ(V.filePath,Q),description:H.instructions,toggleable:!1})}for(let V of J.listRecords("rule")){let H=V.item;W.push({id:V.id,name:H.name,path:V.filePath,enabled:H.disabled!==!0,kind:"rule",source:cQ(V.filePath,Q),description:H.instructions,toggleable:!1})}for(let V of J.listRecords("skill")){let H=V.item;j.push({id:V.id,name:H.name,path:V.filePath,enabled:H.disabled!==!0,kind:"skill",source:cQ(V.filePath,Q),description:H.description,toggleable:!0})}}if(Q)try{for(let V of await l6({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))X.push({id:`${V.pluginName}:${V.name}:${V.path}`,name:V.name,path:V.path,enabled:V.enabled,kind:"tool",source:V.source,description:V.description,toggleable:!0})}catch{}let Y=K0();if(c1({filePath:Y}))try{for(let V of A1({filePath:Y}))f.push({id:V.name,name:V.name,path:Y,enabled:V.disabled!==!0,kind:"mcp",source:cQ(Y,Q),description:V.transport.type,toggleable:!0})}catch{}return{workflows:p6(Z.filter((V)=>vQ(V.path))),rules:p6(W.filter((V)=>vQ(V.path))),skills:p6(j.filter((V)=>vQ(V.path))),tools:p6(X),mcp:p6(f.filter((V)=>vQ(V.path)))}})}async toggle($){if($.type==="skills")return await lH($,async(J)=>{let Q=uT(J,$),Z=Q?.filePath;if(!Z)throw Error(`Unable to resolve skill setting '${$.id??$.name??dH($.path??"")}'.`);let W=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,j=$.enabled??(W!==void 0?!W:void 0);if(j===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??dH($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await zH({filePath:Z,enabled:j}),await J?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:J}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)T5($.name);else xf($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let J=$.name?.trim()||$.id?.trim();if(!J)throw Error("MCP server settings toggle requires a server name.");let Q=$.path?.trim()||K0(),Z=$.enabled;if(Z===void 0){let W=A1({filePath:Q}).find((j)=>j.name===J);if(!W)throw Error(`Unknown MCP server: ${J}`);Z=W.disabled===!0}return Y2({filePath:Q,name:J,disabled:!Z}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function K2(){return new O$}function iH($){return{async list(J){let Q=$;if(Q.listSettings)return await Q.listSettings(J);return await K2().list(J)},async toggle(J){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(J);return await K2().toggle(J)}}}function nH($){function J(){let Q=$.pendingPrompts;if(!Q)throw Error("Pending prompt service is not available.");return Q}return{list(Q){return J().list(Q)},update(Q){return J().update(Q)},delete(Q){return J().delete(Q)}}}var aH={};w(aH,{splitCoreSessionConfig:()=>r6,isSessionNotFoundError:()=>d1,SessionNotFoundError:()=>u1,SESSION_NOT_FOUND_ERROR_CODE:()=>G2});var G2="session_not_found";class u1 extends Error{sessionId;code="session_not_found";constructor($,J){super(J??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function d1($){return $ instanceof u1||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function r6($){let{hooks:J,logger:Q,telemetry:Z,extensionContext:W,extraTools:j,extensions:X,onTeamEvent:f,onConsecutiveMistakeLimitReached:Y,checkpoint:V,compaction:H,...B}=$,A={};if(J)A.hooks=J;if(Q)A.logger=Q;if(Z)A.telemetry=Z;if(W)A.extensionContext=W;if(j)A.extraTools=j;if(X)A.extensions=X;if(f)A.onTeamEvent=f;if(Y)A.onConsecutiveMistakeLimitReached=Y;if(V?.createCheckpoint)A.checkpoint=V;if(H?.compact)A.compaction=H;let K=Object.keys(A).length>0?A:void 0;return{config:{...B,...V?{checkpoint:{enabled:V.enabled}}:{},...H?{compaction:{enabled:H.enabled,strategy:H.strategy,thresholdRatio:H.thresholdRatio,reserveTokens:H.reserveTokens,preserveRecentTokens:H.preserveRecentTokens,maxInputTokens:H.maxInputTokens,summarizer:H.summarizer}}:{}},...K?{localRuntime:K}:{}}}function sH($){let J=$.config;return"providerId"in J?{...$,config:{...J,...dT($.localRuntime)},localRuntime:$.localRuntime}:$}function Z7($,J={}){let Q=r6($.config),Z=z0(J.defaultCapabilities,$.capabilities),W=lT(Q.localRuntime,$.localRuntime),j=J.withExtensionContext?.(W?.extensionContext);if(j)W={...W??{},extensionContext:j};return{...$,...Q,...W?{localRuntime:W}:{},...Z?{capabilities:Z}:{}}}function dT($){if(!$)return{};let{modelCatalogDefaults:J,userInstructionService:Q,configExtensions:Z,onTeamRestored:W,...j}=$;return j}function lT(...$){let J={};for(let Q of $)if(Q)Object.assign(J,Q);return Object.keys(J).length>0?J:void 0}O0();function oH($){let J=$.input.config.telemetry??$.telemetry;if(!J)return;J.capture({event:x.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??U0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function i6($){return!!$&&typeof $==="object"&&!Array.isArray($)}function W7($){let J=$?.trim();return J?J:void 0}function pT($,J){let Q=$?.trim();if(!Q)return J;let Z=Date.parse(Q);if(!Number.isFinite(Z))return J;return new Date(Z).toISOString()}function tH($,J){return new Date(new Date($).getTime()+Math.max(0,Math.floor(J))*1000).toISOString()}function eH($,J){return new Date(new Date($).getTime()-Math.max(0,Math.floor(J))*1000).toISOString()}function rT($,J){if(!$)return J;return new Date($).getTime()>=new Date(J).getTime()?$:J}function iT($,J){let Q=$.eventId.trim(),Z=$.eventType.trim(),W=$.source.trim(),j=W7($.subject),X=W7($.dedupeKey)??`${Z}:${W}:${j??Q}`;return{eventId:Q,eventType:Z,source:W,subject:j,occurredAt:pT($.occurredAt,J),workspaceRoot:W7($.workspaceRoot),payload:i6($.payload)?$.payload:void 0,attributes:i6($.attributes)?$.attributes:void 0,dedupeKey:X}}function j7($,J){if(!J)return;let Q=J.split("."),Z=$;for(let W of Q){if(!i6(Z))return;Z=Z[W]}return Z}function nT($,J){if($.attributes&&Object.hasOwn($.attributes,J))return $.attributes[J];if($.payload&&Object.hasOwn($.payload,J))return $.payload[J];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},Z=j7(Q,J);if(Z!==void 0)return Z;if($.attributes){let W=j7($.attributes,J);if(W!==void 0)return W}if($.payload)return j7($.payload,J);return}function uQ($,J){if(Array.isArray(J))return J.some((Q)=>uQ($,Q));if(Array.isArray($))return $.some((Q)=>uQ(Q,J));if(i6(J)){if(!i6($))return!1;return Object.entries(J).every(([Q,Z])=>uQ($[Q],Z))}return Object.is($,J)}function aT($,J){if(!J||Object.keys(J).length===0)return!0;return Object.entries(J).every(([Q,Z])=>uQ(nT($,Q),Z))}class X7{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let J=new Date(this.nowFn()).toISOString(),Q=iT($,J),Z=this.store.insertEventLog(Q,{receivedAtIso:J});if(!Z.created)return this.logger?.debug("cron.event.duplicate",{eventId:Z.record.eventId,eventType:Z.record.eventType,source:Z.record.source}),{event:Z.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:Z.record.dedupeKey}]};try{let W=this.store.listEventSpecsForType(Q.eventType),j=[],X=[],f=[];for(let H of W){if(!aT(Q,H.filters)){j.push({specId:H.specId,externalId:H.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}X.push(H);let B=this.materializeForSpec(H,Q,Z.record.receivedAt);if(B.run)f.push(B.run);else j.push({specId:H.specId,externalId:H.externalId,reason:B.reason,dedupeKey:Q.dedupeKey})}let Y=X.length===0?"unmatched":f.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(Z.record.eventId,{status:Y,matchedSpecCount:X.length,queuedRunCount:f.length,suppressedCount:j.filter((H)=>H.reason!=="filter_mismatch").length});let V=this.store.getEventLog(Z.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:Z.record.eventId,eventType:Z.record.eventType,status:Y,matchedSpecCount:X.length,queuedRunCount:f.length}),{event:V??Z.record,duplicate:!1,matchedSpecs:X,queuedRuns:f,suppressions:j}}catch(W){if(this.store.updateEventLogProcessing(Z.record.eventId,{status:"failed",error:W instanceof Error?W.message:String(W)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:Z.record.eventId,eventType:Z.record.eventType,error:W});throw W}}materializeForSpec($,J,Q){let Z=J.dedupeKey??J.eventId,W=$.debounceSeconds??0;if(W>0){let Y=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:Z});if(Y){let V=rT(Y.scheduledFor,tH(Q,W)),H=this.store.updateQueuedEventRunForDebounce({runId:Y.runId,triggerEventId:J.eventId,scheduledFor:V});if(H)return{run:H,reason:"dedupe_window"}}}let j=$.dedupeWindowSeconds??0;if(j>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:Z,sinceIso:eH(Q,j)}))return{reason:"dedupe_window"};let X=$.cooldownSeconds??0;if(X>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:eH(Q,X)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:J.eventId,scheduledFor:W>0?tH(Q,W):Q}),reason:"dedupe_window"}}}class n6{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},J=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let Z of J)if(this.materializeOneOff(Z))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Z of Q)try{if(this.materializeSchedule(Z))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as QM}from"node:path";import{buildClineSystemPrompt as ZM}from"@cline/shared";import{nowIso as $B}from"@cline/shared/db";import{mkdirSync as sT,writeFileSync as oT}from"node:fs";import{join as tT}from"node:path";import{resolveCronReportsDir as eT}from"@cline/shared/storage";function T$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function F2($,J){if(J===void 0||J===null)return;return`${$}: ${T$(J)}`}function $M($,J,Q){let Z=[`runId: ${T$($.runId)}`,`specId: ${T$(J.specId)}`,`externalId: ${T$(J.externalId)}`,`title: ${T$(J.title)}`,`triggerKind: ${T$($.triggerKind)}`,`status: ${T$($.status)}`,`sourcePath: ${T$(J.sourcePath)}`],W=[F2("sessionId",$.sessionId),F2("startedAt",$.startedAt),F2("completedAt",$.completedAt),F2("triggerEventId",$.triggerEventId),F2("triggerEventType",Q?.eventType),F2("triggerEventSource",Q?.source),F2("triggerEventSubject",Q?.subject)];for(let j of W)if(j)Z.push(j);return`---
|
|
218
230
|
${Z.join(`
|
|
219
231
|
`)}
|
|
220
232
|
---
|
|
221
|
-
`}function
|
|
233
|
+
`}function JM($){let J=[];if($.triggerEvent){let Q=$.triggerEvent,Z=[`- 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((W)=>W.length>0);J.push(`## Trigger Event
|
|
222
234
|
|
|
223
235
|
${Z.join(`
|
|
224
236
|
`)}
|
|
@@ -237,17 +249,17 @@ ${Z.join(`
|
|
|
237
249
|
${Q.join(`
|
|
238
250
|
`)}
|
|
239
251
|
`)}return J.join(`
|
|
240
|
-
`)}function
|
|
241
|
-
${
|
|
242
|
-
`)}class
|
|
252
|
+
`)}function f7($){let J=eT($.specs);sT(J,{recursive:!0});let Q=tT(J,`${$.run.runId}.md`),Z=`${$M($.run,$.spec,$.data.triggerEvent)}
|
|
253
|
+
${JM($.data)}`;return oT(Q,Z,"utf8"),Q}class Y7{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,J,Q){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let Z=Math.max(1,Math.floor(Q)),W=this.activeExecutions.get($)??new Set;if(W.size>=Z)return!1;return W.add(J),this.activeExecutions.set($,W),!0}release($,J){let Q=this.activeExecutions.get($);if(!Q)return;if(Q.delete(J),Q.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let J of this.activeExecutions.values())$+=J.size;return $}}var WM=15000,jM=90,JB=["rules","skills","plugins"];function XM($,J){return new Set($.extensions??JB).has(J)}function fM($,J){if($.tools===void 0)return{"*":{autoApprove:!0}};let Q={"*":{enabled:!1,autoApprove:!0}};for(let Z of $.tools)Q[Z]={enabled:!0,autoApprove:!0};if(J==="yolo")Q[F0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Q}function YM($){let J=$?.trim();if(!J)return;return["# Notes Directory",`Use ${J} for durable notes related to this automation.`,"Before starting, inspect relevant existing notes there when useful. During or after the run, write concise notes there when they would help future runs continue with context."].join(`
|
|
254
|
+
`)}class V7 extends Error{constructor($){super($);this.name="TimeoutError"}}async function VM($,J){if(J<=0)return $;let Q,Z=new Promise((W,j)=>{Q=setTimeout(()=>{j(new V7("cron run timed out"))},J)});try{return await Promise.race([$,Z])}finally{if(Q)clearTimeout(Q)}}class a6{store;materializer;options;limiter;claimLeaseMs;timer;started=!1;ticking=!1;disposed=!1;stopping=!1;activeRuns=new Map;constructor($){this.store=$.store,this.materializer=$.materializer,this.options=$,this.limiter=new Y7($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??jM)*1000)}async start(){if(this.disposed)throw Error("CronRunner disposed");if(this.started)return;this.stopping=!1,this.started=!0;let $=Math.max(2000,this.options.pollIntervalMs??WM);await this.tick(),this.timer=setInterval(()=>void this.tick(),$)}async stop(){let $=this.started;if(this.started=!1,this.stopping=!0,this.timer)clearInterval(this.timer),this.timer=void 0;if(!$)return;let J=[...this.activeRuns.entries()];await Promise.all(J.map(async([Q,Z])=>{if(Z.sessionId)try{await this.options.runtimeHandlers.abortSession(Z.sessionId)}catch{}try{this.store.requeueRun({runId:Q,claimToken:Z.claimToken,error:"runner stopped before completion"})}catch{}}))}async dispose(){if(this.disposed)return;this.disposed=!0,await this.stop()}async tick(){if(this.ticking)return;this.ticking=!0;try{this.materializer.materializeAll();let $=this.store.claimDueRuns({nowIso:$B(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((J)=>this.executeClaim(J)))}catch($){let J=this.options.logger;if(J)if(J.error)J.error("cron.runner.tick.failed",{error:$});else J.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,J])=>{let Q=this.store.getRun($);return Q?[{...Q,...J}]:[]})}async executeClaim($){let J=$.run,Q=this.store.getSpec(J.specId);if(!Q){this.store.completeRun(J.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!Q.enabled||Q.removed){this.store.completeRun(J.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let Z=Q.maxParallel&&Q.maxParallel>0?Q.maxParallel:1;if(!this.limiter.acquire(Q.specId,J.runId,Z)){this.store.requeueRun({runId:J.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(Q.specId,J.runId),this.store.requeueRun({runId:J.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(J.runId,{claimToken:$.claimToken});let j=J.triggerEventId?this.store.getEventLog(J.triggerEventId):void 0,X,f,Y=Date.now(),V;if(Q.timeoutSeconds&&Q.timeoutSeconds>0)V=Y+Q.timeoutSeconds*1000;try{f=this.startClaimLeaseHeartbeat($);let H=await this.buildStartRequest(Q);if(X=(await this.options.runtimeHandlers.startSession(H)).sessionId.trim(),!X)throw Error("runtime returned empty sessionId");this.activeRuns.set(J.runId,{claimToken:$.claimToken,sessionId:X}),this.store.attachSessionIdToRun(J.runId,X);let A={config:H,prompt:this.buildPrompt(Q,j)},K=this.options.runtimeHandlers.sendSession(X,A),G=V?Math.max(1,V-Date.now()):0,D=(await VM(K,G)).result,U=Date.now(),F=f7({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...J,sessionId:X,status:"done"},spec:Q,data:{finalText:D.text,usage:D.usage,toolCalls:D.toolCalls,durationMs:U-Y,triggerEvent:j}});this.store.completeRun(J.runId,{status:"done",sessionId:X,reportPath:F,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",Q,J.runId),this.store.updateSpecLastRunAt(Q.specId,$B())}catch(H){let B=H instanceof V7;if(X&&B)try{await this.options.runtimeHandlers.abortSession(X)}catch{}let A=H instanceof Error?H.message:String(H),K=Date.now(),G=f7({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...J,sessionId:X,status:"failed"},spec:Q,data:{error:A,durationMs:K-Y,triggerEvent:j}});this.store.completeRun(J.runId,{status:"failed",sessionId:X,reportPath:G,error:A,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.failed",Q,J.runId)}finally{if(f?.(),X)try{await this.options.runtimeHandlers.stopSession(X)}catch{}this.activeRuns.delete(J.runId),this.limiter.release(Q.specId,J.runId)}}publishScheduleExecutionEvent($,J,Q){if(J.source!=="hub-schedule"||!this.options.eventPublisher)return;let Z=this.store.getRun(Q);if(!Z)return;let W=Z.status==="done"?"success":Z.status==="cancelled"?"aborted":Z.status==="running"?"running":Z.status==="queued"?"pending":"failed";this.options.eventPublisher($,{scheduleId:J.externalId,executionId:Z.runId,sessionId:Z.sessionId,triggeredAt:new Date(Z.scheduledFor??Z.createdAt).getTime(),startedAt:Z.startedAt?new Date(Z.startedAt).getTime():void 0,endedAt:Z.completedAt?new Date(Z.completedAt).getTime():void 0,status:W,errorMessage:Z.error})}buildPrompt($,J){let Q=$.prompt??"";if(!J)return Q;let Z={eventId:J.eventId,eventType:J.eventType,source:J.source,subject:J.subject,occurredAt:J.occurredAt,workspaceRoot:J.workspaceRoot,dedupeKey:J.dedupeKey,attributes:J.attributes,payload:J.payload};return`${Q}
|
|
243
255
|
|
|
244
256
|
Trigger event:
|
|
245
|
-
${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Q=setInterval(()=>{let Z=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,Z))clearInterval(Q)},J);return()=>clearInterval(Q)}async buildSystemPrompt($,J,Q,Z){let W=
|
|
257
|
+
${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Q=setInterval(()=>{let Z=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,Z))clearInterval(Q)},J);return()=>clearInterval(Q)}async buildSystemPrompt($,J,Q,Z){let W=YM($.notesDirectory),j=w8(void 0,W),X=await T6(J),f=ZM({ide:"Cline Cron",workspaceRoot:J,workspaceName:QM(J),metadata:X,rules:$.systemPrompt?void 0:j,mode:Q,providerId:Z,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?w8(f,j)??f:f}async buildStartRequest($){let J=($.workspaceRoot??"").trim(),Q=($.providerId??"").trim(),Z=($.modelId??"").trim(),W=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,j=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():J;if(!J)throw Error("cron spec requires workspaceRoot");let X=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:J,cwd:j,provider:Q,model:Z,mode:X,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,J,X,Q),maxIterations:$.maxIterations,enableTools:W?.enableTools??!0,enableSpawn:W?.enableSpawn??!0,enableTeams:W?.enableTeams??!0,autoApproveTools:W?.autoApproveTools??!0,toolPolicies:fM($,X),configExtensions:JB.filter((f)=>XM($,f))}}}import{existsSync as EM,readdirSync as bM,readFileSync as hM,statSync as kM}from"node:fs";import{relative as IM}from"node:path";import{resolveCronSpecsDir as xM}from"@cline/shared/storage";function s6($,J,Q,Z){let W=new Set;function j(X){let f=X.toLowerCase();if(Z){let V=Z.indexOf(f);if(V!==-1)return V+J}let Y=Number(X);if(!Number.isInteger(Y)||Y<J||Y>Q)throw Error(`Invalid cron value "${X}" for range [${J}-${Q}]`);return Y}for(let X of $.split(",")){if(X==="*"){for(let V=J;V<=Q;V+=1)W.add(V);continue}let f=X.indexOf("/");if(f!==-1){let V=X.slice(0,f),H=Number(X.slice(f+1));if(!Number.isInteger(H)||H<1)throw Error(`Invalid step "${X.slice(f+1)}"`);let B=J,A=Q;if(V!=="*"){let K=V.indexOf("-");if(K!==-1)B=j(V.slice(0,K)),A=j(V.slice(K+1));else B=j(V)}if(B>A)throw Error(`Invalid cron range "${V}"`);for(let K=B;K<=A;K+=H)W.add(K);continue}let Y=X.indexOf("-");if(Y!==-1){let V=j(X.slice(0,Y)),H=j(X.slice(Y+1));if(V>H)throw Error(`Invalid cron range "${X}"`);for(let B=V;B<=H;B+=1)W.add(B);continue}W.add(j(X))}return[...W].sort((X,f)=>X-f)}var HM=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],ZB=["sun","mon","tue","wed","thu","fri","sat"];function o6($,J,Q){let Z=$[J];if(typeof Z!=="string")throw Error(`Invalid cron pattern "${Q}": missing field ${J+1}`);return Z}function H7($,J){let Q=$[0];if(typeof Q!=="number")throw Error(`Invalid cron pattern: no values parsed for ${J}`);return Q}function B7($){let J=$.trim().split(/\s+/);if(J.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${J.length}`);return{minutes:s6(o6(J,0,$),0,59),hours:s6(o6(J,1,$),0,23),daysOfMonth:s6(o6(J,2,$),1,31),months:s6(o6(J,3,$),1,12,HM),daysOfWeek:s6(o6(J,4,$),0,6,ZB)}}function A7($){B7($)}function WB($,J,Q=Date.now()){D2($,Q,J)}var QB=new Map,BM=new Map(ZB.map(($,J)=>[$,J]));function jB($){let J=$?.trim();return J?J:void 0}function XB($){let J=QB.get($);if(J)return J;let Q=new Intl.DateTimeFormat("en-US",{timeZone:$,calendar:"gregory",numberingSystem:"latn",year:"numeric",month:"2-digit",day:"2-digit",weekday:"short",hour:"2-digit",minute:"2-digit",hourCycle:"h23"});return QB.set($,Q),Q}function AM($){let J=jB($);if(!J)return;XB(J).format(new Date)}function KM($,J){let Q=XB(J).formatToParts(new Date($)),Z=new Map(Q.map((X)=>[X.type,X.value])),W=Z.get("weekday")?.toLowerCase().slice(0,3)??"",j=BM.get(W);if(j===void 0)throw Error(`Unable to resolve weekday for timezone "${J}"`);return{month:Number(Z.get("month")),dayOfMonth:Number(Z.get("day")),dayOfWeek:j,hour:Number(Z.get("hour")),minute:Number(Z.get("minute"))}}function GM($){let J=new Date($);return{month:J.getMonth()+1,dayOfMonth:J.getDate(),dayOfWeek:J.getDay(),hour:J.getHours(),minute:J.getMinutes()}}function FM($,J){return $.months.includes(J.month)&&$.daysOfMonth.includes(J.dayOfMonth)&&$.daysOfWeek.includes(J.dayOfWeek)&&$.hours.includes(J.hour)&&$.minutes.includes(J.minute)}function DM($,J,Q){let Z=B7($),W=new Date(J);W.setSeconds(0,0);let j=W.getTime()+60000,X=new Date(J);X.setFullYear(X.getFullYear()+4);let f=X.getTime();while(j<=f){if(FM(Z,KM(j,Q)))return j;j+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Q}"`)}function D2($,J,Q){let Z=jB(Q);if(Z)return AM(Z),DM($,J,Z);let W=B7($),j=new Date(J);j.setSeconds(0,0),j=new Date(j.getTime()+60000);let X=new Date(J);X.setFullYear(X.getFullYear()+4);while(j<=X){let{month:f,dayOfMonth:Y,dayOfWeek:V,hour:H,minute:B}=GM(j.getTime());if(!W.months.includes(f)){let A=W.months.find((G)=>G>f)??H7(W.months,"months"),K=A<=f?1:0;j=new Date(j.getFullYear()+K,A-1,1,0,0,0,0);continue}if(!W.daysOfMonth.includes(Y)||!W.daysOfWeek.includes(V)){j=new Date(j.getFullYear(),j.getMonth(),Y+1,0,0,0,0);continue}if(!W.hours.includes(H)){let A=W.hours.find((G)=>G>H)??H7(W.hours,"hours"),K=A<=H?1:0;j=new Date(j.getFullYear(),j.getMonth(),j.getDate()+K,A,0,0,0);continue}if(!W.minutes.includes(B)){let A=W.minutes.find((G)=>G>B)??H7(W.minutes,"minutes"),K=A<=B?1:0;j=new Date(j.getFullYear(),j.getMonth(),j.getDate(),j.getHours()+K,A,0,0);continue}return j.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{createHash as UM}from"node:crypto";import RM from"yaml";function LM($){let J=$.replace(/\\/g,"/");if(J.startsWith("events/")&&J.endsWith(".event.md"))return"event";if(J.endsWith(".cron.md"))return"schedule";return"one_off"}function zM($){let J=$.replace(/\r\n/g,`
|
|
246
258
|
`);if(!J.startsWith(`---
|
|
247
259
|
`))return{frontmatter:void 0,body:$};let Q=J.slice(4),Z=Q.indexOf(`
|
|
248
260
|
---`);if(Z===-1)return{frontmatter:void 0,body:$};let W=Q.slice(0,Z),j=Q.slice(Z+4);if(j.startsWith(`
|
|
249
|
-
`))j=j.slice(1);return{frontmatter:W,body:j}}function p0($){if(typeof $!=="string")return;let J=$.trim();return J.length>0?J:void 0}function
|
|
250
|
-
`),Q.update(J),Q.digest("hex")}function
|
|
261
|
+
`))j=j.slice(1);return{frontmatter:W,body:j}}function p0($){if(typeof $!=="string")return;let J=$.trim();return J.length>0?J:void 0}function _M($){if(!Array.isArray($))return;let J=$.map((Q)=>typeof Q==="string"?Q.trim():"").filter((Q)=>Q.length>0);return J.length>0?J:void 0}function F7($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function OM($){let J=F7($);if(!J)return;let Q=p0(J.providerId),Z=p0(J.modelId);if(Q===void 0&&Z===void 0)return;return{providerId:Q,modelId:Z}}function TM($){if(typeof $!=="string")return;let J=$.trim().toLowerCase();if(J==="act"||J==="plan"||J==="yolo")return J;return}function YB($,J={}){let Q=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!Q)return;let Z=[...new Set(Q.map((W)=>typeof W==="string"?W.trim():"").filter((W)=>W.length>0))];if(Array.isArray($)&&J.preserveEmptyArray)return Z;return Z.length>0?Z:void 0}var MM=new Set(W$);function qM($){let J=YB($,{preserveEmptyArray:!0});if(!J)return;let Q=J.filter((Z)=>!MM.has(Z));if(Q.length>0)throw Error(`unknown tool(s): ${Q.join(", ")}`);return J}var PM=new Set(["rules","skills","plugins"]);function NM($){let J=YB($,{preserveEmptyArray:!0});if(!J)return;let Q=J.filter((Z)=>!PM.has(Z));if(Q.length>0)throw Error(`unknown extension(s): ${Q.join(", ")}`);return J}function K7($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function G7($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function D7($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Q)=>D7(Q)).join(",")}]`;let J=Object.entries($).filter(([,Q])=>Q!==void 0);return J.sort(([Q],[Z])=>Q<Z?-1:Q>Z?1:0),`{${J.map(([Q,Z])=>`${JSON.stringify(Q)}:${D7(Z)}`).join(",")}}`}function VB($,J){let Q=UM("sha256");return Q.update(D7($)),Q.update(`
|
|
262
|
+
`),Q.update(J),Q.digest("hex")}function wM($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var SM=["schedule","timezone"],CM=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],yM=["cwd"];function fB($,J,Q,Z,W){return{externalId:$,relativePath:$,triggerKind:J,body:Q,contentHash:VB(Z,Q),error:W}}function K1($,J,Q,Z,W,j){return{externalId:$,relativePath:J,triggerKind:Q,body:Z,contentHash:W,error:j}}function HB($){let J=$.relativePath.replace(/\\/g,"/"),Q=LM(J),{frontmatter:Z,body:W}=zM($.raw),j={};if(Z!==void 0&&Z.trim().length>0)try{let F=RM.parse(Z);if(F&&typeof F==="object"&&!Array.isArray(F))j=F;else if(F!==null&&F!==void 0)return fB(J,Q,W,{},"frontmatter must be a YAML mapping")}catch(F){return fB(J,Q,W,{},F instanceof Error?`failed to parse frontmatter: ${F.message}`:"failed to parse frontmatter")}let X=VB(j,W),f=p0(j.id),Y=f??J;if(Q!=="schedule"){for(let F of SM)if(j[F]!==void 0)return K1(Y,J,Q,W,X,`field "${F}" is only allowed on *.cron.md specs`)}for(let F of yM)if(j[F]!==void 0)return K1(Y,J,Q,W,X,`field "${F}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Q!=="event"){for(let F of CM)if(j[F]!==void 0)return K1(Y,J,Q,W,X,`field "${F}" is only allowed on .event.md specs`)}let V=p0(j.prompt),H=W.trim(),B=V??(H.length>0?H:void 0);if(!B)return K1(Y,J,Q,W,X,"prompt is required (frontmatter `prompt` or markdown body)");let A=p0(j.workspaceRoot);if(!A)return K1(Y,J,Q,W,X,"workspaceRoot is required");let K,G;try{K=qM(j.tools),G=NM(j.extensions)}catch(F){return K1(Y,J,Q,W,X,F instanceof Error?F.message:String(F))}let R=TM(j.mode);if(j.mode!==void 0&&R===void 0)return K1(Y,J,Q,W,X,"mode must be one of: act, plan, yolo");let D={id:f,title:p0(j.title)??f??wM(J),prompt:B,workspaceRoot:A,mode:R??"yolo",systemPrompt:p0(j.systemPrompt),modelSelection:OM(j.modelSelection),maxIterations:K7(j.maxIterations),timeoutSeconds:K7(j.timeoutSeconds),tools:K,notesDirectory:p0(j.notesDirectory),extensions:G,source:p0(j.source)??"user",tags:_M(j.tags),enabled:typeof j.enabled==="boolean"?j.enabled:!0,metadata:F7(j.metadata)},U;if(Q==="schedule"){let F=p0(j.schedule);if(!F)return K1(Y,J,Q,W,X,"schedule is required for *.cron.md specs");let O=p0(j.timezone);try{WB(F,O)}catch(z){return K1(Y,J,Q,W,X,z instanceof Error?z.message:String(z))}U={...D,triggerKind:"schedule",schedule:F,timezone:O}}else if(Q==="event"){let F=p0(j.event);if(!F)return K1(Y,J,Q,W,X,"event is required for .event.md specs");U={...D,triggerKind:"event",event:F,filters:F7(j.filters),debounceSeconds:G7(j.debounceSeconds),dedupeWindowSeconds:G7(j.dedupeWindowSeconds),cooldownSeconds:G7(j.cooldownSeconds),maxParallel:K7(j.maxParallel)}}else U={...D,triggerKind:"one_off"};return{externalId:Y,relativePath:J,triggerKind:Q,body:W,contentHash:X,spec:U}}function gM($,J){return IM($,J).replace(/\\/g,"/")}function mM($){if(!EM($))return[];let J=[],Q=[$];while(Q.length>0){let Z=Q.pop();if(!Z)continue;let W;try{W=bM(Z,{withFileTypes:!0})}catch{continue}for(let j of W){let X=`${Z}/${j.name}`;if(j.isDirectory()){if(j.name==="reports")continue;Q.push(X);continue}if(!j.isFile())continue;if(!j.name.endsWith(".md"))continue;J.push(X)}}return J}class U7{store;cronDir;constructor($){this.store=$.store,this.cronDir=xM($.specs??($.workspaceRoot?{scope:"workspace",workspaceRoot:$.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let $={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},J=mM(this.cronDir),Q=new Set;for(let W of J){let j=gM(this.cronDir,W);Q.add(j),$.scanned+=1;let X=await this.reconcileFile(j,W);if(X){if($.changes.push(X),$.upserted+=1,X.parse.error)$.invalidParses+=1}}let Z=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let W of Z)if(!Q.has(W.sourcePath))this.handleFileDeleted(W),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,J){let Q=this.store.getSpecBySourcePath($),Z,W;try{Z=hM(J,"utf8"),W=kM(J).mtimeMs}catch{return}let X=HB({relativePath:$,raw:Z}),f=this.store.upsertSpec({externalId:X.externalId,sourcePath:$,triggerKind:X.triggerKind,sourceMtimeMs:W,sourceHash:X.contentHash,parseStatus:X.error?"invalid":"valid",parseError:X.error,spec:X.spec});if(!X.error&&X.triggerKind==="schedule"&&f.record.enabled)this.applyScheduleNextRunAt(f.record,{forceReset:!Q||Q.removed||!Q.enabled||Q.scheduleExpr!==f.record.scheduleExpr||Q.timezone!==f.record.timezone});return{relativePath:$,result:f,parse:X}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let J of $)this.applyScheduleNextRunAt(J,{forceReset:!1})}applyScheduleNextRunAt($,J){if(!$.scheduleExpr)return;if(!J.forceReset&&$.nextRunAt)return;try{let Q=Date.now(),Z=$.lastRunAt?Math.max(Q,new Date($.lastRunAt).getTime()):Q,W=D2($.scheduleExpr,Z,$.timezone),j=new Date(W).toISOString();if($.nextRunAt!==j)this.store.updateSpecNextRunAt($.specId,j)}catch{}}}import{existsSync as vM,mkdirSync as cM,watch as uM}from"node:fs";import{relative as dM,resolve as lM}from"node:path";var pM=250;class R7{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??pM),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{cM($,{recursive:!0}),this.watcher=uM($,{recursive:!0},(J,Q)=>{if(!Q)return;let Z=String(Q).replace(/\\/g,"/");if(!Z.endsWith(".md"))return;if(Z.startsWith("reports/"))return;this.scheduleReconcile(Z)}),this.watcher.on("error",this.onError)}catch(J){this.onError(J)}}stop(){for(let $ of this.pending.values())clearTimeout($);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile($){let J=this.pending.get($);if(J)clearTimeout(J);let Q=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,Q)}async reconcileNow($){try{let J=lM(this.reconciler.getCronDir(),$);if(!vM(J)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Q=dM(this.reconciler.getCronDir(),J).replace(/\\/g,"/");await this.reconciler.reconcileFile(Q,J),await this.onReconciled()}catch(J){this.onError(J)}}}import{randomUUID as t6}from"node:crypto";import{asOptionalString as g,asString as s,loadSqliteDb as iM,nowIso as _0}from"@cline/shared/db";import{resolveCronDbPath as nM}from"@cline/shared/storage";var rM=[`CREATE TABLE IF NOT EXISTS cron_specs (
|
|
251
263
|
spec_id TEXT PRIMARY KEY,
|
|
252
264
|
external_id TEXT NOT NULL,
|
|
253
265
|
source_path TEXT NOT NULL UNIQUE,
|
|
@@ -338,17 +350,17 @@ ${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
|
|
|
338
350
|
ON cron_specs(trigger_kind, enabled, next_run_at);`,`CREATE INDEX IF NOT EXISTS cron_specs_event_match_idx
|
|
339
351
|
ON cron_specs(trigger_kind, event_type, enabled);`,`CREATE INDEX IF NOT EXISTS cron_specs_parse_status_idx
|
|
340
352
|
ON cron_specs(parse_status, updated_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_source_path_idx
|
|
341
|
-
ON cron_specs(source_path);`];function
|
|
353
|
+
ON cron_specs(source_path);`];function BB($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let J of rM)$.exec(J)}function dQ($){if(!$)return;try{let J=JSON.parse($);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return}function L7($,J={}){if(!$)return;try{let Q=JSON.parse($);if(!Array.isArray(Q))return;let Z=Q.map((W)=>typeof W==="string"?W.trim():"").filter((W)=>W.length>0);if(J.preserveEmpty)return Z;return Z.length>0?Z:void 0}catch{return}}function U2($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function M$($){return{specId:s($.spec_id),externalId:s($.external_id),sourcePath:s($.source_path),triggerKind:s($.trigger_kind),sourceMtimeMs:U2($.source_mtime_ms),sourceHash:g($.source_hash),parseStatus:s($.parse_status)==="invalid"?"invalid":"valid",parseError:g($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:s($.title),prompt:g($.prompt),workspaceRoot:g($.workspace_root),scheduleExpr:g($.schedule_expr),timezone:g($.timezone),eventType:g($.event_type),filters:dQ(g($.filters_json)),debounceSeconds:U2($.debounce_seconds),dedupeWindowSeconds:U2($.dedupe_window_seconds),cooldownSeconds:U2($.cooldown_seconds),mode:g($.mode),systemPrompt:g($.system_prompt),providerId:g($.provider_id),modelId:g($.model_id),maxIterations:U2($.max_iterations),timeoutSeconds:U2($.timeout_seconds),maxParallel:U2($.max_parallel),tools:L7(g($.tools_json),{preserveEmpty:!0}),notesDirectory:g($.notes_directory),extensions:L7(g($.extensions_json),{preserveEmpty:!0}),source:g($.source),tags:L7(g($.tags_json)),metadata:dQ(g($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:g($.last_materialized_run_id),lastRunAt:g($.last_run_at),nextRunAt:g($.next_run_at),createdAt:s($.created_at),updatedAt:s($.updated_at)}}function z7($){return{runId:s($.run_id),specId:s($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:s($.trigger_kind),status:s($.status),claimToken:g($.claim_token),claimStartedAt:g($.claim_started_at),claimUntilAt:g($.claim_until_at),scheduledFor:g($.scheduled_for),triggerEventId:g($.trigger_event_id),startedAt:g($.started_at),completedAt:g($.completed_at),sessionId:g($.session_id),reportPath:g($.report_path),error:g($.error),attemptCount:Number($.attempt_count??0),createdAt:s($.created_at),updatedAt:s($.updated_at)}}function AB($){return{eventId:s($.event_id),eventType:s($.event_type),source:s($.source),subject:g($.subject),occurredAt:s($.occurred_at),receivedAt:s($.received_at),workspaceRoot:g($.workspace_root),dedupeKey:g($.dedupe_key),payload:dQ(g($.payload_json)),attributes:dQ(g($.attributes_json)),processingStatus:s($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:g($.error),createdAt:s($.created_at),updatedAt:s($.updated_at)}}function KB($){return $?JSON.stringify($):null}var aM=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function GB($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function sM($,J,Q,Z){for(let W of aM){let j=$[W],X=J[W];if(GB(j)!==GB(X))return!0}if(Q===!1&&Z===!0)return!0;return!1}function oM($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function tM($){return`hub/schedules/${$}.cron.md`}function eM($){let J={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(J).length>0?J:void 0}function _7($){return{triggerKind:"schedule",title:$.name.trim(),prompt:$.prompt,workspaceRoot:$.workspaceRoot.trim(),schedule:$.cronPattern.trim(),mode:$.mode??"act",systemPrompt:$.systemPrompt,modelSelection:$.modelSelection?JSON.parse(JSON.stringify($.modelSelection)):void 0,maxIterations:typeof $.maxIterations==="number"?Math.floor($.maxIterations):void 0,timeoutSeconds:typeof $.timeoutSeconds==="number"?Math.floor($.timeoutSeconds):void 0,maxParallel:typeof $.maxParallel==="number"?Math.max(1,Math.floor($.maxParallel)):1,source:"hub-schedule",tags:$.tags?.filter((J)=>J.trim().length>0),enabled:$.enabled!==!1,metadata:eM($)}}function FB($){return JSON.stringify(_7($))}function $q($,J){let Q=$.metadata?{...$.metadata}:{},Z=J.createdBy===null?void 0:J.createdBy!==void 0?J.createdBy:typeof Q.__hubScheduleCreatedBy==="string"?Q.__hubScheduleCreatedBy:void 0,W=J.cwd!==void 0?J.cwd:typeof Q.__hubScheduleCwd==="string"?Q.__hubScheduleCwd:void 0,j=J.runtimeOptions!==void 0?J.runtimeOptions:Q.__hubRuntimeOptions&&typeof Q.__hubRuntimeOptions==="object"&&!Array.isArray(Q.__hubRuntimeOptions)?Q.__hubRuntimeOptions:void 0;return delete Q.__hubScheduleCreatedBy,delete Q.__hubScheduleCwd,delete Q.__hubRuntimeOptions,{name:J.name??$.title,cronPattern:J.cronPattern??$.scheduleExpr??"",prompt:J.prompt??$.prompt??"",workspaceRoot:J.workspaceRoot??$.workspaceRoot??"",cwd:W,modelSelection:J.modelSelection!==void 0?J.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:J.enabled??$.enabled,mode:J.mode??($.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"),systemPrompt:J.systemPrompt===null?void 0:J.systemPrompt!==void 0?J.systemPrompt:$.systemPrompt,maxIterations:J.maxIterations===null?void 0:J.maxIterations!==void 0?J.maxIterations:$.maxIterations,timeoutSeconds:J.timeoutSeconds===null?void 0:J.timeoutSeconds!==void 0?J.timeoutSeconds:$.timeoutSeconds,maxParallel:J.maxParallel??$.maxParallel??1,createdBy:Z,tags:J.tags??$.tags,runtimeOptions:j,metadata:J.metadata!==void 0?J.metadata:Object.keys(Q).length>0?Q:void 0}}class e6{db;constructor($={}){let J=$.dbPath??nM();this.db=iM(J),BB(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let J=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return J?M$(J):void 0}getSpec($){let J=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return J?M$(J):void 0}getSpecByExternalId($){let J=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return J?M$(J):void 0}listSpecs($={}){let J=[],Q=[];if($.triggerKind)J.push("trigger_kind = ?"),Q.push($.triggerKind);if(typeof $.enabled==="boolean")J.push("enabled = ?"),Q.push($.enabled?1:0);if($.parseStatus)J.push("parse_status = ?"),Q.push($.parseStatus);if(!$.includeRemoved)J.push("removed = 0");let Z=J.length>0?`WHERE ${J.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${Z} ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((X)=>M$(X))}createHubSchedule($){let J=`sched_${t6()}`,Q=this.upsertSpec({externalId:J,sourcePath:tM(J),triggerKind:"schedule",sourceHash:FB($),parseStatus:"valid",spec:_7($)});this.initializeScheduleNextRun(Q.record.specId);let Z=this.getSpec(Q.record.specId);if(!Z)throw Error("failed to create hub schedule");return Z}getHubSchedule($){let J=this.db.prepare(`SELECT * FROM cron_specs
|
|
342
354
|
WHERE external_id = ? AND source = 'hub-schedule' AND removed = 0
|
|
343
355
|
ORDER BY created_at ASC LIMIT 1`).get($);return J?M$(J):void 0}listHubSchedules($={}){let J=["source = 'hub-schedule'","trigger_kind = 'schedule'","removed = 0"],Q=[];if(typeof $.enabled==="boolean")J.push("enabled = ?"),Q.push($.enabled?1:0);if($.tags&&$.tags.length>0)for(let j of $.tags)J.push("tags_json LIKE ?"),Q.push(`%"${j.trim()}"%`);let Z=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_specs
|
|
344
356
|
WHERE ${J.join(" AND ")}
|
|
345
|
-
ORDER BY created_at DESC LIMIT ?`).all(...Q,Z).map((j)=>M$(j))}updateHubSchedule($,J){let Q=this.getHubSchedule($);if(!Q)return;let Z
|
|
357
|
+
ORDER BY created_at DESC LIMIT ?`).all(...Q,Z).map((j)=>M$(j))}updateHubSchedule($,J){let Q=this.getHubSchedule($);if(!Q)return;let Z=$q(Q,J),W=this.upsertSpec({externalId:$,sourcePath:Q.sourcePath,triggerKind:"schedule",sourceHash:FB(Z),parseStatus:"valid",spec:_7(Z)});if(J.cronPattern!==void 0||J.enabled!==void 0)this.initializeScheduleNextRun(W.record.specId);return this.getSpec(W.record.specId)}deleteHubSchedule($){let J=this.getHubSchedule($);if(!J)return!1;return this.markSpecRemoved(J.specId),this.cancelQueuedRunsForSpec(J.specId),!0}enqueueHubScheduleRun($,J="manual"){let Q=this.getHubSchedule($);if(!Q||!Q.enabled||Q.removed||Q.parseStatus!=="valid")return;return this.enqueueRun({specId:Q.specId,specRevision:Q.revision,triggerKind:J,scheduledFor:_0()})}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
|
|
346
358
|
WHERE trigger_kind = 'event'
|
|
347
359
|
AND event_type = ?
|
|
348
360
|
AND enabled = 1
|
|
349
361
|
AND removed = 0
|
|
350
362
|
AND parse_status = 'valid'
|
|
351
|
-
ORDER BY created_at ASC`).all($).map((Q)=>M$(Q))}upsertSpec($){let J=_0(),Q=this.getSpecBySourcePath($.sourcePath),Z=$.spec,W={title:Z?.title??Q?.title??
|
|
363
|
+
ORDER BY created_at ASC`).all($).map((Q)=>M$(Q))}upsertSpec($){let J=_0(),Q=this.getSpecBySourcePath($.sourcePath),Z=$.spec,W={title:Z?.title??Q?.title??oM($.sourcePath),prompt:Z?.prompt,workspaceRoot:Z?.workspaceRoot,scheduleExpr:Z?.triggerKind==="schedule"?Z.schedule:void 0,timezone:Z?.triggerKind==="schedule"?Z.timezone:void 0,eventType:Z?.triggerKind==="event"?Z.event:void 0,filters:Z?.triggerKind==="event"?Z.filters:void 0,debounceSeconds:Z?.triggerKind==="event"?Z.debounceSeconds:void 0,dedupeWindowSeconds:Z?.triggerKind==="event"?Z.dedupeWindowSeconds:void 0,cooldownSeconds:Z?.triggerKind==="event"?Z.cooldownSeconds:void 0,mode:Z?.mode,systemPrompt:Z?.systemPrompt,providerId:Z?.modelSelection?.providerId,modelId:Z?.modelSelection?.modelId,maxIterations:Z?.maxIterations,timeoutSeconds:Z?.timeoutSeconds,maxParallel:Z&&"maxParallel"in Z?Z.maxParallel:void 0,tools:Z?.tools,notesDirectory:Z?.notesDirectory,extensions:Z?.extensions,source:Z?.source},j=$.parseStatus==="valid"&&(Z?.enabled??!0);if(!Q){let H=`cspec_${t6()}`;this.insertSpecRow(H,$,W,j,J);let B=this.getSpec(H);if(!B)throw Error("failed to insert cron_spec row");return{record:B,created:!0,revisionChanged:!0}}let f=Q.sourceHash!==$.sourceHash&&sM(Q,W,Q.enabled,j),Y=f?Q.revision+1:Q.revision;this.updateSpecRow(Q.specId,$,W,j,Y,J);let V=this.getSpec(Q.specId);if(!V)throw Error("failed to reload cron_spec after update");return{record:V,created:!1,revisionChanged:f}}insertSpecRow($,J,Q,Z,W){let j=J.spec;this.db.prepare(`INSERT INTO cron_specs (
|
|
352
364
|
spec_id, external_id, source_path, trigger_kind,
|
|
353
365
|
source_mtime_ms, source_hash, parse_status, parse_error,
|
|
354
366
|
enabled, removed, title, prompt, workspace_root,
|
|
@@ -359,7 +371,7 @@ ${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
|
|
|
359
371
|
tools_json, notes_directory, extensions_json, source,
|
|
360
372
|
tags_json, metadata_json, revision,
|
|
361
373
|
created_at, updated_at
|
|
362
|
-
) VALUES (${Array.from({length:36},()=>"?").join(",")})`).run($,J.externalId,J.sourcePath,J.triggerKind,J.sourceMtimeMs??null,J.sourceHash,J.parseStatus,J.parseError??null,Z?1:0,0,Q.title??"",Q.prompt??null,Q.workspaceRoot??null,Q.scheduleExpr??null,Q.timezone??null,Q.eventType??null,Q.filters?JSON.stringify(Q.filters):null,Q.debounceSeconds??null,Q.dedupeWindowSeconds??null,Q.cooldownSeconds??null,Q.mode??null,Q.systemPrompt??null,Q.providerId??null,Q.modelId??null,Q.maxIterations??null,Q.timeoutSeconds??null,Q.maxParallel??null,Q.tools?JSON.stringify(Q.tools):null,Q.notesDirectory??null,Q.extensions?JSON.stringify(Q.extensions):null,Q.source??null,j?.tags?JSON.stringify(j.tags):null,j?.metadata?JSON.stringify(j.metadata):null,1,W,W)}updateSpecRow($,J,Q,Z,W,j){let
|
|
374
|
+
) VALUES (${Array.from({length:36},()=>"?").join(",")})`).run($,J.externalId,J.sourcePath,J.triggerKind,J.sourceMtimeMs??null,J.sourceHash,J.parseStatus,J.parseError??null,Z?1:0,0,Q.title??"",Q.prompt??null,Q.workspaceRoot??null,Q.scheduleExpr??null,Q.timezone??null,Q.eventType??null,Q.filters?JSON.stringify(Q.filters):null,Q.debounceSeconds??null,Q.dedupeWindowSeconds??null,Q.cooldownSeconds??null,Q.mode??null,Q.systemPrompt??null,Q.providerId??null,Q.modelId??null,Q.maxIterations??null,Q.timeoutSeconds??null,Q.maxParallel??null,Q.tools?JSON.stringify(Q.tools):null,Q.notesDirectory??null,Q.extensions?JSON.stringify(Q.extensions):null,Q.source??null,j?.tags?JSON.stringify(j.tags):null,j?.metadata?JSON.stringify(j.metadata):null,1,W,W)}updateSpecRow($,J,Q,Z,W,j){let X=J.spec;this.db.prepare(`UPDATE cron_specs SET
|
|
363
375
|
external_id = ?, trigger_kind = ?,
|
|
364
376
|
source_mtime_ms = ?, source_hash = ?, parse_status = ?, parse_error = ?,
|
|
365
377
|
enabled = ?, removed = 0, title = ?, prompt = ?,
|
|
@@ -371,31 +383,31 @@ ${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
|
|
|
371
383
|
tools_json = ?, notes_directory = ?, extensions_json = ?, source = ?,
|
|
372
384
|
tags_json = ?, metadata_json = ?,
|
|
373
385
|
revision = ?, updated_at = ?
|
|
374
|
-
WHERE spec_id = ?`).run(J.externalId,J.triggerKind,J.sourceMtimeMs??null,J.sourceHash,J.parseStatus,J.parseError??null,Z?1:0,Q.title??"",Q.prompt??null,Q.workspaceRoot??null,Q.scheduleExpr??null,Q.timezone??null,Q.eventType??null,Q.filters?JSON.stringify(Q.filters):null,Q.debounceSeconds??null,Q.dedupeWindowSeconds??null,Q.cooldownSeconds??null,Q.mode??null,Q.systemPrompt??null,Q.providerId??null,Q.modelId??null,Q.maxIterations??null,Q.timeoutSeconds??null,Q.maxParallel??null,Q.tools?JSON.stringify(Q.tools):null,Q.notesDirectory??null,Q.extensions?JSON.stringify(Q.extensions):null,Q.source??null,
|
|
386
|
+
WHERE spec_id = ?`).run(J.externalId,J.triggerKind,J.sourceMtimeMs??null,J.sourceHash,J.parseStatus,J.parseError??null,Z?1:0,Q.title??"",Q.prompt??null,Q.workspaceRoot??null,Q.scheduleExpr??null,Q.timezone??null,Q.eventType??null,Q.filters?JSON.stringify(Q.filters):null,Q.debounceSeconds??null,Q.dedupeWindowSeconds??null,Q.cooldownSeconds??null,Q.mode??null,Q.systemPrompt??null,Q.providerId??null,Q.modelId??null,Q.maxIterations??null,Q.timeoutSeconds??null,Q.maxParallel??null,Q.tools?JSON.stringify(Q.tools):null,Q.notesDirectory??null,Q.extensions?JSON.stringify(Q.extensions):null,Q.source??null,X?.tags?JSON.stringify(X.tags):null,X?.metadata?JSON.stringify(X.metadata):null,W,j,$)}markSpecRemoved($){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(_0(),$)}updateSpecNextRunAt($,J){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(J??null,_0(),$)}updateSpecLastRunAt($,J){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(J,_0(),$)}updateLastMaterializedRunId($,J){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(J,_0(),$)}initializeScheduleNextRun($){let J=this.getSpec($);if(!J||J.triggerKind!=="schedule"||!J.enabled||!J.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let Q=new Date(D2(J.scheduleExpr,Date.now(),J.timezone)).toISOString();this.updateSpecNextRunAt($,Q)}materializeDueScheduleRun($){let J=$.nowMs,Q=new Date(J).toISOString();this.db.exec("BEGIN IMMEDIATE;");try{let Z=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($.specId);if(!Z)return this.db.exec("COMMIT;"),{queued:!1};let W=M$(Z);if(W.triggerKind!=="schedule"||!W.enabled||W.removed||W.parseStatus!=="valid"||!W.scheduleExpr)return this.db.exec("COMMIT;"),{queued:!1};let j=W.nextRunAt;if(!j){let Y=new Date(D2(W.scheduleExpr,J,W.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(Y,Q,W.specId),this.db.exec("COMMIT;"),{queued:!1,nextRunAt:Y}}if(new Date(j).getTime()>J)return this.db.exec("COMMIT;"),{queued:!1,nextRunAt:j};let X=`crun_${t6()}`,f;try{f=new Date(D2(W.scheduleExpr,J,W.timezone)).toISOString()}catch{f=void 0}return this.db.prepare(`INSERT INTO cron_runs (
|
|
375
387
|
run_id, spec_id, spec_revision, trigger_kind, status,
|
|
376
388
|
scheduled_for, trigger_event_id, attempt_count,
|
|
377
389
|
created_at, updated_at
|
|
378
|
-
) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(
|
|
390
|
+
) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(X,W.specId,W.revision,"schedule","queued",j,null,0,Q,Q),this.db.prepare(`UPDATE cron_specs SET
|
|
379
391
|
last_materialized_run_id = ?,
|
|
380
392
|
last_run_at = ?,
|
|
381
393
|
next_run_at = ?,
|
|
382
394
|
updated_at = ?
|
|
383
|
-
WHERE spec_id = ?`).run(
|
|
395
|
+
WHERE spec_id = ?`).run(X,Q,f??null,Q,W.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(X),nextRunAt:f}}catch(Z){throw this.db.exec("ROLLBACK;"),Z}}getRun($){let J=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get($);return J?z7(J):void 0}insertEventLog($,J={}){let Q=_0(),Z=J.receivedAtIso??Q,W=$.eventId.trim();if(!W)throw Error("automation event requires eventId");let j=$.eventType.trim();if(!j)throw Error("automation event requires eventType");let X=$.source.trim();if(!X)throw Error("automation event requires source");let f=$.occurredAt.trim()||Z,Y=this.db.prepare(`INSERT OR IGNORE INTO cron_event_log (
|
|
384
396
|
event_id, event_type, source, subject,
|
|
385
397
|
occurred_at, received_at, workspace_root, dedupe_key,
|
|
386
398
|
payload_json, attributes_json, processing_status,
|
|
387
399
|
matched_spec_count, queued_run_count, suppressed_count,
|
|
388
400
|
error, created_at, updated_at
|
|
389
|
-
) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(W,j,
|
|
401
|
+
) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(W,j,X,$.subject?.trim()||null,f,Z,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,KB($.payload),KB($.attributes),"received",0,0,0,null,Q,Q).changes??0,V=this.getEventLog(W);if(!V)throw Error("failed to insert cron_event_log row");return{record:V,created:Y===1}}getEventLog($){let J=this.db.prepare("SELECT * FROM cron_event_log WHERE event_id = ?").get($);return J?AB(J):void 0}listEventLogs($={}){let J=[],Q=[];if($.eventType)J.push("event_type = ?"),Q.push($.eventType);if($.source)J.push("source = ?"),Q.push($.source);if($.processingStatus)J.push("processing_status = ?"),Q.push($.processingStatus);let Z=J.length>0?`WHERE ${J.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_event_log ${Z}
|
|
390
402
|
ORDER BY received_at DESC, created_at DESC
|
|
391
|
-
LIMIT ?`).all(...Q,W).map((
|
|
403
|
+
LIMIT ?`).all(...Q,W).map((X)=>AB(X))}updateEventLogProcessing($,J){return(this.db.prepare(`UPDATE cron_event_log SET
|
|
392
404
|
processing_status = ?,
|
|
393
405
|
matched_spec_count = COALESCE(?, matched_spec_count),
|
|
394
406
|
queued_run_count = COALESCE(?, queued_run_count),
|
|
395
407
|
suppressed_count = COALESCE(?, suppressed_count),
|
|
396
408
|
error = ?,
|
|
397
409
|
updated_at = ?
|
|
398
|
-
WHERE event_id = ?`).run(J.status,J.matchedSpecCount??null,J.queuedRunCount??null,J.suppressedCount??null,J.error??null,_0(),$).changes??0)===1}listRuns($={}){let J=[],Q=[];if($.specId)J.push("spec_id = ?"),Q.push($.specId);if($.status){let
|
|
410
|
+
WHERE event_id = ?`).run(J.status,J.matchedSpecCount??null,J.queuedRunCount??null,J.suppressedCount??null,J.error??null,_0(),$).changes??0)===1}listRuns($={}){let J=[],Q=[];if($.specId)J.push("spec_id = ?"),Q.push($.specId);if($.status){let X=Array.isArray($.status)?$.status:[$.status];if(X.length>0){let f=X.map(()=>"?").join(",");J.push(`status IN (${f})`);for(let Y of X)Q.push(Y)}}let Z=J.length>0?`WHERE ${J.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${Z} ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((X)=>z7(X))}hasRecentEventRunForDedupe($){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
|
|
399
411
|
INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
|
|
400
412
|
WHERE r.spec_id = ?
|
|
401
413
|
AND r.trigger_kind = 'event'
|
|
@@ -413,7 +425,7 @@ ${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
|
|
|
413
425
|
AND r.status = 'queued'
|
|
414
426
|
AND e.dedupe_key = ?
|
|
415
427
|
ORDER BY COALESCE(r.scheduled_for, r.created_at) DESC
|
|
416
|
-
LIMIT 1`).get($.specId,$.dedupeKey);return J?
|
|
428
|
+
LIMIT 1`).get($.specId,$.dedupeKey);return J?z7(J):void 0}updateQueuedEventRunForDebounce($){let J=_0();if((this.db.prepare(`UPDATE cron_runs SET
|
|
417
429
|
trigger_event_id = ?,
|
|
418
430
|
scheduled_for = ?,
|
|
419
431
|
updated_at = ?
|
|
@@ -422,12 +434,12 @@ ${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
|
|
|
422
434
|
AND status = 'queued'`).run($.triggerEventId,$.scheduledFor,J,$.runId).changes??0)!==1)return;return this.getRun($.runId)}hasOneOffRunForRevision($,J){return!!this.db.prepare(`SELECT run_id FROM cron_runs
|
|
423
435
|
WHERE spec_id = ? AND spec_revision = ?
|
|
424
436
|
AND trigger_kind = 'one_off'
|
|
425
|
-
LIMIT 1`).get($,J)}enqueueRun($){let J=`crun_${
|
|
437
|
+
LIMIT 1`).get($,J)}enqueueRun($){let J=`crun_${t6()}`,Q=_0();this.db.prepare(`INSERT INTO cron_runs (
|
|
426
438
|
run_id, spec_id, spec_revision, trigger_kind, status,
|
|
427
439
|
scheduled_for, trigger_event_id, attempt_count,
|
|
428
440
|
created_at, updated_at
|
|
429
441
|
) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(J,$.specId,$.specRevision,$.triggerKind,"queued",$.scheduledFor??null,$.triggerEventId??null,0,Q,Q),this.updateLastMaterializedRunId($.specId,J);let Z=this.getRun(J);if(!Z)throw Error("failed to insert cron_run row");return Z}cancelQueuedRunsForSpec($){return this.db.prepare(`UPDATE cron_runs SET status = 'cancelled', updated_at = ?
|
|
430
|
-
WHERE spec_id = ? AND status = 'queued'`).run(_0(),$).changes??0}claimDueRuns($){let J=$.nowIso,Q=Math.max(1000,Math.floor($.leaseMs)),Z=new Date(new Date(J).getTime()+Q).toISOString(),W=Math.max(1,Math.floor($.limit??25)),j=[];this.db.exec("BEGIN IMMEDIATE;");try{let
|
|
442
|
+
WHERE spec_id = ? AND status = 'queued'`).run(_0(),$).changes??0}claimDueRuns($){let J=$.nowIso,Q=Math.max(1000,Math.floor($.leaseMs)),Z=new Date(new Date(J).getTime()+Q).toISOString(),W=Math.max(1,Math.floor($.limit??25)),j=[];this.db.exec("BEGIN IMMEDIATE;");try{let X=this.db.prepare(`SELECT * FROM cron_runs
|
|
431
443
|
WHERE (
|
|
432
444
|
status = 'queued'
|
|
433
445
|
OR (
|
|
@@ -439,7 +451,7 @@ ${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
|
|
|
439
451
|
)
|
|
440
452
|
AND (scheduled_for IS NULL OR scheduled_for <= ?)
|
|
441
453
|
ORDER BY COALESCE(scheduled_for, created_at) ASC
|
|
442
|
-
LIMIT ?`).all(J,J,W);for(let
|
|
454
|
+
LIMIT ?`).all(J,J,W);for(let f of X){let Y=s(f.run_id);if(!Y)continue;let V=`cclaim_${t6()}`;if((this.db.prepare(`UPDATE cron_runs SET
|
|
443
455
|
status = 'running',
|
|
444
456
|
claim_token = ?,
|
|
445
457
|
claim_started_at = ?,
|
|
@@ -460,7 +472,7 @@ ${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
|
|
|
460
472
|
AND claim_until_at <= ?
|
|
461
473
|
AND completed_at IS NULL
|
|
462
474
|
)
|
|
463
|
-
)`).run(V,J,Z,J,J,Y,J).changes??0)!==1)continue;let B=this.getRun(Y);if(!B)continue;j.push({run:B,claimToken:V,claimUntilAt:Z})}this.db.exec("COMMIT;")}catch(
|
|
475
|
+
)`).run(V,J,Z,J,J,Y,J).changes??0)!==1)continue;let B=this.getRun(Y);if(!B)continue;j.push({run:B,claimToken:V,claimUntilAt:Z})}this.db.exec("COMMIT;")}catch(X){throw this.db.exec("ROLLBACK;"),X}return j}renewClaim($,J,Q){return(this.db.prepare(`UPDATE cron_runs SET claim_until_at = ?, updated_at = ?
|
|
464
476
|
WHERE run_id = ? AND claim_token = ?`).run(Q,_0(),$,J).changes??0)===1}completeRun($,J){let Q=J.completedAtIso??_0(),Z=J.claimToken?"WHERE run_id = ? AND claim_token = ?":"WHERE run_id = ?";return(this.db.prepare(`UPDATE cron_runs SET
|
|
465
477
|
status = ?,
|
|
466
478
|
session_id = COALESCE(?, session_id),
|
|
@@ -483,40 +495,40 @@ ${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
|
|
|
483
495
|
error = ?,
|
|
484
496
|
scheduled_for = COALESCE(?, scheduled_for),
|
|
485
497
|
updated_at = ?
|
|
486
|
-
WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,J,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,J){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(J,_0(),$)}attachReportPathToRun($,J){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(J,_0(),$)}}class
|
|
487
|
-
`).trim()}function
|
|
488
|
-
`)[0]??W);return
|
|
489
|
-
`,{encoding:"utf8",mode:384}),await
|
|
490
|
-
`,"utf8");try{return await J()}finally{await RB(Q)}}catch(W){if((W instanceof Error&&"code"in W?String(W.code):"")!=="EEXIST")throw W;let f=await Tq(Q),X=f?Date.now()-Date.parse(f.acquiredAt):UB+1;if(!f||!Lq(f.pid)||X>UB){await RB(Q);continue}if(Date.now()>=Z)throw Error(`Timed out waiting for hub startup lock ${Q}`);await _q(Uq)}}async function p1($,J){try{let Q=await fetch(J?.authToken?PW($):p9($),{headers:J?.authToken?{authorization:`Bearer ${J.authToken}`}:void 0});if(!Q.ok)return;let Z=await Q.json();if(typeof Z.protocolVersion!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string")return;return{protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((W)=>typeof W==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,host:Z.host,port:Z.port,url:Z.url,hubId:typeof Z.hubId==="string"?Z.hubId:void 0,authToken:typeof Z.authToken==="string"?Z.authToken:void 0,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:typeof Z.startedAt==="string"?Z.startedAt:void 0,updatedAt:typeof Z.updatedAt==="string"?Z.updatedAt:void 0}}catch{return}}function j1($,J,Q="/hub"){return new URL(`ws://${$}:${J}${Q}`).toString()}function p9($){let J=new URL($);return J.protocol=J.protocol==="wss:"?"https:":"http:",J.pathname="/health",J.search="",J.toString()}function PW($){let J=new URL(p9($));return J.pathname="/status",J.toString()}function MB($){return Aq($)}import{CLINE_HUB_DEV_PORT as Mq,CLINE_HUB_PORT as qq,resolveClineBuildEnv as Pq}from"@cline/shared";var Nq="CLINE_HUB_HOST",wq="CLINE_HUB_PORT",Sq="CLINE_HUB_PATHNAME",NW="127.0.0.1",wW=qq,SW="/hub";function qB($){return Pq($)==="development"?Mq:wW}function CW($={}){return($.env??process.env)[Nq]?.trim()||NW}function b8($={}){let Q=($.env??process.env)[wq]?.trim();if(!Q)return qB($);let Z=Number.parseInt(Q,10);if(!Number.isInteger(Z)||Z<1||Z>65535)return qB($);return Z}function yW($={}){return($.env??process.env)[Sq]?.trim()||SW}function i0($={},J={}){return{host:$.host??CW(J),port:$.port??b8(J),pathname:$.pathname??yW(J)}}import{join as Cq}from"node:path";var yq="shared:cline",Eq="CLINE_HUB_DISCOVERY_PATH",bq="hub-production";function PB($){let J=m1($.trim());return l1(`workspace:${J||$.trim()}`)}function E0($=yq){return l1($)}function n0(){return{ownerId:bq,discoveryPath:process.env[Eq]?.trim()||Cq(R2(),"locks","hub","production.json")}}var pq=8000,rq=200,iq=3000,nq=100,aq=[100,250,500,1000,2000],sq="--cline-hub-daemon";function oq($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function tq(){try{let $=vq(R2(),"logs","hub-daemon.log");return Iq(mq($),{recursive:!0}),{fd:xq($,"a"),logPath:$}}catch{return}}function CB(){return SB()==="production"?n0():E0()}function z2($){return dq($).compatible}function NB($,J,Q){if(!J||J.url!==Q)return $;return{...$,authToken:$.authToken??J.authToken,pid:$.pid??J.pid}}async function L2($,J){try{return await p1($,{authToken:J})}catch{return}}async function eq($,J){let Q=Date.now()+J;while(Date.now()<Q){if(!(await L2($))?.url)return!0;await new Promise((W)=>setTimeout(W,nq))}return!1}async function r9($,J){if(await JJ($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await eq($.url,iq);return await y0(J).catch(()=>{return}),Q}async function $J($,J){if(z2($))return!0;return r9($,J)}async function yB($){if(SB()!=="production")return;let J=E0();if(J.discoveryPath===$.discoveryPath)return;let Q=await A0(J.discoveryPath);if(Q?.url)await r9(Q,J.discoveryPath);else await y0(J.discoveryPath).catch(()=>{return})}function $P(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return cq(new URL(`./entry.${$}`,import.meta.url))}function JP($,J){let Q=$P(),Z=process.execPath?.trim();if(!Z)throw Error("unable to resolve runtime executable for hub daemon");let W=gq(Z).toLowerCase().includes("bun"),j=Q.startsWith("/$bunfs/"),f=W&&Q.toLowerCase().endsWith(".ts"),X=j?[sq]:[...f?["--conditions=development"]:[],Q];return{launcher:Z,args:[...X,"--cwd",$,...oq(J)],cwd:$,env:{...lq(process.env),CLINE_NO_INTERACTIVE:"1",[uq]:"1"}}}function QP($){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 EW($,J={}){if(wB())return;let Q=JP($,J),Z=tq();try{hq(Q.launcher,Q.args,{detached:!0,stdio:Z?["ignore",Z.fd,Z.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(Z)kq(Z.fd)}}async function h8($,J={}){for(let Q=0;;Q++)try{EW($,J);return}catch(Z){let W=aq[Q];if(!QP(Z)||W===void 0)throw Z;await new Promise((j)=>setTimeout(j,W))}}function i9($,J={}){if(wB())return;let Q=CB(),Z=i0(J),W=j1(Z.host,Z.port,Z.pathname),j=J.allowPortFallback===!0&&Z.port!==0;yB(Q).catch(()=>{return}).then(()=>A0(Q.discoveryPath)).then(async(f)=>{let X=!1;if(f?.url)if(!f.authToken){if(X=!0,!await r9(f,Q.discoveryPath)&&!j)return}else{let H=await L2(f.url,f.authToken);if(H?.url&&z2(H)&&await G1(H.url,{authToken:f.authToken}))return;if(H?.url)await $J({...H,authToken:f.authToken},Q.discoveryPath);else await y0(Q.discoveryPath).catch(()=>{return})}let Y=await L2(W);if(Y?.url){if(z2(Y)){if(!j||!X)return}else if(!await $J({...Y,authToken:void 0},Q.discoveryPath)&&!j)return}let V=j?{...Z,port:0}:Z;await h8($,V)}).catch(()=>{})}async function EB($,J={}){let Q=CB(),Z=J.host!==void 0||J.port!==void 0||J.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=i0(J),j=j1(W.host,W.port,W.pathname),f=(K)=>{if(!Z)P$(K.url,K.authToken);return K};await yB(Q).catch(()=>{return});let X=await A0(Q.discoveryPath),Y=!1;if(X?.url){let K=X.authToken;if(!K)Y=!0,await r9(X,Q.discoveryPath);else{let G=await L2(X.url,K);if(G?.url&&z2(G)&&await G1(G.url,{authToken:K}))return f({url:G.url,authToken:K});if(G?.url)await $J({...G,authToken:K},Q.discoveryPath);else await y0(Q.discoveryPath).catch(()=>{return})}}let V=await L2(j);if(V?.url){let K=NB(V,X,j);if(z2(V))throw Error(`A compatible Cline Hub is already running at ${j}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${Y?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`);if(!await $J(K,Q.discoveryPath)&&J.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is already running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let B=J.allowPortFallback===!0&&W.port!==0?{...W,port:0}:W;await h8($,B);let A=Date.now()+pq;while(Date.now()<A){let K=await A0(Q.discoveryPath);if(K?.url&&K.authToken){let R=await L2(K.url,K.authToken);if(R?.url&&z2(R)&&await G1(R.url,{authToken:K.authToken}))return f({url:R.url,authToken:K.authToken})}let G=await L2(j);if(G?.url&&!z2(G)){let R=NB(G,K,j);if(!await $J(R,Q.discoveryPath)&&J.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is still running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((R)=>setTimeout(R,rq))}throw Error("Timed out waiting for detached hub startup.")}function n9(){return jP()==="production"?n0():E0()}function XP(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function xB($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((J)=>Buffer.from(J))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return xB($.data);return String($)}function YP($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function bB($){let J=$,Q=YP(J.reason);return new q0("hub_connection_closed",J.code||Q?`Hub connection closed (code=${J.code??0}${Q?`, reason=${Q}`:""})`:bW,{closeCode:J.code,closeReason:Q||void 0})}function VP($,J){if($ instanceof q0)return $;if($ instanceof Error)return new q0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new q0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new q0("hub_connect_failed",Q);let Z=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new q0("hub_connect_failed",Z?`Failed to connect to hub at ${J.toString()} (${Z} event before socket open).`:`Failed to connect to hub at ${J.toString()}.`)}var HP=8000,BP=200,hB="*",kB=8000,AP="cline-hub-auth.",gB=new Map,mB=new Set,KP=3000,GP=3000,FP=100,bW="Hub connection closed",DP=250,UP=5000,IB=0.5;class q0 extends Error{code;details;constructor($,J,Q){super(J);this.code=$;this.details=Q;this.name="HubTransportError"}}function IW($){return $ instanceof q0}class k8 extends Error{command;code;constructor($,J,Q){super(Q);this.command=$;this.code=J;this.name="HubCommandError"}}function a9($,J){return $ instanceof k8&&$.code==="hub_command_timeout"&&(J===void 0||$.command===J)}function vB($){let J=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),J)return J;let Q=xW($.toString());return Q?gB.get(Q):void 0}function RP($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function xW($){if(!RP($))return;let J=new URL(N$($));return J.search="",J.hash="",J.toString()}function hW($){let J=xW($);return!!J&&mB.has(J)}function P$($,J){let Q=xW($);if(Q){if(mB.add(Q),J?.trim())gB.set(Q,J)}return $}class f1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new q0("hub_connection_closed",bW);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),J=this.options.authToken?.trim()||vB($);$.hash="";let Z=new(XP())($.toString(),J?[`${AP}${J}`]:void 0);this.socket=Z;let W=!1;this.connectPromise=new Promise((j,f)=>{let X=!1,Y=setTimeout(()=>{if(X)return;X=!0,W=!0,this.lastCloseError=new q0("hub_connect_timeout",`Timed out connecting to hub after ${kB}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Z.close()}catch{}f(this.lastCloseError)},kB);Z.addEventListener("open",()=>{if(X)return;X=!0,clearTimeout(Y),j()}),Z.addEventListener("error",(V)=>{if(X)return;X=!0,clearTimeout(Y),this.lastCloseError=VP(V,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,f(this.lastCloseError)}),Z.addEventListener("close",(V)=>{if(X)return;if(X=!0,clearTimeout(Y),!W)this.lastCloseError=bB(V),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,f(this.lastCloseError)})}),Z.addEventListener("message",(j)=>{this.handleFrame(JSON.parse(xB(j)))}),Z.addEventListener("close",(j)=>{if(this.socket!==Z)return;if(!W)this.lastCloseError=bB(j),this.sawSocketClose=!0;this.registered=!1;for(let f of this.pendingReplies.values())f.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let j of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(j));this.reconnectAttempt=0}subscribe($,J){let Q=J?.sessionId?.trim()||void 0,Z={listener:$,sessionId:Q};return this.listeners.add(Z),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(Z))return;this.adjustSubscriptionCount(Q,-1)}}async command($,J,Q,Z){let W=0,j=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,J,Q,Z)}catch(f){if(!j||W>=1||!await this.recoverLocalHubTransport(f))throw f;W+=1}}async commandOnce($,J,Q,Z){await this.connect();let W=ZP("hubreq_"),j=fP($,Z?.timeoutMs),f=new Promise((Y,V)=>{let H=j===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(W))return;V(new k8($,"hub_command_timeout",`Hub command ${$} timed out after ${j}ms (hub=${this.currentUrl}, requestId=${W}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},j);this.pendingReplies.set(W,{resolve:(B)=>{if(H)clearTimeout(H);Y(B)},reject:(B)=>{if(H)clearTimeout(H);V(B)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:W,clientId:this.clientId,sessionId:Q,timeoutMs:j,payload:J}})}catch(Y){throw this.pendingReplies.delete(W),Y}let X=await f;if(!X.ok){if(X.error?.code===G2){let Y=Q??(typeof J?.sessionId==="string"?J.sessionId:void 0);throw new u1(Y,X.error.message)}throw new k8($,X.error?.code,X.error?.message??`Hub command ${$} failed`)}return X}async recoverLocalHubTransport($){if(!hW(this.currentUrl)||!IW($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let J=await _2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!J)return!1;return this.currentUrl=J,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(DP*2**this.reconnectAttempt,UP),J=Math.round($*(1-IB)+Math.random()*$*IB);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},J)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!hW(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await _2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if($){this.currentUrl=$,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let $=this.socket;if(this.closedByClient=!0,this.clearReconnectTimer(),this.registered=!1,!$)return;this.lastCloseError=new q0("hub_connection_closed",bW),this.sawSocketClose=!1;for(let J of this.pendingReplies.values())J.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new q0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,J){this.sendFrame({kind:$,clientId:this.clientId,...J?{sessionId:J}:{}})}adjustSubscriptionCount($,J){let Q=this.subscriptionKeyForSessionId($),Z=(this.subscriptionCounts.get(Q)??0)+J;if(Z<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(J<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,Z),J>0&&Z===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??hB}subscriptionSessionIdFromKey($){return $===hB?void 0:$}handleFrame($){switch($.kind){case"reply":{let J=$.envelope.requestId;if(!J)return;let Q=this.pendingReplies.get(J);if(!Q)return;this.pendingReplies.delete(J),Q.resolve($.envelope);return}case"event":for(let J of this.listeners){if(J.sessionId&&J.sessionId!==$.envelope.sessionId?.trim())continue;J.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function N$($){let J=new URL($);if(J.protocol==="http:")J.protocol="ws:";else if(J.protocol==="https:")J.protocol="wss:";return J.toString()}async function G1($,J){let Q=new f1({url:$,authToken:J?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function kW($,J){let Q=N$($),Z=await p1(Q,{authToken:J?.authToken});if(!Z)return{status:"unreachable",url:Q};if(!WP(Z).compatible)return{status:"protocol_mismatch",url:Q};if(J?.verifyConnection===!0&&!await G1(Q,{workspaceRoot:J.workspaceRoot,cwd:J.cwd,authToken:J.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function zP($){let J=Date.now()+HP;while(Date.now()<J){let Q=await A0($.discoveryPath);if(Q?.url){let Z=await kW(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(Z.status==="compatible")return P$(Z.url,Q.authToken)}await new Promise((Z)=>setTimeout(Z,BP))}return}async function LP($){let J=Date.now()+GP;while(Date.now()<J){if(!(await p1($).catch(()=>{return}))?.url)return!0;await new Promise((Z)=>setTimeout(Z,FP))}return!1}function _P($,J){try{return N$($)===N$(J)}catch{return!1}}function OP($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let Z=Q;if(Z.status==="running"||Z.status==="idle"||Z.status==="pending")return!0;return Array.isArray(Z.participants)&&Z.participants.length>0})}async function TP($,J,Q){let Z=new f1({url:$,authToken:J,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let W=await Z.command("session.list",{limit:500},void 0,{timeoutMs:KP});return!OP(W.payload)}catch{return!1}finally{await Z.dispose().catch(()=>{return})}}async function QJ($={}){if($.endpoint?.trim()){let W=await kW($.endpoint);return W.status==="compatible"?W.url:void 0}let J=n9(),Q=await A0(J.discoveryPath);if(!Q?.url)return;let Z=await kW(Q.url,{authToken:Q.authToken});if(Z.status==="compatible")return P$(Z.url,Q.authToken);if(Z.status==="protocol_mismatch")await y0(J.discoveryPath).catch(()=>{return});return}async function _2($={}){let J=await QJ($);if(J&&await G1(J,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return J;if($.endpoint?.trim())return;let Q=n9();return await h8($.workspaceRoot??process.cwd()),await zP(Q)}async function JJ($,J){let Q=new URL($),Z=J?.trim()||vB(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:Z?{authorization:`Bearer ${Z}`}:void 0})).ok}async function gW($=n9()){let J=await A0($.discoveryPath);if(!J?.url)return!1;try{if(await JJ(J.url,J.authToken))return!0}catch{}return!1}async function s9($){if(!hW($.url))return;let J=n9(),Q=await A0(J.discoveryPath);if(!Q?.url||!_P(Q.url,$.url))return;if(!await TP(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await gW())return;if(!await LP(Q.url))return;return await y0(J.discoveryPath).catch(()=>{return}),await _2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var eB={};w(eB,{HubRuntimeHost:()=>r1});import{captureSdkError as uB,createSessionId as dB,HUB_CHECKPOINT_CAPABILITY as NP,HUB_COMPACTION_CAPABILITY as wP,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as SP,HUB_HOOK_CAPABILITY_PREFIX as CP,HUB_MISTAKE_LIMIT_CAPABILITY as yP,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as EP,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as bP,isHubToolExecutorName as hP}from"@cline/shared";var cB={};w(cB,{createCoreSessionSnapshot:()=>F1,coreSessionSnapshotToRecord:()=>o9});function MP($){return $?JSON.parse(JSON.stringify($)):void 0}function qP($){return $?JSON.parse(JSON.stringify($)):void 0}function PP($){let J=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,Z=(Array.isArray(J?.history)?J.history:[]).filter((f)=>!!f&&typeof f==="object"&&!Array.isArray(f)).flatMap((f)=>{let X=typeof f.ref==="string"?f.ref.trim():"",Y=Number(f.createdAt),V=Number(f.runCount);if(!X||!Number.isFinite(Y)||!Number.isInteger(V))return[];return[{ref:X,createdAt:Y,runCount:V,...f.kind==="stash"||f.kind==="commit"?{kind:f.kind}:{}}]}),W=Z.at(-1),j=$?.checkpointEnabled===!0?!0:void 0;if(!j&&Z.length===0)return;return{...j?{enabled:j}:{},...W?{latest:W}:{},history:Z}}function F1($){let{session:J}=$,Q=MP(J.metadata);return{version:1,sessionId:J.sessionId,source:J.source,status:J.status,createdAt:J.startedAt,updatedAt:J.updatedAt,endedAt:J.endedAt??null,exitCode:J.exitCode??null,interactive:J.interactive,workspace:{cwd:J.cwd,root:J.workspaceRoot},model:{providerId:J.provider,modelId:J.model},capabilities:{enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams},lineage:{...J.parentSessionId?{parentSessionId:J.parentSessionId}:{},...J.parentAgentId?{parentAgentId:J.parentAgentId}:{},...J.agentId?{agentId:J.agentId}:{},...J.conversationId?{conversationId:J.conversationId}:{},isSubagent:J.isSubagent},...J.teamName?{team:{name:J.teamName}}:{},...J.prompt?{prompt:J.prompt}:{},...Q?{metadata:Q}:{},...J.messagesPath?{artifacts:{messagesPath:J.messagesPath}}:{},...$.messages?{messages:qP($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Z=PP(Q);return Z?{checkpoint:Z}:{}})()}}function o9($){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 I8($){if(!$)return;return JSON.parse(JSON.stringify($))}var kP=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function lB($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function pB($){if(!$)return;let{userInstructionService:J,...Q}=$;return JSON.parse(JSON.stringify(Q))}function rB($){let J=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof J.agentId==="string"?J.agentId:"",conversationId:typeof J.conversationId==="string"?J.conversationId:"",iteration:typeof J.iteration==="number"?J.iteration:0,metadata:J.metadata&&typeof J.metadata==="object"&&!Array.isArray(J.metadata)?J.metadata:void 0}}function O2($,J,Q){$.manifest.push(J),$.handlers.set(J.capabilityName,Q)}function iB($,J){let Q={manifest:[],handlers:new Map};for(let W of Object.keys(J.toolExecutors??{}).filter(hP)){let j=J.toolExecutors?.[W];if(typeof j!=="function")continue;O2(Q,{kind:"toolExecutor",executor:W,capabilityName:`${EP}${W}`},async({payload:f,abortSignal:X})=>{let Y=Array.isArray(f.args)?[...f.args]:[],V={...rB(f.context),signal:X};return{result:await j(...Y,V)}})}for(let W of $?.extraTools??[])O2(Q,{kind:"tool",name:W.name,description:W.description,inputSchema:I8(W.inputSchema)??{},...W.lifecycle?{lifecycle:I8(W.lifecycle)}:{},capabilityName:`${SP}${W.name}`},async({payload:j,abortSignal:f,progress:X})=>{let Y={...rB(j.context),signal:f};return{result:await W.execute(j.input,{...Y,emitUpdate:(H)=>{X({update:H})}})}});let Z=$?.hooks;if(Z)for(let W of kP){let j=Z[W];if(typeof j!=="function")continue;O2(Q,{kind:"hook",name:W,capabilityName:`${CP}${W}`},async({payload:f})=>({control:await j(f.context)}))}if($?.compaction?.compact){let W=$.compaction.compact;O2(Q,{kind:"compaction",capabilityName:wP,config:lB($.compaction)},async({payload:j})=>({result:await W(j.context)}))}if($?.checkpoint?.createCheckpoint){let W=$.checkpoint.createCheckpoint;O2(Q,{kind:"checkpoint",capabilityName:NP,config:lB($.checkpoint)},async({payload:j})=>({result:await W(j.context)}))}if($?.onConsecutiveMistakeLimitReached){let W=$.onConsecutiveMistakeLimitReached;O2(Q,{kind:"mistakeLimit",capabilityName:yP},async({payload:j})=>({result:await W(j.context)}))}if($?.userInstructionService){let W=$.userInstructionService;O2(Q,{kind:"userInstructionService",capabilityName:bP},async()=>{return await W.start().catch(()=>{}),{snapshot:{records:{skill:W.listRecords("skill"),rule:W.listRecords("rule"),workflow:W.listRecords("workflow")},runtimeCommands:W.listRuntimeCommands()}}})}return Q}function oB($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let J=$.message;if(typeof J==="string"&&J.trim())return J.trim()}return}function IP($){return oB($)??"Capability request was cancelled."}function xP($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function gP($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function mP($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$,Q=typeof J.inputTokens==="number"?J.inputTokens:void 0,Z=typeof J.outputTokens==="number"?J.outputTokens:void 0;if(Q===void 0||Z===void 0)return;return{inputTokens:Q,outputTokens:Z,cacheReadTokens:typeof J.cacheReadTokens==="number"?J.cacheReadTokens:0,cacheWriteTokens:typeof J.cacheWriteTokens==="number"?J.cacheWriteTokens:0,totalCost:typeof J.totalCost==="number"?J.totalCost:0}}function nB($){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 mW($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function w$($,J){return mW($?.[J])??0}function vP($){let J=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,Z=$?.agent&&typeof $.agent==="object"?$.agent:void 0,W=Z?.teamRole==="teammate"||Z?.teamRole==="lead"?Z.teamRole:void 0;return{event:{type:"usage",agentId:typeof Z?.agentId==="string"?Z.agentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,inputTokens:w$(J,"inputTokens"),outputTokens:w$(J,"outputTokens"),cacheReadTokens:w$(J,"cacheReadTokens"),cacheWriteTokens:w$(J,"cacheWriteTokens"),cost:mW(J?.totalCost),totalInputTokens:w$(Q,"inputTokens"),totalOutputTokens:w$(Q,"outputTokens"),totalCacheReadTokens:w$(Q,"cacheReadTokens"),totalCacheWriteTokens:w$(Q,"cacheWriteTokens"),totalCost:mW(Q?.totalCost)},teamAgentId:typeof Z?.teamAgentId==="string"?Z.teamAgentId:void 0,teamRole:W}}function cP($){let J=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??J?.finishReason,Z=gP(Q)?Q:Q==="failed"?"error":"completed",W=mP($?.usage??J?.usage);return{type:"done",reason:Z,text:typeof $?.text==="string"?$.text:typeof J?.text==="string"?J.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof J?.iterations==="number"?J.iterations:0,usage:W}}function t9($,J){return $.error?.message??`hub command failed: ${J}`}function ZJ($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function tB($){let J=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof J?.parentSessionId==="string"?J.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof J?.agentId==="string"?J.agentId:void 0),parentAgentId:typeof J?.parentAgentId==="string"?J.parentAgentId:void 0,conversationId:typeof J?.conversationId==="string"?J.conversationId:void 0,isSubagent:typeof J?.isSubagent==="boolean"?J.isSubagent:!1,source:typeof J?.source==="string"?J.source:U0.CORE,pid:typeof J?.pid==="number"?J.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:ZJ($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:ZJ($.status)==="completed"?0:ZJ($.status)==="failed"?1:void 0,status:ZJ($.status),interactive:J?.interactive===!0,provider:typeof J?.provider==="string"?J.provider:"hub",model:typeof J?.model==="string"?J.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof J?.teamName==="string"?J.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??J?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??J?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??J?.enableTeams===!0,prompt:typeof J?.prompt==="string"?J.prompt:void 0,metadata:J,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof J?.messagesPath==="string"?J.messagesPath:void 0,hookPath:typeof J?.hookPath==="string"?J.hookPath:void 0}}function S$($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$;return J.version===1&&typeof J.sessionId==="string"?JSON.parse(JSON.stringify(J)):void 0}function uP($){let J=S$($?.snapshot);if(J)return o9(J);let Q=$?.session;return Q?tB(Q):void 0}function aB($,J,Q){let Z=Q?.workspaceRoot?.trim()||J.config.workspaceRoot||J.config.cwd;return S0.parse({version:1,session_id:$,source:J.source??U0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:ZJ(Q?.status),interactive:J.interactive===!0,provider:J.config.providerId,model:J.config.modelId,cwd:Q?.cwd?.trim()||J.config.cwd,workspace_root:Z,team_name:J.config.teamName,enable_tools:J.config.enableTools,enable_spawn:J.config.enableSpawnAgent,enable_teams:J.config.enableAgentTeams,prompt:J.prompt?.trim()||void 0,metadata:J.sessionMetadata&&Object.keys(J.sessionMetadata).length>0?J.sessionMetadata:void 0})}function sB($,J){return S0.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??J.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class r1{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new o6;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,J){this.clientContext=J,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd},this.defaultCapabilities=L0($.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 f1({...this.clientOptions,url:$})}async replaceClient($){let J=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(J.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!a9($,"session.create"))return!1;let J=await s9({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!J)return!1;return await this.replaceClient(J),!0}registerPlannedSession($,J,Q){if(this.sessionCapabilities.set($,J),Q.size>0)this.sessionClientContributionHandlers.set($,Q);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let J=this.resolveCapabilities($),Q=iB($.localRuntime,J),Z=$.config.sessionId?.trim()||dB(),W=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:I8({...$.config,sessionId:Z}),metadata:{...$.sessionMetadata??{},source:$.source??U0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:I8($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(Z,J,Q.handlers);let j;try{j=await W()}catch(V){if(this.cleanupPlannedSession(Z),await this.recoverLocalHubStartupDeadlock(V)){this.registerPlannedSession(Z,J,Q.handlers);try{j=await W()}catch(H){throw this.cleanupPlannedSession(Z),H}}else throw V}let f=S$(j.payload?.snapshot),X=j.payload?.session,Y=(f?.sessionId??X?.sessionId)?.trim();if(!Y)throw this.cleanupPlannedSession(Z),Error("Hub runtime did not return a session id.");if(Y!==Z)this.cleanupPlannedSession(Z),this.registerPlannedSession(Y,J,Q.handlers);return{sessionId:Y,manifest:f?sB(f,$):aB(Y,$,X),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let J=$.sessionId.trim();if(!J)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let Z=$.start,W=Z?this.resolveCapabilities(Z):void 0,j=Z?iB(Z.localRuntime,W??{}):{manifest:[],handlers:new Map},f=Z?Z.config.sessionId?.trim()||dB():void 0;if(f&&W)this.sessionCapabilities.set(f,W);if(f&&j.handlers.size>0)this.sessionClientContributionHandlers.set(f,j.handlers),this.ensureSessionSubscription(f);let X;try{X=await this.client.command("session.restore",{sessionId:J,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Z?{workspaceRoot:Z.config.workspaceRoot?.trim()||Z.config.cwd,cwd:Z.config.cwd??$.cwd,sessionConfig:I8({...Z.config,sessionId:f}),metadata:{...Z.sessionMetadata??{},source:Z.source??U0.CORE,provider:Z.config.providerId,model:Z.config.modelId,enableTools:Z.config.enableTools,enableSpawn:Z.config.enableSpawnAgent,enableTeams:Z.config.enableAgentTeams,teamName:Z.config.teamName,prompt:Z.prompt,interactive:Z.interactive===!0},runtimeOptions:{...j.manifest.length>0?{clientContributions:j.manifest}:{},...Z.localRuntime?.configExtensions?{configExtensions:Z.localRuntime.configExtensions}:{}},toolPolicies:I8(Z.toolPolicies)}:{}},J)}catch(K){if(f)this.sessionCapabilities.delete(f),this.sessionClientContributionHandlers.delete(f),this.disposeSessionSubscription(f);throw K}if(!X.ok){let K=typeof X.payload?.error==="string"?X.payload.error:"session.restore failed";if(f)this.sessionCapabilities.delete(f),this.sessionClientContributionHandlers.delete(f),this.disposeSessionSubscription(f);throw Error(K)}let Y=S$(X.payload?.snapshot),V=X.payload?.session,H=(Y?.sessionId??V?.sessionId)?.trim();if(Q&&!H){if(f)this.sessionCapabilities.delete(f),this.sessionClientContributionHandlers.delete(f),this.disposeSessionSubscription(f);throw Error("Hub checkpoint restore returned no session id")}if(H&&f&&H!==f)this.sessionCapabilities.delete(f),this.sessionClientContributionHandlers.delete(f),this.disposeSessionSubscription(f);if(H&&W)this.sessionCapabilities.set(H,W);if(H&&j.handlers.size>0)this.sessionClientContributionHandlers.set(H,j.handlers);if(H)this.ensureSessionSubscription(H);let B=Array.isArray(X.payload?.messages)?X.payload.messages:void 0,A=X.payload?.checkpoint;if(!A)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:H,startResult:H?{sessionId:H,manifest:Y?sB(Y,Z??{}):aB(H,Z??{},V),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:B,checkpoint:A}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let J=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(J.payload?.prompts)?J.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let J=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(J.payload?.prompts)?J.payload.prompts:[],prompt:J.payload?.prompt,updated:J.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let J=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(J.payload?.prompts)?J.payload.prompts:[],prompt:J.payload?.prompt,removed:J.payload?.removed===!0}}async getAccumulatedUsage($){let J=await this.client.command("session.get",{includeSnapshot:!0},$),Q=S$(J.payload?.snapshot);if(Q){let f=Q.usage?{...Q.usage}:void 0,X=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return f||X?{usage:f,aggregateUsage:X}:void 0}let Z=J.payload?.session,W=nB(Z?.usage),j=nB(Z?.aggregateUsage);return W||j?{usage:W,aggregateUsage:j}:void 0}async abort($,J){await this.client.command("run.abort",{sessionId:$,reason:oB(J)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,J]of this.sessionSubscriptions){J();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let J;try{J=await this.client.command("session.get",void 0,$)}catch(Q){if(d1(Q))return;throw Q}return uP(J.payload)}async listSessions($=100){let J=await this.client.command("session.list",{limit:$}),Q=Array.isArray(J.payload?.snapshots)?J.payload.snapshots.flatMap((W)=>{let j=S$(W);return j?[o9(j)]:[]}):[];if(Q.length>0)return Q;return(J.payload?.sessions??[]).map(tB)}async listSettings($){let J=await this.client.command("settings.list",pB($));if(!J.ok)throw Error(t9(J,"settings.list"));return J.payload?.snapshot}async toggleSetting($){let J=await this.client.command("settings.toggle",pB($));if(!J.ok)throw Error(t9(J,"settings.toggle"));return{snapshot:J.payload?.snapshot,changedTypes:Array.isArray(J.payload?.changedTypes)?J.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,J){let Q={...J.metadata??{}};if(typeof J.prompt==="string")Q.prompt=J.prompt;if(typeof J.title==="string")Q.title=J.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async readSessionMessages($){let J=$.trim();if(!J)return[];let Q=await this.client.command("session.messages",{sessionId:J},J);if(!Q.ok)throw uB(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(t9(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:J,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(t9(Q,"session.messages"));let Z=Q.payload?.messages;return Array.isArray(Z)?Z:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,J){return this.events.subscribe($,J)}ensureSessionSubscription($){let J=$.trim();if(!J||this.sessionSubscriptions.has(J))return;let Q=this.client.subscribe((Z)=>{this.handleHubEvent(Z)},{sessionId:J});this.sessionSubscriptions.set(J,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let J=$.trim();if(!J)return;this.sessionSubscriptions.get(J)?.(),this.sessionSubscriptions.delete(J),this.agentDoneEmittedForCurrentRunBySession.delete(J)}resolveCapabilities($){return L0(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:cP($.payload)}})}handleHubEvent($){let J=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!J)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(J);let Q=S$($.payload?.snapshot),Z=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:J,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:J,status:Z?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"assistant.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",Z=$.payload?.redacted===!0;if(!Q&&!Z)return;this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:Z}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:J,payload:$.payload});return}case"usage.updated":{let Q=vP($.payload);this.events.emit({type:"agent_event",payload:{sessionId:J,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:J,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_end",contentType:"tool",toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Q=S$($.payload?.snapshot),Z=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:J,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:J,status:Z?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:J,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:J,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=S$($.payload?.snapshot),Z=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:J,payload:{...$.payload,reason:Z}}),Q?.interactive===!0&&j0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:J,reason:Z,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,J,Q){try{uB(this.telemetry,{component:"core",operation:$,error:J,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let J=$.sessionId?.trim();if(!J)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let Z=typeof $.payload?.requestId==="string"?$.payload.requestId:"",W=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!Z)return;let j=this.sessionClientContributionHandlers.get(J)?.get(W);if(!j){await this.client.command("capability.respond",{requestId:Z,ok:!1,error:`No client contribution handler registered for capability ${W} in session ${J}.`},J).catch(()=>{});return}let f=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},X=new AbortController;this.activeCapabilityAbortControllers.set(Z,X);let Y=(V)=>{this.client.command("capability.progress",{requestId:Z,payload:V},J).catch((H)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",H,$)})};try{let V=await j({payload:f,abortSignal:X.signal,progress:Y});if(X.signal.aborted)return;await this.client.command("capability.respond",{requestId:Z,ok:!0,payload:V},J)}catch(V){if(X.signal.aborted)return;await this.client.command("capability.respond",{requestId:Z,ok:!1,error:V instanceof Error?V.message:String(V)},J)}finally{this.activeCapabilityAbortControllers.delete(Z)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let J=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!J)return;let Q=this.activeCapabilityAbortControllers.get(J);if(!Q)return;Q.abort(IP($.payload.error))}async handleApprovalRequested($){let J=$.sessionId?.trim();if(!J)return;let Q=this.sessionCapabilities.get(J)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let Z=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",W=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",j=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!Z||!W||!j)return;let f=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},X=xP($.payload?.inputJson);this.pendingApprovalToolCallIds.add(W),this.emitToolCallContentStart({sessionId:J,toolCallId:W,toolName:j,toolInput:X});let Y=await Promise.resolve(Q({sessionId:J,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:J,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:W,toolName:j,input:X,policy:f})).catch((V)=>({approved:!1,reason:V instanceof Error?V.message:`Tool approval request failed: ${String(V)}`}));await this.client.command("approval.respond",{approvalId:Z,approved:Y.approved,reason:Y.reason},J).catch(()=>{})}}var $A={};w($A,{RemoteRuntimeHost:()=>x8});class x8 extends r1{constructor($){super({url:N$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var JA={};w(JA,{SqliteSessionStore:()=>U1});import{existsSync as dP,mkdirSync as lP}from"node:fs";import{join as pP}from"node:path";import{asBool as WJ,asOptionalString as D1,asString as i1,ensureSessionSchema as rP,loadSqliteDb as iP,nowIso as e9,toBoolInt as jJ}from"@cline/shared/db";import{resolveDbDataDir as nP}from"@cline/shared/storage";class U1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??nP()}init(){this.getRawDb()}ensureSessionsDir(){if(!dP(this.sessionsDirPath))lP(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return pP(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=iP(this.sessionDbPath());return rP($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,J=[]){return this.getRawDb().prepare($).run(...J)}queryOne($,J=[]){return this.getRawDb().prepare($).get(...J)??void 0}queryAll($,J=[]){return this.getRawDb().prepare($).all(...J)}create($){let J=e9();this.run(`INSERT OR REPLACE INTO sessions (
|
|
498
|
+
WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,J,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,J){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(J,_0(),$)}attachReportPathToRun($,J){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(J,_0(),$)}}class $J{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new e6({dbPath:$.dbPath});let J=$.specs;this.reconciler=new U7({store:this.store,specs:J}),this.materializer=new n6({store:this.store}),this.eventIngress=new X7({store:this.store,logger:$.logger}),this.runner=new a6({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:J,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new R7({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let Z=$.logger;if(Z)if(Z.error)Z.error("cron.watcher.failed",{error:Q});else Z.log("cron.watcher.failed",{error:Q})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}var MB={};w(MB,{manifestToSessionRecord:()=>pQ,listSessionHistoryFromBackend:()=>q7,listSessionHistory:()=>rQ,hydrateSessionHistory:()=>TB});import{readdir as Wq,readFile as zB}from"node:fs/promises";import{join as _B}from"node:path";import{formatDisplayUserInput as jq,normalizeUserInput as Xq}from"@cline/shared";import{resolveSessionDataDir as OB}from"@cline/shared/storage";import{existsSync as Jq}from"node:fs";import{readFile as Qq}from"node:fs/promises";import{formatDisplayUserInput as DB}from"@cline/shared";class JJ{listeners=new Set;subscribe($,J){let Q={listener:$,sessionId:J?.sessionId?.trim()||void 0};return this.listeners.add(Q),()=>{this.listeners.delete(Q)}}emit($){let J=$.payload.sessionId?.trim();for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==J)continue;Q.listener($)}}get size(){return this.listeners.size}}async function q$($){let J=$?.trim();if(!J||!Jq(J))return[];try{let Q=(await Qq(J,"utf8")).trim();if(!Q)return[];let Z=JSON.parse(Q);if(Array.isArray(Z))return UB(Z);if(Z&&typeof Z==="object"&&!Array.isArray(Z)){let W=Z.messages;if(Array.isArray(W))return UB(W)}return[]}catch{return[]}}function Zq($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:DB($.content)};return{...$,content:$.content.map((J)=>{if(J.type!=="text"||typeof J.text!=="string")return J;return{...J,text:DB(J.text)}})}}function UB($){return $.map(Zq)}function O7($){return $?{...$}:void 0}async function RB($,J){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await J.queueSpawnRequest($);let Z=await J.upsertSubagentSessionFromHook($);if(!Z)return;await J.appendSubagentHookAudit(Z,$),await J.applySubagentStatus(Z,$)}function QJ($){if(typeof $!=="string")return;let J=$.trim();return J.length>0?J:void 0}function r0($){let J=QJ($);if(!J)return;return J.toLowerCase()==="unknown"?void 0:J}function lQ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function fq($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function M7($){let J=$??200;return Number.isFinite(J)?Math.max(0,Math.floor(J)):200}function Yq($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function Vq($){return $.isSubagent!==!0&&!QJ($.parentSessionId)}function Hq($){let J=$.match(/\d{13,}/g);if(!J||J.length===0)return 0;let Q=0;for(let Z of J){let W=Number.parseInt(Z,10);if(Number.isFinite(W)&&W>Q)Q=W}return Q}function pQ($){return{sessionId:$.session_id,source:$.source,pid:$.pid,startedAt:$.started_at,endedAt:$.ended_at??null,exitCode:$.exit_code??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspace_root,teamName:$.team_name,enableTools:$.enable_tools,enableSpawn:$.enable_spawn,enableTeams:$.enable_teams,isSubagent:!1,prompt:$.prompt,metadata:$.metadata,messagesPath:$.messages_path,updatedAt:$.ended_at??$.started_at}}async function Bq($){let J=M7($);if(J===0)return[];let Q=OB(),W=(await Wq(Q,{withFileTypes:!0}).catch(()=>[])).filter((X)=>X.isDirectory()).map((X)=>({entry:X,recency:Hq(X.name.trim())})).sort((X,f)=>f.recency-X.recency||f.entry.name.localeCompare(X.entry.name));return(await Promise.all(W.map(async({entry:X})=>{let f=X.name.trim();if(!f)return;let Y=_B(Q,f,`${f}.json`),V=await zB(Y,"utf8").catch(()=>{return});if(!V)return;let H;try{H=JSON.parse(V)}catch{return}let B=S0.safeParse(H);if(!B.success)return;return pQ(B.data)}))).filter((X)=>Boolean(X)).sort((X,f)=>f.startedAt.localeCompare(X.startedAt)).slice(0,J)}async function Aq($,J,Q){let Z=M7(J);if(Z===0)return await $.listSessions(0),[];let W=Q.includeSubagents?Z:Yq(Z),j=await $.listSessions(W);return(Q.includeSubagents?j:j.filter(Vq)).slice(0,Z)}function Kq($){if(typeof $==="string")return $.trim();let J=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let Z=Q;if(Z.type!=="text")continue;let W=Z.text?.trim();if(W)J.push(W)}return J.join(`
|
|
499
|
+
`).trim()}function LB($){return $.replace(/\s+/g," ").trim()}function Gq($,J){if($.length<=J)return $;return`${$.slice(0,Math.max(0,J-3)).trimEnd()}...`}function Fq($){for(let J of["user","assistant"])for(let Q of $){if(Q.role!==J)continue;let Z=LB(Kq(Q.content));if(!Z)continue;let W=J==="user"?LB(jq(Z)):Z,j=Xq(W.split(`
|
|
500
|
+
`)[0]??W);return Gq(j,50)}return}function Dq($){let J=0;for(let Q of $)J+=lQ(Q.metrics?.cost)??0;return J}function Uq($){let J,Q;for(let Z=$.length-1;Z>=0;Z-=1){let W=$[Z];if(!J)J=r0(W.modelInfo?.provider);if(!Q)Q=r0(W.modelInfo?.id);if(J&&Q)break}return{provider:J,model:Q}}function Rq($){return r0($?.provider)??r0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function Lq($){return r0($?.model)??r0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function T7($,J){let Q=fq($.metadata),Z=QJ(J?.title)??QJ(Q?.title),W=lQ(J?.totalCost)??lQ(Q?.totalCost),j=Q||Z!==void 0||W!==void 0?{...Q??{},...Z!==void 0?{title:Z}:{},...W!==void 0?{totalCost:W}:{}}:void 0;return{...$,provider:r0(J?.provider)??r0($.provider)??Rq(Q)??"",model:r0(J?.model)??r0($.model)??Lq(Q)??"",metadata:j}}function zq($){let J=$.content;if(!Array.isArray(J))return!1;return J.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function _q($,J){if($.status!=="running"||$.interactive!==!0)return!1;let Q=J.at(-1);return Q?.role==="assistant"&&!zq(Q)}async function Oq($,J){return await Promise.all(J.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let Z=await $.readSessionMessages(Q.sessionId);return _q(Q,Z)?{...Q,status:"idle"}:Q}))}async function TB($,J){return await Promise.all(J.map(async(Q)=>{let Z=T7(Q),W=Boolean(QJ(Z.metadata?.title)),j=Boolean(r0(Z.provider)),X=Boolean(r0(Z.model)),f=lQ(Z.metadata?.totalCost),Y=f!==void 0&&f>0;if(W&&j&&X&&Y)return Z;let V=await $.readSessionMessages(Q.sessionId);if(V.length===0)return Z;let H=Uq(V),B=Dq(V);return T7(Q,{title:W?void 0:Fq(V),provider:j?void 0:H.provider,model:X?void 0:H.model,totalCost:Y||B<=0?void 0:B})}))}async function rQ($,J={}){let Q=M7(J.limit),Z=J.includeSubagents===!0,W=await Aq($,Q,{includeSubagents:Z}),j=J.includeManifestFallback===!0&&W.length<Q?await Bq(Math.min(Math.max(Q*2,100),500)):[],X=new Map;for(let V of[...W,...j]){if(X.has(V.sessionId))continue;X.set(V.sessionId,V)}let f=j.length===0?W:Array.from(X.values()).sort((V,H)=>H.startedAt.localeCompare(V.startedAt)).slice(0,Q),Y=await Oq($,f);if(J.hydrate===!1)return Y.map((V)=>T7(V));return await TB($,Y)}async function Tq($){let J=$.trim();if(!J)return;let Q=_B(OB(),J,`${J}.json`),Z=await zB(Q,"utf8").catch(()=>{return});if(!Z)return;try{let W=S0.safeParse(JSON.parse(Z));return W.success?W.data.messages_path:void 0}catch{return}}async function q7($,J={}){let Q=new Map;return await rQ({listSessions:async(W)=>{let j=await $.listSessions(W);Q.clear();for(let X of j)Q.set(X.sessionId,X);return j.map(W6)},readSessionMessages:async(W)=>{let j=Q.get(W)?.messagesPath??await Tq(W);return await q$(j)}},J)}var xA={};w(xA,{resolveSessionBackend:()=>f3,createRuntimeHost:()=>r8});import{captureSdkError as kA}from"@cline/shared";import{createSessionId as UP,isHubProtocolCompatible as RP,resolveClineBuildEnv as LP,resolveHubCommandTimeoutMs as zP}from"@cline/shared";import{spawn as nq}from"node:child_process";import{closeSync as aq,mkdirSync as sq,openSync as oq}from"node:fs";import{basename as tq,dirname as eq,join as $P}from"node:path";import{fileURLToPath as JP}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as QP,isHubDaemonProcess as gB,isHubProtocolCompatible as ZP,resolveClineBuildEnv as mB,withResolvedClineBuildEnv as WP}from"@cline/shared";import{createHash as Mq,randomBytes as qq}from"node:crypto";import{existsSync as Pq}from"node:fs";import{chmod as Nq,mkdir as P7,readFile as SB,rm as N7,writeFile as CB}from"node:fs/promises";import{dirname as yB,join as w7}from"node:path";import{resolveClineDataDir as R2,resolveClineDir as EB}from"@cline/shared/storage";var PB="0.0.50";var ZJ={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:PB,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var wq="CLINE_HUB_DISCOVERY_PATH",Sq="CLINE_HUB_BUILD_ID",NB=30000,Cq=15000,yq=100;function Eq($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function bq($){return Mq("sha256").update($).digest("hex").slice(0,12)}function hq($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(J){return J instanceof Error&&"code"in J?String(J.code)==="EPERM":!1}}function iQ(){return qq(32).toString("hex")}function kq($){return new Promise((J)=>setTimeout(J,$))}function Iq($){return`${$}.lock`}async function xq($){try{let J=JSON.parse(await SB(w7($,"owner.json"),"utf8"));if(typeof J.pid!=="number"||typeof J.acquiredAt!=="string")return;return{pid:J.pid,acquiredAt:J.acquiredAt}}catch{return}}async function wB($){await N7($,{recursive:!0,force:!0}).catch(()=>{return})}function nQ(){return process.env[Sq]?.trim()||String(ZJ.version)}function l1($=process.argv[1]?.trim()||process.cwd()){let J=`hub-${bq($)}`,Q=process.env[wq]?.trim()||w7(R2(),"locks","hub","owners",`${Eq(J)}.json`);return{ownerId:J,discoveryPath:Q}}function bB($=`hub-${Date.now().toString(36)}`){return l1($)}async function G0($){try{let J=JSON.parse(await SB($,"utf8"));if(typeof J.hubId!=="string"||typeof J.protocolVersion!=="string"||typeof J.authToken!=="string"||typeof J.host!=="string"||typeof J.port!=="number"||typeof J.url!=="string"||typeof J.startedAt!=="string"||typeof J.updatedAt!=="string")return;return{hubId:J.hubId,protocolVersion:J.protocolVersion,minClientProtocolVersion:typeof J.minClientProtocolVersion==="string"?J.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof J.maxClientProtocolVersion==="string"?J.maxClientProtocolVersion:void 0,capabilities:Array.isArray(J.capabilities)?J.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof J.coreVersion==="string"?J.coreVersion:void 0,buildId:typeof J.buildId==="string"?J.buildId:void 0,authToken:J.authToken,host:J.host,port:J.port,url:J.url,pid:typeof J.pid==="number"?J.pid:void 0,startedAt:J.startedAt,updatedAt:J.updatedAt}}catch{return}}async function aQ($,J){await P7(yB($),{recursive:!0}),await N7($,{force:!0}).catch(()=>{return}),await CB($,`${JSON.stringify(J,null,2)}
|
|
501
|
+
`,{encoding:"utf8",mode:384}),await Nq($,384)}async function y0($){await N7($,{force:!0}).catch(()=>{return})}async function sQ($,J){let Q=Iq($);await P7(yB(Q),{recursive:!0});let Z=Date.now()+Cq;while(!0)try{await P7(Q,{recursive:!1}),await CB(w7(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
|
|
502
|
+
`,"utf8");try{return await J()}finally{await wB(Q)}}catch(W){if((W instanceof Error&&"code"in W?String(W.code):"")!=="EEXIST")throw W;let X=await xq(Q),f=X?Date.now()-Date.parse(X.acquiredAt):NB+1;if(!X||!hq(X.pid)||f>NB){await wB(Q);continue}if(Date.now()>=Z)throw Error(`Timed out waiting for hub startup lock ${Q}`);await kq(yq)}}async function p1($,J){try{let Q=await fetch(J?.authToken?S7($):oQ($),{headers:J?.authToken?{authorization:`Bearer ${J.authToken}`}:void 0});if(!Q.ok)return;let Z=await Q.json();if(typeof Z.protocolVersion!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string")return;return{protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((W)=>typeof W==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,host:Z.host,port:Z.port,url:Z.url,hubId:typeof Z.hubId==="string"?Z.hubId:void 0,authToken:typeof Z.authToken==="string"?Z.authToken:void 0,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:typeof Z.startedAt==="string"?Z.startedAt:void 0,updatedAt:typeof Z.updatedAt==="string"?Z.updatedAt:void 0}}catch{return}}function j1($,J,Q="/hub"){return new URL(`ws://${$}:${J}${Q}`).toString()}function oQ($){let J=new URL($);return J.protocol=J.protocol==="wss:"?"https:":"http:",J.pathname="/health",J.search="",J.toString()}function S7($){let J=new URL(oQ($));return J.pathname="/status",J.toString()}function hB($){return Pq($)}import{CLINE_HUB_DEV_PORT as gq,CLINE_HUB_PORT as mq,resolveClineBuildEnv as vq}from"@cline/shared";var cq="CLINE_HUB_HOST",uq="CLINE_HUB_PORT",dq="CLINE_HUB_PATHNAME",C7="127.0.0.1",y7=mq,E7="/hub";function kB($){return vq($)==="development"?gq:y7}function b7($={}){return($.env??process.env)[cq]?.trim()||C7}function h8($={}){let Q=($.env??process.env)[uq]?.trim();if(!Q)return kB($);let Z=Number.parseInt(Q,10);if(!Number.isInteger(Z)||Z<1||Z>65535)return kB($);return Z}function h7($={}){return($.env??process.env)[dq]?.trim()||E7}function i0($={},J={}){return{host:$.host??b7(J),port:$.port??h8(J),pathname:$.pathname??h7(J)}}import{join as lq}from"node:path";var pq="shared:cline",rq="CLINE_HUB_DISCOVERY_PATH",iq="hub-production";function IB($){let J=m1($.trim());return l1(`workspace:${J||$.trim()}`)}function E0($=pq){return l1($)}function n0(){return{ownerId:iq,discoveryPath:process.env[rq]?.trim()||lq(R2(),"locks","hub","production.json")}}var jP=8000,XP=200,fP=3000,YP=100,VP=[100,250,500,1000,2000],HP="--cline-hub-daemon";function BP($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function AP(){try{let $=$P(R2(),"logs","hub-daemon.log");return sq(eq($),{recursive:!0}),{fd:oq($,"a"),logPath:$}}catch{return}}function vB(){return mB()==="production"?n0():E0()}function L2($){return ZP($).compatible}function xB($,J,Q){if(!J||J.url!==Q)return $;return{...$,authToken:$.authToken??J.authToken,pid:$.pid??J.pid}}async function z2($,J){try{return await p1($,{authToken:J})}catch{return}}async function KP($,J){let Q=Date.now()+J;while(Date.now()<Q){if(!(await z2($))?.url)return!0;await new Promise((W)=>setTimeout(W,YP))}return!1}async function tQ($,J){if(await jJ($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await KP($.url,fP);return await y0(J).catch(()=>{return}),Q}async function WJ($,J){if(L2($))return!0;return tQ($,J)}async function cB($){if(mB()!=="production")return;let J=E0();if(J.discoveryPath===$.discoveryPath)return;let Q=await G0(J.discoveryPath);if(Q?.url)await tQ(Q,J.discoveryPath);else await y0(J.discoveryPath).catch(()=>{return})}function GP(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return JP(new URL(`./entry.${$}`,import.meta.url))}function FP($,J){let Q=GP(),Z=process.execPath?.trim();if(!Z)throw Error("unable to resolve runtime executable for hub daemon");let W=tq(Z).toLowerCase().includes("bun"),j=Q.startsWith("/$bunfs/"),X=W&&Q.toLowerCase().endsWith(".ts"),f=j?[HP]:[...X?["--conditions=development"]:[],Q];return{launcher:Z,args:[...f,"--cwd",$,...BP(J)],cwd:$,env:{...WP(process.env),CLINE_NO_INTERACTIVE:"1",[QP]:"1"}}}function DP($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Q="message"in $?$.message:void 0;return typeof Q==="string"&&Q.includes("ETXTBSY")}function k7($,J={}){if(gB())return;let Q=FP($,J),Z=AP();try{nq(Q.launcher,Q.args,{detached:!0,stdio:Z?["ignore",Z.fd,Z.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(Z)aq(Z.fd)}}async function k8($,J={}){for(let Q=0;;Q++)try{k7($,J);return}catch(Z){let W=VP[Q];if(!DP(Z)||W===void 0)throw Z;await new Promise((j)=>setTimeout(j,W))}}function eQ($,J={}){if(gB())return;let Q=vB(),Z=i0(J),W=j1(Z.host,Z.port,Z.pathname),j=J.allowPortFallback===!0&&Z.port!==0;cB(Q).catch(()=>{return}).then(()=>G0(Q.discoveryPath)).then(async(X)=>{let f=!1;if(X?.url)if(!X.authToken){if(f=!0,!await tQ(X,Q.discoveryPath)&&!j)return}else{let H=await z2(X.url,X.authToken);if(H?.url&&L2(H)&&await G1(H.url,{authToken:X.authToken}))return;if(H?.url)await WJ({...H,authToken:X.authToken},Q.discoveryPath);else await y0(Q.discoveryPath).catch(()=>{return})}let Y=await z2(W);if(Y?.url){if(L2(Y)){if(!j||!f)return}else if(!await WJ({...Y,authToken:void 0},Q.discoveryPath)&&!j)return}let V=j?{...Z,port:0}:Z;await k8($,V)}).catch(()=>{})}async function uB($,J={}){let Q=vB(),Z=J.host!==void 0||J.port!==void 0||J.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=i0(J),j=j1(W.host,W.port,W.pathname),X=(K)=>{if(!Z)P$(K.url,K.authToken);return K};await cB(Q).catch(()=>{return});let f=await G0(Q.discoveryPath),Y=!1;if(f?.url){let K=f.authToken;if(!K)Y=!0,await tQ(f,Q.discoveryPath);else{let G=await z2(f.url,K);if(G?.url&&L2(G)&&await G1(G.url,{authToken:K}))return X({url:G.url,authToken:K});if(G?.url)await WJ({...G,authToken:K},Q.discoveryPath);else await y0(Q.discoveryPath).catch(()=>{return})}}let V=await z2(j);if(V?.url){let K=xB(V,f,j);if(L2(V))throw Error(`A compatible Cline Hub is already running at ${j}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${Y?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`);if(!await WJ(K,Q.discoveryPath)&&J.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is already running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let B=J.allowPortFallback===!0&&W.port!==0?{...W,port:0}:W;await k8($,B);let A=Date.now()+jP;while(Date.now()<A){let K=await G0(Q.discoveryPath);if(K?.url&&K.authToken){let R=await z2(K.url,K.authToken);if(R?.url&&L2(R)&&await G1(R.url,{authToken:K.authToken}))return X({url:R.url,authToken:K.authToken})}let G=await z2(j);if(G?.url&&!L2(G)){let R=xB(G,K,j);if(!await WJ(R,Q.discoveryPath)&&J.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is still running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((R)=>setTimeout(R,XP))}throw Error("Timed out waiting for detached hub startup.")}function $9(){return LP()==="production"?n0():E0()}function _P(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function iB($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((J)=>Buffer.from(J))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return iB($.data);return String($)}function OP($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function dB($){let J=$,Q=OP(J.reason);return new q0("hub_connection_closed",J.code||Q?`Hub connection closed (code=${J.code??0}${Q?`, reason=${Q}`:""})`:I7,{closeCode:J.code,closeReason:Q||void 0})}function TP($,J){if($ instanceof q0)return $;if($ instanceof Error)return new q0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new q0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new q0("hub_connect_failed",Q);let Z=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new q0("hub_connect_failed",Z?`Failed to connect to hub at ${J.toString()} (${Z} event before socket open).`:`Failed to connect to hub at ${J.toString()}.`)}var MP=8000,qP=200,lB="*",pB=8000,PP="cline-hub-auth.",nB=new Map,aB=new Set,NP=3000,wP=3000,SP=100,I7="Hub connection closed",CP=250,yP=5000,rB=0.5;class q0 extends Error{code;details;constructor($,J,Q){super(J);this.code=$;this.details=Q;this.name="HubTransportError"}}function m7($){return $ instanceof q0}class I8 extends Error{command;code;constructor($,J,Q){super(Q);this.command=$;this.code=J;this.name="HubCommandError"}}function J9($,J){return $ instanceof I8&&$.code==="hub_command_timeout"&&(J===void 0||$.command===J)}function sB($){let J=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),J)return J;let Q=v7($.toString());return Q?nB.get(Q):void 0}function EP($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function v7($){if(!EP($))return;let J=new URL(N$($));return J.search="",J.hash="",J.toString()}function x7($){let J=v7($);return!!J&&aB.has(J)}function P$($,J){let Q=v7($);if(Q){if(aB.add(Q),J?.trim())nB.set(Q,J)}return $}class X1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new q0("hub_connection_closed",I7);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),J=this.options.authToken?.trim()||sB($);$.hash="";let Z=new(_P())($.toString(),J?[`${PP}${J}`]:void 0);this.socket=Z;let W=!1;this.connectPromise=new Promise((j,X)=>{let f=!1,Y=setTimeout(()=>{if(f)return;f=!0,W=!0,this.lastCloseError=new q0("hub_connect_timeout",`Timed out connecting to hub after ${pB}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Z.close()}catch{}X(this.lastCloseError)},pB);Z.addEventListener("open",()=>{if(f)return;f=!0,clearTimeout(Y),j()}),Z.addEventListener("error",(V)=>{if(f)return;f=!0,clearTimeout(Y),this.lastCloseError=TP(V,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,X(this.lastCloseError)}),Z.addEventListener("close",(V)=>{if(f)return;if(f=!0,clearTimeout(Y),!W)this.lastCloseError=dB(V),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,X(this.lastCloseError)})}),Z.addEventListener("message",(j)=>{this.handleFrame(JSON.parse(iB(j)))}),Z.addEventListener("close",(j)=>{if(this.socket!==Z)return;if(!W)this.lastCloseError=dB(j),this.sawSocketClose=!0;this.registered=!1;for(let X of this.pendingReplies.values())X.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let j of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(j));this.reconnectAttempt=0}subscribe($,J){let Q=J?.sessionId?.trim()||void 0,Z={listener:$,sessionId:Q};return this.listeners.add(Z),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(Z))return;this.adjustSubscriptionCount(Q,-1)}}async command($,J,Q,Z){let W=0,j=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,J,Q,Z)}catch(X){if(!j||W>=1||!await this.recoverLocalHubTransport(X))throw X;W+=1}}async commandOnce($,J,Q,Z){await this.connect();let W=UP("hubreq_"),j=zP($,Z?.timeoutMs),X=new Promise((Y,V)=>{let H=j===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(W))return;V(new I8($,"hub_command_timeout",`Hub command ${$} timed out after ${j}ms (hub=${this.currentUrl}, requestId=${W}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},j);this.pendingReplies.set(W,{resolve:(B)=>{if(H)clearTimeout(H);Y(B)},reject:(B)=>{if(H)clearTimeout(H);V(B)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:W,clientId:this.clientId,sessionId:Q,timeoutMs:j,payload:J}})}catch(Y){throw this.pendingReplies.delete(W),Y}let f=await X;if(!f.ok){if(f.error?.code===G2){let Y=Q??(typeof J?.sessionId==="string"?J.sessionId:void 0);throw new u1(Y,f.error.message)}throw new I8($,f.error?.code,f.error?.message??`Hub command ${$} failed`)}return f}async recoverLocalHubTransport($){if(!x7(this.currentUrl)||!m7($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let J=await _2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!J)return!1;return this.currentUrl=J,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(CP*2**this.reconnectAttempt,yP),J=Math.round($*(1-rB)+Math.random()*$*rB);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},J)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!x7(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await _2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if($){this.currentUrl=$,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let $=this.socket;if(this.closedByClient=!0,this.clearReconnectTimer(),this.registered=!1,!$)return;this.lastCloseError=new q0("hub_connection_closed",I7),this.sawSocketClose=!1;for(let J of this.pendingReplies.values())J.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new q0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,J){this.sendFrame({kind:$,clientId:this.clientId,...J?{sessionId:J}:{}})}adjustSubscriptionCount($,J){let Q=this.subscriptionKeyForSessionId($),Z=(this.subscriptionCounts.get(Q)??0)+J;if(Z<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(J<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,Z),J>0&&Z===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??lB}subscriptionSessionIdFromKey($){return $===lB?void 0:$}handleFrame($){switch($.kind){case"reply":{let J=$.envelope.requestId;if(!J)return;let Q=this.pendingReplies.get(J);if(!Q)return;this.pendingReplies.delete(J),Q.resolve($.envelope);return}case"event":for(let J of this.listeners){if(J.sessionId&&J.sessionId!==$.envelope.sessionId?.trim())continue;J.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function N$($){let J=new URL($);if(J.protocol==="http:")J.protocol="ws:";else if(J.protocol==="https:")J.protocol="wss:";return J.toString()}async function G1($,J){let Q=new X1({url:$,authToken:J?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function g7($,J){let Q=N$($),Z=await p1(Q,{authToken:J?.authToken});if(!Z)return{status:"unreachable",url:Q};if(!RP(Z).compatible)return{status:"protocol_mismatch",url:Q};if(J?.verifyConnection===!0&&!await G1(Q,{workspaceRoot:J.workspaceRoot,cwd:J.cwd,authToken:J.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function bP($){let J=Date.now()+MP;while(Date.now()<J){let Q=await G0($.discoveryPath);if(Q?.url){let Z=await g7(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(Z.status==="compatible")return P$(Z.url,Q.authToken)}await new Promise((Z)=>setTimeout(Z,qP))}return}async function hP($){let J=Date.now()+wP;while(Date.now()<J){if(!(await p1($).catch(()=>{return}))?.url)return!0;await new Promise((Z)=>setTimeout(Z,SP))}return!1}function kP($,J){try{return N$($)===N$(J)}catch{return!1}}function IP($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let Z=Q;if(Z.status==="running"||Z.status==="idle"||Z.status==="pending")return!0;return Array.isArray(Z.participants)&&Z.participants.length>0})}async function xP($,J,Q){let Z=new X1({url:$,authToken:J,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let W=await Z.command("session.list",{limit:500},void 0,{timeoutMs:NP});return!IP(W.payload)}catch{return!1}finally{await Z.dispose().catch(()=>{return})}}async function XJ($={}){if($.endpoint?.trim()){let W=await g7($.endpoint);return W.status==="compatible"?W.url:void 0}let J=$9(),Q=await G0(J.discoveryPath);if(!Q?.url)return;let Z=await g7(Q.url,{authToken:Q.authToken});if(Z.status==="compatible")return P$(Z.url,Q.authToken);if(Z.status==="protocol_mismatch")await y0(J.discoveryPath).catch(()=>{return});return}async function _2($={}){let J=await XJ($);if(J&&await G1(J,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return J;if($.endpoint?.trim())return;let Q=$9();return await k8($.workspaceRoot??process.cwd()),await bP(Q)}async function jJ($,J){let Q=new URL($),Z=J?.trim()||sB(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:Z?{authorization:`Bearer ${Z}`}:void 0})).ok}async function c7($=$9()){let J=await G0($.discoveryPath);if(!J?.url)return!1;try{if(await jJ(J.url,J.authToken))return!0}catch{}return!1}async function Q9($){if(!x7($.url))return;let J=$9(),Q=await G0(J.discoveryPath);if(!Q?.url||!kP(Q.url,$.url))return;if(!await xP(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await c7())return;if(!await hP(Q.url))return;return await y0(J.discoveryPath).catch(()=>{return}),await _2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var VA={};w(VA,{HubRuntimeHost:()=>r1});import{captureSdkError as tB,createSessionId as eB,HUB_CHECKPOINT_CAPABILITY as cP,HUB_COMPACTION_CAPABILITY as uP,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as dP,HUB_HOOK_CAPABILITY_PREFIX as lP,HUB_MISTAKE_LIMIT_CAPABILITY as pP,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as rP,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as iP,isHubToolExecutorName as nP}from"@cline/shared";var oB={};w(oB,{createCoreSessionSnapshot:()=>F1,coreSessionSnapshotToRecord:()=>Z9});function gP($){return $?JSON.parse(JSON.stringify($)):void 0}function mP($){return $?JSON.parse(JSON.stringify($)):void 0}function vP($){let J=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,Z=(Array.isArray(J?.history)?J.history:[]).filter((X)=>!!X&&typeof X==="object"&&!Array.isArray(X)).flatMap((X)=>{let f=typeof X.ref==="string"?X.ref.trim():"",Y=Number(X.createdAt),V=Number(X.runCount);if(!f||!Number.isFinite(Y)||!Number.isInteger(V))return[];return[{ref:f,createdAt:Y,runCount:V,...X.kind==="stash"||X.kind==="commit"?{kind:X.kind}:{}}]}),W=Z.at(-1),j=$?.checkpointEnabled===!0?!0:void 0;if(!j&&Z.length===0)return;return{...j?{enabled:j}:{},...W?{latest:W}:{},history:Z}}function F1($){let{session:J}=$,Q=gP(J.metadata);return{version:1,sessionId:J.sessionId,source:J.source,status:J.status,createdAt:J.startedAt,updatedAt:J.updatedAt,endedAt:J.endedAt??null,exitCode:J.exitCode??null,interactive:J.interactive,workspace:{cwd:J.cwd,root:J.workspaceRoot},model:{providerId:J.provider,modelId:J.model},capabilities:{enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams},lineage:{...J.parentSessionId?{parentSessionId:J.parentSessionId}:{},...J.parentAgentId?{parentAgentId:J.parentAgentId}:{},...J.agentId?{agentId:J.agentId}:{},...J.conversationId?{conversationId:J.conversationId}:{},isSubagent:J.isSubagent},...J.teamName?{team:{name:J.teamName}}:{},...J.prompt?{prompt:J.prompt}:{},...Q?{metadata:Q}:{},...J.messagesPath?{artifacts:{messagesPath:J.messagesPath}}:{},...$.messages?{messages:mP($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Z=vP(Q);return Z?{checkpoint:Z}:{}})()}}function Z9($){return{sessionId:$.sessionId,parentSessionId:$.lineage.parentSessionId,agentId:$.lineage.agentId,parentAgentId:$.lineage.parentAgentId,conversationId:$.lineage.conversationId,isSubagent:$.lineage.isSubagent,source:$.source,startedAt:$.createdAt,endedAt:$.endedAt??void 0,exitCode:$.exitCode??void 0,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspaceRoot:$.workspace.root,teamName:$.team?.name,enableTools:$.capabilities.enableTools,enableSpawn:$.capabilities.enableSpawn,enableTeams:$.capabilities.enableTeams,prompt:$.prompt,metadata:$.metadata,updatedAt:$.updatedAt,messagesPath:$.artifacts?.messagesPath}}function x8($){if(!$)return;return JSON.parse(JSON.stringify($))}var aP=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function $A($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function JA($){if(!$)return;let{userInstructionService:J,...Q}=$;return JSON.parse(JSON.stringify(Q))}function QA($){let J=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof J.agentId==="string"?J.agentId:"",conversationId:typeof J.conversationId==="string"?J.conversationId:"",iteration:typeof J.iteration==="number"?J.iteration:0,metadata:J.metadata&&typeof J.metadata==="object"&&!Array.isArray(J.metadata)?J.metadata:void 0}}function O2($,J,Q){$.manifest.push(J),$.handlers.set(J.capabilityName,Q)}function ZA($,J){let Q={manifest:[],handlers:new Map};for(let W of Object.keys(J.toolExecutors??{}).filter(nP)){let j=J.toolExecutors?.[W];if(typeof j!=="function")continue;O2(Q,{kind:"toolExecutor",executor:W,capabilityName:`${rP}${W}`},async({payload:X,abortSignal:f})=>{let Y=Array.isArray(X.args)?[...X.args]:[],V={...QA(X.context),signal:f};return{result:await j(...Y,V)}})}for(let W of $?.extraTools??[])O2(Q,{kind:"tool",name:W.name,description:W.description,inputSchema:x8(W.inputSchema)??{},...W.lifecycle?{lifecycle:x8(W.lifecycle)}:{},capabilityName:`${dP}${W.name}`},async({payload:j,abortSignal:X,progress:f})=>{let Y={...QA(j.context),signal:X};return{result:await W.execute(j.input,{...Y,emitUpdate:(H)=>{f({update:H})}})}});let Z=$?.hooks;if(Z)for(let W of aP){let j=Z[W];if(typeof j!=="function")continue;O2(Q,{kind:"hook",name:W,capabilityName:`${lP}${W}`},async({payload:X})=>({control:await j(X.context)}))}if($?.compaction?.compact){let W=$.compaction.compact;O2(Q,{kind:"compaction",capabilityName:uP,config:$A($.compaction)},async({payload:j})=>({result:await W(j.context)}))}if($?.checkpoint?.createCheckpoint){let W=$.checkpoint.createCheckpoint;O2(Q,{kind:"checkpoint",capabilityName:cP,config:$A($.checkpoint)},async({payload:j})=>({result:await W(j.context)}))}if($?.onConsecutiveMistakeLimitReached){let W=$.onConsecutiveMistakeLimitReached;O2(Q,{kind:"mistakeLimit",capabilityName:pP},async({payload:j})=>({result:await W(j.context)}))}if($?.userInstructionService){let W=$.userInstructionService;O2(Q,{kind:"userInstructionService",capabilityName:iP},async()=>{return await W.start().catch(()=>{}),{snapshot:{records:{skill:W.listRecords("skill"),rule:W.listRecords("rule"),workflow:W.listRecords("workflow")},runtimeCommands:W.listRuntimeCommands()}}})}return Q}function fA($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let J=$.message;if(typeof J==="string"&&J.trim())return J.trim()}return}function sP($){return fA($)??"Capability request was cancelled."}function oP($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function tP($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function eP($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$,Q=typeof J.inputTokens==="number"?J.inputTokens:void 0,Z=typeof J.outputTokens==="number"?J.outputTokens:void 0;if(Q===void 0||Z===void 0)return;return{inputTokens:Q,outputTokens:Z,cacheReadTokens:typeof J.cacheReadTokens==="number"?J.cacheReadTokens:0,cacheWriteTokens:typeof J.cacheWriteTokens==="number"?J.cacheWriteTokens:0,totalCost:typeof J.totalCost==="number"?J.totalCost:0}}function WA($){if(!$)return;return{inputTokens:typeof $.inputTokens==="number"?$.inputTokens:0,outputTokens:typeof $.outputTokens==="number"?$.outputTokens:0,cacheReadTokens:typeof $.cacheReadTokens==="number"?$.cacheReadTokens:0,cacheWriteTokens:typeof $.cacheWriteTokens==="number"?$.cacheWriteTokens:0,totalCost:typeof $.totalCost==="number"?$.totalCost:0}}function u7($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function w$($,J){return u7($?.[J])??0}function $N($){let J=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,Z=$?.agent&&typeof $.agent==="object"?$.agent:void 0,W=Z?.teamRole==="teammate"||Z?.teamRole==="lead"?Z.teamRole:void 0;return{event:{type:"usage",agentId:typeof Z?.agentId==="string"?Z.agentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,inputTokens:w$(J,"inputTokens"),outputTokens:w$(J,"outputTokens"),cacheReadTokens:w$(J,"cacheReadTokens"),cacheWriteTokens:w$(J,"cacheWriteTokens"),cost:u7(J?.totalCost),totalInputTokens:w$(Q,"inputTokens"),totalOutputTokens:w$(Q,"outputTokens"),totalCacheReadTokens:w$(Q,"cacheReadTokens"),totalCacheWriteTokens:w$(Q,"cacheWriteTokens"),totalCost:u7(Q?.totalCost)},teamAgentId:typeof Z?.teamAgentId==="string"?Z.teamAgentId:void 0,teamRole:W}}function JN($){let J=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??J?.finishReason,Z=tP(Q)?Q:Q==="failed"?"error":"completed",W=eP($?.usage??J?.usage);return{type:"done",reason:Z,text:typeof $?.text==="string"?$.text:typeof J?.text==="string"?J.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof J?.iterations==="number"?J.iterations:0,usage:W}}function W9($,J){return $.error?.message??`hub command failed: ${J}`}function fJ($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function YA($){let J=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof J?.parentSessionId==="string"?J.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof J?.agentId==="string"?J.agentId:void 0),parentAgentId:typeof J?.parentAgentId==="string"?J.parentAgentId:void 0,conversationId:typeof J?.conversationId==="string"?J.conversationId:void 0,isSubagent:typeof J?.isSubagent==="boolean"?J.isSubagent:!1,source:typeof J?.source==="string"?J.source:U0.CORE,pid:typeof J?.pid==="number"?J.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:fJ($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:fJ($.status)==="completed"?0:fJ($.status)==="failed"?1:void 0,status:fJ($.status),interactive:J?.interactive===!0,provider:typeof J?.provider==="string"?J.provider:"hub",model:typeof J?.model==="string"?J.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof J?.teamName==="string"?J.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??J?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??J?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??J?.enableTeams===!0,prompt:typeof J?.prompt==="string"?J.prompt:void 0,metadata:J,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof J?.messagesPath==="string"?J.messagesPath:void 0,hookPath:typeof J?.hookPath==="string"?J.hookPath:void 0}}function S$($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$;return J.version===1&&typeof J.sessionId==="string"?JSON.parse(JSON.stringify(J)):void 0}function QN($){let J=S$($?.snapshot);if(J)return Z9(J);let Q=$?.session;return Q?YA(Q):void 0}function jA($,J,Q){let Z=Q?.workspaceRoot?.trim()||J.config.workspaceRoot||J.config.cwd;return S0.parse({version:1,session_id:$,source:J.source??U0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:fJ(Q?.status),interactive:J.interactive===!0,provider:J.config.providerId,model:J.config.modelId,cwd:Q?.cwd?.trim()||J.config.cwd,workspace_root:Z,team_name:J.config.teamName,enable_tools:J.config.enableTools,enable_spawn:J.config.enableSpawnAgent,enable_teams:J.config.enableAgentTeams,prompt:J.prompt?.trim()||void 0,metadata:J.sessionMetadata&&Object.keys(J.sessionMetadata).length>0?J.sessionMetadata:void 0})}function XA($,J){return S0.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??J.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class r1{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new JJ;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,J){this.clientContext=J,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd},this.defaultCapabilities=z0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Q)=>this.requestPendingPromptsList(Q),update:(Q)=>this.requestPendingPromptUpdate(Q),delete:(Q)=>this.requestPendingPromptDelete(Q)},this.client=this.createClient($.url)}createClient($){return new X1({...this.clientOptions,url:$})}async replaceClient($){let J=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(J.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!J9($,"session.create"))return!1;let J=await Q9({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!J)return!1;return await this.replaceClient(J),!0}registerPlannedSession($,J,Q){if(this.sessionCapabilities.set($,J),Q.size>0)this.sessionClientContributionHandlers.set($,Q);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let J=this.resolveCapabilities($),Q=ZA($.localRuntime,J),Z=$.config.sessionId?.trim()||eB(),W=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:x8({...$.config,sessionId:Z}),metadata:{...$.sessionMetadata??{},source:$.source??U0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:x8($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(Z,J,Q.handlers);let j;try{j=await W()}catch(V){if(this.cleanupPlannedSession(Z),await this.recoverLocalHubStartupDeadlock(V)){this.registerPlannedSession(Z,J,Q.handlers);try{j=await W()}catch(H){throw this.cleanupPlannedSession(Z),H}}else throw V}let X=S$(j.payload?.snapshot),f=j.payload?.session,Y=(X?.sessionId??f?.sessionId)?.trim();if(!Y)throw this.cleanupPlannedSession(Z),Error("Hub runtime did not return a session id.");if(Y!==Z)this.cleanupPlannedSession(Z),this.registerPlannedSession(Y,J,Q.handlers);return{sessionId:Y,manifest:X?XA(X,$):jA(Y,$,f),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let J=$.sessionId.trim();if(!J)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let Z=$.start,W=Z?this.resolveCapabilities(Z):void 0,j=Z?ZA(Z.localRuntime,W??{}):{manifest:[],handlers:new Map},X=Z?Z.config.sessionId?.trim()||eB():void 0;if(X&&W)this.sessionCapabilities.set(X,W);if(X&&j.handlers.size>0)this.sessionClientContributionHandlers.set(X,j.handlers),this.ensureSessionSubscription(X);let f;try{f=await this.client.command("session.restore",{sessionId:J,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Z?{workspaceRoot:Z.config.workspaceRoot?.trim()||Z.config.cwd,cwd:Z.config.cwd??$.cwd,sessionConfig:x8({...Z.config,sessionId:X}),metadata:{...Z.sessionMetadata??{},source:Z.source??U0.CORE,provider:Z.config.providerId,model:Z.config.modelId,enableTools:Z.config.enableTools,enableSpawn:Z.config.enableSpawnAgent,enableTeams:Z.config.enableAgentTeams,teamName:Z.config.teamName,prompt:Z.prompt,interactive:Z.interactive===!0},runtimeOptions:{...j.manifest.length>0?{clientContributions:j.manifest}:{},...Z.localRuntime?.configExtensions?{configExtensions:Z.localRuntime.configExtensions}:{}},toolPolicies:x8(Z.toolPolicies)}:{}},J)}catch(K){if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw K}if(!f.ok){let K=typeof f.payload?.error==="string"?f.payload.error:"session.restore failed";if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw Error(K)}let Y=S$(f.payload?.snapshot),V=f.payload?.session,H=(Y?.sessionId??V?.sessionId)?.trim();if(Q&&!H){if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw Error("Hub checkpoint restore returned no session id")}if(H&&X&&H!==X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);if(H&&W)this.sessionCapabilities.set(H,W);if(H&&j.handlers.size>0)this.sessionClientContributionHandlers.set(H,j.handlers);if(H)this.ensureSessionSubscription(H);let B=Array.isArray(f.payload?.messages)?f.payload.messages:void 0,A=f.payload?.checkpoint;if(!A)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:H,startResult:H?{sessionId:H,manifest:Y?XA(Y,Z??{}):jA(H,Z??{},V),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:B,checkpoint:A}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let J=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(J.payload?.prompts)?J.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let J=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(J.payload?.prompts)?J.payload.prompts:[],prompt:J.payload?.prompt,updated:J.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let J=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(J.payload?.prompts)?J.payload.prompts:[],prompt:J.payload?.prompt,removed:J.payload?.removed===!0}}async getAccumulatedUsage($){let J=await this.client.command("session.get",{includeSnapshot:!0},$),Q=S$(J.payload?.snapshot);if(Q){let X=Q.usage?{...Q.usage}:void 0,f=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return X||f?{usage:X,aggregateUsage:f}:void 0}let Z=J.payload?.session,W=WA(Z?.usage),j=WA(Z?.aggregateUsage);return W||j?{usage:W,aggregateUsage:j}:void 0}async abort($,J){await this.client.command("run.abort",{sessionId:$,reason:fA(J)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,J]of this.sessionSubscriptions){J();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let J;try{J=await this.client.command("session.get",void 0,$)}catch(Q){if(d1(Q))return;throw Q}return QN(J.payload)}async listSessions($=100){let J=await this.client.command("session.list",{limit:$}),Q=Array.isArray(J.payload?.snapshots)?J.payload.snapshots.flatMap((W)=>{let j=S$(W);return j?[Z9(j)]:[]}):[];if(Q.length>0)return Q;return(J.payload?.sessions??[]).map(YA)}async listSettings($){let J=await this.client.command("settings.list",JA($));if(!J.ok)throw Error(W9(J,"settings.list"));return J.payload?.snapshot}async toggleSetting($){let J=await this.client.command("settings.toggle",JA($));if(!J.ok)throw Error(W9(J,"settings.toggle"));return{snapshot:J.payload?.snapshot,changedTypes:Array.isArray(J.payload?.changedTypes)?J.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,J){let Q={...J.metadata??{}};if(typeof J.prompt==="string")Q.prompt=J.prompt;if(typeof J.title==="string")Q.title=J.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async readSessionMessages($){let J=$.trim();if(!J)return[];let Q=await this.client.command("session.messages",{sessionId:J},J);if(!Q.ok)throw tB(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(W9(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:J,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(W9(Q,"session.messages"));let Z=Q.payload?.messages;return Array.isArray(Z)?Z:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,J){return this.events.subscribe($,J)}ensureSessionSubscription($){let J=$.trim();if(!J||this.sessionSubscriptions.has(J))return;let Q=this.client.subscribe((Z)=>{this.handleHubEvent(Z)},{sessionId:J});this.sessionSubscriptions.set(J,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let J=$.trim();if(!J)return;this.sessionSubscriptions.get(J)?.(),this.sessionSubscriptions.delete(J),this.agentDoneEmittedForCurrentRunBySession.delete(J)}resolveCapabilities($){return z0(this.defaultCapabilities,$.capabilities)??{}}emitToolCallContentStart($){this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:{type:"content_start",contentType:"tool",toolCallId:$.toolCallId,toolName:$.toolName,input:$.toolInput}}})}emitAgentDoneIfNeeded($){if(this.agentDoneEmittedForCurrentRunBySession.has($.sessionId))return;this.agentDoneEmittedForCurrentRunBySession.add($.sessionId),this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:JN($.payload)}})}handleHubEvent($){let J=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!J)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(J);let Q=S$($.payload?.snapshot),Z=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:J,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:J,status:Z?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"assistant.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",Z=$.payload?.redacted===!0;if(!Q&&!Z)return;this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:Z}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:J,payload:$.payload});return}case"usage.updated":{let Q=$N($.payload);this.events.emit({type:"agent_event",payload:{sessionId:J,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:J,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_end",contentType:"tool",toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Q=S$($.payload?.snapshot),Z=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:J,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:J,status:Z?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:J,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:J,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=S$($.payload?.snapshot),Z=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:J,payload:{...$.payload,reason:Z}}),Q?.interactive===!0&&j0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:J,reason:Z,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,J,Q){try{tB(this.telemetry,{component:"core",operation:$,error:J,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let J=$.sessionId?.trim();if(!J)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let Z=typeof $.payload?.requestId==="string"?$.payload.requestId:"",W=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!Z)return;let j=this.sessionClientContributionHandlers.get(J)?.get(W);if(!j){await this.client.command("capability.respond",{requestId:Z,ok:!1,error:`No client contribution handler registered for capability ${W} in session ${J}.`},J).catch(()=>{});return}let X=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},f=new AbortController;this.activeCapabilityAbortControllers.set(Z,f);let Y=(V)=>{this.client.command("capability.progress",{requestId:Z,payload:V},J).catch((H)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",H,$)})};try{let V=await j({payload:X,abortSignal:f.signal,progress:Y});if(f.signal.aborted)return;await this.client.command("capability.respond",{requestId:Z,ok:!0,payload:V},J)}catch(V){if(f.signal.aborted)return;await this.client.command("capability.respond",{requestId:Z,ok:!1,error:V instanceof Error?V.message:String(V)},J)}finally{this.activeCapabilityAbortControllers.delete(Z)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let J=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!J)return;let Q=this.activeCapabilityAbortControllers.get(J);if(!Q)return;Q.abort(sP($.payload.error))}async handleApprovalRequested($){let J=$.sessionId?.trim();if(!J)return;let Q=this.sessionCapabilities.get(J)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let Z=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",W=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",j=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!Z||!W||!j)return;let X=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},f=oP($.payload?.inputJson);this.pendingApprovalToolCallIds.add(W),this.emitToolCallContentStart({sessionId:J,toolCallId:W,toolName:j,toolInput:f});let Y=await Promise.resolve(Q({sessionId:J,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:J,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:W,toolName:j,input:f,policy:X})).catch((V)=>({approved:!1,reason:V instanceof Error?V.message:`Tool approval request failed: ${String(V)}`}));await this.client.command("approval.respond",{approvalId:Z,approved:Y.approved,reason:Y.reason},J).catch(()=>{})}}var HA={};w(HA,{RemoteRuntimeHost:()=>g8});class g8 extends r1{constructor($){super({url:N$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var BA={};w(BA,{SqliteSessionStore:()=>U1});import{existsSync as ZN,mkdirSync as WN}from"node:fs";import{join as jN}from"node:path";import{asBool as YJ,asOptionalString as D1,asString as i1,ensureSessionSchema as XN,loadSqliteDb as fN,nowIso as j9,toBoolInt as VJ}from"@cline/shared/db";import{resolveDbDataDir as YN}from"@cline/shared/storage";class U1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??YN()}init(){this.getRawDb()}ensureSessionsDir(){if(!ZN(this.sessionsDirPath))WN(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return jN(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=fN(this.sessionDbPath());return XN($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,J=[]){return this.getRawDb().prepare($).run(...J)}queryOne($,J=[]){return this.getRawDb().prepare($).get(...J)??void 0}queryAll($,J=[]){return this.getRawDb().prepare($).all(...J)}create($){let J=j9();this.run(`INSERT OR REPLACE INTO sessions (
|
|
491
503
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
492
504
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
493
505
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
494
506
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
495
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,
|
|
507
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,VJ($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,VJ($.enableTools),VJ($.enableSpawn),VJ($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,VJ($.isSubagent),$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"",$.hookPath??"",$.messagesPath??null,J])}update($){let J=[],Q=[];if($.endedAt!==void 0)J.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)J.push("exit_code = ?"),Q.push($.exitCode);if($.status!==void 0)J.push("status = ?"),Q.push($.status);if($.prompt!==void 0)J.push("prompt = ?"),Q.push($.prompt);if($.metadata!==void 0)J.push("metadata_json = ?"),Q.push($.metadata?JSON.stringify($.metadata):null);if($.parentSessionId!==void 0)J.push("parent_session_id = ?"),Q.push($.parentSessionId);if($.parentAgentId!==void 0)J.push("parent_agent_id = ?"),Q.push($.parentAgentId);if($.agentId!==void 0)J.push("agent_id = ?"),Q.push($.agentId);if($.conversationId!==void 0)J.push("conversation_id = ?"),Q.push($.conversationId);if(J.length===0)return;J.push("updated_at = ?"),Q.push(j9()),Q.push($.sessionId),this.run(`UPDATE sessions SET ${J.join(", ")} WHERE session_id = ?`,Q)}updateStatus($,J,Q){this.update({sessionId:$,status:J,endedAt:j0(J)?null:j9(),exitCode:j0(J)?null:Q??(J==="failed"?1:0)})}get($){let J=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
|
|
496
508
|
provider, model, cwd, workspace_root, team_name,
|
|
497
509
|
enable_tools, enable_spawn, enable_teams,
|
|
498
510
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
|
|
499
511
|
prompt, metadata_json, hook_path, messages_path, updated_at
|
|
500
|
-
FROM sessions WHERE session_id = ?`,[$]);if(!J)return;return{sessionId:i1(J.session_id),source:i1(J.source),pid:Number(J.pid??0),startedAt:i1(J.started_at),endedAt:J.ended_at??null,exitCode:J.exit_code??null,status:i1(J.status),interactive:
|
|
501
|
-
`,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let J=this.artifacts.sessionManifestPath($,!1);if(!
|
|
502
|
-
`;if(
|
|
503
|
-
`,"utf8")}}import{appendFileSync as
|
|
504
|
-
`,"utf8")}}import{formatUserInputBlock as
|
|
512
|
+
FROM sessions WHERE session_id = ?`,[$]);if(!J)return;return{sessionId:i1(J.session_id),source:i1(J.source),pid:Number(J.pid??0),startedAt:i1(J.started_at),endedAt:J.ended_at??null,exitCode:J.exit_code??null,status:i1(J.status),interactive:YJ(J.interactive),provider:i1(J.provider),model:i1(J.model),cwd:i1(J.cwd),workspaceRoot:i1(J.workspace_root),teamName:D1(J.team_name),enableTools:YJ(J.enable_tools),enableSpawn:YJ(J.enable_spawn),enableTeams:YJ(J.enable_teams),parentSessionId:D1(J.parent_session_id),parentAgentId:D1(J.parent_agent_id),agentId:D1(J.agent_id),conversationId:D1(J.conversation_id),isSubagent:YJ(J.is_subagent),prompt:D1(J.prompt),metadata:(()=>{let Q=D1(J.metadata_json);if(!Q)return;try{let Z=JSON.parse(Q);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return})(),hookPath:D1(J.hook_path),messagesPath:D1(J.messages_path),updatedAt:D1(J.updated_at)??j9()}}list($=200){let J=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Q=[];for(let Z of J){let W=this.get(i1(Z.session_id));if(W)Q.push(W)}return Q}delete($,J=!1){let Q=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(J)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}}m8();import{existsSync as J3,mkdirSync as $w,readFileSync as NA,renameSync as Jw,writeFileSync as Qw}from"node:fs";import{join as wA}from"node:path";import{resolveSessionDataDir as Zw}from"@cline/shared/storage";import{dirname as tN}from"node:path";import{nanoid as eN}from"nanoid";import{appendFileSync as _N,existsSync as ON,mkdirSync as AA,readFileSync as TN,writeFileSync as KA}from"node:fs";import{dirname as GA,join as MN}from"node:path";import{ensureHookLogDir as qN}from"@cline/shared/storage";class d7{adapter;messagesArtifactUploader;logger;artifacts;constructor($,J,Q){this.adapter=$;this.messagesArtifactUploader=J;this.logger=Q;this.artifacts=new uW(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,J,Q){lY(J,Q,XW($))}writeSessionManifest($,J){AA(GA($),{recursive:!0}),KA($,`${JSON.stringify(S0.parse(J),null,2)}
|
|
513
|
+
`,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let J=this.artifacts.sessionManifestPath($,!1);if(!ON(J))return{path:J};try{return{path:J,manifest:S0.parse(JSON.parse(TN(J,"utf8")))}}catch{return{path:J}}}async resolveArtifactPath($,J,Q){let W=(await this.adapter.getSession($))?.[J];return typeof W==="string"&&W.trim().length>0?W:Q($)}async persistSessionMessages($,J,Q){let Z=await this.resolveArtifactPath($,"messagesPath",(X)=>this.artifacts.sessionMessagesPath(X)),W=fW({updatedAt:e(),context:XW($),messages:J,systemPrompt:Q}),j=`${JSON.stringify(W,null,2)}
|
|
514
|
+
`;if(AA(GA(Z),{recursive:!0}),KA(Z,j,"utf8"),!this.messagesArtifactUploader)return;try{let X=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:Z,contents:j,row:X})}catch(X){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:X})}}appendStaleSessionHookLog($,J,Q,Z,W){let X=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??MN(qN(),"hooks.jsonl");_N(X,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:Z,sessionId:J,pid:Q,source:W})}
|
|
515
|
+
`,"utf8")}}import{appendFileSync as PN}from"node:fs";import{join as NN}from"node:path";import{resolveRootSessionId as FA}from"@cline/shared";import{ensureHookLogDir as wN}from"@cline/shared/storage";import{z as l7}from"zod";var SN="subagent",CN=l7.looseObject({task:l7.string().optional(),systemPrompt:l7.string().optional()});class X9{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,J,Q,Z){this.adapter=$;this.manifestStore=J;this.toPersistedMessages=Q;this.heartbeatLogIntervalMs=Z}teamTaskQueueKey($,J){return`${$}::${J}`}activeTeamTaskSessionId($,J){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,J))?.at(-1)}buildSubsessionRow($,J){return{sessionId:J.sessionId,source:SN,pid:process.ppid,startedAt:J.startedAt,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:!1,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:J.parentSessionId,parentAgentId:J.parentAgentId,agentId:J.agentId,conversationId:J.conversationId??null,isSubagent:!0,prompt:J.prompt,metadata:j6({prompt:J.prompt}),hookPath:"",messagesPath:J.messagesPath,updatedAt:J.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let J=FA($.sessionContext);if(!J)return;let Q=CN.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:J,parentAgentId:$.agent_id,task:Q.success?Q.data.task:void 0,systemPrompt:Q.success?Q.data.systemPrompt:void 0})}async upsertSubagentSession($){let J=$.rootSessionId;if(!J)return;let Q=await this.adapter.getSession(J);if(!Q)return;let Z=W8(J,$.agentId),W=await this.adapter.getSession(Z),j=e(),X=this.manifestStore.artifacts.subagentArtifactPaths(Z,$.agentId,this.activeTeamTaskSessionId(J,$.parentAgentId)),f=$.prompt??W?.prompt??void 0;if(!f)f=await this.adapter.claimSpawnRequest(J,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!W)return await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:Z,parentSessionId:J,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:f,startedAt:j,...X})),this.manifestStore.initializeMessagesFile(Z,X.messagesPath,j),Z;return await this.adapter.updateSession({sessionId:Z,setRunning:!0,parentSessionId:J,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:W.prompt??f??null,metadata:j6({metadata:W.metadata??void 0,prompt:W.prompt??f??null}),expectedStatusLock:W.statusLock}),Z}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let J=FA($.sessionContext);if(!J)return;if($.hookName==="session_shutdown"){let Q=W8(J,$.agent_id);return await this.adapter.getSession(Q)?Q:void 0}return await this.upsertSubagentSession({agentId:$.agent_id,parentAgentId:$.parent_agent_id,conversationId:$.taskId,rootSessionId:J})}async applySubagentStatus($,J){await this.applySubagentStatusBySessionId($,Q6(J))}async applySubagentStatusBySessionId($,J){let Q=await this.adapter.getSession($);if(!Q)return;let Z=j0(J)?null:e(),W=j0(J)?null:J==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:J,endedAt:Z,exitCode:W,expectedStatusLock:Q.statusLock})}async applyStatusToRunningChildSessions($,J){if(!$)return;let Q=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let Z of Q)await this.applySubagentStatusBySessionId(Z.sessionId,J)}async onTeamTaskStart($,J,Q){let Z=await this.adapter.getSession($);if(!Z)return;let W=$6($,J),j=e(),{messagesPath:X}=this.manifestStore.artifacts.subagentArtifactPaths(W,J);await this.adapter.upsertSession(this.buildSubsessionRow(Z,{sessionId:W,parentSessionId:$,parentAgentId:"lead",agentId:J,prompt:Q||`Team task for ${J}`,startedAt:j,messagesPath:X})),this.manifestStore.initializeMessagesFile(W,X,j);let f=this.teamTaskQueueKey($,J),Y=this.teamTaskSessionsByAgent.get(f)??[];Y.push(W),this.teamTaskSessionsByAgent.set(f,Y)}async onTeamTaskEnd($,J,Q,Z,W,j){let X=this.teamTaskQueueKey($,J),f=this.teamTaskSessionsByAgent.get(X);if(!f||f.length===0)return;let Y=f.shift();if(f.length===0)this.teamTaskSessionsByAgent.delete(X);if(!Y)return;let V=W?.messages??j,H=this.toPersistedMessages(V,W,j);if(H)await this.manifestStore.persistSessionMessages(Y,H);await this.applySubagentStatusBySessionId(Y,Q),this.teamTaskLastHeartbeatBySession.delete(Y),this.teamTaskLastProgressLineBySession.delete(Y)}async onTeamTaskProgress($,J,Q,Z){let W=this.teamTaskQueueKey($,J),j=this.teamTaskSessionsByAgent.get(W)?.[0];if(!j)return;let X=Q.trim();if(!X)return;let f=Z?.kind??"progress";if(f==="heartbeat"){let V=Date.now(),H=this.teamTaskLastHeartbeatBySession.get(j)??0;if(V-H<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(j,V)}let Y=f==="heartbeat"?"[progress] heartbeat":f==="text"?`[progress] text: ${X}`:`[progress] ${X}`;if(this.teamTaskLastProgressLineBySession.get(j)===Y)return;this.teamTaskLastProgressLineBySession.set(j,Y)}async handleSubAgentStart($,J){let Q=await this.upsertSubagentSession({agentId:J.subAgentId,parentAgentId:J.parentAgentId,conversationId:J.conversationId,prompt:J.input.task,rootSessionId:$});if(!Q)return;await this.applySubagentStatusBySessionId(Q,"running")}async handleSubAgentEnd($,J){let Q=await this.upsertSubagentSession({agentId:J.subAgentId,parentAgentId:J.parentAgentId,conversationId:J.conversationId,prompt:J.input.task,rootSessionId:$});if(!Q)return;if(J.error){await this.applySubagentStatusBySessionId(Q,"failed");return}let Z=this.toPersistedMessages(J.agentResult?.messages,J.agentResult);if(Z)await this.manifestStore.persistSessionMessages(Q,Z);let W=J.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Q,W==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Q=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??NN(wN(),"hooks.jsonl");PN(Q,`${JSON.stringify({ts:e(),...$})}
|
|
516
|
+
`,"utf8")}}import{formatUserInputBlock as oN}from"@cline/shared";var PA={};w(PA,{toTeamProgressLifecycleEvent:()=>d8,sanitizeTeamName:()=>hY,reviveTeamStateDates:()=>E5,parseConfiguredAgentConfig:()=>HJ,loadConfiguredAgentConfigs:()=>v8,createWorkerReviewerTeam:()=>qA,createSpawnAgentTool:()=>A$,createDelegatedAgentConfigProvider:()=>H$,createDelegatedAgent:()=>B$,createConfiguredAgentTools:()=>c8,createAgentTeamsTools:()=>r$,createAgentTeam:()=>i7,buildTeamProgressSummary:()=>u8,buildDelegatedAgentConfig:()=>l$,buildConfiguredAgentToolName:()=>BJ,buildConfiguredAgentToolDescriptors:()=>AJ,bootstrapAgentTeams:()=>Z8,AgentTeamsRuntime:()=>T2,AgentTeam:()=>p8});import{existsSync as yN,readdirSync as EN,readFileSync as bN}from"node:fs";import{basename as DA,extname as hN,join as kN}from"node:path";import{resolveAgentConfigSearchPaths as IN}from"@cline/shared/storage";import RA from"yaml";import{z as P0}from"zod";var LA=P0.object({name:P0.string().trim().min(1),description:P0.string().trim().min(1),tools:P0.union([P0.string(),P0.array(P0.string())]).optional(),skills:P0.union([P0.string(),P0.array(P0.string())]).optional(),providerId:P0.string().trim().min(1).optional(),modelId:P0.string().trim().min(1).optional(),maxIterations:P0.number().int().positive().optional()});function xN($){let J=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!J)throw Error("Missing YAML frontmatter block in agent config file.");let Q=J[0].length,Z=/^---[^\S\r\n]*(?:\r?\n|$)/gm;Z.lastIndex=Q;let W,j=Array.from($.matchAll(Z)).filter((X)=>X.index>=Q);for(let X of j){let f=X.index,Y=$.slice(Q,f);try{let V=RA.parse(Y);if(!V||typeof V!=="object"||Array.isArray(V))continue;LA.parse(V);let H=$.slice(f+X[0].length);W={frontmatter:Y,body:H}}catch{}}if(W)return W;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function UA($){if($===void 0)return;let J=Array.isArray($)?$:$.split(",");return Array.from(new Set(J.map((Q)=>Q.trim()).filter((Q)=>Q.length>0)))}function gN($){return $.trim().toLowerCase()}function mN($){let J=hN($).toLowerCase();return J===".yml"||J===".yaml"}function HJ($,J={}){let{frontmatter:Q,body:Z}=xN($),W=RA.parse(Q);if(!W||typeof W!=="object"||Array.isArray(W))throw Error("Agent config frontmatter must be a YAML mapping.");let j=LA.parse(W),X=Z.trim();if(!X)throw Error("Missing system prompt body in agent config file.");return{name:j.name,description:j.description,tools:UA(j.tools),skills:UA(j.skills),providerId:j.providerId,modelId:j.modelId,maxIterations:j.maxIterations,systemPrompt:X,path:J.path}}function v8($){let J=$.searchPaths??IN($.workspaceRoot),Q=new Map,Z=[];for(let j of J.filter(Boolean)){if(!yN(j))continue;let X;try{X=EN(j,{withFileTypes:!0})}catch(f){Z.push({path:j,error:f instanceof Error?f:Error(String(f))});continue}for(let f of X){if(!f.isFile()||!mN(f.name))continue;let Y=kN(j,f.name);try{let V=bN(Y,"utf8"),H=HJ(V,{path:Y}),B=gN(H.name);if(!Q.has(B))Q.set(B,H)}catch(V){Z.push({path:Y,error:V instanceof Error?V:Error(String(V))})}}}return{configs:Array.from(Q.values()).sort((j,X)=>(j.path?DA(j.path):j.name).localeCompare(X.path?DA(X.path):X.name)),errors:Z}}import{createTool as vN,zodToJsonSchema as cN}from"@cline/shared";import{z as zA}from"zod";var p7="subagent_",f9=64,uN=zA.object({prompt:zA.string().trim().min(1).describe("Task for the subagent to perform")});function dN($){let J="",Q=!0;for(let Z of $.trim().toLowerCase()){let W=Z.charCodeAt(0);if(!(W>=97&&W<=122||W>=48&&W<=57||Z==="_")||Z==="_"){if(!Q)J+="_",Q=!0;continue}J+=Z,Q=!1}return Q?J.slice(0,-1):J}function lN($){let J=2166136261;for(let Q=0;Q<$.length;Q++)J^=$.charCodeAt(Q),J=Math.imul(J,16777619);return(J>>>0).toString(36)}function BJ($){let J=dN($)||"agent",Q=lN($).slice(0,6),Z=`${p7}${J}`;if(Z.length<=f9)return Z;let W=f9-p7.length-Q.length-1,j=J.slice(0,Math.max(1,W));return`${p7}${j}_${Q}`.slice(0,f9)}function AJ($){let J=new Set,Q=[];for(let Z of[...$].sort((W,j)=>W.name.localeCompare(j.name))){let W=BJ(Z.name),j=W,X=2;while(J.has(j)){let f=`_${X++}`,Y=Math.max(1,f9-f.length);j=`${W.slice(0,Y)}${f}`}J.add(j),Q.push({toolName:j,config:Z})}return Q}function pN($,J){return{...$,providerId:J.providerId??$.providerId,modelId:J.modelId??$.modelId,maxIterations:J.maxIterations??$.maxIterations}}function c8($){return AJ($.agents).map(({toolName:J,config:Q})=>{return vN({name:J,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:cN(uN),execute:async(W,j)=>{let X=$.configProvider.getRuntimeConfig(),f=H$(pN(X,Q)),Y=$.createSubAgentTools?await $.createSubAgentTools(Q,W,j):[],V=B$({kind:"subagent",prompt:Q.systemPrompt,configProvider:f,tools:Y,maxIterations:Q.maxIterations,parentAgentId:j.agentId,abortSignal:j.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),H=V.getAgentId(),B=V.getConversationId(),A=j.agentId,K={systemPrompt:Q.systemPrompt,task:W.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:H,conversationId:B,parentAgentId:A,input:K})}catch{}try{let G=await V.run(W.prompt),R={text:G.text,iterations:G.iterations,finishReason:G.finishReason,usage:{inputTokens:G.usage.inputTokens,outputTokens:G.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:B,parentAgentId:A,input:K,result:R,agentResult:G})}catch{}return R}catch(G){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:B,parentAgentId:A,input:K,error:G instanceof Error?G:Error(String(G))})}catch{}throw G}},timeoutMs:300000,retryable:!1})})}function R1(){return new Date().toISOString()}function _A($,J){if(J<=0)return 0;return Math.round($/J*100)}function rN($,J){let Q=new Set;for(let W of J)if(W.status==="reviewed")Q.add(`${W.outcomeId}:${W.section}`);let Z=new Set;for(let W of $){if(W.status==="finalized")continue;for(let j of W.requiredSections)if(!Q.has(`${W.id}:${j}`))Z.add(`${W.id}:${j}`)}return[...Z].sort((W,j)=>W.localeCompare(j))}function u8($,J){let Q={idle:0,running:0,stopped:0},Z={pending:0,in_progress:0,blocked:0,completed:0},W={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},j={draft:0,in_review:0,finalized:0},X={draft:0,reviewed:0,rejected:0},f=0,Y=0;for(let D of J.members)if(Q[D.status]+=1,D.role==="lead")f+=1;else Y+=1;let V=[],H=[],B=J.tasks.filter((D)=>D.status==="completed").length,A=new Map(J.tasks.map((D)=>[D.id,D]));for(let D of J.tasks){if(Z[D.status]+=1,D.status==="blocked"){V.push(D.id);continue}if(D.status!=="pending")continue;if(D.dependsOn.every((F)=>{return A.get(F)?.status==="completed"}))H.push(D.id)}let K=[],G,R=0;for(let D of J.runs){if(W[D.status]+=1,D.status==="queued"||D.status==="running")K.push(D.id);let U=D.startedAt.getTime();if(U>=R)R=U,G=D.id}for(let D of J.outcomes)j[D.status]+=1;for(let D of J.outcomeFragments)X[D.status]+=1;return{teamName:$,updatedAt:R1(),members:{total:J.members.length,byStatus:Q,leadCount:f,teammateCount:Y},tasks:{total:J.tasks.length,byStatus:Z,blockedTaskIds:V,readyTaskIds:H,completionPct:_A(B,J.tasks.length)},runs:{total:J.runs.length,byStatus:W,activeRunIds:K,latestRunId:G},outcomes:{total:J.outcomes.length,byStatus:j,finalizedPct:_A(j.finalized,J.outcomes.length),missingRequiredSections:rN(J.outcomes,J.outcomeFragments)},fragments:{total:J.outcomeFragments.length,byStatus:X}}}function d8($){let{event:J}=$;switch(J.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),taskId:J.task.id,agentId:J.task.assignee??J.task.createdBy};case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),runId:J.run.id,taskId:J.run.taskId,agentId:J.run.agentId,message:J.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),runId:J.run.id,taskId:J.run.taskId,agentId:J.run.agentId,message:J.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),outcomeId:J.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),outcomeId:J.fragment.outcomeId,fragmentId:J.fragment.id,agentId:J.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),taskId:J.message.taskId,agentId:J.message.fromAgentId,message:J.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),taskId:J.entry.taskId,agentId:J.entry.agentId,message:J.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),agentId:J.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1()}}import{sanitizeFileName as iN,TeamMessageType as I}from"@cline/shared";import{nanoid as nN}from"nanoid";import{TeamMessageType as Bd}from"@cline/shared";function r7($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function OA($,J){return $?.status==="stopped"&&r7(J)}var aN=600000,TA="recovered_queued";function sN($){return`This is an automatic recovery of interrupted team run ${$.id}. The previous process stopped before completion. Continue the task safely, inspect the current workspace state before making changes, and avoid duplicating completed work.
|
|
505
517
|
|
|
506
|
-
${$.message}`}class
|
|
507
|
-
${
|
|
518
|
+
${$.message}`}class p8{agents=new Map;configs=new Map;onTeamEvent;constructor($,J){if(this.onTeamEvent=J,$)for(let[Q,Z]of Object.entries($))this.addAgent(Q,Z)}addAgent($,J){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let Q={...J,onEvent:(W)=>{J.onEvent?.(W),this.emitEvent({type:I.AgentEvent,agentId:$,event:W})}},Z=new V$(Q);if(Q.onEvent)Z.subscribeEvents(Q.onEvent);this.agents.set($,Z),this.configs.set($,J)}removeAgent($){return this.configs.delete($),this.agents.delete($)}getAgent($){return this.agents.get($)}getAgentIds(){return Array.from(this.agents.keys())}get size(){return this.agents.size}async routeTo($,J){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:I.TaskStart,agentId:$,message:J});try{let Z=await Q.run(J);return this.emitEvent({type:I.TaskEnd,agentId:$,result:Z}),Z}catch(Z){let W=Z instanceof Error?Z:Error(String(Z));throw this.emitEvent({type:I.TaskEnd,agentId:$,error:W,messages:Q.getMessages()}),Z}}async continueTo($,J){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:I.TaskStart,agentId:$,message:J});try{let Z=await Q.continue(J);return this.emitEvent({type:I.TaskEnd,agentId:$,result:Z}),Z}catch(Z){let W=Z instanceof Error?Z:Error(String(Z));throw this.emitEvent({type:I.TaskEnd,agentId:$,error:W,messages:Q.getMessages()}),Z}}async runParallel($){let J=$.map(async(Q)=>{let Z=this.agents.get(Q.agentId);if(!Z)return{agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata};this.emitEvent({type:I.TaskStart,agentId:Q.agentId,message:Q.message});try{let W=await Z.run(Q.message);return this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,result:W}),{agentId:Q.agentId,result:W,metadata:Q.metadata}}catch(W){let j=W instanceof Error?W:Error(String(W));return this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,error:j,messages:Z.getMessages()}),{agentId:Q.agentId,result:void 0,error:j,metadata:Q.metadata}}});return Promise.all(J)}async runSequential($){let J=[];for(let Q of $){let Z=this.agents.get(Q.agentId);if(!Z){J.push({agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata});continue}this.emitEvent({type:I.TaskStart,agentId:Q.agentId,message:Q.message});try{let W=await Z.run(Q.message);this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,result:W}),J.push({agentId:Q.agentId,result:W,metadata:Q.metadata})}catch(W){let j=W instanceof Error?W:Error(String(W));this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,error:j,messages:Z.getMessages()}),J.push({agentId:Q.agentId,result:void 0,error:j,metadata:Q.metadata})}}return J}async runPipeline($,J,Q){let Z=[],W=J;for(let j of $){let X=this.agents.get(j);if(!X){Z.push({agentId:j,result:void 0,error:Error(`Agent "${j}" not found in team`)});break}this.emitEvent({type:I.TaskStart,agentId:j,message:W});try{let f=await X.run(W);this.emitEvent({type:I.TaskEnd,agentId:j,result:f}),Z.push({agentId:j,result:f});let Y=$.indexOf(j)+1;if(Y<$.length){let V=$[Y];W=Q?Q(f,V):`Previous agent output:
|
|
519
|
+
${f.text}
|
|
508
520
|
|
|
509
|
-
Please continue from here.`}}catch(
|
|
521
|
+
Please continue from here.`}}catch(f){let Y=f instanceof Error?f:Error(String(f));this.emitEvent({type:I.TaskEnd,agentId:j,error:Y,messages:X.getMessages()}),Z.push({agentId:j,result:void 0,error:Y});break}}return Z}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function i7($,J){return new p8($,J)}function qA($){let J=i7({worker:$.worker,reviewer:$.reviewer}),Q=J;return Q.doAndReview=async(Z)=>{let W=await J.routeTo("worker",Z),j=await J.routeTo("reviewer",`Please review this work:
|
|
510
522
|
|
|
511
|
-
${W.text}`);return{workerResult:W,reviewResult:j}},Q}class T2{teamId;teamName;onTeamEvent;members=new Map;tasks=new Map;missionLog=[];mailbox=[];missionStepCounter=0;taskCounter=0;messageCounter=0;missionCounter=0;runCounter=0;outcomeCounter=0;outcomeFragmentCounter=0;runs=new Map;runQueue=[];queuedRunDispatchTimer;outcomes=new Map;outcomeFragments=new Map;missionLogIntervalSteps;missionLogIntervalMs;maxConcurrentRuns;constructor($){this.teamName=$.teamName,this.teamId=`t_${
|
|
523
|
+
${W.text}`);return{workerResult:W,reviewResult:j}},Q}class T2{teamId;teamName;onTeamEvent;members=new Map;tasks=new Map;missionLog=[];mailbox=[];missionStepCounter=0;taskCounter=0;messageCounter=0;missionCounter=0;runCounter=0;outcomeCounter=0;outcomeFragmentCounter=0;runs=new Map;runQueue=[];queuedRunDispatchTimer;outcomes=new Map;outcomeFragments=new Map;missionLogIntervalSteps;missionLogIntervalMs;maxConcurrentRuns;constructor($){this.teamName=$.teamName,this.teamId=`t_${iN(nN(10))}`,this.onTeamEvent=$.onTeamEvent,this.missionLogIntervalSteps=Math.max(1,$.missionLogIntervalSteps??3),this.missionLogIntervalMs=Math.max(1000,$.missionLogIntervalMs??120000),this.maxConcurrentRuns=Math.max(1,$.maxConcurrentRuns??2);let J=$.leadAgentId??"lead";this.members.set(J,{agentId:J,role:"lead",status:"idle",runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()})}getTeamId(){return this.teamId}getTeamName(){return this.teamName}getMemberRole($){return this.members.get($)?.role}getMemberIds(){return Array.from(this.members.keys())}getTeammateIds(){return Array.from(this.members.values()).filter(($)=>$.role==="teammate").map(($)=>$.agentId)}getTask($){return this.tasks.get($)}listTasks(){return Array.from(this.tasks.values())}listTaskItems($){return Array.from(this.tasks.values()).map((J)=>{let Q=this.getUnresolvedDependencies(J);return{...J,blockedBy:Q,isReady:J.status==="pending"&&!J.assignee&&Q.length===0}}).filter((J)=>{if($?.status&&J.status!==$.status)return!1;if($?.assignee&&J.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,J){let Q=J?.unreadOnly??!0,Z=J?.markRead??!0,W=J?.limit,j=this.mailbox.filter((f)=>f.toAgentId===$&&(!Q||!f.readAt)),X=typeof W==="number"&&W>0?j.slice(Math.max(0,j.length-W)):j;if(Z){let f=new Date;for(let Y of X)if(!Y.readAt)Y.readAt=f}return X.map((f)=>({...f}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let Q of this.tasks.values())$[Q.status]++;let J={draft:0,in_review:0,finalized:0};for(let Q of this.outcomes.values())J[Q.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((Q)=>({agentId:Q.agentId,role:Q.role,description:Q.description,status:Q.status})),taskCounts:$,unreadMessages:this.mailbox.filter((Q)=>!Q.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").length,outcomeCounts:J}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map(($)=>({agentId:$.agentId,role:$.role,description:$.description,status:$.status})),tasks:Array.from(this.tasks.values()).map(($)=>({...$})),mailbox:this.mailbox.map(($)=>({...$})),missionLog:this.missionLog.map(($)=>({...$})),runs:Array.from(this.runs.values()).map(($)=>({...$})),outcomes:Array.from(this.outcomes.values()).map(($)=>({...$})),outcomeFragments:Array.from(this.outcomeFragments.values()).map(($)=>({...$}))}}hydrateState($){this.clearQueuedRunDispatchTimer(),this.tasks.clear();for(let Q of $.tasks)this.tasks.set(Q.id,{...Q});this.mailbox.length=0,this.mailbox.push(...$.mailbox.map((Q)=>({...Q}))),this.missionLog.length=0,this.missionLog.push(...$.missionLog.map((Q)=>({...Q}))),this.runs.clear();for(let Q of $.runs??[])this.runs.set(Q.id,{...Q});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").map((Q)=>Q.id)),this.outcomes.clear();for(let Q of $.outcomes??[])this.outcomes.set(Q.id,{...Q});this.outcomeFragments.clear();for(let Q of $.outcomeFragments??[])this.outcomeFragments.set(Q.id,{...Q});let J=Array.from(this.members.values()).filter((Q)=>Q.role==="lead");this.members.clear();for(let Q of J)this.members.set(Q.agentId,{...Q,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let Q of $.members){if(Q.role!=="teammate")continue;this.members.set(Q.agentId,{agentId:Q.agentId,role:"teammate",description:Q.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,l8($.tasks.map((Q)=>Q.id),"task_")),this.messageCounter=Math.max(this.messageCounter,l8($.mailbox.map((Q)=>Q.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,l8($.missionLog.map((Q)=>Q.id),"log_")),this.runCounter=Math.max(this.runCounter,l8(($.runs??[]).map((Q)=>Q.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,l8(($.outcomes??[]).map((Q)=>Q.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,l8(($.outcomeFragments??[]).map((Q)=>Q.id),"frag_"))}isTeammateActive($){let J=this.members.get($);return!!J&&J.role==="teammate"&&!!J.agent}spawnTeammate({agentId:$,config:J}){let Q=this.members.get($);if(Q&&Q.role!=="teammate")throw Error(`Team member "${$}" already exists and is not a teammate`);if(Q&&Q.runningCount>0)throw Error(`Teammate "${$}" is currently running and cannot be respawned`);let Z={...J,apiTimeoutMs:aN,consumePendingUserMessage:()=>{let X=this.members.get($);if(!X||!X.pendingSteerMessage)return;let f=X.pendingSteerMessage;return X.pendingSteerMessage=void 0,f},onEvent:(X)=>{J.onEvent?.(X),this.emitEvent({type:I.AgentEvent,agentId:$,event:X}),this.trackMeaningfulEvent($,X)}},W=new V$(Z);if(Z.onEvent)W.subscribeEvents(Z.onEvent);let j={agentId:$,role:"teammate",description:J.role,status:"idle",agent:W,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,j),this.emitEvent({type:I.TeammateSpawned,agentId:$,role:J.role,teammate:{rolePrompt:J.systemPrompt,modelId:J.modelId,maxIterations:J.maxIterations,runtimeAgentId:W.getAgentId(),conversationId:W.getConversationId(),parentAgentId:null}}),{agentId:j.agentId,role:j.role,description:j.description,status:j.status}}shutdownTeammate($,J){let Q=this.members.get($);if(!Q||Q.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{Q.agent?.abort()}catch(Z){if(!r7(Z))throw Z}Q.status="stopped",this.emitEvent({type:I.TeammateShutdown,agentId:$,reason:J})}updateTeammateConnections($){for(let J of this.members.values()){if(J.role!=="teammate"||!J.agent)continue;J.agent.updateConnection($)}}createTask($){let J=`task_${String(++this.taskCounter).padStart(4,"0")}`,Q=new Date,Z={id:J,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:Q,updatedAt:Q,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(J,Z),this.emitEvent({type:I.TeamTaskUpdated,task:{...Z}}),{...Z}}claimTask($,J){let Q=this.requireTask($);return this.assertDependenciesResolved(Q),Q.status="in_progress",Q.assignee=J,Q.updatedAt=new Date,this.emitEvent({type:I.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:J,taskId:$,kind:"progress",summary:`Claimed task "${Q.title}"`}),{...Q}}blockTask($,J,Q){let Z=this.requireTask($);return Z.status="blocked",Z.updatedAt=new Date,Z.summary=Q,this.emitEvent({type:I.TeamTaskUpdated,task:{...Z}}),this.appendMissionLog({agentId:J,taskId:$,kind:"blocked",summary:Q}),{...Z}}completeTask($,J,Q){let Z=this.requireTask($);if(Z.status="completed",Z.updatedAt=new Date,Z.summary=Q,!Z.assignee)Z.assignee=J;return this.emitEvent({type:I.TeamTaskUpdated,task:{...Z}}),this.appendMissionLog({agentId:J,taskId:$,kind:"done",summary:Q}),{...Z}}async routeToTeammate($,J,Q){let Z=this.members.get($);if(!Z||Z.role!=="teammate"||!Z.agent)throw Error(`Teammate "${$}" was not found`);if(!Z.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");Z.runningCount++,Z.status="running",this.emitEvent({type:I.TaskStart,agentId:$,message:J});try{let W=this.listMailbox($,{unreadOnly:!0,markRead:!0}),j=W.length>0?`${this.buildMailboxNotification(W)}
|
|
512
524
|
|
|
513
|
-
${J}`:J,f=Q?.continueConversation?await Z.agent.continue(j):await Z.agent.run(j);return this.emitEvent({type:I.TaskEnd,agentId:$,result:f}),this.recordProgressStep($,`Completed a delegated run (${f.iterations} iterations)`,Q?.taskId,!0),f}catch(W){let j=W instanceof Error?W:Error(String(W));if(this.emitEvent({type:I.TaskEnd,agentId:$,error:j,messages:Z.agent.getMessages()}),!AA(Z,j))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:j.message});throw j}finally{if(Z.runningCount--,Z.runningCount<=0&&this.members.get($)?.status!=="stopped")Z.status="idle"}}startTeammateRun($,J,Q){let Z=`run_${String(++this.runCounter).padStart(5,"0")}`,W={id:Z,agentId:$,taskId:Q?.taskId,status:"queued",message:J,priority:Q?.priority??0,retryCount:0,maxRetries:Math.max(0,Q?.maxRetries??0),continueConversation:Q?.continueConversation,startedAt:new Date(0),leaseOwner:Q?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(Z,W),this.runQueue.push(Z),this.emitEvent({type:I.RunQueued,run:{...W}}),this.dispatchQueuedRuns(),{...W}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let J=this.selectNextDispatchableQueuedRun();$=J.nextDelayedAttemptAt;let Q=J.index;if(Q<0){this.scheduleQueuedRunDispatch($);return}let[Z]=this.runQueue.splice(Q,1),W=Z?this.runs.get(Z):void 0;if(!W||W.status!=="queued")continue;this.executeQueuedRun(W)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,J=Number.NEGATIVE_INFINITY,Q,Z=Date.now();for(let W=0;W<this.runQueue.length;W++){let j=this.runs.get(this.runQueue[W]);if(!j||j.status!=="queued")continue;if(j.nextAttemptAt&&j.nextAttemptAt.getTime()>Z){if(!Q||j.nextAttemptAt<Q)Q=j.nextAttemptAt;continue}if(j.priority>J)J=j.priority,$=W}return{index:$,nextDelayedAttemptAt:Q}}scheduleQueuedRunDispatch($){if(!$)return;let J=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},J)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let J of this.runs.values())if(J.status==="running")$++;return $}async executeQueuedRun($){let J=$.currentActivity===KA;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:I.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let Z=J?IN($):$.message,W=await this.routeToTeammate($.agentId,Z,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=W,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:I.RunCompleted,run:{...$}})}catch(Z){let W=Z instanceof Error?Z.message:String(Z??"Unknown error");$.error=W,$.endedAt=new Date;let j=this.members.get($.agentId);if(AA(j,Z))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:I.RunCancelled,run:{...$},reason:W});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:I.RunFailed,run:{...$}})}finally{clearInterval(Q),this.dispatchQueuedRuns()}}listRuns($){let J=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Q)=>{if(!J&&!["running","queued"].includes(Q.status))return!1;if($?.status&&Q.status!==$.status)return!1;if($?.agentId&&Q.agentId!==$.agentId)return!1;return!0}).map((Q)=>({...Q}))}getRun($){let J=this.runs.get($);return J?{...J}:void 0}async awaitRun($,J=250){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);while(Q.status==="queued"||Q.status==="running")await GA(J);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((J)=>["queued","running"].includes(J.status)))await GA($);return this.listRuns()}cancelRun($,J){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);if(Q.status==="completed"||Q.status==="failed")return{...Q};Q.status="cancelled",Q.error=J,Q.endedAt=new Date,Q.currentActivity="cancelled";let Z=this.runQueue.indexOf($);if(Z>=0)this.runQueue.splice(Z,1);return this.emitEvent({type:I.RunCancelled,run:{...Q},reason:J}),{...Q}}recoverActiveRuns($="runtime_recovered"){let J=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;let Z=this.members.get(Q.agentId);if(!Z||Z.role!=="teammate"||!Z.agent){Q.status="interrupted",Q.error="teammate_unavailable_after_recovery",Q.endedAt=new Date,Q.currentActivity="interrupted",this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:Q.error});continue}let W=new Date;if(Q.status="queued",Q.error=void 0,Q.endedAt=void 0,Q.heartbeatAt=W,Q.lastProgressAt=W,Q.lastProgressMessage=$,Q.currentActivity=KA,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);J.push({...Q}),this.emitEvent({type:I.RunQueued,run:{...Q}})}return this.dispatchQueuedRuns(),J}markStaleRunsInterrupted($="runtime_recovered"){let J=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;Q.status="interrupted",Q.error=$,Q.endedAt=new Date,Q.currentActivity="interrupted",J.push({...Q}),this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),J}sendMessage($,J,Q,Z,W){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let j=this.members.get(J);if(!j)throw Error(`Unknown recipient "${J}"`);let f={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:J,subject:Q,body:Z,taskId:W,sentAt:new Date};if(this.mailbox.push(f),this.emitEvent({type:I.TeamMessage,message:{...f}}),j.role==="teammate"&&j.runningCount>0&&j.agent)j.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Q}". Use the team_read_mailbox tool to read it at your convenience.`;return{...f}}broadcast($,J,Q,Z){let W=[];for(let j of this.members.values()){if(j.agentId===$)continue;if(j.role==="lead")continue;W.push(this.sendMessage($,j.agentId,J,Q,Z?.taskId))}return W}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let J={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:$.agentId,taskId:$.taskId,kind:$.kind,summary:$.summary,evidence:$.evidence,nextAction:$.nextAction};this.missionLog.push(J);let Q=this.members.get($.agentId);if(Q)Q.lastMissionAt=Date.now(),Q.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:I.TeamMissionLog,entry:{...J}}),{...J}}createOutcome($){let J={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:$.title,status:"draft",requiredSections:[...new Set($.requiredSections)],createdBy:$.createdBy,createdAt:new Date};return this.outcomes.set(J.id,J),this.emitEvent({type:I.OutcomeCreated,outcome:{...J}}),{...J}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let J=this.outcomes.get($.outcomeId);if(!J)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!J.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Q={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(Q.id,Q),J.status==="draft")J.status="in_review";return this.emitEvent({type:I.OutcomeFragmentAttached,fragment:{...Q}}),{...Q}}reviewOutcomeFragment($){let J=this.outcomeFragments.get($.fragmentId);if(!J)throw Error(`Fragment "${$.fragmentId}" was not found`);return J.status=$.approved?"reviewed":"rejected",J.reviewedBy=$.reviewedBy,J.reviewedAt=new Date,this.emitEvent({type:I.OutcomeFragmentReviewed,fragment:{...J}}),{...J}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((J)=>J.outcomeId===$).map((J)=>({...J}))}finalizeOutcome($){let J=this.outcomes.get($);if(!J)throw Error(`Outcome "${$}" was not found`);let Q=this.listOutcomeFragments($);for(let Z of J.requiredSections)if(!Q.some((j)=>j.section===Z&&j.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${Z}" is missing a reviewed fragment.`);return J.status="finalized",J.finalizedAt=new Date,this.emitEvent({type:I.OutcomeFinalized,outcome:{...J}}),{...J}}cleanup(){for(let $ of this.members.values())if($.role==="teammate"&&$.runningCount>0)throw Error(`Cannot cleanup team while teammate "${$.agentId}" is still running`);if(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let $ of this.members.values())if($.role==="teammate")try{$.agent?.abort()}catch(J){if(!dW(J))throw J}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[$,J]of this.members.entries())if(J.role==="teammate")this.members.delete($)}requireTask($){let J=this.tasks.get($);if(!J)throw Error(`Task "${$}" was not found`);return J}assertDependenciesResolved($){let J=this.getUnresolvedDependencies($);if(J.length>0)throw Error(`Task "${$.id}" is blocked by "${J[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((J)=>{let Q=this.tasks.get(J);return!Q||Q.status!=="completed"})}trackMeaningfulEvent($,J){if(this.recordRunActivityFromAgentEvent($,J),J.type==="iteration_end"&&J.hadToolCalls){this.recordProgressStep($,`Completed iteration ${J.iteration} with ${J.toolCallCount} tool call(s)`);return}if(J.type==="content_end"&&J.contentType==="tool"&&!J.error){this.recordProgressStep($,`Finished tool "${J.toolName??"unknown"}"`);return}if(J.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${J.iterations} iterations)`});return}if(J.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:J.error.message})}recordRunActivityFromAgentEvent($,J){let Q;switch(J.type){case"iteration_start":Q=`iteration_${J.iteration}_started`;break;case"content_start":if(J.contentType==="tool")Q=`running_tool_${J.toolName??"unknown"}`;break;case"content_end":if(J.contentType==="tool")Q=J.error?this.formatProgressErrorActivity(`tool_${J.toolName??"unknown"}_error`,J.error):`finished_tool_${J.toolName??"unknown"}`;break;case"done":Q="finalizing_response";break;case"error":Q=this.formatProgressErrorActivity("run_error",J.error.message);break;default:break}if(!Q)return;for(let Z of this.runs.values()){if(Z.agentId!==$||Z.status!=="running")continue;this.recordRunProgress(Z,Q)}}recordRunProgress($,J){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=J,$.currentActivity=J,this.emitEvent({type:I.RunProgress,run:{...$},message:J})}formatProgressErrorActivity($,J){let Q=J.replace(/\s+/g," ").trim();if(Q.length===0)return $;let Z=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${Z}`}recordProgressStep($,J,Q,Z=!1){this.missionStepCounter++;let W=this.members.get($);if(!W)return;let j=this.missionStepCounter-W.lastMissionStep,f=Date.now()-W.lastMissionAt;if(!Z&&j<this.missionLogIntervalSteps&&f<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Q,kind:"progress",summary:J})}buildMailboxNotification($){if($.length===0)return"";let J=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Q of $)J.push(`--- Message from ${Q.fromAgentId} | subject: ${Q.subject} ---`),J.push(Q.body);return J.push("---"),J.join(`
|
|
514
|
-
`)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function
|
|
525
|
+
${J}`:J,X=Q?.continueConversation?await Z.agent.continue(j):await Z.agent.run(j);return this.emitEvent({type:I.TaskEnd,agentId:$,result:X}),this.recordProgressStep($,`Completed a delegated run (${X.iterations} iterations)`,Q?.taskId,!0),X}catch(W){let j=W instanceof Error?W:Error(String(W));if(this.emitEvent({type:I.TaskEnd,agentId:$,error:j,messages:Z.agent.getMessages()}),!OA(Z,j))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:j.message});throw j}finally{if(Z.runningCount--,Z.runningCount<=0&&this.members.get($)?.status!=="stopped")Z.status="idle"}}startTeammateRun($,J,Q){let Z=`run_${String(++this.runCounter).padStart(5,"0")}`,W={id:Z,agentId:$,taskId:Q?.taskId,status:"queued",message:J,priority:Q?.priority??0,retryCount:0,maxRetries:Math.max(0,Q?.maxRetries??0),continueConversation:Q?.continueConversation,startedAt:new Date(0),leaseOwner:Q?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(Z,W),this.runQueue.push(Z),this.emitEvent({type:I.RunQueued,run:{...W}}),this.dispatchQueuedRuns(),{...W}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let J=this.selectNextDispatchableQueuedRun();$=J.nextDelayedAttemptAt;let Q=J.index;if(Q<0){this.scheduleQueuedRunDispatch($);return}let[Z]=this.runQueue.splice(Q,1),W=Z?this.runs.get(Z):void 0;if(!W||W.status!=="queued")continue;this.executeQueuedRun(W)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,J=Number.NEGATIVE_INFINITY,Q,Z=Date.now();for(let W=0;W<this.runQueue.length;W++){let j=this.runs.get(this.runQueue[W]);if(!j||j.status!=="queued")continue;if(j.nextAttemptAt&&j.nextAttemptAt.getTime()>Z){if(!Q||j.nextAttemptAt<Q)Q=j.nextAttemptAt;continue}if(j.priority>J)J=j.priority,$=W}return{index:$,nextDelayedAttemptAt:Q}}scheduleQueuedRunDispatch($){if(!$)return;let J=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},J)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let J of this.runs.values())if(J.status==="running")$++;return $}async executeQueuedRun($){let J=$.currentActivity===TA;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:I.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let Z=J?sN($):$.message,W=await this.routeToTeammate($.agentId,Z,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=W,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:I.RunCompleted,run:{...$}})}catch(Z){let W=Z instanceof Error?Z.message:String(Z??"Unknown error");$.error=W,$.endedAt=new Date;let j=this.members.get($.agentId);if(OA(j,Z))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:I.RunCancelled,run:{...$},reason:W});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:I.RunFailed,run:{...$}})}finally{clearInterval(Q),this.dispatchQueuedRuns()}}listRuns($){let J=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Q)=>{if(!J&&!["running","queued"].includes(Q.status))return!1;if($?.status&&Q.status!==$.status)return!1;if($?.agentId&&Q.agentId!==$.agentId)return!1;return!0}).map((Q)=>({...Q}))}getRun($){let J=this.runs.get($);return J?{...J}:void 0}async awaitRun($,J=250){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);while(Q.status==="queued"||Q.status==="running")await MA(J);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((J)=>["queued","running"].includes(J.status)))await MA($);return this.listRuns()}cancelRun($,J){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);if(Q.status==="completed"||Q.status==="failed")return{...Q};Q.status="cancelled",Q.error=J,Q.endedAt=new Date,Q.currentActivity="cancelled";let Z=this.runQueue.indexOf($);if(Z>=0)this.runQueue.splice(Z,1);return this.emitEvent({type:I.RunCancelled,run:{...Q},reason:J}),{...Q}}recoverActiveRuns($="runtime_recovered"){let J=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;let Z=this.members.get(Q.agentId);if(!Z||Z.role!=="teammate"||!Z.agent){Q.status="interrupted",Q.error="teammate_unavailable_after_recovery",Q.endedAt=new Date,Q.currentActivity="interrupted",this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:Q.error});continue}let W=new Date;if(Q.status="queued",Q.error=void 0,Q.endedAt=void 0,Q.heartbeatAt=W,Q.lastProgressAt=W,Q.lastProgressMessage=$,Q.currentActivity=TA,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);J.push({...Q}),this.emitEvent({type:I.RunQueued,run:{...Q}})}return this.dispatchQueuedRuns(),J}markStaleRunsInterrupted($="runtime_recovered"){let J=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;Q.status="interrupted",Q.error=$,Q.endedAt=new Date,Q.currentActivity="interrupted",J.push({...Q}),this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),J}sendMessage($,J,Q,Z,W){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let j=this.members.get(J);if(!j)throw Error(`Unknown recipient "${J}"`);let X={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:J,subject:Q,body:Z,taskId:W,sentAt:new Date};if(this.mailbox.push(X),this.emitEvent({type:I.TeamMessage,message:{...X}}),j.role==="teammate"&&j.runningCount>0&&j.agent)j.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Q}". Use the team_read_mailbox tool to read it at your convenience.`;return{...X}}broadcast($,J,Q,Z){let W=[];for(let j of this.members.values()){if(j.agentId===$)continue;if(j.role==="lead")continue;W.push(this.sendMessage($,j.agentId,J,Q,Z?.taskId))}return W}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let J={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:$.agentId,taskId:$.taskId,kind:$.kind,summary:$.summary,evidence:$.evidence,nextAction:$.nextAction};this.missionLog.push(J);let Q=this.members.get($.agentId);if(Q)Q.lastMissionAt=Date.now(),Q.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:I.TeamMissionLog,entry:{...J}}),{...J}}createOutcome($){let J={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:$.title,status:"draft",requiredSections:[...new Set($.requiredSections)],createdBy:$.createdBy,createdAt:new Date};return this.outcomes.set(J.id,J),this.emitEvent({type:I.OutcomeCreated,outcome:{...J}}),{...J}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let J=this.outcomes.get($.outcomeId);if(!J)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!J.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Q={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(Q.id,Q),J.status==="draft")J.status="in_review";return this.emitEvent({type:I.OutcomeFragmentAttached,fragment:{...Q}}),{...Q}}reviewOutcomeFragment($){let J=this.outcomeFragments.get($.fragmentId);if(!J)throw Error(`Fragment "${$.fragmentId}" was not found`);return J.status=$.approved?"reviewed":"rejected",J.reviewedBy=$.reviewedBy,J.reviewedAt=new Date,this.emitEvent({type:I.OutcomeFragmentReviewed,fragment:{...J}}),{...J}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((J)=>J.outcomeId===$).map((J)=>({...J}))}finalizeOutcome($){let J=this.outcomes.get($);if(!J)throw Error(`Outcome "${$}" was not found`);let Q=this.listOutcomeFragments($);for(let Z of J.requiredSections)if(!Q.some((j)=>j.section===Z&&j.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${Z}" is missing a reviewed fragment.`);return J.status="finalized",J.finalizedAt=new Date,this.emitEvent({type:I.OutcomeFinalized,outcome:{...J}}),{...J}}cleanup(){for(let $ of this.members.values())if($.role==="teammate"&&$.runningCount>0)throw Error(`Cannot cleanup team while teammate "${$.agentId}" is still running`);if(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let $ of this.members.values())if($.role==="teammate")try{$.agent?.abort()}catch(J){if(!r7(J))throw J}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[$,J]of this.members.entries())if(J.role==="teammate")this.members.delete($)}requireTask($){let J=this.tasks.get($);if(!J)throw Error(`Task "${$}" was not found`);return J}assertDependenciesResolved($){let J=this.getUnresolvedDependencies($);if(J.length>0)throw Error(`Task "${$.id}" is blocked by "${J[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((J)=>{let Q=this.tasks.get(J);return!Q||Q.status!=="completed"})}trackMeaningfulEvent($,J){if(this.recordRunActivityFromAgentEvent($,J),J.type==="iteration_end"&&J.hadToolCalls){this.recordProgressStep($,`Completed iteration ${J.iteration} with ${J.toolCallCount} tool call(s)`);return}if(J.type==="content_end"&&J.contentType==="tool"&&!J.error){this.recordProgressStep($,`Finished tool "${J.toolName??"unknown"}"`);return}if(J.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${J.iterations} iterations)`});return}if(J.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:J.error.message})}recordRunActivityFromAgentEvent($,J){let Q;switch(J.type){case"iteration_start":Q=`iteration_${J.iteration}_started`;break;case"content_start":if(J.contentType==="tool")Q=`running_tool_${J.toolName??"unknown"}`;break;case"content_end":if(J.contentType==="tool")Q=J.error?this.formatProgressErrorActivity(`tool_${J.toolName??"unknown"}_error`,J.error):`finished_tool_${J.toolName??"unknown"}`;break;case"done":Q="finalizing_response";break;case"error":Q=this.formatProgressErrorActivity("run_error",J.error.message);break;default:break}if(!Q)return;for(let Z of this.runs.values()){if(Z.agentId!==$||Z.status!=="running")continue;this.recordRunProgress(Z,Q)}}recordRunProgress($,J){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=J,$.currentActivity=J,this.emitEvent({type:I.RunProgress,run:{...$},message:J})}formatProgressErrorActivity($,J){let Q=J.replace(/\s+/g," ").trim();if(Q.length===0)return $;let Z=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${Z}`}recordProgressStep($,J,Q,Z=!1){this.missionStepCounter++;let W=this.members.get($);if(!W)return;let j=this.missionStepCounter-W.lastMissionStep,X=Date.now()-W.lastMissionAt;if(!Z&&j<this.missionLogIntervalSteps&&X<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Q,kind:"progress",summary:J})}buildMailboxNotification($){if($.length===0)return"";let J=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Q of $)J.push(`--- Message from ${Q.fromAgentId} | subject: ${Q.subject} ---`),J.push(Q.body);return J.push("---"),J.join(`
|
|
526
|
+
`)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function MA($){return new Promise((J)=>setTimeout(J,$))}function l8($,J){let Q=0;for(let Z of $){if(!Z.startsWith(J))continue;let W=Number.parseInt(Z.slice(J.length),10);if(Number.isFinite(W))Q=Math.max(Q,W)}return Q}function n7($,J){switch(J.type){case"run_queued":case"run_started":$.activeTeamRunIds.add(J.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let Q;if(J.type==="run_failed")Q=J.run.error;else if(J.type==="run_cancelled"||J.type==="run_interrupted")Q=J.run.error??J.reason;$.activeTeamRunIds.delete(J.run.id),$.pendingTeamRunUpdates.push({runId:J.run.id,agentId:J.run.agentId,taskId:J.run.taskId,status:J.type.replace("run_",""),error:Q,iterations:J.run.result?.iterations}),Y9($);break}default:break}}async function a7($,J,Q){switch(J.type){case"run_progress":await Q("onTeamTaskProgress",$,J.run.agentId,J.message,{kind:J.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(J.event.type==="content_start"&&J.event.contentType==="text"&&typeof J.event.text==="string"){let Z=J.event.text.replace(/\s+/g," ").trim().slice(0,120);if(Z)await Q("onTeamTaskProgress",$,J.agentId,Z,{kind:"text"})}break;case"task_start":await Q("onTeamTaskStart",$,J.agentId,J.message);break;case"task_end":{if(J.error)await Q("onTeamTaskEnd",$,J.agentId,"failed",`[error] ${J.error.message}`,void 0,J.messages);else if(J.result?.finishReason==="aborted")await Q("onTeamTaskEnd",$,J.agentId,"cancelled","[done] aborted",J.result,J.result.messages);else await Q("onTeamTaskEnd",$,J.agentId,"completed",`[done] ${J.result?.finishReason??"completed"}`,J.result,J.result?.messages);break}default:break}}function s7($,J,Q,Z){if(!$.runtime.teamRuntime)return;let W=$.runtime.teamRuntime.getTeamName();Z({type:"team_progress",payload:{sessionId:J,teamName:W,lifecycle:d8({teamName:W,sessionId:J,event:Q}),summary:u8(W,$.runtime.teamRuntime.exportState())}})}function KJ($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function o7($,J){if($.aborting)return!1;if(!(J==="completed"||J==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&KJ($)}function Y9($){let J=$.teamRunWaiters.splice(0);for(let Q of J)Q()}async function t7($){while(!0){if($.aborting)return[];if($.pendingTeamRunUpdates.length>0){let J=[...$.pendingTeamRunUpdates];return $.pendingTeamRunUpdates.length=0,J}if($.activeTeamRunIds.size===0)return[];await new Promise((J)=>{$.teamRunWaiters.push(J)})}}function e7($,J){let Q=J.map((j)=>{let X=[`- ${j.runId} (${j.agentId}) -> ${j.status}`];if(j.taskId)X.push(` task=${j.taskId}`);if(typeof j.iterations==="number")X.push(` iterations=${j.iterations}`);if(j.error)X.push(` error=${j.error}`);return X.join("")}),Z=$.activeTeamRunIds.size,W=Z>0?`There are still ${Z} teammate run(s) in progress. Continue coordination and decide whether to wait for more updates.`:"No teammate runs are currently in progress. Continue coordination using these updates.";return GJ(`System-delivered teammate async run updates:
|
|
515
527
|
${Q.join(`
|
|
516
528
|
`)}
|
|
517
529
|
|
|
518
|
-
${W}`,$.config.mode)}function
|
|
519
|
-
`,"utf8"),
|
|
530
|
+
${W}`,$.config.mode)}function GJ($,J){return oN($,J==="plan"?"plan":J==="yolo"?"yolo":"act")}var $3=4;class n1{adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor($,J={}){this.adapter=$;this.manifestStore=new d7($,J.messagesArtifactUploader,J.logger),this.teamChildren=new X9($,this.manifestStore,(Q,Z,W)=>this.toPersistedMessages(Q,Z,W),n1.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,J,Q){if(!$)return;return J?x5(J.messages,J,Q):I5($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,J){this.manifestStore.writeSessionManifest($,J)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let J=$.startedAt??e(),Q=$.sessionId.trim(),Z=Q.length>0?Q:`${Date.now()}_${eN(5)}`,W=this.manifestStore.artifacts.sessionMessagesPath(Z),j=this.manifestStore.artifacts.sessionManifestPath(Z),X=j6({metadata:$.metadata,prompt:$.prompt}),f={version:1,session_id:Z,source:$.source,pid:$.pid,started_at:J,status:"running",interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt?.trim()||void 0,metadata:X,messages_path:W};return await this.adapter.upsertSession({sessionId:Z,source:$.source,pid:$.pid,startedAt:J,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:null,parentAgentId:null,agentId:null,conversationId:null,isSubagent:!1,prompt:f.prompt??null,metadata:K$(f.metadata),hookPath:"",messagesPath:W,updatedAt:e()}),this.manifestStore.initializeMessagesFile(Z,W,J),this.manifestStore.writeSessionManifest(j,f),{manifestPath:j,messagesPath:W,manifest:f}}async updateSessionStatus($,J,Q){let Z;if((await rY(()=>this.adapter.getSession($),async(j)=>{return Z=j0(J)?void 0:e(),this.adapter.updateSession({sessionId:$,status:J,endedAt:Z??null,exitCode:j0(J)?null:typeof Q==="number"?Q:null,expectedStatusLock:j.statusLock})},$3)).updated){if(J==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:Z}}return{updated:!1}}async updateSession($){for(let J=0;J<$3;J++){let Q=await this.adapter.getSession($.sessionId);if(!Q)return{updated:!1};let Z=Q.metadata??void 0,W=$.metadata!==void 0?K$($.metadata)??{}:K$(Z)??{},j=s$(typeof Z?.title==="string"?Z.title:void 0),X=$.title!==void 0?s$($.title):j??jW($.prompt);if(X)W.title=X;else delete W.title;let f=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:f?Object.keys(W).length>0?W:null:void 0,title:X,expectedStatusLock:Q.statusLock})).updated)continue;let{path:V,manifest:H}=this.manifestStore.readManifestFile($.sessionId);if(H){if($.prompt!==void 0)H.prompt=$.prompt??void 0;let B=$.metadata!==void 0?K$($.metadata)??{}:K$(H.metadata)??{};if(X)B.title=X;H.metadata=Object.keys(B).length>0?B:void 0,this.manifestStore.writeSessionManifest(V,H)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,J){return this.teamChildren.appendSubagentHookAudit(J),Promise.resolve()}persistSessionMessages($,J,Q){let Z=I5(J);return this.manifestStore.persistSessionMessages($,Z,Q)}applySubagentStatus($,J){return this.teamChildren.applySubagentStatus($,J)}applySubagentStatusBySessionId($,J){return this.teamChildren.applySubagentStatusBySessionId($,J)}applyStatusToRunningChildSessions($,J){return this.teamChildren.applyStatusToRunningChildSessions($,J)}onTeamTaskStart($,J,Q){return this.teamChildren.onTeamTaskStart($,J,Q)}onTeamTaskEnd($,J,Q,Z,W,j){return this.teamChildren.onTeamTaskEnd($,J,Q,Z,W,j)}onTeamTaskProgress($,J,Q,Z){return this.teamChildren.onTeamTaskProgress($,J,Q,Z)}handleSubAgentStart($,J){return this.teamChildren.handleSubAgentStart($,J)}handleSubAgentEnd($,J){return this.teamChildren.handleSubAgentEnd($,J)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(J){return typeof J==="object"&&J!==null&&"code"in J&&J.code==="EPERM"}}async reconcileDeadRunningSession($){if(j0($.status)===!1||this.isPidAlive($.pid))return $;let J=e(),Q=n1.STALE_REASON;for(let Z=0;Z<$3;Z++){let W=await this.adapter.getSession($.sessionId);if(!W)return;if(j0(W.status)===!1)return W;let j={...W.metadata??{},terminal_marker:Q,terminal_marker_at:J,terminal_marker_pid:W.pid,terminal_marker_source:n1.STALE_SOURCE},X=await this.adapter.updateSession({sessionId:W.sessionId,status:"failed",endedAt:J,exitCode:1,metadata:j,expectedStatusLock:W.statusLock});if(!X.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(W.sessionId,"failed");let f=pY(W,{status:"failed",endedAt:J,exitCode:1,metadata:j}),{path:Y}=this.manifestStore.readManifestFile(W.sessionId);return this.manifestStore.writeSessionManifest(Y,f),this.manifestStore.appendStaleSessionHookLog(J,W.sessionId,W.pid,Q,n1.STALE_SOURCE),{...W,status:"failed",endedAt:J,exitCode:1,metadata:j,statusLock:X.statusLock,updatedAt:J}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let J=Math.max(1,Math.floor($)),Q=Math.min(J*5,2000);return await this.reconcileDeadSessions(Q),(await this.adapter.listSessions({limit:Q})).slice(0,J).map((W)=>{let j=K$(W.metadata??void 0),X=this.manifestStore.readSessionManifest(W.sessionId),f=s$(typeof X?.metadata?.title==="string"?X.metadata.title:void 0),Y=f?{...j??{},title:f}:j;return{...W,metadata:Y}})}async reconcileDeadSessions($=2000){let J=Math.max(1,Math.floor($)),Q=(await Promise.all(["idle","running","pending"].map((W)=>this.adapter.listSessions({limit:J,status:W})))).flat(),Z=0;for(let W of Q){let j=await this.reconcileDeadRunningSession(W);if(j&&j.status!==W.status)Z++}return Z}async deleteSession($){let J=$.trim();if(!J)throw Error("session id is required");let Q=await this.adapter.getSession(J);if(!Q)return{deleted:!1};if(await this.adapter.deleteSession(J,!1),!Q.isSubagent){let Z=await this.adapter.listSessions({limit:2000,parentSessionId:J});await this.adapter.deleteSession(J,!0),await Promise.allSettled(Z.map(async(W)=>{await PW(W.cwd,W.sessionId),M6(W.messagesPath),M6(this.manifestStore.artifacts.sessionManifestPath(W.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(W.sessionId)}))}if(await PW(Q.cwd,J),M6(Q.messagesPath),M6(this.manifestStore.artifacts.sessionManifestPath(J,!1)),Q.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(J);else{let Z=new Set([this.manifestStore.artifacts.sessionArtifactsDir(J)]);for(let W of[Q.messagesPath])if(typeof W==="string"&&W.trim().length>0)Z.add(tN(W));for(let W of Z)this.manifestStore.artifacts.removeDir(W)}return{deleted:!0}}}function Q3(){return new Date().toISOString()}function SA($,J){let Q=`${$}.tmp`;Qw(Q,`${JSON.stringify(J,null,2)}
|
|
531
|
+
`,"utf8"),Jw(Q,$)}class CA{sessionsDirPath;constructor($=Zw()){this.sessionsDirPath=$}ensureSessionsDir(){if(!J3(this.sessionsDirPath))$w(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return wA(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return wA(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!J3($))return{version:1,sessions:{}};try{let J=JSON.parse(NA($,"utf8"));if(J?.version===1&&J.sessions)return J}catch{}return{version:1,sessions:{}}}writeIndex($){SA(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!J3($))return{version:1,nextId:1,requests:[]};try{let J=JSON.parse(NA($,"utf8"));if(J?.version===1&&typeof J.nextId==="number"&&Array.isArray(J.requests))return J}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){SA(this.spawnQueuePath(),$)}async upsertSession($){let J=this.readIndex();J.sessions[$.sessionId]=$,this.writeIndex(J)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((J)=>$.parentSessionId!==void 0?J.parentSessionId===$.parentSessionId:!0).filter((J)=>$.status!==void 0?J.status===$.status:!0).sort((J,Q)=>Q.startedAt.localeCompare(J.startedAt)).slice(0,$.limit)}async updateSession($){let J=this.readIndex(),Q=J.sessions[$.sessionId];if(!Q)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&Q.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:Q.statusLock};let Z=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:Q.statusLock,W={...Q,status:$.status??Q.status,endedAt:$.endedAt!==void 0?$.endedAt:Q.endedAt??null,exitCode:$.exitCode!==void 0?$.exitCode:Q.exitCode??null,prompt:$.prompt!==void 0?$.prompt:Q.prompt??null,metadata:$.metadata!==void 0?$.metadata??null:Q.metadata??null,parentSessionId:$.parentSessionId!==void 0?$.parentSessionId??null:Q.parentSessionId??null,parentAgentId:$.parentAgentId!==void 0?$.parentAgentId??null:Q.parentAgentId??null,agentId:$.agentId!==void 0?$.agentId??null:Q.agentId??null,conversationId:$.conversationId!==void 0?$.conversationId??null:Q.conversationId??null,statusLock:Z,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:Q.isSubagent,updatedAt:Q3()};if($.setRunning)W.status="running",W.endedAt=null,W.exitCode=null;return J.sessions[$.sessionId]=W,this.writeIndex(J),{updated:!0,statusLock:W.statusLock}}async deleteSession($,J){let Q=this.readIndex();if(!Q.sessions[$])return!1;if(delete Q.sessions[$],J){for(let W of Object.values(Q.sessions))if(W.parentSessionId===$)delete Q.sessions[W.sessionId]}return this.writeIndex(Q),!0}async enqueueSpawnRequest($){let J=this.readQueue();J.requests.push({id:J.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:Q3()}),J.nextId+=1,this.writeQueue(J)}async claimSpawnRequest($,J){let Q=this.readQueue(),Z=Q.requests.find((W)=>W.rootSessionId===$&&W.parentAgentId===J&&!W.consumedAt);if(!Z)return;return Z.consumedAt=Q3(),this.writeQueue(Q),Z.task}}class Z3 extends n1{constructor($,J={}){super(new CA($),J)}ensureSessionsDir(){return super.ensureSessionsDir()}}var bA={};w(bA,{CoreSessionService:()=>L1});import{existsSync as Ww,mkdirSync as jw}from"node:fs";import{resolveSessionDataDir as Xw}from"@cline/shared/storage";var W3=`
|
|
520
532
|
session_id AS sessionId,
|
|
521
533
|
source,
|
|
522
534
|
pid,
|
|
@@ -543,51 +555,51 @@ ${W}`,$.config.mode)}function HJ($,J){return xN($,J==="plan"?"plan":J==="yolo"?"
|
|
|
543
555
|
metadata_json AS metadata,
|
|
544
556
|
hook_path AS hookPath,
|
|
545
557
|
messages_path AS messagesPath,
|
|
546
|
-
updated_at AS updatedAt`;function
|
|
558
|
+
updated_at AS updatedAt`;function j3($){$.interactive=$.interactive===1,$.enableTools=$.enableTools===1,$.enableSpawn=$.enableSpawn===1,$.enableTeams=$.enableTeams===1,$.isSubagent=$.isSubagent===1;let J=$.metadata;if(typeof J==="string"&&J.trim())try{let Q=JSON.parse(J);$.metadata=Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:null}catch{$.metadata=null}else $.metadata=null;return $}function X3($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function yA($){return{...$,tasks:$.tasks.map((J)=>({...J,createdAt:new Date(J.createdAt),updatedAt:new Date(J.updatedAt)})),mailbox:$.mailbox.map((J)=>({...J,sentAt:new Date(J.sentAt),readAt:J.readAt?new Date(J.readAt):void 0})),missionLog:$.missionLog.map((J)=>({...J,ts:new Date(J.ts)})),runs:($.runs??[]).map((J)=>({...J,startedAt:new Date(J.startedAt),endedAt:J.endedAt?new Date(J.endedAt):void 0,nextAttemptAt:J.nextAttemptAt?new Date(J.nextAttemptAt):void 0,heartbeatAt:J.heartbeatAt?new Date(J.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),finalizedAt:J.finalizedAt?new Date(J.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),reviewedAt:J.reviewedAt?new Date(J.reviewedAt):void 0}))}}class EA{store;sessionsDirPath;constructor($,J=Xw()){this.store=$;this.sessionsDirPath=J}ensureSessionsDir(){if(!Ww(this.sessionsDirPath))jw(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
|
|
547
559
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
548
560
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
549
561
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
550
562
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
551
|
-
) 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,
|
|
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,X3($.metadata),"",$.hookPath??"",$.messagesPath??null,$.updatedAt])}async getSession($){let J=this.store.queryOne(`SELECT ${W3} FROM sessions WHERE session_id = ?`,[$]);return J?j3(J):void 0}async listSessions($){let J=[],Q=[];if($.parentSessionId)J.push("parent_session_id = ?"),Q.push($.parentSessionId);if($.status)J.push("status = ?"),Q.push($.status);let Z=J.length>0?`WHERE ${J.join(" AND ")}`:"";return this.store.queryAll(`SELECT ${W3}
|
|
552
564
|
FROM sessions
|
|
553
565
|
${Z}
|
|
554
566
|
ORDER BY started_at DESC
|
|
555
|
-
LIMIT ?`,[...Q,$.limit]).map(
|
|
567
|
+
LIMIT ?`,[...Q,$.limit]).map(j3)}async updateSession($){if($.setRunning){if($.expectedStatusLock===void 0)return{updated:!1,statusLock:0};return{updated:(this.store.run(`UPDATE sessions
|
|
556
568
|
SET status = 'running', ended_at = NULL, exit_code = NULL, updated_at = ?, status_lock = ?,
|
|
557
569
|
parent_session_id = ?, parent_agent_id = ?, agent_id = ?, conversation_id = ?, is_subagent = 1,
|
|
558
570
|
prompt = COALESCE(prompt, ?)
|
|
559
|
-
WHERE session_id = ? AND status_lock = ?`,[e(),$.expectedStatusLock+1,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.prompt??null,$.sessionId,$.expectedStatusLock]).changes??0)>0,statusLock:$.expectedStatusLock+1}}let J=[],Q=[];if($.status!==void 0)J.push("status = ?"),Q.push($.status);if($.endedAt!==void 0)J.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)J.push("exit_code = ?"),Q.push($.exitCode);if($.prompt!==void 0)J.push("prompt = ?"),Q.push($.prompt??null);if($.metadata!==void 0)J.push("metadata_json = ?"),Q.push(
|
|
571
|
+
WHERE session_id = ? AND status_lock = ?`,[e(),$.expectedStatusLock+1,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.prompt??null,$.sessionId,$.expectedStatusLock]).changes??0)>0,statusLock:$.expectedStatusLock+1}}let J=[],Q=[];if($.status!==void 0)J.push("status = ?"),Q.push($.status);if($.endedAt!==void 0)J.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)J.push("exit_code = ?"),Q.push($.exitCode);if($.prompt!==void 0)J.push("prompt = ?"),Q.push($.prompt??null);if($.metadata!==void 0)J.push("metadata_json = ?"),Q.push(X3($.metadata));if($.parentSessionId!==void 0)J.push("parent_session_id = ?"),Q.push($.parentSessionId??null);if($.parentAgentId!==void 0)J.push("parent_agent_id = ?"),Q.push($.parentAgentId??null);if($.agentId!==void 0)J.push("agent_id = ?"),Q.push($.agentId??null);if($.conversationId!==void 0)J.push("conversation_id = ?"),Q.push($.conversationId??null);if(J.length===0){let X=await this.getSession($.sessionId);return{updated:!!X,statusLock:X?.statusLock??0}}let Z=0;if($.expectedStatusLock!==void 0)Z=$.expectedStatusLock+1,J.push("status_lock = ?"),Q.push(Z);J.push("updated_at = ?"),Q.push(e());let W=`UPDATE sessions SET ${J.join(", ")} WHERE session_id = ?`;if(Q.push($.sessionId),$.expectedStatusLock!==void 0)W+=" AND status_lock = ?",Q.push($.expectedStatusLock);if((this.store.run(W,Q).changes??0)===0)return{updated:!1,statusLock:0};if($.expectedStatusLock===void 0)Z=(await this.getSession($.sessionId))?.statusLock??0;return{updated:!0,statusLock:Z}}async deleteSession($,J){let Q=this.store.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(J)this.store.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}async enqueueSpawnRequest($){this.store.run(`INSERT INTO subagent_spawn_queue (root_session_id, parent_agent_id, task, system_prompt, created_at, consumed_at)
|
|
560
572
|
VALUES (?, ?, ?, ?, ?, NULL)`,[$.rootSessionId,$.parentAgentId,$.task??null,$.systemPrompt??null,e()])}async claimSpawnRequest($,J){let Q=this.store.queryOne(`SELECT id, task FROM subagent_spawn_queue
|
|
561
573
|
WHERE root_session_id = ? AND parent_agent_id = ? AND consumed_at IS NULL
|
|
562
|
-
ORDER BY id ASC LIMIT 1`,[$,J]);if(!Q||typeof Q.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[e(),Q.id]),Q.task??void 0}}class
|
|
574
|
+
ORDER BY id ASC LIMIT 1`,[$,J]);if(!Q||typeof Q.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[e(),Q.id]),Q.task??void 0}}class L1 extends n1{store;constructor($,J={}){super(new EA($,J.sessionArtifactsDir),J);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
|
|
563
575
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
564
576
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
565
577
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
566
578
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
567
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,e()])}}function
|
|
568
|
-
`,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let J=new Map;for(let Q of this.getReturnedFlagKeys($)){let Z=this.getFeatureFlag(Q);J.set(Q,Z??!1)}this.cache=J}getFeatureFlag($){try{let J=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],Z=J??Q??
|
|
569
|
-
`).map((j)=>j.trim()).filter(Boolean).filter((j)=>j.startsWith("HOOK_CONTROL\t")).map((j)=>j.slice(13)),W=Z.length>0?Z[Z.length-1]:J;try{return{parsedJson:JSON.parse(W)}}catch(j){return{parseError:j instanceof Error?j.message:"Failed to parse subprocess stdout JSON"}}}function Xw($,J){let Q=$ instanceof Error?$:Error(String($)),Z=Q,W=J.join(" ");if(Z.code==="EACCES")return Error(`Failed to execute hook command "${W}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return Error(`Failed to execute hook command "${W}": ${Q.message}`)}async function Yw($,J){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((Z,W)=>{let j=(f)=>{Q.off("error",j);let X=f.code;if(X==="EPIPE"||X==="ERR_STREAM_DESTROYED"){Z();return}W(f)};Q.once("error",j),Q.end(J,(f)=>{if(Q.off("error",j),f){let X=f.code;if(X==="EPIPE"||X==="ERR_STREAM_DESTROYED"){Z();return}W(f);return}Z()})})}async function r8($,J){let Q=Ww(J.command,{env:J.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let Z=!!J.detached,W=Zw(Q[0],Q.slice(1),{cwd:J.cwd,env:jw(J.env),stdio:Z?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Z,windowsHide:!0}),j=new Promise((A)=>{W.once("spawn",()=>{try{J.onSpawn?.({command:Q,pid:W.pid??void 0,detached:Z})}catch{}A()})}),f=new Promise((A,K)=>{W.once("error",(G)=>{K(Xw(G,Q))})});if(await Yw(W,JSON.stringify($)),Z){await Promise.race([j,f]),W.unref();return}if(!W.stdout||!W.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let X="",Y="",V=!1,H;W.stdout.on("data",(A)=>{X+=A.toString()}),W.stderr.on("data",(A)=>{Y+=A.toString()});let B=new Promise((A)=>{if((J.timeoutMs??0)>0)H=setTimeout(()=>{V=!0,W.kill("SIGKILL")},J.timeoutMs);W.once("close",(K)=>{if(H)clearTimeout(H);let{parsedJson:G,parseError:R}=fw(X);A({exitCode:K,stdout:X,stderr:Y,parsedJson:G,parseError:R,timedOut:V})})});return await Promise.race([B,f])}var Hw=P2.object({contextModification:P2.string().optional(),cancel:P2.boolean().optional(),review:P2.boolean().optional(),errorMessage:P2.string().optional(),context:P2.string().optional(),overrideInput:P2.unknown().optional()}).passthrough();var Bw=["agent","hook"];async function n8($,J={}){let Q=J.command??Bw;return await r8($,{command:Q,cwd:J.cwd,env:J.env,detached:J.detached,timeoutMs:J.timeoutMs,onSpawn:J.onSpawn})}function hA($){return $ instanceof Error?$:Error(String($))}function Aw($){if(!$||typeof $!=="object")return;let J=Hw.safeParse($);if(!J.success)return;let Q=J.data;if(!(("cancel"in Q)||("review"in Q)||("context"in Q)||("contextModification"in Q)||("overrideInput"in Q)||("errorMessage"in Q)))return;let W=typeof Q.context==="string"?Q.context:typeof Q.contextModification==="string"?Q.contextModification:typeof Q.errorMessage==="string"&&Q.errorMessage.length>0?Q.errorMessage:void 0;return{cancel:typeof Q.cancel==="boolean"?Q.cancel:void 0,review:typeof Q.review==="boolean"?Q.review:void 0,context:W,overrideInput:Object.hasOwn(Q,"overrideInput")?Q.overrideInput:void 0}}function bA($){if(!$||typeof $!=="object")return{};let J={};for(let[Q,Z]of Object.entries($))if(typeof Z==="string")J[Q]=Z;else J[Q]=JSON.stringify(Z);return J}function a1($,J,Q){let Z=Q.env??process.env,W=Z.CLINE_USER_ID?.trim()||Z.USER?.trim()||"unknown",j=Q.cwd||process.cwd();return{clineVersion:Z.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:J.conversationId,sessionContext:Vw(Q.sessionContext,{hookName:$,conversationId:J.conversationId,agentId:J.agentId,parentAgentId:J.parentAgentId}),workspaceRoots:j?[j]:[],workspaceInfo:Q.workspaceInfo,userId:W,agent_id:J.agentId,parent_agent_id:J.parentAgentId}}function Kw($){return{name:$.name,message:$.message,stack:$.stack}}function Gw($){let J=String($??"").toLowerCase();return J.includes("cancel")||J.includes("abort")||J.includes("interrupt")}function Fw($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function Dw($){return $.filter((J)=>J.type==="text"&&typeof J.text==="string").map((J)=>J.text).join("")}function Uw($){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 Rw($){if(!$)return;let J={};if($.cancel===!0)J.stop=!0;if($.overrideInput!==void 0)J.input=$.overrideInput;return Object.keys(J).length>0?J:void 0}async function N2($,J){try{let Q=await n8($,{command:J.command,cwd:J.cwd,env:J.env,detached:!0,onSpawn:J.onSpawn});J.onDispatch?.({payload:$,result:Q,detached:!0})}catch(Q){J.onDispatchError?.(hA(Q),$)}}function jQ($={}){return{hooks:{beforeRun:async(X)=>{let Y=Fw(X);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...a1("agent_resume",Y,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await N2(H,$)}else{let H={...a1("agent_start",Y,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await N2(H,$)}return},beforeTool:async(X)=>{let Y={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},V={...a1("tool_call",Y,$),hookName:"tool_call",iteration:X.snapshot.iteration,tool_call:{id:X.toolCall.toolCallId,name:X.toolCall.toolName,input:X.input},preToolUse:{toolName:X.toolCall.toolName,parameters:bA(X.input)}};try{let H=await n8(V,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:V,result:H,detached:!1}),H?.timedOut)throw Error("tool_call hook command timed out");if(H?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${H.parseError}`);return Rw(Aw(H?.parsedJson))}catch(H){$.onDispatchError?.(hA(H),V);return}},afterTool:async(X)=>{let Y=Uw(X),V={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},H={...a1("tool_result",V,$),hookName:"tool_result",iteration:X.snapshot.iteration,tool_result:Y,postToolUse:{toolName:Y.name,parameters:bA(Y.input),result:typeof Y.output==="string"?Y.output:JSON.stringify(Y.output),success:!Y.error,executionTimeMs:Y.durationMs}};await N2(H,$);return},afterRun:async({snapshot:X,result:Y})=>{let V={agentId:X.agentId,conversationId:X.conversationId??X.runId??X.agentId,parentAgentId:X.parentAgentId??null};if(Y.status==="completed"){let A={...a1("agent_end",V,$),hookName:"agent_end",iteration:Y.iterations,turn:{outputText:Y.outputText,status:Y.status},taskComplete:{taskMetadata:{}}};await N2(A,$);return}let H=Y.status==="aborted"||Gw(Y.error?.message)?"agent_abort":"agent_error",B=H==="agent_error"?{...a1(H,V,$),hookName:H,iteration:Y.iterations,error:Kw(Y.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...a1(H,V,$),hookName:H,reason:Y.error?.message,taskCancel:{taskMetadata:{}}};await N2(B,$)},onEvent:async(X)=>{if(X.type!=="message-added"||X.message.role!=="user")return;let Y={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},V={...a1("prompt_submit",Y,$),hookName:"prompt_submit",userPromptSubmit:{prompt:Dw(X.message.content),attachments:[]}};await N2(V,$)}},shutdown:async({agentId:X,conversationId:Y,parentAgentId:V,reason:H})=>{let B={...a1("session_shutdown",{agentId:X,conversationId:Y,parentAgentId:V},$),hookName:"session_shutdown",reason:H};await N2(B,$)}}}var lK={};w(lK,{writeHubDiscovery:()=>d9,withHubStartupLock:()=>l9,verifyHubConnection:()=>G1,truncateNotificationBody:()=>UJ,toHubStatusUrl:()=>PW,toHubHealthUrl:()=>p9,stopLocalHubServerGracefully:()=>gW,startHubWebSocketServer:()=>C2,startHubServer:()=>uK,spawnDetachedHubServerWithRetry:()=>h8,spawnDetachedHubServer:()=>EW,sendHubCommand:()=>cA,restartLocalHubIfIdleAfterStartupTimeout:()=>s9,resolveWorkspaceHubOwnerContext:()=>PB,resolveSharedHubOwnerContext:()=>E0,resolveProductionHubOwnerContext:()=>n0,resolveHubUrl:()=>H3,resolveHubOwnerContext:()=>l1,resolveHubEndpointOptions:()=>i0,resolveHubBuildId:()=>u9,resolveDefaultHubPort:()=>b8,resolveDefaultHubPathname:()=>yW,resolveDefaultHubHost:()=>CW,resolveCompatibleLocalHubUrl:()=>QJ,resolveClineDir:()=>OB,resolveClineDataDir:()=>R2,requestHubShutdown:()=>JJ,rememberRecoverableLocalHubUrl:()=>P$,readHubDiscovery:()=>A0,readBearerToken:()=>FQ,probeHubServer:()=>p1,probeHubConnection:()=>vA,prewarmDetachedHubServer:()=>i9,normalizeHubWebSocketUrl:()=>N$,isHubReconnectableTransportError:()=>IW,isHubCommandTimeoutError:()=>a9,isDiscoveryFilePresent:()=>MB,ensureHubWebSocketServer:()=>DQ,ensureHubServer:()=>dK,ensureDetachedHubServer:()=>EB,ensureCompatibleLocalHubUrl:()=>_2,createLocalHubScheduleRuntimeHandlers:()=>UQ,createInMemoryHubOwnerContext:()=>TB,createHubServerUrl:()=>j1,createHubAuthToken:()=>c9,createConfiguredTelemetryService:()=>s1,createConfiguredTelemetryHandle:()=>e8,connectToHub:()=>VQ,clearHubDiscovery:()=>y0,NodeHubClient:()=>f1,NativeHubTransportAdapter:()=>OJ,HubUIClient:()=>K3,HubTransportError:()=>q0,HubSessionClient:()=>A3,HubServerTransport:()=>J4,HubScheduleService:()=>s8,HubScheduleCommandService:()=>a8,HubCommandError:()=>k8,DEFAULT_HUB_PORT:()=>wW,DEFAULT_HUB_PATHNAME:()=>SW,DEFAULT_HUB_HOST:()=>NW,BrowserWebSocketHubAdapter:()=>_J});import{createSessionId as zw}from"@cline/shared";function a0($,J){return{version:$.version,requestId:$.requestId,ok:!0,payload:J}}function IA($,J,Q){return{version:$.version,requestId:$.requestId??zw("hubreq_"),ok:!1,error:{code:J,message:Q}}}class a8{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return a0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return a0($,{schedules:this.schedules.listSchedules({enabled:typeof $.payload?.enabled==="boolean"?$.payload.enabled:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0,tags:Array.isArray($.payload?.tags)?$.payload?.tags:void 0})});case"schedule.get":return a0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return a0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return a0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return a0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return a0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return a0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return a0($,{executions:this.schedules.listScheduleExecutions({scheduleId:typeof $.payload?.scheduleId==="string"?$.payload.scheduleId:void 0,status:typeof $.payload?.status==="string"?$.payload.status:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0})});case"schedule.stats":return a0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return a0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return a0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return IA($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(J){return IA($,"schedule_command_failed",J instanceof Error?J.message:String(J))}}toCreateInput($){let J=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:J}}toUpdateInput($){let J=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:J}}}function XQ($){return $?new Date($).getTime():void 0}function Lw($){let J=$.metadata?{...$.metadata}:void 0;if(J)delete J.__hubScheduleCreatedBy,delete J.__hubScheduleCwd,delete J.__hubRuntimeOptions;return J}function fQ($){let J=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof J?.__hubScheduleCwd==="string"?J.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:XQ($.nextRunAt),lastRunAt:XQ($.lastRunAt),createdBy:typeof J?.__hubScheduleCreatedBy==="string"?J.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:J?.__hubRuntimeOptions&&typeof J.__hubRuntimeOptions==="object"&&!Array.isArray(J.__hubRuntimeOptions)?J.__hubRuntimeOptions:void 0,metadata:Lw($)}}function _w($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function f3($,J){return{executionId:$.runId,scheduleId:J,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:XQ($.startedAt),endedAt:XQ($.completedAt),status:_w($.status),errorMessage:$.error}}class s8{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new a6({dbPath:$.dbPath}),this.materializer=new l6({store:this.store}),this.runner=new p6({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(VW($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return fQ(this.store.createHubSchedule($))}getSchedule($){let J=this.store.getHubSchedule($);return J?fQ(J):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((J)=>fQ(J))}updateSchedule($,J){if(J.cronPattern!==void 0)VW(J.cronPattern);let Q=this.store.getHubSchedule($);if(!Q)return;let Z=J.workspaceRoot!==void 0?J.workspaceRoot.trim():Q.workspaceRoot;if((J.enabled??Q.enabled)&&!Z)throw Error("workspaceRoot is required for enabled schedules");let j=this.store.updateHubSchedule($,{...J,scheduleId:$});return j?fQ(j):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let J=this.store.enqueueHubScheduleRun($,"manual");if(!J)return;await this.runner.tick();let Q=this.store.getRun(J.runId)??J;return f3(Q,$)}triggerScheduleNowDetached($){let J=this.store.enqueueHubScheduleRun($,"manual");if(!J)return;return this.runner.tick().catch(()=>{return}),f3(J,$)}listScheduleExecutions($){let J=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:J?.specId,limit:$.limit};return this.store.listRuns(Q).map((W)=>{let j=J??this.store.getSpec(W.specId);if(!j||j.source!=="hub-schedule")return;return f3(W,j.externalId)}).filter((W)=>{if(!W)return!1;return!$.status||W.status===$.status})}getScheduleStats($){let J=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(J.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,Z=0,W=0,j;for(let f of J){if(f.status==="success"||f.status==="completed")Q+=1;if(!j&&f.status!=="success"&&f.status!=="completed")j=f;if(f.startedAt&&f.endedAt)W+=f.endedAt-f.startedAt,Z+=1}return{totalRuns:J.length,successRate:Q/J.length,avgDurationSeconds:Z>0?W/Z/1000:0,lastFailure:j}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let J=this.store.getSpec($.specId);if(!J||J.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:J.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:J.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+J.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let J={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(J).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,Z)=>String(Q.nextRunAt).localeCompare(String(Z.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:Z})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:Z}))}}YQ();import{resolveClineBuildEnv as lw}from"@cline/shared";function pw($,J){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Q?`Failed to connect to hub at ${J} (${Q} event before socket open).`:`Failed to connect to hub at ${J}.`)}var rw="cline-hub-auth.";function iw($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function nw($,J){let Q=new URL($),Z=new URL(J);return Q.search="",Q.hash="",Z.search="",Z.hash="",Q.toString()===Z.toString()}function mA(){return lw()==="production"?n0():E0()}async function aw($){let J=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),J)return J;let Q=mA(),Z=await A0(Q.discoveryPath);if(Z?.url&&nw($.toString(),Z.url))return Z.authToken;return}async function H3($={}){let J=i0($);if(!iw($)){let Q=mA(),Z=await A0(Q.discoveryPath);if(Z?.url)return Z.url}return j1(J.host,J.port,J.pathname)}async function VQ($){return await new Promise((J,Q)=>{(async()=>{let Z=new URL($),W=await aw(Z);Z.hash="";let j=new WebSocket(Z.toString(),W?[`${rw}${W}`]:void 0),f=new Map,X=0;j.addEventListener("open",()=>{J({send(Y){let V=Y.requestId??`hub-client-${++X}`;return new Promise((H,B)=>{f.set(V,{resolve:H,reject:B});let A={kind:"command",envelope:{...Y,requestId:V}};j.send(JSON.stringify(A))})},close(){j.close()}})}),j.addEventListener("message",(Y)=>{let V=JSON.parse(String(Y.data));if(V.kind==="reply"&&V.envelope.requestId){let H=f.get(V.envelope.requestId);if(H)f.delete(V.envelope.requestId),H.resolve(V.envelope)}}),j.addEventListener("close",()=>{for(let Y of f.values())Y.reject(Error("Hub connection closed"));f.clear()}),j.addEventListener("error",(Y)=>{Q(pw(Y,$))})})().catch(Q)})}async function vA($){try{return(await VQ($)).close(),!0}catch{return!1}}async function cA($,J){let Q=await H3($),Z=await VQ(Q);try{return await Z.send({version:J.version??"v1",clientId:J.clientId??"hub-client",...J})}finally{Z.close()}}function B3($){return $?JSON.parse(JSON.stringify($)):{}}function HQ($){let J=$?.session&&typeof $.session==="object"?$.session:void 0;if(!J)return;let Q=J.metadata&&typeof J.metadata==="object"?B3(J.metadata):void 0;return{sessionId:typeof J.sessionId==="string"?J.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function uA($,J){return $.error?.message??`hub command failed: ${J}`}function sw($){let J=B3($);if(typeof J.error==="string"&&J.error.trim())return{...J,error:J.error.trim()};let Q=J.result&&typeof J.result==="object"?J.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...J,error:Q.text.trim()};let Z=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof Z?.message==="string"&&Z.message.trim())return{...J,error:Z.message.trim()};return J}function dA($){let J=$?.sessionId;return typeof J==="string"&&J.trim()?J.trim():void 0}function ow($){let J=$?.checkpoint;if(!J||typeof J!=="object"||Array.isArray(J))throw Error("hub checkpoint restore returned no checkpoint");let Q=J;if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Q}function tw($){let J=B3($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||dA(J)||"",eventType:"schedule.execution.completed",payload:J};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||dA(J)||"",eventType:"schedule.execution.failed",payload:J};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:J};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:J};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:J};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:J};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:J};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:J};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:J};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:J};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:sw($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:J};default:return}}class A3{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new f1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-session-client",displayName:$.displayName??"hub session client",workspaceRoot:$.workspaceRoot,cwd:$.cwd})}async ensureMetadataApplied(){if(this.metadataApplied||!this.options.metadata){if(!this.options.metadata)await this.client.connect();return}await this.client.connect(),await this.client.command("client.update",{metadata:this.options.metadata}),this.metadataApplied=!0}async connect(){await this.ensureMetadataApplied()}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession($){await this.ensureMetadataApplied();let J=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),Q=HQ(J.payload);if(!Q?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}}}async sendRuntimeSession($,J,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:J.prompt,mode:J.config.mode,attachments:J.attachments,delivery:J.delivery,timeoutSeconds:J.config.timeoutSeconds},$,Q)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let J;try{J=await this.client.command("session.get",void 0,$)}catch(Q){if(d1(Q))return;throw Q}return HQ(J.payload)}async readMessages($){let J=$.trim();if(!J)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:J},J);if(!Q.ok)throw Error(uA(Q,"session.messages"));let Z=Q.payload?.messages;return Array.isArray(Z)?Z:[]}async restore($){let J=$.sessionId.trim();if(!J)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let Z=$.config,W=await this.client.command("session.restore",{sessionId:J,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Z?{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,sessionConfig:{providerId:Z.provider,modelId:Z.model,apiKey:Z.apiKey,cwd:Z.cwd??Z.workspaceRoot,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:Z.mode??"act",rules:Z.rules,maxIterations:Z.maxIterations,enableTools:Z.enableTools,enableSpawnAgent:Z.enableSpawn!==!1,enableAgentTeams:Z.enableTeams!==!1,disableMcpSettingsTools:Z.disableMcpSettingsTools,missionLogIntervalSteps:Z.missionStepInterval,missionLogIntervalMs:Z.missionTimeIntervalMs},metadata:{source:Z.source??"cli",provider:Z.provider,model:Z.model,enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams,prompt:void 0,interactive:Z.interactive!==!1},runtimeOptions:{mode:Z.mode,systemPrompt:Z.systemPrompt,maxIterations:Z.maxIterations,enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams,autoApproveTools:Z.autoApproveTools,configExtensions:Z.configExtensions},modelSelection:{provider:Z.provider,model:Z.model,apiKey:Z.apiKey},toolPolicies:Z.toolPolicies}:{}},J);if(!W.ok)throw Error(uA(W,"session.restore"));let j=HQ(W.payload);if(Q&&!j?.sessionId)throw Error("hub checkpoint restore returned no session id");let f=Array.isArray(W.payload?.messages)?W.payload.messages:void 0,X=ow(W.payload);return{sessionId:j?.sessionId,startResult:j?.sessionId?{sessionId:j.sessionId,manifestPath:"",messagesPath:j.messagesPath??""}:void 0,...f?{messages:f}:{},checkpoint:X}}async listSessions($){await this.ensureMetadataApplied();let J=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(J.payload?.sessions)?J.payload?.sessions:[]).map((Z)=>HQ({session:Z})).filter((Z)=>Boolean(Z?.sessionId))}async deleteSession($,J=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:J})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,J){let Q=new Set(($.sessionIds??[]).map((W)=>W.trim()).filter(Boolean)),Z=this.client.subscribe((W)=>{let j=tw(W);if(!j)return;if(Q.size>0&&!Q.has(j.sessionId))return;J.onEvent?.(j)});return this.ensureMetadataApplied().catch((W)=>{J.onError?.(W instanceof Error?W:Error(String(W)))}),Z}streamTeamProgress($,J){let Q=this.client.subscribe((Z)=>{if(Z.event!=="team.progress"||!Z.payload)return;J.onProjection?.(Z.payload)});return this.ensureMetadataApplied().catch((Z)=>{J.onError?.(Z instanceof Error?Z:Error(String(Z)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let J=await this.client.command("schedule.list");return Array.isArray(J.payload?.schedules)?J.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,J){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...J})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,J){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:J});return Array.isArray(Q.payload?.executions)?Q.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let J=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(J.payload?.upcoming)?J.payload?.upcoming:[]}}class K3{client;constructor($){this.client=new f1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let J=await this.client.command("session.list",{limit:$});return Array.isArray(J.payload?.sessions)?J.payload.sessions:[]}subscribeUI($){return this.client.subscribe((J)=>{switch(J.event){case"ui.notify":$.onNotify?.(J.payload);break;case"ui.show_window":$.onShowWindow?.(J.payload);break;case"hub.client.registered":$.onClientRegistered?.(J.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(J.payload??{});break;case"session.created":$.onSessionCreated?.(J.payload??{});break;case"session.updated":$.onSessionUpdated?.(J.payload??{});break;case"session.detached":$.onSessionDetached?.(J.payload??{});break}})}}import{resolveClineBuildEnv as vK}from"@cline/shared";function ew($){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(`
|
|
570
|
-
`).trim()||void 0}var lA=120,G3="...";function UJ($){let J=$.trim();if(!J)return"";if(Buffer.byteLength(J,"utf8")<=lA)return J;let Q=lA-Buffer.byteLength(G3,"utf8");if(Q<=0)return G3;let Z="";for(let W of J){if(Buffer.byteLength(Z+W,"utf8")>Q)break;Z+=W}return`${Z}${G3}`}async function pA($){let J=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,W=[...await q$(Q)].reverse().find((Y)=>Y.role==="assistant"),j=W?ew(W.content):void 0,f=$?.workspaceRoot?.trim()||"workspace",X=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():f;return{title:`Task completed (${J})`,body:UJ(j&&j.length>0?j:X.length>0?X:f),severity:"info"}}import{captureSdkError as GQ,createSessionId as ES}from"@cline/shared";import{createSessionId as ZS}from"@cline/shared";import{createSessionId as QS}from"@cline/shared";function $S($){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 JS($){let J=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())J.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())J.parentAgentId=$.parentAgentId;if($.agentId?.trim())J.agentId=$.agentId;if($.conversationId?.trim())J.conversationId=$.conversationId;if($.messagesPath?.trim())J.messagesPath=$.messagesPath;if($.prompt?.trim())J.prompt=$.prompt;if($.provider?.trim())J.provider=$.provider;if($.model?.trim())J.model=$.model;if($.source?.trim())J.source=$.source;if(typeof $.pid==="number")J.pid=$.pid;return Object.keys(J).length>0?J:void 0}function BQ($,J,Q,Z){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:J?.createdByClientId??"hub",status:$S($.status),participants:J?[...J.participants.values()]:[],metadata:JS($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Q?{usage:{...Q}}:{},...Z?{aggregateUsage:{...Z}}:{}}}function l($,J){return{version:$.version,requestId:$.requestId,ok:!0,...J!==void 0?{payload:J}:{}}}function v($,J,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:J,message:Q}}}function AQ($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function h0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function w2($,J,Q){return{version:"v1",event:$,eventId:QS("hevt_"),sessionId:Q,timestamp:Date.now(),payload:J}}async function s0($,J){let Q=await $.sessionHost.getSession(J);if(!Q)return;let Z=await $.sessionHost.getAccumulatedUsage?.(J);return BQ(Q,$.sessionState.get(J),Z?.usage,Z?.aggregateUsage)}async function o0($,J){let Q=await $.sessionHost.getSession(J);if(!Q)return;let[Z,W]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(J):[],$.sessionHost.getAccumulatedUsage?.(J)]);return F1({session:Q,messages:Z,usage:W?.usage,aggregateUsage:W?.aggregateUsage})}function KQ($,J,Q,Z,W={}){let j=$.sessionState.get(J);if(j){if(W.interactive!==void 0)j.interactive=W.interactive;if(!j.participants.has(Q))j.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:Z});return j}let f={createdByClientId:Q,interactive:W.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:Z}]])};return $.sessionState.set(J,f),f}async function F3($,J){let Q=ZS("approval_"),Z=J.sessionId;if($.sessionState.get(Z)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((j)=>{$.pendingApprovals.set(Q,{sessionId:Z,resolve:j}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:J.sessionId,agentId:J.agentId,conversationId:J.conversationId,iteration:J.iteration,toolCallId:J.toolCallId,toolName:J.toolName,inputJson:JSON.stringify(J.input??null),policy:J.policy},Z))})}function D3($,J,Q){let Z=$.pendingApprovals.get(J);if(!Z)return;return $.pendingApprovals.delete(J),Z.resolve(Q),{sessionId:Z.sessionId}}function U3($,J,Q){let Z=0;for(let[W,j]of[...$.pendingApprovals.entries()]){if(!J({approvalId:W,sessionId:j.sessionId}))continue;$.pendingApprovals.delete(W),j.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:W,approved:!1,cancelled:!0,reason:Q},j.sessionId)),Z+=1}return Z}async function rA($,J){let Q=typeof J.payload?.approvalId==="string"?J.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return v(J,"approval_not_found",`Unknown approval: ${Q}`);let W=typeof J.payload?.reason==="string"?J.payload.reason:J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)&&typeof J.payload.payload.reason==="string"?J.payload.payload.reason:void 0,j=J.payload?.approved===!0,f=D3($,Q,{approved:j,reason:W});if(!f)return v(J,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:j,reason:W},f.sessionId)),l(J,{approvalId:Q,approved:j})}import{createSessionId as fS}from"@cline/shared";function WS($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var iA={debug:10,info:20,warn:30,error:40,silent:50};function jS(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function c($,J,Q={}){if(iA[$]<iA[jS()])return;let Z=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:J,...Object.fromEntries(Object.entries(Q).map(([W,j])=>[W,WS(j)]).filter(([,W])=>W!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${Z}`);return}console.log(`[hub] ${Z}`)}function R3($,J){let Q=J instanceof Error?J.stack||J.message:String(J);c("error",$,{error:Q})}async function nA($,J,Q,Z,W,j){let f=fS("capreq_"),X=performance.now();return c("info","capability.request.start",{requestId:f,sessionId:J,capabilityName:Q,targetClientId:W}),await new Promise((Y,V)=>{$.pendingCapabilityRequests.set(f,{sessionId:J,targetClientId:W,capabilityName:Q,onProgress:j,resolve:(H)=>{if(c(H.ok?"info":"warn","capability.request.end",{requestId:f,sessionId:J,capabilityName:Q,targetClientId:W,ok:H.ok,error:H.error,durationMs:Math.round(performance.now()-X)}),!H.ok){V(Error(H.error||`Capability ${Q} was rejected by ${W}.`));return}Y(H.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:f,targetClientId:W,capabilityName:Q,payload:Z},J)),c("info","capability.request.published",{requestId:f,sessionId:J,capabilityName:Q,targetClientId:W})})}function aA($,J){let Q=typeof J.payload?.requestId==="string"?J.payload.requestId.trim():"",Z=$.pendingCapabilityRequests.get(Q);if(!Z)return v(J,"capability_not_found",`Unknown capability request: ${Q}`);if((J.clientId?.trim()||"")!==Z.targetClientId)return v(J,"capability_wrong_client",`Capability request ${Q} is owned by ${Z.targetClientId}`);if(J.sessionId?.trim()&&J.sessionId.trim()!==Z.sessionId)return v(J,"capability_wrong_session",`Capability request ${Q} belongs to session ${Z.sessionId}`);let j=J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)?J.payload.payload:{};return Z.onProgress?.(j),l(J,{requestId:Q})}function C$($,J,Q){let Z=0;for(let[W,j]of[...$.pendingCapabilityRequests.entries()]){if(!J({requestId:W,...j}))continue;$.pendingCapabilityRequests.delete(W),c("warn","capability.request.cancelled",{requestId:W,sessionId:j.sessionId,capabilityName:j.capabilityName,targetClientId:j.targetClientId,reason:Q}),j.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:W,capabilityName:j.capabilityName,targetClientId:j.targetClientId,ok:!1,cancelled:!0,error:Q},j.sessionId)),Z+=1}return Z}async function sA($,J){let Q=typeof J.payload?.sessionId==="string"?J.payload.sessionId.trim():J.sessionId?.trim()||"",Z=typeof J.payload?.capabilityName==="string"?J.payload.capabilityName.trim():"",W=typeof J.payload?.targetClientId==="string"?J.payload.targetClientId.trim():"";if(!Q||!Z||!W)return v(J,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let j=J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)?J.payload.payload:{},f=await $.requestCapability(Q,Z,j,W);return l(J,f)}catch(j){return v(J,"capability_request_failed",j instanceof Error?j.message:String(j))}}function oA($,J){let Q=typeof J.payload?.requestId==="string"?J.payload.requestId.trim():"",Z=$.pendingCapabilityRequests.get(Q);if(!Z)return v(J,"capability_not_found",`Unknown capability request: ${Q}`);let W=J.clientId?.trim()||"";if(W!==Z.targetClientId)return v(J,"capability_wrong_client",`Capability request ${Q} is owned by ${Z.targetClientId}`);if(J.sessionId?.trim()&&J.sessionId.trim()!==Z.sessionId)return v(J,"capability_wrong_session",`Capability request ${Q} belongs to session ${Z.sessionId}`);$.pendingCapabilityRequests.delete(Q);let j=J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)?J.payload.payload:void 0,f=typeof J.payload?.error==="string"?J.payload.error:void 0,X=J.payload?.ok===!0;return c(X?"info":"warn","capability.respond",{requestId:Q,sessionId:Z.sessionId,capabilityName:Z.capabilityName,targetClientId:Z.targetClientId,respondedByClientId:W,ok:X,error:f}),Z.resolve({ok:X,payload:j,error:f}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:Z.capabilityName,targetClientId:Z.targetClientId,respondedByClientId:W,ok:X,payload:j,error:f},Z.sessionId)),l(J,{requestId:Q,ok:X})}import{createSessionId as XS}from"@cline/shared";function tA($,J){let Q=J.payload,Z=Q?.clientId?.trim()||J.clientId?.trim()||XS("client_");return $.clients.set(Z,{clientId:Z,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,actorKind:Q?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Q?.transport??"native",capabilities:Q?.capabilities??[],metadata:Q?.metadata,workspaceContext:Q?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:Z,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),l(J,{clientId:Z})}function eA($,J){let Q=J.clientId?.trim(),Z=Q?$.clients.get(Q):void 0;if(!Q||!Z)return v(J,"client_not_found","Client is not registered with this hub.");let W=AQ(J.payload?.metadata);if(Z.lastSeenAt=Date.now(),W)Z.metadata=JSON.parse(JSON.stringify(W));return l(J)}function $K($,J,Q){let Z=J.clientId?.trim();if(Z)$.clients.delete(Z),Q(Z),$.publish($.buildEvent("hub.client.disconnected",{clientId:Z}));return l(J)}function JK($,J){return l(J,{clients:[...$.clients.values()]})}var YS=30000;function VS($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function HS($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function BS($,J,Q){let Z=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${J}`;return v($,G2,Z)}function AS($){return $?$:void 0}function KS($){let J=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(J&&Number.isFinite(J)&&J>0)return Math.floor(J);let Q=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(Q&&Number.isFinite(Q)&&Q>0)return Math.floor(Q*1000);return}async function GS($,J,Q,Z){let W=performance.now(),j=!1,f={command:J.command,requestId:J.requestId,clientId:J.clientId,sessionId:Q.sessionId,timeoutMs:Z},X=setInterval(()=>{if(j)return;let H=Math.round(performance.now()-W);c("warn","run.heartbeat",{...f,elapsedMs:H}),$.publish($.buildEvent("run.heartbeat",{requestId:J.requestId,elapsedMs:H,...Z?{timeoutMs:Z}:{}},Q.sessionId))},YS),Y=$.sessionHost.runTurn(Q);Y.then((H)=>{if(!j)return;c("warn","run.late_end",{...f,elapsedMs:Math.round(performance.now()-W),finishReason:H?.finishReason})},(H)=>{if(!j)return;c("error","run.late_error",{...f,elapsedMs:Math.round(performance.now()-W),error:H})});let V;try{if(!Z)return await Y;return await Promise.race([Y,new Promise((H,B)=>{V=setTimeout(()=>{let A=`Hub run ${J.command} timed out after ${Z}ms.`;j=!0,clearInterval(X),B(Error(A)),c("error","run.timeout",{...f,elapsedMs:Math.round(performance.now()-W)}),U3($,(K)=>K.sessionId===Q.sessionId,A),C$($,(K)=>K.sessionId===Q.sessionId,A),$.sessionHost.abort(Q.sessionId,A).catch((K)=>{c("error","run.timeout_abort_failed",{...f,error:K})})},Z)})])}finally{if(j=!0,clearInterval(X),V)clearTimeout(V)}}async function QK($,J){let Q=h0(J),Z=J.payload&&typeof J.payload==="object"?J.payload:{},W=typeof Z.prompt==="string"?Z.prompt:typeof Z.input==="string"?Z.input:"";if(!W.trim())return v(J,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let j=Z.attachments&&typeof Z.attachments==="object"&&!Array.isArray(Z.attachments)?Z.attachments:void 0,f=Array.isArray(j?.userFiles)?j.userFiles.filter((H)=>typeof H==="string"):void 0,X=KS(Z);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let Y;try{Y=await GS($,J,{sessionId:Q,prompt:W,mode:AS(Z.mode),delivery:Z.delivery==="queue"||Z.delivery==="steer"?Z.delivery:void 0,userImages:Array.isArray(j?.userImages)?j.userImages:void 0,userFiles:f,timeoutMs:X},X)}catch(H){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(d1(H))return BS(J,Q,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Q)),H}if(Y){let H=await o0($,Q),B=HS(Y);if($.publish($.buildEvent(VS(Y.finishReason),{reason:Y.finishReason,...B?{error:B}:{},result:Y,...H?{snapshot:H}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let V=await o0($,Q);return l(J,Y||V?{...Y?{result:Y}:{},...V?{snapshot:V}:{}}:void 0)}async function ZK($,J){let Q=h0(J),Z=typeof J.payload?.reason==="string"?J.payload.reason:"Run was aborted before pending approval or capability request was resolved.";U3($,(W)=>W.sessionId===Q,Z);try{await $.sessionHost.abort(Q,J.payload?.reason)}catch(W){c("warn","run.abort_failed",{command:J.command,requestId:J.requestId,clientId:J.clientId,sessionId:Q,error:W})}finally{C$($,(W)=>W.sessionId===Q,Z)}return l(J,{applied:!0})}async function WK($,J){let Q=i8(J.payload?.payload);if(!Q)return v(J,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),l(J,{applied:!0})}async function jK($,J){switch(J.type){case"chunk":return;case"agent_event":await FS($,J);return;case"hook":if(J.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:J.payload.toolName},J.payload.sessionId));else if(J.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:J.payload.toolName},J.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:J.payload.sessionId,summary:J.payload.summary,lastEvent:J.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,J.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:J.payload.sessionId,prompts:J.payload.prompts},J.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:J.payload.id,prompt:J.payload.prompt,delivery:J.payload.delivery,attachmentCount:J.payload.attachmentCount};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:J.payload.sessionId,prompt:Q},J.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:J.payload.sessionId,snapshot:J.payload.snapshot},J.payload.sessionId));return;case"status":{let[Q,Z]=await Promise.all([s0($,J.payload.sessionId),o0($,J.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...Z?{snapshot:Z}:{}},J.payload.sessionId));return}case"ended":await DS($,J);return;default:return}}async function FS($,J){let{sessionId:Q,event:Z}=J.payload;if(Z.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:Z.iteration},Q));return}if(Z.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:Z.iteration,hadToolCalls:Z.hadToolCalls,toolCallCount:Z.toolCallCount},Q));return}if(Z.type==="content_start"){if(Z.contentType==="text"&&typeof Z.text==="string"&&Z.text.length>0){$.publish($.buildEvent("assistant.delta",{text:Z.text},Q));return}if(Z.contentType==="reasoning"){if(Z.redacted&&!Z.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof Z.reasoning==="string"&&Z.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:Z.reasoning,redacted:Z.redacted===!0},Q));return}if(Z.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:Z.toolCallId,toolName:Z.toolName,input:Z.input},Q));return}}if(Z.type==="content_end"){switch(Z.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:Z.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:Z.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:Z.toolCallId,toolName:Z.toolName,output:Z.output,error:Z.error},Q));break}return}if(Z.type==="usage"){let W;try{W=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{W=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:Z.inputTokens,outputTokens:Z.outputTokens,cacheReadTokens:Z.cacheReadTokens??0,cacheWriteTokens:Z.cacheWriteTokens??0,totalCost:Z.cost??0},totals:{inputTokens:Z.totalInputTokens,outputTokens:Z.totalOutputTokens,cacheReadTokens:Z.totalCacheReadTokens??0,cacheWriteTokens:Z.totalCacheWriteTokens??0,totalCost:Z.totalCost??0},usage:W?.usage,aggregateUsage:W?.aggregateUsage,agent:{kind:J.payload.teamRole==="teammate"?"teammate":Z.parentAgentId?"subagent":"lead",agentId:Z.agentId,conversationId:Z.conversationId,parentAgentId:Z.parentAgentId,teamAgentId:J.payload.teamAgentId,teamRole:J.payload.teamRole}},Q));return}if(Z.type==="done")$.publish($.buildEvent("agent.done",{reason:Z.reason,text:Z.text,iterations:Z.iterations,usage:Z.usage},Q))}async function DS($,J){let Q=$.suppressNextTerminalEventBySession.get(J.payload.sessionId),Z=Q===J.payload.reason||Q==="run.start.reply";if(Z)$.suppressNextTerminalEventBySession.delete(J.payload.sessionId);let[W,j]=await Promise.all([s0($,J.payload.sessionId),o0($,J.payload.sessionId)]);if(J.payload.reason==="completed"){let f=await pA(W);$.publish($.buildEvent("ui.notify",f,J.payload.sessionId))}if(Z)return;$.publish($.buildEvent(J.payload.reason==="aborted"?"run.aborted":J.payload.reason==="error"||J.payload.reason==="failed"?"run.failed":"run.completed",{reason:J.payload.reason,...j?{snapshot:j}:{}},J.payload.sessionId))}import{createSessionId as AK,parseRuntimeConfigExtensions as KK}from"@cline/shared";var VK={};w(VK,{SessionVersioningService:()=>y$,SessionVersioningError:()=>k0});var YK={};w(YK,{trimMessagesToCheckpoint:()=>XK,trimMessagesBeforeCheckpoint:()=>L3,readSessionCheckpointHistory:()=>RJ,createRestoredCheckpointMetadata:()=>z3,createCheckpointRestorePlan:()=>_3,applyCheckpointToWorktree:()=>O3});import{execFile as US}from"node:child_process";import{promisify as RS}from"node:util";var $4=RS(US);function RJ($){let J=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(J?.history)?J.history:[]).filter((Z)=>!!Z&&typeof Z==="object"&&!Array.isArray(Z)).flatMap((Z)=>{let W=String(Z.ref??"").trim(),j=Number(Z.createdAt??0),f=Number(Z.runCount??0);if(W.length===0||!Number.isFinite(j)||!Number.isInteger(f)||f<1)return[];let X=Z.kind==="stash"||Z.kind==="commit"?Z.kind:void 0;return[{ref:W,createdAt:j,runCount:f,...X?{kind:X}:{}}]})}function z3($,J){let Q=RJ($).filter((W)=>W.runCount<=J),Z=Q.at(-1);return Z?{latest:Z,history:Q}:void 0}function zS($,J){return $.reduce((Q,Z)=>{if(Z.runCount>J)return Q;if(!Q||Z.runCount>Q.runCount)return Z;return Q},void 0)}function fK($,J){let Q=0;for(let Z=0;Z<$.length;Z+=1){let W=$[Z];if(W?.role!=="user")continue;if(("metadata"in W&&W.metadata&&typeof W.metadata==="object"?W.metadata:void 0)?.kind==="recovery_notice")continue;if(Q+=1,Q===J)return Z}throw Error(`Could not find user message for checkpoint run ${J}`)}function XK($,J){let Q=fK($,J);return $.slice(0,Q+1)}function L3($,J){let Q=fK($,J);return $.slice(0,Q)}function _3($){let J=$.checkpointRunCount;if(!Number.isInteger(J)||J<1)throw Error("checkpointRunCount must be a positive integer");let Q=zS(RJ($.session),J);if(!Q)throw Error(`No checkpoint found at or before run ${J} in session ${$.session.sessionId}`);let Z=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!Z)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:Z,...$.restoreMessages!==!1?{messages:XK($.messages??[],J)}:{}}}async function O3($,J){if((await $4("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await $4("git",["-C",$,"cat-file","-e",`${J.ref}^{commit}`],{windowsHide:!0}),await $4("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await $4("git",["-C",$,"clean","-fd"],{windowsHide:!0}),J.kind==="commit"){await $4("git",["-C",$,"reset","--hard",J.ref],{windowsHide:!0});return}await $4("git",["-C",$,"stash","apply",J.ref],{windowsHide:!0})}class k0 extends Error{code;constructor($,J){super(J);this.code=$;this.name="SessionVersioningError"}}function LS($){let J=$.sessionId.trim();if(!J)throw new k0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new k0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new k0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new k0("invalid_restore","checkpointRunCount must be a positive integer");return J}class y${async restoreCheckpoint($){let J=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,Z=LS({sessionId:$.sessionId,restoreMessages:J,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),W=await $.getSession(Z);if(!W)throw new k0("session_not_found",`Session ${Z} not found`);let j=J?await $.readMessages(Z):void 0;if(J&&j?.length===0)throw new k0("session_messages_not_found",`No messages found for session ${Z}`);let f=_3({session:W,messages:j,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:J});if(Q)await($.applyWorkspaceCheckpoint??O3)(f.cwd,f.checkpoint);let X=F1({session:W,messages:j});if(!J)return{checkpoint:f.checkpoint,sourceSnapshot:X};let Y=z3(W,$.checkpointRunCount),V=$.restore?.omitCheckpointMessageFromSession?L3(j??[],$.checkpointRunCount):f.messages??[],H={sourceSession:W,sourceMessages:j,sourceSnapshot:X,plan:f,restoredCheckpointMetadata:Y,initialMessages:V,restoreMessages:J,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new k0("invalid_restore","start is required when restore.messages is true");let B=$.buildStartInput?await $.buildStartInput(H,$.start):$.start,A=await $.startSession(B),K=$.getStartedSessionId?.(A);if(K)await($.retainCheckpointRefs??VV)(f.cwd,K,Y?.history??[]);let G=K&&$.readRestoredSession?await $.readRestoredSession(K):void 0;return{sessionId:K,startResult:A,messages:f.messages,checkpoint:f.checkpoint,sourceSnapshot:X,...G?{restoredSnapshot:F1({session:G,messages:V})}:{}}}}import{HUB_CHECKPOINT_CAPABILITY as bp,HUB_COMPACTION_CAPABILITY as hp,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as kp,HUB_HOOK_CAPABILITY_PREFIX as Ip,HUB_MISTAKE_LIMIT_CAPABILITY as xp,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as gp,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as mp,isHubToolExecutorName as _S}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as lp,HUB_COMPACTION_CAPABILITY as pp,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as rp,HUB_HOOK_CAPABILITY_PREFIX as ip,HUB_MISTAKE_LIMIT_CAPABILITY as np,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as ap,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as sp}from"@cline/shared";var OS=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function S2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function TS($,J){let Q=typeof $.name==="string"?$.name.trim():"",Z=typeof $.description==="string"?$.description:"",W=typeof $.capabilityName==="string"?$.capabilityName.trim():"",j=S2($.inputSchema);if(!Q||!Z||!j||!W||J.has(W))return;return J.add(W),{kind:"tool",capabilityName:W,name:Q,description:Z,inputSchema:j,...S2($.lifecycle)?{lifecycle:S2($.lifecycle)}:{}}}function M3($){if(!Array.isArray($))return[];let J=[],Q=new Set;for(let Z of $){if(!Z||typeof Z!=="object"||Array.isArray(Z))continue;let W=Z,j=W.kind,f=typeof W.capabilityName==="string"?W.capabilityName.trim():"";if(!f||Q.has(f))continue;if(j==="tool"){let X=TS(W,Q);if(X)J.push(X);continue}if(j==="toolExecutor"){let X=W.executor;if(!_S(X))continue;Q.add(f),J.push({kind:"toolExecutor",capabilityName:f,executor:X});continue}if(j==="hook"){let X=typeof W.name==="string"?W.name.trim():"";if(!X)continue;Q.add(f),J.push({kind:"hook",capabilityName:f,name:X});continue}if(j==="compaction"){Q.add(f),J.push({kind:"compaction",capabilityName:f,...S2(W.config)?{config:S2(W.config)}:{}});continue}if(j==="checkpoint"){Q.add(f),J.push({kind:"checkpoint",capabilityName:f,...S2(W.config)?{config:S2(W.config)}:{}});continue}if(j==="mistakeLimit"){Q.add(f),J.push({kind:"mistakeLimit",capabilityName:f});continue}if(j==="userInstructionService")Q.add(f),J.push({kind:"userInstructionService",capabilityName:f})}return J}function BK($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function MS($){return Object.hasOwn($,"update")?$.update:$}function zJ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function qS($){let J=($??[]).map(zJ).filter(Boolean);return J.length>0?new Set(J):void 0}function PS($,J,Q){if(!Q)return!0;let Z=zJ($),W=zJ(J),j=Z.includes(":")?Z.split(":").at(-1)??Z:Z,f=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(Z)||Q.has(W)||Q.has(j)||Q.has(f)}function T3($,J){let Q=qS(J);return $.records.skill.map((Z)=>({id:Z.id,name:Z.item.name,description:"description"in Z.item&&typeof Z.item.description==="string"?Z.item.description:void 0,disabled:Z.item.disabled===!0,skill:Z.item})).filter((Z)=>PS(Z.id,Z.name,Q))}function HK($,J){let Q=async(Z,W)=>{let j=zJ(Z),X=T3($,J).filter((A)=>A.id===j||zJ(A.name)===j||A.id.endsWith(`:${j}`)).filter((A)=>!A.disabled);if(X.length!==1)return X.length>1?`Skill "${Z}" is ambiguous. Use one of: ${X.map((A)=>A.id).join(", ")}`:`Skill "${Z}" not found.`;let Y=X[0].skill,V=W?.trim(),H=V?`
|
|
579
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,e()])}}function fw($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let J=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(J==="local"||J==="hub"||J==="remote")return J;return"auto"}var FJ,DJ;function Yw($,J){if($!=="auto"&&$!=="hub")return;if(J.hub?.endpoint?.trim())return;eQ(J.hub?.workspaceRoot?.trim()||J.hub?.cwd?.trim()||process.cwd())}async function Vw($){await $.reconcileDeadSessions?.().catch(()=>{})}function IA($){try{let J=new U1;return J.init(),new L1(J,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(J){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),kA($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:J,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new Z3(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function hA($,J,Q){return new z1({sessionService:Q??$.sessionService??IA($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:J,fetch:$.fetch})}async function f3($){if(FJ)return FJ;if(DJ)return await DJ;return DJ=(async()=>{return FJ=IA($),await Vw(FJ),FJ})().finally(()=>{DJ=void 0}),await DJ}async function r8($){let J=b0($.distinctId);$.telemetry?.setDistinctId(J);let Q=fw($);if(Yw(Q,$),Q==="remote"){let Z=$.remote?.endpoint?.trim();if(!Z)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:Z}),new g8({endpoint:Z,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let Z=$.hub?.endpoint?.trim(),W=Z||await _2({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!W)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:W,explicitEndpoint:Z||void 0}),new r1({url:W,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Q==="auto"){let Z=await XJ({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(Z){$.logger?.log("Using discovered local hub runtime host",{url:Z});let W=new r1({url:Z,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await W.connect(),W}catch(j){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:j}),kA($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:j,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),hA($,J)}return hA($,J)}var vA={};w(vA,{NoOpFeatureFlagsProvider:()=>q2,FeatureFlagsService:()=>M2});import{existsSync as Hw,mkdirSync as Bw,readFileSync as Aw,writeFileSync as Kw}from"node:fs";import{dirname as Gw}from"node:path";import{FEATURE_FLAGS as gA,FeatureFlagDefaultValue as Y3}from"@cline/shared";var Fw=3600000,Dw=604800000,mA=1;class M2{provider;telemetry;logger;cacheTtlMs;cacheFilePath;persistentCacheMaxAgeMs;context;cache=new Map;cacheInfo={updateTime:0,userId:null};constructor($){this.provider=$.provider,this.telemetry=$.telemetry,this.logger=$.logger,this.cacheTtlMs=$.cacheTtlMs??Fw,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??Dw,this.context={...$.context??{}},this.hydrateFromPersistentCache()}setContext($){this.context={...$}}hydrateCache($){this.cacheInfo={updateTime:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload},this.rebuildCacheFromSnapshot($.flagsPayload)}getCacheSnapshot(){return{updateTime:this.cacheInfo.updateTime,userId:this.cacheInfo.userId,flagsPayload:this.cacheInfo.flagsPayload}}async poll($){let J=$??this.context.userId??null,Q=Date.now();if(Q-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===J)return}let Z=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:J||null};try{let W=await this.provider.getAllFlagsAndPayloads({flagKeys:gA.length>0?gA:void 0,context:{...this.context,userId:J}});if(this.cacheInfo.userId!==J)return;this.cacheInfo.flagsPayload=W,this.rebuildCacheFromSnapshot(W),this.writePersistentCache()}catch(W){if(this.cacheInfo.userId!==J)return;throw this.cacheInfo=Z.updateTime?Z:{updateTime:0,userId:null},this.logger?.error?.("Error polling SDK feature flags",{error:W}),W}}hydrateFromPersistentCache(){let $=this.readPersistentCache();if($)this.hydrateCache($)}isFeatureFlagPayload($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every((J)=>this.isFeatureFlagPayload(J));if(typeof $==="object")return Object.values($).every((J)=>this.isFeatureFlagPayload(J));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=Object.entries($).filter(([,Z])=>this.isFeatureFlagPayload(Z));if(J.length===0)return;let Q={};for(let[Z,W]of J)Q[Z]=W;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!Hw(this.cacheFilePath))return;let $=JSON.parse(Aw(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let J=$;if(J.version!==mA||typeof J.updatedAt!=="number"||!Number.isFinite(J.updatedAt)||Date.now()-J.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:J.updatedAt,userId:J.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(J.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(J.flagsPayload?.featureFlagPayloads)}}}catch($){this.logger?.error?.("Error reading SDK feature flags cache",{error:$});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;Bw(Gw(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),J={version:mA,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};Kw(this.cacheFilePath,`${JSON.stringify(J,null,2)}
|
|
580
|
+
`,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let J=new Map;for(let Q of this.getReturnedFlagKeys($)){let Z=this.getFeatureFlag(Q);J.set(Q,Z??!1)}this.cache=J}getFeatureFlag($){try{let J=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],Z=J??Q??Y3[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==Z)this.telemetry?.capture({event:x.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return Z}catch(J){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:J}),Y3[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??Y3[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,J){if(process.env.IS_TEST==="true")this.cache.set($,J)}async dispose(){await this.provider.dispose()}}class q2{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}m8();class UJ{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,J,Q,Z,W,j,X,f,Y,V){this.clientName=J,this.runtimeAddress=Q,this.host=$,this.prepare=Z,this.capabilities=W,this.logger=j,this.telemetry=X,this.distinctId=f,this.featureFlags=Y,this.settings=iH($),this.pendingPrompts=nH($),this.automation=new dW(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=V?new $J({workspaceRoot:V.workspaceRoot??process.cwd(),specs:{cronSpecsDir:V.cronSpecsDir??V.cronDir,scope:JH(V.cronScope),workspaceRoot:V.workspaceRoot},runtimeHandlers:QH({host:$,getExtensionContext:()=>OQ({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:V.dbPath,logger:V.logger,pollIntervalMs:V.pollIntervalMs,claimLeaseSeconds:V.claimLeaseSeconds,globalMaxConcurrency:V.globalMaxConcurrency,watcherDebounceMs:V.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((H)=>{if(H.type!=="ended")return;this.disposeSessionBootstrap(H.payload.sessionId)})}static async create($={}){let J=b0($.distinctId),Q=z0($.capabilities),Z={...$,capabilities:Q,distinctId:J},W=await r8(Z),j=$H($.automation),X=$.featureFlags||new M2({provider:new q2,telemetry:$.telemetry,logger:$.logger,context:{distinctId:J,clientName:$.clientName}}),f=new UJ(W,$.clientName,W.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,J,X,j?{...j,logger:$.logger}:void 0);if(j&&j.autoStart!==!1)await f.automation.start();return f}async disposeSessionBootstrap($){let J=this.activeSessionBootstraps.get($);if(!J)return;this.activeSessionBootstraps.delete($),await Promise.resolve(J.dispose?.())}async start($){let J=sH($),Q=await this.prepare?.(J);try{let Z=Q?await Q.applyToStartSessionInput(J):J,W=await this.host.startSession(Z7(Z,{defaultCapabilities:this.capabilities,withExtensionContext:(j)=>OQ({automationService:this.automationService,automation:this.automation,context:j,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Q)if(await this.host.getSession(W.sessionId))this.activeSessionBootstraps.set(W.sessionId,Q);else await Promise.resolve(Q.dispose?.());return oH({input:Z,sessionId:W.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),W}catch(Z){throw await Promise.resolve(Q?.dispose?.()),Z}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let J=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(J.map((Q)=>this.disposeSessionBootstrap(Q)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await rQ(this.host,$);list=async($=200,J={})=>await this.listHistory({...J,limit:$});delete=async($)=>{let J=await this.host.deleteSession($);if(J)await this.disposeSessionBootstrap($);return J};update=(...$)=>this.host.updateSession(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let J=$.start?Z7($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>OQ({automationService:this.automationService,automation:this.automation,context:Q,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:$.sessionId,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restore:$.restore,start:J})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,J){return this.host.subscribe($,J)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}var uA={};w(uA,{resolvePluginSkillDirectoriesFromPaths:()=>$2,resolvePluginConfigSearchPaths:()=>B6,resolveAndLoadAgentPlugins:()=>K8,resolveAgentPluginPaths:()=>e$,loadAgentPluginsFromPathsWithDiagnostics:()=>t$,loadAgentPluginsFromPaths:()=>m5,loadAgentPluginFromPath:()=>V6,discoverPluginModulePaths:()=>A6});var pA={};w(pA,{toHookConfigFileName:()=>F6,runSubprocessEvent:()=>i8,runHook:()=>a8,resolveHooksConfigSearchPaths:()=>K6,parseHookEventPayload:()=>n8,mergeAgentHooks:()=>W2,listHookConfigFiles:()=>D$,createSubprocessHooks:()=>B9,createHookConfigFileHooks:()=>D6,createHookConfigFileExtension:()=>U8,createHookAuditHooks:()=>D8,createAgentHooksExtension:()=>G8,HookEventPayloadSchema:()=>H9,HookEventNameSchema:()=>V9,HookConfigFileName:()=>F8,HOOK_CONFIG_FILE_EVENT_MAP:()=>G6,HOOKS_CONFIG_DIRECTORY_NAME:()=>p5});import{HookEventNameSchema as V9,HookEventPayloadSchema as H9,parseHookEventPayload as n8,resolveHookSessionContext as Tw}from"@cline/shared";import{z as P2}from"zod";import{spawn as Uw}from"node:child_process";import{augmentNodeCommandForDebug as Rw,withResolvedClineBuildEnv as Lw}from"@cline/shared";function zw($){let J=$.trim();if(!J)return{};let Z=J.split(`
|
|
581
|
+
`).map((j)=>j.trim()).filter(Boolean).filter((j)=>j.startsWith("HOOK_CONTROL\t")).map((j)=>j.slice(13)),W=Z.length>0?Z[Z.length-1]:J;try{return{parsedJson:JSON.parse(W)}}catch(j){return{parseError:j instanceof Error?j.message:"Failed to parse subprocess stdout JSON"}}}function _w($,J){let Q=$ instanceof Error?$:Error(String($)),Z=Q,W=J.join(" ");if(Z.code==="EACCES")return Error(`Failed to execute hook command "${W}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return Error(`Failed to execute hook command "${W}": ${Q.message}`)}async function Ow($,J){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((Z,W)=>{let j=(X)=>{Q.off("error",j);let f=X.code;if(f==="EPIPE"||f==="ERR_STREAM_DESTROYED"){Z();return}W(X)};Q.once("error",j),Q.end(J,(X)=>{if(Q.off("error",j),X){let f=X.code;if(f==="EPIPE"||f==="ERR_STREAM_DESTROYED"){Z();return}W(X);return}Z()})})}async function i8($,J){let Q=Rw(J.command,{env:J.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let Z=!!J.detached,W=Uw(Q[0],Q.slice(1),{cwd:J.cwd,env:Lw(J.env),stdio:Z?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Z,windowsHide:!0}),j=new Promise((A)=>{W.once("spawn",()=>{try{J.onSpawn?.({command:Q,pid:W.pid??void 0,detached:Z})}catch{}A()})}),X=new Promise((A,K)=>{W.once("error",(G)=>{K(_w(G,Q))})});if(await Ow(W,JSON.stringify($)),Z){await Promise.race([j,X]),W.unref();return}if(!W.stdout||!W.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let f="",Y="",V=!1,H;W.stdout.on("data",(A)=>{f+=A.toString()}),W.stderr.on("data",(A)=>{Y+=A.toString()});let B=new Promise((A)=>{if((J.timeoutMs??0)>0)H=setTimeout(()=>{V=!0,W.kill("SIGKILL")},J.timeoutMs);W.once("close",(K)=>{if(H)clearTimeout(H);let{parsedJson:G,parseError:R}=zw(f);A({exitCode:K,stdout:f,stderr:Y,parsedJson:G,parseError:R,timedOut:V})})});return await Promise.race([B,X])}var Mw=P2.object({contextModification:P2.string().optional(),cancel:P2.boolean().optional(),review:P2.boolean().optional(),errorMessage:P2.string().optional(),context:P2.string().optional(),overrideInput:P2.unknown().optional()}).passthrough();var qw=["agent","hook"];async function a8($,J={}){let Q=J.command??qw;return await i8($,{command:Q,cwd:J.cwd,env:J.env,detached:J.detached,timeoutMs:J.timeoutMs,onSpawn:J.onSpawn})}function lA($){return $ instanceof Error?$:Error(String($))}function Pw($){if(!$||typeof $!=="object")return;let J=Mw.safeParse($);if(!J.success)return;let Q=J.data;if(!(("cancel"in Q)||("review"in Q)||("context"in Q)||("contextModification"in Q)||("overrideInput"in Q)||("errorMessage"in Q)))return;let W=typeof Q.context==="string"?Q.context:typeof Q.contextModification==="string"?Q.contextModification:typeof Q.errorMessage==="string"&&Q.errorMessage.length>0?Q.errorMessage:void 0;return{cancel:typeof Q.cancel==="boolean"?Q.cancel:void 0,review:typeof Q.review==="boolean"?Q.review:void 0,context:W,overrideInput:Object.hasOwn(Q,"overrideInput")?Q.overrideInput:void 0}}function dA($){if(!$||typeof $!=="object")return{};let J={};for(let[Q,Z]of Object.entries($))if(typeof Z==="string")J[Q]=Z;else J[Q]=JSON.stringify(Z);return J}function a1($,J,Q){let Z=Q.env??process.env,W=Z.CLINE_USER_ID?.trim()||Z.USER?.trim()||"unknown",j=Q.cwd||process.cwd();return{clineVersion:Z.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:J.conversationId,sessionContext:Tw(Q.sessionContext,{hookName:$,conversationId:J.conversationId,agentId:J.agentId,parentAgentId:J.parentAgentId}),workspaceRoots:j?[j]:[],workspaceInfo:Q.workspaceInfo,userId:W,agent_id:J.agentId,parent_agent_id:J.parentAgentId}}function Nw($){return{name:$.name,message:$.message,stack:$.stack}}function ww($){let J=String($??"").toLowerCase();return J.includes("cancel")||J.includes("abort")||J.includes("interrupt")}function Sw($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function Cw($){return $.filter((J)=>J.type==="text"&&typeof J.text==="string").map((J)=>J.text).join("")}function yw($){return{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input,output:$.result.output,error:$.result.isError?String($.result.output):void 0,durationMs:$.durationMs,startedAt:$.startedAt,endedAt:$.endedAt}}function Ew($){if(!$)return;let J={};if($.cancel===!0)J.stop=!0;if($.overrideInput!==void 0)J.input=$.overrideInput;return Object.keys(J).length>0?J:void 0}async function N2($,J){try{let Q=await a8($,{command:J.command,cwd:J.cwd,env:J.env,detached:!0,onSpawn:J.onSpawn});J.onDispatch?.({payload:$,result:Q,detached:!0})}catch(Q){J.onDispatchError?.(lA(Q),$)}}function B9($={}){return{hooks:{beforeRun:async(f)=>{let Y=Sw(f);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...a1("agent_resume",Y,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await N2(H,$)}else{let H={...a1("agent_start",Y,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await N2(H,$)}return},beforeTool:async(f)=>{let Y={agentId:f.snapshot.agentId,conversationId:f.snapshot.conversationId??f.snapshot.runId??f.snapshot.agentId,parentAgentId:f.snapshot.parentAgentId??null},V={...a1("tool_call",Y,$),hookName:"tool_call",iteration:f.snapshot.iteration,tool_call:{id:f.toolCall.toolCallId,name:f.toolCall.toolName,input:f.input},preToolUse:{toolName:f.toolCall.toolName,parameters:dA(f.input)}};try{let H=await a8(V,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:V,result:H,detached:!1}),H?.timedOut)throw Error("tool_call hook command timed out");if(H?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${H.parseError}`);return Ew(Pw(H?.parsedJson))}catch(H){$.onDispatchError?.(lA(H),V);return}},afterTool:async(f)=>{let Y=yw(f),V={agentId:f.snapshot.agentId,conversationId:f.snapshot.conversationId??f.snapshot.runId??f.snapshot.agentId,parentAgentId:f.snapshot.parentAgentId??null},H={...a1("tool_result",V,$),hookName:"tool_result",iteration:f.snapshot.iteration,tool_result:Y,postToolUse:{toolName:Y.name,parameters:dA(Y.input),result:typeof Y.output==="string"?Y.output:JSON.stringify(Y.output),success:!Y.error,executionTimeMs:Y.durationMs}};await N2(H,$);return},afterRun:async({snapshot:f,result:Y})=>{let V={agentId:f.agentId,conversationId:f.conversationId??f.runId??f.agentId,parentAgentId:f.parentAgentId??null};if(Y.status==="completed"){let A={...a1("agent_end",V,$),hookName:"agent_end",iteration:Y.iterations,turn:{outputText:Y.outputText,status:Y.status},taskComplete:{taskMetadata:{}}};await N2(A,$);return}let H=Y.status==="aborted"||ww(Y.error?.message)?"agent_abort":"agent_error",B=H==="agent_error"?{...a1(H,V,$),hookName:H,iteration:Y.iterations,error:Nw(Y.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...a1(H,V,$),hookName:H,reason:Y.error?.message,taskCancel:{taskMetadata:{}}};await N2(B,$)},onEvent:async(f)=>{if(f.type!=="message-added"||f.message.role!=="user")return;let Y={agentId:f.snapshot.agentId,conversationId:f.snapshot.conversationId??f.snapshot.runId??f.snapshot.agentId,parentAgentId:f.snapshot.parentAgentId??null},V={...a1("prompt_submit",Y,$),hookName:"prompt_submit",userPromptSubmit:{prompt:Cw(f.message.content),attachments:[]}};await N2(V,$)}},shutdown:async({agentId:f,conversationId:Y,parentAgentId:V,reason:H})=>{let B={...a1("session_shutdown",{agentId:f,conversationId:Y,parentAgentId:V},$),hookName:"session_shutdown",reason:H};await N2(B,$)}}}var $G={};w($G,{writeHubDiscovery:()=>aQ,withHubStartupLock:()=>sQ,verifyHubConnection:()=>G1,truncateNotificationBody:()=>_J,toHubStatusUrl:()=>S7,toHubHealthUrl:()=>oQ,stopLocalHubServerGracefully:()=>c7,startHubWebSocketServer:()=>C2,startHubServer:()=>tK,spawnDetachedHubServerWithRetry:()=>k8,spawnDetachedHubServer:()=>k7,sendHubCommand:()=>oA,restartLocalHubIfIdleAfterStartupTimeout:()=>Q9,resolveWorkspaceHubOwnerContext:()=>IB,resolveSharedHubOwnerContext:()=>E0,resolveProductionHubOwnerContext:()=>n0,resolveHubUrl:()=>K3,resolveHubOwnerContext:()=>l1,resolveHubEndpointOptions:()=>i0,resolveHubBuildId:()=>nQ,resolveDefaultHubPort:()=>h8,resolveDefaultHubPathname:()=>h7,resolveDefaultHubHost:()=>b7,resolveCompatibleLocalHubUrl:()=>XJ,resolveClineDir:()=>EB,resolveClineDataDir:()=>R2,requestHubShutdown:()=>jJ,rememberRecoverableLocalHubUrl:()=>P$,readHubDiscovery:()=>G0,readBearerToken:()=>_9,probeHubServer:()=>p1,probeHubConnection:()=>sA,prewarmDetachedHubServer:()=>eQ,normalizeHubWebSocketUrl:()=>N$,isHubReconnectableTransportError:()=>m7,isHubCommandTimeoutError:()=>J9,isDiscoveryFilePresent:()=>hB,ensureHubWebSocketServer:()=>O9,ensureHubServer:()=>eK,ensureDetachedHubServer:()=>uB,ensureCompatibleLocalHubUrl:()=>_2,createLocalHubScheduleRuntimeHandlers:()=>T9,createInMemoryHubOwnerContext:()=>bB,createHubServerUrl:()=>j1,createHubAuthToken:()=>iQ,createConfiguredTelemetryService:()=>s1,createConfiguredTelemetryHandle:()=>$4,connectToHub:()=>F9,clearHubDiscovery:()=>y0,NodeHubClient:()=>X1,NativeHubTransportAdapter:()=>PJ,HubUIClient:()=>D3,HubTransportError:()=>q0,HubSessionClient:()=>F3,HubServerTransport:()=>Q4,HubScheduleService:()=>o8,HubScheduleCommandService:()=>s8,HubCommandError:()=>I8,DEFAULT_HUB_PORT:()=>y7,DEFAULT_HUB_PATHNAME:()=>E7,DEFAULT_HUB_HOST:()=>C7,BrowserWebSocketHubAdapter:()=>qJ});import{createSessionId as bw}from"@cline/shared";function a0($,J){return{version:$.version,requestId:$.requestId,ok:!0,payload:J}}function rA($,J,Q){return{version:$.version,requestId:$.requestId??bw("hubreq_"),ok:!1,error:{code:J,message:Q}}}class s8{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return a0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return a0($,{schedules:this.schedules.listSchedules({enabled:typeof $.payload?.enabled==="boolean"?$.payload.enabled:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0,tags:Array.isArray($.payload?.tags)?$.payload?.tags:void 0})});case"schedule.get":return a0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return a0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return a0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return a0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return a0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return a0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return a0($,{executions:this.schedules.listScheduleExecutions({scheduleId:typeof $.payload?.scheduleId==="string"?$.payload.scheduleId:void 0,status:typeof $.payload?.status==="string"?$.payload.status:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0})});case"schedule.stats":return a0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return a0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return a0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return rA($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(J){return rA($,"schedule_command_failed",J instanceof Error?J.message:String(J))}}toCreateInput($){let J=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:J}}toUpdateInput($){let J=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:J}}}function K9($){return $?new Date($).getTime():void 0}function hw($){let J=$.metadata?{...$.metadata}:void 0;if(J)delete J.__hubScheduleCreatedBy,delete J.__hubScheduleCwd,delete J.__hubRuntimeOptions;return J}function A9($){let J=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof J?.__hubScheduleCwd==="string"?J.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:K9($.nextRunAt),lastRunAt:K9($.lastRunAt),createdBy:typeof J?.__hubScheduleCreatedBy==="string"?J.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:J?.__hubRuntimeOptions&&typeof J.__hubRuntimeOptions==="object"&&!Array.isArray(J.__hubRuntimeOptions)?J.__hubRuntimeOptions:void 0,metadata:hw($)}}function kw($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function V3($,J){return{executionId:$.runId,scheduleId:J,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:K9($.startedAt),endedAt:K9($.completedAt),status:kw($.status),errorMessage:$.error}}class o8{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new e6({dbPath:$.dbPath}),this.materializer=new n6({store:this.store}),this.runner=new a6({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,eventPublisher:$.eventPublisher,workspaceRoot:"",logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency})}async start(){if(this.disposed)throw Error("HubScheduleService has been disposed");if(this.started)return;this.started=!0,await this.runner.start()}async stop(){await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,await this.runner.dispose(),this.store.close()}createSchedule($){if(A7($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return A9(this.store.createHubSchedule($))}getSchedule($){let J=this.store.getHubSchedule($);return J?A9(J):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((J)=>A9(J))}updateSchedule($,J){if(J.cronPattern!==void 0)A7(J.cronPattern);let Q=this.store.getHubSchedule($);if(!Q)return;let Z=J.workspaceRoot!==void 0?J.workspaceRoot.trim():Q.workspaceRoot;if((J.enabled??Q.enabled)&&!Z)throw Error("workspaceRoot is required for enabled schedules");let j=this.store.updateHubSchedule($,{...J,scheduleId:$});return j?A9(j):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let J=this.store.enqueueHubScheduleRun($,"manual");if(!J)return;await this.runner.tick();let Q=this.store.getRun(J.runId)??J;return V3(Q,$)}triggerScheduleNowDetached($){let J=this.store.enqueueHubScheduleRun($,"manual");if(!J)return;return this.runner.tick().catch(()=>{return}),V3(J,$)}listScheduleExecutions($){let J=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:J?.specId,limit:$.limit};return this.store.listRuns(Q).map((W)=>{let j=J??this.store.getSpec(W.specId);if(!j||j.source!=="hub-schedule")return;return V3(W,j.externalId)}).filter((W)=>{if(!W)return!1;return!$.status||W.status===$.status})}getScheduleStats($){let J=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(J.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,Z=0,W=0,j;for(let X of J){if(X.status==="success"||X.status==="completed")Q+=1;if(!j&&X.status!=="success"&&X.status!=="completed")j=X;if(X.startedAt&&X.endedAt)W+=X.endedAt-X.startedAt,Z+=1}return{totalRuns:J.length,successRate:Q/J.length,avgDurationSeconds:Z>0?W/Z/1000:0,lastFailure:j}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let J=this.store.getSpec($.specId);if(!J||J.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:J.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:J.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+J.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let J={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(J).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,Z)=>String(Q.nextRunAt).localeCompare(String(Z.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:Z})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:Z}))}}G9();import{resolveClineBuildEnv as WS}from"@cline/shared";function jS($,J){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Q?`Failed to connect to hub at ${J} (${Q} event before socket open).`:`Failed to connect to hub at ${J}.`)}var XS="cline-hub-auth.";function fS($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function YS($,J){let Q=new URL($),Z=new URL(J);return Q.search="",Q.hash="",Z.search="",Z.hash="",Q.toString()===Z.toString()}function aA(){return WS()==="production"?n0():E0()}async function VS($){let J=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),J)return J;let Q=aA(),Z=await G0(Q.discoveryPath);if(Z?.url&&YS($.toString(),Z.url))return Z.authToken;return}async function K3($={}){let J=i0($);if(!fS($)){let Q=aA(),Z=await G0(Q.discoveryPath);if(Z?.url)return Z.url}return j1(J.host,J.port,J.pathname)}async function F9($){return await new Promise((J,Q)=>{(async()=>{let Z=new URL($),W=await VS(Z);Z.hash="";let j=new WebSocket(Z.toString(),W?[`${XS}${W}`]:void 0),X=new Map,f=0;j.addEventListener("open",()=>{J({send(Y){let V=Y.requestId??`hub-client-${++f}`;return new Promise((H,B)=>{X.set(V,{resolve:H,reject:B});let A={kind:"command",envelope:{...Y,requestId:V}};j.send(JSON.stringify(A))})},close(){j.close()}})}),j.addEventListener("message",(Y)=>{let V=JSON.parse(String(Y.data));if(V.kind==="reply"&&V.envelope.requestId){let H=X.get(V.envelope.requestId);if(H)X.delete(V.envelope.requestId),H.resolve(V.envelope)}}),j.addEventListener("close",()=>{for(let Y of X.values())Y.reject(Error("Hub connection closed"));X.clear()}),j.addEventListener("error",(Y)=>{Q(jS(Y,$))})})().catch(Q)})}async function sA($){try{return(await F9($)).close(),!0}catch{return!1}}async function oA($,J){let Q=await K3($),Z=await F9(Q);try{return await Z.send({version:J.version??"v1",clientId:J.clientId??"hub-client",...J})}finally{Z.close()}}function G3($){return $?JSON.parse(JSON.stringify($)):{}}function D9($){let J=$?.session&&typeof $.session==="object"?$.session:void 0;if(!J)return;let Q=J.metadata&&typeof J.metadata==="object"?G3(J.metadata):void 0;return{sessionId:typeof J.sessionId==="string"?J.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function tA($,J){return $.error?.message??`hub command failed: ${J}`}function HS($){let J=G3($);if(typeof J.error==="string"&&J.error.trim())return{...J,error:J.error.trim()};let Q=J.result&&typeof J.result==="object"?J.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...J,error:Q.text.trim()};let Z=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof Z?.message==="string"&&Z.message.trim())return{...J,error:Z.message.trim()};return J}function eA($){let J=$?.sessionId;return typeof J==="string"&&J.trim()?J.trim():void 0}function BS($){let J=$?.checkpoint;if(!J||typeof J!=="object"||Array.isArray(J))throw Error("hub checkpoint restore returned no checkpoint");let Q=J;if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Q}function AS($){let J=G3($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||eA(J)||"",eventType:"schedule.execution.completed",payload:J};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||eA(J)||"",eventType:"schedule.execution.failed",payload:J};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:J};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:J};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:J};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:J};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:J};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:J};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:J};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:J};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:HS($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:J};default:return}}class F3{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new X1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-session-client",displayName:$.displayName??"hub session client",workspaceRoot:$.workspaceRoot,cwd:$.cwd})}async ensureMetadataApplied(){if(this.metadataApplied||!this.options.metadata){if(!this.options.metadata)await this.client.connect();return}await this.client.connect(),await this.client.command("client.update",{metadata:this.options.metadata}),this.metadataApplied=!0}async connect(){await this.ensureMetadataApplied()}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession($){await this.ensureMetadataApplied();let J=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),Q=D9(J.payload);if(!Q?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}}}async sendRuntimeSession($,J,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:J.prompt,mode:J.config.mode,attachments:J.attachments,delivery:J.delivery,timeoutSeconds:J.config.timeoutSeconds},$,Q)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let J;try{J=await this.client.command("session.get",void 0,$)}catch(Q){if(d1(Q))return;throw Q}return D9(J.payload)}async readMessages($){let J=$.trim();if(!J)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:J},J);if(!Q.ok)throw Error(tA(Q,"session.messages"));let Z=Q.payload?.messages;return Array.isArray(Z)?Z:[]}async restore($){let J=$.sessionId.trim();if(!J)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let Z=$.config,W=await this.client.command("session.restore",{sessionId:J,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Z?{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,sessionConfig:{providerId:Z.provider,modelId:Z.model,apiKey:Z.apiKey,cwd:Z.cwd??Z.workspaceRoot,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:Z.mode??"act",rules:Z.rules,maxIterations:Z.maxIterations,enableTools:Z.enableTools,enableSpawnAgent:Z.enableSpawn!==!1,enableAgentTeams:Z.enableTeams!==!1,disableMcpSettingsTools:Z.disableMcpSettingsTools,missionLogIntervalSteps:Z.missionStepInterval,missionLogIntervalMs:Z.missionTimeIntervalMs},metadata:{source:Z.source??"cli",provider:Z.provider,model:Z.model,enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams,prompt:void 0,interactive:Z.interactive!==!1},runtimeOptions:{mode:Z.mode,systemPrompt:Z.systemPrompt,maxIterations:Z.maxIterations,enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams,autoApproveTools:Z.autoApproveTools,configExtensions:Z.configExtensions},modelSelection:{provider:Z.provider,model:Z.model,apiKey:Z.apiKey},toolPolicies:Z.toolPolicies}:{}},J);if(!W.ok)throw Error(tA(W,"session.restore"));let j=D9(W.payload);if(Q&&!j?.sessionId)throw Error("hub checkpoint restore returned no session id");let X=Array.isArray(W.payload?.messages)?W.payload.messages:void 0,f=BS(W.payload);return{sessionId:j?.sessionId,startResult:j?.sessionId?{sessionId:j.sessionId,manifestPath:"",messagesPath:j.messagesPath??""}:void 0,...X?{messages:X}:{},checkpoint:f}}async listSessions($){await this.ensureMetadataApplied();let J=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(J.payload?.sessions)?J.payload?.sessions:[]).map((Z)=>D9({session:Z})).filter((Z)=>Boolean(Z?.sessionId))}async deleteSession($,J=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:J})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,J){let Q=new Set(($.sessionIds??[]).map((W)=>W.trim()).filter(Boolean)),Z=this.client.subscribe((W)=>{let j=AS(W);if(!j)return;if(Q.size>0&&!Q.has(j.sessionId))return;J.onEvent?.(j)});return this.ensureMetadataApplied().catch((W)=>{J.onError?.(W instanceof Error?W:Error(String(W)))}),Z}streamTeamProgress($,J){let Q=this.client.subscribe((Z)=>{if(Z.event!=="team.progress"||!Z.payload)return;J.onProjection?.(Z.payload)});return this.ensureMetadataApplied().catch((Z)=>{J.onError?.(Z instanceof Error?Z:Error(String(Z)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let J=await this.client.command("schedule.list");return Array.isArray(J.payload?.schedules)?J.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,J){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...J})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,J){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:J});return Array.isArray(Q.payload?.executions)?Q.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let J=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(J.payload?.upcoming)?J.payload?.upcoming:[]}}class D3{client;constructor($){this.client=new X1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let J=await this.client.command("session.list",{limit:$});return Array.isArray(J.payload?.sessions)?J.payload.sessions:[]}subscribeUI($){return this.client.subscribe((J)=>{switch(J.event){case"ui.notify":$.onNotify?.(J.payload);break;case"ui.show_window":$.onShowWindow?.(J.payload);break;case"hub.client.registered":$.onClientRegistered?.(J.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(J.payload??{});break;case"session.created":$.onSessionCreated?.(J.payload??{});break;case"session.updated":$.onSessionUpdated?.(J.payload??{});break;case"session.detached":$.onSessionDetached?.(J.payload??{});break}})}}import{resolveClineBuildEnv as sK}from"@cline/shared";function KS($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
|
|
582
|
+
`).trim()||void 0}var $K=120,U3="...";function _J($){let J=$.trim();if(!J)return"";if(Buffer.byteLength(J,"utf8")<=$K)return J;let Q=$K-Buffer.byteLength(U3,"utf8");if(Q<=0)return U3;let Z="";for(let W of J){if(Buffer.byteLength(Z+W,"utf8")>Q)break;Z+=W}return`${Z}${U3}`}async function JK($){let J=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,W=[...await q$(Q)].reverse().find((Y)=>Y.role==="assistant"),j=W?KS(W.content):void 0,X=$?.workspaceRoot?.trim()||"workspace",f=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():X;return{title:`Task completed (${J})`,body:_J(j&&j.length>0?j:f.length>0?f:X),severity:"info"}}import{captureSdkError as z9,createSessionId as rS}from"@cline/shared";import{createSessionId as US}from"@cline/shared";import{createSessionId as DS}from"@cline/shared";function GS($){switch($){case"idle":return"idle";case"pending":return"pending";case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function FS($){let J=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())J.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())J.parentAgentId=$.parentAgentId;if($.agentId?.trim())J.agentId=$.agentId;if($.conversationId?.trim())J.conversationId=$.conversationId;if($.messagesPath?.trim())J.messagesPath=$.messagesPath;if($.prompt?.trim())J.prompt=$.prompt;if($.provider?.trim())J.provider=$.provider;if($.model?.trim())J.model=$.model;if($.source?.trim())J.source=$.source;if(typeof $.pid==="number")J.pid=$.pid;return Object.keys(J).length>0?J:void 0}function U9($,J,Q,Z){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:J?.createdByClientId??"hub",status:GS($.status),participants:J?[...J.participants.values()]:[],metadata:FS($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Q?{usage:{...Q}}:{},...Z?{aggregateUsage:{...Z}}:{}}}function l($,J){return{version:$.version,requestId:$.requestId,ok:!0,...J!==void 0?{payload:J}:{}}}function v($,J,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:J,message:Q}}}function R9($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function h0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function w2($,J,Q){return{version:"v1",event:$,eventId:DS("hevt_"),sessionId:Q,timestamp:Date.now(),payload:J}}async function s0($,J){let Q=await $.sessionHost.getSession(J);if(!Q)return;let Z=await $.sessionHost.getAccumulatedUsage?.(J);return U9(Q,$.sessionState.get(J),Z?.usage,Z?.aggregateUsage)}async function o0($,J){let Q=await $.sessionHost.getSession(J);if(!Q)return;let[Z,W]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(J):[],$.sessionHost.getAccumulatedUsage?.(J)]);return F1({session:Q,messages:Z,usage:W?.usage,aggregateUsage:W?.aggregateUsage})}function L9($,J,Q,Z,W={}){let j=$.sessionState.get(J);if(j){if(W.interactive!==void 0)j.interactive=W.interactive;if(!j.participants.has(Q))j.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:Z});return j}let X={createdByClientId:Q,interactive:W.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:Z}]])};return $.sessionState.set(J,X),X}async function R3($,J){let Q=US("approval_"),Z=J.sessionId;if($.sessionState.get(Z)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((j)=>{$.pendingApprovals.set(Q,{sessionId:Z,resolve:j}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:J.sessionId,agentId:J.agentId,conversationId:J.conversationId,iteration:J.iteration,toolCallId:J.toolCallId,toolName:J.toolName,inputJson:JSON.stringify(J.input??null),policy:J.policy},Z))})}function L3($,J,Q){let Z=$.pendingApprovals.get(J);if(!Z)return;return $.pendingApprovals.delete(J),Z.resolve(Q),{sessionId:Z.sessionId}}function z3($,J,Q){let Z=0;for(let[W,j]of[...$.pendingApprovals.entries()]){if(!J({approvalId:W,sessionId:j.sessionId}))continue;$.pendingApprovals.delete(W),j.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:W,approved:!1,cancelled:!0,reason:Q},j.sessionId)),Z+=1}return Z}async function QK($,J){let Q=typeof J.payload?.approvalId==="string"?J.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return v(J,"approval_not_found",`Unknown approval: ${Q}`);let W=typeof J.payload?.reason==="string"?J.payload.reason:J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)&&typeof J.payload.payload.reason==="string"?J.payload.payload.reason:void 0,j=J.payload?.approved===!0,X=L3($,Q,{approved:j,reason:W});if(!X)return v(J,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:j,reason:W},X.sessionId)),l(J,{approvalId:Q,approved:j})}import{createSessionId as zS}from"@cline/shared";function RS($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var ZK={debug:10,info:20,warn:30,error:40,silent:50};function LS(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function c($,J,Q={}){if(ZK[$]<ZK[LS()])return;let Z=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:J,...Object.fromEntries(Object.entries(Q).map(([W,j])=>[W,RS(j)]).filter(([,W])=>W!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${Z}`);return}console.log(`[hub] ${Z}`)}function _3($,J){let Q=J instanceof Error?J.stack||J.message:String(J);c("error",$,{error:Q})}async function WK($,J,Q,Z,W,j){let X=zS("capreq_"),f=performance.now();return c("info","capability.request.start",{requestId:X,sessionId:J,capabilityName:Q,targetClientId:W}),await new Promise((Y,V)=>{$.pendingCapabilityRequests.set(X,{sessionId:J,targetClientId:W,capabilityName:Q,onProgress:j,resolve:(H)=>{if(c(H.ok?"info":"warn","capability.request.end",{requestId:X,sessionId:J,capabilityName:Q,targetClientId:W,ok:H.ok,error:H.error,durationMs:Math.round(performance.now()-f)}),!H.ok){V(Error(H.error||`Capability ${Q} was rejected by ${W}.`));return}Y(H.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:X,targetClientId:W,capabilityName:Q,payload:Z},J)),c("info","capability.request.published",{requestId:X,sessionId:J,capabilityName:Q,targetClientId:W})})}function jK($,J){let Q=typeof J.payload?.requestId==="string"?J.payload.requestId.trim():"",Z=$.pendingCapabilityRequests.get(Q);if(!Z)return v(J,"capability_not_found",`Unknown capability request: ${Q}`);if((J.clientId?.trim()||"")!==Z.targetClientId)return v(J,"capability_wrong_client",`Capability request ${Q} is owned by ${Z.targetClientId}`);if(J.sessionId?.trim()&&J.sessionId.trim()!==Z.sessionId)return v(J,"capability_wrong_session",`Capability request ${Q} belongs to session ${Z.sessionId}`);let j=J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)?J.payload.payload:{};return Z.onProgress?.(j),l(J,{requestId:Q})}function C$($,J,Q){let Z=0;for(let[W,j]of[...$.pendingCapabilityRequests.entries()]){if(!J({requestId:W,...j}))continue;$.pendingCapabilityRequests.delete(W),c("warn","capability.request.cancelled",{requestId:W,sessionId:j.sessionId,capabilityName:j.capabilityName,targetClientId:j.targetClientId,reason:Q}),j.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:W,capabilityName:j.capabilityName,targetClientId:j.targetClientId,ok:!1,cancelled:!0,error:Q},j.sessionId)),Z+=1}return Z}async function XK($,J){let Q=typeof J.payload?.sessionId==="string"?J.payload.sessionId.trim():J.sessionId?.trim()||"",Z=typeof J.payload?.capabilityName==="string"?J.payload.capabilityName.trim():"",W=typeof J.payload?.targetClientId==="string"?J.payload.targetClientId.trim():"";if(!Q||!Z||!W)return v(J,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let j=J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)?J.payload.payload:{},X=await $.requestCapability(Q,Z,j,W);return l(J,X)}catch(j){return v(J,"capability_request_failed",j instanceof Error?j.message:String(j))}}function fK($,J){let Q=typeof J.payload?.requestId==="string"?J.payload.requestId.trim():"",Z=$.pendingCapabilityRequests.get(Q);if(!Z)return v(J,"capability_not_found",`Unknown capability request: ${Q}`);let W=J.clientId?.trim()||"";if(W!==Z.targetClientId)return v(J,"capability_wrong_client",`Capability request ${Q} is owned by ${Z.targetClientId}`);if(J.sessionId?.trim()&&J.sessionId.trim()!==Z.sessionId)return v(J,"capability_wrong_session",`Capability request ${Q} belongs to session ${Z.sessionId}`);$.pendingCapabilityRequests.delete(Q);let j=J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)?J.payload.payload:void 0,X=typeof J.payload?.error==="string"?J.payload.error:void 0,f=J.payload?.ok===!0;return c(f?"info":"warn","capability.respond",{requestId:Q,sessionId:Z.sessionId,capabilityName:Z.capabilityName,targetClientId:Z.targetClientId,respondedByClientId:W,ok:f,error:X}),Z.resolve({ok:f,payload:j,error:X}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:Z.capabilityName,targetClientId:Z.targetClientId,respondedByClientId:W,ok:f,payload:j,error:X},Z.sessionId)),l(J,{requestId:Q,ok:f})}import{createSessionId as _S}from"@cline/shared";function YK($,J){let Q=J.payload,Z=Q?.clientId?.trim()||J.clientId?.trim()||_S("client_");return $.clients.set(Z,{clientId:Z,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,actorKind:Q?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Q?.transport??"native",capabilities:Q?.capabilities??[],metadata:Q?.metadata,workspaceContext:Q?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:Z,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),l(J,{clientId:Z})}function VK($,J){let Q=J.clientId?.trim(),Z=Q?$.clients.get(Q):void 0;if(!Q||!Z)return v(J,"client_not_found","Client is not registered with this hub.");let W=R9(J.payload?.metadata);if(Z.lastSeenAt=Date.now(),W)Z.metadata=JSON.parse(JSON.stringify(W));return l(J)}function HK($,J,Q){let Z=J.clientId?.trim();if(Z)$.clients.delete(Z),Q(Z),$.publish($.buildEvent("hub.client.disconnected",{clientId:Z}));return l(J)}function BK($,J){return l(J,{clients:[...$.clients.values()]})}var OS=30000;function TS($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function MS($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function qS($,J,Q){let Z=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${J}`;return v($,G2,Z)}function PS($){return $?$:void 0}function NS($){let J=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(J&&Number.isFinite(J)&&J>0)return Math.floor(J);let Q=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(Q&&Number.isFinite(Q)&&Q>0)return Math.floor(Q*1000);return}async function wS($,J,Q,Z){let W=performance.now(),j=!1,X={command:J.command,requestId:J.requestId,clientId:J.clientId,sessionId:Q.sessionId,timeoutMs:Z},f=setInterval(()=>{if(j)return;let H=Math.round(performance.now()-W);c("warn","run.heartbeat",{...X,elapsedMs:H}),$.publish($.buildEvent("run.heartbeat",{requestId:J.requestId,elapsedMs:H,...Z?{timeoutMs:Z}:{}},Q.sessionId))},OS),Y=$.sessionHost.runTurn(Q);Y.then((H)=>{if(!j)return;c("warn","run.late_end",{...X,elapsedMs:Math.round(performance.now()-W),finishReason:H?.finishReason})},(H)=>{if(!j)return;c("error","run.late_error",{...X,elapsedMs:Math.round(performance.now()-W),error:H})});let V;try{if(!Z)return await Y;return await Promise.race([Y,new Promise((H,B)=>{V=setTimeout(()=>{let A=`Hub run ${J.command} timed out after ${Z}ms.`;j=!0,clearInterval(f),B(Error(A)),c("error","run.timeout",{...X,elapsedMs:Math.round(performance.now()-W)}),z3($,(K)=>K.sessionId===Q.sessionId,A),C$($,(K)=>K.sessionId===Q.sessionId,A),$.sessionHost.abort(Q.sessionId,A).catch((K)=>{c("error","run.timeout_abort_failed",{...X,error:K})})},Z)})])}finally{if(j=!0,clearInterval(f),V)clearTimeout(V)}}async function AK($,J){let Q=h0(J),Z=J.payload&&typeof J.payload==="object"?J.payload:{},W=typeof Z.prompt==="string"?Z.prompt:typeof Z.input==="string"?Z.input:"";if(!W.trim())return v(J,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let j=Z.attachments&&typeof Z.attachments==="object"&&!Array.isArray(Z.attachments)?Z.attachments:void 0,X=Array.isArray(j?.userFiles)?j.userFiles.filter((H)=>typeof H==="string"):void 0,f=NS(Z);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let Y;try{Y=await wS($,J,{sessionId:Q,prompt:W,mode:PS(Z.mode),delivery:Z.delivery==="queue"||Z.delivery==="steer"?Z.delivery:void 0,userImages:Array.isArray(j?.userImages)?j.userImages:void 0,userFiles:X,timeoutMs:f},f)}catch(H){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(d1(H))return qS(J,Q,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Q)),H}if(Y){let H=await o0($,Q),B=MS(Y);if($.publish($.buildEvent(TS(Y.finishReason),{reason:Y.finishReason,...B?{error:B}:{},result:Y,...H?{snapshot:H}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let V=await o0($,Q);return l(J,Y||V?{...Y?{result:Y}:{},...V?{snapshot:V}:{}}:void 0)}async function KK($,J){let Q=h0(J),Z=typeof J.payload?.reason==="string"?J.payload.reason:"Run was aborted before pending approval or capability request was resolved.";z3($,(W)=>W.sessionId===Q,Z);try{await $.sessionHost.abort(Q,J.payload?.reason)}catch(W){c("warn","run.abort_failed",{command:J.command,requestId:J.requestId,clientId:J.clientId,sessionId:Q,error:W})}finally{C$($,(W)=>W.sessionId===Q,Z)}return l(J,{applied:!0})}async function GK($,J){let Q=n8(J.payload?.payload);if(!Q)return v(J,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),l(J,{applied:!0})}async function FK($,J){switch(J.type){case"chunk":return;case"agent_event":await SS($,J);return;case"hook":if(J.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:J.payload.toolName},J.payload.sessionId));else if(J.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:J.payload.toolName},J.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:J.payload.sessionId,summary:J.payload.summary,lastEvent:J.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,J.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:J.payload.sessionId,prompts:J.payload.prompts},J.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:J.payload.id,prompt:J.payload.prompt,delivery:J.payload.delivery,attachmentCount:J.payload.attachmentCount};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:J.payload.sessionId,prompt:Q},J.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:J.payload.sessionId,snapshot:J.payload.snapshot},J.payload.sessionId));return;case"status":{let[Q,Z]=await Promise.all([s0($,J.payload.sessionId),o0($,J.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...Z?{snapshot:Z}:{}},J.payload.sessionId));return}case"ended":await CS($,J);return;default:return}}async function SS($,J){let{sessionId:Q,event:Z}=J.payload;if(Z.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:Z.iteration},Q));return}if(Z.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:Z.iteration,hadToolCalls:Z.hadToolCalls,toolCallCount:Z.toolCallCount},Q));return}if(Z.type==="content_start"){if(Z.contentType==="text"&&typeof Z.text==="string"&&Z.text.length>0){$.publish($.buildEvent("assistant.delta",{text:Z.text},Q));return}if(Z.contentType==="reasoning"){if(Z.redacted&&!Z.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof Z.reasoning==="string"&&Z.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:Z.reasoning,redacted:Z.redacted===!0},Q));return}if(Z.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:Z.toolCallId,toolName:Z.toolName,input:Z.input},Q));return}}if(Z.type==="content_end"){switch(Z.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:Z.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:Z.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:Z.toolCallId,toolName:Z.toolName,output:Z.output,error:Z.error},Q));break}return}if(Z.type==="usage"){let W;try{W=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{W=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:Z.inputTokens,outputTokens:Z.outputTokens,cacheReadTokens:Z.cacheReadTokens??0,cacheWriteTokens:Z.cacheWriteTokens??0,totalCost:Z.cost??0},totals:{inputTokens:Z.totalInputTokens,outputTokens:Z.totalOutputTokens,cacheReadTokens:Z.totalCacheReadTokens??0,cacheWriteTokens:Z.totalCacheWriteTokens??0,totalCost:Z.totalCost??0},usage:W?.usage,aggregateUsage:W?.aggregateUsage,agent:{kind:J.payload.teamRole==="teammate"?"teammate":Z.parentAgentId?"subagent":"lead",agentId:Z.agentId,conversationId:Z.conversationId,parentAgentId:Z.parentAgentId,teamAgentId:J.payload.teamAgentId,teamRole:J.payload.teamRole}},Q));return}if(Z.type==="done")$.publish($.buildEvent("agent.done",{reason:Z.reason,text:Z.text,iterations:Z.iterations,usage:Z.usage},Q))}async function CS($,J){let Q=$.suppressNextTerminalEventBySession.get(J.payload.sessionId),Z=Q===J.payload.reason||Q==="run.start.reply";if(Z)$.suppressNextTerminalEventBySession.delete(J.payload.sessionId);let[W,j]=await Promise.all([s0($,J.payload.sessionId),o0($,J.payload.sessionId)]);if(J.payload.reason==="completed"){let X=await JK(W);$.publish($.buildEvent("ui.notify",X,J.payload.sessionId))}if(Z)return;$.publish($.buildEvent(J.payload.reason==="aborted"?"run.aborted":J.payload.reason==="error"||J.payload.reason==="failed"?"run.failed":"run.completed",{reason:J.payload.reason,...j?{snapshot:j}:{}},J.payload.sessionId))}import{createSessionId as OK,parseRuntimeConfigExtensions as TK}from"@cline/shared";var LK={};w(LK,{SessionVersioningService:()=>y$,SessionVersioningError:()=>k0});var RK={};w(RK,{trimMessagesToCheckpoint:()=>UK,trimMessagesBeforeCheckpoint:()=>T3,readSessionCheckpointHistory:()=>OJ,createRestoredCheckpointMetadata:()=>O3,createCheckpointRestorePlan:()=>M3,applyCheckpointToWorktree:()=>q3});import{execFile as yS}from"node:child_process";import{promisify as ES}from"node:util";var J4=ES(yS);function OJ($){let J=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(J?.history)?J.history:[]).filter((Z)=>!!Z&&typeof Z==="object"&&!Array.isArray(Z)).flatMap((Z)=>{let W=String(Z.ref??"").trim(),j=Number(Z.createdAt??0),X=Number(Z.runCount??0);if(W.length===0||!Number.isFinite(j)||!Number.isInteger(X)||X<1)return[];let f=Z.kind==="stash"||Z.kind==="commit"?Z.kind:void 0;return[{ref:W,createdAt:j,runCount:X,...f?{kind:f}:{}}]})}function O3($,J){let Q=OJ($).filter((W)=>W.runCount<=J),Z=Q.at(-1);return Z?{latest:Z,history:Q}:void 0}function bS($,J){return $.reduce((Q,Z)=>{if(Z.runCount>J)return Q;if(!Q||Z.runCount>Q.runCount)return Z;return Q},void 0)}function DK($,J){let Q=0;for(let Z=0;Z<$.length;Z+=1){let W=$[Z];if(W?.role!=="user")continue;if(("metadata"in W&&W.metadata&&typeof W.metadata==="object"?W.metadata:void 0)?.kind==="recovery_notice")continue;if(Q+=1,Q===J)return Z}throw Error(`Could not find user message for checkpoint run ${J}`)}function UK($,J){let Q=DK($,J);return $.slice(0,Q+1)}function T3($,J){let Q=DK($,J);return $.slice(0,Q)}function M3($){let J=$.checkpointRunCount;if(!Number.isInteger(J)||J<1)throw Error("checkpointRunCount must be a positive integer");let Q=bS(OJ($.session),J);if(!Q)throw Error(`No checkpoint found at or before run ${J} in session ${$.session.sessionId}`);let Z=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!Z)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:Z,...$.restoreMessages!==!1?{messages:UK($.messages??[],J)}:{}}}async function q3($,J){if((await J4("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await J4("git",["-C",$,"cat-file","-e",`${J.ref}^{commit}`],{windowsHide:!0}),await J4("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await J4("git",["-C",$,"clean","-fd"],{windowsHide:!0}),J.kind==="commit"){await J4("git",["-C",$,"reset","--hard",J.ref],{windowsHide:!0});return}await J4("git",["-C",$,"stash","apply",J.ref],{windowsHide:!0})}class k0 extends Error{code;constructor($,J){super(J);this.code=$;this.name="SessionVersioningError"}}function hS($){let J=$.sessionId.trim();if(!J)throw new k0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new k0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new k0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new k0("invalid_restore","checkpointRunCount must be a positive integer");return J}class y${async restoreCheckpoint($){let J=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,Z=hS({sessionId:$.sessionId,restoreMessages:J,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),W=await $.getSession(Z);if(!W)throw new k0("session_not_found",`Session ${Z} not found`);let j=J?await $.readMessages(Z):void 0;if(J&&j?.length===0)throw new k0("session_messages_not_found",`No messages found for session ${Z}`);let X=M3({session:W,messages:j,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:J});if(Q)await($.applyWorkspaceCheckpoint??q3)(X.cwd,X.checkpoint);let f=F1({session:W,messages:j});if(!J)return{checkpoint:X.checkpoint,sourceSnapshot:f};let Y=O3(W,$.checkpointRunCount),V=$.restore?.omitCheckpointMessageFromSession?T3(j??[],$.checkpointRunCount):X.messages??[],H={sourceSession:W,sourceMessages:j,sourceSnapshot:f,plan:X,restoredCheckpointMetadata:Y,initialMessages:V,restoreMessages:J,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new k0("invalid_restore","start is required when restore.messages is true");let B=$.buildStartInput?await $.buildStartInput(H,$.start):$.start,A=await $.startSession(B),K=$.getStartedSessionId?.(A);if(K)await($.retainCheckpointRefs??LV)(X.cwd,K,Y?.history??[]);let G=K&&$.readRestoredSession?await $.readRestoredSession(K):void 0;return{sessionId:K,startResult:A,messages:X.messages,checkpoint:X.checkpoint,sourceSnapshot:f,...G?{restoredSnapshot:F1({session:G,messages:V})}:{}}}}import{HUB_CHECKPOINT_CAPABILITY as tp,HUB_COMPACTION_CAPABILITY as ep,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as $r,HUB_HOOK_CAPABILITY_PREFIX as Jr,HUB_MISTAKE_LIMIT_CAPABILITY as Qr,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Zr,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Wr,isHubToolExecutorName as kS}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as Vr,HUB_COMPACTION_CAPABILITY as Hr,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Br,HUB_HOOK_CAPABILITY_PREFIX as Ar,HUB_MISTAKE_LIMIT_CAPABILITY as Kr,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Gr,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Fr}from"@cline/shared";var IS=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function S2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function xS($,J){let Q=typeof $.name==="string"?$.name.trim():"",Z=typeof $.description==="string"?$.description:"",W=typeof $.capabilityName==="string"?$.capabilityName.trim():"",j=S2($.inputSchema);if(!Q||!Z||!j||!W||J.has(W))return;return J.add(W),{kind:"tool",capabilityName:W,name:Q,description:Z,inputSchema:j,...S2($.lifecycle)?{lifecycle:S2($.lifecycle)}:{}}}function N3($){if(!Array.isArray($))return[];let J=[],Q=new Set;for(let Z of $){if(!Z||typeof Z!=="object"||Array.isArray(Z))continue;let W=Z,j=W.kind,X=typeof W.capabilityName==="string"?W.capabilityName.trim():"";if(!X||Q.has(X))continue;if(j==="tool"){let f=xS(W,Q);if(f)J.push(f);continue}if(j==="toolExecutor"){let f=W.executor;if(!kS(f))continue;Q.add(X),J.push({kind:"toolExecutor",capabilityName:X,executor:f});continue}if(j==="hook"){let f=typeof W.name==="string"?W.name.trim():"";if(!f)continue;Q.add(X),J.push({kind:"hook",capabilityName:X,name:f});continue}if(j==="compaction"){Q.add(X),J.push({kind:"compaction",capabilityName:X,...S2(W.config)?{config:S2(W.config)}:{}});continue}if(j==="checkpoint"){Q.add(X),J.push({kind:"checkpoint",capabilityName:X,...S2(W.config)?{config:S2(W.config)}:{}});continue}if(j==="mistakeLimit"){Q.add(X),J.push({kind:"mistakeLimit",capabilityName:X});continue}if(j==="userInstructionService")Q.add(X),J.push({kind:"userInstructionService",capabilityName:X})}return J}function _K($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function gS($){return Object.hasOwn($,"update")?$.update:$}function TJ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function mS($){let J=($??[]).map(TJ).filter(Boolean);return J.length>0?new Set(J):void 0}function vS($,J,Q){if(!Q)return!0;let Z=TJ($),W=TJ(J),j=Z.includes(":")?Z.split(":").at(-1)??Z:Z,X=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(Z)||Q.has(W)||Q.has(j)||Q.has(X)}function P3($,J){let Q=mS(J);return $.records.skill.map((Z)=>({id:Z.id,name:Z.item.name,description:"description"in Z.item&&typeof Z.item.description==="string"?Z.item.description:void 0,disabled:Z.item.disabled===!0,skill:Z.item})).filter((Z)=>vS(Z.id,Z.name,Q))}function zK($,J){let Q=async(Z,W)=>{let j=TJ(Z),f=P3($,J).filter((A)=>A.id===j||TJ(A.name)===j||A.id.endsWith(`:${j}`)).filter((A)=>!A.disabled);if(f.length!==1)return f.length>1?`Skill "${Z}" is ambiguous. Use one of: ${f.map((A)=>A.id).join(", ")}`:`Skill "${Z}" not found.`;let Y=f[0].skill,V=W?.trim(),H=V?`
|
|
571
583
|
<command-args>${V}</command-args>`:"",B=Y.description?.trim()?`Description: ${Y.description.trim()}
|
|
572
584
|
|
|
573
585
|
`:"";return`<command-name>${Y.name}</command-name>${H}
|
|
574
586
|
<command-instructions>
|
|
575
587
|
${B}${Y.instructions}
|
|
576
|
-
</command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>
|
|
588
|
+
</command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>P3($,J).map(({skill:Z,...W})=>W),enumerable:!0}),Q}function cS($,J,Q,Z){let W={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},j=async()=>{let X=await Z($,Q.capabilityName,{},J);if(X?.snapshot)W=X.snapshot};return{start:j,stop:()=>{},refreshType:async()=>{await j()},listRecords:(X)=>[...W.records[X]],listRuntimeCommands:()=>[...W.runtimeCommands],resolveRuntimeSlashCommand:(X)=>{if(!X.startsWith("/")||X.length<2)return X;let Y=X.match(/^\/(\S+)/)?.[1];if(!Y)return X;let V=W.runtimeCommands.find((H)=>H.name===Y);return V?`${V.instructions}${X.slice(Y.length+1)}`:X},hasConfiguredSkills:(X)=>P3(W,X).some((f)=>!f.disabled),createSkillsExecutor:(X)=>zK(W,X),createExtension:(X)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[X.includeRules?"rules":void 0,X.registerSkillsTool?"tools":void 0,X.includeSkills||X.includeWorkflows?"commands":void 0].filter((f)=>Boolean(f))},setup(f){if(X.includeRules)f.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>N8(W.records.rule.map((Y)=>Y.item).filter((Y)=>Y.disabled!==!0))});if(X.registerSkillsTool)f.registerTool(v$(zK(W,X.allowedSkillNames)));for(let Y of W.runtimeCommands.filter((V)=>V.kind==="skill"&&X.includeSkills||V.kind==="workflow"&&X.includeWorkflows))f.registerCommand({name:Y.name,description:Y.description,handler:(V)=>{let H=V.trim();return H?`${Y.instructions}
|
|
577
589
|
|
|
578
|
-
${H}`:Y.instructions}})}})}}function wS($,J,Q,Z){let W=Q.map((j)=>[j.executor,async(...f)=>{let X=f.at(-1),Y=f.slice(0,-1);return(await Z($,j.capabilityName,{executor:j.executor,args:Y,context:BK(X)},J))?.result}]);return W.length>0?Object.fromEntries(W):void 0}function SS($,J,Q,Z){if(Q.length===0)return;return Q.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema,lifecycle:W.lifecycle,async execute(j,f){return(await Z($,W.capabilityName,{toolName:W.name,input:j,context:BK(f)},J,f.emitUpdate?(Y)=>{f.emitUpdate?.(MS(Y))}:void 0))?.result}}))}function CS($,J,Q,Z){let W=new Map(Q.map((f)=>[f.name,f])),j={};for(let f of OS){let X=W.get(f);if(!X)continue;j[f]=async(Y)=>{return(await Z($,X.capabilityName,{context:Y},J))?.control}}return Object.keys(j).length>0?j:void 0}function q3($){let J=$.contributions.filter((Y)=>Y.kind==="toolExecutor"),Q=$.contributions.filter((Y)=>Y.kind==="tool"),Z=$.contributions.filter((Y)=>Y.kind==="hook"),W=$.contributions.find((Y)=>Y.kind==="compaction"),j=$.contributions.find((Y)=>Y.kind==="checkpoint"),f=$.contributions.find((Y)=>Y.kind==="mistakeLimit"),X=$.contributions.find((Y)=>Y.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:wS($.sessionId,$.targetClientId,J,$.requestCapability),localRuntime:{...Z.length>0?{hooks:CS($.sessionId,$.targetClientId,Z,$.requestCapability)}:{},...Q.length>0?{extraTools:SS($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...W?{compaction:{...$.sessionConfig?.compaction??{},...W.config,compact:async(Y)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:Y},$.targetClientId))?.result}}}:{},...j?{checkpoint:{...$.sessionConfig?.checkpoint??{},...j.config,createCheckpoint:async(Y)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:Y},$.targetClientId))?.result}}}:{},...f?{onConsecutiveMistakeLimitReached:async(Y)=>{return(await $.requestCapability($.sessionId,f.capabilityName,{context:Y},$.targetClientId))?.result}}:{},...X?{userInstructionService:NS($.sessionId,$.targetClientId,X,$.requestCapability)}:{}}}}var GK="hubCapabilityOwnerClientId";function FK($,J){$[GK]=J}function yS($){let J=$?.[GK];return typeof J==="string"&&J.trim()?J.trim():void 0}async function DK($,J,Q){let Z=performance.now(),W={command:J.command,requestId:J.requestId,clientId:J.clientId,sessionId:J.sessionId};c("info","session.create.begin",W);let j=J.payload&&typeof J.payload==="object"?J.payload:{},f=j.metadata&&typeof j.metadata==="object"?JSON.parse(JSON.stringify(j.metadata)):{},X=j.sessionConfig&&typeof j.sessionConfig==="object"?JSON.parse(JSON.stringify(j.sessionConfig)):void 0,Y=j.runtimeOptions&&typeof j.runtimeOptions==="object"?j.runtimeOptions:{};if(typeof X?.mode==="string")f.mode=X.mode;else if(typeof Y.mode==="string")f.mode=Y.mode;if(typeof X?.systemPrompt==="string")f.systemPrompt=X.systemPrompt;else if(typeof Y.systemPrompt==="string")f.systemPrompt=Y.systemPrompt;if(X?.checkpoint?.enabled===!0)f.checkpointEnabled=!0;else if(Y.checkpointEnabled===!0)f.checkpointEnabled=!0;let V=j.modelSelection&&typeof j.modelSelection==="object"?j.modelSelection:{},H=typeof j.workspaceRoot==="string"&&j.workspaceRoot.trim()?j.workspaceRoot.trim():typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():"";if(!H)return c("warn","session.create.invalid",{...W,reason:"missing_workspace_root"}),v(J,"invalid_session_create","session.create requires workspaceRoot or cwd");let B=J.clientId?.trim()||"hub-client",A=M3(Y.clientContributions);if(c("info","session.create.contributions_parsed",{...W,clientId:B,workspaceRoot:H,cwd:typeof j.cwd==="string"?j.cwd:void 0,contributionCount:A.length}),A.length>0)FK(f,B);let G=(typeof X?.sessionId==="string"?X.sessionId.trim():"")||AK(),R=KK(Y.configExtensions);c("info","session.create.runtime_build.begin",{...W,sessionId:G,configExtensionCount:R?.length??0});let D=q3({sessionId:G,targetClientId:B,contributions:A,sessionConfig:X,requestCapability:$.requestCapability});c("info","session.create.start_session.begin",{...W,sessionId:G,provider:X?.providerId??(typeof V.provider==="string"?V.provider:typeof f.provider==="string"?f.provider:"hub"),model:X?.modelId??(typeof V.model==="string"?V.model:typeof f.model==="string"?f.model:"hub")});let U=await $.sessionHost.startSession({source:typeof f.source==="string"?f.source:void 0,interactive:f.interactive!==!1,sessionMetadata:Object.keys(f).length>0?f:void 0,initialMessages:Array.isArray(j.initialMessages)?j.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:R,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...X??{},sessionId:G,providerId:X?.providerId??(typeof V.provider==="string"?V.provider:typeof f.provider==="string"?f.provider:"hub"),modelId:X?.modelId??(typeof V.model==="string"?V.model:typeof f.model==="string"?f.model:"hub"),apiKey:X?.apiKey??(typeof V.apiKey==="string"?V.apiKey:void 0),cwd:X?.cwd??(typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():H),workspaceRoot:X?.workspaceRoot??H,systemPrompt:X?.systemPrompt??(typeof Y.systemPrompt==="string"?Y.systemPrompt:""),mode:X?.mode??(Y.mode==="plan"||Y.mode==="yolo"?Y.mode:"act"),maxIterations:X?.maxIterations??(typeof Y.maxIterations==="number"?Y.maxIterations:void 0),enableTools:X?.enableTools??Y.enableTools!==!1,enableSpawnAgent:X?.enableSpawnAgent??Y.enableSpawn!==!1,enableAgentTeams:X?.enableAgentTeams??Y.enableTeams!==!1,checkpoint:X?.checkpoint??(Y.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:X?.teamName??(typeof f.teamName==="string"?f.teamName:void 0)},toolPolicies:j.toolPolicies&&typeof j.toolPolicies==="object"&&!Array.isArray(j.toolPolicies)?JSON.parse(JSON.stringify(j.toolPolicies)):Y.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});c("info","session.create.start_session.end",{...W,sessionId:U.sessionId,elapsedMs:Math.round(performance.now()-Z),hasImmediateResult:!!U.result}),KQ($,U.sessionId,B,"creator",{interactive:f.interactive!==!1}),c("info","session.create.read_records.begin",{...W,sessionId:U.sessionId});let[F,O]=await Promise.all([s0($,U.sessionId),o0($,U.sessionId)]);if(c("info","session.create.read_records.end",{...W,sessionId:U.sessionId,hasSession:!!F,hasSnapshot:!!O,elapsedMs:Math.round(performance.now()-Z)}),F)$.publish($.buildEvent("session.created",{session:F,...O?{snapshot:O}:{}},U.sessionId));return c("info","session.create.reply",{...W,sessionId:U.sessionId,elapsedMs:Math.round(performance.now()-Z)}),l(J,{session:F,...O?{snapshot:O}:{}})}async function UK($,J,Q){let Z=J.payload&&typeof J.payload==="object"?J.payload:{},W=typeof Z.sessionId==="string"?Z.sessionId.trim():J.sessionId?.trim()||"",j=Z.checkpointRunCount;if(!W)return v(J,"invalid_restore","session.restore requires a session id");let f=Z.restore&&typeof Z.restore==="object"?Z.restore:{},X=f.messages!==!1;if(typeof j!=="number")return v(J,"invalid_restore","checkpointRunCount must be a positive integer");try{let Y=Z.sessionConfig&&typeof Z.sessionConfig==="object"?JSON.parse(JSON.stringify(Z.sessionConfig)):void 0;if(X&&!Y)return v(J,"invalid_restore","sessionConfig is required when restore.messages is true");let V=Z.runtimeOptions&&typeof Z.runtimeOptions==="object"?Z.runtimeOptions:{},H=Z.metadata&&typeof Z.metadata==="object"?JSON.parse(JSON.stringify(Z.metadata)):{};if(typeof Y?.mode==="string")H.mode=Y.mode;else if(typeof V.mode==="string")H.mode=V.mode;if(typeof Y?.systemPrompt==="string")H.systemPrompt=Y.systemPrompt;else if(typeof V.systemPrompt==="string")H.systemPrompt=V.systemPrompt;if(Y?.checkpoint?.enabled===!0)H.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)H.checkpointEnabled=!0;let B=Z.modelSelection&&typeof Z.modelSelection==="object"?Z.modelSelection:{},A=J.clientId?.trim()||"hub-client",K=M3(V.clientContributions);if(K.length>0)FK(H,A);let R=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||AK(),D=KK(V.configExtensions),U=q3({sessionId:R,targetClientId:A,contributions:K,sessionConfig:Y,requestCapability:$.requestCapability}),O=await new y$().restoreCheckpoint({sessionId:W,checkpointRunCount:j,restore:{messages:f.messages,workspace:f.workspace,omitCheckpointMessageFromSession:f.omitCheckpointMessageFromSession===!0},start:Y,cwd:typeof Y?.cwd==="string"&&Y.cwd.trim()||typeof Y?.workspaceRoot==="string"&&Y.workspaceRoot.trim()||void 0,getSession:(P)=>$.sessionHost.getSession(P),readMessages:(P)=>$.sessionHost.readSessionMessages(P),buildStartInput:(P)=>{if(P.restoredCheckpointMetadata)H.checkpoint=P.restoredCheckpointMetadata;let S=typeof Z.workspaceRoot==="string"&&Z.workspaceRoot.trim()?Z.workspaceRoot.trim():typeof Z.cwd==="string"&&Z.cwd.trim()?Z.cwd.trim():P.sourceSession.workspaceRoot||P.sourceSession.cwd;return{source:typeof H.source==="string"?H.source:void 0,interactive:H.interactive!==!1,sessionMetadata:{...H,restoredFromSessionId:W,restoredCheckpointRunCount:j},initialMessages:P.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:D,...U.localRuntime},capabilities:{toolExecutors:U.toolExecutors,requestToolApproval:Q},config:{...Y??{},sessionId:R,providerId:Y?.providerId??(typeof B.provider==="string"?B.provider:P.sourceSession.provider),modelId:Y?.modelId??(typeof B.model==="string"?B.model:P.sourceSession.model),apiKey:Y?.apiKey??(typeof B.apiKey==="string"?B.apiKey:""),cwd:Y?.cwd??P.plan.cwd,workspaceRoot:Y?.workspaceRoot??S,systemPrompt:Y?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:Y?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:Y?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:Y?.enableTools??V.enableTools!==!1,enableSpawnAgent:Y?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:Y?.enableAgentTeams??V.enableTeams!==!1,checkpoint:Y?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:Y?.teamName??(typeof H.teamName==="string"?H.teamName:void 0)},toolPolicies:Z.toolPolicies&&typeof Z.toolPolicies==="object"&&!Array.isArray(Z.toolPolicies)?JSON.parse(JSON.stringify(Z.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(P)=>$.sessionHost.startSession(P),getStartedSessionId:(P)=>P.sessionId,readRestoredSession:(P)=>$.sessionHost.getSession(P)});if(!X)return l(J,{checkpoint:O.checkpoint});let T=O.startResult;if(!T)return v(J,"restore_failed","Checkpoint restore did not start a session");KQ($,T.sessionId,A,"creator",{interactive:H.interactive!==!1});let[L,z]=await Promise.all([s0($,T.sessionId),o0($,T.sessionId)]);if(L)$.publish($.buildEvent("session.created",{session:L,...z?{snapshot:z}:{}},T.sessionId));return l(J,{session:L,...z?{snapshot:z}:{},messages:O.messages??[],checkpoint:O.checkpoint})}catch(Y){if(Y instanceof k0)return v(J,Y.code,Y.code==="session_not_found"?`Unknown session: ${W}`:Y.message);return v(J,"restore_failed",Y instanceof Error?Y.message:String(Y))}}async function RK($,J){let Q=h0(J);if(!Q)return v(J,"invalid_session_attach","session.attach requires a session id");KQ($,Q,J.clientId?.trim()||"hub-client","participant");let Z=await s0($,Q);if(Z)$.publish($.buildEvent("session.attached",{session:Z},Q));return Z?l(J,{session:Z}):v(J,"session_not_found",`Unknown session: ${Q}`)}async function zK($,J){let Q=h0(J);if(!Q)return v(J,"invalid_session_detach","session.detach requires a session id");let Z=J.clientId?.trim()||"hub-client",[W]=await Promise.all([s0($,Q)]),j=yS(W?.metadata)??Z,f=$.sessionState.get(Q);if(f){if(f.participants.delete(Z),f.createdByClientId===Z)f.createdByClientId=j;if(f.participants.size===0)$.sessionState.delete(Q)}C$($,(V)=>V.sessionId===Q&&V.targetClientId===Z,`Capability owner client ${Z} detached before request was resolved.`);let[X,Y]=await Promise.all([s0($,Q),o0($,Q)]);return $.publish($.buildEvent("session.detached",X?{session:X,...Y?{snapshot:Y}:{},clientId:Z}:{clientId:Z},Q)),l(J)}async function LK($,J){let Q=h0(J),Z=J.payload?.includeSnapshot===!0,[W,j]=await Promise.all([s0($,Q),Z?o0($,Q):Promise.resolve(void 0)]);return W?l(J,{session:W,...j?{snapshot:j}:{}}):v(J,"session_not_found",`Unknown session: ${Q}`)}async function _K($,J){let Q=h0(J);if(!Q)return v(J,"invalid_session_id","session.messages requires a session id");if(!await s0($,Q))return v(J,"session_not_found",`Unknown session: ${Q}`);let W=await $.sessionHost.readSessionMessages(Q);return l(J,{sessionId:Q,messages:W})}async function OK($,J){let Q=typeof J.payload?.limit==="number"?J.payload.limit:200,W=(await $.sessionHost.listSessions(Q)).map((j)=>BQ(j,$.sessionState.get(j.sessionId)));return l(J,{sessions:W})}async function TK($,J){let Q=h0(J),Z=AQ(J.payload?.metadata),W=await $.sessionHost.updateSession(Q,{metadata:Z}),[j,f]=await Promise.all([s0($,Q),o0($,Q)]);if(j)$.publish($.buildEvent("session.updated",{session:j,...f?{snapshot:f}:{}},Q));return{version:J.version,requestId:J.requestId,ok:W.updated,payload:{updated:W.updated,session:j,...f?{snapshot:f}:{}}}}async function MK($,J){let Q=h0(J),Z=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),l(J,{deleted:Z})}async function qK($,J){let Q=h0(J),Z=$.sessionHost.pendingPrompts;if(!Z)return v(J,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await Z.list({sessionId:Q});return l(J,{sessionId:Q,prompts:W})}async function PK($,J){let Q=h0(J),Z=typeof J.payload?.promptId==="string"?J.payload.promptId.trim():"",W=typeof J.payload?.prompt==="string"?J.payload.prompt:void 0,j=J.payload?.delivery==="queue"||J.payload?.delivery==="steer"?J.payload.delivery:void 0,f=$.sessionHost.pendingPrompts;if(!f)return v(J,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await f.update({sessionId:Q,promptId:Z,prompt:W,delivery:j});return l(J,X)}async function NK($,J){let Q=h0(J),Z=typeof J.payload?.promptId==="string"?J.payload.promptId.trim():"",W=$.sessionHost.pendingPrompts;if(!W)return v(J,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await W.delete({sessionId:Q,promptId:Z});return l(J,j)}function wK($){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 bS=new Set(["skills","workflows","rules","tools","mcp"]);function P3($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function LJ($,J){let Q=$[J];if(Q===void 0)return;if(typeof Q!=="string")throw Error(`settings payload '${J}' must be a string.`);return Q}function hS($,J){let Q=$[J];if(Q===void 0)return;if(typeof Q!=="boolean")throw Error(`settings payload '${J}' must be a boolean.`);return Q}function SK($){if($===void 0)return{};if(!P3($))throw Error("settings.list payload must be an object.");return{cwd:LJ($,"cwd"),workspaceRoot:LJ($,"workspaceRoot"),availabilityContext:P3($.availabilityContext)?$.availabilityContext:void 0}}function kS($){if(!P3($))throw Error("settings.toggle payload must be an object.");let{type:J}=$;if(typeof J!=="string"||!bS.has(J))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...SK($),type:J,id:LJ($,"id"),path:LJ($,"path"),name:LJ($,"name"),enabled:hS($,"enabled")}}class J4{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=ES("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new L1({sessionService:new z1(new U1),fetch:$.fetch,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(J)=>this.publish(J),buildEvent:w2,requestCapability:(J,Q,Z,W,j)=>nA(this.ctx,J,Q,Z,W,j)},this.schedules=new s8({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(J,Q)=>{let Z=J==="schedule.execution.completed"?"schedule.execution_completed":J==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!Z)return;this.publish(w2(Z,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new a8(this.schedules),this.settings=$.settingsService??new O$,$.cronOptions)this.cronService=new s6({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((J)=>{jK(this.ctx,J).catch((Q)=>{R3("session event handling failed",Q),GQ(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Q,severity:"error",handled:!0,context:{eventType:J.type,sessionId:J.payload.sessionId}})})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}}async stop(){for(let $ of this.pendingApprovals.keys())D3(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(C$(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.sessionHost.dispose("hub_server_stop"),await this.schedules.dispose(),this.cronService)try{await this.cronService.dispose()}catch($){console.error("[hub] cron service stop failed",$)}}async handleCommand($){try{let J=await this.dispatchCommand($);return this.captureFailedReply($,J),J}catch(J){throw GQ(this.options.telemetry,{component:"core",operation:"hub.command",error:J,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),J}}async dispatchCommand($){switch($.command){case"client.register":return tA(this.ctx,$);case"client.update":return eA(this.ctx,$);case"client.unregister":return $K(this.ctx,$,(J)=>{this.listeners.delete(J),this.detachClientFromSessions(J)});case"client.list":return JK(this.ctx,$);case"session.create":return await DK(this.ctx,$,(J)=>F3(this.ctx,J));case"session.restore":return await UK(this.ctx,$,(J)=>F3(this.ctx,J));case"session.attach":return await RK(this.ctx,$);case"session.detach":return await zK(this.ctx,$);case"session.get":return await LK(this.ctx,$);case"session.messages":return await _K(this.ctx,$);case"session.list":return await OK(this.ctx,$);case"session.update":return await TK(this.ctx,$);case"session.pending_prompts":return await qK(this.ctx,$);case"session.update_pending_prompt":return await PK(this.ctx,$);case"session.remove_pending_prompt":return await NK(this.ctx,$);case"session.delete":return await MK(this.ctx,$);case"session.hook":return await WK(this.ctx,$);case"run.start":case"session.send_input":return await QK(this.ctx,$);case"run.abort":return await ZK(this.ctx,$);case"capability.request":return await sA(this.ctx,$);case"approval.respond":return await rA(this.ctx,$);case"capability.respond":return oA(this.ctx,$);case"capability.progress":return aA(this.ctx,$);case"ui.notify":return this.publish(w2("ui.notify",$.payload??{})),l($);case"ui.show_window":return this.publish(w2("ui.show_window",$.payload??{})),l($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let J=await this.scheduleCommands.handleCommand($);if(J.ok){let Q=wK($.command);if(Q)this.publish(w2(Q,J.payload))}return J}}}captureFailedReply($,J){if(J.ok||!J.error||!IS(J.error.code))return;GQ(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(J.error.message),severity:J.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:J.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let J=await this.settings.list(SK($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:J}}}catch(J){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:J instanceof Error?J.message:String(J)}}}}async handleSettingsToggle($){try{let J=await this.settings.toggle(kS($.payload));return this.publish(w2("settings.changed",{types:J.changedTypes,snapshot:J.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:J.snapshot,changedTypes:J.changedTypes}}}catch(J){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:J instanceof Error?J.message:String(J)}}}}subscribe($,J,Q){let Z=this.listeners.get($)??new Set,W={sessionId:Q?.sessionId,listener:J};return Z.add(W),this.listeners.set($,Z),()=>{let j=this.listeners.get($);if(!j)return;if(j.delete(W),j.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[J,Q]of this.sessionState.entries())if(Q.participants.delete($),Q.participants.size===0)this.sessionState.delete(J);C$(this.ctx,(J)=>J.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let J of this.listeners.values())for(let Q of J){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(Z){R3(`listener threw while publishing ${$.event}`,Z),GQ(this.options.telemetry,{component:"core",operation:"hub.publish",error:Z,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function IS($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as vS}from"node:crypto";import cS from"node:http";import uS from"node:net";import{URL as EK}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as bK,HUB_CAPABILITIES as dS,isHubProtocolCompatible as lS,MAX_CLIENT_HUB_PROTOCOL_VERSION as hK,MIN_CLIENT_HUB_PROTOCOL_VERSION as kK}from"@cline/shared";import{WebSocketServer as pS}from"ws";import{captureSdkError as CK,HUB_COMMAND_SLOW_LOG_MS as xS,resolveHubCommandTimeoutMs as gS,safeJsonParse as mS}from"@cline/shared";function N3($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function yK($,J,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:J,message:Q}}}class _J{transport;telemetry;constructor($,J){this.transport=$;this.telemetry=J}attach($){let J=new Map,Q=new Set,Z=!1,W=(Y)=>{try{$.send(JSON.stringify(Y))}catch(V){console.error(`[hub] failed to send websocket frame: ${V instanceof Error?V.stack||V.message:String(V)}`)}},j=(Y)=>{W({kind:"event",envelope:Y})},f=async(Y)=>{try{let V=JSON.parse(Y.data);switch(V.kind){case"command":{let H=performance.now(),B=!1,A=N3(V);c("info","command.start",A);let K=setTimeout(()=>{if(B)return;c("warn","command.slow",{...A,elapsedMs:Math.round(performance.now()-H)})},xS),G=this.transport.command(V.envelope);G.then((T)=>{if(!B)return;c(T.ok?"warn":"error","command.late_end",{...A,elapsedMs:Math.round(performance.now()-H),ok:T.ok,errorCode:T.error?.code,errorMessage:T.error?.message})},(T)=>{if(!B)return;c("error","command.late_error",{...A,elapsedMs:Math.round(performance.now()-H),error:T})});let R=!1,D,U,F=gS(V.envelope.command,V.envelope.timeoutMs);try{U=F===null?await G:await Promise.race([G,new Promise((T)=>{D=setTimeout(()=>{R=!0,CK(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${V.envelope.command} did not complete within ${F}ms.`),severity:"error",handled:!0,context:{...A,timeoutMs:F}}),T(yK(V,"hub_command_timeout",`Hub command ${V.envelope.command} did not complete within ${F}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${V.envelope.requestId}.`))},F)})])}catch(T){if(clearTimeout(K),D)clearTimeout(D);throw T}if(B=R,clearTimeout(K),D)clearTimeout(D);let O=Math.round(performance.now()-H);if(R)c("error","command.timeout",{...A,durationMs:O,timeoutMs:F});else c(U.ok?"info":"warn","command.end",{...A,durationMs:O,ok:U.ok,errorCode:U.error?.code,errorMessage:U.error?.message});if(V.envelope.command==="client.register"&&U.ok){let L=(V.envelope.payload??{}).clientId?.trim()||V.envelope.clientId?.trim();if(L)Q.add(L)}else if(V.envelope.command==="client.unregister"&&U.ok){let T=V.envelope.clientId?.trim();if(T)Q.delete(T)}W({kind:"reply",envelope:U});break}case"stream.subscribe":{let H=`${V.clientId}:${V.sessionId??"*"}`;if(J.has(H))break;let B=await this.transport.subscribe(V.clientId,j,{sessionId:V.sessionId});J.set(H,B);break}case"stream.unsubscribe":{let H=`${V.clientId}:${V.sessionId??"*"}`;J.get(H)?.(),J.delete(H);break}case"reply":case"event":break}}catch(V){let H=typeof Y.data==="string"?mS(Y.data):void 0;if(!H||H.kind!=="command"){c("error","rejected malformed websocket frame",{error:V});return}c("error","command.error",{...N3(H),error:V}),CK(this.telemetry,{component:"core",operation:"hub.websocket_command",error:V,severity:"error",handled:!0,context:N3(H)}),W({kind:"reply",envelope:yK(H,"command_failed",V instanceof Error?V.message:"Unknown hub error")})}},X=()=>{if(Z)return;Z=!0;for(let Y of J.values())Y();J.clear();for(let Y of Q)this.transport.command({version:"v1",command:"client.unregister",clientId:Y});Q.clear(),$.removeEventListener("message",f),$.removeEventListener("close",X)};return $.addEventListener("message",f),$.addEventListener("close",X),X}}class OJ{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,J,Q){return this.transport.subscribe($,J,Q)}}function rS($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((J)=>Buffer.from(J))).toString();return String($)}function iS($){return{send(J){$.send(J)},addEventListener(J,Q){if(J==="message"){$.on("message",(Z)=>{Q({data:rS(Z)})});return}$.on("close",Q)},removeEventListener(){}}}function nS($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
590
|
+
${H}`:Y.instructions}})}})}}function uS($,J,Q,Z){let W=Q.map((j)=>[j.executor,async(...X)=>{let f=X.at(-1),Y=X.slice(0,-1);return(await Z($,j.capabilityName,{executor:j.executor,args:Y,context:_K(f)},J))?.result}]);return W.length>0?Object.fromEntries(W):void 0}function dS($,J,Q,Z){if(Q.length===0)return;return Q.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema,lifecycle:W.lifecycle,async execute(j,X){return(await Z($,W.capabilityName,{toolName:W.name,input:j,context:_K(X)},J,X.emitUpdate?(Y)=>{X.emitUpdate?.(gS(Y))}:void 0))?.result}}))}function lS($,J,Q,Z){let W=new Map(Q.map((X)=>[X.name,X])),j={};for(let X of IS){let f=W.get(X);if(!f)continue;j[X]=async(Y)=>{return(await Z($,f.capabilityName,{context:Y},J))?.control}}return Object.keys(j).length>0?j:void 0}function w3($){let J=$.contributions.filter((Y)=>Y.kind==="toolExecutor"),Q=$.contributions.filter((Y)=>Y.kind==="tool"),Z=$.contributions.filter((Y)=>Y.kind==="hook"),W=$.contributions.find((Y)=>Y.kind==="compaction"),j=$.contributions.find((Y)=>Y.kind==="checkpoint"),X=$.contributions.find((Y)=>Y.kind==="mistakeLimit"),f=$.contributions.find((Y)=>Y.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:uS($.sessionId,$.targetClientId,J,$.requestCapability),localRuntime:{...Z.length>0?{hooks:lS($.sessionId,$.targetClientId,Z,$.requestCapability)}:{},...Q.length>0?{extraTools:dS($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...W?{compaction:{...$.sessionConfig?.compaction??{},...W.config,compact:async(Y)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:Y},$.targetClientId))?.result}}}:{},...j?{checkpoint:{...$.sessionConfig?.checkpoint??{},...j.config,createCheckpoint:async(Y)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:Y},$.targetClientId))?.result}}}:{},...X?{onConsecutiveMistakeLimitReached:async(Y)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:Y},$.targetClientId))?.result}}:{},...f?{userInstructionService:cS($.sessionId,$.targetClientId,f,$.requestCapability)}:{}}}}var MK="hubCapabilityOwnerClientId";function qK($,J){$[MK]=J}function pS($){let J=$?.[MK];return typeof J==="string"&&J.trim()?J.trim():void 0}async function PK($,J,Q){let Z=performance.now(),W={command:J.command,requestId:J.requestId,clientId:J.clientId,sessionId:J.sessionId};c("info","session.create.begin",W);let j=J.payload&&typeof J.payload==="object"?J.payload:{},X=j.metadata&&typeof j.metadata==="object"?JSON.parse(JSON.stringify(j.metadata)):{},f=j.sessionConfig&&typeof j.sessionConfig==="object"?JSON.parse(JSON.stringify(j.sessionConfig)):void 0,Y=j.runtimeOptions&&typeof j.runtimeOptions==="object"?j.runtimeOptions:{};if(typeof f?.mode==="string")X.mode=f.mode;else if(typeof Y.mode==="string")X.mode=Y.mode;if(typeof f?.systemPrompt==="string")X.systemPrompt=f.systemPrompt;else if(typeof Y.systemPrompt==="string")X.systemPrompt=Y.systemPrompt;if(f?.checkpoint?.enabled===!0)X.checkpointEnabled=!0;else if(Y.checkpointEnabled===!0)X.checkpointEnabled=!0;let V=j.modelSelection&&typeof j.modelSelection==="object"?j.modelSelection:{},H=typeof j.workspaceRoot==="string"&&j.workspaceRoot.trim()?j.workspaceRoot.trim():typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():"";if(!H)return c("warn","session.create.invalid",{...W,reason:"missing_workspace_root"}),v(J,"invalid_session_create","session.create requires workspaceRoot or cwd");let B=J.clientId?.trim()||"hub-client",A=N3(Y.clientContributions);if(c("info","session.create.contributions_parsed",{...W,clientId:B,workspaceRoot:H,cwd:typeof j.cwd==="string"?j.cwd:void 0,contributionCount:A.length}),A.length>0)qK(X,B);let G=(typeof f?.sessionId==="string"?f.sessionId.trim():"")||OK(),R=TK(Y.configExtensions);c("info","session.create.runtime_build.begin",{...W,sessionId:G,configExtensionCount:R?.length??0});let D=w3({sessionId:G,targetClientId:B,contributions:A,sessionConfig:f,requestCapability:$.requestCapability});c("info","session.create.start_session.begin",{...W,sessionId:G,provider:f?.providerId??(typeof V.provider==="string"?V.provider:typeof X.provider==="string"?X.provider:"hub"),model:f?.modelId??(typeof V.model==="string"?V.model:typeof X.model==="string"?X.model:"hub")});let U=await $.sessionHost.startSession({source:typeof X.source==="string"?X.source:void 0,interactive:X.interactive!==!1,sessionMetadata:Object.keys(X).length>0?X:void 0,initialMessages:Array.isArray(j.initialMessages)?j.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:R,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...f??{},sessionId:G,providerId:f?.providerId??(typeof V.provider==="string"?V.provider:typeof X.provider==="string"?X.provider:"hub"),modelId:f?.modelId??(typeof V.model==="string"?V.model:typeof X.model==="string"?X.model:"hub"),apiKey:f?.apiKey??(typeof V.apiKey==="string"?V.apiKey:void 0),cwd:f?.cwd??(typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():H),workspaceRoot:f?.workspaceRoot??H,systemPrompt:f?.systemPrompt??(typeof Y.systemPrompt==="string"?Y.systemPrompt:""),mode:f?.mode??(Y.mode==="plan"||Y.mode==="yolo"?Y.mode:"act"),maxIterations:f?.maxIterations??(typeof Y.maxIterations==="number"?Y.maxIterations:void 0),enableTools:f?.enableTools??Y.enableTools!==!1,enableSpawnAgent:f?.enableSpawnAgent??Y.enableSpawn!==!1,enableAgentTeams:f?.enableAgentTeams??Y.enableTeams!==!1,checkpoint:f?.checkpoint??(Y.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:f?.teamName??(typeof X.teamName==="string"?X.teamName:void 0)},toolPolicies:j.toolPolicies&&typeof j.toolPolicies==="object"&&!Array.isArray(j.toolPolicies)?JSON.parse(JSON.stringify(j.toolPolicies)):Y.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});c("info","session.create.start_session.end",{...W,sessionId:U.sessionId,elapsedMs:Math.round(performance.now()-Z),hasImmediateResult:!!U.result}),L9($,U.sessionId,B,"creator",{interactive:X.interactive!==!1}),c("info","session.create.read_records.begin",{...W,sessionId:U.sessionId});let[F,O]=await Promise.all([s0($,U.sessionId),o0($,U.sessionId)]);if(c("info","session.create.read_records.end",{...W,sessionId:U.sessionId,hasSession:!!F,hasSnapshot:!!O,elapsedMs:Math.round(performance.now()-Z)}),F)$.publish($.buildEvent("session.created",{session:F,...O?{snapshot:O}:{}},U.sessionId));return c("info","session.create.reply",{...W,sessionId:U.sessionId,elapsedMs:Math.round(performance.now()-Z)}),l(J,{session:F,...O?{snapshot:O}:{}})}async function NK($,J,Q){let Z=J.payload&&typeof J.payload==="object"?J.payload:{},W=typeof Z.sessionId==="string"?Z.sessionId.trim():J.sessionId?.trim()||"",j=Z.checkpointRunCount;if(!W)return v(J,"invalid_restore","session.restore requires a session id");let X=Z.restore&&typeof Z.restore==="object"?Z.restore:{},f=X.messages!==!1;if(typeof j!=="number")return v(J,"invalid_restore","checkpointRunCount must be a positive integer");try{let Y=Z.sessionConfig&&typeof Z.sessionConfig==="object"?JSON.parse(JSON.stringify(Z.sessionConfig)):void 0;if(f&&!Y)return v(J,"invalid_restore","sessionConfig is required when restore.messages is true");let V=Z.runtimeOptions&&typeof Z.runtimeOptions==="object"?Z.runtimeOptions:{},H=Z.metadata&&typeof Z.metadata==="object"?JSON.parse(JSON.stringify(Z.metadata)):{};if(typeof Y?.mode==="string")H.mode=Y.mode;else if(typeof V.mode==="string")H.mode=V.mode;if(typeof Y?.systemPrompt==="string")H.systemPrompt=Y.systemPrompt;else if(typeof V.systemPrompt==="string")H.systemPrompt=V.systemPrompt;if(Y?.checkpoint?.enabled===!0)H.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)H.checkpointEnabled=!0;let B=Z.modelSelection&&typeof Z.modelSelection==="object"?Z.modelSelection:{},A=J.clientId?.trim()||"hub-client",K=N3(V.clientContributions);if(K.length>0)qK(H,A);let R=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||OK(),D=TK(V.configExtensions),U=w3({sessionId:R,targetClientId:A,contributions:K,sessionConfig:Y,requestCapability:$.requestCapability}),O=await new y$().restoreCheckpoint({sessionId:W,checkpointRunCount:j,restore:{messages:X.messages,workspace:X.workspace,omitCheckpointMessageFromSession:X.omitCheckpointMessageFromSession===!0},start:Y,cwd:typeof Y?.cwd==="string"&&Y.cwd.trim()||typeof Y?.workspaceRoot==="string"&&Y.workspaceRoot.trim()||void 0,getSession:(P)=>$.sessionHost.getSession(P),readMessages:(P)=>$.sessionHost.readSessionMessages(P),buildStartInput:(P)=>{if(P.restoredCheckpointMetadata)H.checkpoint=P.restoredCheckpointMetadata;let S=typeof Z.workspaceRoot==="string"&&Z.workspaceRoot.trim()?Z.workspaceRoot.trim():typeof Z.cwd==="string"&&Z.cwd.trim()?Z.cwd.trim():P.sourceSession.workspaceRoot||P.sourceSession.cwd;return{source:typeof H.source==="string"?H.source:void 0,interactive:H.interactive!==!1,sessionMetadata:{...H,restoredFromSessionId:W,restoredCheckpointRunCount:j},initialMessages:P.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:D,...U.localRuntime},capabilities:{toolExecutors:U.toolExecutors,requestToolApproval:Q},config:{...Y??{},sessionId:R,providerId:Y?.providerId??(typeof B.provider==="string"?B.provider:P.sourceSession.provider),modelId:Y?.modelId??(typeof B.model==="string"?B.model:P.sourceSession.model),apiKey:Y?.apiKey??(typeof B.apiKey==="string"?B.apiKey:""),cwd:Y?.cwd??P.plan.cwd,workspaceRoot:Y?.workspaceRoot??S,systemPrompt:Y?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:Y?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:Y?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:Y?.enableTools??V.enableTools!==!1,enableSpawnAgent:Y?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:Y?.enableAgentTeams??V.enableTeams!==!1,checkpoint:Y?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:Y?.teamName??(typeof H.teamName==="string"?H.teamName:void 0)},toolPolicies:Z.toolPolicies&&typeof Z.toolPolicies==="object"&&!Array.isArray(Z.toolPolicies)?JSON.parse(JSON.stringify(Z.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(P)=>$.sessionHost.startSession(P),getStartedSessionId:(P)=>P.sessionId,readRestoredSession:(P)=>$.sessionHost.getSession(P)});if(!f)return l(J,{checkpoint:O.checkpoint});let T=O.startResult;if(!T)return v(J,"restore_failed","Checkpoint restore did not start a session");L9($,T.sessionId,A,"creator",{interactive:H.interactive!==!1});let[z,L]=await Promise.all([s0($,T.sessionId),o0($,T.sessionId)]);if(z)$.publish($.buildEvent("session.created",{session:z,...L?{snapshot:L}:{}},T.sessionId));return l(J,{session:z,...L?{snapshot:L}:{},messages:O.messages??[],checkpoint:O.checkpoint})}catch(Y){if(Y instanceof k0)return v(J,Y.code,Y.code==="session_not_found"?`Unknown session: ${W}`:Y.message);return v(J,"restore_failed",Y instanceof Error?Y.message:String(Y))}}async function wK($,J){let Q=h0(J);if(!Q)return v(J,"invalid_session_attach","session.attach requires a session id");L9($,Q,J.clientId?.trim()||"hub-client","participant");let Z=await s0($,Q);if(Z)$.publish($.buildEvent("session.attached",{session:Z},Q));return Z?l(J,{session:Z}):v(J,"session_not_found",`Unknown session: ${Q}`)}async function SK($,J){let Q=h0(J);if(!Q)return v(J,"invalid_session_detach","session.detach requires a session id");let Z=J.clientId?.trim()||"hub-client",[W]=await Promise.all([s0($,Q)]),j=pS(W?.metadata)??Z,X=$.sessionState.get(Q);if(X){if(X.participants.delete(Z),X.createdByClientId===Z)X.createdByClientId=j;if(X.participants.size===0)$.sessionState.delete(Q)}C$($,(V)=>V.sessionId===Q&&V.targetClientId===Z,`Capability owner client ${Z} detached before request was resolved.`);let[f,Y]=await Promise.all([s0($,Q),o0($,Q)]);return $.publish($.buildEvent("session.detached",f?{session:f,...Y?{snapshot:Y}:{},clientId:Z}:{clientId:Z},Q)),l(J)}async function CK($,J){let Q=h0(J),Z=J.payload?.includeSnapshot===!0,[W,j]=await Promise.all([s0($,Q),Z?o0($,Q):Promise.resolve(void 0)]);return W?l(J,{session:W,...j?{snapshot:j}:{}}):v(J,"session_not_found",`Unknown session: ${Q}`)}async function yK($,J){let Q=h0(J);if(!Q)return v(J,"invalid_session_id","session.messages requires a session id");if(!await s0($,Q))return v(J,"session_not_found",`Unknown session: ${Q}`);let W=await $.sessionHost.readSessionMessages(Q);return l(J,{sessionId:Q,messages:W})}async function EK($,J){let Q=typeof J.payload?.limit==="number"?J.payload.limit:200,W=(await $.sessionHost.listSessions(Q)).map((j)=>U9(j,$.sessionState.get(j.sessionId)));return l(J,{sessions:W})}async function bK($,J){let Q=h0(J),Z=R9(J.payload?.metadata),W=await $.sessionHost.updateSession(Q,{metadata:Z}),[j,X]=await Promise.all([s0($,Q),o0($,Q)]);if(j)$.publish($.buildEvent("session.updated",{session:j,...X?{snapshot:X}:{}},Q));return{version:J.version,requestId:J.requestId,ok:W.updated,payload:{updated:W.updated,session:j,...X?{snapshot:X}:{}}}}async function hK($,J){let Q=h0(J),Z=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),l(J,{deleted:Z})}async function kK($,J){let Q=h0(J),Z=$.sessionHost.pendingPrompts;if(!Z)return v(J,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await Z.list({sessionId:Q});return l(J,{sessionId:Q,prompts:W})}async function IK($,J){let Q=h0(J),Z=typeof J.payload?.promptId==="string"?J.payload.promptId.trim():"",W=typeof J.payload?.prompt==="string"?J.payload.prompt:void 0,j=J.payload?.delivery==="queue"||J.payload?.delivery==="steer"?J.payload.delivery:void 0,X=$.sessionHost.pendingPrompts;if(!X)return v(J,"pending_prompts_unavailable","Pending prompt service is not available.");let f=await X.update({sessionId:Q,promptId:Z,prompt:W,delivery:j});return l(J,f)}async function xK($,J){let Q=h0(J),Z=typeof J.payload?.promptId==="string"?J.payload.promptId.trim():"",W=$.sessionHost.pendingPrompts;if(!W)return v(J,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await W.delete({sessionId:Q,promptId:Z});return l(J,j)}function gK($){switch($){case"schedule.create":return"schedule.created";case"schedule.update":case"schedule.enable":case"schedule.disable":return"schedule.updated";case"schedule.delete":return"schedule.deleted";case"schedule.trigger":return"schedule.triggered";default:return}}var iS=new Set(["skills","workflows","rules","tools","mcp"]);function S3($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function MJ($,J){let Q=$[J];if(Q===void 0)return;if(typeof Q!=="string")throw Error(`settings payload '${J}' must be a string.`);return Q}function nS($,J){let Q=$[J];if(Q===void 0)return;if(typeof Q!=="boolean")throw Error(`settings payload '${J}' must be a boolean.`);return Q}function mK($){if($===void 0)return{};if(!S3($))throw Error("settings.list payload must be an object.");return{cwd:MJ($,"cwd"),workspaceRoot:MJ($,"workspaceRoot"),availabilityContext:S3($.availabilityContext)?$.availabilityContext:void 0}}function aS($){if(!S3($))throw Error("settings.toggle payload must be an object.");let{type:J}=$;if(typeof J!=="string"||!iS.has(J))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...mK($),type:J,id:MJ($,"id"),path:MJ($,"path"),name:MJ($,"name"),enabled:nS($,"enabled")}}class Q4{options;clients=new Map;listeners=new Map;sessionState=new Map;pendingApprovals=new Map;pendingCapabilityRequests=new Map;suppressNextTerminalEventBySession=new Map;schedules;scheduleCommands;settings;cronService;sessionHost;hubId=rS("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new z1({sessionService:new L1(new U1),fetch:$.fetch,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(J)=>this.publish(J),buildEvent:w2,requestCapability:(J,Q,Z,W,j)=>WK(this.ctx,J,Q,Z,W,j)},this.schedules=new o8({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(J,Q)=>{let Z=J==="schedule.execution.completed"?"schedule.execution_completed":J==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!Z)return;this.publish(w2(Z,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new s8(this.schedules),this.settings=$.settingsService??new O$,$.cronOptions)this.cronService=new $J({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((J)=>{FK(this.ctx,J).catch((Q)=>{_3("session event handling failed",Q),z9(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Q,severity:"error",handled:!0,context:{eventType:J.type,sessionId:J.payload.sessionId}})})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}}async stop(){for(let $ of this.pendingApprovals.keys())L3(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(C$(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.sessionHost.dispose("hub_server_stop"),await this.schedules.dispose(),this.cronService)try{await this.cronService.dispose()}catch($){console.error("[hub] cron service stop failed",$)}}async handleCommand($){try{let J=await this.dispatchCommand($);return this.captureFailedReply($,J),J}catch(J){throw z9(this.options.telemetry,{component:"core",operation:"hub.command",error:J,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),J}}async dispatchCommand($){switch($.command){case"client.register":return YK(this.ctx,$);case"client.update":return VK(this.ctx,$);case"client.unregister":return HK(this.ctx,$,(J)=>{this.listeners.delete(J),this.detachClientFromSessions(J)});case"client.list":return BK(this.ctx,$);case"session.create":return await PK(this.ctx,$,(J)=>R3(this.ctx,J));case"session.restore":return await NK(this.ctx,$,(J)=>R3(this.ctx,J));case"session.attach":return await wK(this.ctx,$);case"session.detach":return await SK(this.ctx,$);case"session.get":return await CK(this.ctx,$);case"session.messages":return await yK(this.ctx,$);case"session.list":return await EK(this.ctx,$);case"session.update":return await bK(this.ctx,$);case"session.pending_prompts":return await kK(this.ctx,$);case"session.update_pending_prompt":return await IK(this.ctx,$);case"session.remove_pending_prompt":return await xK(this.ctx,$);case"session.delete":return await hK(this.ctx,$);case"session.hook":return await GK(this.ctx,$);case"run.start":case"session.send_input":return await AK(this.ctx,$);case"run.abort":return await KK(this.ctx,$);case"capability.request":return await XK(this.ctx,$);case"approval.respond":return await QK(this.ctx,$);case"capability.respond":return fK(this.ctx,$);case"capability.progress":return jK(this.ctx,$);case"ui.notify":return this.publish(w2("ui.notify",$.payload??{})),l($);case"ui.show_window":return this.publish(w2("ui.show_window",$.payload??{})),l($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let J=await this.scheduleCommands.handleCommand($);if(J.ok){let Q=gK($.command);if(Q)this.publish(w2(Q,J.payload))}return J}}}captureFailedReply($,J){if(J.ok||!J.error||!sS(J.error.code))return;z9(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(J.error.message),severity:J.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:J.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let J=await this.settings.list(mK($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:J}}}catch(J){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:J instanceof Error?J.message:String(J)}}}}async handleSettingsToggle($){try{let J=await this.settings.toggle(aS($.payload));return this.publish(w2("settings.changed",{types:J.changedTypes,snapshot:J.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:J.snapshot,changedTypes:J.changedTypes}}}catch(J){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:J instanceof Error?J.message:String(J)}}}}subscribe($,J,Q){let Z=this.listeners.get($)??new Set,W={sessionId:Q?.sessionId,listener:J};return Z.add(W),this.listeners.set($,Z),()=>{let j=this.listeners.get($);if(!j)return;if(j.delete(W),j.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[J,Q]of this.sessionState.entries())if(Q.participants.delete($),Q.participants.size===0)this.sessionState.delete(J);C$(this.ctx,(J)=>J.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let J of this.listeners.values())for(let Q of J){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(Z){_3(`listener threw while publishing ${$.event}`,Z),z9(this.options.telemetry,{component:"core",operation:"hub.publish",error:Z,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function sS($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as $C}from"node:crypto";import JC from"node:http";import QC from"node:net";import{URL as uK}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as dK,HUB_CAPABILITIES as ZC,isHubProtocolCompatible as WC,MAX_CLIENT_HUB_PROTOCOL_VERSION as lK,MIN_CLIENT_HUB_PROTOCOL_VERSION as pK}from"@cline/shared";import{WebSocketServer as jC}from"ws";import{captureSdkError as vK,HUB_COMMAND_SLOW_LOG_MS as oS,resolveHubCommandTimeoutMs as tS,safeJsonParse as eS}from"@cline/shared";function C3($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function cK($,J,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:J,message:Q}}}class qJ{transport;telemetry;constructor($,J){this.transport=$;this.telemetry=J}attach($){let J=new Map,Q=new Set,Z=!1,W=(Y)=>{try{$.send(JSON.stringify(Y))}catch(V){console.error(`[hub] failed to send websocket frame: ${V instanceof Error?V.stack||V.message:String(V)}`)}},j=(Y)=>{W({kind:"event",envelope:Y})},X=async(Y)=>{try{let V=JSON.parse(Y.data);switch(V.kind){case"command":{let H=performance.now(),B=!1,A=C3(V);c("info","command.start",A);let K=setTimeout(()=>{if(B)return;c("warn","command.slow",{...A,elapsedMs:Math.round(performance.now()-H)})},oS),G=this.transport.command(V.envelope);G.then((T)=>{if(!B)return;c(T.ok?"warn":"error","command.late_end",{...A,elapsedMs:Math.round(performance.now()-H),ok:T.ok,errorCode:T.error?.code,errorMessage:T.error?.message})},(T)=>{if(!B)return;c("error","command.late_error",{...A,elapsedMs:Math.round(performance.now()-H),error:T})});let R=!1,D,U,F=tS(V.envelope.command,V.envelope.timeoutMs);try{U=F===null?await G:await Promise.race([G,new Promise((T)=>{D=setTimeout(()=>{R=!0,vK(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${V.envelope.command} did not complete within ${F}ms.`),severity:"error",handled:!0,context:{...A,timeoutMs:F}}),T(cK(V,"hub_command_timeout",`Hub command ${V.envelope.command} did not complete within ${F}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${V.envelope.requestId}.`))},F)})])}catch(T){if(clearTimeout(K),D)clearTimeout(D);throw T}if(B=R,clearTimeout(K),D)clearTimeout(D);let O=Math.round(performance.now()-H);if(R)c("error","command.timeout",{...A,durationMs:O,timeoutMs:F});else c(U.ok?"info":"warn","command.end",{...A,durationMs:O,ok:U.ok,errorCode:U.error?.code,errorMessage:U.error?.message});if(V.envelope.command==="client.register"&&U.ok){let z=(V.envelope.payload??{}).clientId?.trim()||V.envelope.clientId?.trim();if(z)Q.add(z)}else if(V.envelope.command==="client.unregister"&&U.ok){let T=V.envelope.clientId?.trim();if(T)Q.delete(T)}W({kind:"reply",envelope:U});break}case"stream.subscribe":{let H=`${V.clientId}:${V.sessionId??"*"}`;if(J.has(H))break;let B=await this.transport.subscribe(V.clientId,j,{sessionId:V.sessionId});J.set(H,B);break}case"stream.unsubscribe":{let H=`${V.clientId}:${V.sessionId??"*"}`;J.get(H)?.(),J.delete(H);break}case"reply":case"event":break}}catch(V){let H=typeof Y.data==="string"?eS(Y.data):void 0;if(!H||H.kind!=="command"){c("error","rejected malformed websocket frame",{error:V});return}c("error","command.error",{...C3(H),error:V}),vK(this.telemetry,{component:"core",operation:"hub.websocket_command",error:V,severity:"error",handled:!0,context:C3(H)}),W({kind:"reply",envelope:cK(H,"command_failed",V instanceof Error?V.message:"Unknown hub error")})}},f=()=>{if(Z)return;Z=!0;for(let Y of J.values())Y();J.clear();for(let Y of Q)this.transport.command({version:"v1",command:"client.unregister",clientId:Y});Q.clear(),$.removeEventListener("message",X),$.removeEventListener("close",f)};return $.addEventListener("message",X),$.addEventListener("close",f),f}}class PJ{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,J,Q){return this.transport.subscribe($,J,Q)}}function XC($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((J)=>Buffer.from(J))).toString();return String($)}function fC($){return{send(J){$.send(J)},addEventListener(J,Q){if(J==="message"){$.on("message",(Z)=>{Q({data:XC(Z)})});return}$.on("close",Q)},removeEventListener(){}}}function YC($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
579
591
|
Connection: close\r
|
|
580
592
|
Content-Length: 0\r
|
|
581
593
|
\r
|
|
582
|
-
`),$.end()}catch{$.destroy()}}function
|
|
594
|
+
`),$.end()}catch{$.destroy()}}function VC($){try{$.write(`HTTP/1.1 401 Unauthorized\r
|
|
583
595
|
Connection: close\r
|
|
584
596
|
Content-Length: 0\r
|
|
585
597
|
\r
|
|
586
|
-
`),$.end()}catch{$.destroy()}}function
|
|
587
|
-
Caused by: ${$.stack}`;return j}async function
|
|
588
|
-
`).map((Z)=>Z.trim()).filter(Boolean).map((Z)=>{try{return JSON.parse(Z)}catch{return}}).filter((Z)=>Z!==void 0).reverse().slice(0,J)}loadRuntime($){let J=this.readEnvelope($);return{state:J?.teamState?
|
|
589
|
-
`,"utf8")}persistRuntime($,J,Q){this.ensureTeamSubdir($);let Z={version:1,updatedAt:
|
|
590
|
-
`,"utf8"),
|
|
598
|
+
`),$.end()}catch{$.destroy()}}function y3($,J){if(!$||!J)return!1;let Q=Buffer.from($,"utf8"),Z=Buffer.from(J,"utf8");return Q.length===Z.length&&$C(Q,Z)}function rK($,J){let Q=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,Z=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",W=`Failed to start hub server on ${J.host}:${J.port}${J.pathname}: ${Z}`,j=Error(Q?`${W} (${Q})`:W);if(Q)$.code=Q,j.code=Q;if($ instanceof Error&&$.stack)j.stack=`${j.name}: ${j.message}
|
|
599
|
+
Caused by: ${$.stack}`;return j}async function HC($){return await new Promise((J,Q)=>{let Z=QC.createServer();Z.once("error",Q),Z.listen(0,$,()=>{let W=Z.address();if(!W||typeof W==="string"){Z.close(()=>Q(Error("Failed to resolve free port")));return}let j=W.port;Z.close((X)=>{if(X){Q(X);return}J(j)})})})}function BC($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var E3=new Map,iK="cline-hub-auth.",AC=30000;function aK($){return Array.isArray($)?$.join(","):$??""}function nK($){return $===32||$===9}function _9($){let J=aK($).trim(),Q="bearer";if(J.length<=6||J.slice(0,6).toLowerCase()!=="bearer"||!nK(J.charCodeAt(6)))return null;let Z=7;while(Z<J.length&&nK(J.charCodeAt(Z)))Z+=1;return J.slice(Z).trim()||null}function KC($){for(let J of aK($).split(",")){let Q=J.trim();if(Q.startsWith(iK))return Q.slice(iK.length).trim()||null}return null}async function C2($){let J=$.owner??l1(),Q=$.host??"127.0.0.1",Z=$.pathname??"/hub",W=$.port??h8(),j=W===0?await HC(Q):W,X=j,f=j1(Q,j,Z),Y=nQ(),V=iQ(),H=new Q4($);await H.start();let B=new qJ(new PJ(H),$.telemetry),A=new Set,K=new Date().toISOString(),G={protocolVersion:dK,minClientProtocolVersion:pK,maxClientProtocolVersion:lK,capabilities:ZC,coreVersion:ZJ.version,buildId:Y,pid:process.pid,startedAt:K},R=new Set,D,U,F=async()=>{if(U)return U;return U=(async()=>{if(D)clearInterval(D),D=void 0;for(let L of R)L.terminate?.();R.clear();for(let L of A)L();if(A.clear(),await new Promise((L,P)=>{T.close((S)=>{if(S){P(S);return}L()})}),await new Promise((L,P)=>{O.close((S)=>{if(S){P(S);return}L()})}),await H.stop(),(await G0(J.discoveryPath))?.url===f)await y0(J.discoveryPath)})(),U},O=JC.createServer((z,L)=>{if((z.url??"/")==="/health"){let S=JSON.stringify({ok:!0,protocolVersion:G.protocolVersion,minClientProtocolVersion:G.minClientProtocolVersion,maxClientProtocolVersion:G.maxClientProtocolVersion,coreVersion:G.coreVersion,host:Q,port:X,url:f});L.statusCode=200,L.setHeader("content-type","application/json"),L.end(S);return}if((z.url??"/")==="/status"){if(!y3(_9(z.headers.authorization),V)){L.statusCode=401,L.end("Unauthorized");return}let S=JSON.stringify({hubId:H.getHubId(),...G,authToken:V,host:Q,port:X,url:f,updatedAt:new Date().toISOString()});L.statusCode=200,L.setHeader("content-type","application/json"),L.end(S);return}if((z.url??"/")==="/version"){L.statusCode=200,L.setHeader("content-type","application/json"),L.end(JSON.stringify(G));return}if(new uK(z.url??"/",`http://${Q}:${X}`).pathname==="/shutdown"&&z.method==="POST"){if(!y3(_9(z.headers.authorization),V)){L.statusCode=401,L.end("Unauthorized");return}L.statusCode=202,L.setHeader("content-type","application/json"),L.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{F()});return}L.statusCode=404,L.end("Not found")}),T=new jC({noServer:!0});D=setInterval(()=>{for(let z of R){if(z.isAlive===!1){try{z.terminate?.()}catch{}R.delete(z);continue}z.isAlive=!1;try{z.ping?.()}catch{try{z.terminate?.()}catch{}R.delete(z)}}},AC),O.on("upgrade",(z,L,P)=>{if(new uK(z.url??"/",`http://${Q}:${X}`).pathname!==Z){L.destroy();return}if(!y3(KC(z.headers["sec-websocket-protocol"]),V)){VC(L);return}try{T.handleUpgrade(z,L,P,(b)=>{let u=b;u.isAlive=!0,u.on("pong",()=>{u.isAlive=!0}),R.add(u);let o=B.attach(fC(b));A.add(o),b.once("close",()=>{R.delete(u),o(),A.delete(o)})})}catch{YC(L)}});try{await new Promise((z,L)=>{O.once("error",(P)=>{L(rK(P,{host:Q,port:j,pathname:Z}))}),O.listen(j,Q,()=>{let P=O.address();if(!P||typeof P==="string"){L(rK(Error("Failed to resolve hub port"),{host:Q,port:j,pathname:Z}));return}X=P.port,f=j1(Q,X,Z),z()})})}catch(z){if(D)clearInterval(D),D=void 0;throw await H.stop().catch(()=>{return}),z}return await aQ(J.discoveryPath,{hubId:H.getHubId(),protocolVersion:dK,minClientProtocolVersion:pK,maxClientProtocolVersion:lK,capabilities:[...G.capabilities],coreVersion:ZJ.version,buildId:Y,authToken:V,host:Q,port:X,url:f,pid:process.pid,startedAt:K,updatedAt:K}),{host:Q,port:X,url:f,authToken:V,close:F}}async function O9($){let J=$.owner??l1(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=$.host??"127.0.0.1",W=$.port??h8(),j=$.pathname??"/hub",X=j1(Z,W,j),f=J.discoveryPath,Y=(H)=>{if(!Q)P$(H.url,H.authToken);return H},V=E3.get(f);if(V){let H=await V;if(H.url===X)return Y({server:H,url:H.url,authToken:H.authToken,action:"reuse"})}return await sQ(J.discoveryPath,async()=>{let H=await G0(J.discoveryPath);if(H?.url&&(H.url===X||$.allowPortFallback===!0)){let K=await p1(H.url,{authToken:H.authToken});if(K?.url&&WC(K).compatible&&await G1(K.url,{authToken:H.authToken}))return Y({url:K.url,authToken:H.authToken,action:"reuse"})}if(H?.url)await y0(J.discoveryPath);let A=async(K)=>{let G=C2({...K,owner:J});E3.set(f,G);try{let R=await G;return Y({server:R,url:R.url,authToken:R.authToken,action:"started"})}catch(R){throw E3.delete(f),R}};try{return await A($)}catch(K){if(!$.allowPortFallback||!BC(K))throw K;return await A({...$,port:0})}})}function oK(){return sK()==="production"?n0():E0()}function GC($){return sK()!=="production"&&!$}async function tK($){let J=i0({host:$.host,port:$.port,pathname:$.pathname});return await C2({...$,...J,owner:oK()})}async function eK($){let J=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=i0({host:$.host,port:$.port,pathname:$.pathname});return await O9({...$,...Q,allowPortFallback:$.allowPortFallback??GC(J),owner:oK()})}M9();var QG={};w(QG,{registerRemoteConfigSessionBlobUpload:()=>N9,readRemoteConfigSessionBlobUploadMetadata:()=>b3,prepareRemoteConfigCoreIntegration:()=>k3,createRemoteConfigSessionMessagesArtifactUploader:()=>h3,buildRemoteConfigSessionBlobUploadMetadata:()=>q9,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>P9});import{buildRemoteConfigSessionBlobUploadMetadata as q9,clearRemoteConfigSessionBlobUpload as FC,createClineTelemetryServiceConfig as DC,createSessionId as UC,createRemoteConfigSessionMessagesArtifactUploader as RC,prepareRemoteConfigRuntime as LC,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as P9,readRemoteConfigSessionBlobUploadMetadata as b3,registerRemoteConfigSessionBlobUpload as N9}from"@cline/shared";function zC($,J){let Q=$.telemetry||J.telemetryService?{...J.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return s1(DC(Q)).telemetry}function h3(){let $=RC();return{async uploadMessagesFile(J){await $.uploadMessagesFile(J)}}}async function k3($){let J=await LC($),Q=zC(J,$),Z=[J.pluginDefinition],W=J.claims?.subject,j=q9(J.bundle?.remoteConfig,W),X;return{prepared:J,extensions:Z,telemetry:Q,applyToStartSessionInput(f){let Y=f.config.extensions??[],V=f.config.telemetry,H=j?f.config.sessionId?.trim()||UC():f.config.sessionId;if(H&&j)X=H;let B=H&&j?N9(H,J.bundle?.remoteConfig,W):void 0,A=B?{...f.sessionMetadata??{},[P9]:B}:f.sessionMetadata;return{...f,...A?{sessionMetadata:A}:{},config:{...f.config,...H?{sessionId:H}:{},extensions:[...Y,...Z],telemetry:Q??V}}},async dispose(){if(X)FC(X)}}}var VG={};w(VG,{createTeamName:()=>C9,DefaultRuntimeBuilder:()=>j4});import{hasRuntimeConfigExtension as hC}from"@cline/shared";import{nanoid as kC}from"nanoid";W1();var YG={};w(YG,{createLocalTeamStore:()=>m3,SqliteTeamStore:()=>y2,FileTeamStore:()=>NJ});import{appendFileSync as _C,existsSync as Z4,mkdirSync as ZG,readdirSync as OC,readFileSync as WG,renameSync as TC,writeFileSync as MC}from"node:fs";import{join as I3}from"node:path";import{resolveTeamDataDir as qC}from"@cline/shared/storage";function jG(){return new Date().toISOString()}function x3($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function XG($){return{...$,tasks:$.tasks.map((J)=>({...J,createdAt:new Date(J.createdAt),updatedAt:new Date(J.updatedAt)})),mailbox:$.mailbox.map((J)=>({...J,sentAt:new Date(J.sentAt),readAt:J.readAt?new Date(J.readAt):void 0})),missionLog:$.missionLog.map((J)=>({...J,ts:new Date(J.ts)})),runs:($.runs??[]).map((J)=>({...J,startedAt:new Date(J.startedAt),endedAt:J.endedAt?new Date(J.endedAt):void 0,nextAttemptAt:J.nextAttemptAt?new Date(J.nextAttemptAt):void 0,heartbeatAt:J.heartbeatAt?new Date(J.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),finalizedAt:J.finalizedAt?new Date(J.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),reviewedAt:J.reviewedAt?new Date(J.reviewedAt):void 0}))}}class NJ{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??qC()}init(){this.ensureTeamDir()}listTeamNames(){if(!Z4(this.teamDirPath))return[];return OC(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>Z4(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let J=this.readEnvelope($);return J?.teamState?XG(J.teamState):void 0}readHistory($,J=200){let Q=this.historyPath($);if(!Z4(Q))return[];return WG(Q,"utf8").split(`
|
|
600
|
+
`).map((Z)=>Z.trim()).filter(Boolean).map((Z)=>{try{return JSON.parse(Z)}catch{return}}).filter((Z)=>Z!==void 0).reverse().slice(0,J)}loadRuntime($){let J=this.readEnvelope($);return{state:J?.teamState?XG(J.teamState):void 0,teammates:J?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,J){this.ensureTeamSubdir($),_C(this.historyPath($),`${JSON.stringify({ts:jG(),eventType:J.type,payload:J})}
|
|
601
|
+
`,"utf8")}persistRuntime($,J,Q){this.ensureTeamSubdir($);let Z={version:1,updatedAt:jG(),teamState:J,teammates:Q},W=this.statePath($),j=`${W}.tmp`;MC(j,`${JSON.stringify(Z,null,2)}
|
|
602
|
+
`,"utf8"),TC(j,W)}markInProgressRunsInterrupted($,J){let Q=this.readEnvelope($);if(!Q?.teamState?.runs?.length)return[];let Z=Q.teamState.runs.filter((j)=>j.status==="queued"||j.status==="running").map((j)=>j.id);if(Z.length===0)return[];let W=new Date;return Q.teamState={...Q.teamState,runs:Q.teamState.runs.map((j)=>j.status==="queued"||j.status==="running"?{...j,status:"interrupted",error:J,endedAt:W}:j)},this.persistRuntime($,Q.teamState,Q.teammates),Z}ensureTeamDir(){if(!Z4(this.teamDirPath))ZG(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let J=I3(this.ensureTeamDir(),x3($));if(!Z4(J))ZG(J,{recursive:!0});return J}statePath($){return I3(this.ensureTeamDir(),x3($),"state.json")}historyPath($){return I3(this.ensureTeamDir(),x3($),"task-history.jsonl")}readEnvelope($){let J=this.statePath($);if(!Z4(J))return;try{let Q=JSON.parse(WG(J,"utf8"));if(Q?.version===1&&Q.teamState)return Q}catch{}return}}import{existsSync as PC,mkdirSync as NC}from"node:fs";import{join as wC}from"node:path";import{safeJsonParse as fG}from"@cline/shared";import{loadSqliteDb as SC,nowIso as g3}from"@cline/shared/db";import{resolveDbDataDir as CC}from"@cline/shared/storage";function yC(){return CC()}function W4($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function EC($){let J=fG($);if(!Array.isArray(J))return[];let Q=[];for(let Z of J){if(!Z||typeof Z!=="object")continue;let W=Z,j=W.agentId,X=W.rolePrompt;if(typeof j!=="string"||!j.trim())continue;if(typeof X!=="string"||!X.trim())continue;let f={agentId:j.trim(),rolePrompt:X};if(typeof W.modelId==="string"&&W.modelId.trim())f.modelId=W.modelId.trim();if(typeof W.maxIterations==="number"&&Number.isFinite(W.maxIterations))f.maxIterations=Math.max(1,Math.floor(W.maxIterations));Q.push(f)}return Q}function bC($){return{...$,tasks:$.tasks.map((J)=>({...J,createdAt:new Date(J.createdAt),updatedAt:new Date(J.updatedAt)})),mailbox:$.mailbox.map((J)=>({...J,sentAt:new Date(J.sentAt),readAt:J.readAt?new Date(J.readAt):void 0})),missionLog:$.missionLog.map((J)=>({...J,ts:new Date(J.ts)})),runs:($.runs??[]).map((J)=>({...J,startedAt:new Date(J.startedAt),endedAt:J.endedAt?new Date(J.endedAt):void 0,nextAttemptAt:J.nextAttemptAt?new Date(J.nextAttemptAt):void 0,heartbeatAt:J.heartbeatAt?new Date(J.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),finalizedAt:J.finalizedAt?new Date(J.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),reviewedAt:J.reviewedAt?new Date(J.reviewedAt):void 0}))}}class y2{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??yC()}init(){this.getRawDb()}ensureTeamDir(){if(!PC(this.teamDirPath))NC(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return wC(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=SC(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
|
|
591
603
|
CREATE TABLE IF NOT EXISTS team_store_schema_version (
|
|
592
604
|
lock INTEGER PRIMARY KEY CHECK (lock = 1),
|
|
593
605
|
version INTEGER NOT NULL
|
|
@@ -671,8 +683,8 @@ Caused by: ${$.stack}`;return j}async function sS($){return await new Promise((J
|
|
|
671
683
|
version INTEGER NOT NULL DEFAULT 1,
|
|
672
684
|
PRIMARY KEY(team_name, fragment_id)
|
|
673
685
|
);
|
|
674
|
-
`)}run($,J=[]){return this.getRawDb().prepare($).run(...J)}queryOne($,J=[]){return this.getRawDb().prepare($).get(...J)??void 0}queryAll($,J=[]){return this.getRawDb().prepare($).all(...J)}withTransaction($){let J=this.getRawDb();J.exec("BEGIN IMMEDIATE;");try{$(),J.exec("COMMIT;")}catch(Q){try{J.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 J=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[
|
|
675
|
-
VALUES (?, ?, ?, ?, NULL, ?)`,[
|
|
686
|
+
`)}run($,J=[]){return this.getRawDb().prepare($).run(...J)}queryOne($,J=[]){return this.getRawDb().prepare($).get(...J)??void 0}queryAll($,J=[]){return this.getRawDb().prepare($).all(...J)}withTransaction($){let J=this.getRawDb();J.exec("BEGIN IMMEDIATE;");try{$(),J.exec("COMMIT;")}catch(Q){try{J.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 J=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[W4($)]);if(!J)return;let Q=fG(J.state_json);if(!Q)return;try{return bC(Q)}catch{return}}readHistory($,J=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[W4($),J]).flatMap((Q)=>{try{return[{eventType:Q.event_type,payload:JSON.parse(Q.payload_json),ts:Q.ts}]}catch{return[]}})}loadRuntime($){let J=W4($),Q=this.readState(J),Z=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[J]),W=Z?EC(Z.teammates_json):[];return{state:Q,teammates:W,interruptedRunIds:[]}}appendTeamEvent($,J,Q,Z){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
|
|
687
|
+
VALUES (?, ?, ?, ?, NULL, ?)`,[W4($),g3(),J,JSON.stringify(Q),Z??null])}persistRuntime($,J,Q){let Z=W4($),W=g3();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
|
|
676
688
|
VALUES (?, ?, ?, ?)
|
|
677
689
|
ON CONFLICT(team_name) DO UPDATE SET
|
|
678
690
|
state_json = excluded.state_json,
|
|
@@ -717,17 +729,17 @@ Caused by: ${$.stack}`;return j}async function sS($){return await new Promise((J
|
|
|
717
729
|
status = excluded.status,
|
|
718
730
|
reviewed_by = excluded.reviewed_by,
|
|
719
731
|
reviewed_at = excluded.reviewed_at,
|
|
720
|
-
version = team_outcome_fragments.version + 1`,[Z,j.outcomeId,j.id,j.section,j.sourceAgentId,j.sourceRunId??null,j.content,j.status,j.reviewedBy??null,j.reviewedAt?j.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,J){let Q=
|
|
721
|
-
WHERE team_name = ? AND status IN ('queued', 'running')`,[J,W,Q]),Z.map((j)=>j.run_id)}handleTeamEvent($,J){this.appendTeamEvent($,J.type,J)}}function
|
|
722
|
-
`,"utf8");let Y=J.timeoutMs??300000,V=J.pollIntervalMs??200,H=Date.now();while(Date.now()-H<Y){try{let B=await
|
|
723
|
-
`,"utf8")}function WG($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((J)=>J.trim()).filter((J)=>J.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((J)=>J.trim()).filter((J)=>J.length>0))]}}function NQ($){if(!E2($))return;let J=$.metadata;return E2(J)?J:void 0}function PQ($,J){let Q=NQ($);if(!Q||Q.source!=="plugin")return!1;let Z=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,W=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(J.pluginName&&Z===J.pluginName){if(!J.pluginPath||W===J.pluginPath)return!0}if(W&&J.pluginPath&&(W===J.pluginPath||qQ(J.pluginPath,W)||qQ(W,J.pluginPath)))return!0;if(Z&&J.pluginNames?.some((j)=>j===Z))return!0;if(W&&J.pluginPaths?.some((j)=>W===j||qQ(j,W)||qQ(W,j)))return!0;return!1}function pC($){let J=E2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:ZG($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...J,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function rC($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let J=await B8({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],Z=[],W=(J.failures??[]).map((j)=>({pluginPath:j.pluginPath,pluginName:j.pluginName,message:j.message}));for(let j of J.extensions??[]){let f=j.__clinePluginPath;if(!f)continue;if(!j.setup){Q.push({pluginName:j.name,pluginPath:f});continue}let X=[],Y={registerTool:(V)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(V)=>{if(!j.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');X.push(V)}};try{await j.setup(Y,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(V){W.push({pluginPath:f,pluginName:j.name,message:V instanceof Error?V.message:String(V)});continue}Q.push({pluginName:j.name,pluginPath:f});for(let V of X)Z.push({pluginName:j.name,pluginPath:f,server:{...V,metadata:{...V.metadata??{},source:"plugin",pluginName:j.name,pluginPath:f}}})}return{plugins:Q,servers:Z,failures:W}}finally{await J.shutdown().catch(()=>{})}}async function d3($){let J=$.settingsPath??B0(),Q={mutations:[],failures:[]},Z;try{Z=await rC($)}catch(V){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:V instanceof Error?V.message:String(V)});return Q}Q.failures.push(...Z.failures);let W;try{W=v3(J)}catch(V){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:V instanceof Error?V.message:String(V)});return Q}let j=c3(W),f=new Map,X=new Map;for(let V of Z.plugins)f.set(V.pluginPath,new Set),X.set(V.pluginPath,V.pluginName);let Y=C9(Z.servers.map((V)=>({server:V.server,owner:V,ownerLabel:V.pluginName})));for(let V of Y){let H=V.owner;if(!f.has(H.pluginPath))f.set(H.pluginPath,new Set);if(V.name)f.get(H.pluginPath)?.add(V.name);if(!V.registration){Q.mutations.push({name:V.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:V.loadError??"invalid MCP server registration"});continue}let B=j[V.registration.name];if(B!==void 0){if(!PQ(B,{pluginName:H.pluginName,pluginPath:H.pluginPath})){Q.mutations.push({name:V.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}j[V.registration.name]=pC({registration:V.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:E2(B)?B:void 0}),Q.mutations.push({name:V.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:B===void 0?"created":"updated"})}for(let[V,H]of Object.entries(j)){let B=NQ(H),A=typeof B?.pluginPath==="string"?B.pluginPath:"",K=f.get(A);if(K&&PQ(H,{pluginPath:A})&&!K.has(V))delete j[V],Q.mutations.push({name:V,pluginName:typeof B?.pluginName==="string"?B.pluginName:X.get(A)??"plugin",pluginPath:A,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((V)=>V.action!=="skipped"))try{u3(J,W,j)}catch(V){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:V instanceof Error?V.message:String(V)})}return Q}function l3($){let J=$.settingsPath??B0(),Q;try{Q=v3(J)}catch{return[]}let Z=c3(Q),W=WG($),j=[];for(let[f,X]of Object.entries(Z)){if(!E2(X)||!PQ(X,W))continue;let Y=NQ(X);Z[f]={...X,disabled:!0},j.push({name:f,pluginName:typeof Y?.pluginName==="string"?Y.pluginName:"plugin",pluginPath:typeof Y?.pluginPath==="string"?Y.pluginPath:"",action:"disabled"})}if(j.length>0)u3(J,Q,Z);return j}function MJ($){let J=$.settingsPath??B0(),Q;try{Q=v3(J)}catch{return[]}let Z=c3(Q),W=WG($),j=[];for(let[f,X]of Object.entries(Z)){if(!PQ(X,W))continue;let Y=NQ(X);delete Z[f],j.push({name:f,pluginName:typeof Y?.pluginName==="string"?Y.pluginName:"plugin",pluginPath:typeof Y?.pluginPath==="string"?Y.pluginPath:"",action:"removed"})}if(j.length>0)u3(J,Q,Z);return j}W1();var VG={};w(VG,{uninstallPlugin:()=>t3});import{existsSync as f4,readdirSync as iC,readFileSync as nC,rmdirSync as aC,rmSync as sC,statSync as oC}from"node:fs";import{basename as t0,dirname as E$,extname as tC,isAbsolute as eC,join as o1,relative as $y,resolve as j4,sep as p3}from"node:path";import{discoverPluginModulePaths as Jy,resolvePluginConfigSearchPaths as Qy}from"@cline/shared/storage";var s3="_installed",Zy="package",Wy=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function r3($){return $.trim().toLowerCase()}function X1($,J){let Q=J?.trim();if(!Q)return;$.add(Q)}function jy($){return $.replace(/-[0-9a-f]{12}$/i,"")}function i3($){let J=tC($);return J?$.slice(0,-J.length):$}function n3($){if(!f4($))return;try{let J=JSON.parse(nC($,"utf8"));return typeof J.name==="string"?J.name.trim():void 0}catch{return}}function o3($,J){let Q=$y(J,$);return Q===""||!Q.startsWith("..")&&!eC(Q)}function fG($){let Q=j4($).split(p3),Z=Q.lastIndexOf(s3);if(Z<0)return;let W=Q[Z+1];if(!W)return;let j=Wy.get(W)??1,f=Z+2+j;if(Q.length<f)return;let X=Q.slice(0,f).join(p3)||p3;return f4(X)?X:void 0}function wQ($){try{return iC($,{withFileTypes:!0})}catch{return[]}}function fy($){let J=o1($,s3);if(!f4(J))return[];let Q=[];for(let Z of wQ(J)){if(!Z.isDirectory())continue;let W=o1(J,Z.name);if(Z.name==="git"){for(let j of wQ(W)){if(!j.isDirectory())continue;let f=o1(W,j.name);for(let X of wQ(f))if(X.isDirectory())Q.push(o1(f,X.name))}continue}for(let j of wQ(W))if(j.isDirectory())Q.push(o1(W,j.name))}return Q.sort((Z,W)=>Z.localeCompare(W))}function XG($){try{return Jy($)}catch{return[]}}function a3($){let J=XG($),Q=new Set;X1(Q,t0($)),X1(Q,jy(t0($))),X1(Q,n3(o1($,"package.json"))),X1(Q,n3(o1($,Zy,"package.json")));for(let Z of J)X1(Q,t0(Z)),X1(Q,i3(t0(Z)));return{installPath:$,entryPaths:J,names:[...Q].sort((Z,W)=>Z.localeCompare(W)),installed:!0}}function Xy($,J){let Q=j4($),Z=J.find((f)=>o3(Q,f));if(!Z)return;let W=E$(Q);while(W!==Z&&W!==E$(W)){if(f4(o1(W,"package.json")))return W;W=E$(W)}let j=t0(Q);if((j==="index.ts"||j==="index.js")&&E$(Q)!==Z)return E$(Q);return Q}function YG($,J){let Q=Xy($,J);if(!Q)return;let Z=new Set;return X1(Z,t0($)),X1(Z,i3(t0($))),X1(Z,t0(Q)),X1(Z,i3(t0(Q))),X1(Z,n3(o1(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...Z].sort((W,j)=>W.localeCompare(j)),installed:!1}}function Yy($){let J=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return Qy(J).filter((Q)=>f4(Q))}function Vy($){let J=new Map;for(let Q of $){for(let Z of fy(Q))J.set(Z,a3(Z));for(let Z of XG(Q)){let W=fG(Z);if(W){if(!J.has(W))J.set(W,a3(W));continue}let j=YG(Z,$);if(j)J.set(j.installPath,j)}}return[...J.values()].sort((Q,Z)=>Q.installPath.localeCompare(Z.installPath))}function Hy($,J){let Q=r3(J);if(!Q)return!1;if(r3($.installPath)===Q)return!0;return $.names.some((Z)=>r3(Z)===Q)}function By($,J,Q){let Z=j4($);for(let j of J){if(o3(Z,j.installPath))return j;if(j.entryPaths.some((f)=>j4(f)===Z))return j}let W=fG(Z);if(W)return a3(W);if(f4(Z))return YG(Z,Q);return}function Ay($){let J=M0(),Q=J.disabledPlugins;if(!Q?.length)return;let Z=Q.filter((W)=>{let j=j4(W);if(o3(j,$.installPath))return!1;return!$.entryPaths.some((f)=>j4(f)===j)});if(Z.length===Q.length)return;k1({...J,disabledPlugins:Z})}function Ky($){let J=E$($);while(J!==E$(J)&&t0(J)!==s3){try{aC(J)}catch{return}J=E$(J)}}function Gy($){return`${$.names[0]??t0($.installPath)} at ${$.installPath}`}async function t3($){let J=Yy($),Q=Vy(J),Z=$.path?.trim(),W=$.name?.trim(),j;if(Z){if(j=By(Z,Q,J),!j)throw Error(`No plugin found at ${Z}`)}else{if(!W)throw Error("plugin uninstall requires a plugin name");let X=Q.filter((Y)=>Hy(Y,W));if(X.length===0)throw Error(`No plugin found matching "${W}"`);if(X.length>1)throw Error(`Multiple plugins match "${W}": ${X.map(Gy).join(", ")}`);j=X[0]}let f=oC(j.installPath,{throwIfNoEntry:!1});if(!f)throw Error(`Plugin install path does not exist: ${j.installPath}`);if(MJ({pluginPaths:[j.installPath,...j.entryPaths],pluginNames:j.names}),sC(j.installPath,{recursive:f.isDirectory(),force:!0}),Ay(j),j.installed)Ky(j.installPath);return{name:W||j.names[0]||t0(j.installPath),installPath:j.installPath,removedPaths:[j.installPath],entryPaths:j.entryPaths}}var SG={};w(SG,{updateLocalProvider:()=>IQ,saveLocalProviderSettings:()=>fj,saveLocalProviderOAuthCredentials:()=>Hj,resolveLocalClineAuthToken:()=>Aj,refreshProviderModelsFromSource:()=>Xj,normalizeOAuthProvider:()=>Yj,loginLocalProvider:()=>Vj,loginAndSaveLocalProviderOAuthCredentials:()=>Bj,listLocalProviders:()=>Wj,getLocalProviderModels:()=>jj,ensureCustomProvidersLoaded:()=>bQ,deleteLocalProvider:()=>xQ,addLocalProvider:()=>Zj});import*as N0 from"@cline/llms";import{existsSync as Fy,mkdirSync as Dy,readFileSync as Uy,writeFileSync as Ry}from"node:fs";import{mkdir as zy,readFile as Ly,writeFile as _y}from"node:fs/promises";import{dirname as e3,join as Oy}from"node:path";import*as I0 from"@cline/llms";import{ModelCapabilitySchema as Ty,ProviderCapabilitySchema as My,ProviderClientSchema as qy,ProviderProtocolSchema as Py}from"@cline/shared";import{z as i}from"zod";var Ny=i.object({id:i.string().optional(),name:i.string().optional(),maxTokens:i.number().optional(),contextWindow:i.number().optional(),maxInputTokens:i.number().optional(),capabilities:i.array(Ty).optional(),supportsVision:i.boolean().optional(),supportsAttachments:i.boolean().optional(),supportsReasoning:i.boolean().optional()}).passthrough(),wy=i.object({name:i.string(),baseUrl:i.string(),defaultModelId:i.string().optional(),protocol:Py.optional(),client:qy.optional(),capabilities:i.array(My).optional(),modelsSourceUrl:i.string().optional()}).passthrough(),HG=i.object({provider:wy.optional(),models:i.record(i.string(),Ny).optional()}).passthrough(),BG=i.object({version:i.literal(1),providers:i.record(i.string(),HG)}),Sy=i.object({version:i.literal(1),providers:i.record(i.string(),i.unknown())}),SQ=new Set;function AG($){return $.split(/[-_]/).filter(Boolean).map((J)=>J.charAt(0).toUpperCase()+J.slice(1)).join(" ")}function b2($){return Oy(e3($.getFilePath()),"models.json")}function CQ(){return{version:1,providers:{}}}function KG($){let J=Sy.safeParse($);if(!J.success)return CQ();let Q={};for(let[Z,W]of Object.entries(J.data.providers)){let j=HG.safeParse(W);if(j.success)Q[Z]=j.data}return{version:1,providers:Q}}function $j($){if(!Fy($))return CQ();try{let J=Uy($,"utf8");return KG(JSON.parse(J))}catch{}return CQ()}async function X4($){try{let J=await Ly($,"utf8");return KG(JSON.parse(J))}catch{}return CQ()}function GG($,J){Dy(e3($),{recursive:!0});let Q=BG.parse(J);Ry($,`${JSON.stringify(Q,null,2)}
|
|
724
|
-
`,"utf8")}async function
|
|
725
|
-
`,"utf8")}function FG($,J){return{id:$,name:J.name??$,supportsAttachments:J.capabilities?.includes("files"),supportsVision:J.capabilities?.includes("images"),supportsReasoning:J.capabilities?.includes("reasoning")||J.thinkingConfig!=null}}function DG($){if(!$||$.length===0)return;let J=new Set;if($.includes("reasoning"))J.add("reasoning");if($.includes("prompt-cache"))J.add("prompt-cache");if($.includes("tools"))J.add("tools");return J.size>0?[...J]:void 0}function UG($){let J=new Set;if(!$||$.length===0)return[...J];if($.includes("streaming"))J.add("streaming");if($.includes("tools"))J.add("tools");if($.includes("reasoning"))J.add("reasoning");if($.includes("prompt-cache"))J.add("prompt-cache");if($.includes("vision"))J.add("images"),J.add("files");return[...J]}function Cy($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function RG($,J){return $??J??"openai-chat"}function zG($,J,Q){return $??Q??(J==="openai-responses"?"openai":"openai-compatible")}function LG($,J,Q){let Z=new Set(J?.capabilities??Q??[]);if(J?.supportsVision)Z.add("images");if(J?.supportsAttachments)Z.add("files");if(J?.supportsReasoning)Z.add("reasoning");return{id:$,name:J?.name??$,maxTokens:J?.maxTokens,contextWindow:J?.contextWindow,maxInputTokens:J?.maxInputTokens,capabilities:Z.size>0?[...Z]:void 0}}function yy($,J){for(let[Q,Z]of Object.entries(J??{})){let W=Z.id?.trim()||Q.trim();if(!W)continue;I0.registerModel($,W,LG(W,Z))}}function Ey($,J,Q){return{...J??{},id:$,name:J?.name??$,capabilities:J?.capabilities??Q}}function by($){return Object.assign({},...I0.resolveProviderModelCatalogKeys($).map((Q)=>I0.getGeneratedModelsForProvider(Q)))}function hy($){let J=$.provider.trim();if(!J||I0.isBuiltInProviderId(J))return;let Q=$.baseUrl?.trim();if(!Q)return;let Z=I0.MODEL_COLLECTIONS_BY_PROVIDER_ID[J],W=by(J),j=UG($.capabilities),f=j.length>0?j:void 0,X=$.model?.trim(),Y={...W,...Z?.models??{}};if(X)Y[X]=Ey(X,Y[X],f);let V=Object.keys(Y).filter(Boolean),H=X||V[0];if(!H)return;let B=RG($.protocol,Z?.provider.protocol),A=zG($.client,B,Z?.provider.client);I0.registerProvider({provider:{id:J,name:Z?.provider.name??AG(J),description:Z?.provider.description,protocol:B,client:A,baseUrl:Q,modelsSourceUrl:Z?.provider.modelsSourceUrl,defaultModelId:H,capabilities:DG($.capabilities)??Z?.provider.capabilities,source:"file"},models:Y})}function EQ($){for(let J of Object.values($.providers))hy(J.settings)}function qJ($,J){let Q=J.models??{};if(!Cy(J.provider)){yy($,Q);return}let Z=UG(J.provider.capabilities),W=Object.entries(Q).map(([V,H])=>({id:H.id?.trim()||V.trim(),model:H})).filter(({id:V})=>V.length>0),j=J.provider.defaultModelId?.trim()||W[0]?.id||"default",f=RG(J.provider.protocol,void 0),X=zG(J.provider.client,f,void 0),Y=Object.fromEntries(W.map(({id:V,model:H})=>[V,{...LG(V,H,Z.length>0?Z:void 0),status:"active"}]));I0.registerProvider({provider:{id:$,name:J.provider.name.trim()||AG($),protocol:f,client:X,baseUrl:J.provider.baseUrl,modelsSourceUrl:J.provider.modelsSourceUrl,defaultModelId:j,capabilities:DG(J.provider.capabilities),source:"file"},models:Y})}function _G($){let J=b2($);if(SQ.has(J))return;let Q=$j(J);for(let[Z,W]of Object.entries(Q.providers))qJ(Z,W);SQ.add(J)}async function bQ($){let J=b2($);if(SQ.has(J))return;let Q=await X4(J);for(let[Z,W]of Object.entries(Q.providers))qJ(Z,W);SQ.add(J)}var ky="cline-pass";function Iy($){return $.apiKey??$.auth?.apiKey}function xy($){return($.auth?.accessToken?.trim()??"").length>0}function TG($){return $.split(/[-_]/).filter(Boolean).map((J)=>J.charAt(0).toUpperCase()+J.slice(1)).join(" ")}function gy($){let J=$.split(/\s+/).filter(Boolean);if(J.length===0)return"?";if(J.length===1)return J[0].slice(0,2).toUpperCase();return`${J[0][0]}${J[1][0]}`.toUpperCase()}function my($){let J=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let Z of $)Q=Q*31+Z.charCodeAt(0)>>>0;return J[Q%J.length]}function MG($){return Object.entries($).sort(([J],[Q])=>J.localeCompare(Q)).map(([J,Q])=>FG(J,Q))}async function vy($,J){let Q=await N0.getModelsForProvider($);if(!J)return Q;let Z=await F6($,{loadPrivateOnAuth:!0,failOnError:!1},J);return Z?.knownModels?{...Q,...Z.knownModels}:Q}function Jj($){return[...new Set(($??[]).map((J)=>J.trim()).filter(Boolean))]}function cy($){if(!$?.length)return;return[...new Set($)]}function uy($,J){return cy([...$??[],...J??[]])}function dy($){let J=$?.popularRank;return typeof J==="number"&&Number.isFinite(J)?J:Number.MAX_SAFE_INTEGER}function ly($){if(!$||typeof $!=="object")return!1;let J=$;return typeof J.path==="string"&&J.path.trim().length>0&&typeof J.label==="string"&&J.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(J.type))}function py($){let J=$?.configFields;if(!Array.isArray(J))return;return J.filter(ly)}var hQ={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},OG={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function ry($){if(!$)return[hQ];if($.source!=="system")return $.baseUrl?[hQ,OG]:[hQ];let J=[];if($.env?.length)J.push(hQ);if($.baseUrl)J.push(OG);return J}function iy($,J){return J.split(".").reduce((Q,Z)=>{if(!Q||typeof Q!=="object")return;return Q[Z]},$)}function ny($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function ay($,J,Q){if(!$?.length)return;let Z={};for(let W of $){let f=ny(W.path==="baseUrl"&&J?.baseUrl===void 0?Q?.baseUrl:iy(J,W.path))??W.defaultValue;if(f!==void 0)Z[W.path]=f}return Z}function qG($){let J=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return J.length>0?Object.fromEntries(J):void 0}function Qj($,J){let Q=J?.includes("vision")??!1,Z=J?.includes("reasoning")??!1;return Object.fromEntries($.map((W)=>[W,{id:W,name:W,supportsVision:Q,supportsAttachments:Q,supportsReasoning:Z}]))}async function PG($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let J=$.modelsSourceUrl?await u5($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...J])]}function NG($,J){let Q=$.read(),Z=!1;if(Q.providers[J])delete Q.providers[J],Z=!0;if(Q.lastUsedProvider===J)delete Q.lastUsedProvider,Z=!0;if(Z)$.write(Q);N0.unregisterProvider(J)}async function Zj($,J){let Q=J.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let Z=J.baseUrl.trim(),W=J.apiKey?.trim()??"";if(!Z&&!W){let G=b2($);if((await X4(G)).providers[Q]){let D=await xQ($,{providerId:Q});return{providerId:Q,settingsPath:D.settingsPath,modelsPath:D.modelsPath,modelsCount:0}}return NG($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:G,modelsCount:0}}if(N0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let j=J.name.trim();if(!j)throw Error("name is required");if(!Z)throw Error("baseUrl is required");let f=Jj(J.models),X=J.modelsSourceUrl?.trim(),Y=await PG({providerId:Q,explicitModels:f,modelsSourceUrl:X,shouldRecompute:!0});if(Y.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let V=J.defaultModelId?.trim()&&Y.includes(J.defaultModelId.trim())?J.defaultModelId.trim():Y[0],H=J.capabilities?.length?[...new Set(J.capabilities)]:void 0,B=qG(J.headers);$.saveProviderSettings({provider:Q,apiKey:W||void 0,baseUrl:Z,headers:B,timeout:J.timeoutMs,model:V,protocol:J.protocol,client:J.client},{setLastUsed:!1});let A=b2($),K=await X4(A);return K.providers[Q]={provider:{name:j,baseUrl:Z,defaultModelId:V,protocol:J.protocol,client:J.client,capabilities:H,modelsSourceUrl:X},models:Qj(Y,H)},await yQ(A,K),qJ(Q,K.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:Y.length}}async function IQ($,J){let Q=J.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let Z=b2($),W=await X4(Z),j=W.providers[Q];if(!j){let T=$.getProviderSettings(Q);if(!T)throw Error(`provider "${Q}" does not exist`);let L=J.modelsSourceUrl?.trim(),z=Jj(J.models)[0]??T.model?.trim();if(!z&&!L)throw Error(`provider "${Q}" cannot be updated because no model is configured`);j={provider:{name:J.name?.trim()||TG(Q),baseUrl:J.baseUrl?.trim()??T.baseUrl?.trim()??"",defaultModelId:z,protocol:T.protocol,client:T.client,capabilities:T.capabilities},models:z?Qj([z],T.capabilities):{}}}if(!j.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let f=J.name?.trim()??j.provider.name.trim();if(!f)throw Error("name is required");let X=J.baseUrl?.trim()??j.provider.baseUrl.trim();if(!X)throw Error("baseUrl is required");let Y=J.capabilities===void 0?j.provider.capabilities:J.capabilities===null?void 0:[...new Set(J.capabilities)],V=J.protocol===void 0?j.provider.protocol:J.protocol??void 0,H=J.client===void 0?j.provider.client:J.client??void 0,B=Jj(J.models),A=J.modelsSourceUrl===void 0?j.provider.modelsSourceUrl:J.modelsSourceUrl?.trim()||void 0,K=J.models!==void 0||J.modelsSourceUrl!==void 0&&!!A,G=Object.keys(j.models??{}).map((T)=>T.trim()).filter(Boolean),R=await PG({providerId:Q,explicitModels:B,modelsSourceUrl:A,fallbackModelIds:G,shouldRecompute:K});if(R.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let D=J.defaultModelId===void 0?j.provider.defaultModelId?.trim():J.defaultModelId?.trim(),U=D&&R.includes(D)?D:R[0],O={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:X,model:U};if(V)O.protocol=V;else delete O.protocol;if(H)O.client=H;else delete O.client;if(J.apiKey!==void 0){let T=J.apiKey?.trim()??"";if(T)O.apiKey=T;else delete O.apiKey}if(J.headers!==void 0){let T=qG(J.headers);if(T)O.headers=T;else delete O.headers}if(J.timeoutMs!==void 0)if(typeof J.timeoutMs==="number")O.timeout=J.timeoutMs;else delete O.timeout;return $.saveProviderSettings(O,{setLastUsed:!1}),W.providers[Q]={provider:{name:f,baseUrl:X,defaultModelId:U,protocol:V,client:H,capabilities:Y,modelsSourceUrl:A},models:Qj(R,Y)},await yQ(Z,W),qJ(Q,W.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:Z,modelsCount:R.length}}async function xQ($,J){let Q=J.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let Z=b2($),W=await X4(Z);if(!W.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete W.providers[Q],await yQ(Z,W),N0.unregisterProvider(Q),NG($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:Z}}async function Wj($,J={}){let Q=$.read(),Z=N0.getProviderIds(),W=await Promise.all(Z.map(async(f)=>{let[X,Y]=await Promise.all([N0.getProvider(f),N0.getModelsForProvider(f)]),V=MG(Y),H=Q.providers[f]?.settings,B=X?.name??TG(f),A=uy(X?.capabilities,H?.capabilities),K=py(X?.metadata)??ry(X);return{provider:{id:f,name:B,models:V.length,color:my(f),letter:gy(B),enabled:Boolean(H),apiKey:H?Iy(H):void 0,oauthAccessTokenPresent:H?xy(H):void 0,baseUrl:H?.baseUrl??X?.baseUrl,defaultModelId:X?.defaultModelId,protocol:H?.protocol??X?.protocol,client:H?.client??X?.client,capabilities:A,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:K,configValues:ay(K,H,X),modelList:V},rank:dy(X?.metadata)}}));W.sort((f,X)=>{if(f.rank!==X.rank)return f.rank-X.rank;return f.provider.name.localeCompare(X.provider.name)||f.provider.id.localeCompare(X.provider.id)});let j=W.map((f)=>f.provider);if(J.isClinePassEnabled!==!0)j=j.filter((f)=>f.id!==ky);return{providers:j,settingsPath:$.getFilePath()}}async function jj($,J){let Q=$.trim(),Z=await vy(Q,J),W=MG(Z);return{providerId:Q,models:W}}function kQ($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function wG($,J){if(!kQ(J))return kQ($)?{...$}:void 0;let Q=kQ($)?{...$}:{};for(let[Z,W]of Object.entries(J)){if(W==null||W===""){delete Q[Z];continue}if(kQ(W)){let j=wG(Q[Z],W);if(j&&Object.keys(j).length>0)Q[Z]=j;else delete Q[Z];continue}Q[Z]=W}return Object.keys(Q).length>0?Q:void 0}function fj($,J){let Q=J.providerId.trim();if(J.enabled===!1){let j=$.read();if(delete j.providers[Q],j.lastUsedProvider===Q)delete j.lastUsedProvider;return $.write(j),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let W={...$.getProviderSettings(Q)??{},provider:Q};for(let j of["apiKey","baseUrl","model","region"])if(Object.hasOwn(J,j)&&typeof J[j]==="string")if(J[j].trim().length===0)delete W[j];else W[j]=J[j];for(let j of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(J,j))W[j]=J[j];for(let j of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(J,j)&&J[j]!=null){let f=wG(W[j],J[j]);if(f)W[j]=f;else delete W[j]}return $.saveProviderSettings(W,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function Xj($,J){let Q=J.trim(),Z=$.getProviderSettings(Q),j=N0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,f=Z?.baseUrl?.trim()||j?.baseUrl?.trim(),X=d5(f,j?.baseUrl,j?.modelsSourceUrl);if(!Z||!j||!f||!X)return{providerId:Q,refreshed:!1};let Y=await IQ($,{providerId:Q,name:j.name,baseUrl:f,apiKey:Z.apiKey,headers:Z.headers??null,timeoutMs:Z.timeout??null,modelsSourceUrl:X,protocol:Z.protocol??j.protocol??null,client:Z.client??j.client??null,capabilities:Z.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:Y.modelsCount}}function Yj($){let J=$.trim().toLowerCase(),Q=Z0(J);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function Vj($,J,Q,Z){let W=Z0($);if(!W)throw Error(`provider "${$}" does not support OAuth login`);let j=T8({onPrompt:async(f)=>f.defaultValue??"",openUrl:Q,onOpenUrlError:({error:f})=>{throw f instanceof Error?f:Error(String(f))}});return W.login({settings:J,callbacks:j,telemetry:Z})}function Hj($,J,Q,Z,W){return x$({manager:$,providerId:J,settings:Q,credentials:Z,setLastUsed:W?.setLastUsed})}async function Bj($,J,Q,Z){let W=T8({onPrompt:async(j)=>j.defaultValue??"",openUrl:Q,onOpenUrlError:({error:j})=>{throw j instanceof Error?j:Error(String(j))}});return z4($,J,{callbacks:W,telemetry:Z})}function Aj($){let J=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return J&&J.length>0?J:void 0}var CG={};w(CG,{getProviderConfigFields:()=>Kj});import*as gQ from"@cline/llms";var sy=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],oy={"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 ty($,J){let Q={};for(let Z of sy){let W=$[Z],j=J[Z];if(W||j)Q[Z]={...W,...j}}return Q}function ey($){let J=oy[$.providerId];if(!J)return $;return{...$,description:J.description??$.description,fields:J.mode==="replace"?J.fields:ty($.fields,J.fields)}}var $E=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function JE($,J){if(!J?.provider.baseUrl)return!1;if(J.provider.source!=="system")return!0;return $E.has($)}function Kj($){let J=gQ.normalizeProviderId($);if(I$(J))return{providerId:J,authMethod:"oauth",fields:{}};let Q=gQ.MODEL_COLLECTIONS_BY_PROVIDER_ID[J];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:J,authMethod:"local",fields:{}};let Z=Q?.provider.baseUrl,W={apiKey:{}};if(JE(J,Q))W.baseUrl={defaultValue:Z};return ey({providerId:J,authMethod:"api-key",fields:W})}var hG={};w(hG,{resolveLegacyClineAuth:()=>Dj,migrateLegacyProviderSettings:()=>PJ});import{existsSync as QE,readFileSync as ZE}from"node:fs";import{dirname as WE,join as Gj}from"node:path";import*as vQ from"@cline/llms";import{resolveClineDataDir as jE}from"@cline/shared/storage";var mQ="openai",bG=vQ.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,yG=128000;function Dj($){let J=$?.trim();if(!J)return;try{let Q=JSON.parse(J);if(!Q)return;let Z=typeof Q.expiresAt==="number"&&Number.isFinite(Q.expiresAt)?Q.expiresAt<10000000000?Q.expiresAt*1000:Q.expiresAt:void 0;return{accessToken:Q.idToken,refreshToken:Q.refreshToken,expiresAt:Z,accountId:Q.userInfo?.id}}catch{return}}function E($){let J=$?.trim();return J?J:void 0}function EG($){if(!QE($))return;try{let J=ZE($,"utf8"),Q=JSON.parse(J);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function fE($){let J=$.dataDir??jE(),Q=$.globalStatePath??Gj(J,"globalState.json"),Z=$.secretsPath??Gj(J,"secrets.json"),W=EG(Q),j=EG(Z);if(!W&&!j)return;return{globalState:W??{},secrets:j??{}}}function Fj($){if($===mQ)return bG;return $}function XE($,J,Q,Z){let W=Q==="plan"?"planMode":"actMode",j=J===Z?E(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,X={openrouter:`${W}OpenRouterModelId`,cline:`${W}ClineModelId`,openai:`${W}OpenAiModelId`,ollama:`${W}OllamaModelId`,lmstudio:`${W}LmStudioModelId`,litellm:`${W}LiteLlmModelId`,requesty:`${W}RequestyModelId`,together:`${W}TogetherModelId`,fireworks:`${W}FireworksModelId`,sapaicore:`${W}SapAiCoreModelId`,groq:`${W}GroqModelId`,baseten:`${W}BasetenModelId`,huggingface:`${W}HuggingFaceModelId`,"huawei-cloud-maas":`${W}HuaweiCloudMaasModelId`,oca:`${W}OcaModelId`,aihubmix:`${W}AihubmixModelId`,hicap:`${W}HicapModelId`,nousResearch:`${W}NousResearchModelId`,"vercel-ai-gateway":`${W}VercelAiGatewayModelId`}[J];return(X?E(typeof $[X]==="string"?$[X]:void 0):void 0)??j}function YE($,J,Q){let Z=Q==="plan"?$.planModeReasoningEffort:$.actModeReasoningEffort,W=Q==="plan"?$.geminiPlanModeThinkingLevel:$.geminiActModeThinkingLevel,j=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,f=(J==="gemini"?W:void 0)??Z,X=f==="none"||f==="low"||f==="medium"||f==="high"?f:void 0,Y=typeof j==="number"&&Number.isInteger(j)&&j>0?j:void 0;if(!X&&Y===void 0)return;return{...X?{effort:X}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function VE($){let J=$["openai-codex-oauth-credentials"];if(!J)return;try{let Q=JSON.parse(J),Z=E(Q.access_token),W=E(Q.refresh_token),j=E(Q.accountId);if(!Z&&!W&&!j)return;return{...Z?{apiKey:Z}:{},auth:{...Z?{accessToken:Z}:{},...W?{refreshToken:W}:{},...j?{accountId:j}:{}}}}catch{return}}function HE($){let J=vQ.getGeneratedModelsForProvider($);return Object.keys(J)[0]??void 0}function BE($,J,Q,Z){let W=Fj($),j=E(Z==="plan"?J.planModeApiProvider:J.actModeApiProvider),f=XE(J,$,Z,j)??HE(W),X=YE(J,W,Z),Y=typeof J.requestTimeoutMs==="number"&&Number.isInteger(J.requestTimeoutMs)&&J.requestTimeoutMs>0?J.requestTimeoutMs:void 0,V={anthropic:Q.apiKey,cline:Q.clineApiKey,openai:Q.openAiApiKey,"openai-native":Q.openAiNativeApiKey,openrouter:Q.openRouterApiKey,bedrock:Q.awsBedrockApiKey,gemini:Q.geminiApiKey,ollama:Q.ollamaApiKey,deepseek:Q.deepSeekApiKey,requesty:Q.requestyApiKey,together:Q.togetherApiKey,fireworks:Q.fireworksApiKey,qwen:Q.qwenApiKey,doubao:Q.doubaoApiKey,mistral:Q.mistralApiKey,litellm:Q.liteLlmApiKey,asksage:Q.asksageApiKey,xai:Q.xaiApiKey,moonshot:Q.moonshotApiKey,zai:Q.zaiApiKey,huggingface:Q.huggingFaceApiKey,nebius:Q.nebiusApiKey,sambanova:Q.sambanovaApiKey,cerebras:Q.cerebrasApiKey,groq:Q.groqApiKey,"huawei-cloud-maas":Q.huaweiCloudMaasApiKey,baseten:Q.basetenApiKey,"vercel-ai-gateway":Q.vercelAiGatewayApiKey,dify:Q.difyApiKey,minimax:Q.minimaxApiKey,hicap:Q.hicapApiKey,aihubmix:Q.aihubmixApiKey,nousResearch:Q.nousResearchApiKey,oca:Q.ocaApiKey},H={};if($==="openai-codex")Object.assign(H,VE(Q));if($==="cline")try{let U=E(Q["cline:clineAccountId"]);if(U)H.auth={...H.auth??{},...Dj(U)}}catch{}if($===mQ&&J.openAiHeaders)H.headers=J.openAiHeaders;if($==="bedrock"){let U=J.awsAuthentication==="profile"||J.awsUseProfile===!0;H.aws={accessKey:E(Q.awsAccessKey),secretKey:E(Q.awsSecretKey),sessionToken:E(Q.awsSessionToken),region:E(J.awsRegion),authentication:J.awsAuthentication,profile:U?E(J.awsProfile):void 0,usePromptCache:J.awsBedrockUsePromptCache,useCrossRegionInference:J.awsUseCrossRegionInference,useGlobalInference:J.awsUseGlobalInference,endpoint:E(J.awsBedrockEndpoint),customModelBaseId:E(Z==="plan"?J.planModeAwsBedrockCustomModelBaseId:J.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")H.gcp={projectId:E(J.vertexProjectId),region:E(J.vertexRegion)};if($===mQ&&(J.azureApiVersion||J.azureIdentity!==void 0))H.azure={apiVersion:E(J.azureApiVersion),useIdentity:J.azureIdentity};if($==="sapaicore")H.sap={clientId:E(Q.sapAiCoreClientId),clientSecret:E(Q.sapAiCoreClientSecret),tokenUrl:E(J.sapAiCoreTokenUrl),resourceGroup:E(J.sapAiResourceGroup),deploymentId:E(Z==="plan"?J.planModeSapAiCoreDeploymentId:J.actModeSapAiCoreDeploymentId),useOrchestrationMode:J.sapAiCoreUseOrchestrationMode};if($==="oca"){H.oca={mode:J.ocaMode};let U=E(Q.ocaRefreshToken);if(U)H.auth={...H.auth??{},refreshToken:U}}if($==="qwen")H.apiLine=J.qwenApiLine;if($==="moonshot")H.apiLine=J.moonshotApiLine;if($==="zai")H.apiLine=J.zaiApiLine;if($==="minimax")H.apiLine=J.minimaxApiLine;let B={anthropic:J.anthropicBaseUrl,openai:J.openAiBaseUrl,ollama:J.ollamaBaseUrl,lmstudio:J.lmStudioBaseUrl,litellm:J.liteLlmBaseUrl,gemini:J.geminiBaseUrl,requesty:J.requestyBaseUrl,asksage:J.asksageApiUrl,dify:J.difyBaseUrl,oca:J.ocaBaseUrl,aihubmix:J.aihubmixBaseUrl,sapaicore:J.sapAiCoreBaseUrl},A=E(V[$]),K=E(B[$]),G={provider:W,...A?{apiKey:A}:{},...f?{model:f}:{},...K?{baseUrl:K}:{},...X?{reasoning:X}:{},...Y?{timeout:Y}:{},...H},R=z8.safeParse(G);if(!R.success)return;return Object.keys(G).filter((U)=>U!=="provider").length>0?R.data:void 0}function AE($,J){if($!==bG)return;if(!J.baseUrl||!J.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:J.baseUrl,defaultModelId:J.model},models:{[J.model]:{id:J.model,name:J.model,contextWindow:yG,maxInputTokens:yG,capabilities:["streaming","tools","images"]}}}}function KE($,J){let Q=new Set;for(let W of[$.actModeApiProvider,$.planModeApiProvider]){let j=E(W);if(j)Q.add(j)}if(E(J.apiKey))Q.add("anthropic");if(E(J.openRouterApiKey))Q.add("openrouter");if(E(J.openAiApiKey))Q.add(mQ);if(E(J.openAiNativeApiKey))Q.add("openai-native");if(E(J["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(E(J.geminiApiKey))Q.add("gemini");if(E(J.ollamaApiKey))Q.add("ollama");if(E(J.awsAccessKey)||E(J.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||E($.awsProfile))Q.add("bedrock");if(E($.vertexProjectId)||E($.vertexRegion))Q.add("vertex");if(E(J.clineApiKey))Q.add("cline");let Z=Dj(E(J["cline:clineAccountId"]));if(Z?.accessToken||Z?.refreshToken||Z?.accountId)Q.add("cline");if(E(J.ocaApiKey))Q.add("oca");if(E(J.sapAiCoreClientId)||E(J.sapAiCoreClientSecret)||E($.sapAiCoreTokenUrl)||E($.sapAiCoreBaseUrl)||E($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function PJ($){let J=$.providerSettingsManager.read(),Q=fE($);if(!Q)return{migrated:!1,providerCount:Object.keys(J.providers).length,lastUsedProvider:J.lastUsedProvider};let{globalState:Z,secrets:W}=Q,j=Z.mode==="plan"?"plan":"act",f=KE(Z,W),X=L$();X.providers={...J.providers},X.lastUsedProvider=J.lastUsedProvider;let Y=new Date().toISOString(),V=0,H=Gj(WE($.providerSettingsManager.getFilePath()),"models.json"),B=$j(H),A=0;for(let R of f){let D=Fj(R);if(X.providers[D])continue;let U=BE(R,Z,W,j);if(!U)continue;X.providers[D]={settings:U,updatedAt:Y,tokenSource:"migration"},V+=1;let F=AE(D,U);if(F&&!B.providers[D])B.providers[D]=F,A+=1}if(V===0&&A===0)return{migrated:!1,providerCount:Object.keys(J.providers).length,lastUsedProvider:J.lastUsedProvider};let K=E(j==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),G=K?Fj(K):void 0;if(X.lastUsedProvider=J.lastUsedProvider??(G&&X.providers[G]?G:Object.keys(X.providers)[0]),$.providerSettingsManager.write(X),A>0)GG(H,B);return{migrated:V>0||A>0,providerCount:Object.keys(X.providers).length,lastUsedProvider:X.lastUsedProvider}}RQ();O0();YQ();var kG={};w(kG,{FileTeamPersistenceStore:()=>cQ});import{appendFileSync as GE,existsSync as Uj,mkdirSync as FE,readFileSync as DE,renameSync as UE,unlinkSync as RE,writeFileSync as zE}from"node:fs";import{join as Rj}from"node:path";import{resolveTeamDataDir as LE}from"@cline/shared/storage";function _E($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class cQ{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let J=_E($.teamName),Q=$.baseDir?.trim()||LE();this.dirPath=Rj(Q,J),this.statePath=Rj(this.dirPath,"state.json"),this.taskHistoryPath=Rj(this.dirPath,"task-history.jsonl")}loadState(){if(!Uj(this.statePath))return;try{let $=DE(this.statePath,"utf8"),J=JSON.parse($);if(J.version!==1||!J.teamState)return;for(let Q of J.teammates??[])this.teammateSpecs.set(Q.agentId,Q);return _A(J.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec($){this.teammateSpecs.set($.agentId,$)}removeTeammateSpec($){this.teammateSpecs.delete($)}persist($){if(!this.hasPersistableState($)){this.clearPersistedState();return}this.ensureDir();let J={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Q=`${this.statePath}.tmp`;zE(Q,`${JSON.stringify(J,null,2)}
|
|
726
|
-
`,"utf8"),
|
|
727
|
-
`,"utf8")}ensureDir(){if(!Uj(this.dirPath))FE(this.dirPath,{recursive:!0})}hasPersistableState($){let J=$.exportState();if(this.teammateSpecs.size>0)return!0;if(J.members.some((Q)=>Q.role==="teammate"))return!0;return J.tasks.length>0||J.mailbox.length>0||J.missionLog.length>0}clearPersistedState(){if(Uj(this.statePath))RE(this.statePath)}}var IG={};w(IG,{ChatViewStateSchema:()=>zj,ChatSummarySchema:()=>rQ,ChatSessionStatusSchema:()=>dQ,ChatSessionConfigSchema:()=>uQ,ChatMessageSchema:()=>pQ,ChatMessageRoleSchema:()=>lQ});import{z as h}from"zod";var uQ=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()}),dQ=h.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),lQ=h.enum(["user","assistant","tool","system","status","error"]),pQ=h.object({id:h.string().min(1),sessionId:h.string().nullable(),role:lQ,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()}),rQ=h.object({toolCalls:h.number().int().nonnegative(),tokensIn:h.number().int().nonnegative(),tokensOut:h.number().int().nonnegative()}),zj=h.object({sessionId:h.string().nullable(),status:dQ,config:uQ,messages:h.array(pQ),rawTranscript:h.string(),error:h.string().nullable(),summary:rQ});var xG={};w(xG,{CORE_BUILD_VERSION:()=>Lj});var Lj=DB;import{Agent as jb,createAgentRuntime as fb}from"@cline/agents";var mG={};w(mG,{fetchClineRecommendedModels:()=>_j,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>iQ});import{getClineEnvironmentConfig as OE}from"@cline/shared";var TE=5000,iQ={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}]};function ME($){return{recommended:$.recommended.map((J)=>({...J,tags:[...J.tags]})),free:$.free.map((J)=>({...J,tags:[...J.tags]}))}}function gG($){if(!$||typeof $!=="object")return null;let J=$;if(typeof J.id!=="string"||J.id.length===0)return null;return{id:J.id,name:typeof J.name==="string"&&J.name.length>0?J.name:J.id,description:typeof J.description==="string"?J.description:"",tags:Array.isArray(J.tags)?J.tags.filter((Q)=>typeof Q==="string"):[]}}function qE($){if(!$||typeof $!=="object")return null;let J=$,Q=Array.isArray(J.recommended)?J.recommended:[],Z=Array.isArray(J.free)?J.free:[],W=Q.map(gG).filter((f)=>f!==null),j=Z.map(gG).filter((f)=>f!==null);if(W.length===0&&j.length===0)return null;return{recommended:W,free:j}}function PE($){let J=$.baseUrl?.trim();if(J)return J;let Q=OE().apiBaseUrl;try{return($.providerSettingsManager??new _1).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function NE($,J,Q){let Z=new AbortController,W=setTimeout(()=>Z.abort(),Q);try{return await $(J,{signal:Z.signal})}finally{clearTimeout(W)}}async function _j($={}){try{let J=PE($),Q=$.fetchImpl??fetch,Z=await NE(Q,`${J}/api/v1/ai/cline/recommended-models`,$.timeoutMs??TE);if(!Z.ok)throw Error(`HTTP ${Z.status}`);let W=await Z.json(),j=qE(W);if(j)return j}catch{}return ME(iQ)}var vG={};w(vG,{loadLlmsConfigFromFile:()=>Tj,defineLlmsConfig:()=>Oj});import{readFile as wE}from"node:fs/promises";import SE from"node:path";function Oj($){return $}async function Tj($){let J=SE.resolve($),Q=await wE(J,"utf8"),Z;try{Z=JSON.parse(Q)}catch(W){let j=W instanceof Error?W.message:String(W);throw Error(`Failed to parse JSON config at "${J}": ${j}`)}return CE(Z,J)}function CE($,J){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${J}": expected an object.`);let Z=$.providers;if(!Array.isArray(Z))throw Error(`Invalid llms config in "${J}": "providers" must be an array.`);if(!Z.length)throw Error(`Invalid llms config in "${J}": "providers" cannot be empty.`);return $}var rG={};w(rG,{createLlmsSdk:()=>qj,DefaultLlmsSdk:()=>NJ});import{BUILT_IN_PROVIDER_IDS as dG,createHandler as bE,createHandlerAsync as hE,getProviderCollection as kE,hasProvider as lG,registerAsyncHandler as IE,registerHandler as xE,registerModel as gE,registerProvider as pG}from"@cline/llms";function cG($){return $?{...$}:{}}function yE($,J){if($)return $;if(!J)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[J]}function EE($,J){if(!J.length)throw Error(`Provider "${$}" must include at least one model.`)}function uG($){let J=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:J,defaultModel:$.collection.provider.defaultModelId,modelCount:J.length}}class Mj{providers=new Map;register($){EE($.id,$.models);let J=$.defaultModel??$.models[0];if(!J)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(J))throw Error(`Default model "${J}" is not included in configured models for "${$.id}".`);let Q=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Q?.models??[],...$.models]),defaultModel:J,defaults:{...Q?.defaults??{},...cG($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:yE($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...cG($.settings)}})}registerModel($,J){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([J]),defaultModel:J,defaults:{}});return}Q.models.add(J)}createHandlerConfig($){let J=this.require($.providerId),Q=$.modelId??J.defaultModel;if(!J.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...J.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,J){return this.providers.get($)?.models.has(J)??!1}require($){let J=this.providers.get($);if(!J)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return J}}class NJ{configuredProviders=new Mj;constructor($){this.applyConfig($)}createHandler($){return bE(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return hE(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(pG($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)xE($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)IE($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let J=$.exposeModels??Object.keys($.models),Q=$.defaultModel??J[0];if(!Q)throw Error(`Provider "${$.id}" must define a default model.`);pG({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Q,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:J,defaultModel:Q,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){gE($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...dG]}async getBuiltInProviders(){return(await Promise.all(dG.map((J)=>kE(J)))).filter((J)=>J!==void 0).map((J)=>uG({collection:J}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,J){return this.configuredProviders.hasModel($,J)}applyConfig($){for(let J of $.providers)this.configuredProviders.registerSelectionConfig(J);for(let J of $.models??[])this.registerModel(J);for(let J of $.customProviders??[])this.registerProvider(J);for(let J of this.configuredProviders.list()){let Q=lG(J.id),Z=this.configuredProviders.createHandlerConfig({providerId:J.id,modelId:J.defaultModel}).routingProviderId,W=typeof Z==="string"&&lG(Z);if(!Q&&!W)throw Error(`Provider "${J.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function qj($){return new NJ($)}X3();async function mE(){return Promise.resolve().then(() => (RQ(),pK))}function Bb(){return new Date().toISOString()}var Ab="cline",Kb="cline-pass";function Gb($){if(sG($)!=="providers.json")return;let J=Nj($);if(sG(J)!=="settings")return;return Nj(J)}class _1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??Hb(),this.dataDir=$.dataDir??Gb(this.filePath),this.dataDir||!$.filePath)PJ({providerSettingsManager:this,dataDir:this.dataDir});if(_G(this),EQ(this.read()),Pj(this.filePath))try{aG(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!Pj(this.filePath))return L$();try{let $=Yb(this.filePath,"utf8"),J=JSON.parse($),Q=L8.safeParse(J);if(Q.success)return EQ(Q.data),Q.data}catch{}return L$()}write($){let J=L8.parse($),Q=Nj(this.filePath);if(!Pj(Q))Xb(Q,{recursive:!0,mode:448});Vb(this.filePath,`${JSON.stringify(J,null,2)}
|
|
728
|
-
`,"utf8");try{aG(this.filePath,384)}catch{}EQ(J)}saveProviderSettings($,J={}){let Q=z8.parse($),Z=this.read(),W=Q.provider,j=J.setLastUsed!==!1,f=Z.providers[W],X=J.tokenSource??f?.tokenSource??"manual",Y={...Z,providers:{...Z.providers,[W]:{settings:Q,updatedAt:Bb(),tokenSource:X}},lastUsedProvider:j?W:Z.lastUsedProvider};return this.write(Y),Y}resolveProviderSettings($,J){let Q=$.providers[J]?.settings,W=Z0(J)?.storageProviderId;if(!W||W===J)return Q;let j=$.providers[W]?.settings;if(!j)return Q;return z8.parse({...j.auth?{auth:j.auth}:{},...j.apiKey?{apiKey:j.apiKey}:{},...j.baseUrl?{baseUrl:j.baseUrl}:{},...Q??{},provider:J})}getProviderSettings($){let J=this.read();return this.resolveProviderSettings(J,$)}resolveLastUsedProviderId($,J){let Q=$.lastUsedProvider;if(Q===Kb&&J.isClinePassEnabled===!1)return Ab;return Q}getLastUsedProviderSettings($={}){let J=this.read(),Q=this.resolveLastUsedProviderId(J,$);if(!Q)return;return this.resolveProviderSettings(J,Q)}getProviderConfig($,J){let Q=this.getProviderSettings($);if(!Q)return;return d0(Q,J)}getLastUsedProviderConfig($={}){let J=this.getLastUsedProviderSettings($);if(!J)return;return d0(J,$)}async refreshCatalog(){try{await U8({})}catch{}}}O0();g8();function Fb($,J){let Q=$?.expiresAt,Z=J?.expiresAt;return $?.accessToken===J?.accessToken&&$?.refreshToken===J?.refreshToken&&$?.accountId===J?.accountId&&Q===Z}class nQ 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 wj{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new _1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let J=Z0($.providerId);if(!J)return null;return this.resolveWithSingleFlight(J.providerId,J.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,J,Q=!1){let Z=this.refreshInFlight.get(J);if(Z)return Z;let W=this.resolveProviderApiKeyInternal($,J,Q).catch((j)=>{throw j}).finally(()=>{this.refreshInFlight.delete(J)});return this.refreshInFlight.set(J,W),W}async resolveProviderApiKeyInternal($,J,Q){let Z=Z0($);if(!Z)return null;let W=this.providerSettingsManager.getProviderSettings(J);if(!W)return null;let j=L4($,W);if(!j)return null;let f=await Z.refresh({settings:W,credentials:j,forceRefresh:Q,telemetry:this.telemetry});if(!f)throw new nQ($);let X=x$({manager:this.providerSettingsManager,providerId:$,settings:W,credentials:f,setLastUsed:!1,save:!1}),Y=!Fb(W.auth,X.auth);if(Y)this.providerSettingsManager.saveProviderSettings(X,{setLastUsed:!1,tokenSource:"oauth"});return{apiKey:Z.getApiKey(X)??f.access,accountId:f.accountId,refreshed:Y}}}import{normalizeUserInput as Db}from"@cline/shared";import{nanoid as Ub}from"nanoid";class oG{list($){return $?e0($):[]}update($,J){if(!$)return{sessionId:J.sessionId,prompts:[],updated:!1};let Q=J.promptId.trim(),Z=$.pendingPrompts.findIndex((Y)=>Y.id===Q);if(Z<0)return{sessionId:J.sessionId,prompts:e0($),updated:!1};let W=$.pendingPrompts[Z];if(!W)return{sessionId:J.sessionId,prompts:e0($),updated:!1};let j=J.prompt===void 0?W.prompt:Db(J.prompt).trim();if(!j)throw Error("prompt cannot be empty");let f=J.delivery??W.delivery,X={...W,prompt:j,mode:J.mode??W.mode,delivery:f};return $.pendingPrompts.splice(Z,1),Rb($,X,Z,W.delivery),{sessionId:J.sessionId,prompts:e0($),prompt:aQ(X),updated:!0}}delete($,J){if(!$)return{sessionId:J.sessionId,prompts:[],removed:!1};let Q=J.promptId.trim(),Z=$.pendingPrompts.findIndex((j)=>j.id===Q);if(Z<0)return{sessionId:J.sessionId,prompts:e0($),removed:!1};let[W]=$.pendingPrompts.splice(Z,1);return{sessionId:J.sessionId,prompts:e0($),prompt:W?aQ(W):void 0,removed:!0}}enqueue($,J){let{prompt:Q,mode:Z,delivery:W,userImages:j,userFiles:f}=J,X=$.pendingPrompts.findIndex((Y)=>Y.prompt===Q);if(X>=0){let[Y]=$.pendingPrompts.splice(X,1),V={...Y,prompt:Q,mode:Z??Y.mode,userImages:j??Y.userImages,userFiles:f??Y.userFiles};if(W==="steer"||Y.delivery==="steer")$.pendingPrompts.unshift({...V,delivery:"steer"});else $.pendingPrompts.push(V)}else{let Y={id:`pending_${Date.now()}_${Ub(5)}`,prompt:Q,mode:Z,delivery:W,userImages:j,userFiles:f};if(W==="steer")$.pendingPrompts.unshift(Y);else $.pendingPrompts.push(Y)}return e0($)}consumeSteer($){let J=$.pendingPrompts.findIndex((Z)=>Z.delivery==="steer");if(J<0)return{prompts:e0($)};let[Q]=$.pendingPrompts.splice(J,1);return{entry:Q,prompts:e0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:e0($)}}requeueFront($,J){return $.pendingPrompts.unshift(J),e0($)}clear($){return $.pendingPrompts.length=0,[]}}class Sj{deps;service=new oG;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let J=this.deps.getSession($.sessionId);if(!J||J.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(J,$);return this.emitPrompts(J),this.scheduleDrain($.sessionId,J),Q}delete($){let J=this.deps.getSession($.sessionId);if(!J||J.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(J,$);return this.emitPrompts(J),this.scheduleDrain($.sessionId,J),Q}enqueue($,J){let Q=this.deps.getSession($);if(!Q||Q.aborting)return;this.service.enqueue(Q,J),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let J=this.deps.getSession($);if(!J)return;let{entry:Q}=this.service.consumeSteer(J);if(!Q)return;return this.emitPrompts(J),this.emitSubmitted(J,Q),Q}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:e0($)}})}scheduleDrain($,J){if(J.pendingPrompts.length===0||J.aborting||J.drainingPendingPrompts||!J.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let J=this.deps.getSession($);if(!J)return;if(J.aborting||J.drainingPendingPrompts)return;if(!J.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(J);if(!Q)return;this.emitPrompts(J),this.emitSubmitted(J,Q),J.drainingPendingPrompts=!0;let Z=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{Z=!1,this.service.requeueFront(J,Q),this.emitPrompts(J)}finally{if(J.drainingPendingPrompts=!1,Z&&J.pendingPrompts.length>0&&J.status!=="failed"&&J.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,J){let Q=aQ(J);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount}})}}function aQ($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0)}}function e0($){return $.pendingPrompts.map(aQ)}function Rb($,J,Q,Z){if(J.delivery==="steer")$.pendingPrompts.unshift(J);else if(Z==="steer")$.pendingPrompts.push(J);else $.pendingPrompts.splice(Q,0,J)}O0();class yj{deps;constructor($){this.deps=$}dispatchAgentEvent($,J,Q){let Z=this.deps.getSession($),W={sessionId:$,config:J,liveSession:Z,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},j=f7(Q),f=!!Z&&(!j.agentId||j.agentId===Cj(Z.agent));X7(W,Q,f?{isPrimaryAgentEvent:!0,agentId:Cj(Z.agent),conversationId:Z.agent.getConversationId(),...Z?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,J){let Q=this.deps.getSession($);if(Q){if(pW(Q,J),J.type==="agent_event"){let Z={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};X7(Z,J.event,{agentId:J.agentId,teamRole:"teammate",teamAgentId:J.agentId,isPrimaryAgentEvent:!1})}if(J.type==="teammate_spawned"){let Z=g1({agentId:J.teammate.runtimeAgentId??J.agentId,conversationId:J.teammate.conversationId,parentAgentId:J.teammate.parentAgentId,createdByAgentId:Cj(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:J.agentId});if(Z)$$(Q.config.telemetry,{ulid:$,modelId:J.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...Z})}}if(await rW($,J,this.deps.invokeBackendOptional),Q)iW(Q,$,J,this.deps.emit)}async handlePluginEvent($,J,Q){if(J.name==="plugin_log"){this.handlePluginLog($,J.payload);return}if(J.name==="automation_event"){let Y=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!Y)return;let V=J.payload&&typeof J.payload==="object"?J.payload:void 0;if(!V)return;await Y.ingestEvent(V);return}if(J.name!=="steer_message"&&J.name!=="queue_message"&&J.name!=="pending_prompt")return;let Z=J.payload&&typeof J.payload==="object"?J.payload:void 0,W=typeof Z?.sessionId==="string"&&Z.sessionId.trim().length>0?Z.sessionId.trim():$,j=typeof Z?.prompt==="string"?Z.prompt.trim():"";if(!j)return;let f=J.name==="steer_message"?"steer":J.name==="queue_message"?"queue":Z?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(W,{prompt:j,delivery:f})}handlePluginLog($,J,Q){let Z=this.deps.getSession($),W=Q??Z?.config.extensionContext?.logger??Z?.config.logger;if(!W||!J||typeof J!=="object")return;let j=J,f=typeof j.message==="string"?j.message:"";if(!f)return;let X=j.metadata&&typeof j.metadata==="object"?{...j.metadata}:{};if(X.sessionId??=$,typeof j.pluginName==="string"&&j.pluginName)X.pluginName=j.pluginName;if(j.level==="debug"){W.debug(f,X);return}if(j.level==="error"){if(W.error)W.error(f,X);else W.log(f,{...X,severity:"error"});return}W.log(f,X)}}function Cj($){return $.getAgentId()}function Ej($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:G$($.config),teamName:$.config.teamName?.trim()||void 0,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,parentSessionId:typeof $.sessionMetadata?.parentSessionId==="string"?$.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof $.sessionMetadata?.parentAgentId==="string"?$.sessionMetadata.parentAgentId:void 0,agentId:typeof $.sessionMetadata?.agentId==="string"?$.sessionMetadata.agentId:void 0,conversationId:typeof $.sessionMetadata?.conversationId==="string"?$.sessionMetadata.conversationId:void 0,isSubagent:typeof $.sessionMetadata?.isSubagent==="boolean"?$.sessionMetadata.isSubagent:!1,prompt:$.pendingPrompt,metadata:$.sessionMetadata,messagesPath:$.artifacts?.messagesPath,updatedAt:$.updatedAt??$.endedAt??$.startedAt}}function bj($,J){let Q=$[J];return typeof Q==="function"?Q:null}async function tG($,J,...Q){let Z=bj($,J);if(!Z)throw Error(`session service method not available: ${J}`);return Promise.resolve(Z.apply($,Q))}async function eG($,J,...Q){let Z=bj($,J);if(!Z)return;await Promise.resolve(Z.apply($,Q))}async function $F($,J,...Q){let Z=bj($,J);if(!Z)return;return await Promise.resolve(Z.apply($,Q))}W1();O0();function hj($,J,Q){return{onSubAgentEvent:(Z)=>$.onAgentEvent(Q,J,Z),onSubAgentStart:(Z)=>{let W=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(Z.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let j=g1({agentId:Z.subAgentId,conversationId:Z.conversationId,parentAgentId:Z.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:Z.parentAgentId});if(j)$$(J.telemetry,{ulid:Q,modelId:J.modelId,provider:J.providerId,...j});B4(J.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:Z.parentAgentId,agentId:Z.subAgentId,...j}),$.invokeBackendOptional("handleSubAgentStart",Q,Z)},onSubAgentEnd:(Z)=>{let W=$.getSession(Q)?.runtime.teamRuntime,j=$.subAgentStarts.get(Z.subAgentId),f=j?Date.now()-j.startedAt:0,X=Z.result?.text?Z.result.text.split(`
|
|
729
|
-
`).length:0;B4(J.telemetry,{event:"ended",ulid:Q,durationMs:f,outputLines:X,errorMessage:Z.error?String(Z.error):void 0,agentId:Z.subAgentId,parentId:Z.parentAgentId,...g1({agentId:Z.subAgentId,conversationId:Z.conversationId,parentAgentId:Z.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:Z.parentAgentId})}),$.subAgentStarts.delete(Z.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,Z)}}}function kj($,J,Q,Z){let W=hj($,J,Q);return A$({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:J.providerId,modelId:J.modelId,cwd:J.cwd,apiKey:J.apiKey,baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking,maxIterations:J.maxIterations,hooks:J.hooks,extensions:J.extensions,logger:J.logger,telemetry:J.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:J.providerId,modelId:J.modelId,apiKey:J.apiKey,baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let f=J.enableTools?n$({cwd:J.cwd,...c0[h1({mode:J.mode})],executors:Z}):[];if(J.enableSpawnAgent)f.push(kj($,J,Q,Z));return I1(f)},...W})}import{readFile as zb,stat as Lb}from"node:fs/promises";var _b=20480000;async function JF($){let J=await Lb($);if(!J.isFile())throw Error("Path is not a file");if(J.size>_b)throw Error("File is too large to read into context.");let Q=await zb($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var QF=5000;function wJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Sb($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$,Q=wJ(J.inputTokens),Z=wJ(J.outputTokens),W=wJ(J.cacheReadTokens),j=wJ(J.cacheWriteTokens),f=wJ(J.totalCost);if(Q===void 0||Z===void 0||W===void 0||j===void 0||f===void 0)return;return{inputTokens:Q,outputTokens:Z,cacheReadTokens:W,cacheWriteTokens:j,totalCost:f}}function Cb($,J){return{inputTokens:Math.max($.inputTokens,J.inputTokens),outputTokens:Math.max($.outputTokens,J.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,J.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,J.cacheWriteTokens),totalCost:Math.max($.totalCost,J.totalCost)}}class L1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new o6;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new y$;constructor($){let J=Tb();if(J)wb(J);let Q=b0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new W4,this.createAgentInstance=$.createAgent??((Z)=>new V$(Z)),this.defaultCapabilities=L0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new _1,this.oauthTokenManager=$.oauthTokenManager??new wj({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new Sj({getSession:(Z)=>this.sessions.get(Z),emit:(Z)=>this.emit(Z),send:(Z)=>this.runTurn(Z)}),this.pendingPrompts={list:async(Z)=>this.pendingPromptsController.list(Z.sessionId),update:async(Z)=>this.pendingPromptsController.update(Z),delete:async(Z)=>this.pendingPromptsController.delete(Z)},this.eventBridge=new yj({getSession:(Z)=>this.sessions.get(Z),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(Z)=>this.emit(Z),persistMessages:(Z,W,j)=>{this.invoke("persistSessionMessages",Z,W,j)},enqueuePendingPrompt:(Z,W)=>this.pendingPromptsController.enqueue(Z,W),invokeBackendOptional:(Z,...W)=>this.invokeOptional(Z,...W)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let J=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!J?.apiKey)return $;return{...$,config:{...$.config,apiKey:J.apiKey}}}async startSession($){let J=$.source??U0.CLI,Q=e(),Z=$.config.sessionId?.trim()??"",W=Z||qb(),j=await this.applyInitialOAuthCredentials($),f=j.initialMessages??[],X=f.length>0?f8(f):G0(),Y=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!Y)throw Error("session service method not available: ensureSessionsDir");let V=Ij(Y,W),H=Ij(V,`${W}.messages.json`),B=Ij(V,`${W}.json`),A=G$($.config),K=S0.parse({version:1,session_id:W,source:J,pid:process.pid,started_at:Q,status:"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:A,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:H}),G;if(Z.length>0&&f.length>0&&!j.prompt?.trim()){let C=await this.invokeOptionalValue("readSessionManifest",W);if(C)K=C,G={manifestPath:B,messagesPath:C.messages_path||H,manifest:C}}let D=await this.seedAggregateUsageFromArtifacts({initialUsage:X,sessionDir:V,rootMessagesPath:G?.messagesPath??H,manifest:K});this.usageBySession.set(W,X),this.aggregateUsageBySession.set(W,D);let U=L0(this.defaultCapabilities,$.capabilities),F=U?.toolExecutors??this.toolExecutors,O=$.localRuntime,T=O?.extensionContext?.logger??O?.logger,L=O?.extensionContext?.automation,z,P={getSession:(C)=>this.sessions.get(C),subAgentStarts:this.subAgentStarts,onAgentEvent:(C,F0,f0)=>this.eventBridge.dispatchAgentEvent(C,F0,f0),invokeBackendOptional:(C,...F0)=>this.invokeOptional(C,...F0)};z=await xV({input:j,localRuntime:$.localRuntime,sessionId:W,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:U,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(C)=>{if(C.name==="plugin_log"){this.eventBridge.handlePluginLog(W,C.payload,T);return}this.eventBridge.handlePluginEvent(W,C,L)},onTeamEvent:(C)=>{this.eventBridge.handleTeamEvent(W,C),z.config.onTeamEvent?.(C)},createSpawnTool:()=>kj(P,z.config,W,F),createSubAgentLifecycleCallbacks:(C)=>hj(P,C,W),readSessionMetadata:async()=>(await this.getSession(W))?.metadata,writeSessionMetadata:async(C)=>{await this.persistSessionMetadata(W,()=>C)}});let S=await this.runtimeBuilder.build(z.runtimeBuilderInput),b=z.config,u=z.providerConfig;if(S.teamRuntime&&!b.teamName?.trim())b.teamName=S.teamRuntime.getTeamName();let o=[...S.tools,...b.extraTools??[]],J0=S.extensions??z.extensions,t={sessionId:W,providerId:u.providerId,modelId:u.modelId,apiKey:u.apiKey,baseUrl:u.baseUrl,headers:u.headers,knownModels:u.knownModels,providerConfig:u,thinking:b.thinking,reasoningEffort:b.reasoningEffort??u.reasoningEffort,systemPrompt:b.systemPrompt,maxIterations:b.maxIterations,execution:b.execution,prepareTurn:P4(b),tools:o,hooks:z.hooks,extensions:J0,hookErrorMode:b.hookErrorMode,initialMessages:z.effectiveInput.initialMessages,userFileContentLoader:JF,toolPolicies:z.toolPolicies,requestToolApproval:z.requestToolApproval?async(C)=>{let F0=z.requestToolApproval,f0=this.sessions.get(W);if(f0)await this.markTurnPending(f0);try{if(!F0)return{approved:!1,reason:"Tool approval callback is not configured."};return await F0(C)}finally{let w0=this.sessions.get(W);if(w0?.status==="pending")await this.markTurnRunning(w0)}}:void 0,telemetry:b.telemetry,onConsecutiveMistakeLimitReached:b.onConsecutiveMistakeLimitReached,completionPolicy:S.completionPolicy,consumePendingUserMessage:()=>{let C=this.pendingPromptsController.consumeSteer(W);return C?HJ(C.prompt,C.mode??b.mode):void 0},logger:S.logger??b.logger,extensionContext:b.extensionContext,onEvent:(C)=>this.eventBridge.dispatchAgentEvent(W,b,C)};t.hooks={...t.hooks,onEvent:async(C)=>{if(await z.hooks?.onEvent?.(C),C.type!=="assistant-message")return;let F0=this.sessions.get(W);if(!F0)return;let f0=F0.agent.getMessages();try{await this.invoke("persistSessionMessages",W,f0,b.systemPrompt)}catch(w0){b.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:W,error:w0}),h2(b.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:w0,severity:"warn",handled:!0,context:{sessionId:W,providerId:b.providerId,modelId:b.modelId}})}}};let $1=this.createAgentInstance(t);if(t.onEvent)$1.subscribeEvents(t.onEvent);S.registerLeadAgent?.($1);let b$=g1({agentId:$1.getAgentId(),conversationId:$1.getConversationId(),teamId:S.teamRuntime?.getTeamId(),teamName:S.teamRuntime?.getTeamName(),teamRole:S.teamRuntime?"lead":void 0});if(mV(b,W,Z.length>0,A,b$),b$)$$(b.telemetry,{ulid:W,modelId:b.modelId,provider:b.providerId,...b$});if(S.teamRuntime)pJ(b.telemetry,{ulid:W,teamId:S.teamRuntime.getTeamId(),teamName:S.teamRuntime.getTeamName(),leadAgentId:$1.getAgentId(),restoredFromPersistence:S.teamRestoredFromPersistence===!0});let n={sessionId:W,config:b,sessionMetadata:j.sessionMetadata,...G?{artifacts:G}:{},source:J,startedAt:G?.manifest.started_at??Q,updatedAt:G?.manifest.ended_at??G?.manifest.started_at??Q,pendingPrompt:K.prompt,runtime:S,agent:$1,started:!1,status:G?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:f,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:z.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(this.sessions.set(W,n),this.emitStatus(W,"running"),f.length>0&&!G){if(await this.ensureSessionPersisted(n),await this.invoke("persistSessionMessages",n.sessionId,f,n.config.systemPrompt),!j.prompt?.trim())await this.updateStatus(n,"completed",0)}let O1;try{if(j.prompt?.trim())if(O1=await this.executeTurn(n,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!n.interactive)await this.finalizeSingleRun(n,O1.finishReason);else await this.completeInteractiveTurn(n,O1.finishReason)}catch(C){if(n.interactive&&n.aborting)O1=await this.completeAbortedInteractiveTurn(n);else throw h2(n.config.telemetry,{component:"core",operation:"session.start",error:C,severity:"error",handled:!1,context:{sessionId:n.sessionId,providerId:n.config.providerId,modelId:n.config.modelId}}),await this.failSession(n),C}return{sessionId:W,manifest:K,manifestPath:B,messagesPath:H,result:O1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(J)=>this.getSession(J),readMessages:(J)=>this.readSessionMessages(J),buildStartInput:(J,Q)=>{let Z=J.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:J.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...Z?{sessionMetadata:Z}:{},initialMessages:J.initialMessages}},startSession:(J)=>this.startSession(J),getStartedSessionId:(J)=>J.sessionId,readRestoredSession:(J)=>this.getSession(J)})}async runTurn($){let J=this.getSessionOrThrow($.sessionId),Q=J.agent.canStartRun(),Z=$.delivery??(J.interactive&&!Q?"queue":void 0);if(J.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:Z??"immediate"}}),Z==="queue"||Z==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:Z,userImages:$.userImages,userFiles:$.userFiles});return}try{let W=await this.executeTurn(J,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!J.interactive)await this.finalizeSingleRun(J,W.finishReason);else await this.completeInteractiveTurn(J,W.finishReason);if(W.finishReason==="error"||W.finishReason==="aborted")return W;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),W}catch(W){if(J.interactive&&J.aborting)return await this.completeAbortedInteractiveTurn(J);throw h2(J.config.telemetry,{component:"core",operation:"session.submit",error:W,severity:"error",handled:!1,context:{sessionId:J.sessionId,providerId:J.config.providerId,modelId:J.config.modelId}}),await this.failSession(J),W}}async getAccumulatedUsage($){let J=zW(this.usageBySession.get($)),Q=zW(this.aggregateUsageBySession.get($));return J||Q?{usage:J,aggregateUsage:Q}:void 0}async abort($,J){let Q=this.sessions.get($);if(!Q)return;Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,this.pendingPromptsController.clearAborted(Q),Q.agent.abort(J)}async stopSession($){let J=this.sessions.get($);if(!J)return;if(J.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),J.interactive&&!j0(J.status)){await this.releaseSessionRuntime(J,"session_stop");return}if(J.interactive&&J.agent.canStartRun()){await this.shutdownSession(J,{status:this.resolveInteractiveStopStatus(J),exitCode:this.resolveInteractiveStopExitCode(J),shutdownReason:"session_stop",endReason:"stopped"});return}J.aborting=!0,J.agent.abort(Error("session_stop")),await this.shutdownSession(J,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let J=[...this.sessions.values()];if(J.length===0)return;await Promise.allSettled(J.map((Q)=>Q.interactive&&!j0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let J=this.sessions.get($);if(J)return Ej(J);let Q=$.trim();if(!Q)return;let Z=await this.getRow(Q);if(Z)return $6(Z);let W=await this.readManifest(Q);return W?m9(W):void 0}async listSessions($=200){let Q=(await this.listRows($)).map($6),Z=new Set(Q.map((W)=>W.sessionId));for(let W of this.sessions.values()){if(Z.has(W.sessionId))continue;Q.unshift(Ej(W))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let J=await this.invoke("deleteSession",$);if(J.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return J.deleted}async updateSession($,J){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:J.prompt,metadata:J.metadata,title:J.title}))?.updated===!0}}async readSessionMessages($){let J=$.trim();if(!J)return[];let Q=await this.getRow(J);if(Q?.messagesPath)return q$(Q.messagesPath);let Z=await this.readManifest(J);return q$(Z?.messages_path)}async dispatchHookEvent($){await YB($,{queueSpawnRequest:(J)=>this.invokeOptional("queueSpawnRequest",J),upsertSubagentSessionFromHook:(J)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",J),appendSubagentHookAudit:(J,Q)=>this.invokeOptional("appendSubagentHookAudit",J,Q),applySubagentStatus:(J,Q)=>this.invokeOptional("applySubagentStatus",J,Q)})}subscribe($,J){return this.events.subscribe($,J)}async updateSessionModel($,J){let Q=this.getSessionOrThrow($);Q.config.modelId=J,Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:J}),Q.agent.updateConnection({modelId:J})}handlePluginEvent($,J,Q){return this.eventBridge.handlePluginEvent($,J,Q)}async executeTurn($,J){let Q=await this.prepareTurnInput($,J),Z=Q.prompt.trim();if(!Z)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=Z;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let W=await this.executeAgentTurn($,Z,Q.userImages,Q.userFiles);while(nW($,W.finishReason)){let j=await aW($);if(j.length===0)break;let f=sW($,j);W=await this.executeAgentTurn($,f)}return W}async completeInteractiveTurn($,J){if(VJ($))return;$.lastInteractiveTurnFinishReason=J,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let J=$.lastInteractiveTurnFinishReason;if(!J)return"cancelled";switch(J){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return J}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let J=new Date,Q=$.agent.getMessages(),Z=G0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:Z}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:Z,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:J,endedAt:J,durationMs:0}}async executeAgentTurn($,J,Q,Z){let W=$.started||$.agent.getMessages().length>0,j=$.persistedMessages??$.agent.getMessages(),f=this.usageBySession.get($.sessionId)??G0(),X=this.aggregateUsageBySession.get($.sessionId)??f;$.turnUsageBaseline=f,$.turnAggregateUsageBaseline=X,$.turnPrimaryUsage=G0(),$.turnUsageByAgent=new Map,gJ($.config.telemetry,$.sessionId,$.config.mode),g2($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let Y=W?()=>$.agent.continue(J,Q,Z):()=>$.agent.run(J,Q,Z),V=await this.runWithAuthRetry($,Y,j);$.started=!0;let H=y5(V.messages,V,j);$.persistedMessages=H;let B=Q6($.turnUsageByAgent?.values()??[]),A=V0(f,V.usage),K=V0(V0(G0(),V.usage),B),G=V0(X,K);return this.usageBySession.set($.sessionId,A),this.aggregateUsageBySession.set($.sessionId,G),await this.persistSessionMetadata($.sessionId,(R)=>({...R??{},totalCost:A.totalCost,aggregatedAgentsCost:G.totalCost,usage:A,aggregateUsage:G})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,V),V}catch(Y){throw h2($.config.telemetry,{component:"core",operation:"session.turn",error:Y,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),Y}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,J){if($.submitAndExitObserved)return;if(!J.toolCalls.some((Z)=>Z.name===K0.SUBMIT_AND_EXIT&&Z.error===void 0))return;$.submitAndExitObserved=!0,V4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,J){let Q=G$($.config),Z=Nb(J.prompt).trim();if(!Z)return{prompt:"",userImages:J.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,J.userFiles)};let W=await a2(Z,Q);vV($.config.telemetry,W);let j=HJ(W.prompt,J.mode??$.config.mode),f=this.resolveAbsoluteFilePaths($.config.cwd,J.userFiles),X=this.resolveAbsoluteFilePaths(Q,W.matchedFiles),Y=Array.from(new Set([...f,...X]));return{prompt:j,userImages:J.userImages,userFiles:Y.length>0?Y:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let J=G$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:J,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,J){let Q=this.sessions.get($),Z=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,W=J(Z?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:W}))?.updated===!1)return;Q.sessionMetadata=W,Q.artifacts.manifest.metadata=W}async finalizeSingleRun($,J){if(VJ($))return;let Q=J==="aborted"||$.aborting,Z=J==="error";await this.shutdownSession($,{status:Q?"cancelled":Z?"failed":"completed",exitCode:Z?1:0,shutdownReason:Z?"session_error":"session_complete",endReason:J})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,J){if(J.status==="completed"&&!$.submitAndExitObserved)V4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});QQ($);let Q=[],Z=(W,j)=>{Q.push(j),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:W,error:j,severity:"warn"}),h2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,status:J.status,shutdownReason:J.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,J.status,J.exitCode)}catch(W){Z("update_status",W)}try{await $.agent.shutdown(J.shutdownReason)}catch(W){Z("agent_shutdown",W)}}try{await Promise.resolve($.runtime.shutdown(J.shutdownReason))}catch(W){Z("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){Z("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:J.endReason,ts:Date.now()}}),Q.length>0&&J.status==="failed")throw Q[0]}async releaseSessionRuntime($,J){let Q=[],Z=(W,j)=>{Q.push(j),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:W,error:j,severity:"warn"}),h2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,reason:J,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(J)}catch(W){Z("agent_shutdown",W)}try{await Promise.resolve($.runtime.shutdown(J))}catch(W){Z("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){Z("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,J,Q){if(!$.artifacts)return;let Z=await this.invoke("updateSessionStatus",$.sessionId,J,Q);if(!Z.updated)return;let W=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(W.status=J,j0(J))delete W.ended_at,W.exit_code=null;else W.ended_at=Z.endedAt??e(),W.exit_code=typeof Q==="number"?Q:null;$.artifacts.manifest=W,$.status=J,$.updatedAt=Z.endedAt??e(),$.endedAt=j0(J)?null:W.ended_at,$.exitCode=W.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,W),this.emitStatus($.sessionId,J)}async runWithAuthRetry($,J,Q){try{return await J()}catch(Z){if(!I$($.config.providerId)||!Pb(Z))throw Z;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),J()}}async syncOAuthCredentials($,J){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:J?.forceRefresh})}catch(Z){if(Z instanceof nQ)throw Error(`${Z.providerId} requires re-authentication.`);throw Z}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let J=this.sessions.get($);if(!J){let Q=new u1($);throw h2(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return J}resolveAbsoluteFilePaths($,J){if(!J||J.length===0)return[];let Q=J.map((Z)=>Z.trim()).filter((Z)=>Z.length>0).map((Z)=>Mb(Z)?Z:xj($,Z));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return g1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let J=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=V0($.initialUsage,J);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,J,Q){let Z=xj(J),W=`${Q}.messages.json`,j;try{j=Ob($)}catch{return G0()}let f=G0();for(let X of j){if(!X.endsWith(".messages.json"))continue;if(X===W)continue;let Y=xj($,X);if(Y===Z)continue;let V=await q$(Y);if(V.length===0)continue;f=V0(f,f8(V))}return f}withPersistedAggregateUsageFloor($,J){let Q=Sb(J.metadata?.aggregateUsage);if(Q)return Cb($,Q);let Z=J.metadata?.aggregatedAgentsCost;if(typeof Z!=="number"||!Number.isFinite(Z)||Z<=$.totalCost)return $;return{...$,totalCost:Z}}emitStatus($,J){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:J}})}async emitSessionSnapshot($){let J=await this.getSession($);if(!J)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:F1({session:J,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),QF))}async getRow($){let J=$.trim();if(!J)return;return(await this.listRows(QF)).find((Z)=>Z.sessionId===J)}async readManifest($){let J=$.trim();if(!J)return;return await this.invokeOptionalValue("readSessionManifest",J)}invoke($,...J){return tG(this.sessionService,$,...J)}invokeOptional($,...J){return eG(this.sessionService,$,...J)}invokeOptionalValue($,...J){return $F(this.sessionService,$,...J)}}function Eb($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((J)=>({name:J.name,input:J.input,output:J.output,error:J.error,durationMs:J.durationMs}))}}function bb($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function UQ($={}){let J=new L1({sessionService:new z1(new U1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Q){let Z=(Q.cwd?.trim()||Q.workspaceRoot).trim(),W=await J.startSession({source:Q.source?.trim()||U0.CLI,interactive:!1,config:{providerId:yb(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:Z,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:bb(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{configExtensions:Q.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(Q,Z){let W=await J.runTurn({sessionId:Q,prompt:Z.prompt,userImages:Z.attachments?.userImages,userFiles:Z.attachments?.userFiles?.map((j)=>j.content)});if(!W)throw Error("local hub schedule runtime returned no turn result");return{result:Eb(W)}},async abortSession(Q){return await J.abort(Q,Error("hub schedule abort")),{applied:!0}},async stopSession(Q){return await J.stopSession(Q),{applied:!0}}}}kb(process.env.CLINE_VCR);function xb($){let J=process.cwd(),Q,Z,W;for(let j=0;j<$.length;j+=1){let f=$[j],X=$[j+1];if(f==="--cwd"&&X){J=X,j+=1;continue}if(f==="--host"&&X){Q=X,j+=1;continue}if(f==="--port"&&X){let Y=Number(X);if(Number.isFinite(Y))Z=Y;j+=1;continue}if(f==="--pathname"&&X)W=X,j+=1}return{cwd:J,host:Q,port:Z,pathname:W}}async function gb(){let $=xb(process.argv.slice(2));process.chdir($.cwd);let J=i0({host:$.host,port:$.port,pathname:$.pathname}),Q=await C2({host:J.host,port:J.port,pathname:J.pathname,owner:Ib()==="production"?n0():E0(),runtimeHandlers:UQ(),cronOptions:{workspaceRoot:$.cwd}}),Z=async()=>{await Q.close(),process.exit(0)},W=!1,j=(f,X)=>{if(W)return;W=!0;let Y=X instanceof Error?X.stack||X.message:String(X);process.stderr.write(`[hub-daemon] ${f}: ${Y}
|
|
730
|
-
`),Q.close().catch((V)=>{let H=V instanceof Error?V.stack||V.message:String(V);process.stderr.write(`[hub-daemon] shutdown after ${
|
|
731
|
-
`)}).finally(()=>{process.exit(1)})};process.on("SIGINT",()=>{Z()}),process.on("SIGTERM",()=>{Z()}),process.on("uncaughtException",(
|
|
732
|
-
`);return}j("unhandledRejection",
|
|
732
|
+
version = team_outcome_fragments.version + 1`,[Z,j.outcomeId,j.id,j.section,j.sourceAgentId,j.sourceRunId??null,j.content,j.status,j.reviewedBy??null,j.reviewedAt?j.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,J){let Q=W4($),Z=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[Q]);if(Z.length===0)return[];let W=g3();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
|
|
733
|
+
WHERE team_name = ? AND status IN ('queued', 'running')`,[J,W,Q]),Z.map((j)=>j.run_id)}handleTeamEvent($,J){this.appendTeamEvent($,J.type,J)}}function m3($={}){try{let J=new y2($);return J.init(),J}catch{let J=new NJ({teamDir:$.teamDir});return J.init(),J}}function w9($,J){return hC($,J)}function IC($,J){let Q=J?.["*"]??{},Z=J?.[$]??{};return{...Q,...Z}.enabled!==!1}function xC($,J){return $.filter((Q)=>IC(Q.name,J))}function v3($,J){return I1(xC($,J))}var gC={apply_diff:"editor",attempt_completion:"submit_and_exit",bash:"run_commands",execute_command:"run_commands",list_code_definition_names:"search_codebase",list_files:"run_commands",read_file:"read_files",replace_in_file:"editor",search_files:"search_codebase",use_skill:"skills",write_to_file:"editor"};function mC($){let J=$.trim().toLowerCase();return gC[J]??J}function vC($,J){if(J.tools===void 0)return $;let Q=new Set(J.tools.map(mC));if(J.skills!==void 0)Q.add("skills");return $.filter((Z)=>Q.has(Z.name))}function C9(){return`team-${kC(5)}`}function S9($,J,Q,Z,W,j,X,f){let Y=c0[h1({mode:Q})],V=t2(J,Z,Q,W??o2);return v3(n$({cwd:$,...Y,enableSkills:!!X,...V,executors:{...X?{skills:X}:{},...f??{}}}),j)}function cC($){return S9($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,uC,$.toolExecutors).some((J)=>J.name==="skills")}var uC=async()=>"";async function dC($){let J=K0();if(!c1({filePath:J}))return{tools:[]};let Q=new A2({clientFactory:C8({settingsPath:J})}),Z;try{Z=await B2(Q,{filePath:J})}catch(f){await Q.dispose().catch(()=>{});let Y=f instanceof Error?f.message:String(f);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${Y}`),{tools:[]}}let W=Z.filter((f)=>f.disabled!==!0),j=await Promise.allSettled(W.map((f)=>E8({serverName:f.name,provider:Q}))),X=[];for(let[f,Y]of j.entries())if(Y.status==="fulfilled")X.push(...Y.value);else{let V=Y.reason instanceof Error?Y.reason.message:String(Y.reason);$?.log(`[mcp] Failed to load tools from MCP server "${W[f].name}", skipping: ${V}`)}return{tools:X,shutdown:async()=>{await Q.dispose()}}}function lC($,J){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,J)}catch{}}function pC($){if($===void 0)return!0;switch($){case"session_stop":case"session_complete":case"session_error":case"session_manager_dispose":case"cli_run_shutdown":case"cli_interactive_shutdown":case"cli_interactive_startup_cancelled":case"provider_change":case"acp_shutdown":case"hub_server_stop":case"vscode_webview_dispose":return!0;default:return!1}}function rC($){let J=c0[h1({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??J.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??J.enableAgentTeams??!0,disableMcpSettingsTools:$.disableMcpSettingsTools===!0,yolo:$.yolo===!0,missionLogIntervalSteps:typeof $.missionLogIntervalSteps==="number"&&Number.isFinite($.missionLogIntervalSteps)?$.missionLogIntervalSteps:3,missionLogIntervalMs:typeof $.missionLogIntervalMs==="number"&&Number.isFinite($.missionLogIntervalMs)?$.missionLogIntervalMs:120000}}class j4{teamRuntimeEntries=new Map;async build($){let{config:J,hooks:Q,extensions:Z,logger:W,telemetry:j,createSpawnTool:X,onTeamRestored:f,userInstructionService:Y,configExtensions:V,toolExecutors:H}=$,B=$.onTeamEvent??(()=>{}),A=rC(J),K=J.workspaceRoot??J.cwd,G=$.toolPolicies??J.toolPolicies,R=B1(),D=[],U=J.teamName?.trim()||C9(),F=J.sessionId?.trim()||U,O=A.enableSpawnAgent?v8({workspaceRoot:K}):{configs:[],errors:[]},T=O.configs.some((m)=>m.skills!==void 0),z=w9(V,"rules"),L=w9(V,"skills"),P=L||T,S=w9(V,"workflows"),b=w9(V,"plugins"),u=z||L||S,o=!1,J0=Boolean(Y),t=Y,$1;for(let m of O.errors)(W??J.logger)?.log?.(`[agents] Failed to load agent config at ${m.path}: ${m.error.message}`);if(!t&&(u||T))t=_$({skills:P?{workspacePath:K,includePluginSkills:b,pluginSkillDirectories:b?$.pluginSkillDirectories:void 0,pluginPaths:J.pluginPaths,cwd:J.cwd}:{workspacePath:K},rules:{workspacePath:J.cwd},workflows:{workspacePath:J.cwd}});if(t)await t.start().catch(()=>{});let b$=A.enableTools&&L&&Boolean(t)&&t?.hasConfiguredSkills(J.skills)===!0&&cC({cwd:J.cwd,providerId:J.providerId,mode:A.mode,modelId:J.modelId,toolRoutingRules:J.toolRoutingRules,toolPolicies:G,toolExecutors:H}),r=t&&u?t.createExtension({includeRules:z,includeSkills:L,includeWorkflows:S,registerSkillsTool:b$,allowedSkillNames:J.skills}):void 0,O1=r?[...Z??J.extensions??[],r]:Z??J.extensions;if(A.enableTools){if(D.push(...S9(J.cwd,J.providerId,A.mode,J.modelId,J.toolRoutingRules,G,void 0,H)),!A.disableMcpSettingsTools){let m=await dC(J.logger);D.push(...m.tools),$1=m.shutdown}}let C,X0=A.enableAgentTeams?m3():void 0,f0=X0?.loadRuntime(F),w0=f0?.state,k2=f0?.teammates??[],T1=new Map(k2.map((m)=>[m.agentId,m])),Y1=J.sessionId||U,V4,I2=[],bJ=!1,M1=H$({providerId:J.providerId,modelId:J.modelId,cwd:J.cwd,apiKey:J.apiKey??"",baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking,maxIterations:J.maxIterations,hooks:Q,extensions:O1,logger:W??J.logger,telemetry:$.telemetry??J.telemetry,workspaceMetadata:J.workspaceMetadata});if(A.enableSpawnAgent){if(O.configs.length>0)D.push(...v3(c8({configProvider:M1,agents:O.configs,createSubAgentTools:(m)=>A.enableTools?vC(S9(J.cwd,m.providerId??J.providerId,A.mode,m.modelId??J.modelId,J.toolRoutingRules,G,m.skills!==void 0&&t?.createSkillsExecutor?t.createSkillsExecutor(m.skills):void 0,H),m):[],hookErrorMode:J.hookErrorMode,toolPolicies:G,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),G))}if(!this.teamRuntimeEntries.has(Y1))this.teamRuntimeEntries.set(Y1,{delegatedAgentConfigProvider:M1});let hJ=()=>{if(!A.enableAgentTeams)return;let m=this.teamRuntimeEntries.get(Y1)??{delegatedAgentConfigProvider:M1};if(this.teamRuntimeEntries.set(Y1,m),C=m.runtime,!C){if(C=new T2({teamName:U,leadAgentId:J.sessionId||"lead",missionLogIntervalSteps:A.missionLogIntervalSteps,missionLogIntervalMs:A.missionLogIntervalMs,onTeamEvent:(Q0)=>{if(B(Q0),C&&X0){if(Q0.type==="teammate_spawned"&&Q0.teammate?.rolePrompt){let q1={agentId:Q0.agentId,rolePrompt:Q0.teammate.rolePrompt,modelId:Q0.teammate.modelId,maxIterations:Q0.teammate.maxIterations};T1.set(q1.agentId,q1)}if(Q0.type==="teammate_shutdown"&&!pC(Q0.reason))T1.delete(Q0.agentId);X0.handleTeamEvent(F,Q0),X0.persistRuntime(F,C.exportState(),Array.from(T1.values()))}}}),w0)C.hydrateState(w0),bJ=!0;m.runtime=C}if(!o){if(!C)return;o=!0;let Q0=Z8({runtime:C,leadAgentId:J.sessionId||"lead",restoredFromPersistence:Boolean(w0),restoredTeammates:k2,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(q1)=>{I2=q1,V4?.addTools(q1)},createBaseTools:A.enableTools?()=>S9(J.cwd,J.providerId,A.mode,J.modelId,J.toolRoutingRules,G,void 0,H):void 0,teammateConfigProvider:M1});if(bJ)C.recoverActiveRuns("runtime_recovered");if(Q0.restoredFromPersistence)f?.();D.push(...Q0.tools)}return C};if(A.enableSpawnAgent&&X){let m=X();D.push({...m,execute:async(Q0,q1)=>{return hJ(),m.execute(Q0,q1)}})}if(A.enableAgentTeams)hJ();let x2=v3(D,G),QZ=x2.some((m)=>m.name==="submit_and_exit"&&m.lifecycle?.completesRun===!0),kJ=A.enableAgentTeams?()=>{let m=this.teamRuntimeEntries.get(Y1)?.runtime;if(!m)return;let Q0=m.listTasks(),q1=Q0.some((t1)=>t1.status==="in_progress"||t1.status==="pending"),cj=m.listRuns({}),GF=cj.some((t1)=>t1.status==="running"||t1.status==="queued");if(q1||GF){let t1=Q0.filter((x0)=>x0.status==="in_progress"||x0.status==="pending").map((x0)=>`${x0.id} (${x0.status}): ${x0.title}`).join(", "),uj=cj.filter((x0)=>x0.status==="running"||x0.status==="queued").map((x0)=>`${x0.id} (${x0.status})`).join(", "),ZZ=[];if(t1)ZZ.push(`Unfinished tasks: ${t1}`);if(uj)ZZ.push(`Active runs: ${uj}`);return`[SYSTEM] You still have team obligations. ${ZZ.join(". ")}. Use team_run_task to delegate work, or team_task with action=complete to mark tasks done, or team_await_runs to wait for active runs. Do NOT stop until all tasks are completed.`}return}:void 0,KF=QZ?{requireCompletionTool:!0,...kJ?{completionGuard:kJ}:{}}:kJ?{completionGuard:kJ}:void 0;return{tools:x2,logger:W??J.logger,telemetry:j??J.telemetry,teamRuntime:C,teamRestoredFromPersistence:Boolean(w0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(Y1)?.delegatedAgentConfigProvider??M1,extensions:O1,completionPolicy:KF,registerLeadAgent:(m)=>{if(V4=m,I2.length>0)m.addTools(I1(I2,[...R]))},shutdown:async(m)=>{if(lC(C,m),this.teamRuntimeEntries.delete(Y1),await $1?.(),!J0)t?.stop()}}}}var BG={};w(BG,{requestDesktopToolApproval:()=>u3});import{mkdir as iC,readFile as nC,unlink as aC,writeFile as sC}from"node:fs/promises";import{join as HG}from"node:path";function oC($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function tC($){return new Promise((J)=>setTimeout(J,$))}async function c3($){try{await aC($)}catch{}}async function u3($,J={}){let Q=J.approvalDir?.trim(),Z=J.sessionId?.trim();if(!Q||!Z)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await iC(Q,{recursive:!0});let W=oC(`${$.toolCallId}`),j=HG(Q,`${Z}.request.${W}.json`),X=HG(Q,`${Z}.decision.${W}.json`),f=J.nowIso??(()=>new Date().toISOString());await sC(j,`${JSON.stringify({requestId:W,sessionId:Z,createdAt:f(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
|
|
734
|
+
`,"utf8");let Y=J.timeoutMs??300000,V=J.pollIntervalMs??200,H=Date.now();while(Date.now()-H<Y){try{let B=await nC(X,"utf8"),A=JSON.parse(B),K={approved:A.approved===!0,reason:typeof A.reason==="string"?A.reason:void 0};return await Promise.all([c3(X),c3(j)]),K}catch{}await tC(V)}return await c3(j),{approved:!1,reason:"Tool approval request timed out"}}W1();var FG={};w(FG,{syncPluginMcpServersToSettings:()=>r3,removePluginMcpServersFromSettings:()=>wJ,disablePluginMcpServersInSettings:()=>i3});import{existsSync as eC,mkdirSync as $y,readFileSync as Jy,writeFileSync as Qy}from"node:fs";import{dirname as KG,isAbsolute as Zy,relative as Wy,resolve as AG}from"node:path";function E2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function y9($,J){let Q=Wy(AG($),AG(J));return Q===""||!Q.startsWith("..")&&!Zy(Q)}function d3($){if(!eC($))return{mcpServers:{}};try{let J=JSON.parse(Jy($,"utf8"));if(E2(J))return J}catch(J){throw Error(`Invalid MCP settings at "${$}": ${J instanceof Error?J.message:String(J)}`)}throw Error(`Invalid MCP settings at "${$}": expected an object`)}function l3($){if(E2($.mcpServers))return{...$.mcpServers};return{}}function p3($,J,Q){$y(KG($),{recursive:!0}),Qy($,`${JSON.stringify({...J,mcpServers:Q},null,2)}
|
|
735
|
+
`,"utf8")}function GG($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((J)=>J.trim()).filter((J)=>J.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((J)=>J.trim()).filter((J)=>J.length>0))]}}function b9($){if(!E2($))return;let J=$.metadata;return E2(J)?J:void 0}function E9($,J){let Q=b9($);if(!Q||Q.source!=="plugin")return!1;let Z=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,W=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(J.pluginName&&Z===J.pluginName){if(!J.pluginPath||W===J.pluginPath)return!0}if(W&&J.pluginPath&&(W===J.pluginPath||y9(J.pluginPath,W)||y9(W,J.pluginPath)))return!0;if(Z&&J.pluginNames?.some((j)=>j===Z))return!0;if(W&&J.pluginPaths?.some((j)=>W===j||y9(j,W)||y9(W,j)))return!0;return!1}function jy($){let J=E2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:KG($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...J,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function Xy($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let J=await A8({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],Z=[],W=(J.failures??[]).map((j)=>({pluginPath:j.pluginPath,pluginName:j.pluginName,message:j.message}));for(let j of J.extensions??[]){let X=j.__clinePluginPath;if(!X)continue;if(!j.setup){Q.push({pluginName:j.name,pluginPath:X});continue}let f=[],Y={registerTool:(V)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(V)=>{if(!j.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');f.push(V)}};try{await j.setup(Y,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(V){W.push({pluginPath:X,pluginName:j.name,message:V instanceof Error?V.message:String(V)});continue}Q.push({pluginName:j.name,pluginPath:X});for(let V of f)Z.push({pluginName:j.name,pluginPath:X,server:{...V,metadata:{...V.metadata??{},source:"plugin",pluginName:j.name,pluginPath:X}}})}return{plugins:Q,servers:Z,failures:W}}finally{await J.shutdown().catch(()=>{})}}async function r3($){let J=$.settingsPath??K0(),Q={mutations:[],failures:[]},Z;try{Z=await Xy($)}catch(V){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:V instanceof Error?V.message:String(V)});return Q}Q.failures.push(...Z.failures);let W;try{W=d3(J)}catch(V){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:V instanceof Error?V.message:String(V)});return Q}let j=l3(W),X=new Map,f=new Map;for(let V of Z.plugins)X.set(V.pluginPath,new Set),f.set(V.pluginPath,V.pluginName);let Y=IQ(Z.servers.map((V)=>({server:V.server,owner:V,ownerLabel:V.pluginName})));for(let V of Y){let H=V.owner;if(!X.has(H.pluginPath))X.set(H.pluginPath,new Set);if(V.name)X.get(H.pluginPath)?.add(V.name);if(!V.registration){Q.mutations.push({name:V.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:V.loadError??"invalid MCP server registration"});continue}let B=j[V.registration.name];if(B!==void 0){if(!E9(B,{pluginName:H.pluginName,pluginPath:H.pluginPath})){Q.mutations.push({name:V.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}j[V.registration.name]=jy({registration:V.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:E2(B)?B:void 0}),Q.mutations.push({name:V.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:B===void 0?"created":"updated"})}for(let[V,H]of Object.entries(j)){let B=b9(H),A=typeof B?.pluginPath==="string"?B.pluginPath:"",K=X.get(A);if(K&&E9(H,{pluginPath:A})&&!K.has(V))delete j[V],Q.mutations.push({name:V,pluginName:typeof B?.pluginName==="string"?B.pluginName:f.get(A)??"plugin",pluginPath:A,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((V)=>V.action!=="skipped"))try{p3(J,W,j)}catch(V){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:V instanceof Error?V.message:String(V)})}return Q}function i3($){let J=$.settingsPath??K0(),Q;try{Q=d3(J)}catch{return[]}let Z=l3(Q),W=GG($),j=[];for(let[X,f]of Object.entries(Z)){if(!E2(f)||!E9(f,W))continue;let Y=b9(f);Z[X]={...f,disabled:!0},j.push({name:X,pluginName:typeof Y?.pluginName==="string"?Y.pluginName:"plugin",pluginPath:typeof Y?.pluginPath==="string"?Y.pluginPath:"",action:"disabled"})}if(j.length>0)p3(J,Q,Z);return j}function wJ($){let J=$.settingsPath??K0(),Q;try{Q=d3(J)}catch{return[]}let Z=l3(Q),W=GG($),j=[];for(let[X,f]of Object.entries(Z)){if(!E9(f,W))continue;let Y=b9(f);delete Z[X],j.push({name:X,pluginName:typeof Y?.pluginName==="string"?Y.pluginName:"plugin",pluginPath:typeof Y?.pluginPath==="string"?Y.pluginPath:"",action:"removed"})}if(j.length>0)p3(J,Q,Z);return j}W1();var LG={};w(LG,{uninstallPlugin:()=>Jj});import{existsSync as f4,readdirSync as fy,readFileSync as Yy,rmdirSync as Vy,rmSync as Hy,statSync as By}from"node:fs";import{basename as t0,dirname as E$,extname as Ay,isAbsolute as Ky,join as o1,relative as Gy,resolve as X4,sep as n3}from"node:path";import{discoverPluginModulePaths as Fy,resolvePluginConfigSearchPaths as Dy}from"@cline/shared/storage";var e3="_installed",Uy="package",Ry=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function a3($){return $.trim().toLowerCase()}function f1($,J){let Q=J?.trim();if(!Q)return;$.add(Q)}function Ly($){return $.replace(/-[0-9a-f]{12}$/i,"")}function s3($){let J=Ay($);return J?$.slice(0,-J.length):$}function o3($){if(!f4($))return;try{let J=JSON.parse(Yy($,"utf8"));return typeof J.name==="string"?J.name.trim():void 0}catch{return}}function $j($,J){let Q=Gy(J,$);return Q===""||!Q.startsWith("..")&&!Ky(Q)}function DG($){let Q=X4($).split(n3),Z=Q.lastIndexOf(e3);if(Z<0)return;let W=Q[Z+1];if(!W)return;let j=Ry.get(W)??1,X=Z+2+j;if(Q.length<X)return;let f=Q.slice(0,X).join(n3)||n3;return f4(f)?f:void 0}function h9($){try{return fy($,{withFileTypes:!0})}catch{return[]}}function zy($){let J=o1($,e3);if(!f4(J))return[];let Q=[];for(let Z of h9(J)){if(!Z.isDirectory())continue;let W=o1(J,Z.name);if(Z.name==="git"){for(let j of h9(W)){if(!j.isDirectory())continue;let X=o1(W,j.name);for(let f of h9(X))if(f.isDirectory())Q.push(o1(X,f.name))}continue}for(let j of h9(W))if(j.isDirectory())Q.push(o1(W,j.name))}return Q.sort((Z,W)=>Z.localeCompare(W))}function UG($){try{return Fy($)}catch{return[]}}function t3($){let J=UG($),Q=new Set;f1(Q,t0($)),f1(Q,Ly(t0($))),f1(Q,o3(o1($,"package.json"))),f1(Q,o3(o1($,Uy,"package.json")));for(let Z of J)f1(Q,t0(Z)),f1(Q,s3(t0(Z)));return{installPath:$,entryPaths:J,names:[...Q].sort((Z,W)=>Z.localeCompare(W)),installed:!0}}function _y($,J){let Q=X4($),Z=J.find((X)=>$j(Q,X));if(!Z)return;let W=E$(Q);while(W!==Z&&W!==E$(W)){if(f4(o1(W,"package.json")))return W;W=E$(W)}let j=t0(Q);if((j==="index.ts"||j==="index.js")&&E$(Q)!==Z)return E$(Q);return Q}function RG($,J){let Q=_y($,J);if(!Q)return;let Z=new Set;return f1(Z,t0($)),f1(Z,s3(t0($))),f1(Z,t0(Q)),f1(Z,s3(t0(Q))),f1(Z,o3(o1(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...Z].sort((W,j)=>W.localeCompare(j)),installed:!1}}function Oy($){let J=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return Dy(J).filter((Q)=>f4(Q))}function Ty($){let J=new Map;for(let Q of $){for(let Z of zy(Q))J.set(Z,t3(Z));for(let Z of UG(Q)){let W=DG(Z);if(W){if(!J.has(W))J.set(W,t3(W));continue}let j=RG(Z,$);if(j)J.set(j.installPath,j)}}return[...J.values()].sort((Q,Z)=>Q.installPath.localeCompare(Z.installPath))}function My($,J){let Q=a3(J);if(!Q)return!1;if(a3($.installPath)===Q)return!0;return $.names.some((Z)=>a3(Z)===Q)}function qy($,J,Q){let Z=X4($);for(let j of J){if($j(Z,j.installPath))return j;if(j.entryPaths.some((X)=>X4(X)===Z))return j}let W=DG(Z);if(W)return t3(W);if(f4(Z))return RG(Z,Q);return}function Py($){let J=M0(),Q=J.disabledPlugins;if(!Q?.length)return;let Z=Q.filter((W)=>{let j=X4(W);if($j(j,$.installPath))return!1;return!$.entryPaths.some((X)=>X4(X)===j)});if(Z.length===Q.length)return;k1({...J,disabledPlugins:Z})}function Ny($){let J=E$($);while(J!==E$(J)&&t0(J)!==e3){try{Vy(J)}catch{return}J=E$(J)}}function wy($){return`${$.names[0]??t0($.installPath)} at ${$.installPath}`}async function Jj($){let J=Oy($),Q=Ty(J),Z=$.path?.trim(),W=$.name?.trim(),j;if(Z){if(j=qy(Z,Q,J),!j)throw Error(`No plugin found at ${Z}`)}else{if(!W)throw Error("plugin uninstall requires a plugin name");let f=Q.filter((Y)=>My(Y,W));if(f.length===0)throw Error(`No plugin found matching "${W}"`);if(f.length>1)throw Error(`Multiple plugins match "${W}": ${f.map(wy).join(", ")}`);j=f[0]}let X=By(j.installPath,{throwIfNoEntry:!1});if(!X)throw Error(`Plugin install path does not exist: ${j.installPath}`);if(wJ({pluginPaths:[j.installPath,...j.entryPaths],pluginNames:j.names}),Hy(j.installPath,{recursive:X.isDirectory(),force:!0}),Py(j),j.installed)Ny(j.installPath);return{name:W||j.names[0]||t0(j.installPath),installPath:j.installPath,removedPaths:[j.installPath],entryPaths:j.entryPaths}}var mG={};w(mG,{updateLocalProvider:()=>u9,saveLocalProviderSettings:()=>Vj,saveLocalProviderOAuthCredentials:()=>Kj,resolveLocalClineAuthToken:()=>Fj,refreshProviderModelsFromSource:()=>Hj,normalizeOAuthProvider:()=>Bj,loginLocalProvider:()=>Aj,loginAndSaveLocalProviderOAuthCredentials:()=>Gj,listLocalProviders:()=>fj,getLocalProviderModels:()=>Yj,ensureCustomProvidersLoaded:()=>m9,deleteLocalProvider:()=>d9,addLocalProvider:()=>Xj});import*as N0 from"@cline/llms";import{existsSync as Sy,mkdirSync as Cy,readFileSync as yy,writeFileSync as Ey}from"node:fs";import{mkdir as by,readFile as hy,writeFile as ky}from"node:fs/promises";import{dirname as Qj,join as Iy}from"node:path";import*as I0 from"@cline/llms";import{ModelCapabilitySchema as xy,ProviderCapabilitySchema as gy,ProviderClientSchema as my,ProviderProtocolSchema as vy}from"@cline/shared";import{z as n}from"zod";var cy=n.object({id:n.string().optional(),name:n.string().optional(),maxTokens:n.number().optional(),contextWindow:n.number().optional(),maxInputTokens:n.number().optional(),capabilities:n.array(xy).optional(),supportsVision:n.boolean().optional(),supportsAttachments:n.boolean().optional(),supportsReasoning:n.boolean().optional()}).passthrough(),uy=n.object({name:n.string(),baseUrl:n.string(),defaultModelId:n.string().optional(),protocol:vy.optional(),client:my.optional(),capabilities:n.array(gy).optional(),modelsSourceUrl:n.string().optional()}).passthrough(),zG=n.object({provider:uy.optional(),models:n.record(n.string(),cy).optional()}).passthrough(),_G=n.object({version:n.literal(1),providers:n.record(n.string(),zG)}),dy=n.object({version:n.literal(1),providers:n.record(n.string(),n.unknown())}),k9=new Set;function OG($){return $.split(/[-_]/).filter(Boolean).map((J)=>J.charAt(0).toUpperCase()+J.slice(1)).join(" ")}function b2($){return Iy(Qj($.getFilePath()),"models.json")}function I9(){return{version:1,providers:{}}}function TG($){let J=dy.safeParse($);if(!J.success)return I9();let Q={};for(let[Z,W]of Object.entries(J.data.providers)){let j=zG.safeParse(W);if(j.success)Q[Z]=j.data}return{version:1,providers:Q}}function Zj($){if(!Sy($))return I9();try{let J=yy($,"utf8");return TG(JSON.parse(J))}catch{}return I9()}async function Y4($){try{let J=await hy($,"utf8");return TG(JSON.parse(J))}catch{}return I9()}function MG($,J){Cy(Qj($),{recursive:!0});let Q=_G.parse(J);Ey($,`${JSON.stringify(Q,null,2)}
|
|
736
|
+
`,"utf8")}async function x9($,J){await by(Qj($),{recursive:!0});let Q=_G.parse(J);await ky($,`${JSON.stringify(Q,null,2)}
|
|
737
|
+
`,"utf8")}function qG($,J){return{id:$,name:J.name??$,supportsAttachments:J.capabilities?.includes("files"),supportsVision:J.capabilities?.includes("images"),supportsReasoning:J.capabilities?.includes("reasoning")||J.thinkingConfig!=null}}function PG($){if(!$||$.length===0)return;let J=new Set;if($.includes("reasoning"))J.add("reasoning");if($.includes("prompt-cache"))J.add("prompt-cache");if($.includes("tools"))J.add("tools");return J.size>0?[...J]:void 0}function NG($){let J=new Set;if(!$||$.length===0)return[...J];if($.includes("streaming"))J.add("streaming");if($.includes("tools"))J.add("tools");if($.includes("reasoning"))J.add("reasoning");if($.includes("prompt-cache"))J.add("prompt-cache");if($.includes("vision"))J.add("images"),J.add("files");return[...J]}function ly($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function wG($,J){return $??J??"openai-chat"}function SG($,J,Q){return $??Q??(J==="openai-responses"?"openai":"openai-compatible")}function CG($,J,Q){let Z=new Set(J?.capabilities??Q??[]);if(J?.supportsVision)Z.add("images");if(J?.supportsAttachments)Z.add("files");if(J?.supportsReasoning)Z.add("reasoning");return{id:$,name:J?.name??$,maxTokens:J?.maxTokens,contextWindow:J?.contextWindow,maxInputTokens:J?.maxInputTokens,capabilities:Z.size>0?[...Z]:void 0}}function py($,J){for(let[Q,Z]of Object.entries(J??{})){let W=Z.id?.trim()||Q.trim();if(!W)continue;I0.registerModel($,W,CG(W,Z))}}function ry($,J,Q){return{...J??{},id:$,name:J?.name??$,capabilities:J?.capabilities??Q}}function iy($){return Object.assign({},...I0.resolveProviderModelCatalogKeys($).map((Q)=>I0.getGeneratedModelsForProvider(Q)))}function ny($){let J=$.provider.trim();if(!J||I0.isBuiltInProviderId(J))return;let Q=$.baseUrl?.trim();if(!Q)return;let Z=I0.MODEL_COLLECTIONS_BY_PROVIDER_ID[J],W=iy(J),j=NG($.capabilities),X=j.length>0?j:void 0,f=$.model?.trim(),Y={...W,...Z?.models??{}};if(f)Y[f]=ry(f,Y[f],X);let V=Object.keys(Y).filter(Boolean),H=f||V[0];if(!H)return;let B=wG($.protocol,Z?.provider.protocol),A=SG($.client,B,Z?.provider.client);I0.registerProvider({provider:{id:J,name:Z?.provider.name??OG(J),description:Z?.provider.description,protocol:B,client:A,baseUrl:Q,modelsSourceUrl:Z?.provider.modelsSourceUrl,defaultModelId:H,capabilities:PG($.capabilities)??Z?.provider.capabilities,source:"file"},models:Y})}function g9($){for(let J of Object.values($.providers))ny(J.settings)}function SJ($,J){let Q=J.models??{};if(!ly(J.provider)){py($,Q);return}let Z=NG(J.provider.capabilities),W=Object.entries(Q).map(([V,H])=>({id:H.id?.trim()||V.trim(),model:H})).filter(({id:V})=>V.length>0),j=J.provider.defaultModelId?.trim()||W[0]?.id||"default",X=wG(J.provider.protocol,void 0),f=SG(J.provider.client,X,void 0),Y=Object.fromEntries(W.map(({id:V,model:H})=>[V,{...CG(V,H,Z.length>0?Z:void 0),status:"active"}]));I0.registerProvider({provider:{id:$,name:J.provider.name.trim()||OG($),protocol:X,client:f,baseUrl:J.provider.baseUrl,modelsSourceUrl:J.provider.modelsSourceUrl,defaultModelId:j,capabilities:PG(J.provider.capabilities),source:"file"},models:Y})}function yG($){let J=b2($);if(k9.has(J))return;let Q=Zj(J);for(let[Z,W]of Object.entries(Q.providers))SJ(Z,W);k9.add(J)}async function m9($){let J=b2($);if(k9.has(J))return;let Q=await Y4(J);for(let[Z,W]of Object.entries(Q.providers))SJ(Z,W);k9.add(J)}var ay="cline-pass";function sy($){return $.apiKey??$.auth?.apiKey}function oy($){return($.auth?.accessToken?.trim()??"").length>0}function bG($){return $.split(/[-_]/).filter(Boolean).map((J)=>J.charAt(0).toUpperCase()+J.slice(1)).join(" ")}function ty($){let J=$.split(/\s+/).filter(Boolean);if(J.length===0)return"?";if(J.length===1)return J[0].slice(0,2).toUpperCase();return`${J[0][0]}${J[1][0]}`.toUpperCase()}function ey($){let J=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let Z of $)Q=Q*31+Z.charCodeAt(0)>>>0;return J[Q%J.length]}function hG($){return Object.entries($).sort(([J],[Q])=>J.localeCompare(Q)).map(([J,Q])=>qG(J,Q))}async function $E($,J){let Q=await N0.getModelsForProvider($);if(!J)return Q;let Z=await L6($,{loadPrivateOnAuth:!0,failOnError:!1},J);return Z?.knownModels?{...Q,...Z.knownModels}:Q}function Wj($){return[...new Set(($??[]).map((J)=>J.trim()).filter(Boolean))]}function JE($){if(!$?.length)return;return[...new Set($)]}function QE($,J){return JE([...$??[],...J??[]])}function ZE($){let J=$?.popularRank;return typeof J==="number"&&Number.isFinite(J)?J:Number.MAX_SAFE_INTEGER}function WE($){if(!$||typeof $!=="object")return!1;let J=$;return typeof J.path==="string"&&J.path.trim().length>0&&typeof J.label==="string"&&J.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(J.type))}function jE($){let J=$?.configFields;if(!Array.isArray(J))return;return J.filter(WE)}var v9={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},EG={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function XE($){if(!$)return[v9];if($.source!=="system")return $.baseUrl?[v9,EG]:[v9];let J=[];if($.env?.length)J.push(v9);if($.baseUrl)J.push(EG);return J}function fE($,J){return J.split(".").reduce((Q,Z)=>{if(!Q||typeof Q!=="object")return;return Q[Z]},$)}function YE($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function VE($,J,Q){if(!$?.length)return;let Z={};for(let W of $){let X=YE(W.path==="baseUrl"&&J?.baseUrl===void 0?Q?.baseUrl:fE(J,W.path))??W.defaultValue;if(X!==void 0)Z[W.path]=X}return Z}function kG($){let J=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return J.length>0?Object.fromEntries(J):void 0}function jj($,J){let Q=J?.includes("vision")??!1,Z=J?.includes("reasoning")??!1;return Object.fromEntries($.map((W)=>[W,{id:W,name:W,supportsVision:Q,supportsAttachments:Q,supportsReasoning:Z}]))}async function IG($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let J=$.modelsSourceUrl?await n5($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...J])]}function xG($,J){let Q=$.read(),Z=!1;if(Q.providers[J])delete Q.providers[J],Z=!0;if(Q.lastUsedProvider===J)delete Q.lastUsedProvider,Z=!0;if(Z)$.write(Q);N0.unregisterProvider(J)}async function Xj($,J){let Q=J.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let Z=J.baseUrl.trim(),W=J.apiKey?.trim()??"";if(!Z&&!W){let G=b2($);if((await Y4(G)).providers[Q]){let D=await d9($,{providerId:Q});return{providerId:Q,settingsPath:D.settingsPath,modelsPath:D.modelsPath,modelsCount:0}}return xG($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:G,modelsCount:0}}if(N0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let j=J.name.trim();if(!j)throw Error("name is required");if(!Z)throw Error("baseUrl is required");let X=Wj(J.models),f=J.modelsSourceUrl?.trim(),Y=await IG({providerId:Q,explicitModels:X,modelsSourceUrl:f,shouldRecompute:!0});if(Y.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let V=J.defaultModelId?.trim()&&Y.includes(J.defaultModelId.trim())?J.defaultModelId.trim():Y[0],H=J.capabilities?.length?[...new Set(J.capabilities)]:void 0,B=kG(J.headers);$.saveProviderSettings({provider:Q,apiKey:W||void 0,baseUrl:Z,headers:B,timeout:J.timeoutMs,model:V,protocol:J.protocol,client:J.client},{setLastUsed:!1});let A=b2($),K=await Y4(A);return K.providers[Q]={provider:{name:j,baseUrl:Z,defaultModelId:V,protocol:J.protocol,client:J.client,capabilities:H,modelsSourceUrl:f},models:jj(Y,H)},await x9(A,K),SJ(Q,K.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:Y.length}}async function u9($,J){let Q=J.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let Z=b2($),W=await Y4(Z),j=W.providers[Q];if(!j){let T=$.getProviderSettings(Q);if(!T)throw Error(`provider "${Q}" does not exist`);let z=J.modelsSourceUrl?.trim(),L=Wj(J.models)[0]??T.model?.trim();if(!L&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);j={provider:{name:J.name?.trim()||bG(Q),baseUrl:J.baseUrl?.trim()??T.baseUrl?.trim()??"",defaultModelId:L,protocol:T.protocol,client:T.client,capabilities:T.capabilities},models:L?jj([L],T.capabilities):{}}}if(!j.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let X=J.name?.trim()??j.provider.name.trim();if(!X)throw Error("name is required");let f=J.baseUrl?.trim()??j.provider.baseUrl.trim();if(!f)throw Error("baseUrl is required");let Y=J.capabilities===void 0?j.provider.capabilities:J.capabilities===null?void 0:[...new Set(J.capabilities)],V=J.protocol===void 0?j.provider.protocol:J.protocol??void 0,H=J.client===void 0?j.provider.client:J.client??void 0,B=Wj(J.models),A=J.modelsSourceUrl===void 0?j.provider.modelsSourceUrl:J.modelsSourceUrl?.trim()||void 0,K=J.models!==void 0||J.modelsSourceUrl!==void 0&&!!A,G=Object.keys(j.models??{}).map((T)=>T.trim()).filter(Boolean),R=await IG({providerId:Q,explicitModels:B,modelsSourceUrl:A,fallbackModelIds:G,shouldRecompute:K});if(R.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let D=J.defaultModelId===void 0?j.provider.defaultModelId?.trim():J.defaultModelId?.trim(),U=D&&R.includes(D)?D:R[0],O={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:f,model:U};if(V)O.protocol=V;else delete O.protocol;if(H)O.client=H;else delete O.client;if(J.apiKey!==void 0){let T=J.apiKey?.trim()??"";if(T)O.apiKey=T;else delete O.apiKey}if(J.headers!==void 0){let T=kG(J.headers);if(T)O.headers=T;else delete O.headers}if(J.timeoutMs!==void 0)if(typeof J.timeoutMs==="number")O.timeout=J.timeoutMs;else delete O.timeout;return $.saveProviderSettings(O,{setLastUsed:!1}),W.providers[Q]={provider:{name:X,baseUrl:f,defaultModelId:U,protocol:V,client:H,capabilities:Y,modelsSourceUrl:A},models:jj(R,Y)},await x9(Z,W),SJ(Q,W.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:Z,modelsCount:R.length}}async function d9($,J){let Q=J.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let Z=b2($),W=await Y4(Z);if(!W.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete W.providers[Q],await x9(Z,W),N0.unregisterProvider(Q),xG($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:Z}}async function fj($,J={}){let Q=$.read(),Z=N0.getProviderIds(),W=await Promise.all(Z.map(async(X)=>{let[f,Y]=await Promise.all([N0.getProvider(X),N0.getModelsForProvider(X)]),V=hG(Y),H=Q.providers[X]?.settings,B=f?.name??bG(X),A=QE(f?.capabilities,H?.capabilities),K=jE(f?.metadata)??XE(f);return{provider:{id:X,name:B,models:V.length,color:ey(X),letter:ty(B),enabled:Boolean(H),apiKey:H?sy(H):void 0,oauthAccessTokenPresent:H?oy(H):void 0,baseUrl:H?.baseUrl??f?.baseUrl,defaultModelId:f?.defaultModelId,protocol:H?.protocol??f?.protocol,client:H?.client??f?.client,capabilities:A,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:K,configValues:VE(K,H,f),modelList:V},rank:ZE(f?.metadata)}}));W.sort((X,f)=>{if(X.rank!==f.rank)return X.rank-f.rank;return X.provider.name.localeCompare(f.provider.name)||X.provider.id.localeCompare(f.provider.id)});let j=W.map((X)=>X.provider);if(J.isClinePassEnabled!==!0)j=j.filter((X)=>X.id!==ay);return{providers:j,settingsPath:$.getFilePath()}}async function Yj($,J){let Q=$.trim(),Z=await $E(Q,J),W=hG(Z);return{providerId:Q,models:W}}function c9($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function gG($,J){if(!c9(J))return c9($)?{...$}:void 0;let Q=c9($)?{...$}:{};for(let[Z,W]of Object.entries(J)){if(W==null||W===""){delete Q[Z];continue}if(c9(W)){let j=gG(Q[Z],W);if(j&&Object.keys(j).length>0)Q[Z]=j;else delete Q[Z];continue}Q[Z]=W}return Object.keys(Q).length>0?Q:void 0}function Vj($,J){let Q=J.providerId.trim();if(J.enabled===!1){let j=$.read();if(delete j.providers[Q],j.lastUsedProvider===Q)delete j.lastUsedProvider;return $.write(j),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let W={...$.getProviderSettings(Q)??{},provider:Q};for(let j of["apiKey","baseUrl","model","region"])if(Object.hasOwn(J,j)&&typeof J[j]==="string")if(J[j].trim().length===0)delete W[j];else W[j]=J[j];for(let j of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(J,j))W[j]=J[j];for(let j of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(J,j)&&J[j]!=null){let X=gG(W[j],J[j]);if(X)W[j]=X;else delete W[j]}return $.saveProviderSettings(W,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function Hj($,J){let Q=J.trim(),Z=$.getProviderSettings(Q),j=N0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,X=Z?.baseUrl?.trim()||j?.baseUrl?.trim(),f=a5(X,j?.baseUrl,j?.modelsSourceUrl);if(!Z||!j||!X||!f)return{providerId:Q,refreshed:!1};let Y=await u9($,{providerId:Q,name:j.name,baseUrl:X,apiKey:Z.apiKey,headers:Z.headers??null,timeoutMs:Z.timeout??null,modelsSourceUrl:f,protocol:Z.protocol??j.protocol??null,client:Z.client??j.client??null,capabilities:Z.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:Y.modelsCount}}function Bj($){let J=$.trim().toLowerCase(),Q=Z0(J);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function Aj($,J,Q,Z){let W=Z0($);if(!W)throw Error(`provider "${$}" does not support OAuth login`);let j=M8({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return W.login({settings:J,callbacks:j,telemetry:Z})}function Kj($,J,Q,Z,W){return x$({manager:$,providerId:J,settings:Q,credentials:Z,setLastUsed:W?.setLastUsed})}async function Gj($,J,Q,Z){let W=M8({onPrompt:async(j)=>j.defaultValue??"",openUrl:Q,onOpenUrlError:({error:j})=>{throw j instanceof Error?j:Error(String(j))}});return z4($,J,{callbacks:W,telemetry:Z})}function Fj($){let J=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return J&&J.length>0?J:void 0}var vG={};w(vG,{getProviderConfigFields:()=>Dj});import*as l9 from"@cline/llms";var HE=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],BE={"openai-compatible":{description:"For Azure AI Foundry deployments, use a Base URL ending at /openai/deployments/<deployment> and set the Azure API version.",fields:{azureApiVersion:{label:"Azure API Version (optional)",placeholder:"2025-01-01-preview",note:"Required for Azure AI Foundry deployment URLs.",optional:!0}}},vertex:{mode:"replace",description:"Vertex AI can use Google Cloud Application Default Credentials with a project/region. An API key is optional for supported Gemini models.",fields:{gcpProjectId:{label:"Google Cloud Project ID",placeholder:"my-gcp-project"},gcpRegion:{label:"Google Cloud Region",placeholder:"us-central1",defaultValue:"us-central1"},apiKey:{label:"API Key (optional)",placeholder:"Leave blank to use Google Cloud credentials",optional:!0}}},bedrock:{mode:"replace",description:"AWS region is required for Bedrock. It can be auto-filled from AWS_REGION, AWS_DEFAULT_REGION, or ~/.aws/config.",fields:{awsRegion:{label:"AWS Region",placeholder:"us-east-1"},apiKey:{label:"AWS Bedrock API Key (optional)",placeholder:"Leave blank to use AWS profile/default chain",optional:!0},awsProfile:{label:"AWS Profile Name (optional)",placeholder:"default",optional:!0}}},ollama:{fields:{apiKey:{note:"Keep empty if no API key for local inference."}}},sapaicore:{mode:"replace",description:"SAP AI Core uses OAuth client credentials and an AI Core API URL, not a generic API key.",fields:{baseUrl:{label:"AI Core Base URL",placeholder:"https://api.ai.<region>.aws.ml.hana.ondemand.com"},sapClientId:{label:"Client ID",placeholder:"sb-...|xsuaa_std!b..."},sapClientSecret:{label:"Client Secret",placeholder:"SAP AI Core client secret"},sapTokenUrl:{label:"Token URL",placeholder:"https://<subdomain>.authentication.sap.hana.ondemand.com"},sapResourceGroup:{label:"Resource Group",placeholder:"default",optional:!0},sapDeploymentId:{label:"Deployment ID",placeholder:"SAP AI Core deployment id",optional:!0}}}};function AE($,J){let Q={};for(let Z of HE){let W=$[Z],j=J[Z];if(W||j)Q[Z]={...W,...j}}return Q}function KE($){let J=BE[$.providerId];if(!J)return $;return{...$,description:J.description??$.description,fields:J.mode==="replace"?J.fields:AE($.fields,J.fields)}}var GE=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function FE($,J){if(!J?.provider.baseUrl)return!1;if(J.provider.source!=="system")return!0;return GE.has($)}function Dj($){let J=l9.normalizeProviderId($);if(I$(J))return{providerId:J,authMethod:"oauth",fields:{}};let Q=l9.MODEL_COLLECTIONS_BY_PROVIDER_ID[J];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:J,authMethod:"local",fields:{}};let Z=Q?.provider.baseUrl,W={apiKey:{}};if(FE(J,Q))W.baseUrl={defaultValue:Z};return KE({providerId:J,authMethod:"api-key",fields:W})}var lG={};w(lG,{resolveLegacyClineAuth:()=>Lj,migrateLegacyProviderSettings:()=>CJ});import{existsSync as DE,readFileSync as UE}from"node:fs";import{dirname as RE,join as Uj}from"node:path";import*as r9 from"@cline/llms";import{resolveClineDataDir as LE}from"@cline/shared/storage";var p9="openai",dG=r9.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,cG=128000;function Lj($){let J=$?.trim();if(!J)return;try{let Q=JSON.parse(J);if(!Q)return;let Z=typeof Q.expiresAt==="number"&&Number.isFinite(Q.expiresAt)?Q.expiresAt<10000000000?Q.expiresAt*1000:Q.expiresAt:void 0;return{accessToken:Q.idToken,refreshToken:Q.refreshToken,expiresAt:Z,accountId:Q.userInfo?.id}}catch{return}}function E($){let J=$?.trim();return J?J:void 0}function uG($){if(!DE($))return;try{let J=UE($,"utf8"),Q=JSON.parse(J);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function zE($){let J=$.dataDir??LE(),Q=$.globalStatePath??Uj(J,"globalState.json"),Z=$.secretsPath??Uj(J,"secrets.json"),W=uG(Q),j=uG(Z);if(!W&&!j)return;return{globalState:W??{},secrets:j??{}}}function Rj($){if($===p9)return dG;return $}function _E($,J,Q,Z){let W=Q==="plan"?"planMode":"actMode",j=J===Z?E(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,f={openrouter:`${W}OpenRouterModelId`,cline:`${W}ClineModelId`,openai:`${W}OpenAiModelId`,ollama:`${W}OllamaModelId`,lmstudio:`${W}LmStudioModelId`,litellm:`${W}LiteLlmModelId`,requesty:`${W}RequestyModelId`,together:`${W}TogetherModelId`,fireworks:`${W}FireworksModelId`,sapaicore:`${W}SapAiCoreModelId`,groq:`${W}GroqModelId`,baseten:`${W}BasetenModelId`,huggingface:`${W}HuggingFaceModelId`,"huawei-cloud-maas":`${W}HuaweiCloudMaasModelId`,oca:`${W}OcaModelId`,aihubmix:`${W}AihubmixModelId`,hicap:`${W}HicapModelId`,nousResearch:`${W}NousResearchModelId`,"vercel-ai-gateway":`${W}VercelAiGatewayModelId`}[J];return(f?E(typeof $[f]==="string"?$[f]:void 0):void 0)??j}function OE($,J,Q){let Z=Q==="plan"?$.planModeReasoningEffort:$.actModeReasoningEffort,W=Q==="plan"?$.geminiPlanModeThinkingLevel:$.geminiActModeThinkingLevel,j=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,X=(J==="gemini"?W:void 0)??Z,f=X==="none"||X==="low"||X==="medium"||X==="high"?X:void 0,Y=typeof j==="number"&&Number.isInteger(j)&&j>0?j:void 0;if(!f&&Y===void 0)return;return{...f?{effort:f}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function TE($){let J=$["openai-codex-oauth-credentials"];if(!J)return;try{let Q=JSON.parse(J),Z=E(Q.access_token),W=E(Q.refresh_token),j=E(Q.accountId);if(!Z&&!W&&!j)return;return{...Z?{apiKey:Z}:{},auth:{...Z?{accessToken:Z}:{},...W?{refreshToken:W}:{},...j?{accountId:j}:{}}}}catch{return}}function ME($){let J=r9.getGeneratedModelsForProvider($);return Object.keys(J)[0]??void 0}function qE($,J,Q,Z){let W=Rj($),j=E(Z==="plan"?J.planModeApiProvider:J.actModeApiProvider),X=_E(J,$,Z,j)??ME(W),f=OE(J,W,Z),Y=typeof J.requestTimeoutMs==="number"&&Number.isInteger(J.requestTimeoutMs)&&J.requestTimeoutMs>0?J.requestTimeoutMs:void 0,V={anthropic:Q.apiKey,cline:Q.clineApiKey,openai:Q.openAiApiKey,"openai-native":Q.openAiNativeApiKey,openrouter:Q.openRouterApiKey,bedrock:Q.awsBedrockApiKey,gemini:Q.geminiApiKey,ollama:Q.ollamaApiKey,deepseek:Q.deepSeekApiKey,requesty:Q.requestyApiKey,together:Q.togetherApiKey,fireworks:Q.fireworksApiKey,qwen:Q.qwenApiKey,doubao:Q.doubaoApiKey,mistral:Q.mistralApiKey,litellm:Q.liteLlmApiKey,asksage:Q.asksageApiKey,xai:Q.xaiApiKey,moonshot:Q.moonshotApiKey,zai:Q.zaiApiKey,huggingface:Q.huggingFaceApiKey,nebius:Q.nebiusApiKey,sambanova:Q.sambanovaApiKey,cerebras:Q.cerebrasApiKey,groq:Q.groqApiKey,"huawei-cloud-maas":Q.huaweiCloudMaasApiKey,baseten:Q.basetenApiKey,"vercel-ai-gateway":Q.vercelAiGatewayApiKey,dify:Q.difyApiKey,minimax:Q.minimaxApiKey,hicap:Q.hicapApiKey,aihubmix:Q.aihubmixApiKey,nousResearch:Q.nousResearchApiKey,oca:Q.ocaApiKey},H={};if($==="openai-codex")Object.assign(H,TE(Q));if($==="cline")try{let U=E(Q["cline:clineAccountId"]);if(U)H.auth={...H.auth??{},...Lj(U)}}catch{}if($===p9&&J.openAiHeaders)H.headers=J.openAiHeaders;if($==="bedrock"){let U=J.awsAuthentication==="profile"||J.awsUseProfile===!0;H.aws={accessKey:E(Q.awsAccessKey),secretKey:E(Q.awsSecretKey),sessionToken:E(Q.awsSessionToken),region:E(J.awsRegion),authentication:J.awsAuthentication,profile:U?E(J.awsProfile):void 0,usePromptCache:J.awsBedrockUsePromptCache,useCrossRegionInference:J.awsUseCrossRegionInference,useGlobalInference:J.awsUseGlobalInference,endpoint:E(J.awsBedrockEndpoint),customModelBaseId:E(Z==="plan"?J.planModeAwsBedrockCustomModelBaseId:J.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")H.gcp={projectId:E(J.vertexProjectId),region:E(J.vertexRegion)};if($===p9&&(J.azureApiVersion||J.azureIdentity!==void 0))H.azure={apiVersion:E(J.azureApiVersion),useIdentity:J.azureIdentity};if($==="sapaicore")H.sap={clientId:E(Q.sapAiCoreClientId),clientSecret:E(Q.sapAiCoreClientSecret),tokenUrl:E(J.sapAiCoreTokenUrl),resourceGroup:E(J.sapAiResourceGroup),deploymentId:E(Z==="plan"?J.planModeSapAiCoreDeploymentId:J.actModeSapAiCoreDeploymentId),useOrchestrationMode:J.sapAiCoreUseOrchestrationMode};if($==="oca"){H.oca={mode:J.ocaMode};let U=E(Q.ocaRefreshToken);if(U)H.auth={...H.auth??{},refreshToken:U}}if($==="qwen")H.apiLine=J.qwenApiLine;if($==="moonshot")H.apiLine=J.moonshotApiLine;if($==="zai")H.apiLine=J.zaiApiLine;if($==="minimax")H.apiLine=J.minimaxApiLine;let B={anthropic:J.anthropicBaseUrl,openai:J.openAiBaseUrl,ollama:J.ollamaBaseUrl,lmstudio:J.lmStudioBaseUrl,litellm:J.liteLlmBaseUrl,gemini:J.geminiBaseUrl,requesty:J.requestyBaseUrl,asksage:J.asksageApiUrl,dify:J.difyBaseUrl,oca:J.ocaBaseUrl,aihubmix:J.aihubmixBaseUrl,sapaicore:J.sapAiCoreBaseUrl},A=E(V[$]),K=E(B[$]),G={provider:W,...A?{apiKey:A}:{},...X?{model:X}:{},...K?{baseUrl:K}:{},...f?{reasoning:f}:{},...Y?{timeout:Y}:{},...H},R=z8.safeParse(G);if(!R.success)return;return Object.keys(G).filter((U)=>U!=="provider").length>0?R.data:void 0}function PE($,J){if($!==dG)return;if(!J.baseUrl||!J.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:J.baseUrl,defaultModelId:J.model},models:{[J.model]:{id:J.model,name:J.model,contextWindow:cG,maxInputTokens:cG,capabilities:["streaming","tools","images"]}}}}function NE($,J){let Q=new Set;for(let W of[$.actModeApiProvider,$.planModeApiProvider]){let j=E(W);if(j)Q.add(j)}if(E(J.apiKey))Q.add("anthropic");if(E(J.openRouterApiKey))Q.add("openrouter");if(E(J.openAiApiKey))Q.add(p9);if(E(J.openAiNativeApiKey))Q.add("openai-native");if(E(J["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(E(J.geminiApiKey))Q.add("gemini");if(E(J.ollamaApiKey))Q.add("ollama");if(E(J.awsAccessKey)||E(J.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||E($.awsProfile))Q.add("bedrock");if(E($.vertexProjectId)||E($.vertexRegion))Q.add("vertex");if(E(J.clineApiKey))Q.add("cline");let Z=Lj(E(J["cline:clineAccountId"]));if(Z?.accessToken||Z?.refreshToken||Z?.accountId)Q.add("cline");if(E(J.ocaApiKey))Q.add("oca");if(E(J.sapAiCoreClientId)||E(J.sapAiCoreClientSecret)||E($.sapAiCoreTokenUrl)||E($.sapAiCoreBaseUrl)||E($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function CJ($){let J=$.providerSettingsManager.read(),Q=zE($);if(!Q)return{migrated:!1,providerCount:Object.keys(J.providers).length,lastUsedProvider:J.lastUsedProvider};let{globalState:Z,secrets:W}=Q,j=Z.mode==="plan"?"plan":"act",X=NE(Z,W),f=z$();f.providers={...J.providers},f.lastUsedProvider=J.lastUsedProvider;let Y=new Date().toISOString(),V=0,H=Uj(RE($.providerSettingsManager.getFilePath()),"models.json"),B=Zj(H),A=0;for(let R of X){let D=Rj(R);if(f.providers[D])continue;let U=qE(R,Z,W,j);if(!U)continue;f.providers[D]={settings:U,updatedAt:Y,tokenSource:"migration"},V+=1;let F=PE(D,U);if(F&&!B.providers[D])B.providers[D]=F,A+=1}if(V===0&&A===0)return{migrated:!1,providerCount:Object.keys(J.providers).length,lastUsedProvider:J.lastUsedProvider};let K=E(j==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),G=K?Rj(K):void 0;if(f.lastUsedProvider=J.lastUsedProvider??(G&&f.providers[G]?G:Object.keys(f.providers)[0]),$.providerSettingsManager.write(f),A>0)MG(H,B);return{migrated:V>0||A>0,providerCount:Object.keys(f.providers).length,lastUsedProvider:f.lastUsedProvider}}M9();O0();G9();var pG={};w(pG,{FileTeamPersistenceStore:()=>i9});import{appendFileSync as wE,existsSync as zj,mkdirSync as SE,readFileSync as CE,renameSync as yE,unlinkSync as EE,writeFileSync as bE}from"node:fs";import{join as _j}from"node:path";import{resolveTeamDataDir as hE}from"@cline/shared/storage";function kE($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class i9{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let J=kE($.teamName),Q=$.baseDir?.trim()||hE();this.dirPath=_j(Q,J),this.statePath=_j(this.dirPath,"state.json"),this.taskHistoryPath=_j(this.dirPath,"task-history.jsonl")}loadState(){if(!zj(this.statePath))return;try{let $=CE(this.statePath,"utf8"),J=JSON.parse($);if(J.version!==1||!J.teamState)return;for(let Q of J.teammates??[])this.teammateSpecs.set(Q.agentId,Q);return yA(J.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec($){this.teammateSpecs.set($.agentId,$)}removeTeammateSpec($){this.teammateSpecs.delete($)}persist($){if(!this.hasPersistableState($)){this.clearPersistedState();return}this.ensureDir();let J={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Q=`${this.statePath}.tmp`;bE(Q,`${JSON.stringify(J,null,2)}
|
|
738
|
+
`,"utf8"),yE(Q,this.statePath)}appendTaskHistory($){let J={};switch($.type){case"team_task_updated":J=$.task;break;case"team_message":J={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":J={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":J={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":J={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":J={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),wE(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:J})}
|
|
739
|
+
`,"utf8")}ensureDir(){if(!zj(this.dirPath))SE(this.dirPath,{recursive:!0})}hasPersistableState($){let J=$.exportState();if(this.teammateSpecs.size>0)return!0;if(J.members.some((Q)=>Q.role==="teammate"))return!0;return J.tasks.length>0||J.mailbox.length>0||J.missionLog.length>0}clearPersistedState(){if(zj(this.statePath))EE(this.statePath)}}var rG={};w(rG,{ChatViewStateSchema:()=>Oj,ChatSummarySchema:()=>t9,ChatSessionStatusSchema:()=>a9,ChatSessionConfigSchema:()=>n9,ChatMessageSchema:()=>o9,ChatMessageRoleSchema:()=>s9});import{z as h}from"zod";var n9=h.object({workspaceRoot:h.string().min(1),cwd:h.string().optional(),provider:h.string().min(1),model:h.string().min(1),mode:h.enum(["act","plan"]).default("act"),apiKey:h.string(),systemPrompt:h.string().optional(),rules:h.string().optional(),maxIterations:h.number().int().positive().optional(),enableTools:h.boolean(),enableSpawn:h.boolean().optional(),enableTeams:h.boolean().optional(),autoApproveTools:h.boolean().optional(),missionStepInterval:h.number().int().positive().optional(),missionTimeIntervalMs:h.number().int().positive().optional()}),a9=h.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),s9=h.enum(["user","assistant","tool","system","status","error"]),o9=h.object({id:h.string().min(1),sessionId:h.string().nullable(),role:s9,content:h.string(),createdAt:h.number().int().nonnegative(),meta:h.object({stream:h.enum(["stdout","stderr"]).optional(),toolName:h.string().optional(),iteration:h.number().int().nonnegative().optional(),agentId:h.string().optional(),conversationId:h.string().optional(),hookEventName:h.string().optional(),inputTokens:h.number().int().nonnegative().optional(),outputTokens:h.number().int().nonnegative().optional(),checkpoint:h.object({ref:h.string(),createdAt:h.number().int().nonnegative(),runCount:h.number().int().positive(),kind:h.enum(["stash","commit"]).optional()}).optional()}).optional()}),t9=h.object({toolCalls:h.number().int().nonnegative(),tokensIn:h.number().int().nonnegative(),tokensOut:h.number().int().nonnegative()}),Oj=h.object({sessionId:h.string().nullable(),status:a9,config:n9,messages:h.array(o9),rawTranscript:h.string(),error:h.string().nullable(),summary:t9});var iG={};w(iG,{CORE_BUILD_VERSION:()=>Tj});var Tj=PB;import{Agent as Mb,createAgentRuntime as qb}from"@cline/agents";var aG={};w(aG,{fetchClineRecommendedModels:()=>Mj,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>e9});import{getClineEnvironmentConfig as IE}from"@cline/shared";var xE=5000,e9={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}]};function gE($){return{recommended:$.recommended.map((J)=>({...J,tags:[...J.tags]})),free:$.free.map((J)=>({...J,tags:[...J.tags]}))}}function nG($){if(!$||typeof $!=="object")return null;let J=$;if(typeof J.id!=="string"||J.id.length===0)return null;return{id:J.id,name:typeof J.name==="string"&&J.name.length>0?J.name:J.id,description:typeof J.description==="string"?J.description:"",tags:Array.isArray(J.tags)?J.tags.filter((Q)=>typeof Q==="string"):[]}}function mE($){if(!$||typeof $!=="object")return null;let J=$,Q=Array.isArray(J.recommended)?J.recommended:[],Z=Array.isArray(J.free)?J.free:[],W=Q.map(nG).filter((X)=>X!==null),j=Z.map(nG).filter((X)=>X!==null);if(W.length===0&&j.length===0)return null;return{recommended:W,free:j}}function vE($){let J=$.baseUrl?.trim();if(J)return J;let Q=IE().apiBaseUrl;try{return($.providerSettingsManager??new _1).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function cE($,J,Q){let Z=new AbortController,W=setTimeout(()=>Z.abort(),Q);try{return await $(J,{signal:Z.signal})}finally{clearTimeout(W)}}async function Mj($={}){try{let J=vE($),Q=$.fetchImpl??fetch,Z=await cE(Q,`${J}/api/v1/ai/cline/recommended-models`,$.timeoutMs??xE);if(!Z.ok)throw Error(`HTTP ${Z.status}`);let W=await Z.json(),j=mE(W);if(j)return j}catch{}return gE(e9)}var sG={};w(sG,{loadLlmsConfigFromFile:()=>Pj,defineLlmsConfig:()=>qj});import{readFile as uE}from"node:fs/promises";import dE from"node:path";function qj($){return $}async function Pj($){let J=dE.resolve($),Q=await uE(J,"utf8"),Z;try{Z=JSON.parse(Q)}catch(W){let j=W instanceof Error?W.message:String(W);throw Error(`Failed to parse JSON config at "${J}": ${j}`)}return lE(Z,J)}function lE($,J){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${J}": expected an object.`);let Z=$.providers;if(!Array.isArray(Z))throw Error(`Invalid llms config in "${J}": "providers" must be an array.`);if(!Z.length)throw Error(`Invalid llms config in "${J}": "providers" cannot be empty.`);return $}var QF={};w(QF,{createLlmsSdk:()=>wj,DefaultLlmsSdk:()=>yJ});import{BUILT_IN_PROVIDER_IDS as eG,createHandler as iE,createHandlerAsync as nE,getProviderCollection as aE,hasProvider as $F,registerAsyncHandler as sE,registerHandler as oE,registerModel as tE,registerProvider as JF}from"@cline/llms";function oG($){return $?{...$}:{}}function pE($,J){if($)return $;if(!J)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[J]}function rE($,J){if(!J.length)throw Error(`Provider "${$}" must include at least one model.`)}function tG($){let J=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:J,defaultModel:$.collection.provider.defaultModelId,modelCount:J.length}}class Nj{providers=new Map;register($){rE($.id,$.models);let J=$.defaultModel??$.models[0];if(!J)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(J))throw Error(`Default model "${J}" is not included in configured models for "${$.id}".`);let Q=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Q?.models??[],...$.models]),defaultModel:J,defaults:{...Q?.defaults??{},...oG($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:pE($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...oG($.settings)}})}registerModel($,J){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([J]),defaultModel:J,defaults:{}});return}Q.models.add(J)}createHandlerConfig($){let J=this.require($.providerId),Q=$.modelId??J.defaultModel;if(!J.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...J.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,J){return this.providers.get($)?.models.has(J)??!1}require($){let J=this.providers.get($);if(!J)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return J}}class yJ{configuredProviders=new Nj;constructor($){this.applyConfig($)}createHandler($){return iE(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return nE(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(JF($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)oE($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)sE($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let J=$.exposeModels??Object.keys($.models),Q=$.defaultModel??J[0];if(!Q)throw Error(`Provider "${$.id}" must define a default model.`);JF({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Q,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:J,defaultModel:Q,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){tE($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...eG]}async getBuiltInProviders(){return(await Promise.all(eG.map((J)=>aE(J)))).filter((J)=>J!==void 0).map((J)=>tG({collection:J}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,J){return this.configuredProviders.hasModel($,J)}applyConfig($){for(let J of $.providers)this.configuredProviders.registerSelectionConfig(J);for(let J of $.models??[])this.registerModel(J);for(let J of $.customProviders??[])this.registerProvider(J);for(let J of this.configuredProviders.list()){let Q=$F(J.id),Z=this.configuredProviders.createHandlerConfig({providerId:J.id,modelId:J.defaultModel}).routingProviderId,W=typeof Z==="string"&&$F(Z);if(!Q&&!W)throw Error(`Provider "${J.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function wj($){return new yJ($)}H3();async function eE(){return Promise.resolve().then(() => (M9(),JG))}function Cb(){return new Date().toISOString()}var yb="cline",Eb="cline-pass";function bb($){if(XF($)!=="providers.json")return;let J=Cj($);if(XF(J)!=="settings")return;return Cj(J)}class _1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??Sb(),this.dataDir=$.dataDir??bb(this.filePath),this.dataDir||!$.filePath)CJ({providerSettingsManager:this,dataDir:this.dataDir});if(yG(this),g9(this.read()),Sj(this.filePath))try{jF(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!Sj(this.filePath))return z$();try{let $=Nb(this.filePath,"utf8"),J=JSON.parse($),Q=_8.safeParse(J);if(Q.success)return g9(Q.data),Q.data}catch{}return z$()}write($){let J=_8.parse($),Q=Cj(this.filePath);if(!Sj(Q))Pb(Q,{recursive:!0,mode:448});wb(this.filePath,`${JSON.stringify(J,null,2)}
|
|
740
|
+
`,"utf8");try{jF(this.filePath,384)}catch{}g9(J)}saveProviderSettings($,J={}){let Q=z8.parse($),Z=this.read(),W=Q.provider,j=J.setLastUsed!==!1,X=Z.providers[W],f=J.tokenSource??X?.tokenSource??"manual",Y={...Z,providers:{...Z.providers,[W]:{settings:Q,updatedAt:Cb(),tokenSource:f}},lastUsedProvider:j?W:Z.lastUsedProvider};return this.write(Y),Y}resolveProviderSettings($,J){let Q=$.providers[J]?.settings,W=Z0(J)?.storageProviderId;if(!W||W===J)return Q;let j=$.providers[W]?.settings;if(!j)return Q;return z8.parse({...j.auth?{auth:j.auth}:{},...j.apiKey?{apiKey:j.apiKey}:{},...j.baseUrl?{baseUrl:j.baseUrl}:{},...Q??{},provider:J})}getProviderSettings($){let J=this.read();return this.resolveProviderSettings(J,$)}resolveLastUsedProviderId($,J){let Q=$.lastUsedProvider;if(Q===Eb&&J.isClinePassEnabled===!1)return yb;return Q}getLastUsedProviderSettings($={}){let J=this.read(),Q=this.resolveLastUsedProviderId(J,$);if(!Q)return;return this.resolveProviderSettings(J,Q)}getProviderConfig($,J){let Q=this.getProviderSettings($);if(!Q)return;return d0(Q,J)}getLastUsedProviderConfig($={}){let J=this.getLastUsedProviderSettings($);if(!J)return;return d0(J,$)}async refreshCatalog(){try{await R8({})}catch{}}}O0();m8();function hb($,J){let Q=$?.expiresAt,Z=J?.expiresAt;return $?.accessToken===J?.accessToken&&$?.refreshToken===J?.refreshToken&&$?.accountId===J?.accountId&&Q===Z}class $Z extends Error{providerId;constructor($){super(`OAuth credentials for provider "${$}" are no longer valid. Re-run authentication for this provider.`);this.name="OAuthReauthRequiredError",this.providerId=$}}class yj{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new _1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let J=Z0($.providerId);if(!J)return null;return this.resolveWithSingleFlight(J.providerId,J.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,J,Q=!1){let Z=this.refreshInFlight.get(J);if(Z)return Z;let W=this.resolveProviderApiKeyInternal($,J,Q).catch((j)=>{throw j}).finally(()=>{this.refreshInFlight.delete(J)});return this.refreshInFlight.set(J,W),W}async resolveProviderApiKeyInternal($,J,Q){let Z=Z0($);if(!Z)return null;let W=this.providerSettingsManager.getProviderSettings(J);if(!W)return null;let j=_4($,W);if(!j)return null;let X=await Z.refresh({settings:W,credentials:j,forceRefresh:Q,telemetry:this.telemetry});if(!X)throw new $Z($);let f=x$({manager:this.providerSettingsManager,providerId:$,settings:W,credentials:X,setLastUsed:!1,save:!1}),Y=!hb(W.auth,f.auth);if(Y)this.providerSettingsManager.saveProviderSettings(f,{setLastUsed:!1,tokenSource:"oauth"});return{apiKey:Z.getApiKey(f)??X.access,accountId:X.accountId,refreshed:Y}}}import{normalizeUserInput as kb}from"@cline/shared";import{nanoid as Ib}from"nanoid";class fF{list($){return $?e0($):[]}update($,J){if(!$)return{sessionId:J.sessionId,prompts:[],updated:!1};let Q=J.promptId.trim(),Z=$.pendingPrompts.findIndex((Y)=>Y.id===Q);if(Z<0)return{sessionId:J.sessionId,prompts:e0($),updated:!1};let W=$.pendingPrompts[Z];if(!W)return{sessionId:J.sessionId,prompts:e0($),updated:!1};let j=J.prompt===void 0?W.prompt:kb(J.prompt).trim();if(!j)throw Error("prompt cannot be empty");let X=J.delivery??W.delivery,f={...W,prompt:j,mode:J.mode??W.mode,delivery:X};return $.pendingPrompts.splice(Z,1),xb($,f,Z,W.delivery),{sessionId:J.sessionId,prompts:e0($),prompt:JZ(f),updated:!0}}delete($,J){if(!$)return{sessionId:J.sessionId,prompts:[],removed:!1};let Q=J.promptId.trim(),Z=$.pendingPrompts.findIndex((j)=>j.id===Q);if(Z<0)return{sessionId:J.sessionId,prompts:e0($),removed:!1};let[W]=$.pendingPrompts.splice(Z,1);return{sessionId:J.sessionId,prompts:e0($),prompt:W?JZ(W):void 0,removed:!0}}enqueue($,J){let{prompt:Q,mode:Z,delivery:W,userImages:j,userFiles:X}=J,f=$.pendingPrompts.findIndex((Y)=>Y.prompt===Q);if(f>=0){let[Y]=$.pendingPrompts.splice(f,1),V={...Y,prompt:Q,mode:Z??Y.mode,userImages:j??Y.userImages,userFiles:X??Y.userFiles};if(W==="steer"||Y.delivery==="steer")$.pendingPrompts.unshift({...V,delivery:"steer"});else $.pendingPrompts.push(V)}else{let Y={id:`pending_${Date.now()}_${Ib(5)}`,prompt:Q,mode:Z,delivery:W,userImages:j,userFiles:X};if(W==="steer")$.pendingPrompts.unshift(Y);else $.pendingPrompts.push(Y)}return e0($)}consumeSteer($){let J=$.pendingPrompts.findIndex((Z)=>Z.delivery==="steer");if(J<0)return{prompts:e0($)};let[Q]=$.pendingPrompts.splice(J,1);return{entry:Q,prompts:e0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:e0($)}}requeueFront($,J){return $.pendingPrompts.unshift(J),e0($)}clear($){return $.pendingPrompts.length=0,[]}}class Ej{deps;service=new fF;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let J=this.deps.getSession($.sessionId);if(!J||J.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(J,$);return this.emitPrompts(J),this.scheduleDrain($.sessionId,J),Q}delete($){let J=this.deps.getSession($.sessionId);if(!J||J.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(J,$);return this.emitPrompts(J),this.scheduleDrain($.sessionId,J),Q}enqueue($,J){let Q=this.deps.getSession($);if(!Q||Q.aborting)return;this.service.enqueue(Q,J),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let J=this.deps.getSession($);if(!J)return;let{entry:Q}=this.service.consumeSteer(J);if(!Q)return;return this.emitPrompts(J),this.emitSubmitted(J,Q),Q}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:e0($)}})}scheduleDrain($,J){if(J.pendingPrompts.length===0||J.aborting||J.drainingPendingPrompts||!J.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let J=this.deps.getSession($);if(!J)return;if(J.aborting||J.drainingPendingPrompts)return;if(!J.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(J);if(!Q)return;this.emitPrompts(J),this.emitSubmitted(J,Q),J.drainingPendingPrompts=!0;let Z=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{Z=!1,this.service.requeueFront(J,Q),this.emitPrompts(J)}finally{if(J.drainingPendingPrompts=!1,Z&&J.pendingPrompts.length>0&&J.status!=="failed"&&J.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,J){let Q=JZ(J);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount}})}}function JZ($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0)}}function e0($){return $.pendingPrompts.map(JZ)}function xb($,J,Q,Z){if(J.delivery==="steer")$.pendingPrompts.unshift(J);else if(Z==="steer")$.pendingPrompts.push(J);else $.pendingPrompts.splice(Q,0,J)}O0();class hj{deps;constructor($){this.deps=$}dispatchAgentEvent($,J,Q){let Z=this.deps.getSession($),W={sessionId:$,config:J,liveSession:Z,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},j=VW(Q),X=!!Z&&(!j.agentId||j.agentId===bj(Z.agent));HW(W,Q,X?{isPrimaryAgentEvent:!0,agentId:bj(Z.agent),conversationId:Z.agent.getConversationId(),...Z?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,J){let Q=this.deps.getSession($);if(Q){if(n7(Q,J),J.type==="agent_event"){let Z={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};HW(Z,J.event,{agentId:J.agentId,teamRole:"teammate",teamAgentId:J.agentId,isPrimaryAgentEvent:!1})}if(J.type==="teammate_spawned"){let Z=g1({agentId:J.teammate.runtimeAgentId??J.agentId,conversationId:J.teammate.conversationId,parentAgentId:J.teammate.parentAgentId,createdByAgentId:bj(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:J.agentId});if(Z)$$(Q.config.telemetry,{ulid:$,modelId:J.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...Z})}}if(await a7($,J,this.deps.invokeBackendOptional),Q)s7(Q,$,J,this.deps.emit)}async handlePluginEvent($,J,Q){if(J.name==="plugin_log"){this.handlePluginLog($,J.payload);return}if(J.name==="automation_event"){let Y=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!Y)return;let V=J.payload&&typeof J.payload==="object"?J.payload:void 0;if(!V)return;await Y.ingestEvent(V);return}if(J.name!=="steer_message"&&J.name!=="queue_message"&&J.name!=="pending_prompt")return;let Z=J.payload&&typeof J.payload==="object"?J.payload:void 0,W=typeof Z?.sessionId==="string"&&Z.sessionId.trim().length>0?Z.sessionId.trim():$,j=typeof Z?.prompt==="string"?Z.prompt.trim():"";if(!j)return;let X=J.name==="steer_message"?"steer":J.name==="queue_message"?"queue":Z?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(W,{prompt:j,delivery:X})}handlePluginLog($,J,Q){let Z=this.deps.getSession($),W=Q??Z?.config.extensionContext?.logger??Z?.config.logger;if(!W||!J||typeof J!=="object")return;let j=J,X=typeof j.message==="string"?j.message:"";if(!X)return;let f=j.metadata&&typeof j.metadata==="object"?{...j.metadata}:{};if(f.sessionId??=$,typeof j.pluginName==="string"&&j.pluginName)f.pluginName=j.pluginName;if(j.level==="debug"){W.debug(X,f);return}if(j.level==="error"){if(W.error)W.error(X,f);else W.log(X,{...f,severity:"error"});return}W.log(X,f)}}function bj($){return $.getAgentId()}function kj($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:G$($.config),teamName:$.config.teamName?.trim()||void 0,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,parentSessionId:typeof $.sessionMetadata?.parentSessionId==="string"?$.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof $.sessionMetadata?.parentAgentId==="string"?$.sessionMetadata.parentAgentId:void 0,agentId:typeof $.sessionMetadata?.agentId==="string"?$.sessionMetadata.agentId:void 0,conversationId:typeof $.sessionMetadata?.conversationId==="string"?$.sessionMetadata.conversationId:void 0,isSubagent:typeof $.sessionMetadata?.isSubagent==="boolean"?$.sessionMetadata.isSubagent:!1,prompt:$.pendingPrompt,metadata:$.sessionMetadata,messagesPath:$.artifacts?.messagesPath,updatedAt:$.updatedAt??$.endedAt??$.startedAt}}function Ij($,J){let Q=$[J];return typeof Q==="function"?Q:null}async function YF($,J,...Q){let Z=Ij($,J);if(!Z)throw Error(`session service method not available: ${J}`);return Promise.resolve(Z.apply($,Q))}async function VF($,J,...Q){let Z=Ij($,J);if(!Z)return;await Promise.resolve(Z.apply($,Q))}async function HF($,J,...Q){let Z=Ij($,J);if(!Z)return;return await Promise.resolve(Z.apply($,Q))}W1();O0();function xj($,J,Q){return{onSubAgentEvent:(Z)=>$.onAgentEvent(Q,J,Z),onSubAgentStart:(Z)=>{let W=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(Z.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let j=g1({agentId:Z.subAgentId,conversationId:Z.conversationId,parentAgentId:Z.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:Z.parentAgentId});if(j)$$(J.telemetry,{ulid:Q,modelId:J.modelId,provider:J.providerId,...j});A4(J.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:Z.parentAgentId,agentId:Z.subAgentId,...j}),$.invokeBackendOptional("handleSubAgentStart",Q,Z)},onSubAgentEnd:(Z)=>{let W=$.getSession(Q)?.runtime.teamRuntime,j=$.subAgentStarts.get(Z.subAgentId),X=j?Date.now()-j.startedAt:0,f=Z.result?.text?Z.result.text.split(`
|
|
741
|
+
`).length:0;A4(J.telemetry,{event:"ended",ulid:Q,durationMs:X,outputLines:f,errorMessage:Z.error?String(Z.error):void 0,agentId:Z.subAgentId,parentId:Z.parentAgentId,...g1({agentId:Z.subAgentId,conversationId:Z.conversationId,parentAgentId:Z.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:Z.parentAgentId})}),$.subAgentStarts.delete(Z.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,Z)}}}function gj($,J,Q,Z){let W=xj($,J,Q);return A$({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:J.providerId,modelId:J.modelId,cwd:J.cwd,apiKey:J.apiKey,baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking,maxIterations:J.maxIterations,hooks:J.hooks,extensions:J.extensions,logger:J.logger,telemetry:J.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:J.providerId,modelId:J.modelId,apiKey:J.apiKey,baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let X=J.enableTools?n$({cwd:J.cwd,...c0[h1({mode:J.mode})],executors:Z}):[];if(J.enableSpawnAgent)X.push(gj($,J,Q,Z));return I1(X)},...W})}import{readFile as gb,stat as mb}from"node:fs/promises";var vb=20480000;async function BF($){let J=await mb($);if(!J.isFile())throw Error("Path is not a file");if(J.size>vb)throw Error("File is too large to read into context.");let Q=await gb($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var AF=5000;function EJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function nb($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$,Q=EJ(J.inputTokens),Z=EJ(J.outputTokens),W=EJ(J.cacheReadTokens),j=EJ(J.cacheWriteTokens),X=EJ(J.totalCost);if(Q===void 0||Z===void 0||W===void 0||j===void 0||X===void 0)return;return{inputTokens:Q,outputTokens:Z,cacheReadTokens:W,cacheWriteTokens:j,totalCost:X}}function ab($,J){return{inputTokens:Math.max($.inputTokens,J.inputTokens),outputTokens:Math.max($.outputTokens,J.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,J.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,J.cacheWriteTokens),totalCost:Math.max($.totalCost,J.totalCost)}}class z1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new JJ;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new y$;constructor($){let J=ub();if(J)ib(J);let Q=b0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new j4,this.createAgentInstance=$.createAgent??((Z)=>new V$(Z)),this.defaultCapabilities=z0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new _1,this.oauthTokenManager=$.oauthTokenManager??new yj({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new Ej({getSession:(Z)=>this.sessions.get(Z),emit:(Z)=>this.emit(Z),send:(Z)=>this.runTurn(Z)}),this.pendingPrompts={list:async(Z)=>this.pendingPromptsController.list(Z.sessionId),update:async(Z)=>this.pendingPromptsController.update(Z),delete:async(Z)=>this.pendingPromptsController.delete(Z)},this.eventBridge=new hj({getSession:(Z)=>this.sessions.get(Z),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(Z)=>this.emit(Z),persistMessages:(Z,W,j)=>{this.invoke("persistSessionMessages",Z,W,j)},enqueuePendingPrompt:(Z,W)=>this.pendingPromptsController.enqueue(Z,W),invokeBackendOptional:(Z,...W)=>this.invokeOptional(Z,...W)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let J=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!J?.apiKey)return $;return{...$,config:{...$.config,apiKey:J.apiKey}}}async startSession($){let J=$.source??U0.CLI,Q=e(),Z=$.config.sessionId?.trim()??"",W=Z||lb(),j=await this.applyInitialOAuthCredentials($),X=j.initialMessages??[],f=X.length>0?f8(X):D0(),Y=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!Y)throw Error("session service method not available: ensureSessionsDir");let V=mj(Y,W),H=mj(V,`${W}.messages.json`),B=mj(V,`${W}.json`),A=G$($.config),K=S0.parse({version:1,session_id:W,source:J,pid:process.pid,started_at:Q,status:"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:A,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:H}),G;if(Z.length>0&&X.length>0&&!j.prompt?.trim()){let C=await this.invokeOptionalValue("readSessionManifest",W);if(C)K=C,G={manifestPath:B,messagesPath:C.messages_path||H,manifest:C}}let D=await this.seedAggregateUsageFromArtifacts({initialUsage:f,sessionDir:V,rootMessagesPath:G?.messagesPath??H,manifest:K});this.usageBySession.set(W,f),this.aggregateUsageBySession.set(W,D);let U=z0(this.defaultCapabilities,$.capabilities),F=U?.toolExecutors??this.toolExecutors,O=$.localRuntime,T=O?.extensionContext?.logger??O?.logger,z=O?.extensionContext?.automation,L,P={getSession:(C)=>this.sessions.get(C),subAgentStarts:this.subAgentStarts,onAgentEvent:(C,X0,f0)=>this.eventBridge.dispatchAgentEvent(C,X0,f0),invokeBackendOptional:(C,...X0)=>this.invokeOptional(C,...X0)};L=await iV({input:j,localRuntime:$.localRuntime,sessionId:W,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:U,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(C)=>{if(C.name==="plugin_log"){this.eventBridge.handlePluginLog(W,C.payload,T);return}this.eventBridge.handlePluginEvent(W,C,z)},onTeamEvent:(C)=>{this.eventBridge.handleTeamEvent(W,C),L.config.onTeamEvent?.(C)},createSpawnTool:()=>gj(P,L.config,W,F),createSubAgentLifecycleCallbacks:(C)=>xj(P,C,W),readSessionMetadata:async()=>(await this.getSession(W))?.metadata,writeSessionMetadata:async(C)=>{await this.persistSessionMetadata(W,()=>C)}});let S=await this.runtimeBuilder.build(L.runtimeBuilderInput),b=L.config,u=L.providerConfig;if(S.teamRuntime&&!b.teamName?.trim())b.teamName=S.teamRuntime.getTeamName();let o=[...S.tools,...b.extraTools??[]],J0=S.extensions??L.extensions,t={sessionId:W,providerId:u.providerId,modelId:u.modelId,apiKey:u.apiKey,baseUrl:u.baseUrl,headers:u.headers,knownModels:u.knownModels,providerConfig:u,thinking:b.thinking,reasoningEffort:b.reasoningEffort??u.reasoningEffort,systemPrompt:b.systemPrompt,maxIterations:b.maxIterations,execution:b.execution,prepareTurn:N4(b),tools:o,hooks:L.hooks,extensions:J0,hookErrorMode:b.hookErrorMode,initialMessages:L.effectiveInput.initialMessages,userFileContentLoader:BF,toolPolicies:L.toolPolicies,requestToolApproval:L.requestToolApproval?async(C)=>{let X0=L.requestToolApproval,f0=this.sessions.get(W);if(f0)await this.markTurnPending(f0);try{if(!X0)return{approved:!1,reason:"Tool approval callback is not configured."};return await X0(C)}finally{let w0=this.sessions.get(W);if(w0?.status==="pending")await this.markTurnRunning(w0)}}:void 0,telemetry:b.telemetry,onConsecutiveMistakeLimitReached:b.onConsecutiveMistakeLimitReached,completionPolicy:S.completionPolicy,consumePendingUserMessage:()=>{let C=this.pendingPromptsController.consumeSteer(W);return C?GJ(C.prompt,C.mode??b.mode):void 0},logger:S.logger??b.logger,extensionContext:b.extensionContext,onEvent:(C)=>this.eventBridge.dispatchAgentEvent(W,b,C)};t.hooks={...t.hooks,onEvent:async(C)=>{if(await L.hooks?.onEvent?.(C),C.type!=="assistant-message")return;let X0=this.sessions.get(W);if(!X0)return;let f0=X0.agent.getMessages();try{await this.invoke("persistSessionMessages",W,f0,b.systemPrompt)}catch(w0){b.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:W,error:w0}),h2(b.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:w0,severity:"warn",handled:!0,context:{sessionId:W,providerId:b.providerId,modelId:b.modelId}})}}};let $1=this.createAgentInstance(t);if(t.onEvent)$1.subscribeEvents(t.onEvent);S.registerLeadAgent?.($1);let b$=g1({agentId:$1.getAgentId(),conversationId:$1.getConversationId(),teamId:S.teamRuntime?.getTeamId(),teamName:S.teamRuntime?.getTeamName(),teamRole:S.teamRuntime?"lead":void 0});if(aV(b,W,Z.length>0,A,b$),b$)$$(b.telemetry,{ulid:W,modelId:b.modelId,provider:b.providerId,...b$});if(S.teamRuntime)aJ(b.telemetry,{ulid:W,teamId:S.teamRuntime.getTeamId(),teamName:S.teamRuntime.getTeamName(),leadAgentId:$1.getAgentId(),restoredFromPersistence:S.teamRestoredFromPersistence===!0});let r={sessionId:W,config:b,sessionMetadata:j.sessionMetadata,...G?{artifacts:G}:{},source:J,startedAt:G?.manifest.started_at??Q,updatedAt:G?.manifest.ended_at??G?.manifest.started_at??Q,pendingPrompt:K.prompt,runtime:S,agent:$1,started:!1,status:G?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:X,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:L.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(this.sessions.set(W,r),this.emitStatus(W,"running"),X.length>0&&!G){if(await this.ensureSessionPersisted(r),await this.invoke("persistSessionMessages",r.sessionId,X,r.config.systemPrompt),!j.prompt?.trim())await this.updateStatus(r,"completed",0)}let O1;try{if(j.prompt?.trim())if(O1=await this.executeTurn(r,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!r.interactive)await this.finalizeSingleRun(r,O1.finishReason);else await this.completeInteractiveTurn(r,O1.finishReason)}catch(C){if(r.interactive&&r.aborting)O1=await this.completeAbortedInteractiveTurn(r);else{h2(r.config.telemetry,{component:"core",operation:"session.start",error:C,severity:"error",handled:!1,context:{sessionId:r.sessionId,providerId:r.config.providerId,modelId:r.config.modelId}});try{await this.failSession(r)}catch(X0){r.config.logger?.error?.("Session failure cleanup threw",{sessionId:r.sessionId,error:X0})}throw C}}return{sessionId:W,manifest:K,manifestPath:B,messagesPath:H,result:O1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(J)=>this.getSession(J),readMessages:(J)=>this.readSessionMessages(J),buildStartInput:(J,Q)=>{let Z=J.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:J.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...Z?{sessionMetadata:Z}:{},initialMessages:J.initialMessages}},startSession:(J)=>this.startSession(J),getStartedSessionId:(J)=>J.sessionId,readRestoredSession:(J)=>this.getSession(J)})}async runTurn($){let J=this.getSessionOrThrow($.sessionId),Q=J.agent.canStartRun(),Z=$.delivery??(J.interactive&&!Q?"queue":void 0);if(J.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:Z??"immediate"}}),Z==="queue"||Z==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:Z,userImages:$.userImages,userFiles:$.userFiles});return}try{let W=await this.executeTurn(J,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!J.interactive)await this.finalizeSingleRun(J,W.finishReason);else await this.completeInteractiveTurn(J,W.finishReason);if(W.finishReason==="error"||W.finishReason==="aborted")return W;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),W}catch(W){if(J.interactive&&J.aborting)return await this.completeAbortedInteractiveTurn(J);throw h2(J.config.telemetry,{component:"core",operation:"session.submit",error:W,severity:"error",handled:!1,context:{sessionId:J.sessionId,providerId:J.config.providerId,modelId:J.config.modelId}}),await this.failSession(J),W}}async getAccumulatedUsage($){let J=O7(this.usageBySession.get($)),Q=O7(this.aggregateUsageBySession.get($));return J||Q?{usage:J,aggregateUsage:Q}:void 0}async abort($,J){let Q=this.sessions.get($);if(!Q)return;Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,this.pendingPromptsController.clearAborted(Q),Q.agent.abort(J)}async stopSession($){let J=this.sessions.get($);if(!J)return;if(J.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),J.interactive&&!j0(J.status)){await this.releaseSessionRuntime(J,"session_stop");return}if(J.interactive&&J.agent.canStartRun()){await this.shutdownSession(J,{status:this.resolveInteractiveStopStatus(J),exitCode:this.resolveInteractiveStopExitCode(J),shutdownReason:"session_stop",endReason:"stopped"});return}J.aborting=!0,J.agent.abort(Error("session_stop")),await this.shutdownSession(J,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let J=[...this.sessions.values()];if(J.length===0)return;await Promise.allSettled(J.map((Q)=>Q.interactive&&!j0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let J=this.sessions.get($);if(J)return kj(J);let Q=$.trim();if(!Q)return;let Z=await this.getRow(Q);if(Z)return W6(Z);let W=await this.readManifest(Q);return W?pQ(W):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(W6),Z=new Set(Q.map((W)=>W.sessionId));for(let W of this.sessions.values()){if(Z.has(W.sessionId))continue;Q.unshift(kj(W))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let J=await this.invoke("deleteSession",$);if(J.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return J.deleted}async updateSession($,J){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:J.prompt,metadata:J.metadata,title:J.title}))?.updated===!0}}async readSessionMessages($){let J=$.trim();if(!J)return[];let Q=await this.getRow(J);if(Q?.messagesPath)return q$(Q.messagesPath);let Z=await this.readManifest(J);return q$(Z?.messages_path)}async dispatchHookEvent($){await RB($,{queueSpawnRequest:(J)=>this.invokeOptional("queueSpawnRequest",J),upsertSubagentSessionFromHook:(J)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",J),appendSubagentHookAudit:(J,Q)=>this.invokeOptional("appendSubagentHookAudit",J,Q),applySubagentStatus:(J,Q)=>this.invokeOptional("applySubagentStatus",J,Q)})}subscribe($,J){return this.events.subscribe($,J)}async updateSessionModel($,J){let Q=this.getSessionOrThrow($);Q.config.modelId=J,Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:J}),Q.agent.updateConnection({modelId:J})}handlePluginEvent($,J,Q){return this.eventBridge.handlePluginEvent($,J,Q)}async executeTurn($,J){let Q=await this.prepareTurnInput($,J),Z=Q.prompt.trim();if(!Z)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=Z;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let W=await this.executeAgentTurn($,Z,Q.userImages,Q.userFiles);while(o7($,W.finishReason)){let j=await t7($);if(j.length===0)break;let X=e7($,j);W=await this.executeAgentTurn($,X)}return W}async completeInteractiveTurn($,J){if(KJ($))return;$.lastInteractiveTurnFinishReason=J,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let J=$.lastInteractiveTurnFinishReason;if(!J)return"cancelled";switch(J){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return J}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let J=new Date,Q=$.agent.getMessages(),Z=D0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:Z}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:Z,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:J,endedAt:J,durationMs:0}}async executeAgentTurn($,J,Q,Z){let W=$.started||$.agent.getMessages().length>0,j=$.persistedMessages??$.agent.getMessages(),X=this.usageBySession.get($.sessionId)??D0(),f=this.aggregateUsageBySession.get($.sessionId)??X;$.turnUsageBaseline=X,$.turnAggregateUsageBaseline=f,$.turnPrimaryUsage=D0(),$.turnUsageByAgent=new Map,uJ($.config.telemetry,$.sessionId,$.config.mode),g2($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let Y=W?()=>$.agent.continue(J,Q,Z):()=>$.agent.run(J,Q,Z),V=await this.runWithAuthRetry($,Y,j);$.started=!0;let H=x5(V.messages,V,j);$.persistedMessages=H;let B=X6($.turnUsageByAgent?.values()??[]),A=B0(X,V.usage),K=B0(B0(D0(),V.usage),B),G=B0(f,K);return this.usageBySession.set($.sessionId,A),this.aggregateUsageBySession.set($.sessionId,G),await this.persistSessionMetadata($.sessionId,(R)=>({...R??{},totalCost:A.totalCost,aggregatedAgentsCost:G.totalCost,usage:A,aggregateUsage:G})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,V),V}catch(Y){throw h2($.config.telemetry,{component:"core",operation:"session.turn",error:Y,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),Y}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,J){if($.submitAndExitObserved)return;if(!J.toolCalls.some((Z)=>Z.name===F0.SUBMIT_AND_EXIT&&Z.error===void 0))return;$.submitAndExitObserved=!0,H4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,J){let Q=G$($.config),Z=rb(J.prompt).trim();if(!Z)return{prompt:"",userImages:J.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,J.userFiles)};let W=await a2(Z,Q);sV($.config.telemetry,W);let j=GJ(W.prompt,J.mode??$.config.mode),X=this.resolveAbsoluteFilePaths($.config.cwd,J.userFiles),f=this.resolveAbsoluteFilePaths(Q,W.matchedFiles),Y=Array.from(new Set([...X,...f]));return{prompt:j,userImages:J.userImages,userFiles:Y.length>0?Y:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let J=G$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:J,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,J){let Q=this.sessions.get($),Z=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,W=J(Z?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:W}))?.updated===!1)return;Q.sessionMetadata=W,Q.artifacts.manifest.metadata=W}async finalizeSingleRun($,J){if(KJ($))return;let Q=J==="aborted"||$.aborting,Z=J==="error";await this.shutdownSession($,{status:Q?"cancelled":Z?"failed":"completed",exitCode:Z?1:0,shutdownReason:Z?"session_error":"session_complete",endReason:J})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,J){if(J.status==="completed"&&!$.submitAndExitObserved)H4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});Y9($);let Q=[],Z=(W,j)=>{Q.push(j),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:W,error:j,severity:"warn"}),h2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,status:J.status,shutdownReason:J.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,J.status,J.exitCode)}catch(W){Z("update_status",W)}try{await $.agent.shutdown(J.shutdownReason)}catch(W){Z("agent_shutdown",W)}}try{await Promise.resolve($.runtime.shutdown(J.shutdownReason))}catch(W){Z("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){Z("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:J.endReason,ts:Date.now()}}),Q.length>0&&J.status==="failed")throw Q[0]}async releaseSessionRuntime($,J){let Q=[],Z=(W,j)=>{Q.push(j),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:W,error:j,severity:"warn"}),h2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,reason:J,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(J)}catch(W){Z("agent_shutdown",W)}try{await Promise.resolve($.runtime.shutdown(J))}catch(W){Z("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){Z("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,J,Q){if(!$.artifacts)return;let Z=await this.invoke("updateSessionStatus",$.sessionId,J,Q);if(!Z.updated)return;let W=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(W.status=J,j0(J))delete W.ended_at,W.exit_code=null;else W.ended_at=Z.endedAt??e(),W.exit_code=typeof Q==="number"?Q:null;$.artifacts.manifest=W,$.status=J,$.updatedAt=Z.endedAt??e(),$.endedAt=j0(J)?null:W.ended_at,$.exitCode=W.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,W),this.emitStatus($.sessionId,J)}async runWithAuthRetry($,J,Q){try{return await J()}catch(Z){if(!I$($.config.providerId)||!pb(Z))throw Z;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),J()}}async syncOAuthCredentials($,J){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:J?.forceRefresh})}catch(Z){if(Z instanceof $Z)throw Error(`${Z.providerId} requires re-authentication.`);throw Z}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let J=this.sessions.get($);if(!J){let Q=new u1($);throw h2(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return J}resolveAbsoluteFilePaths($,J){if(!J||J.length===0)return[];let Q=J.map((Z)=>Z.trim()).filter((Z)=>Z.length>0).map((Z)=>db(Z)?Z:vj($,Z));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return g1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let J=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=B0($.initialUsage,J);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,J,Q){let Z=vj(J),W=`${Q}.messages.json`,j;try{j=cb($)}catch{return D0()}let X=D0();for(let f of j){if(!f.endsWith(".messages.json"))continue;if(f===W)continue;let Y=vj($,f);if(Y===Z)continue;let V=await q$(Y);if(V.length===0)continue;X=B0(X,f8(V))}return X}withPersistedAggregateUsageFloor($,J){let Q=nb(J.metadata?.aggregateUsage);if(Q)return ab($,Q);let Z=J.metadata?.aggregatedAgentsCost;if(typeof Z!=="number"||!Number.isFinite(Z)||Z<=$.totalCost)return $;return{...$,totalCost:Z}}emitStatus($,J){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:J}})}async emitSessionSnapshot($){let J=await this.getSession($);if(!J)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:F1({session:J,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),AF))}async getRow($){let J=$.trim();if(!J)return;return(await this.listRows(AF)).find((Z)=>Z.sessionId===J)}async readManifest($){let J=$.trim();if(!J)return;return await this.invokeOptionalValue("readSessionManifest",J)}invoke($,...J){return YF(this.sessionService,$,...J)}invokeOptional($,...J){return VF(this.sessionService,$,...J)}invokeOptionalValue($,...J){return HF(this.sessionService,$,...J)}}function ob($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((J)=>({name:J.name,input:J.input,output:J.output,error:J.error,durationMs:J.durationMs}))}}function tb($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function T9($={}){let J=new z1({sessionService:new L1(new U1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Q){let Z=(Q.cwd?.trim()||Q.workspaceRoot).trim(),W=await J.startSession({source:Q.source?.trim()||U0.CLI,interactive:!1,config:{providerId:sb(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:Z,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:tb(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{configExtensions:Q.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(Q,Z){let W=await J.runTurn({sessionId:Q,prompt:Z.prompt,userImages:Z.attachments?.userImages,userFiles:Z.attachments?.userFiles?.map((j)=>j.content)});if(!W)throw Error("local hub schedule runtime returned no turn result");return{result:ob(W)}},async abortSession(Q){return await J.abort(Q,Error("hub schedule abort")),{applied:!0}},async stopSession(Q){return await J.stopSession(Q),{applied:!0}}}}$h(process.env.CLINE_VCR);function Qh($){let J=process.cwd(),Q,Z,W;for(let j=0;j<$.length;j+=1){let X=$[j],f=$[j+1];if(X==="--cwd"&&f){J=f,j+=1;continue}if(X==="--host"&&f){Q=f,j+=1;continue}if(X==="--port"&&f){let Y=Number(f);if(Number.isFinite(Y))Z=Y;j+=1;continue}if(X==="--pathname"&&f)W=f,j+=1}return{cwd:J,host:Q,port:Z,pathname:W}}async function Zh(){let $=Qh(process.argv.slice(2));process.chdir($.cwd);let J=i0({host:$.host,port:$.port,pathname:$.pathname}),Q=await C2({host:J.host,port:J.port,pathname:J.pathname,owner:Jh()==="production"?n0():E0(),runtimeHandlers:T9(),cronOptions:{workspaceRoot:$.cwd}}),Z=async()=>{await Q.close(),process.exit(0)},W=!1,j=(X,f)=>{if(W)return;W=!0;let Y=f instanceof Error?f.stack||f.message:String(f);process.stderr.write(`[hub-daemon] ${X}: ${Y}
|
|
742
|
+
`),Q.close().catch((V)=>{let H=V instanceof Error?V.stack||V.message:String(V);process.stderr.write(`[hub-daemon] shutdown after ${X} failed: ${H}
|
|
743
|
+
`)}).finally(()=>{process.exit(1)})};process.on("SIGINT",()=>{Z()}),process.on("SIGTERM",()=>{Z()}),process.on("uncaughtException",(X)=>{j("uncaughtException",X)}),process.on("unhandledRejection",(X)=>{if(X instanceof eb){process.stderr.write(`[hub-daemon] ignored agent runtime abort rejection: ${X.message}
|
|
744
|
+
`);return}j("unhandledRejection",X)}),await new Promise(()=>{})}Zh().catch(($)=>{let J=$ instanceof Error?$.stack||$.message:String($);process.stderr.write(`[hub-daemon] fatal: ${J}
|
|
733
745
|
`),process.exit(1)});
|