@cline/core 0.0.67 → 0.0.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{createRequire as
|
|
2
|
-
`,"utf8"),
|
|
3
|
-
`)}function
|
|
4
|
-
`),W}finally{x5.delete($.lockDir),uN($)}}function C1($,Z,Q={}){let J=dN($,Q);return jB(J,$,Z)}async function g5($,Z,Q={}){let J=await pN($,Q);return jB(J,$,Z)}function lN($){let Z=nN($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function iN($,Z){let Q=JSON.stringify($),J=JSON.parse(Q),W=Z(J),X=JSON.stringify(J),j=Z($);if(JSON.stringify($)!==X)throw new t2("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(j)!==JSON.stringify(W))throw new t2("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return j}function rN($){let Z=nV($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(J){let W=J instanceof Error?J.message:String(J);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 nN($){try{return rN($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function YB($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function aN($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function j6($={}){let Z=$.filePath??j0(),Q=nV(Z,"utf8"),J;try{J=JSON.parse(Q)}catch(X){let j=X instanceof Error?X.message:String(X);throw Error(`Failed to parse MCP settings JSON at "${Z}": ${j}`)}let W=xN.safeParse(J);if(!W.success){let X=W.error.issues.map((j)=>{let Y=j.path.join(".");return Y?`${Y}: ${j.message}`:j.message}).join("; ");throw Error(`Invalid MCP settings at "${Z}": ${X}`)}return W.data}function $8($){if(!$)return;let Z={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(Z).length>0?Z:void 0}function oN($){if($===void 0)return;let Z=h7.safeParse($);if(!Z.success)return;return $8(Z.data)}function a$($={}){let Z=$.filePath??j0();return rV(Z)}function G1($={}){let Z=j6($);return Object.entries(Z.mcpServers).map(([Q,J])=>({name:Q,transport:J.transport,disabled:J.disabled,timeoutSeconds:J.timeoutSeconds,metadata:J.metadata,oauth:J.oauth}))}function Y6($){let Z=$.filePath??j0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");C1(Z,(J)=>{let W=J.mcpServers;if(!W||typeof W!=="object"||Array.isArray(W))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let X={...W},j=YB(X,Q);if(!j)throw Error(`Unknown MCP server: ${Q}`);let Y={...j};if($.disabled)Y.disabled=!0;else delete Y.disabled;aN(X,Q,Y),J.mcpServers=X})}function V6($,Z={}){let Q=j6(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return $8(Q.mcpServers[$]?.oauth)}function VB($,Z){return(Q)=>{let J=Q.mcpServers,W=YB(J,$);if(!W)throw Error(`Unknown MCP server: ${$}`);let X=oN(W.oauth)??{},j=$8(Z(X));if(j)W.oauth=j;else delete W.oauth;return j??{}}}function B6($,Z,Q={}){let J=Q.filePath??j0();return C1(J,VB($,Z))}async function x7($,Z,Q={}){let J=Q.filePath??j0();return g5(J,VB($,Z))}function g7($={}){return G1($).map((Q)=>{let J=Q.transport.type!=="stdio",W=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:J,oauthConfigured:J&&typeof W==="string"&&W.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,J)=>Q.serverName.localeCompare(J.serverName))}async function H6($,Z={}){let Q=G1(Z);for(let J of Q)await $.registerServer(J);return Q}var X6,tV,eV,h7,CN,wN,PN,SN,bN,yN,$B,kN,hN,IN,xN,I5,e2,t2,I7=1e4,ZB=25,vN,x5;var v5=b$(()=>{X6=S.record(S.string(),S.string()),tV=S.record(S.string(),S.unknown()),eV=S.preprocess(($)=>RN($)?MN($):void 0,S.number().optional()),h7=S.object({clientInformation:S.record(S.string(),S.unknown()).optional(),tokens:S.record(S.string(),S.unknown()).optional(),codeVerifier:S.string().optional(),discoveryState:S.record(S.string(),S.unknown()).optional(),redirectUrl:S.string().url().optional(),lastError:S.string().optional(),lastAuthenticatedAt:S.number().int().positive().optional()}).strip(),CN=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:X6.optional()}),wN=S.object({type:S.literal("sse"),url:S.string().url(),headers:X6.optional()}),PN=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:X6.optional()}),SN=S.discriminatedUnion("type",[CN,wN,PN]),bN=S.object({transport:SN,disabled:S.boolean().optional(),timeout:eV,metadata:tV.optional(),oauth:h7.optional()}).transform(($)=>({transport:$.transport,disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth})),yN=S.enum(["stdio","sse","http","streamableHttp"]).optional(),$B=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:yN,disabled:S.boolean().optional(),timeout:eV,metadata:tV.optional(),oauth:h7.optional()});kN=$B.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:X6.optional()}).superRefine(($,Z)=>{let Q=$.type??y7($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth})),hN=$B.extend({url:S.string().url(),headers:X6.optional()}).superRefine(($,Z)=>{let Q=$.type??y7($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??y7($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth}}),IN=S.union([bN,kN,hN]),xN=S.object({mcpServers:S.record(S.string(),IN)}).passthrough();I5=class I5 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};e2=class e2 extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};t2=class t2 extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};vN=new Int32Array(new SharedArrayBuffer(4)),x5=new Set});import{existsSync as dC,mkdirSync as pC,readFileSync as lC,writeFileSync as iC}from"node:fs";import{resolve as rC}from"node:path";import{resolveSessionDataDir as nC}from"@cline/shared/storage";import{nanoid as aC}from"nanoid";import*as oC from"node-machine-id";function m6(){if(!UK)FK=DK(),UK=!0;return FK??_K()}function t0($){let Z=$?.trim();if(Z)return Z;let Q=DK();if(Q)return Q;return _K()}function tC(){let $=oC;return $.machineIdSync??$.default?.machineIdSync}function DK(){try{let $=tC();if(!$)return;return $().trim()||void 0}catch{return}}function _K(){let $=nC(),Z=rC($,sC);try{if(dC(Z)){let J=lC(Z,"utf8").trim();if(J.length>0)return J}}catch{}let Q=`cl-${aC()}`;try{pC($,{recursive:!0}),iC(Z,Q,"utf8")}catch{}return Q}var sC="machine-id",FK,UK=!1;var H2=()=>{};class K4{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,Z){if(!this.isEnabled())return;this.emitLog($,Z,!1)}emitRequired($,Z){this.emitLog($,Z,!0)}recordCounter($,Z,Q,J,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let X=this.counters.get($);if(!X)X=this.meter.createCounter($,J?{description:J}:void 0),this.counters.set($,X);X.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,J,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let X=this.histograms.get($);if(!X)X=this.meter.createHistogram($,J?{description:J}:void 0),this.histograms.set($,X);X.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,J,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let X=this.buildAttributes(Q),j=JSON.stringify(X),Y=this.gaugeValues.get($);if(Z===null){if(Y){if(Y.delete(j),Y.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=Y;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let B=this.meter.createObservableGauge($,J?{description:J}:void 0);B.addCallback((H)=>{for(let K of this.snapshotGaugeSeries($))H.observe(K.value,this.flattenProperties(K.attributes))}),this.gauges.set($,B)}V.set(j,{value:Z,attributes:X})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,Z,Q){if(!this.logger)return;let J=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:J})}buildAttributes($,Z=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...Z?{_required:!0}:{}}}snapshotGaugeSeries($){let Z=this.gaugeValues.get($);if(!Z)return[];return Array.from(Z.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,Z="",Q=new WeakSet,J=0){if(!$)return{};let W={},X=100,j=10;for(let[Y,V]of Object.entries($)){if(Y==="__proto__"||Y==="constructor"||Y==="prototype")continue;let B=Z?`${Z}.${Y}`:Y;if(V===null||V===void 0){W[B]=String(V);continue}if(Array.isArray(V)){let H=V.length>X?V.slice(0,X):V;try{W[B]=JSON.stringify(H)}catch{W[B]="[UnserializableArray]"}if(V.length>X)W[`${B}_truncated`]=!0,W[`${B}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){W[B]=V.toISOString();continue}if(V instanceof Error){W[B]=V.message;continue}if(Q.has(V)){W[B]="[Circular]";continue}if(J>=j){W[B]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(W,this.flattenProperties(V,B,Q,J+1));continue}if(Nk(V)){W[B]=V;continue}try{W[B]=JSON.stringify(V)}catch{W[B]=String(V)}}return W}}function Nk($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class e9{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,Z){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:Z})}emitRequired($,Z){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:Z})}recordCounter($,Z,Q,J,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:J,required:W===!0})}recordHistogram($,Z,Q,J,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:J,required:W===!0})}recordGauge($,Z,Q,J,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:J,required:W===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class G4{adapters;metadata;distinctId;deviceId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new e9({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.deviceId=$.deviceId??m6(),this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let Z=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,Z)}captureRequired($,Z){let Q=this.buildAttributes(Z);for(let J of this.adapters)J.emitRequired($,Q)}recordCounter($,Z,Q,J,W=!1){let X=this.buildAttributes(Q);for(let j of this.adapters)j.recordCounter($,Z,X,J,W)}recordHistogram($,Z,Q,J,W=!1){let X=this.buildAttributes(Q);for(let j of this.adapters)j.recordHistogram($,Z,X,J,W)}recordGauge($,Z,Q,J,W=!1){let X=this.buildAttributes(Q);for(let j of this.adapters)j.recordGauge($,Z,X,J,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}:{},device_id:this.deviceId}}}var QW=b$(()=>{H2()});import{metrics as fk,trace as Rk}from"@opentelemetry/api";import{logs as Mk}from"@opentelemetry/api-logs";import{OTLPLogExporter as Ek}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as Ck}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as wk}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as Pk}from"@opentelemetry/resources";import{BatchLogRecordProcessor as Sk,ConsoleLogRecordExporter as bk,LoggerProvider as yk}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as kk,MeterProvider as hk,PeriodicExportingMetricReader as cF}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as Ik,ConsoleSpanExporter as xk,SimpleSpanProcessor as gk}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as vk}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as mk,ATTR_SERVICE_VERSION as ck}from"@opentelemetry/semantic-conventions";class uF{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,Z){this.resolveProperties(Z)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class F4{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=Pk({[mk]:$.serviceName??"cline",...$.serviceVersion?{[ck]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)fk.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)Mk.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return Rk.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new K4({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new G4({...$,adapters:[Z],distinctId:t0($.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider($){let Z=JW(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),J=Math.min(30000,Math.floor(Q*0.8)),W=Z.map((X)=>pk(X,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:J})).filter((X)=>X!==null);if(W.length===0)return null;return new hk({resource:$,readers:W})}createTracerProvider($){let Z=JW(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,J=this.options.otlpTracesHeaders??this.options.otlpHeaders,W=[];for(let X of Z){let j=dk(X,{endpoint:Q,headers:J,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(j)W.push(j)}if(W.length===0)return null;return new vk({resource:$,spanProcessors:W})}createLoggerProvider($){let Z=JW(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((J)=>{let W=uk(J,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!W)return null;return new Sk(W,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((J)=>J!==null);if(Q.length===0)return null;return new yk({resource:$,processors:Q})}}function $Z($){let Z=new F4($),Q=Z.createTelemetryService($),J=()=>{Q.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion})};if(!$.deferProviderCreatedEvent)J();return{provider:Z,telemetry:Q,emitProviderCreated:J}}function O2($){if(zQ())return{telemetry:new uF($)};if($.enabled!==!0)return{telemetry:new G4({...$,distinctId:t0($.distinctId)})};return $Z($)}function ZZ($){let{telemetry:Z,provider:Q,emitProviderCreated:J}=O2($);return{telemetry:Z,provider:Q,flush:async()=>{let j=Q;if(j&&typeof j.forceFlush==="function")try{await j.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])},...$.deferProviderCreatedEvent&&J?{emitProviderCreated:J}:{}}}function JW($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function uk($,Z){if($==="console")return new bk;if(!Z.endpoint)return null;let Q=WW(Z.endpoint,"/v1/logs");return new Ek({url:Q,headers:Z.headers})}function dk($,Z){if($==="console")return new gk(new xk);if(!Z.endpoint)return null;let Q=WW(Z.endpoint,"/v1/traces");return new Ik(new wk({url:Q,headers:Z.headers}))}function pk($,Z){if($==="console")return new cF({exporter:new kk,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=WW(Z.endpoint,"/v1/metrics");return new cF({exporter:new Ck({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function WW($,Z){let Q=new URL($),J=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=J.endsWith(Z)?J:`${J}${Z}`,Q.toString()}var QZ=b$(()=>{J1();H2();QW()});var sU={};RZ(sU,{resolveCoreDistinctId:()=>t0,resolveCoreDeviceId:()=>m6,createOpenTelemetryTelemetryService:()=>$Z,createConfiguredTelemetryService:()=>O2,createConfiguredTelemetryHandle:()=>ZZ,OpenTelemetryProvider:()=>F4,OpenTelemetryAdapter:()=>K4});var BZ=b$(()=>{H2();QZ()});import*as x60 from"@cline/llms";import{ClineFreeModelLimitError as v60,ClineNotSubscribedError as m60,ClineOrgIndividualInferenceSubscriptionError as c60,ClinePassLimitError as u60,extractClineFreeModelLimitResetTime as d60,extractClinePassLimitMessage as p60,getClineNotSubscribedMessage as l60,getClineOrgIndividualInferenceSubscriptionMessage as i60,getClinePassSubscriptionUrl as r60,isClineFreeModelLimitError as n60,isClineFreeModelLimitMessage as a60,isClineModelNotFoundMessage as o60,isClineNotSubscribedError as s60,isClineNotSubscribedMessage as t60,isClineOrgIndividualInferenceSubscriptionError as e60,isClineOrgIndividualInferenceSubscriptionMessage as $40,isClinePassLimitError as Z40,isClinePassLimitMessage as Q40}from"@cline/llms";import{buildClineSystemPrompt as W40,buildSdkErrorProperties as X40,ContributionRegistry as j40,captureSdkError as Y40,createClineTelemetryServiceConfig as V40,createClineTelemetryServiceMetadata as B40,createContributionRegistry as H40,createTool as K40,emptyWorkspaceManifest as G40,FEATURE_FLAGS as F40,FeatureFlagDefaultValue as U40,formatDisplayUserInput as D40,noopBasicLogger as _40,normalizeSdkError as L40,normalizeUserInput as A40,parseUserCommandEnvelope as O40,registerDisposable as q40,SDK_ERROR_TELEMETRY_EVENT as z40,stripUtf8Bom as T40}from"@cline/shared";export*from"@cline/shared/storage";function Y_($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function KX($,Z,Q){let J=Y_(Q);if(J)return J;let W=Z.trim();if(W){let X=W.length>200?`${W.slice(0,200)}...`:W;return`Cline account request failed with status ${$}: ${X}`}return`Cline account request failed with status ${$}`}class MZ{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let Z=$.apiBaseUrl.trim();if(!Z)throw Error("apiBaseUrl is required");this.apiBaseUrl=Z,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let Z=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(Z)}/balance`)}async fetchUsageTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/usages`)).items??[]}async fetchPaymentTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let Z=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)Z.searchParams.set("type",$.type);return this.request(`${Z.pathname}${Z.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}`)}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/balance`)}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(Z,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let Z=$?.trim();if(Z)return Z;let J=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(J)return J;let W=await this.fetchMe();if(!W.id?.trim())throw Error("Unable to resolve current user id");return W.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let W=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(W)return W;let j=(await this.fetchUserOrganizations()).find((Y)=>Y.organizationId===$)?.memberId;if(!j?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return j}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let J=this.getHeadersFn?await this.getHeadersFn():{},W=new AbortController,X=setTimeout(()=>W.abort(),this.requestTimeoutMs);try{let j=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...J??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:W.signal});if(j.status===204||Z?.expectNoContent){if(!j.ok)throw Error(`Cline account request failed with status ${j.status}`);return}let Y=await j.text(),V;if(Y.trim())try{V=JSON.parse(Y)}catch{if(!j.ok)throw Error(KX(j.status,Y,void 0));throw Error("Cline account response was not valid JSON")}if(!j.ok)throw Error(KX(j.status,Y,V));if(typeof V==="object"&&V!==null){let B=V;if(typeof B.success==="boolean"){if(!B.success)throw Error(B.error||"Cline account request failed");return B.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(X)}}}function GX($){return $.action==="clineAccount"}async function FX($,Z){switch($.operation){case"fetchMe":return Z.fetchMe();case"fetchBalance":return Z.fetchBalance($.userId);case"fetchUsageTransactions":return Z.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return Z.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return Z.fetchUserOrganizations();case"fetchOrganizationBalance":return Z.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return Z.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await Z.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return Z.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class EZ{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:Z})}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:Z,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}function A4($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((J)=>{$.onOpenUrlError?.({url:Z,error:J})})}catch(J){$.onOpenUrlError?.({url:Z,error:J})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}import{decodeJwtPayload as w_,getClineEnvironmentConfig as lZ}from"@cline/shared";import{createHash as V_}from"node:crypto";var UX;function B_($){UX=$}function y0($){if(typeof $!=="string"||$.length===0)return"unset";return V_("sha256").update($).digest("hex").slice(0,8)}function s($){try{UX?.debug($)}catch{}}q0();function R_(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function T1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",J=$.timeoutMs??300000,W=$.successHtml??M_,X=R_(),j=!1,Y=null,V=null,B=null,H=(F)=>{if(j)return;j=!0,X.resolve(F)},K=()=>{if(Y)clearTimeout(Y),Y=null;let F=B;if(B=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:F})).catch(()=>{})},G=async()=>{return Y=setTimeout(()=>{K(),H(null)},J),X.promise};for(let F of $.ports){let U=Z.createServer((L,O)=>{try{let D=new URL(L.url||"",`http://${Q}:${F}`);if(D.pathname!==$.callbackPath){O.statusCode=404,O.end("Not found");return}let q={url:D,code:D.searchParams.get("code")??void 0,state:D.searchParams.get("state")??void 0,provider:D.searchParams.get("provider")??void 0,error:D.searchParams.get("error")??void 0};if(q.error){O.statusCode=400,O.end(`Authentication failed: ${q.error}`),K(),H(q);return}if(!q.code){O.statusCode=400,O.end("Missing authorization code");return}if($.expectedState&&q.state!==$.expectedState){O.statusCode=400,O.end("State mismatch");return}O.statusCode=200,O.setHeader("Content-Type","text/html; charset=utf-8"),O.end(W),K(),H(q)}catch{O.statusCode=500,O.end("Internal error")}}),_=await new Promise((L)=>{let O=(D)=>{U.off("error",O),L({bound:!1,error:D})};U.once("error",O),U.listen(F,Q,()=>{U.off("error",O),V=U,L({bound:!0})})});if(_.error){if(_.error.code==="EADDRINUSE")continue;throw K(),_.error}if(_.bound){B=F;let L=`http://${Q}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:F,callbackUrl:L})).catch(()=>{});return{callbackUrl:L,waitForCallback:G,cancelWait:()=>{K(),H(null)},close:()=>{K(),H(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var M_=`<!DOCTYPE html>
|
|
1
|
+
import{createRequire as Y_}from"node:module";var W_=Object.defineProperty;var X_=($)=>$;function j_($,Z){this[$]=X_.bind(null,Z)}var RZ=($,Z)=>{for(var Q in Z)W_($,Q,{get:Z[Q],enumerable:!0,configurable:!0,set:j_.bind(Z,Q)})};var b$=($,Z)=>()=>($&&(Z=$($=0)),Z);var KX=Y_(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as K_,captureAgentUnexpectedReasoningTokens as G_,captureTaskLifecycleEvent as Dm,SDK_ERROR_TELEMETRY_EVENT as F_,TASK_CANCELLED_EVENT as U_,TASK_FIRST_CHUNK_RECEIVED_EVENT as D_,TASK_PROVIDER_REQUEST_STARTED_EVENT as __,TASK_PROVIDER_STREAM_FAILED_EVENT as L_,TASK_PROVIDER_STREAM_STARTED_EVENT as A_}from"@cline/shared";function l($,Z,Q){$?.capture({event:Z,properties:Q})}function q4($){if(!$)return;return $.substring(0,O_)}function q_($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function z_($){return typeof $==="string"?$:$.message}function _X($,Z){return $.some((Q)=>Z.has(Q.trim().toLowerCase()))}function T_($){l($,x.CLIENT.EXTENSION_ACTIVATED)}function CZ($,Z){let Q=[...Z.vcs_types],J={root_count:Z.root_count,vcs_types:Q,is_multi_root:Z.root_count>1,has_git:_X(Q,new Set(["git"])),has_mercurial:_X(Q,new Set(["mercurial","hg"]))};if(Z.init_duration_ms!==void 0)J.init_duration_ms=Z.init_duration_ms;if(Z.feature_flag_enabled!==void 0)J.feature_flag_enabled=Z.feature_flag_enabled;if(Z.is_remote_workspace!==void 0)J.is_remote_workspace=Z.is_remote_workspace;l($,x.WORKSPACE.INITIALIZED,J)}function wZ($,Z,Q){l($,x.WORKSPACE.INIT_ERROR,{error_type:q_(Z),error_message:q4(z_(Z)),fallback_to_single_root:Q.fallback_to_single_root,workspace_count:Q.workspace_count??0})}function N_($,Z){l($,x.WORKSPACE.PATH_RESOLVED,{...Z})}function n1($,Z){l($,x.USER.AUTH_STARTED,{provider:Z})}function a1($,Z,Q){l($,x.USER.AUTH_SUCCEEDED,{provider:Z,...Q})}function o1($,Z,Q,J){l($,x.USER.AUTH_FAILED,{provider:Z,errorMessage:q4(Q),...J?.requestId?{request_id:J.requestId}:{}})}function y$($,Z,Q,J){l($,x.USER.AUTH_LOGGED_OUT,{provider:Z,reason:Q,...J})}function PZ($,Z,Q){l($,x.USER.AUTH_REFRESH_SOFT_FAILURE,{provider:Z,...Q})}function LX($,Z,Q){l($,x.USER.AUTH_RUN_RETRY,{provider:Z,recovered:Q?.recovered})}function f_($,Z){l($,x.USER.PROVIDER_CONFIGURED,{provider:Z})}function AX($,Z){$?.captureRequired(x.USER.TELEMETRY_OPT_OUT,Z)}function s1($,Z){let Q=Z.id?.trim();if(Q)$?.setDistinctId(Q);$?.updateCommonProperties({user_id:Q||Z.id,account_id:Z.id,account_email:Z.email,provider:Z.provider,organization_id:Z.organizationId,organization_name:Z.organizationName,member_id:Z.memberId})}function SZ($,Z){l($,x.TASK.CREATED,Z)}function bZ($,Z){l($,x.TASK.RESTARTED,Z)}function z4($,Z){l($,x.TASK.COMPLETED,Z)}function w8($,Z){l($,x.TASK.CONVERSATION_TURN,{...Z,timestamp:new Date().toISOString()})}function yZ($,Z){l($,x.TASK.TOKEN_USAGE,Z)}function kZ($,Z,Q){l($,x.TASK.MODE_SWITCH,{ulid:Z,mode:Q})}function P8($,Z){l($,x.TASK.TOOL_USED,Z)}function hZ($,Z){l($,x.TASK.SKILL_USED,Z)}function IZ($,Z){l($,x.TASK.DIFF_EDIT_FAILED,Z)}function T4($,Z){l($,x.TASK.PROVIDER_API_ERROR,{...Z,errorMessage:q4(Z.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function xZ($,Z){l($,x.TASK.MISTAKE_LIMIT_REACHED,{...Z,timestamp:new Date().toISOString()})}function OX($,Z){l($,x.SDK.TOOL_TIMEOUT,R_(Z))}function R_($){let Z={};for(let[Q,J]of Object.entries($))if(J!==void 0)Z[Q]=J;return Z}function gZ($,Z,Q){l($,x.TASK.MENTION_USED,{mentionType:Z,contentLength:Q,timestamp:new Date().toISOString()})}function vZ($,Z,Q,J){l($,x.TASK.MENTION_FAILED,{mentionType:Z,errorType:Q,errorMessage:q4(J),timestamp:new Date().toISOString()})}function mZ($,Z,Q,J,W){l($,x.TASK.MENTION_SEARCH_RESULTS,{queryLength:Z.length,resultCount:Q,searchType:J,isEmpty:W,timestamp:new Date().toISOString()})}function k$($,Z){l($,x.TASK.AGENT_CREATED,{...Z,timestamp:new Date().toISOString()})}function cZ($,Z){l($,x.TASK.AGENT_TEAM_CREATED,{...Z,timestamp:new Date().toISOString()})}function N4($,Z){l($,Z.event==="ended"?x.TASK.SUBAGENT_COMPLETED:x.TASK.SUBAGENT_STARTED,{...Z,timestamp:new Date().toISOString()})}function uZ($,Z,Q,J){l($,x.HOOKS.DISCOVERY_COMPLETED,{hookName:Z,globalCount:Q,workspaceCount:J,totalCount:Q+J,timestamp:new Date().toISOString()})}function dZ($,Z){l($,x.TASK.COMPACTION_EXECUTED,{...Z,timestamp:new Date().toISOString()})}function pZ($,Z){l($,x.TASK.COMPACTION_SKIPPED,{...Z,timestamp:new Date().toISOString()})}function qX($,Z){l($,x.TASK.COMPACTION_BUDGET_EMERGENCY,{...Z,timestamp:new Date().toISOString()})}var O_=500,x;var q0=b$(()=>{x={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:K_},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",AUTH_REFRESH_SOFT_FAILURE:"user.auth_refresh_soft_failure",AUTH_RUN_RETRY:"user.auth_run_retry",PROVIDER_CONFIGURED:"user.provider_configured",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MISTAKE_LIMIT_REACHED:"task.mistake_limit_reached",PROVIDER_REQUEST_STARTED:__,PROVIDER_STREAM_STARTED:A_,FIRST_CHUNK_RECEIVED:D_,PROVIDER_STREAM_FAILED:L_,CANCELLED:U_,MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed",COMPACTION_EXECUTED:"task.compaction_executed",COMPACTION_SKIPPED:"task.compaction_skipped",COMPACTION_BUDGET_EMERGENCY:"task.compaction_budget_emergency"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:F_,TOOL_TIMEOUT:"sdk.tool_timeout"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as AA,readFileSync as OA,statSync as qA,writeFileSync as zA}from"node:fs";import{dirname as TA}from"node:path";import{resolveGlobalSettingsPath as _j}from"@cline/shared/storage";import{z as H1}from"zod";function m4(){return u4.parse({})}function RA(){c4=void 0}function MA($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function EA($){let Z;try{Z=OA($,"utf8")}catch{return m4()}try{let Q=u4.safeParse(JSON.parse(Z));return Q.success?Q.data:m4()}catch{return m4()}}function CA(){let $=_j(),Z=qA($,{throwIfNoEntry:!1}),Q=Z?.mtimeMs??0,J=Z?.size??0,W=c4;if(W&&W.path===$&&W.mtimeMs===Q&&W.size===J)return W;let X=MA(Z?EA($):m4());return c4={path:$,mtimeMs:Q,size:J,value:X},c4}function X0(){return CA().value}function m0($,Z={}){let Q=_j(),J=X0();AA(TA(Q),{recursive:!0});let W=u4.parse($);if(!J.telemetryOptOut&&W.telemetryOptOut)AX(Z.telemetry);zA(Q,`${JSON.stringify(W,null,2)}
|
|
2
|
+
`,"utf8"),RA()}function zQ(){return X0().telemetryOptOut}function wA($,Z={}){m0({...X0(),telemetryOptOut:$},Z)}function PA(){return X0().autoUpdateEnabled}function SA($,Z={}){m0({...X0(),autoUpdateEnabled:$},Z)}function bA(){return X0().compactionStrategy??"agentic"}function yA($){m0({...X0(),compactionStrategy:$})}function kA(){let $=X0();if($.compactionEnabled===!1)return"off";return $.compactionStrategy}function hA($){let Z=X0();if($==="off"){m0({...Z,compactionEnabled:!1});return}m0({...Z,compactionEnabled:!0,compactionStrategy:$})}function IA(){return X0().planActMode}function xA($){m0({...X0(),planActMode:$})}function gA(){return X0().toolAutoApprove}function vA($){m0({...X0(),toolAutoApprove:$})}function f1($){return new Set($??X0().disabledTools??[])}function d4($){return new Set($??X0().disabledPlugins??[])}function mA($){return f1().has($)}function TQ($){let Z=X0(),Q=new Set(Z.disabledTools??[]),J=Q.has($);if(J)Q.delete($);else Q.add($);return m0({...Z,disabledTools:[...Q]}),!J}function Lj($,Z){let Q=[...new Set($.map((X)=>X.trim()).filter(Boolean))];if(Q.length===0)return;let J=X0(),W=f1(J.disabledTools);for(let X of Q)if(Z)W.add(X);else W.delete(X);m0({...J,disabledTools:[...W]})}function Aj($,Z){return Lj([$],Z),Z}function cA($){return d4().has($)}function uA($,Z){let Q=$.trim();if(!Q)return;let J=X0(),W=d4(J.disabledPlugins);if(Z)W.add(Q);else W.delete(Q);m0({...J,disabledPlugins:[...W]})}function NQ($,Z){let Q=d4(Z);if(Q.size===0)return[...$];return $.filter((J)=>!Q.has(J))}function e1($,Z){let Q=f1(Z);if(Q.size===0)return[...$];return $.filter((J)=>!Q.has(J.name))}function fQ($,Z){if(!$||$.length===0)return $;let Q=f1(Z);if(Q.size===0)return $;return $.map((J)=>{if(!J.setup)return J;return{...J,setup:(W,X)=>J.setup?.({...W,registerTool:(j)=>{if(!Q.has(j.name))W.registerTool(j)}},X)}})}var Dj,NA,fA,u4,c4;var J1=b$(()=>{q0();Dj=H1.preprocess(($)=>Array.isArray($)?$.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter(Boolean):void 0,H1.array(H1.string()).optional()).transform(($)=>{if(!$)return;let Z=[...new Set($)].sort((Q,J)=>Q.localeCompare(J));return Z.length>0?Z:void 0}),NA=H1.enum(["basic","agentic"]).catch("agentic"),fA=H1.enum(["plan","act"]),u4=H1.object({telemetryOptOut:H1.boolean().default(!1).catch(!1),autoUpdateEnabled:H1.boolean().default(!0).catch(!0),compactionStrategy:NA.optional(),compactionEnabled:H1.boolean().optional().catch(void 0),planActMode:fA.optional().catch(void 0),toolAutoApprove:H1.boolean().optional().catch(void 0),disabledTools:Dj.optional(),disabledPlugins:Dj.optional()}).strip().transform(($)=>{let Z={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.compactionStrategy)Z.compactionStrategy=$.compactionStrategy;if($.compactionEnabled!==void 0)Z.compactionEnabled=$.compactionEnabled;if($.planActMode)Z.planActMode=$.planActMode;if($.toolAutoApprove!==void 0)Z.toolAutoApprove=$.toolAutoApprove;if($.disabledTools?.length)Z.disabledTools=$.disabledTools;if($.disabledPlugins?.length)Z.disabledPlugins=$.disabledPlugins;return Z})});var VV={};RZ(VV,{normalizeUserMessage:()=>MT,buildInitialUserContent:()=>RT});async function RT($,Z,Q,J){let W=ET(Z),X=await wT(Q,J);if(W.length===0&&!X)return $;let j=[{type:"text",text:$},...W];if(X)j.push(...X);return j}function MT($){if($==null)return"";if(typeof $==="string")return $;let Z=$.content;if(typeof Z==="string")return Z;if(!Array.isArray(Z))return"";let Q=[];for(let J of Z)if(J&&typeof J==="object"&&J.type==="text"){let W=J.text;if(typeof W==="string")Q.push(W)}return Q.join(`
|
|
3
|
+
`)}function ET($){if(!$||$.length===0)return[];let Z=[];for(let Q of $){let J=CT(Q);if(J)Z.push(J)}return Z}function CT($){let Z=$.trim();if(!Z)return;let Q=Z.match(/^data:([^;,]+);base64,(.+)$/);if(Q){let J=Q[1],W=Q[2];if(!J||!W)return;return{type:"image",mediaType:J,data:W}}return{type:"image",mediaType:"image/png",data:Z}}async function wT($,Z){if(!$||$.length===0)return;let Q=Z??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),J=await Promise.all($.map(async(W)=>{let X=W.replace(/\\/g,"/");try{let j=await Q(W);return{type:"file",path:X,content:j}}catch(j){let Y=j instanceof Error?j.message:String(j);return{type:"file",path:X,content:`Error fetching content: ${Y}`}}}));if(J.length===0)return;return J}var HB={};RZ(HB,{updateMcpSettingsFileSync:()=>C1,updateMcpSettingsFile:()=>g5,updateMcpServerOAuthStateAsync:()=>x7,updateMcpServerOAuthState:()=>H6,setMcpServerDisabled:()=>V6,resolveMcpServerRegistrations:()=>G1,resolveDefaultMcpSettingsPath:()=>j0,registerMcpServersFromSettingsFile:()=>K6,normalizeMcpServerOAuthState:()=>Z8,loadMcpSettingsFile:()=>Y6,listMcpServerOAuthStatuses:()=>g7,hasMcpSettingsFile:()=>a$,getMcpServerOAuthState:()=>B6,McpSettingsUpdateSkippedError:()=>I5,McpSettingsMutatorPurityError:()=>e2,McpSettingsLockTimeoutError:()=>$8});import{randomUUID as TN}from"node:crypto";import{existsSync as nV,mkdirSync as S7,readFileSync as aV,renameSync as k7,rmdirSync as NN,rmSync as b7,statSync as fN,unlinkSync as oV,writeFileSync as sV}from"node:fs";import{dirname as tV,join as rV}from"node:path";import{setTimeout as RN}from"node:timers/promises";import{isMcpTimeoutConfigured as MN,resolveMcpTimeoutSeconds as EN}from"@cline/shared";import{resolveMcpSettingsPath as CN}from"@cline/shared/storage";import{z as S}from"zod";function y7($){if(!$)return;if($==="http")return"streamableHttp";return $}function j0(){return CN()}function vN($,Z){S7(tV($),{recursive:!0});let Q=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{sV(Q,Z,{encoding:"utf8",flag:"wx"}),k7(Q,$)}catch(J){try{oV(Q)}catch{}throw J}}function cN($){Atomics.wait(mN,0,0,$)}function uN($){return`${$}.lock`}function JB(){return`${process.pid}.${Date.now()}.${TN()}`}function WB($,Z){S7(tV($),{recursive:!0});let Q=`${$}.tmp.${Z}`;b7(Q,{recursive:!0,force:!0}),S7(Q,{recursive:!0}),sV(rV(Q,`owner.${Z}`),Z,{encoding:"utf8",flag:"wx"});try{return k7(Q,$),{lockDir:$,ownerFile:rV($,`owner.${Z}`)}}catch(J){if(b7(Q,{recursive:!0,force:!0}),nV($))return;throw J}}function XB($,Z){let Q;try{Q=Date.now()-fN($).mtimeMs}catch(W){if(W.code==="ENOENT")return;throw W}if(Q<I7)return;Z.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Q}ms); reclaiming.`,{severity:"warn"});let J=`${$}.stale.${JB()}`;try{k7($,J)}catch(W){if(W.code==="ENOENT")return;throw W}b7(J,{recursive:!0,force:!0})}function dN($){try{oV($.ownerFile)}catch(Z){if(Z.code!=="ENOENT")throw Z}try{NN($.lockDir)}catch(Z){let Q=Z.code;if(Q!=="ENOENT"&&Q!=="ENOTEMPTY"&&Q!=="EEXIST")throw Z}}function jB($){let Z=uN($);if(x5.has(Z))throw Error(`Reentrant MCP settings update for ${$}. Keep mutators pure: compute values up front and do not call back into the settings API.`);return{lockDir:Z,token:JB()}}function pN($,Z){let{lockDir:Q,token:J}=jB($),W=Z.timeoutMs??I7,X=Date.now();while(!0){let j=WB(Q,J);if(j)return x5.add(Q),j;if(Date.now()-X>W)throw new $8(`Timed out waiting for MCP settings lock at ${Q} after ${W}ms.`);XB(Q,Z),cN(QB)}}async function lN($,Z){let{lockDir:Q,token:J}=jB($),W=Z.timeoutMs??I7,X=Date.now();while(!0){let j=WB(Q,J);if(j)return x5.add(Q),j;if(Date.now()-X>W)throw new $8(`Timed out waiting for MCP settings lock at ${Q} after ${W}ms.`);XB(Q,Z),await RN(QB)}}function YB($,Z,Q){try{let J=iN(Z),W=rN(J,Q);return vN(Z,`${JSON.stringify(J,null,2)}
|
|
4
|
+
`),W}finally{x5.delete($.lockDir),dN($)}}function C1($,Z,Q={}){let J=pN($,Q);return YB(J,$,Z)}async function g5($,Z,Q={}){let J=await lN($,Q);return YB(J,$,Z)}function iN($){let Z=aN($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function rN($,Z){let Q=JSON.stringify($),J=JSON.parse(Q),W=Z(J),X=JSON.stringify(J),j=Z($);if(JSON.stringify($)!==X)throw new e2("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(j)!==JSON.stringify(W))throw new e2("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return j}function nN($){let Z=aV($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(J){let W=J instanceof Error?J.message:String(J);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 aN($){try{return nN($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function VB($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function oN($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function Y6($={}){let Z=$.filePath??j0(),Q=aV(Z,"utf8"),J;try{J=JSON.parse(Q)}catch(X){let j=X instanceof Error?X.message:String(X);throw Error(`Failed to parse MCP settings JSON at "${Z}": ${j}`)}let W=gN.safeParse(J);if(!W.success){let X=W.error.issues.map((j)=>{let Y=j.path.join(".");return Y?`${Y}: ${j.message}`:j.message}).join("; ");throw Error(`Invalid MCP settings at "${Z}": ${X}`)}return W.data}function Z8($){if(!$)return;let Z={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(Z).length>0?Z:void 0}function sN($){if($===void 0)return;let Z=h7.safeParse($);if(!Z.success)return;return Z8(Z.data)}function a$($={}){let Z=$.filePath??j0();return nV(Z)}function G1($={}){let Z=Y6($);return Object.entries(Z.mcpServers).map(([Q,J])=>({name:Q,transport:J.transport,disabled:J.disabled,timeoutSeconds:J.timeoutSeconds,metadata:J.metadata,oauth:J.oauth}))}function V6($){let Z=$.filePath??j0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");C1(Z,(J)=>{let W=J.mcpServers;if(!W||typeof W!=="object"||Array.isArray(W))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let X={...W},j=VB(X,Q);if(!j)throw Error(`Unknown MCP server: ${Q}`);let Y={...j};if($.disabled)Y.disabled=!0;else delete Y.disabled;oN(X,Q,Y),J.mcpServers=X})}function B6($,Z={}){let Q=Y6(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return Z8(Q.mcpServers[$]?.oauth)}function BB($,Z){return(Q)=>{let J=Q.mcpServers,W=VB(J,$);if(!W)throw Error(`Unknown MCP server: ${$}`);let X=sN(W.oauth)??{},j=Z8(Z(X));if(j)W.oauth=j;else delete W.oauth;return j??{}}}function H6($,Z,Q={}){let J=Q.filePath??j0();return C1(J,BB($,Z))}async function x7($,Z,Q={}){let J=Q.filePath??j0();return g5(J,BB($,Z))}function g7($={}){return G1($).map((Q)=>{let J=Q.transport.type!=="stdio",W=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:J,oauthConfigured:J&&typeof W==="string"&&W.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,J)=>Q.serverName.localeCompare(J.serverName))}async function K6($,Z={}){let Q=G1(Z);for(let J of Q)await $.registerServer(J);return Q}var j6,eV,$B,h7,wN,PN,SN,bN,yN,kN,ZB,hN,IN,xN,gN,I5,$8,e2,I7=1e4,QB=25,mN,x5;var v5=b$(()=>{j6=S.record(S.string(),S.string()),eV=S.record(S.string(),S.unknown()),$B=S.preprocess(($)=>MN($)?EN($):void 0,S.number().optional()),h7=S.object({clientInformation:S.record(S.string(),S.unknown()).optional(),tokens:S.record(S.string(),S.unknown()).optional(),codeVerifier:S.string().optional(),discoveryState:S.record(S.string(),S.unknown()).optional(),redirectUrl:S.string().url().optional(),lastError:S.string().optional(),lastAuthenticatedAt:S.number().int().positive().optional()}).strip(),wN=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:j6.optional()}),PN=S.object({type:S.literal("sse"),url:S.string().url(),headers:j6.optional()}),SN=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:j6.optional()}),bN=S.discriminatedUnion("type",[wN,PN,SN]),yN=S.object({transport:bN,disabled:S.boolean().optional(),timeout:$B,metadata:eV.optional(),oauth:h7.optional()}).transform(($)=>({transport:$.transport,disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth})),kN=S.enum(["stdio","sse","http","streamableHttp"]).optional(),ZB=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:kN,disabled:S.boolean().optional(),timeout:$B,metadata:eV.optional(),oauth:h7.optional()});hN=ZB.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:j6.optional()}).superRefine(($,Z)=>{let Q=$.type??y7($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth})),IN=ZB.extend({url:S.string().url(),headers:j6.optional()}).superRefine(($,Z)=>{let Q=$.type??y7($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??y7($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauth:$.oauth}}),xN=S.union([yN,hN,IN]),gN=S.object({mcpServers:S.record(S.string(),xN)}).passthrough();I5=class I5 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};$8=class $8 extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};e2=class e2 extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};mN=new Int32Array(new SharedArrayBuffer(4)),x5=new Set});import{existsSync as pC,mkdirSync as lC,readFileSync as iC,writeFileSync as rC}from"node:fs";import{resolve as nC}from"node:path";import{resolveSessionDataDir as aC}from"@cline/shared/storage";import{nanoid as oC}from"nanoid";import*as sC from"node-machine-id";function c6(){if(!DK)UK=_K(),DK=!0;return UK??LK()}function t0($){let Z=$?.trim();if(Z)return Z;let Q=_K();if(Q)return Q;return LK()}function eC(){let $=sC;return $.machineIdSync??$.default?.machineIdSync}function _K(){try{let $=eC();if(!$)return;return $().trim()||void 0}catch{return}}function LK(){let $=aC(),Z=nC($,tC);try{if(pC(Z)){let J=iC(Z,"utf8").trim();if(J.length>0)return J}}catch{}let Q=`cl-${oC()}`;try{lC($,{recursive:!0}),rC(Z,Q,"utf8")}catch{}return Q}var tC="machine-id",UK,DK=!1;var H2=()=>{};class G4{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,Z){if(!this.isEnabled())return;this.emitLog($,Z,!1)}emitRequired($,Z){this.emitLog($,Z,!0)}recordCounter($,Z,Q,J,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let X=this.counters.get($);if(!X)X=this.meter.createCounter($,J?{description:J}:void 0),this.counters.set($,X);X.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,J,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let X=this.histograms.get($);if(!X)X=this.meter.createHistogram($,J?{description:J}:void 0),this.histograms.set($,X);X.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,J,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let X=this.buildAttributes(Q),j=JSON.stringify(X),Y=this.gaugeValues.get($);if(Z===null){if(Y){if(Y.delete(j),Y.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=Y;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let B=this.meter.createObservableGauge($,J?{description:J}:void 0);B.addCallback((H)=>{for(let K of this.snapshotGaugeSeries($))H.observe(K.value,this.flattenProperties(K.attributes))}),this.gauges.set($,B)}V.set(j,{value:Z,attributes:X})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,Z,Q){if(!this.logger)return;let J=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:J})}buildAttributes($,Z=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...Z?{_required:!0}:{}}}snapshotGaugeSeries($){let Z=this.gaugeValues.get($);if(!Z)return[];return Array.from(Z.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,Z="",Q=new WeakSet,J=0){if(!$)return{};let W={},X=100,j=10;for(let[Y,V]of Object.entries($)){if(Y==="__proto__"||Y==="constructor"||Y==="prototype")continue;let B=Z?`${Z}.${Y}`:Y;if(V===null||V===void 0){W[B]=String(V);continue}if(Array.isArray(V)){let H=V.length>X?V.slice(0,X):V;try{W[B]=JSON.stringify(H)}catch{W[B]="[UnserializableArray]"}if(V.length>X)W[`${B}_truncated`]=!0,W[`${B}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){W[B]=V.toISOString();continue}if(V instanceof Error){W[B]=V.message;continue}if(Q.has(V)){W[B]="[Circular]";continue}if(J>=j){W[B]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(W,this.flattenProperties(V,B,Q,J+1));continue}if(fk(V)){W[B]=V;continue}try{W[B]=JSON.stringify(V)}catch{W[B]=String(V)}}return W}}function fk($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class e9{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,Z){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:Z})}emitRequired($,Z){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:Z})}recordCounter($,Z,Q,J,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:J,required:W===!0})}recordHistogram($,Z,Q,J,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:J,required:W===!0})}recordGauge($,Z,Q,J,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:J,required:W===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class F4{adapters;metadata;distinctId;deviceId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new e9({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.deviceId=$.deviceId??c6(),this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let Z=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,Z)}captureRequired($,Z){let Q=this.buildAttributes(Z);for(let J of this.adapters)J.emitRequired($,Q)}recordCounter($,Z,Q,J,W=!1){let X=this.buildAttributes(Q);for(let j of this.adapters)j.recordCounter($,Z,X,J,W)}recordHistogram($,Z,Q,J,W=!1){let X=this.buildAttributes(Q);for(let j of this.adapters)j.recordHistogram($,Z,X,J,W)}recordGauge($,Z,Q,J,W=!1){let X=this.buildAttributes(Q);for(let j of this.adapters)j.recordGauge($,Z,X,J,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}:{},device_id:this.deviceId}}}var QW=b$(()=>{H2()});import{metrics as Rk,trace as Mk}from"@opentelemetry/api";import{logs as Ek}from"@opentelemetry/api-logs";import{OTLPLogExporter as Ck}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as wk}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as Pk}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as Sk}from"@opentelemetry/resources";import{BatchLogRecordProcessor as bk,ConsoleLogRecordExporter as yk,LoggerProvider as kk}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as hk,MeterProvider as Ik,PeriodicExportingMetricReader as uF}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as xk,ConsoleSpanExporter as gk,SimpleSpanProcessor as vk}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as mk}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as ck,ATTR_SERVICE_VERSION as uk}from"@opentelemetry/semantic-conventions";class dF{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,Z){this.resolveProperties(Z)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class U4{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=Sk({[ck]:$.serviceName??"cline",...$.serviceVersion?{[uk]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)Rk.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)Ek.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return Mk.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new G4({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new F4({...$,adapters:[Z],distinctId:t0($.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider($){let Z=JW(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),J=Math.min(30000,Math.floor(Q*0.8)),W=Z.map((X)=>lk(X,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:J})).filter((X)=>X!==null);if(W.length===0)return null;return new Ik({resource:$,readers:W})}createTracerProvider($){let Z=JW(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,J=this.options.otlpTracesHeaders??this.options.otlpHeaders,W=[];for(let X of Z){let j=pk(X,{endpoint:Q,headers:J,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(j)W.push(j)}if(W.length===0)return null;return new mk({resource:$,spanProcessors:W})}createLoggerProvider($){let Z=JW(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((J)=>{let W=dk(J,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!W)return null;return new bk(W,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((J)=>J!==null);if(Q.length===0)return null;return new kk({resource:$,processors:Q})}}function $Z($){let Z=new U4($),Q=Z.createTelemetryService($),J=()=>{Q.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion})};if(!$.deferProviderCreatedEvent)J();return{provider:Z,telemetry:Q,emitProviderCreated:J}}function O2($){if(zQ())return{telemetry:new dF($)};if($.enabled!==!0)return{telemetry:new F4({...$,distinctId:t0($.distinctId)})};return $Z($)}function ZZ($){let{telemetry:Z,provider:Q,emitProviderCreated:J}=O2($);return{telemetry:Z,provider:Q,flush:async()=>{let j=Q;if(j&&typeof j.forceFlush==="function")try{await j.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])},...$.deferProviderCreatedEvent&&J?{emitProviderCreated:J}:{}}}function JW($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function dk($,Z){if($==="console")return new yk;if(!Z.endpoint)return null;let Q=WW(Z.endpoint,"/v1/logs");return new Ck({url:Q,headers:Z.headers})}function pk($,Z){if($==="console")return new vk(new gk);if(!Z.endpoint)return null;let Q=WW(Z.endpoint,"/v1/traces");return new xk(new Pk({url:Q,headers:Z.headers}))}function lk($,Z){if($==="console")return new uF({exporter:new hk,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=WW(Z.endpoint,"/v1/metrics");return new uF({exporter:new wk({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function WW($,Z){let Q=new URL($),J=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=J.endsWith(Z)?J:`${J}${Z}`,Q.toString()}var QZ=b$(()=>{J1();H2();QW()});var tU={};RZ(tU,{resolveCoreDistinctId:()=>t0,resolveCoreDeviceId:()=>c6,createOpenTelemetryTelemetryService:()=>$Z,createConfiguredTelemetryService:()=>O2,createConfiguredTelemetryHandle:()=>ZZ,OpenTelemetryProvider:()=>U4,OpenTelemetryAdapter:()=>G4});var BZ=b$(()=>{H2();QZ()});import*as l60 from"@cline/llms";import{ClineFreeModelLimitError as r60,ClineNotSubscribedError as n60,ClineOrgIndividualInferenceSubscriptionError as a60,ClinePassLimitError as o60,extractClineFreeModelLimitResetTime as s60,extractClinePassLimitMessage as t60,getClineNotSubscribedMessage as e60,getClineOrgIndividualInferenceSubscriptionMessage as $40,getClinePassSubscriptionUrl as Z40,isClineFreeModelLimitError as Q40,isClineFreeModelLimitMessage as J40,isClineModelNotFoundMessage as W40,isClineNotSubscribedError as X40,isClineNotSubscribedMessage as j40,isClineOrgIndividualInferenceSubscriptionError as Y40,isClineOrgIndividualInferenceSubscriptionMessage as V40,isClinePassLimitError as B40,isClinePassLimitMessage as H40}from"@cline/llms";import{buildClineSystemPrompt as G40,buildSdkErrorProperties as F40,ContributionRegistry as U40,captureSdkError as D40,createClineTelemetryServiceConfig as _40,createClineTelemetryServiceMetadata as L40,createContributionRegistry as A40,createTool as O40,emptyWorkspaceManifest as q40,FEATURE_FLAGS as z40,FeatureFlagDefaultValue as T40,formatDisplayUserInput as N40,noopBasicLogger as f40,normalizeSdkError as R40,normalizeUserInput as M40,parseUserCommandEnvelope as E40,registerDisposable as C40,SDK_ERROR_TELEMETRY_EVENT as w40,stripUtf8Bom as P40}from"@cline/shared";export*from"@cline/shared/storage";function V_($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function GX($,Z,Q){let J=V_(Q);if(J)return J;let W=Z.trim();if(W){let X=W.length>200?`${W.slice(0,200)}...`:W;return`Cline account request failed with status ${$}: ${X}`}return`Cline account request failed with status ${$}`}class MZ{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let Z=$.apiBaseUrl.trim();if(!Z)throw Error("apiBaseUrl is required");this.apiBaseUrl=Z,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let Z=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(Z)}/balance`)}async fetchUsageTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/usages`)).items??[]}async fetchPaymentTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let Z=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)Z.searchParams.set("type",$.type);return this.request(`${Z.pathname}${Z.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}`)}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/balance`)}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(Z,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let Z=$?.trim();if(Z)return Z;let J=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(J)return J;let W=await this.fetchMe();if(!W.id?.trim())throw Error("Unable to resolve current user id");return W.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let W=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(W)return W;let j=(await this.fetchUserOrganizations()).find((Y)=>Y.organizationId===$)?.memberId;if(!j?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return j}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let J=this.getHeadersFn?await this.getHeadersFn():{},W=new AbortController,X=setTimeout(()=>W.abort(),this.requestTimeoutMs);try{let j=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...J??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:W.signal});if(j.status===204||Z?.expectNoContent){if(!j.ok)throw Error(`Cline account request failed with status ${j.status}`);return}let Y=await j.text(),V;if(Y.trim())try{V=JSON.parse(Y)}catch{if(!j.ok)throw Error(GX(j.status,Y,void 0));throw Error("Cline account response was not valid JSON")}if(!j.ok)throw Error(GX(j.status,Y,V));if(typeof V==="object"&&V!==null){let B=V;if(typeof B.success==="boolean"){if(!B.success)throw Error(B.error||"Cline account request failed");return B.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(X)}}}function FX($){return $.action==="clineAccount"}async function UX($,Z){switch($.operation){case"fetchMe":return Z.fetchMe();case"fetchBalance":return Z.fetchBalance($.userId);case"fetchUsageTransactions":return Z.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return Z.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return Z.fetchUserOrganizations();case"fetchOrganizationBalance":return Z.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return Z.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await Z.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return Z.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class EZ{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:Z})}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:Z,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}function O4($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((J)=>{$.onOpenUrlError?.({url:Z,error:J})})}catch(J){$.onOpenUrlError?.({url:Z,error:J})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}import{decodeJwtPayload as P_,getClineEnvironmentConfig as lZ}from"@cline/shared";import{createHash as B_}from"node:crypto";var DX;function H_($){DX=$}function y0($){if(typeof $!=="string"||$.length===0)return"unset";return B_("sha256").update($).digest("hex").slice(0,8)}function s($){try{DX?.debug($)}catch{}}q0();function M_(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function T1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",J=$.timeoutMs??300000,W=$.successHtml??E_,X=M_(),j=!1,Y=null,V=null,B=null,H=(F)=>{if(j)return;j=!0,X.resolve(F)},K=()=>{if(Y)clearTimeout(Y),Y=null;let F=B;if(B=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:F})).catch(()=>{})},G=async()=>{return Y=setTimeout(()=>{K(),H(null)},J),X.promise};for(let F of $.ports){let U=Z.createServer((L,O)=>{try{let D=new URL(L.url||"",`http://${Q}:${F}`);if(D.pathname!==$.callbackPath){O.statusCode=404,O.end("Not found");return}let q={url:D,code:D.searchParams.get("code")??void 0,state:D.searchParams.get("state")??void 0,provider:D.searchParams.get("provider")??void 0,error:D.searchParams.get("error")??void 0};if(q.error){O.statusCode=400,O.end(`Authentication failed: ${q.error}`),K(),H(q);return}if(!q.code){O.statusCode=400,O.end("Missing authorization code");return}if($.expectedState&&q.state!==$.expectedState){O.statusCode=400,O.end("State mismatch");return}O.statusCode=200,O.setHeader("Content-Type","text/html; charset=utf-8"),O.end(W),K(),H(q)}catch{O.statusCode=500,O.end("Internal error")}}),_=await new Promise((L)=>{let O=(D)=>{U.off("error",O),L({bound:!1,error:D})};U.once("error",O),U.listen(F,Q,()=>{U.off("error",O),V=U,L({bound:!0})})});if(_.error){if(_.error.code==="EADDRINUSE")continue;throw K(),_.error}if(_.bound){B=F;let L=`http://${Q}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:F,callbackUrl:L})).catch(()=>{});return{callbackUrl:L,waitForCallback:G,cancelWait:()=>{K(),H(null)},close:()=>{K(),H(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var E_=`<!DOCTYPE html>
|
|
5
5
|
<html lang="en">
|
|
6
6
|
<head>
|
|
7
7
|
<meta charset="utf-8">
|
|
@@ -42,8 +42,8 @@ import{createRequire as j_}from"node:module";var J_=Object.defineProperty;var W_
|
|
|
42
42
|
</div>
|
|
43
43
|
<script>setTimeout(() => window.close(), 3000);</script>
|
|
44
44
|
</body>
|
|
45
|
-
</html>`;function qX($){let Z="";for(let Q=0;Q<$.length;Q+=1)Z+=String.fromCharCode($[Q]??0);return btoa(Z).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function E_($){let Q=new TextEncoder().encode($),J=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(J)}function C_($=32){let Z=new Uint8Array($);return crypto.getRandomValues(Z),qX(Z)}async function N4(){let $=C_(),Z=qX(await E_($));return{verifier:$,challenge:Z}}function f4($){return $.endsWith("/")?$.slice(0,-1):$}function h$($,Z){return new URL(Z,`${f4($)}/`).toString()}function f2($,Z={}){let Q=$.trim();if(!Q)return{};try{let J=new URL(Q);return{code:J.searchParams.get("code")??void 0,state:J.searchParams.get("state")??void 0,provider:Z.includeProvider?J.searchParams.get("provider")??void 0:void 0}}catch{}if(Z.allowHashCodeState&&Q.includes("#")){let[J,W]=Q.split("#",2);return{code:J||void 0,state:W||void 0}}if(Q.includes("code=")){let J=new URLSearchParams(Q);return{code:J.get("code")??void 0,state:J.get("state")??void 0,provider:Z.includeProvider?J.get("provider")??void 0:void 0}}return{code:Q}}function R2($){try{let Z=JSON.parse($),Q=Z.error,J=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,W=typeof Z.error_description==="string"?Z.error_description:typeof Z.message==="string"?Z.message:Q&&typeof Q==="object"&&typeof Q.message==="string"?Q.message:void 0;return{code:J,message:W}}catch{return{}}}function M2($,Z){return Date.now()>=$.expires-Z}async function E2($){if(!$.onManualCodeInput){let X=await $.waitForCallback();return{code:X?.code,state:X?.state,provider:X?.provider,error:X?.error}}let Z,Q,J=$.onManualCodeInput().then((X)=>{Z=X,$.cancelWait()}).catch((X)=>{Q=X instanceof Error?X:Error(String(X)),$.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(Z)return f2(Z,$.parseOptions);if(await J,Q)throw Q;if(Z)return f2(Z,$.parseOptions);return{}}var R4={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},fX={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},iZ="https://api.workos.com",P_="/auth",zX=Array.from({length:11},($,Z)=>48801+Z),S_=300000,b_=30000,C2=30000,y_=300,k_=5;class v0 extends Error{status;errorCode;requestId;constructor($,Z){super($);this.name="ClineOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode,this.requestId=Z?.requestId}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function h_($){let Z=Date.parse($);if(Number.isNaN(Z))throw Error(`Invalid expiresAt value: ${$}`);return Z}function rZ($,Z,Q={}){let J=$.userInfo.clineUserId??Q.accountId,W=$.refreshToken??Q.refresh;if(!W)throw Error("Token response did not include a refresh token");let X={...Q.metadata??{},provider:Z,tokenType:$.tokenType,userInfo:$.userInfo};return delete X.startedAt,{access:$.accessToken,refresh:W,expires:h_($.expiresAt),accountId:J??void 0,email:$.userInfo.email||Q.email,metadata:X}}async function nZ($){if(!$)return{};return typeof $==="function"?await $():$}function TX($,Z){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return Z;return Math.floor($)}function I_($){return typeof $==="string"&&$.trim()||void 0}function x_($){let Z=w_($);if(!Z)return{};return{sessionId:I_(Z.sid)}}function g_($){let Z={},Q=$.metadata?.sessionStartedAtMs;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)Z.sessionDurationMs=Date.now()-Q;return Z}function aZ($){return{...x_($.access),...g_($)}}async function NX($){await new Promise((Z)=>setTimeout(Z,$))}function oZ($,Z){if(!$.success||!$.data?.accessToken)throw Error(Z);return $.data}async function RX($,Z){let Q=await fetch(h$(iZ,fX.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(Z?.requestTimeoutMs??C2)}),J=await Q.json().catch(()=>({}));if(!Q.ok)throw new v0(`Device authorization failed: ${Q.status}${J.error_description?` - ${J.error_description}`:""}`,{status:Q.status,errorCode:J.error,requestId:Q.headers.get("x-request-id")??void 0});if(!J.device_code||!J.user_code||!J.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:J.device_code,userCode:J.user_code,verificationUri:J.verification_uri,verificationUriComplete:J.verification_uri_complete,expiresInSeconds:TX(J.expires_in,y_),pollIntervalSeconds:TX(J.interval,k_)}}async function MX($){let Z=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=Z){let J=await fetch(h$($.workosApiBaseUrl,fX.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),W=await J.json().catch(()=>({}));if(J.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 NX(Q*1000);break}case"slow_down":{Q+=1,await NX(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new v0(W.error_description||"WorkOS authorization failed",{status:J.status,errorCode:W.error,requestId:J.headers.get("x-request-id")??void 0});default:throw new v0(`WorkOS token polling failed: ${J.status}${W.error_description?` - ${W.error_description}`:""}`,{status:J.status,errorCode:W.error,requestId:J.headers.get("x-request-id")??void 0})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function EX($,Z,Q){let J={accessToken:$.accessToken,refreshToken:$.refreshToken},W=await fetch(h$(Z.apiBaseUrl,R4.register),{method:"POST",headers:{"Content-Type":"application/json",...await nZ(Z.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Z.requestTimeoutMs??C2)});if(!W.ok){let j=await W.text().catch(()=>""),Y=R2(j);throw new v0(`Token registration failed: ${W.status}${Y.message?` - ${Y.message}`:""}`,{status:W.status,errorCode:Y.code,requestId:W.headers.get("x-request-id")??void 0})}let X=await W.json();return rZ(oZ(X,"Invalid token exchange response"),Q??Z.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function v_($,Z,Q,J){let W={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:Z,provider:J??Q.provider},X=await fetch(h$(Q.apiBaseUrl,R4.token),{method:"POST",headers:{"Content-Type":"application/json",...await nZ(Q.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Q.requestTimeoutMs??C2)});if(!X.ok){let Y=await X.text().catch(()=>""),V=R2(Y);throw new v0(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code,requestId:X.headers.get("x-request-id")??void 0})}let j=await X.json();return rZ(oZ(j,"Invalid token exchange response"),J??Q.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function sZ($){n1($.telemetry,$.provider??"cline");let Z=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:zX,J=$.callbackPath??P_,W=Z?null:await T1({ports:Q,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=W?.callbackUrl||`http://127.0.0.1:${Q[0]??zX[0]}${J}`;try{let j;if(Z){let Y=lZ().workOsClientId,V=await RX(Y,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let B=await MX({clientId:Y,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??C2,workosApiBaseUrl:iZ,onProgress:$.callbacks.onProgress});j=await EX(B,$,$.provider)}else{let Y=new URL(h$($.apiBaseUrl,R4.authorize));Y.searchParams.set("client_type","extension"),Y.searchParams.set("callback_url",X),Y.searchParams.set("redirect_uri",X),$.callbacks.onAuth({url:Y.toString(),instructions:"Continue the authentication process in your browser."});let V,B=$.provider,H=await E2({waitForCallback:W?.waitForCallback??(async()=>null),cancelWait:W?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(H.error)throw Error(`OAuth error: ${H.error}`);if(V=H.code,B=H.provider??B,!V){let K=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=f2(K,{includeProvider:!0});V=G.code,B=G.provider??B}if(!V)throw Error("Missing authorization code");j=await v_(V,X,$,B)}return a1($.telemetry,$.provider??"cline",aZ(j)),s1($.telemetry,{id:j.accountId,email:j.email,provider:$.provider??"cline"}),j}catch(j){throw o1($.telemetry,$.provider??"cline",j instanceof Error?j.message:String(j),{requestId:j instanceof v0?j.requestId:void 0}),j}finally{W?.close()}}async function m_($){return await RX(lZ().workOsClientId,$)}async function c_($){let Z=$.provider??"cline";n1($.telemetry,Z);try{let Q=await MX({clientId:lZ().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??C2,workosApiBaseUrl:iZ}),J=await EX(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return a1($.telemetry,Z,aZ(J)),s1($.telemetry,{id:J.accountId,email:J.email,provider:Z}),J}catch(Q){throw o1($.telemetry,Z,Q instanceof Error?Q.message:String(Q),{requestId:Q instanceof v0?Q.requestId:void 0}),Q}}async function CX($,Z){let Q=h$(Z.apiBaseUrl,R4.refresh);s(`cline.refresh.request url=${Q} refreshTokenHash=${y0($.refresh)}`);let J=await fetch(Q,{method:"POST",headers:{"Content-Type":"application/json",...await nZ(Z.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(Z.requestTimeoutMs??C2)});if(!J.ok){let Y=await J.text().catch(()=>""),V=R2(Y),B=J.headers.get("x-request-id")??void 0;throw s(`cline.refresh.error status=${J.status} errorCode=${V.code??"none"} message=${V.message??"none"} requestId=${B??"none"}`),new v0(`Token refresh failed: ${J.status}${V.message?` - ${V.message}`:""}`,{status:J.status,errorCode:V.code,requestId:B})}let W=await J.json(),X=$.metadata?.provider??Z.provider,j=rZ(oZ(W,"Invalid token refresh response"),X,$);return s(`cline.refresh.success newAccessTokenHash=${y0(j.access)} newRefreshTokenHash=${y0(j.refresh)} expires=${j.expires}`),j}async function tZ($,Z,Q){if(!$)return s("cline.getCredentials outcome=no_current_credentials"),null;let J=Q?.refreshBufferMs??S_,W=Q?.retryableTokenGraceMs??b_,X=Q?.forceRefresh===!0;if(!X&&!M2($,J))return s(`cline.getCredentials outcome=still_valid forceRefresh=${X}`),$;s(`cline.getCredentials outcome=needs_refresh forceRefresh=${X} accessTokenHash=${y0($.access)}`);try{return await CX($,Z)}catch(j){let Y=aZ($),V=j instanceof v0&&j.requestId?{request_id:j.requestId}:{},B={status:j instanceof v0?j.status:void 0,errorCode:j instanceof v0?j.errorCode:void 0,...V,...Y,errorName:j instanceof Error?j.name:void 0};if(j instanceof v0&&j.isLikelyInvalidGrant())return s(`cline.getCredentials outcome=invalid_grant status=${j.status} errorCode=${j.errorCode??"none"}`),y$(Z.telemetry,Z.provider??"cline","invalid_grant",{status:j.status,errorCode:j.errorCode,...V,...Y}),null;if($.expires-Date.now()>W)return s(`cline.getCredentials outcome=transient_failure_kept_current error=${j instanceof Error?j.message:String(j)}`),PZ(Z.telemetry,Z.provider??"cline",{...B,tokenExpired:!1}),$;throw s(`cline.getCredentials outcome=transient_failure_rethrown error=${j instanceof Error?j.message:String(j)}`),PZ(Z.telemetry,Z.provider??"cline",{...B,tokenExpired:!0}),j}}q0();import{decodeJwtPayload as eZ}from"@cline/shared";import{nanoid as u_}from"nanoid";var B0={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 M4 extends Error{status;errorCode;constructor($,Z){super($);this.name="OpenAICodexOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function d_($,Z,Q=B0.redirectUri){let J=await fetch(B0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:B0.clientId,code:$,code_verifier:Z,redirect_uri:Q}),signal:AbortSignal.timeout(B0.httpTimeoutMs)});if(!J.ok)return{type:"failed"};let W=await J.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 p_($){try{let Z=await fetch(B0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:B0.clientId}),signal:AbortSignal.timeout(B0.httpTimeoutMs)});if(!Z.ok){let J=await Z.text().catch(()=>""),W=R2(J);throw new M4(`Token refresh failed: ${Z.status}${W.message?` - ${W.message}`:""}`,{status:Z.status,errorCode:W.code})}let Q=await Z.json();if(!Q.access_token||!Q.refresh_token||typeof Q.expires_in!=="number")return{type:"failed"};return{type:"success",access:Q.access_token,refresh:Q.refresh_token,expires:Date.now()+Q.expires_in*1000,email:Q.email,idToken:Q.id_token}}catch(Z){if(Z instanceof M4)throw Z;return{type:"failed"}}}async function l_($="pi"){let{verifier:Z,challenge:Q}=await N4(),J=u_(32),W=new URL(B0.authorizationEndpoint);return W.searchParams.set("response_type","code"),W.searchParams.set("client_id",B0.clientId),W.searchParams.set("redirect_uri",B0.redirectUri),W.searchParams.set("scope",B0.scopes),W.searchParams.set("code_challenge",Q),W.searchParams.set("code_challenge_method","S256"),W.searchParams.set("state",J),W.searchParams.set("id_token_add_organizations","true"),W.searchParams.set("codex_cli_simplified_flow","true"),W.searchParams.set("originator",$),{verifier:Z,state:J,url:W.toString()}}function i_(){try{let $=new URL(B0.redirectUri),Z=$.port.length>0?Number.parseInt($.port,10):B0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(Z)?Z:B0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:B0.callbackPort,callbackPath:"/auth/callback",redirectUri:B0.redirectUri}}}function r_($,Z){let Q=Z?eZ(Z):eZ($),J=Q?Q:eZ($),X=J?.[B0.jwtClaimPath]?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;let j=J?.organizations;if(Array.isArray(j)&&j.length>0){let V=j[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let Y=J?.chatgpt_account_id;if(typeof Y==="string"&&Y.length>0)return Y;return null}function wX($,Z){let Q=r_($.access,$.idToken)??Z?.accountId;if(!Q)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||Z?.refresh||"",expires:$.expires,accountId:Q,email:$.email??Z?.email,metadata:{...Z?.metadata??{},provider:"openai-codex"}}}async function $Q($){n1($.telemetry,"openai-codex");let Z=i_(),{verifier:Q,state:J,url:W}=await l_($.originator),X=await T1({host:Z.host,ports:[Z.port],callbackPath:Z.callbackPath,expectedState:J});$.onAuth({url:W,instructions:"Continue the authentication process in your browser."});let j;try{let Y=await E2({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(Y.state&&Y.state!==J)throw Error("State mismatch");if(j=Y.code,!j){let H=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=f2(H,{allowHashCodeState:!0});if(K.state&&K.state!==J)throw Error("State mismatch");j=K.code}if(!j)throw Error("Missing authorization code");let V=await d_(j,Q,Z.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let B=wX(V);return a1($.telemetry,"openai-codex"),s1($.telemetry,{id:B.accountId,email:B.email,provider:"openai-codex"}),B}catch(Y){throw o1($.telemetry,"openai-codex",Y instanceof Error?Y.message:String(Y)),Y}finally{X.close()}}async function PX($,Z){let Q=await p_($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let J=wX(Q,Z);if(!J.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return J}async function ZQ($,Z){if(!$)return null;let Q=Z?.refreshBufferMs??B0.refreshBufferMs,J=Z?.retryableTokenGraceMs??B0.retryableTokenGraceMs;if(Z?.forceRefresh!==!0&&!M2($,Q))return $;try{return await PX($.refresh,$)}catch(X){if(X instanceof M4&&X.isLikelyInvalidGrant())return y$(Z?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}q0();import{decodeJwtPayload as P8}from"@cline/shared";import{nanoid as SX}from"nanoid";class QQ{ttlMs;maxEntries;entries=new Map;constructor($,Z){this.ttlMs=$;this.maxEntries=Z}get($,Z=Date.now()){this.pruneExpired(Z);let Q=this.entries.get($);if(!Q)return;return this.entries.delete($),this.entries.set($,Q),Q.value}set($,Z,Q=Date.now(),J=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:Z,expiresAt:Q+J})}pruneExpired($){for(let[Z,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(Z)}}var n_="a8331954c0cf48ba99b5dd223a14c6ea",a_="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",o_="openid offline_access",WQ="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",s_="c1aba3deed5740659981a752714eba33",t_="https://login-ext.identity.oraclecloud.com",e_="openid offline_access",XQ="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm";var $L="/auth/oca",ZL=Array.from({length:11},($,Z)=>48801+Z),QL=300000,JL=30000,bX=30000,WL=600000;class E4 extends Error{status;errorCode;constructor($,Z){super($);this.name="OcaOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var t1={internal:{clientId:n_,idcsUrl:a_,scopes:o_,baseUrl:WQ},external:{clientId:s_,idcsUrl:t_,scopes:e_,baseUrl:XQ}},S8=new Map,XL=86400000,jL=300000,YL=32,JQ=new QQ(XL,YL);function yX($){if(typeof $==="function")return $();return $??"internal"}function kX($){return{internal:{clientId:$?.internal?.clientId??t1.internal.clientId,idcsUrl:$?.internal?.idcsUrl??t1.internal.idcsUrl,scopes:$?.internal?.scopes??t1.internal.scopes,baseUrl:$?.internal?.baseUrl??t1.internal.baseUrl},external:{clientId:$?.external?.clientId??t1.external.clientId,idcsUrl:$?.external?.idcsUrl??t1.external.idcsUrl,scopes:$?.external?.scopes??t1.external.scopes,baseUrl:$?.external?.baseUrl??t1.external.baseUrl}}}function VL($=Date.now()){let Z=$-WL;for(let[Q,J]of S8.entries())if(J.createdAt<Z)S8.delete(Q)}function BL($,Z,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let W=P8(Z)?.exp;if(typeof W==="number"&&W>0)return W*1000;let j=P8(Q)?.exp;if(typeof j==="number"&&j>0)return j*1000;return Date.now()+3600000}function hX($,Z,Q){let J=$.access_token;if(!J)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 X=P8($.id_token),j=P8(J),Y=X?.sub??j?.sub,V=X?.email??j?.email;return{access:J,refresh:W,expires:BL($,J,$.id_token),accountId:Y??Q?.accountId,email:V??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:Z,subject:Y,idToken:$.id_token}}}async function IX($,Z){let Q=f4($),J=JQ.get(Q);if(J)return J;let W=`${Q}/.well-known/openid-configuration`,X=await fetch(W,{method:"GET",signal:AbortSignal.timeout(Z)});if(!X.ok){let V=`${Q}/oauth2/v1/token`;return JQ.set(Q,V,Date.now(),jL),V}let Y=(await X.json()).token_endpoint||`${Q}/oauth2/v1/token`;return JQ.set(Q,Y),Y}function xX($){return{code:$.error,message:$.error_description}}async function HL($){let Z=S8.get($.state);if(!Z)throw Error("No PKCE verifier found for this state");S8.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,J=await IX(Q.idcsUrl,$.requestTimeoutMs),W=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:Z.redirectUri,client_id:Q.clientId,code_verifier:Z.verifier}),X=await fetch(J,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:W,signal:AbortSignal.timeout($.requestTimeoutMs)}),j=await X.json();if(!X.ok){let V=xX(j);throw new E4(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let Y=P8(j.id_token);if(!j.id_token||!Y)throw Error("No ID token received from OCA");if(Y.nonce!==Z.nonce)throw Error("OIDC nonce verification failed");return hX(j,$.mode)}function KL($){let Z=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${f4(Z.idcsUrl)}/oauth2/v1/authorize`);return Q.searchParams.set("client_id",Z.clientId),Q.searchParams.set("response_type","code"),Q.searchParams.set("scope",Z.scopes),Q.searchParams.set("code_challenge",$.challenge),Q.searchParams.set("code_challenge_method","S256"),Q.searchParams.set("redirect_uri",$.callbackUrl),Q.searchParams.set("state",$.state),Q.searchParams.set("nonce",$.nonce),Q.toString()}async function jQ($){n1($.telemetry,"oca");let Z=kX($.config),Q=yX($.mode),J=$.callbackPorts?.length?$.callbackPorts:ZL,W=$.callbackPath??$L,X=$.requestTimeoutMs??bX,j=await T1({ports:J,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),Y=j.callbackUrl;if(!Y)throw Error("Unable to bind local OAuth callback server");let V=SX(16),B=SX(16),{verifier:H,challenge:K}=await N4();VL(),S8.set(V,{verifier:H,nonce:B,mode:Q,redirectUri:Y,createdAt:Date.now()});let G=KL({callbackUrl:Y,mode:Q,state:V,nonce:B,challenge:K,config:Z});$.callbacks.onAuth({url:G,instructions:"Continue the authentication process in your browser."});try{let F=await E2({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),U=F.code,_=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!U){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!_||_!==V)throw Error("State mismatch");let L=await HL({code:U,state:_,mode:Q,config:Z,requestTimeoutMs:X});return a1($.telemetry,"oca"),s1($.telemetry,{id:L.accountId,email:L.email,provider:"oca"}),L}catch(F){throw o1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{j.close()}}async function gX($,Z={}){let Q=kX(Z.config),J=Z.requestTimeoutMs??bX,W=$.metadata?.mode,X=W==="internal"||W==="external"?W:yX(Z.mode),j=X==="external"?Q.external:Q.internal,Y=await IX(j.idcsUrl,J),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:j.clientId}),B=await fetch(Y,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(J)}),H=await B.json();if(!B.ok){let K=xX(H);throw new E4(`Token refresh failed: ${B.status}${K.message?` - ${K.message}`:""}`,{status:B.status,errorCode:K.code})}return hX(H,X,$)}async function YQ($,Z,Q){if(!$)return null;let J=Z?.refreshBufferMs??Q?.refreshBufferMs??QL,W=Z?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??JL;if(Z?.forceRefresh!==!0&&!M2($,J))return $;try{return await gX($,Q)}catch(j){if(j instanceof E4&&j.isLikelyInvalidGrant())return y$(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}import{decodeJwtPayload as GL,getClineEnvironmentConfig as vX}from"@cline/shared";var C4="workos:";function FL($){let Z=$.trim();return Z.toLowerCase().startsWith(C4)?Z:`${C4}${Z}`}function UL($){let Z=$.trim();return Z.toLowerCase().startsWith(C4)?Z.slice(C4.length):Z}function DL($){let Q=GL($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function _L($,Z){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let J=DL(Z);if(J)return J;return Date.now()-1}function LL($,Z){let Q=$.auth?.accessToken?.trim(),J=$.auth?.refreshToken?.trim();if(!Q||!J)return null;let W=Z?.normalizeAccessToken?.(Q)??Q;if(!W)return null;return{access:W,refresh:J,expires:_L($,W),accountId:$.auth?.accountId,metadata:$.auth?.metadata}}function AL($){let Z=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:Z,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},J=Object.fromEntries(Object.entries($.credentials.metadata??{}).filter(([,j])=>j!==void 0)),W={...$.settings?.auth?.metadata??{},...J};if(Object.keys(W).length>0)Q.metadata=W;let X={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(X,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return X}function VQ($){let Z=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:Z,getApiKey(Q){let J=Q?.auth?.accessToken?.trim();if(J)return $.formatAccessToken?.(J)??J;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return AL({...Q,storageProviderId:Z,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function mX($){return VQ({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:FL,normalizeStoredAccessToken:UL,login:({settings:Z,callbacks:Q,telemetry:J})=>sZ({apiBaseUrl:Z?.baseUrl?.trim()||vX().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:J}),refresh:({settings:Z,credentials:Q,forceRefresh:J,telemetry:W})=>tZ(Q,{apiBaseUrl:Z.baseUrl?.trim()||vX().apiBaseUrl,telemetry:W},{forceRefresh:J})})}var OL=[mX({providerId:"cline"}),mX({providerId:"cline-pass",storageProviderId:"cline"}),VQ({providerId:"oca",login:({settings:$,callbacks:Z,telemetry:Q})=>jQ({mode:$?.oca?.mode,callbacks:Z,telemetry:Q}),refresh:({settings:$,credentials:Z,forceRefresh:Q,telemetry:J})=>YQ(Z,{forceRefresh:Q,telemetry:J},{mode:$.oca?.mode,telemetry:J})}),VQ({providerId:"openai-codex",login:({callbacks:$,telemetry:Z})=>$Q({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:Z}),refresh:({credentials:$,forceRefresh:Z,telemetry:Q})=>ZQ($,{forceRefresh:Z,telemetry:Q})})],qL=new Map(OL.map(($)=>[$.providerId,$]));function z0($){return qL.get($.trim().toLowerCase())}function w2($){return z0($)!==void 0}function zL($){return z0($)?.storageProviderId}function TL($,Z){let Q=z0(Z),J=Q?.storageProviderId??Z,W=$.getProviderSettings(J);return Q?.getApiKey(W)??w4(Z,W)}async function BQ($,Z,Q){let J=z0(Z);if(!J)throw Error(`Provider "${Z}" does not support OAuth login`);let W=$.getProviderSettings(J.storageProviderId),X=await J.login({settings:W,callbacks:Q.callbacks,telemetry:Q.telemetry});return J.saveCredentials({manager:$,settings:W,credentials:X})}function HQ($,Z){let Q=z0($);if(!Q)return null;return LL(Z,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function b8($){let Z=z0($.providerId);if(!Z)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return Z.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function w4($,Z){let Q=z0($);if(Q)return Q.getApiKey(Z);return Z?.auth?.accessToken?.trim()||Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0}function NL($,Z){let Q=z0($);if(!Q)return Z.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:Z.access}})??Z.access}import*as k0 from"@cline/llms";import{ReasoningLevelSchema as eL}from"@cline/shared";import{z as E}from"zod";import*as t from"@cline/llms";function KQ($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let J of[Q.id,Q.name,Q.model])if(typeof J==="string"&&J.trim())return J.trim()}return""}).filter((Z)=>Z.length>0)}function fL($,Z){let Q=KQ($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let J=$,W=KQ(J.data??J.models);if(W.length>0)return W;if(J.models&&typeof J.models==="object"&&!Array.isArray(J.models)){let j=Object.keys(J.models).filter((Y)=>Y.trim().length>0);if(j.length>0)return j}let X=J.providers?.[Z];if(X&&typeof X==="object"){let Y=KQ(X.models??X);if(Y.length>0)return Y}return[]}async function P4($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return fL(await Q.json(),Z)}function cX($){return $.replace(/\/+$/,"")}function S4($,Z,Q){let J=Q?.trim();if(!J)return;let W=$?.trim();if(!W||!Z?.trim())return J;try{let X=new URL(J),j=new URL(Z),Y=new URL(W);if(X.origin!==j.origin)return J;let V=cX(j.pathname),B=cX(Y.pathname);if(V&&X.pathname.startsWith(`${V}/`)){let H=X.pathname.slice(V.length);Y.pathname=`${B}${H}`}else Y.pathname=X.pathname;return Y.search=X.search,Y.hash=X.hash,Y.toString()}catch{return J}}function RL($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function ML($){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 EL=Object.values(t.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:RL($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),pX=Object.fromEntries(EL.map(($)=>[$.id,$]));function CL($){return pX[$]}function wL(){return Object.fromEntries(Object.entries(pX).filter(([,$])=>ML($)))}function lX($=[]){let Z=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return Z.length>0?Z:void 0}var iX="https://models.dev/api.json",PL=600000,rX=300000,SL=5000,y4=new Map,y8=new Map,FQ=new Map,b4=new Map;async function bL(){return t.getGeneratedProviderModels()}async function yL($,Z={},Q={},J={},W={},X={}){if($==="litellm")return t.sortModelsByReleaseDate(J);let j=await bL(),Y=t.resolveProviderModelCatalogKeys($),V=Object.assign({},...Y.map((K)=>j[K]??{}));if(Boolean(t.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl))return t.sortModelsByReleaseDate({...W,...X});if($==="openai-codex")return t.sortModelsByReleaseDate({...Z,...t.filterOpenAICodexModels(Q),...W,...X});if($==="cline-pass"&&Object.keys(Q).length>0)return{...Q,...X};let H=t.sortModelsByReleaseDate({...V,...Z,...Q,...J,...W});if($==="cline")return t.sortModelsByReleaseDate({...t.preferCanonicalModelIds(H,t.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...X});return t.sortModelsByReleaseDate({...H,...X})}function kL($,Z){let Q=t.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((J)=>Z[J]??{}))}function k4($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function UQ($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function hL($){let Z=2166136261;for(let Q=0;Q<$.length;Q+=1)Z^=$.charCodeAt(Q),Z+=(Z<<1)+(Z<<4)+(Z<<7)+(Z<<8)+(Z<<24);return(Z>>>0).toString(16)}function IL($,Z){return`${$}:${k4(Z.baseUrl)}:${hL(UQ(Z)??"")}`}async function h4($,Z,Q=SL){let J=new AbortController,W=setTimeout(()=>J.abort(),Q);try{return await fetch($,{...Z,signal:J.signal})}finally{clearTimeout(W)}}function I$($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function I4($,Z){let Q=["streaming","tools"];return I$(Q,"images",Boolean(Z.supportsImages)),I$(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),I$(Q,"reasoning",Boolean(Z.supportsReasoning)),{id:$,name:Z.name??$,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxTokens:Z.maxTokens,capabilities:Q,releaseDate:Z.releaseDate,status:"active"}}async function xL($,Z){let Q=await h4("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let W=(await Q.json())?.data??[],X={};for(let j of W){let Y=j.id?.trim();if(!Y)continue;if(Y.includes("whisper")||Y.includes("tts")||Y.includes("embedding"))continue;let V=j.supported_features??[];X[Y]=I4(Y,{name:Y,contextWindow:j.context_length,maxInputTokens:j.context_length,maxTokens:j.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return X}function uX($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function gL($,Z){let Q=await h4("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":Z}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let W=(await Q.json())?.data??[],X={};for(let j of W){let Y=j.id?.trim();if(!Y)continue;X[Y]=I4(Y,{name:Y,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return X}async function vL($,Z){let J=`${(k4($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,W=await h4(J,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!W.ok)throw Error(`Poolside model refresh failed: HTTP ${W.status}`);let j=(await W.json())?.data??[],Y={};for(let V of j){let B=V.id?.trim();if(!B)continue;let H=V.supported_features??[],K=V.supported_sampling_parameters??[],G=V.input_modalities??[],F=["streaming"];I$(F,"tools",H.includes("tools")),I$(F,"reasoning",H.includes("reasoning")),I$(F,"temperature",K.includes("temperature")),I$(F,"images",G.includes("image"));let U={input:uX(V.pricing?.prompt),output:uX(V.pricing?.completion)};Y[B]={id:B,name:V.name??B,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:U.input!==void 0||U.output!==void 0?U:void 0,status:"active"}}return Y}function mL($){let Z=k4($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function cL($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function uL($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,J=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${J}`}async function dL($,Z){let Q=mL($.baseUrl),J=[],W=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let X of cL(Q))for(let[j,Y]of W)try{let V=await h4(X,{method:"GET",headers:{accept:"application/json",...Y}});if(V.ok){let H=(await V.json())?.data??[],K={};for(let G of H){let F=G.model_name?.trim(),_=G.litellm_params?.model?.trim()||F;if(!_)continue;let L=G.model_info,O=I4(_,{name:F??_,maxTokens:L?.max_output_tokens??L?.max_tokens,maxInputTokens:L?.max_input_tokens??L?.max_tokens,supportsImages:L?.supports_vision,supportsPromptCache:L?.supports_prompt_caching,supportsReasoning:L?.supports_reasoning});if(K[_]=O,F)K[F]={...O,id:F,name:F}}return K}J.push(`${new URL(X).pathname} (${j}): ${await uL(V)}`)}catch(V){let B=V instanceof Error?V.message:String(V);J.push(`${new URL(X).pathname} (${j}): ${B}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${J.join("; ")}`)}var nX={baseten:xL,hicap:gL,litellm:dL,poolside:vL},dX=new Map,GQ=new Map;function pL($,Z){return`${$}:${k4(Z.baseUrl)}`}async function lL($,Z,Q){let J=t.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],W=S4(Q.baseUrl,J?.provider.baseUrl,J?.provider.modelsSourceUrl);if(!W)return{};let X=Z?.cacheTtlMs??rX,j=pL($,Q),Y=Date.now(),V=dX.get(j);if(V&&V.expiresAt>Y)return V.data;let B=GQ.get(j);if(B)return B;let H=P4(W,$).then((K)=>{let G=Object.fromEntries(K.map((F)=>[F,I4(F,{name:F})]));return dX.set(j,{data:G,expiresAt:Y+X}),G}).finally(()=>{GQ.delete(j)});return GQ.set(j,H),H}async function iL($,Z){let Q=UQ(Z);if(!Q)return{};let J=nX[$];if(!J)return{};return J(Z,Q)}function rL($,Z,Q){if(!Q)return!1;if(!nX[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(UQ(Q))}async function nL($,Z,Q){let J=Z?.cacheTtlMs??rX,W=IL($,Q),X=Date.now(),j=FQ.get(W);if(j&&j.expiresAt>X)return j.data;let Y=b4.get(W);if(Y)return Y;let V=iL($,Q).then((B)=>{return FQ.set(W,{data:B,expiresAt:X+J}),B}).finally(()=>{b4.delete(W)});return b4.set(W,V),V}async function aL($){return t.fetchLiveProviderModels($,globalThis.fetch)}async function x4($={}){let Z=$.url??iX,Q=$.cacheTtlMs??PL,J=Date.now(),W=y4.get(Z);if(W&&W.expiresAt>J)return W.data;let X=y8.get(Z);if(X)return X;let j=aL(Z).then((Y)=>{return y4.set(Z,{data:Y,expiresAt:J+Q}),Y}).finally(()=>{y8.delete(Z)});return y8.set(Z,j),j}function oL($){if($){y4.delete($),y8.delete($);return}y4.clear(),y8.clear()}function sL(){FQ.clear(),b4.clear()}function tL($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:lX(Q.capabilities)}]))}var DQ=tL(wL());function aX($){let Z=CL($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:lX(Z.capabilities)}}async function _Q($,Z,Q){let J=aX($);if(!J)return;try{let W=Z?.loadLatestOnInit?await x4(Z):void 0,X=W?kL($,W):{},j=Q&&rL($,Z,Q)?await nL($,Z,Q):{},V=Boolean(t.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:J.modelId,baseUrl:J.baseUrl}:Q,B=V?await lL($,Z,V).catch(()=>({})):{},H=await yL($,J.knownModels,X,j,B,Q?.knownModels);return{...J,knownModels:H}}catch(W){if(Z?.failOnError)throw W;if($==="litellm")return{...J,knownModels:{}};return J}}var LQ=k0.BUILT_IN_PROVIDER,$A=k0.BUILT_IN_PROVIDER_IDS,ZA=k0.isBuiltInProviderId,g4=k0.normalizeProviderId,AQ=E.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),oX=E.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),sX=E.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),tX=E.object({apiKey:E.string().optional(),accessToken:E.string().optional(),refreshToken:E.string().optional(),expiresAt:E.number().int().positive().optional(),accountId:E.string().optional(),organizationId:E.string().optional(),organizationName:E.string().optional(),memberId:E.string().optional(),metadata:E.record(E.string(),E.unknown()).optional()}),eX=E.object({enabled:E.boolean().optional(),effort:eL.optional(),budgetTokens:E.number().int().positive().optional()}),$j=E.object({accessKey:E.string().optional(),secretKey:E.string().optional(),sessionToken:E.string().optional(),region:E.string().optional(),profile:E.string().optional(),authentication:E.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:E.boolean().optional(),useCrossRegionInference:E.boolean().optional(),useGlobalInference:E.boolean().optional(),endpoint:E.string().url().optional(),customModelBaseId:E.string().optional()}),Zj=E.object({projectId:E.string().optional(),region:E.string().optional()}),Qj=E.object({apiVersion:E.string().optional(),useIdentity:E.boolean().optional()}),Jj=E.object({clientId:E.string().optional(),clientSecret:E.string().optional(),tokenUrl:E.string().url().optional(),resourceGroup:E.string().optional(),deploymentId:E.string().optional(),useOrchestrationMode:E.boolean().optional(),api:E.enum(["orchestration","foundation-models"]).optional(),defaultSettings:E.record(E.string(),E.unknown()).optional()}),Wj=E.object({mode:E.enum(["internal","external"]).optional(),usePromptCache:E.boolean().optional()}),Xj=E.object({loadLatestOnInit:E.boolean().optional(),loadPrivateOnAuth:E.boolean().optional(),url:E.string().url().optional(),cacheTtlMs:E.number().int().positive().optional(),failOnError:E.boolean().optional()}),P2=E.object({provider:AQ,apiKey:E.string().optional(),auth:tX.optional(),model:E.string().optional(),protocol:oX.optional(),client:sX.optional(),routingProviderId:AQ.optional(),maxTokens:E.number().int().positive().optional(),contextWindow:E.number().int().positive().optional(),baseUrl:E.string().url().optional(),headers:E.record(E.string(),E.string()).optional(),timeout:E.number().int().positive().optional(),reasoning:eX.optional(),aws:$j.optional(),gcp:Zj.optional(),azure:Qj.optional(),sap:Jj.optional(),oca:Wj.optional(),region:E.string().optional(),apiLine:E.enum(["china","international"]).optional(),capabilities:E.array(E.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:Xj.optional()});function jj($){return P2.parse($)}function Yj($){return P2.safeParse($)}function QA($){return $.protocol==="openai-responses"||$.client==="openai"}function N1($,Z={}){let Q=$.provider,J=g4(Q),W=Z.includeKnownModels!==!1,X=$.reasoning?.effort||"none",j=X==="none"?void 0:X,Y=DQ[J],V=Object.assign({},...k0.resolveProviderModelCatalogKeys(J).map((_)=>k0.getGeneratedModelsForProvider(_))),B=Object.keys(V)[0],H=w4(J,$),K=$.baseUrl??k0.resolveProviderApiLineBaseUrl(J,$.apiLine)??(J==="oca"?$.oca?.mode==="internal"?WQ:XQ:Y?.baseUrl),G=$.routingProviderId??(QA($)&&J!==LQ.OPENAI_NATIVE?LQ.OPENAI_NATIVE:void 0),F=W?Y?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,U={providerId:Q,clientType:$.client,routingProviderId:G,modelId:$.model??Y?.modelId??B??"default",...W?{knownModels:F}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:K,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:j,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??Y?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(U).filter(([_,L])=>L!==void 0))}function JA($){let Z=jj($);return N1(Z)}function WA($){let Z=Yj($);if(Z.success)return{success:!0,config:N1(Z.data)};return{success:!1,error:Z.error}}import{SESSION_STATUS_VALUES as XA}from"@cline/shared";var OQ=XA,jA=["idle","running","pending"];function YA($){return!jA.includes($)}function F0($){return!YA($)}var T0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};function Vj($){if($===!0)return{};if(!$)return;return $}function Bj($){if($==="user")return"global";return $}class qQ{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let Z=this.getService().ingestEvent($);return{event:Z.event,duplicate:Z.duplicate,matchedSpecIds:Z.matchedSpecs.map((Q)=>Q.specId),queuedRuns:Z.queuedRuns,suppressions:Z.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function Hj($){let{host:Z}=$;return{async startSession(Q){let J=(Q.cwd?.trim()||Q.workspaceRoot).trim(),W=await Z.startSession({source:Q.source?.trim()||T0.CLI,interactive:!1,config:{providerId:g4(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:J,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:HA(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,J){let W=await Z.runTurn({sessionId:Q,prompt:J.prompt,userImages:J.attachments?.userImages,userFiles:J.attachments?.userFiles?.map((X)=>X.content),delivery:J.delivery});if(!W)throw Error("ClineCore automation runtime returned no result");return{result:BA(W)}},async abortSession(Q){return await Z.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}function v4($){let Z=VA($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),J=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),W=$.context?.logger??$.logger,X=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!J&&!W&&!X)return $.context;return{...$.context??{},...Q?{client:Q}:{},...J?{user:J}:{},...W?{logger:W}:{},...X?{telemetry:X}:{},...Z?{automation:Z}:{}}}function VA($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function BA($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function HA($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}import{existsSync as U6,readFileSync as vf}from"node:fs";import{basename as p7,dirname as PB,extname as mf,isAbsolute as yB,join as cf,relative as kB,resolve as SB}from"node:path";import{createHash as KA}from"node:crypto";import{watch as GA}from"node:fs";import{readdir as FA,readFile as UA}from"node:fs/promises";import{join as DA}from"node:path";function _A($){return KA("sha1").update($).digest("hex")}function Fj($){return Boolean($&&typeof $==="object"&&"code"in $)}function Kj($){return Fj($)&&$.code==="ENOENT"}function Gj($){return Fj($)&&($.code==="EACCES"||$.code==="EPERM")}class k8{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,Z){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=Z?.debounceMs??75,this.emitParseErrors=Z?.emitParseErrors??!1;for(let Q of $){if(this.definitionsByType.has(Q.type))throw Error(`Duplicate unified config definition type '${Q.type}'.`);this.definitionsByType.set(Q.type,Q),this.recordsByType.set(Q.type,new Map),this.discoveredDirectoriesByType.set(Q.type,new Set);for(let J of Q.directories){let W=this.baseTypesByDirectory.get(J);if(W)W.add(Q.type);else this.baseTypesByDirectory.set(J,new Set([Q.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let Z=this.definitionsByType.get($);if(!Z)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(Z)})}getSnapshot($){let Z=this.recordsByType.get($);return new Map([...Z?.entries()??[]].map(([Q,J])=>[Q,{...J}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([J,W])=>[J,{...W}])));return $}emit($){for(let Z of this.listeners)Z($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[Z,Q]of this.watchersByDirectory.entries()){if($.has(Z))continue;Q.close(),this.watchersByDirectory.delete(Z)}this.watchedTypesByDirectory=$;for(let Z of $.keys()){if(this.watchersByDirectory.has(Z))continue;try{let Q=GA(Z,()=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let W of J)this.pendingTypes.add(W);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(J)=>{let W=this.watchedTypesByDirectory.get(Z);if(!W)return;for(let X of W)this.emit({kind:"error",type:X,error:J,filePath:Z})})}catch(Q){if(!Kj(Q)&&!Gj(Q)){let J=$.get(Z);if(!J)continue;for(let W of J)this.emit({kind:"error",type:W,error:Q,filePath:Z})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let Z of $){let Q=this.definitionsByType.get(Z);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:Z,discoveredDirectories:Q}=await this.loadDefinition($),J=this.recordsByType.get($.type)??new Map;for(let[W,X]of J.entries()){if(Z.has(W))continue;this.emit({kind:"remove",type:$.type,id:W,filePath:X.filePath})}for(let[W,X]of Z.entries()){let j=J.get(W);if(j&&j.filePath===X.filePath&&j.fingerprint===X.fingerprint)continue;this.emit({kind:"upsert",record:{type:X.type,id:W,item:X.item,filePath:X.filePath}})}if(this.recordsByType.set($.type,Z),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let Z=new Map,Q=new Set;for(let J of $.directories){Q.add(J);let W=$.discoverFiles?await $.discoverFiles(J):await this.readDirectoryFileCandidates(J);for(let X of W){let{fileName:j,filePath:Y}=X;if(Q.add(X.directoryPath),$.includeFile&&!$.includeFile(j,Y))continue;try{let V=await UA(Y,"utf8"),B={type:$.type,directoryPath:X.directoryPath,fileName:j,filePath:Y,content:V},H=$.parseFile(B),K=$.resolveId(H,B).trim();if(!K)continue;Z.set(K,{type:$.type,id:K,item:H,filePath:Y,fingerprint:_A(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:Y})}}}return{records:Z,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[Z,Q]of this.baseTypesByDirectory.entries())$.set(Z,new Set(Q));for(let[Z,Q]of this.discoveredDirectoriesByType.entries())for(let J of Q){let W=$.get(J);if(W)W.add(Z);else $.set(J,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await FA($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:DA($,Q.name)})).sort((Q,J)=>Q.fileName.localeCompare(J.fileName))}catch(Z){if(Kj(Z)||Gj(Z))return[];throw Z}}}import{readdir as pQ,readFile as pO,stat as dQ}from"node:fs/promises";import{basename as R1,dirname as lO,extname as e4,join as c0,resolve as v8}from"node:path";import{stripUtf8Bom as iO}from"@cline/shared";import{AGENTS_RULES_FILE_NAME as pj,RULES_CONFIG_DIRECTORY_NAME as lj,resolveGlobalAgentsRulesPath as rO,resolveRulesConfigSearchPaths as nO,resolveSkillsConfigSearchPaths as aO,resolveWorkflowsConfigSearchPaths as oO,SKILLS_CONFIG_DIRECTORY_NAME as lQ,WORKFLOWS_CONFIG_DIRECTORY_NAME as iQ}from"@cline/shared/storage";import sO from"yaml";J1();import{existsSync as a4,readFileSync as SO,statSync as bO}from"node:fs";import{basename as yO,dirname as r4,join as o4,resolve as n4}from"node:path";import{discoverPluginModulePaths as kO,resolveConfiguredPluginModulePaths as vj,resolvePluginConfigSearchPaths as hO,SKILLS_CONFIG_DIRECTORY_NAME as IO}from"@cline/shared/storage";import{resolve as YO}from"node:path";import{normalizePluginManifest as VO}from"@cline/shared";import{existsSync as f0,readFileSync as b2}from"node:fs";import{builtinModules as uA,createRequire as CQ}from"node:module";import{dirname as $$,extname as I8,isAbsolute as dA,resolve as r}from"node:path";import{fileURLToPath as Oj}from"node:url";import{PLUGIN_FILE_EXTENSIONS as pA}from"@cline/shared";var qj=$$(Oj(import.meta.url)),lA=CQ(import.meta.url),iA=r(qj,"..","..","..","..",".."),RQ=aA(iA),rA=["@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"],wQ=new Set(uA.flatMap(($)=>[$,$.replace(/^node:/,"")])),h8=new Set(pA),nA=["development","node","import","require","default"];function aA($){let Z={},Q={"@cline/sdk":r($,"packages/sdk/src/index.ts"),"@cline/agents":r($,"packages/agents/src/index.ts"),"@cline/core":r($,"packages/core/src/index.ts"),"@cline/llms":r($,"packages/llms/src/index.ts"),"@cline/shared":r($,"packages/shared/src/index.ts"),"@cline/shared/storage":r($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":r($,"packages/shared/src/db/index.ts")};for(let[J,W]of Object.entries(Q))if(f0(W))Z[J]=W;for(let J of["agents","core","llms","shared"]){let W=r($,"packages",J),X=r(W,"package.json");if(!f0(X))continue;try{let j=JSON.parse(b2(X,"utf8"));if(typeof j.name!=="string"||!j.exports)continue;if(typeof j.exports==="string"){let Y=r(W,j.exports);if(f0(Y))Z[j.name]=Y;continue}if(typeof j.exports!=="object")continue;for(let[Y,V]of Object.entries(j.exports)){let B=oA(W,V);if(!B)continue;let H=Y==="."?j.name:`${j.name}/${Y.replace(/^\.\//,"")}`;Z[H]=B}}catch{}}return Z}function oA($,Z){let Q=PQ(Z);if(!Q)return null;let J=zj($,Q);for(let W of J)if(f0(W))return W;return null}function PQ($,Z=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(Z.has($))return null;Z.add($);let Q=$;for(let J of nA){let W=PQ(Q[J],Z);if(W)return W}return null}function zj($,Z){let Q=Z.replace(/^\.\//,""),J=[r($,Z)];if(Q.startsWith("dist/")){let W=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[r($,`${W}.ts`),r($,`${W}.tsx`),r($,`${W}.mts`),r($,`${W}.cts`),...J]}return J}function sA($){return Object.fromEntries(Object.entries($).sort(([Z],[Q])=>Q.length-Z.length))}function p4($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function S2($){if($.startsWith("@")){let[Z,Q]=$.split("/",3);return Q?`${Z}/${Q}`:$}return $.split("/",1)[0]??$}function tA($){let Z=S2($);if($===Z)return".";return`.${$.slice(Z.length)}`}function Tj($){return S2($).startsWith("@cline/")}function MQ($,Z){let Q=S2(Z),J=$$($);while(!0){let W=r(J,"node_modules",Q);if(f0(W)||f0(r(W,"package.json")))return!0;let X=r(J,"..");if(X===J)return!1;J=X}}function Aj($){return EQ($)!==null}function EQ($){try{return lA.resolve($)}catch{}return eA($)}function eA($){let Z=S2($),Q=Nj(Z);if(!Q)return null;let J=r(Q,"package.json");try{let W=JSON.parse(b2(J,"utf8")),X=tA($),j=X==="."&&typeof W.exports==="string"?W.exports:W.exports&&typeof W.exports==="object"&&Object.hasOwn(W.exports,X)?W.exports[X]:void 0,Y=PQ(j)??(X==="."&&typeof W.main==="string"?W.main:null);if(!Y)return null;let V=r(Q,Y),B=[V,...zj(Q,Y).filter((H)=>H!==V)];for(let H of B)if(f0(H))return H;return null}catch{return null}}function $O(){let $=[qj],Z=process.env.CLINE_WRAPPER_PATH?.trim();if(Z)$.push($$($$(Z)));let Q=process.execPath?.trim();if(Q)$.push($$(Q));return[...new Set($.map((J)=>r(J)))]}function ZO($,Z){let Q=$;while(!0){let J=r(Q,"package.json");if(f0(J))try{if(JSON.parse(b2(J,"utf8")).name===Z)return Q}catch{}let W=r(Q,"node_modules",Z,"package.json");if(f0(W))return $$(W);let X=r(Q,"..");if(X===Q)return null;Q=X}}function Nj($){for(let Z of $O()){let Q=ZO(Z,$);if(Q)return Q}return null}function QO($){let Q=$$($);for(let J=0;J<4;J++){let W=r(Q,"package.json");if(f0(W))try{let j=JSON.parse(b2(W,"utf8"));return j!=null&&typeof j==="object"&&"cline"in j}catch{return!1}let X=r(Q,"..");if(X===Q)return!1;Q=X}return!1}function fj($,Z){let Q=Z.startsWith("file:")?Oj(Z):dA(Z)?Z:r($$($),Z);if(f0(Q)&&h8.has(I8(Q)))return Q;for(let J of h8){let W=`${Q}${J}`;if(f0(W))return W}for(let J of h8){let W=r(Q,`index${J}`);if(f0(W))return W}return null}function Rj($){let Z=new Set,Q=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let J of Q)for(let W of $.matchAll(J)){let X=W[1];if(X)Z.add(X)}return[...Z]}function JO($){return I8($)!==".ts"}function Mj($,Z,Q=new Set){if(Q.has($)||!f0($))return;if(Q.add($),!h8.has(I8($)))return;let J=b2($,"utf8"),W=JO($);for(let X of Rj(J)){if(X.startsWith("node:")||wQ.has(X))continue;if(p4(X)){if(!W)continue;if(Object.hasOwn(RQ,X)||Object.hasOwn(RQ,S2(X))||MQ($,X)||Tj(X)&&Aj(X)||Z&&Aj(X))continue;throw Error(`Cannot find module '${S2(X)}'`)}let j=fj($,X);if(j)Mj(j,Z,Q)}}function Ej($,Z=new Set,Q=new Set){if(Z.has($)||!f0($))return Q;if(Z.add($),!h8.has(I8($)))return Q;let J=b2($,"utf8");for(let W of Rj(J)){if(Q.add(W),p4(W))continue;let X=fj($,W);if(X)Ej(X,Z,Q)}return Q}function WO($,Z){let Q=CQ($),J={},W=Ej($),X=new Set(rA);for(let[j,Y]of Object.entries(RQ)){try{Q.resolve(j);continue}catch{}J[j]=Y}for(let j of W)if(p4(j)&&(Tj(j)||Z))X.add(j);for(let j of X){if(Object.hasOwn(J,j)||MQ($,j))continue;let Y=EQ(j);if(Y)J[j]=Y}if(!Z)return J;for(let j of W){if(!p4(j)||Object.hasOwn(J,j)||MQ($,j)||j.startsWith("node:")||wQ.has(j))continue;let Y=EQ(j);if(Y)J[j]=Y}return J}function XO($){let Z=I8($);return Z===".ts"||Z===".tsx"||Z===".mts"||Z===".cts"}var x$;function jO(){if(x$!==void 0)return x$;let $=Nj("jiti");if(!$)return x$=null,null;let Z=r($,"dist","babel.cjs");if(!f0(Z))return x$=null,null;try{let J=CQ(Z)(Z);x$=typeof J==="function"?J:null}catch{x$=null}return x$}async function Cj($,Z={}){let Q=!QO($);Mj($,Q);let J=WO($,Q),W=sA(J),X=await import("jiti"),j=typeof X==="function"?X:typeof X.default==="function"?X.default:void 0;if(!j)throw Error("Unable to load jiti");let Y=Object.entries(W).filter(([,K])=>XO(K)).map(([K])=>K),V=jO(),B=V?(K)=>V({...K,interopDefault:!0}):void 0;return await j($,{alias:W,cache:Z.useCache,requireCache:Z.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...wQ],transformModules:Y,tryNative:!1,...B?{transform:B}:{}}).import($,{})}function wj($,Z){if(!$)return!0;if($.providerIds?.length){if(!Z?.providerId||!$.providerIds.includes(Z.providerId))return!1}if($.modelIds?.length){if(!Z?.modelId||!$.modelIds.includes(Z.modelId))return!1}return!0}function Pj($){return typeof $==="object"&&$!==null}function SQ($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function BO($,Z){if(!Pj($.manifest))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);if(!SQ($.manifest.capabilities))throw Error(`Invalid plugin module at ${Z}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${Z}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!SQ($.manifest.providerIds))throw Error(`Invalid plugin module at ${Z}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!SQ($.manifest.modelIds))throw Error(`Invalid plugin module at ${Z}: manifest.modelIds must be a string array when provided`)}function HO($,Z){if(!Pj($))throw Error(`Invalid plugin module at ${Z}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${Z}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);BO($,Z)}async function bQ($,Z={}){let Q=YO(Z.cwd??process.cwd(),$),J=await Cj(Q,{useCache:Z.useCache}),W=Z.exportName??"plugin",X=J.default??J[W];HO(X,Q);let j=X,Y=j.setup,V=Y?(B,H)=>{let K={...Z.session,...H.session},G={...H,session:Object.keys(K).length>0?K:void 0,client:Z.client??H.client,user:Z.user??H.user,workspaceInfo:Z.workspaceInfo??H.workspaceInfo,automation:Z.automation??H.automation,logger:Z.logger??H.logger,telemetry:Z.telemetry??H.telemetry};return Y(B,G)}:void 0;return{...j,manifest:VO(j.manifest),setup:V}}async function Sj($,Z={}){return(await x8($,Z)).plugins}async function x8($,Z={}){let Q=[],J=[],W=new Map,X=0;for(let Y of $)try{let V=await bQ(Y,Z);if(!wj(V.manifest,Z))continue;let B=W.get(V.name);if(B)J.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:Y,overriddenPluginPath:B.pluginPath,message:`Plugin "${V.name}" from ${Y} overrides ${B.pluginPath}`});W.set(V.name,{plugin:V,pluginPath:Y,order:X++})}catch(V){let B=V instanceof Error?V.message:String(V);Q.push({pluginPath:Y,phase:"load",message:B,stack:V instanceof Error?V.stack:void 0})}let j=[...W.values()].sort((Y,V)=>Y.order-V.order);return{plugins:j.map((Y)=>Y.plugin),pluginPaths:j.map((Y)=>Y.pluginPath),failures:Q,warnings:J}}import{existsSync as xQ}from"node:fs";import{createRequire as Ij}from"node:module";import{dirname as i4,join as y2}from"node:path";import{fileURLToPath as LO}from"node:url";import{spawn as KO}from"node:child_process";import{basename as GO}from"node:path";import{augmentNodeCommandForDebug as FO,withResolvedClineBuildEnv as UO}from"@cline/shared";function yQ($){if($ instanceof Error)return $;return Error(String($))}var DO="CLINE_JS_RUNTIME_PATH";function bj($){let Z=$?.trim();if(!Z)return!1;let Q=GO(Z).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function yj($={}){let Z=$.env??process.env,Q=$.runtimeExecutable?.trim()||Z[DO]?.trim();if(Q)return Q;let J=$.execPath?.trim()||process.execPath;if(bj(J))return J;for(let W of[Z.BUN_EXEC_PATH,Z.npm_node_execpath,Z.NODE]){let X=W?.trim();if(X&&bj(X))return X}return"node"}function _O($,Z={}){let Q=yj({env:Z.env,execPath:Z.execPath,runtimeExecutable:Z.runtimeExecutable});return FO([Q,...$],{env:Z.env,execArgv:Z.execArgv,debugRole:Z.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class l4{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let Z=this.pending.get($);if(!Z)return;if(this.pending.delete($),Z.timeout)clearTimeout(Z.timeout);return Z}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],Z=_O($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=KO(Z[0]??yj(this.options),Z.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:UO(process.env),windowsHide:!0});this.process=Q;let J="",W=(X)=>{let j=J+X;J=j.length>4000?j.slice(-4000):j};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(X)=>{W(X)}),Q.on("message",(X)=>{this.onMessage(X)}),Q.on("error",(X)=>{this.failPending(Error(`${this.processLabel} process error: ${yQ(X).message}`))}),Q.on("exit",(X,j)=>{this.process=null;let Y=J.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(X)}, signal=${String(j)})${Y?`: ${Y}`:""}`))})}async call($,Z,Q={}){this.start();let J=this.process;if(!J||J.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let W=`req_${++this.requestCounter}`,X={type:"call",id:W,method:$,args:Z};return await new Promise((j,Y)=>{let V={resolve:(B)=>j(B),reject:Y};if((Q.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(W),this.shutdown().catch(()=>{}),Y(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(W,V);try{J.send(X,(B)=>{if(!B)return;let H=this.clearPendingRequest(W);if(!H)return;H.reject(Error(`${this.processLabel} failed to send call "${$}": ${yQ(B).message}`))})}catch(B){this.clearPendingRequest(W),Y(yQ(B))}})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((Z)=>{let Q=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}Z()},300);$.once("exit",()=>{clearTimeout(Q),Z()});try{$.kill("SIGTERM")}catch{clearTimeout(Q),Z()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let Z=this.clearPendingRequest($.id);if(!Z)return;if($.ok){Z.resolve($.result);return}Z.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[Z,Q]of this.pending.entries()){if(this.pending.delete(Z),Q.timeout)clearTimeout(Q.timeout);Q.reject($)}}}function AO($){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 g8($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function OO(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function qO(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=Ij($).resolve(`${OO()}/package.json`),J=y2(i4(Q),"extensions","plugin-sandbox-bootstrap.js");return xQ(J)?J:void 0}catch{return}}function zO(){let $=process.execPath?.trim();if(!$)return;let Z=y2(i4(i4($)),"extensions","plugin-sandbox-bootstrap.js");return xQ(Z)?Z:void 0}function TO(){let $=i4(LO(import.meta.url)),Z=Ij(import.meta.url),Q=[y2($,"plugin-sandbox-bootstrap.js"),y2($,"extensions","plugin-sandbox-bootstrap.js"),y2($,"agents","plugin-sandbox-bootstrap.js"),qO(),zO()];for(let X of Q.filter((j)=>typeof j==="string"))if(xQ(X))return{file:X};let J=y2($,"plugin-sandbox-bootstrap.ts"),W="jiti";try{W=Z.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(W)});`,`const jiti = createJiti(${JSON.stringify(J)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(J)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
|
|
46
|
-
`)}}var kQ=TO();function hQ($,Z,Q){if(typeof $==="number"&&$>0)return $;if(Q){let J=process.env[Q];if(J){let W=Number(J);if(Number.isInteger(W)&&W>0)return W}}return Z}async function k2($){let Z=new l4({name:"plugin-sandbox",..."file"in kQ?{bootstrapFile:kQ.file}:{bootstrapScript:kQ.script},onEvent:$.onEvent}),Q=hQ($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),J=hQ($.hookTimeoutMs,3000),W=hQ($.contributionTimeoutMs,60000),X={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger),telemetryEnabled:$.telemetryAvailable===!0},j,Y=()=>{return j??=Z.call("initialize",X,{timeoutMs:Q}).finally(()=>{j=void 0}),j},V;try{V=await Z.call("initialize",X,{timeoutMs:Q})}catch(K){throw await Z.shutdown().catch(()=>{}),K}let B=V.plugins.map(AO);return{extensions:B.map((K)=>{let G={name:K.name,__clinePluginPath:K.pluginPath,manifest:K.manifest,setup:(F)=>{fO(F,Z,K,W,Y),RO(F,Z,K,W,Y),MO(F,Z,K,W,Y),CO(F,Z,K,W,Y),EO(F,K)}};return G.hooks=PO(Z,K,J,Y),G}),failures:V.failures,pluginPaths:B.map((K)=>K.pluginPath),shutdown:async()=>{await Z.shutdown()},warnings:V.warnings}}function NO($){let Z=$ instanceof Error?$.message:String($);return/cyclic|circular|bigint/i.test(Z)}function IQ($,Z=new WeakSet){if($===null||typeof $!=="object")return typeof $==="function"||typeof $==="symbol"||typeof $==="bigint"?void 0:$;if(Z.has($))return;let Q=$;if(typeof Q.toJSON==="function")try{return Q.toJSON()}catch{return}Z.add($);try{if(Array.isArray($))return $.map((W)=>IQ(W,Z)??null);let J={};for(let[W,X]of Object.entries($)){let j=IQ(X,Z);if(j!==void 0)J[W]=j}return J}finally{Z.delete($)}}var kj=new Set;function xj($,Z,Q){let J=`${$}:${Z}`;if(kj.has(J))return;kj.add(J);let W=Q instanceof Error?Q.message:String(Q);console.warn(`[plugin-sandbox] ${$} "${Z}" received a payload that is not JSON-serializable (${W}); retrying with non-serializable values dropped. Host-only objects must not be placed on tool contexts or hook payloads.`)}async function gj($,Z,Q){try{return await $(Z)}catch(J){if(!NO(J))throw J;return Q(J),await $(IQ(Z))}}function fO($,Z,Q,J,W){for(let X of Q.contributions?.tools??[]){let j={name:X.name,description:X.description??"",inputSchema:X.inputSchema??{type:"object",properties:{}},timeoutMs:X.timeoutMs,retryable:X.retryable,execute:async(Y,V)=>{return await gj(async(H)=>{let{input:K,context:G}=H;try{return await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:K,context:G},{timeoutMs:J})}catch(F){if(!g8(F))throw F;return await W(),await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:K,context:G},{timeoutMs:J})}},{input:Y,context:V},(H)=>xj("tool",X.name,H))}};$.registerTool(j)}}function RO($,Z,Q,J,W){for(let X of Q.contributions?.commands??[])$.registerCommand({name:X.name,description:X.description,handler:async(j)=>{try{return await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:j},{timeoutMs:J})}catch(Y){if(!g8(Y))throw Y;return await W(),await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:j},{timeoutMs:J})}}})}function MO($,Z,Q,J,W){for(let X of Q.contributions?.rules??[])$.registerRule({id:X.ruleId,source:X.source,content:X.hasContentHandler===!0?async()=>{try{return await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:J})}catch(j){if(!g8(j))throw j;return await W(),await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:J})}}:X.content??""})}function EO($,Z){for(let Q of Z.contributions?.providers??[])$.registerProvider({name:Q.name,description:Q.description,metadata:Q.metadata});for(let Q of Z.contributions?.automationEventTypes??[])$.registerAutomationEventType({eventType:Q.eventType,source:Q.source,description:Q.description,attributesSchema:Q.attributesSchema,payloadSchema:Q.payloadSchema,examples:Q.examples,metadata:Q.metadata});for(let Q of Z.contributions?.mcpServers??[])$.registerMcpServer(Q)}function CO($,Z,Q,J,W){for(let X of Q.contributions?.messageBuilders??[])$.registerMessageBuilder({name:X.name,async build(j){try{let Y=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:j},{timeoutMs:J});return hj(Y)?Y:j}catch(Y){if(!g8(Y))throw Y;await W();let V=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:j},{timeoutMs:J});return hj(V)?V:j}}})}function hj($){return Array.isArray($)&&$.every((Z)=>typeof Z==="object"&&Z!==null&&("role"in Z)&&("content"in Z))}function wO($,Z,Q,J,W){return async(X)=>{return await gj(async(Y)=>{try{return await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:Y},{timeoutMs:J})}catch(V){if(!g8(V))throw V;return await W(),await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:Y},{timeoutMs:J})}},X,(Y)=>xj("hook",Q,Y))}}function PO($,Z,Q,J){let W={};for(let X of Z.hooks??[])W[X]=wO($,Z.pluginId,X,Q,J);return Object.keys(W).length>0?W:void 0}var vQ="package.json",xO="package";function mQ($){return hO($)}function cQ($){return kO($)}function gO($){try{return a4($)&&bO($).isDirectory()}catch{return!1}}function uQ($){let Z=[],Q=new Set;for(let J of $){let W=n4(J);if(Q.has(W))continue;Q.add(W),Z.push(W)}return Z}function mj($){let Z=uQ($);return NQ(Z)}function cj($){return mQ($).flatMap((Z)=>cQ(Z)).filter((Z)=>a4(Z))}function vO($,Z){let Q=[];for(let J of $)try{Q.push(...vj([J],Z))}catch{}return Q}function gQ($){return typeof $==="object"&&$!==null}function mO($){try{let Z=JSON.parse(SO(o4($,vQ),"utf8"));if(!gQ(Z)||!gQ(Z.cline))return[];let Q=Z.cline.plugins;if(!Array.isArray(Q))return[];let J=[];for(let W of Q){if(typeof W==="string"){J.push(W);continue}if(!gQ(W)||!Array.isArray(W.paths))continue;for(let X of W.paths)if(typeof X==="string")J.push(X)}return J}catch{return[]}}function uj($,Z){let Q=n4(Z);return mO($).some((J)=>n4($,J)===Q)}function cO($,Z){return yO($)===xO&&a4(o4(r4($),vQ))&&uj(r4($),Z)}function uO($){let Z=n4($),Q=[],J=r4(Z);while(!0){if(cO(J,Z)){Q.push(J);break}if(a4(o4(J,vQ))){if(uj(J,Z))Q.push(J);break}let W=r4(J);if(W===J)break;J=W}return uQ(Q)}function g$($={}){let Z=$.cwd??process.cwd(),Q=cj($.workspacePath),J=vj($.pluginPaths??[],Z);return mj([...J,...Q])}function dO($={}){let Z=$.cwd??process.cwd(),Q=cj($.workspacePath),J=vO($.pluginPaths??[],Z);return mj([...J,...Q])}function v$($){let Z=[];for(let Q of $)for(let J of uO(Q)){let W=o4(J,IO);if(gO(W))Z.push(W)}return uQ(Z)}function dj($={}){return v$(dO($))}async function s4($={}){let Z=g$($);if(Z.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let J=await x8(Z,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:J.plugins,failures:J.failures,pluginPaths:J.pluginPaths,warnings:J.warnings}}let Q=await k2({pluginPaths:Z,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,telemetryAvailable:Boolean($.telemetry),providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:Q.extensions??[],shutdown:Q.shutdown,failures:Q.failures,pluginPaths:Q.pluginPaths,warnings:Q.warnings}}var t4="SKILL.md",tO="managed.json",eO=new Set([".md",".markdown",".txt"]);function rQ($){return $.trim().toLowerCase()}function h2($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="ENOTDIR"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function $5($){return eO.has(e4($).toLowerCase())}function ij($){let Z=[],Q=new Set;for(let J of $){let W=v8(J);if(Q.has(W))continue;Q.add(W),Z.push(J)}return Z}function $q($){let Z=[...$?.directories??eQ($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...dj({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return ij(Z)}async function nQ($){try{let Z=await pQ($,{withFileTypes:!0}),Q=[];for(let J of Z){if(!J.isDirectory())continue;let W=c0($,J.name),X=c0(W,tO);try{let j=await pO(X,"utf8"),Y=JSON.parse(j);if(Y&&typeof Y==="object")Q.push(W)}catch(j){if(h2(j))continue;if(j?.name==="SyntaxError")continue;throw j}}return Q.sort((J,W)=>J.localeCompare(W))}catch(Z){if(h2(Z))return[];throw Z}}function aQ($){let Z=iO($),Q=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=Z.match(Q);if(!J)return{data:{},body:Z,hadFrontmatter:!1};let[,W,X]=J;try{let j=sO.parse(W);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:X,hadFrontmatter:!0}}catch(j){let Y=j instanceof Error?j.message:String(j);return{data:{},body:Z,hadFrontmatter:!0,parseError:Y}}}function Z5($,Z,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${Z}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${Z}' must be a string.`);let J=$.trim();if(!J&&Q)throw Error(`Frontmatter field '${Z}' cannot be empty.`);return J||void 0}function I2($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function Zq($,Z){if(R1($.filePath).toLowerCase()!==pj.toLowerCase())return R1($.filePath,e4($.filePath));if(Z&&v8($.filePath)===v8(Z,pj))return"Workspace AGENTS.md";if(v8($.filePath)===v8(rO()))return"Global AGENTS.md";return R1($.filePath,e4($.filePath))}function oQ($,Z){let{data:Q,body:J,parseError:W}=aQ($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let X=J.trim();if(!X)throw Error("Missing instructions body in skill file.");let Y=Z5(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing skill name.");return{name:Y,description:Z5(Q.description,"description",!1),disabled:I2(Q.disabled,"disabled")??(I2(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function sQ($,Z){let{data:Q,body:J,parseError:W}=aQ($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let X=J.trim();if(!X)throw Error("Missing instructions body in rule file.");let j=Z5(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing rule name.");return{name:j,disabled:I2(Q.disabled,"disabled")??(I2(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function tQ($,Z){let{data:Q,body:J,parseError:W}=aQ($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let X=J.trim();if(!X)throw Error("Missing instructions body in workflow file.");let j=Z5(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing workflow name.");return{name:j,disabled:I2(Q.disabled,"disabled")??(I2(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function eQ($){return aO($)}function $7($){return nO($)}function Z7($){return oO($)}async function rj($){if(R1($)===".cline"){let Z=await nQ($);return(await Promise.all(Z.map((J)=>rj(c0(J,lQ))))).flat()}try{let Z=await pQ($,{withFileTypes:!0}),Q=[];for(let J of Z){if(J.isFile()&&J.name===t4){Q.push({directoryPath:$,fileName:J.name,filePath:c0($,J.name)});continue}let W=c0($,J.name);if(J.isDirectory()||J.isSymbolicLink()&&await dQ(W).then((j)=>j.isDirectory()).catch((j)=>{if(h2(j))return!1;throw j}))Q.push({directoryPath:W,fileName:t4,filePath:c0(W,t4)})}return Q}catch(Z){if(h2(Z))return[];throw Z}}async function Q5($){if(R1($)===".cline"){let Z=await nQ($);return(await Promise.all(Z.map((J)=>Q5(c0(J,"rules.md"))))).flat()}try{if((await dQ($)).isFile())return[{directoryPath:lO($),fileName:R1($),filePath:$}]}catch(Z){if(!h2(Z))throw Z}try{let Q=(await pQ($,{withFileTypes:!0})).filter((W)=>W.isFile()&&$5(W.name)).map((W)=>({directoryPath:$,fileName:W.name,filePath:c0($,W.name)})),J=c0($,"AGENTS.md");try{if((await dQ(J)).isFile()){if(!Q.some((j)=>j.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:J})}}catch{}return Q}catch(Z){if(h2(Z))return[];throw Z}}async function Qq($){if(R1($)===".cline"){let Z=await nQ($);return(await Promise.all(Z.map((J)=>Q5(c0(J,iQ))))).flat()}return Q5($)}function Q7($){let Z=$q($),Q=$?.workspacePath?c0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?ij([...Z,Q]):Z,discoverFiles:rj,includeFile:(J)=>J===t4,parseFile:(J)=>oQ(J.content,R1(J.directoryPath)),resolveId:(J)=>rQ(J.name)}}function J7($){let Z=$?.directories??$7($?.workspacePath),Q=$?.workspacePath?c0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:Q5,includeFile:(J,W)=>J===".clinerules"||$5(J)||$5(W),parseFile:(J)=>sQ(J.content,Zq(J,$?.workspacePath)),resolveId:(J)=>rQ(J.name)}}function W7($){let Z=$?.directories??Z7($?.workspacePath),Q=$?.workspacePath?c0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:Qq,includeFile:(J)=>$5(J),parseFile:(J)=>tQ(J.content,R1(J.filePath,e4(J.filePath))),resolveId:(J)=>rQ(J.name)}}function nj($){let Z=[Q7($?.skills),J7($?.rules),W7($?.workflows)];return new k8(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as aj}from"@cline/shared";function Jq($,Z){if($.description?.trim())return aj($.description,".");if(Z==="workflow")return;return aj($.instructions,".")}function Wq($){return $.disabled!==!0}function oj($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,J])=>({id:Q,record:J})).filter(({record:Q})=>Wq(Q.item)).map(({id:Q,record:J})=>({id:Q,name:J.item.name,instructions:J.item.instructions,description:Jq(J.item,Z),kind:Z})).sort((Q,J)=>Q.name.localeCompare(J.name))}function m8($){let Z=new Map;for(let Q of[...oj($,"workflow"),...oj($,"skill")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,J)=>Q.name.localeCompare(J.name))}function sj($,Z){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let J=Q[1];if(!J)return $;let W=J.length+1,X=$.slice(W),j=m8(Z).find((Y)=>Y.name===J);return j?`${j.instructions}${X}`:$}function tj($){return $.disabled!==!0}function J5($){if($.length===0)return"";return`
|
|
45
|
+
</html>`;function zX($){let Z="";for(let Q=0;Q<$.length;Q+=1)Z+=String.fromCharCode($[Q]??0);return btoa(Z).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function C_($){let Q=new TextEncoder().encode($),J=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(J)}function w_($=32){let Z=new Uint8Array($);return crypto.getRandomValues(Z),zX(Z)}async function f4(){let $=w_(),Z=zX(await C_($));return{verifier:$,challenge:Z}}function R4($){return $.endsWith("/")?$.slice(0,-1):$}function h$($,Z){return new URL(Z,`${R4($)}/`).toString()}function f2($,Z={}){let Q=$.trim();if(!Q)return{};try{let J=new URL(Q);return{code:J.searchParams.get("code")??void 0,state:J.searchParams.get("state")??void 0,provider:Z.includeProvider?J.searchParams.get("provider")??void 0:void 0}}catch{}if(Z.allowHashCodeState&&Q.includes("#")){let[J,W]=Q.split("#",2);return{code:J||void 0,state:W||void 0}}if(Q.includes("code=")){let J=new URLSearchParams(Q);return{code:J.get("code")??void 0,state:J.get("state")??void 0,provider:Z.includeProvider?J.get("provider")??void 0:void 0}}return{code:Q}}function R2($){try{let Z=JSON.parse($),Q=Z.error,J=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,W=typeof Z.error_description==="string"?Z.error_description:typeof Z.message==="string"?Z.message:Q&&typeof Q==="object"&&typeof Q.message==="string"?Q.message:void 0;return{code:J,message:W}}catch{return{}}}function M2($,Z){return Date.now()>=$.expires-Z}async function E2($){if(!$.onManualCodeInput){let X=await $.waitForCallback();return{code:X?.code,state:X?.state,provider:X?.provider,error:X?.error}}let Z,Q,J=$.onManualCodeInput().then((X)=>{Z=X,$.cancelWait()}).catch((X)=>{Q=X instanceof Error?X:Error(String(X)),$.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(Z)return f2(Z,$.parseOptions);if(await J,Q)throw Q;if(Z)return f2(Z,$.parseOptions);return{}}var M4={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},RX={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},iZ="https://api.workos.com",S_="/auth",TX=Array.from({length:11},($,Z)=>48801+Z),b_=300000,y_=30000,C2=30000,k_=300,h_=5;class v0 extends Error{status;errorCode;requestId;constructor($,Z){super($);this.name="ClineOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode,this.requestId=Z?.requestId}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function I_($){let Z=Date.parse($);if(Number.isNaN(Z))throw Error(`Invalid expiresAt value: ${$}`);return Z}function rZ($,Z,Q={}){let J=$.userInfo.clineUserId??Q.accountId,W=$.refreshToken??Q.refresh;if(!W)throw Error("Token response did not include a refresh token");let X={...Q.metadata??{},provider:Z,tokenType:$.tokenType,userInfo:$.userInfo};return delete X.startedAt,{access:$.accessToken,refresh:W,expires:I_($.expiresAt),accountId:J??void 0,email:$.userInfo.email||Q.email,metadata:X}}async function nZ($){if(!$)return{};return typeof $==="function"?await $():$}function NX($,Z){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return Z;return Math.floor($)}function x_($){return typeof $==="string"&&$.trim()||void 0}function g_($){let Z=P_($);if(!Z)return{};return{sessionId:x_(Z.sid)}}function v_($){let Z={},Q=$.metadata?.sessionStartedAtMs;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)Z.sessionDurationMs=Date.now()-Q;return Z}function aZ($){return{...g_($.access),...v_($)}}async function fX($){await new Promise((Z)=>setTimeout(Z,$))}function oZ($,Z){if(!$.success||!$.data?.accessToken)throw Error(Z);return $.data}async function MX($,Z){let Q=await fetch(h$(iZ,RX.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(Z?.requestTimeoutMs??C2)}),J=await Q.json().catch(()=>({}));if(!Q.ok)throw new v0(`Device authorization failed: ${Q.status}${J.error_description?` - ${J.error_description}`:""}`,{status:Q.status,errorCode:J.error,requestId:Q.headers.get("x-request-id")??void 0});if(!J.device_code||!J.user_code||!J.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:J.device_code,userCode:J.user_code,verificationUri:J.verification_uri,verificationUriComplete:J.verification_uri_complete,expiresInSeconds:NX(J.expires_in,k_),pollIntervalSeconds:NX(J.interval,h_)}}async function EX($){let Z=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=Z){let J=await fetch(h$($.workosApiBaseUrl,RX.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 J.json().catch(()=>({}));if(J.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 fX(Q*1000);break}case"slow_down":{Q+=1,await fX(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new v0(W.error_description||"WorkOS authorization failed",{status:J.status,errorCode:W.error,requestId:J.headers.get("x-request-id")??void 0});default:throw new v0(`WorkOS token polling failed: ${J.status}${W.error_description?` - ${W.error_description}`:""}`,{status:J.status,errorCode:W.error,requestId:J.headers.get("x-request-id")??void 0})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function CX($,Z,Q){let J={accessToken:$.accessToken,refreshToken:$.refreshToken},W=await fetch(h$(Z.apiBaseUrl,M4.register),{method:"POST",headers:{"Content-Type":"application/json",...await nZ(Z.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Z.requestTimeoutMs??C2)});if(!W.ok){let j=await W.text().catch(()=>""),Y=R2(j);throw new v0(`Token registration failed: ${W.status}${Y.message?` - ${Y.message}`:""}`,{status:W.status,errorCode:Y.code,requestId:W.headers.get("x-request-id")??void 0})}let X=await W.json();return rZ(oZ(X,"Invalid token exchange response"),Q??Z.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function m_($,Z,Q,J){let W={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:Z,provider:J??Q.provider},X=await fetch(h$(Q.apiBaseUrl,M4.token),{method:"POST",headers:{"Content-Type":"application/json",...await nZ(Q.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Q.requestTimeoutMs??C2)});if(!X.ok){let Y=await X.text().catch(()=>""),V=R2(Y);throw new v0(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code,requestId:X.headers.get("x-request-id")??void 0})}let j=await X.json();return rZ(oZ(j,"Invalid token exchange response"),J??Q.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function sZ($){n1($.telemetry,$.provider??"cline");let Z=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:TX,J=$.callbackPath??S_,W=Z?null:await T1({ports:Q,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=W?.callbackUrl||`http://127.0.0.1:${Q[0]??TX[0]}${J}`;try{let j;if(Z){let Y=lZ().workOsClientId,V=await MX(Y,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let B=await EX({clientId:Y,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??C2,workosApiBaseUrl:iZ,onProgress:$.callbacks.onProgress});j=await CX(B,$,$.provider)}else{let Y=new URL(h$($.apiBaseUrl,M4.authorize));Y.searchParams.set("client_type","extension"),Y.searchParams.set("callback_url",X),Y.searchParams.set("redirect_uri",X),$.callbacks.onAuth({url:Y.toString(),instructions:"Continue the authentication process in your browser."});let V,B=$.provider,H=await E2({waitForCallback:W?.waitForCallback??(async()=>null),cancelWait:W?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(H.error)throw Error(`OAuth error: ${H.error}`);if(V=H.code,B=H.provider??B,!V){let K=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=f2(K,{includeProvider:!0});V=G.code,B=G.provider??B}if(!V)throw Error("Missing authorization code");j=await m_(V,X,$,B)}return a1($.telemetry,$.provider??"cline",aZ(j)),s1($.telemetry,{id:j.accountId,email:j.email,provider:$.provider??"cline"}),j}catch(j){throw o1($.telemetry,$.provider??"cline",j instanceof Error?j.message:String(j),{requestId:j instanceof v0?j.requestId:void 0}),j}finally{W?.close()}}async function c_($){return await MX(lZ().workOsClientId,$)}async function u_($){let Z=$.provider??"cline";n1($.telemetry,Z);try{let Q=await EX({clientId:lZ().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??C2,workosApiBaseUrl:iZ}),J=await CX(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return a1($.telemetry,Z,aZ(J)),s1($.telemetry,{id:J.accountId,email:J.email,provider:Z}),J}catch(Q){throw o1($.telemetry,Z,Q instanceof Error?Q.message:String(Q),{requestId:Q instanceof v0?Q.requestId:void 0}),Q}}async function wX($,Z){let Q=h$(Z.apiBaseUrl,M4.refresh);s(`cline.refresh.request url=${Q} refreshTokenHash=${y0($.refresh)}`);let J=await fetch(Q,{method:"POST",headers:{"Content-Type":"application/json",...await nZ(Z.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(Z.requestTimeoutMs??C2)});if(!J.ok){let Y=await J.text().catch(()=>""),V=R2(Y),B=J.headers.get("x-request-id")??void 0;throw s(`cline.refresh.error status=${J.status} errorCode=${V.code??"none"} message=${V.message??"none"} requestId=${B??"none"}`),new v0(`Token refresh failed: ${J.status}${V.message?` - ${V.message}`:""}`,{status:J.status,errorCode:V.code,requestId:B})}let W=await J.json(),X=$.metadata?.provider??Z.provider,j=rZ(oZ(W,"Invalid token refresh response"),X,$);return s(`cline.refresh.success newAccessTokenHash=${y0(j.access)} newRefreshTokenHash=${y0(j.refresh)} expires=${j.expires}`),j}async function tZ($,Z,Q){if(!$)return s("cline.getCredentials outcome=no_current_credentials"),null;let J=Q?.refreshBufferMs??b_,W=Q?.retryableTokenGraceMs??y_,X=Q?.forceRefresh===!0;if(!X&&!M2($,J))return s(`cline.getCredentials outcome=still_valid forceRefresh=${X}`),$;s(`cline.getCredentials outcome=needs_refresh forceRefresh=${X} accessTokenHash=${y0($.access)}`);try{return await wX($,Z)}catch(j){let Y=aZ($),V=j instanceof v0&&j.requestId?{request_id:j.requestId}:{},B={status:j instanceof v0?j.status:void 0,errorCode:j instanceof v0?j.errorCode:void 0,...V,...Y,errorName:j instanceof Error?j.name:void 0};if(j instanceof v0&&j.isLikelyInvalidGrant())return s(`cline.getCredentials outcome=invalid_grant status=${j.status} errorCode=${j.errorCode??"none"}`),y$(Z.telemetry,Z.provider??"cline","invalid_grant",{status:j.status,errorCode:j.errorCode,...V,...Y}),null;if($.expires-Date.now()>W)return s(`cline.getCredentials outcome=transient_failure_kept_current error=${j instanceof Error?j.message:String(j)}`),PZ(Z.telemetry,Z.provider??"cline",{...B,tokenExpired:!1}),$;throw s(`cline.getCredentials outcome=transient_failure_rethrown error=${j instanceof Error?j.message:String(j)}`),PZ(Z.telemetry,Z.provider??"cline",{...B,tokenExpired:!0}),j}}q0();import{decodeJwtPayload as eZ}from"@cline/shared";import{nanoid as d_}from"nanoid";var B0={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 E4 extends Error{status;errorCode;constructor($,Z){super($);this.name="OpenAICodexOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function p_($,Z,Q=B0.redirectUri){let J=await fetch(B0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:B0.clientId,code:$,code_verifier:Z,redirect_uri:Q}),signal:AbortSignal.timeout(B0.httpTimeoutMs)});if(!J.ok)return{type:"failed"};let W=await J.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 l_($){try{let Z=await fetch(B0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:B0.clientId}),signal:AbortSignal.timeout(B0.httpTimeoutMs)});if(!Z.ok){let J=await Z.text().catch(()=>""),W=R2(J);throw new E4(`Token refresh failed: ${Z.status}${W.message?` - ${W.message}`:""}`,{status:Z.status,errorCode:W.code})}let Q=await Z.json();if(!Q.access_token||!Q.refresh_token||typeof Q.expires_in!=="number")return{type:"failed"};return{type:"success",access:Q.access_token,refresh:Q.refresh_token,expires:Date.now()+Q.expires_in*1000,email:Q.email,idToken:Q.id_token}}catch(Z){if(Z instanceof E4)throw Z;return{type:"failed"}}}async function i_($="pi"){let{verifier:Z,challenge:Q}=await f4(),J=d_(32),W=new URL(B0.authorizationEndpoint);return W.searchParams.set("response_type","code"),W.searchParams.set("client_id",B0.clientId),W.searchParams.set("redirect_uri",B0.redirectUri),W.searchParams.set("scope",B0.scopes),W.searchParams.set("code_challenge",Q),W.searchParams.set("code_challenge_method","S256"),W.searchParams.set("state",J),W.searchParams.set("id_token_add_organizations","true"),W.searchParams.set("codex_cli_simplified_flow","true"),W.searchParams.set("originator",$),{verifier:Z,state:J,url:W.toString()}}function r_(){try{let $=new URL(B0.redirectUri),Z=$.port.length>0?Number.parseInt($.port,10):B0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(Z)?Z:B0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:B0.callbackPort,callbackPath:"/auth/callback",redirectUri:B0.redirectUri}}}function n_($,Z){let Q=Z?eZ(Z):eZ($),J=Q?Q:eZ($),X=J?.[B0.jwtClaimPath]?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;let j=J?.organizations;if(Array.isArray(j)&&j.length>0){let V=j[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let Y=J?.chatgpt_account_id;if(typeof Y==="string"&&Y.length>0)return Y;return null}function PX($,Z){let Q=n_($.access,$.idToken)??Z?.accountId;if(!Q)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||Z?.refresh||"",expires:$.expires,accountId:Q,email:$.email??Z?.email,metadata:{...Z?.metadata??{},provider:"openai-codex"}}}async function $Q($){n1($.telemetry,"openai-codex");let Z=r_(),{verifier:Q,state:J,url:W}=await i_($.originator),X=await T1({host:Z.host,ports:[Z.port],callbackPath:Z.callbackPath,expectedState:J});$.onAuth({url:W,instructions:"Continue the authentication process in your browser."});let j;try{let Y=await E2({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(Y.state&&Y.state!==J)throw Error("State mismatch");if(j=Y.code,!j){let H=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=f2(H,{allowHashCodeState:!0});if(K.state&&K.state!==J)throw Error("State mismatch");j=K.code}if(!j)throw Error("Missing authorization code");let V=await p_(j,Q,Z.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let B=PX(V);return a1($.telemetry,"openai-codex"),s1($.telemetry,{id:B.accountId,email:B.email,provider:"openai-codex"}),B}catch(Y){throw o1($.telemetry,"openai-codex",Y instanceof Error?Y.message:String(Y)),Y}finally{X.close()}}async function SX($,Z){let Q=await l_($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let J=PX(Q,Z);if(!J.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return J}async function ZQ($,Z){if(!$)return null;let Q=Z?.refreshBufferMs??B0.refreshBufferMs,J=Z?.retryableTokenGraceMs??B0.retryableTokenGraceMs;if(Z?.forceRefresh!==!0&&!M2($,Q))return $;try{return await SX($.refresh,$)}catch(X){if(X instanceof E4&&X.isLikelyInvalidGrant())return y$(Z?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}q0();import{decodeJwtPayload as S8}from"@cline/shared";import{nanoid as bX}from"nanoid";class QQ{ttlMs;maxEntries;entries=new Map;constructor($,Z){this.ttlMs=$;this.maxEntries=Z}get($,Z=Date.now()){this.pruneExpired(Z);let Q=this.entries.get($);if(!Q)return;return this.entries.delete($),this.entries.set($,Q),Q.value}set($,Z,Q=Date.now(),J=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:Z,expiresAt:Q+J})}pruneExpired($){for(let[Z,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(Z)}}var a_="a8331954c0cf48ba99b5dd223a14c6ea",o_="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",s_="openid offline_access",WQ="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",t_="c1aba3deed5740659981a752714eba33",e_="https://login-ext.identity.oraclecloud.com",$L="openid offline_access",XQ="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm";var ZL="/auth/oca",QL=Array.from({length:11},($,Z)=>48801+Z),JL=300000,WL=30000,yX=30000,XL=600000;class C4 extends Error{status;errorCode;constructor($,Z){super($);this.name="OcaOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var t1={internal:{clientId:a_,idcsUrl:o_,scopes:s_,baseUrl:WQ},external:{clientId:t_,idcsUrl:e_,scopes:$L,baseUrl:XQ}},b8=new Map,jL=86400000,YL=300000,VL=32,JQ=new QQ(jL,VL);function kX($){if(typeof $==="function")return $();return $??"internal"}function hX($){return{internal:{clientId:$?.internal?.clientId??t1.internal.clientId,idcsUrl:$?.internal?.idcsUrl??t1.internal.idcsUrl,scopes:$?.internal?.scopes??t1.internal.scopes,baseUrl:$?.internal?.baseUrl??t1.internal.baseUrl},external:{clientId:$?.external?.clientId??t1.external.clientId,idcsUrl:$?.external?.idcsUrl??t1.external.idcsUrl,scopes:$?.external?.scopes??t1.external.scopes,baseUrl:$?.external?.baseUrl??t1.external.baseUrl}}}function BL($=Date.now()){let Z=$-XL;for(let[Q,J]of b8.entries())if(J.createdAt<Z)b8.delete(Q)}function HL($,Z,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let W=S8(Z)?.exp;if(typeof W==="number"&&W>0)return W*1000;let j=S8(Q)?.exp;if(typeof j==="number"&&j>0)return j*1000;return Date.now()+3600000}function IX($,Z,Q){let J=$.access_token;if(!J)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 X=S8($.id_token),j=S8(J),Y=X?.sub??j?.sub,V=X?.email??j?.email;return{access:J,refresh:W,expires:HL($,J,$.id_token),accountId:Y??Q?.accountId,email:V??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:Z,subject:Y,idToken:$.id_token}}}async function xX($,Z){let Q=R4($),J=JQ.get(Q);if(J)return J;let W=`${Q}/.well-known/openid-configuration`,X=await fetch(W,{method:"GET",signal:AbortSignal.timeout(Z)});if(!X.ok){let V=`${Q}/oauth2/v1/token`;return JQ.set(Q,V,Date.now(),YL),V}let Y=(await X.json()).token_endpoint||`${Q}/oauth2/v1/token`;return JQ.set(Q,Y),Y}function gX($){return{code:$.error,message:$.error_description}}async function KL($){let Z=b8.get($.state);if(!Z)throw Error("No PKCE verifier found for this state");b8.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,J=await xX(Q.idcsUrl,$.requestTimeoutMs),W=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:Z.redirectUri,client_id:Q.clientId,code_verifier:Z.verifier}),X=await fetch(J,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:W,signal:AbortSignal.timeout($.requestTimeoutMs)}),j=await X.json();if(!X.ok){let V=gX(j);throw new C4(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let Y=S8(j.id_token);if(!j.id_token||!Y)throw Error("No ID token received from OCA");if(Y.nonce!==Z.nonce)throw Error("OIDC nonce verification failed");return IX(j,$.mode)}function GL($){let Z=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${R4(Z.idcsUrl)}/oauth2/v1/authorize`);return Q.searchParams.set("client_id",Z.clientId),Q.searchParams.set("response_type","code"),Q.searchParams.set("scope",Z.scopes),Q.searchParams.set("code_challenge",$.challenge),Q.searchParams.set("code_challenge_method","S256"),Q.searchParams.set("redirect_uri",$.callbackUrl),Q.searchParams.set("state",$.state),Q.searchParams.set("nonce",$.nonce),Q.toString()}async function jQ($){n1($.telemetry,"oca");let Z=hX($.config),Q=kX($.mode),J=$.callbackPorts?.length?$.callbackPorts:QL,W=$.callbackPath??ZL,X=$.requestTimeoutMs??yX,j=await T1({ports:J,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),Y=j.callbackUrl;if(!Y)throw Error("Unable to bind local OAuth callback server");let V=bX(16),B=bX(16),{verifier:H,challenge:K}=await f4();BL(),b8.set(V,{verifier:H,nonce:B,mode:Q,redirectUri:Y,createdAt:Date.now()});let G=GL({callbackUrl:Y,mode:Q,state:V,nonce:B,challenge:K,config:Z});$.callbacks.onAuth({url:G,instructions:"Continue the authentication process in your browser."});try{let F=await E2({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),U=F.code,_=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!U){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!_||_!==V)throw Error("State mismatch");let L=await KL({code:U,state:_,mode:Q,config:Z,requestTimeoutMs:X});return a1($.telemetry,"oca"),s1($.telemetry,{id:L.accountId,email:L.email,provider:"oca"}),L}catch(F){throw o1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{j.close()}}async function vX($,Z={}){let Q=hX(Z.config),J=Z.requestTimeoutMs??yX,W=$.metadata?.mode,X=W==="internal"||W==="external"?W:kX(Z.mode),j=X==="external"?Q.external:Q.internal,Y=await xX(j.idcsUrl,J),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:j.clientId}),B=await fetch(Y,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(J)}),H=await B.json();if(!B.ok){let K=gX(H);throw new C4(`Token refresh failed: ${B.status}${K.message?` - ${K.message}`:""}`,{status:B.status,errorCode:K.code})}return IX(H,X,$)}async function YQ($,Z,Q){if(!$)return null;let J=Z?.refreshBufferMs??Q?.refreshBufferMs??JL,W=Z?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??WL;if(Z?.forceRefresh!==!0&&!M2($,J))return $;try{return await vX($,Q)}catch(j){if(j instanceof C4&&j.isLikelyInvalidGrant())return y$(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}import{decodeJwtPayload as FL,getClineEnvironmentConfig as mX}from"@cline/shared";var w4="workos:";function UL($){let Z=$.trim();return Z.toLowerCase().startsWith(w4)?Z:`${w4}${Z}`}function DL($){let Z=$.trim();return Z.toLowerCase().startsWith(w4)?Z.slice(w4.length):Z}function _L($){let Q=FL($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function LL($,Z){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let J=_L(Z);if(J)return J;return Date.now()-1}function AL($,Z){let Q=$.auth?.accessToken?.trim(),J=$.auth?.refreshToken?.trim();if(!Q||!J)return null;let W=Z?.normalizeAccessToken?.(Q)??Q;if(!W)return null;return{access:W,refresh:J,expires:LL($,W),accountId:$.auth?.accountId,metadata:$.auth?.metadata}}function OL($){let Z=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:Z,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},J=Object.fromEntries(Object.entries($.credentials.metadata??{}).filter(([,j])=>j!==void 0)),W={...$.settings?.auth?.metadata??{},...J};if(Object.keys(W).length>0)Q.metadata=W;let X={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(X,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return X}function VQ($){let Z=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:Z,getApiKey(Q){let J=Q?.auth?.accessToken?.trim();if(J)return $.formatAccessToken?.(J)??J;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return OL({...Q,storageProviderId:Z,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function cX($){return VQ({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:UL,normalizeStoredAccessToken:DL,login:({settings:Z,callbacks:Q,telemetry:J})=>sZ({apiBaseUrl:Z?.baseUrl?.trim()||mX().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:J}),refresh:({settings:Z,credentials:Q,forceRefresh:J,telemetry:W})=>tZ(Q,{apiBaseUrl:Z.baseUrl?.trim()||mX().apiBaseUrl,telemetry:W},{forceRefresh:J})})}var qL=[cX({providerId:"cline"}),cX({providerId:"cline-pass",storageProviderId:"cline"}),VQ({providerId:"oca",login:({settings:$,callbacks:Z,telemetry:Q})=>jQ({mode:$?.oca?.mode,callbacks:Z,telemetry:Q}),refresh:({settings:$,credentials:Z,forceRefresh:Q,telemetry:J})=>YQ(Z,{forceRefresh:Q,telemetry:J},{mode:$.oca?.mode,telemetry:J})}),VQ({providerId:"openai-codex",login:({callbacks:$,telemetry:Z})=>$Q({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:Z}),refresh:({credentials:$,forceRefresh:Z,telemetry:Q})=>ZQ($,{forceRefresh:Z,telemetry:Q})})],zL=new Map(qL.map(($)=>[$.providerId,$]));function z0($){return zL.get($.trim().toLowerCase())}function w2($){return z0($)!==void 0}function TL($){return z0($)?.storageProviderId}function NL($,Z){let Q=z0(Z),J=Q?.storageProviderId??Z,W=$.getProviderSettings(J);return Q?.getApiKey(W)??P4(Z,W)}async function BQ($,Z,Q){let J=z0(Z);if(!J)throw Error(`Provider "${Z}" does not support OAuth login`);let W=$.getProviderSettings(J.storageProviderId),X=await J.login({settings:W,callbacks:Q.callbacks,telemetry:Q.telemetry});return J.saveCredentials({manager:$,settings:W,credentials:X})}function HQ($,Z){let Q=z0($);if(!Q)return null;return AL(Z,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function y8($){let Z=z0($.providerId);if(!Z)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return Z.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function P4($,Z){let Q=z0($);if(Q)return Q.getApiKey(Z);return Z?.auth?.accessToken?.trim()||Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0}function fL($,Z){let Q=z0($);if(!Q)return Z.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:Z.access}})??Z.access}import*as k0 from"@cline/llms";import{ReasoningLevelSchema as $A}from"@cline/shared";import{z as E}from"zod";import*as t from"@cline/llms";function KQ($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let J of[Q.id,Q.name,Q.model])if(typeof J==="string"&&J.trim())return J.trim()}return""}).filter((Z)=>Z.length>0)}function RL($,Z){let Q=KQ($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let J=$,W=KQ(J.data??J.models);if(W.length>0)return W;if(J.models&&typeof J.models==="object"&&!Array.isArray(J.models)){let j=Object.keys(J.models).filter((Y)=>Y.trim().length>0);if(j.length>0)return j}let X=J.providers?.[Z];if(X&&typeof X==="object"){let Y=KQ(X.models??X);if(Y.length>0)return Y}return[]}async function S4($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return RL(await Q.json(),Z)}function uX($){return $.replace(/\/+$/,"")}function b4($,Z,Q){let J=Q?.trim();if(!J)return;let W=$?.trim();if(!W||!Z?.trim())return J;try{let X=new URL(J),j=new URL(Z),Y=new URL(W);if(X.origin!==j.origin)return J;let V=uX(j.pathname),B=uX(Y.pathname);if(V&&X.pathname.startsWith(`${V}/`)){let H=X.pathname.slice(V.length);Y.pathname=`${B}${H}`}else Y.pathname=X.pathname;return Y.search=X.search,Y.hash=X.hash,Y.toString()}catch{return J}}function ML($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function EL($){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 CL=Object.values(t.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:ML($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),lX=Object.fromEntries(CL.map(($)=>[$.id,$]));function wL($){return lX[$]}function PL(){return Object.fromEntries(Object.entries(lX).filter(([,$])=>EL($)))}function iX($=[]){let Z=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return Z.length>0?Z:void 0}var rX="https://models.dev/api.json",SL=600000,nX=300000,bL=5000,k4=new Map,k8=new Map,FQ=new Map,y4=new Map;async function yL(){return t.getGeneratedProviderModels()}async function kL($,Z={},Q={},J={},W={},X={}){if($==="litellm")return t.sortModelsByReleaseDate(J);let j=await yL(),Y=t.resolveProviderModelCatalogKeys($),V=Object.assign({},...Y.map((K)=>j[K]??{}));if(Boolean(t.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl))return t.sortModelsByReleaseDate({...W,...X});if($==="openai-codex")return t.sortModelsByReleaseDate({...Z,...t.filterOpenAICodexModels(Q),...W,...X});if($==="cline-pass"&&Object.keys(Q).length>0)return{...Q,...X};let H=t.sortModelsByReleaseDate({...V,...Z,...Q,...J,...W});if($==="cline")return t.sortModelsByReleaseDate({...t.preferCanonicalModelIds(H,t.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...X});return t.sortModelsByReleaseDate({...H,...X})}function hL($,Z){let Q=t.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((J)=>Z[J]??{}))}function h4($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function UQ($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function IL($){let Z=2166136261;for(let Q=0;Q<$.length;Q+=1)Z^=$.charCodeAt(Q),Z+=(Z<<1)+(Z<<4)+(Z<<7)+(Z<<8)+(Z<<24);return(Z>>>0).toString(16)}function xL($,Z){return`${$}:${h4(Z.baseUrl)}:${IL(UQ(Z)??"")}`}async function I4($,Z,Q=bL){let J=new AbortController,W=setTimeout(()=>J.abort(),Q);try{return await fetch($,{...Z,signal:J.signal})}finally{clearTimeout(W)}}function I$($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function x4($,Z){let Q=["streaming","tools"];return I$(Q,"images",Boolean(Z.supportsImages)),I$(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),I$(Q,"reasoning",Boolean(Z.supportsReasoning)),{id:$,name:Z.name??$,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxTokens:Z.maxTokens,capabilities:Q,releaseDate:Z.releaseDate,status:"active"}}async function gL($,Z){let Q=await I4("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let W=(await Q.json())?.data??[],X={};for(let j of W){let Y=j.id?.trim();if(!Y)continue;if(Y.includes("whisper")||Y.includes("tts")||Y.includes("embedding"))continue;let V=j.supported_features??[];X[Y]=x4(Y,{name:Y,contextWindow:j.context_length,maxInputTokens:j.context_length,maxTokens:j.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return X}function dX($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function vL($,Z){let Q=await I4("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":Z}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let W=(await Q.json())?.data??[],X={};for(let j of W){let Y=j.id?.trim();if(!Y)continue;X[Y]=x4(Y,{name:Y,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return X}async function mL($,Z){let J=`${(h4($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,W=await I4(J,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!W.ok)throw Error(`Poolside model refresh failed: HTTP ${W.status}`);let j=(await W.json())?.data??[],Y={};for(let V of j){let B=V.id?.trim();if(!B)continue;let H=V.supported_features??[],K=V.supported_sampling_parameters??[],G=V.input_modalities??[],F=["streaming"];I$(F,"tools",H.includes("tools")),I$(F,"reasoning",H.includes("reasoning")),I$(F,"temperature",K.includes("temperature")),I$(F,"images",G.includes("image"));let U={input:dX(V.pricing?.prompt),output:dX(V.pricing?.completion)};Y[B]={id:B,name:V.name??B,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:U.input!==void 0||U.output!==void 0?U:void 0,status:"active"}}return Y}function cL($){let Z=h4($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function uL($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function dL($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,J=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${J}`}async function pL($,Z){let Q=cL($.baseUrl),J=[],W=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let X of uL(Q))for(let[j,Y]of W)try{let V=await I4(X,{method:"GET",headers:{accept:"application/json",...Y}});if(V.ok){let H=(await V.json())?.data??[],K={};for(let G of H){let F=G.model_name?.trim(),_=G.litellm_params?.model?.trim()||F;if(!_)continue;let L=G.model_info,O=x4(_,{name:F??_,maxTokens:L?.max_output_tokens??L?.max_tokens,maxInputTokens:L?.max_input_tokens??L?.max_tokens,supportsImages:L?.supports_vision,supportsPromptCache:L?.supports_prompt_caching,supportsReasoning:L?.supports_reasoning});if(K[_]=O,F)K[F]={...O,id:F,name:F}}return K}J.push(`${new URL(X).pathname} (${j}): ${await dL(V)}`)}catch(V){let B=V instanceof Error?V.message:String(V);J.push(`${new URL(X).pathname} (${j}): ${B}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${J.join("; ")}`)}var aX={baseten:gL,hicap:vL,litellm:pL,poolside:mL},pX=new Map,GQ=new Map;function lL($,Z){return`${$}:${h4(Z.baseUrl)}`}async function iL($,Z,Q){let J=t.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],W=b4(Q.baseUrl,J?.provider.baseUrl,J?.provider.modelsSourceUrl);if(!W)return{};let X=Z?.cacheTtlMs??nX,j=lL($,Q),Y=Date.now(),V=pX.get(j);if(V&&V.expiresAt>Y)return V.data;let B=GQ.get(j);if(B)return B;let H=S4(W,$).then((K)=>{let G=Object.fromEntries(K.map((F)=>[F,x4(F,{name:F})]));return pX.set(j,{data:G,expiresAt:Y+X}),G}).finally(()=>{GQ.delete(j)});return GQ.set(j,H),H}async function rL($,Z){let Q=UQ(Z);if(!Q)return{};let J=aX[$];if(!J)return{};return J(Z,Q)}function nL($,Z,Q){if(!Q)return!1;if(!aX[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(UQ(Q))}async function aL($,Z,Q){let J=Z?.cacheTtlMs??nX,W=xL($,Q),X=Date.now(),j=FQ.get(W);if(j&&j.expiresAt>X)return j.data;let Y=y4.get(W);if(Y)return Y;let V=rL($,Q).then((B)=>{return FQ.set(W,{data:B,expiresAt:X+J}),B}).finally(()=>{y4.delete(W)});return y4.set(W,V),V}async function oL($){return t.fetchLiveProviderModels($,globalThis.fetch)}async function P2($={}){let Z=$.url??rX,Q=$.cacheTtlMs??SL,J=Date.now(),W=k4.get(Z);if(W&&W.expiresAt>J)return W.data;let X=k8.get(Z);if(X)return X;let j=oL(Z).then((Y)=>{return k4.set(Z,{data:Y,expiresAt:J+Q}),Y}).finally(()=>{k8.delete(Z)});return k8.set(Z,j),j}function sL($){if($){k4.delete($),k8.delete($);return}k4.clear(),k8.clear()}function tL(){FQ.clear(),y4.clear()}function eL($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:iX(Q.capabilities)}]))}var DQ=eL(PL());function oX($){let Z=wL($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:iX(Z.capabilities)}}async function _Q($,Z,Q){let J=oX($);if(!J)return;try{let W=Z?.loadLatestOnInit?await P2(Z):void 0,X=W?hL($,W):{},j=Q&&nL($,Z,Q)?await aL($,Z,Q):{},V=Boolean(t.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:J.modelId,baseUrl:J.baseUrl}:Q,B=V?await iL($,Z,V).catch(()=>({})):{},H=await kL($,J.knownModels,X,j,B,Q?.knownModels);return{...J,knownModels:H}}catch(W){if(Z?.failOnError)throw W;if($==="litellm")return{...J,knownModels:{}};return J}}var LQ=k0.BUILT_IN_PROVIDER,ZA=k0.BUILT_IN_PROVIDER_IDS,QA=k0.isBuiltInProviderId,g4=k0.normalizeProviderId,AQ=E.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),sX=E.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),tX=E.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),eX=E.object({apiKey:E.string().optional(),accessToken:E.string().optional(),refreshToken:E.string().optional(),expiresAt:E.number().int().positive().optional(),accountId:E.string().optional(),organizationId:E.string().optional(),organizationName:E.string().optional(),memberId:E.string().optional(),metadata:E.record(E.string(),E.unknown()).optional()}),$j=E.object({enabled:E.boolean().optional(),effort:$A.optional(),budgetTokens:E.number().int().positive().optional()}),Zj=E.object({accessKey:E.string().optional(),secretKey:E.string().optional(),sessionToken:E.string().optional(),region:E.string().optional(),profile:E.string().optional(),authentication:E.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:E.boolean().optional(),useCrossRegionInference:E.boolean().optional(),useGlobalInference:E.boolean().optional(),endpoint:E.string().url().optional(),customModelBaseId:E.string().optional()}),Qj=E.object({projectId:E.string().optional(),region:E.string().optional()}),Jj=E.object({apiVersion:E.string().optional(),useIdentity:E.boolean().optional()}),Wj=E.object({clientId:E.string().optional(),clientSecret:E.string().optional(),tokenUrl:E.string().url().optional(),resourceGroup:E.string().optional(),deploymentId:E.string().optional(),useOrchestrationMode:E.boolean().optional(),api:E.enum(["orchestration","foundation-models"]).optional(),defaultSettings:E.record(E.string(),E.unknown()).optional()}),Xj=E.object({mode:E.enum(["internal","external"]).optional(),usePromptCache:E.boolean().optional()}),jj=E.object({loadLatestOnInit:E.boolean().optional(),loadPrivateOnAuth:E.boolean().optional(),url:E.string().url().optional(),cacheTtlMs:E.number().int().positive().optional(),failOnError:E.boolean().optional()}),S2=E.object({provider:AQ,apiKey:E.string().optional(),auth:eX.optional(),model:E.string().optional(),protocol:sX.optional(),client:tX.optional(),routingProviderId:AQ.optional(),maxTokens:E.number().int().positive().optional(),contextWindow:E.number().int().positive().optional(),baseUrl:E.string().url().optional(),headers:E.record(E.string(),E.string()).optional(),timeout:E.number().int().positive().optional(),reasoning:$j.optional(),aws:Zj.optional(),gcp:Qj.optional(),azure:Jj.optional(),sap:Wj.optional(),oca:Xj.optional(),region:E.string().optional(),apiLine:E.enum(["china","international"]).optional(),capabilities:E.array(E.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:jj.optional()});function Yj($){return S2.parse($)}function Vj($){return S2.safeParse($)}function JA($){return $.protocol==="openai-responses"||$.client==="openai"}function N1($,Z={}){let Q=$.provider,J=g4(Q),W=Z.includeKnownModels!==!1,X=$.reasoning?.effort||"none",j=X==="none"?void 0:X,Y=DQ[J],V=Object.assign({},...k0.resolveProviderModelCatalogKeys(J).map((_)=>k0.getGeneratedModelsForProvider(_))),B=Object.keys(V)[0],H=P4(J,$),K=$.baseUrl??k0.resolveProviderApiLineBaseUrl(J,$.apiLine)??(J==="oca"?$.oca?.mode==="internal"?WQ:XQ:Y?.baseUrl),G=$.routingProviderId??(JA($)&&J!==LQ.OPENAI_NATIVE?LQ.OPENAI_NATIVE:void 0),F=W?Y?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,U={providerId:Q,clientType:$.client,routingProviderId:G,modelId:$.model??Y?.modelId??B??"default",...W?{knownModels:F}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:K,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:j,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??Y?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(U).filter(([_,L])=>L!==void 0))}function WA($){let Z=Yj($);return N1(Z)}function XA($){let Z=Vj($);if(Z.success)return{success:!0,config:N1(Z.data)};return{success:!1,error:Z.error}}import{SESSION_STATUS_VALUES as jA}from"@cline/shared";var OQ=jA,YA=["idle","running","pending"];function VA($){return!YA.includes($)}function F0($){return!VA($)}var T0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};function Bj($){if($===!0)return{};if(!$)return;return $}function Hj($){if($==="user")return"global";return $}class qQ{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let Z=this.getService().ingestEvent($);return{event:Z.event,duplicate:Z.duplicate,matchedSpecIds:Z.matchedSpecs.map((Q)=>Q.specId),queuedRuns:Z.queuedRuns,suppressions:Z.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function Kj($){let{host:Z}=$;return{async startSession(Q){let J=(Q.cwd?.trim()||Q.workspaceRoot).trim(),W=await Z.startSession({source:Q.source?.trim()||T0.CLI,interactive:!1,config:{providerId:g4(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:J,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:KA(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,J){let W=await Z.runTurn({sessionId:Q,prompt:J.prompt,userImages:J.attachments?.userImages,userFiles:J.attachments?.userFiles?.map((X)=>X.content),delivery:J.delivery});if(!W)throw Error("ClineCore automation runtime returned no result");return{result:HA(W)}},async abortSession(Q){return await Z.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}function v4($){let Z=BA($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),J=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),W=$.context?.logger??$.logger,X=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!J&&!W&&!X)return $.context;return{...$.context??{},...Q?{client:Q}:{},...J?{user:J}:{},...W?{logger:W}:{},...X?{telemetry:X}:{},...Z?{automation:Z}:{}}}function BA($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function HA($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function KA($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}import{existsSync as D6,readFileSync as mf}from"node:fs";import{basename as p7,dirname as SB,extname as cf,isAbsolute as kB,join as uf,relative as hB,resolve as bB}from"node:path";import{createHash as GA}from"node:crypto";import{watch as FA}from"node:fs";import{readdir as UA,readFile as DA}from"node:fs/promises";import{join as _A}from"node:path";function LA($){return GA("sha1").update($).digest("hex")}function Uj($){return Boolean($&&typeof $==="object"&&"code"in $)}function Gj($){return Uj($)&&$.code==="ENOENT"}function Fj($){return Uj($)&&($.code==="EACCES"||$.code==="EPERM")}class h8{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,Z){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=Z?.debounceMs??75,this.emitParseErrors=Z?.emitParseErrors??!1;for(let Q of $){if(this.definitionsByType.has(Q.type))throw Error(`Duplicate unified config definition type '${Q.type}'.`);this.definitionsByType.set(Q.type,Q),this.recordsByType.set(Q.type,new Map),this.discoveredDirectoriesByType.set(Q.type,new Set);for(let J of Q.directories){let W=this.baseTypesByDirectory.get(J);if(W)W.add(Q.type);else this.baseTypesByDirectory.set(J,new Set([Q.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let Z=this.definitionsByType.get($);if(!Z)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(Z)})}getSnapshot($){let Z=this.recordsByType.get($);return new Map([...Z?.entries()??[]].map(([Q,J])=>[Q,{...J}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([J,W])=>[J,{...W}])));return $}emit($){for(let Z of this.listeners)Z($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[Z,Q]of this.watchersByDirectory.entries()){if($.has(Z))continue;Q.close(),this.watchersByDirectory.delete(Z)}this.watchedTypesByDirectory=$;for(let Z of $.keys()){if(this.watchersByDirectory.has(Z))continue;try{let Q=FA(Z,()=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let W of J)this.pendingTypes.add(W);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(J)=>{let W=this.watchedTypesByDirectory.get(Z);if(!W)return;for(let X of W)this.emit({kind:"error",type:X,error:J,filePath:Z})})}catch(Q){if(!Gj(Q)&&!Fj(Q)){let J=$.get(Z);if(!J)continue;for(let W of J)this.emit({kind:"error",type:W,error:Q,filePath:Z})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let Z of $){let Q=this.definitionsByType.get(Z);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:Z,discoveredDirectories:Q}=await this.loadDefinition($),J=this.recordsByType.get($.type)??new Map;for(let[W,X]of J.entries()){if(Z.has(W))continue;this.emit({kind:"remove",type:$.type,id:W,filePath:X.filePath})}for(let[W,X]of Z.entries()){let j=J.get(W);if(j&&j.filePath===X.filePath&&j.fingerprint===X.fingerprint)continue;this.emit({kind:"upsert",record:{type:X.type,id:W,item:X.item,filePath:X.filePath}})}if(this.recordsByType.set($.type,Z),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let Z=new Map,Q=new Set;for(let J of $.directories){Q.add(J);let W=$.discoverFiles?await $.discoverFiles(J):await this.readDirectoryFileCandidates(J);for(let X of W){let{fileName:j,filePath:Y}=X;if(Q.add(X.directoryPath),$.includeFile&&!$.includeFile(j,Y))continue;try{let V=await DA(Y,"utf8"),B={type:$.type,directoryPath:X.directoryPath,fileName:j,filePath:Y,content:V},H=$.parseFile(B),K=$.resolveId(H,B).trim();if(!K)continue;Z.set(K,{type:$.type,id:K,item:H,filePath:Y,fingerprint:LA(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:Y})}}}return{records:Z,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[Z,Q]of this.baseTypesByDirectory.entries())$.set(Z,new Set(Q));for(let[Z,Q]of this.discoveredDirectoriesByType.entries())for(let J of Q){let W=$.get(J);if(W)W.add(Z);else $.set(J,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await UA($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:_A($,Q.name)})).sort((Q,J)=>Q.fileName.localeCompare(J.fileName))}catch(Z){if(Gj(Z)||Fj(Z))return[];throw Z}}}import{readdir as pQ,readFile as lO,stat as dQ}from"node:fs/promises";import{basename as R1,dirname as iO,extname as e4,join as c0,resolve as m8}from"node:path";import{stripUtf8Bom as rO}from"@cline/shared";import{AGENTS_RULES_FILE_NAME as lj,RULES_CONFIG_DIRECTORY_NAME as ij,resolveGlobalAgentsRulesPath as nO,resolveRulesConfigSearchPaths as aO,resolveSkillsConfigSearchPaths as oO,resolveWorkflowsConfigSearchPaths as sO,SKILLS_CONFIG_DIRECTORY_NAME as lQ,WORKFLOWS_CONFIG_DIRECTORY_NAME as iQ}from"@cline/shared/storage";import tO from"yaml";J1();import{existsSync as a4,readFileSync as bO,statSync as yO}from"node:fs";import{basename as kO,dirname as r4,join as o4,resolve as n4}from"node:path";import{discoverPluginModulePaths as hO,resolveConfiguredPluginModulePaths as mj,resolvePluginConfigSearchPaths as IO,SKILLS_CONFIG_DIRECTORY_NAME as xO}from"@cline/shared/storage";import{resolve as VO}from"node:path";import{normalizePluginManifest as BO}from"@cline/shared";import{existsSync as f0,readFileSync as y2}from"node:fs";import{builtinModules as dA,createRequire as CQ}from"node:module";import{dirname as $$,extname as x8,isAbsolute as pA,resolve as r}from"node:path";import{fileURLToPath as qj}from"node:url";import{PLUGIN_FILE_EXTENSIONS as lA}from"@cline/shared";var zj=$$(qj(import.meta.url)),iA=CQ(import.meta.url),rA=r(zj,"..","..","..","..",".."),RQ=oA(rA),nA=["@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"],wQ=new Set(dA.flatMap(($)=>[$,$.replace(/^node:/,"")])),I8=new Set(lA),aA=["development","node","import","require","default"];function oA($){let Z={},Q={"@cline/sdk":r($,"packages/sdk/src/index.ts"),"@cline/agents":r($,"packages/agents/src/index.ts"),"@cline/core":r($,"packages/core/src/index.ts"),"@cline/llms":r($,"packages/llms/src/index.ts"),"@cline/shared":r($,"packages/shared/src/index.ts"),"@cline/shared/storage":r($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":r($,"packages/shared/src/db/index.ts")};for(let[J,W]of Object.entries(Q))if(f0(W))Z[J]=W;for(let J of["agents","core","llms","shared"]){let W=r($,"packages",J),X=r(W,"package.json");if(!f0(X))continue;try{let j=JSON.parse(y2(X,"utf8"));if(typeof j.name!=="string"||!j.exports)continue;if(typeof j.exports==="string"){let Y=r(W,j.exports);if(f0(Y))Z[j.name]=Y;continue}if(typeof j.exports!=="object")continue;for(let[Y,V]of Object.entries(j.exports)){let B=sA(W,V);if(!B)continue;let H=Y==="."?j.name:`${j.name}/${Y.replace(/^\.\//,"")}`;Z[H]=B}}catch{}}return Z}function sA($,Z){let Q=PQ(Z);if(!Q)return null;let J=Tj($,Q);for(let W of J)if(f0(W))return W;return null}function PQ($,Z=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(Z.has($))return null;Z.add($);let Q=$;for(let J of aA){let W=PQ(Q[J],Z);if(W)return W}return null}function Tj($,Z){let Q=Z.replace(/^\.\//,""),J=[r($,Z)];if(Q.startsWith("dist/")){let W=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[r($,`${W}.ts`),r($,`${W}.tsx`),r($,`${W}.mts`),r($,`${W}.cts`),...J]}return J}function tA($){return Object.fromEntries(Object.entries($).sort(([Z],[Q])=>Q.length-Z.length))}function p4($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function b2($){if($.startsWith("@")){let[Z,Q]=$.split("/",3);return Q?`${Z}/${Q}`:$}return $.split("/",1)[0]??$}function eA($){let Z=b2($);if($===Z)return".";return`.${$.slice(Z.length)}`}function Nj($){return b2($).startsWith("@cline/")}function MQ($,Z){let Q=b2(Z),J=$$($);while(!0){let W=r(J,"node_modules",Q);if(f0(W)||f0(r(W,"package.json")))return!0;let X=r(J,"..");if(X===J)return!1;J=X}}function Oj($){return EQ($)!==null}function EQ($){try{return iA.resolve($)}catch{}return $O($)}function $O($){let Z=b2($),Q=fj(Z);if(!Q)return null;let J=r(Q,"package.json");try{let W=JSON.parse(y2(J,"utf8")),X=eA($),j=X==="."&&typeof W.exports==="string"?W.exports:W.exports&&typeof W.exports==="object"&&Object.hasOwn(W.exports,X)?W.exports[X]:void 0,Y=PQ(j)??(X==="."&&typeof W.main==="string"?W.main:null);if(!Y)return null;let V=r(Q,Y),B=[V,...Tj(Q,Y).filter((H)=>H!==V)];for(let H of B)if(f0(H))return H;return null}catch{return null}}function ZO(){let $=[zj],Z=process.env.CLINE_WRAPPER_PATH?.trim();if(Z)$.push($$($$(Z)));let Q=process.execPath?.trim();if(Q)$.push($$(Q));return[...new Set($.map((J)=>r(J)))]}function QO($,Z){let Q=$;while(!0){let J=r(Q,"package.json");if(f0(J))try{if(JSON.parse(y2(J,"utf8")).name===Z)return Q}catch{}let W=r(Q,"node_modules",Z,"package.json");if(f0(W))return $$(W);let X=r(Q,"..");if(X===Q)return null;Q=X}}function fj($){for(let Z of ZO()){let Q=QO(Z,$);if(Q)return Q}return null}function JO($){let Q=$$($);for(let J=0;J<4;J++){let W=r(Q,"package.json");if(f0(W))try{let j=JSON.parse(y2(W,"utf8"));return j!=null&&typeof j==="object"&&"cline"in j}catch{return!1}let X=r(Q,"..");if(X===Q)return!1;Q=X}return!1}function Rj($,Z){let Q=Z.startsWith("file:")?qj(Z):pA(Z)?Z:r($$($),Z);if(f0(Q)&&I8.has(x8(Q)))return Q;for(let J of I8){let W=`${Q}${J}`;if(f0(W))return W}for(let J of I8){let W=r(Q,`index${J}`);if(f0(W))return W}return null}function Mj($){let Z=new Set,Q=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let J of Q)for(let W of $.matchAll(J)){let X=W[1];if(X)Z.add(X)}return[...Z]}function WO($){return x8($)!==".ts"}function Ej($,Z,Q=new Set){if(Q.has($)||!f0($))return;if(Q.add($),!I8.has(x8($)))return;let J=y2($,"utf8"),W=WO($);for(let X of Mj(J)){if(X.startsWith("node:")||wQ.has(X))continue;if(p4(X)){if(!W)continue;if(Object.hasOwn(RQ,X)||Object.hasOwn(RQ,b2(X))||MQ($,X)||Nj(X)&&Oj(X)||Z&&Oj(X))continue;throw Error(`Cannot find module '${b2(X)}'`)}let j=Rj($,X);if(j)Ej(j,Z,Q)}}function Cj($,Z=new Set,Q=new Set){if(Z.has($)||!f0($))return Q;if(Z.add($),!I8.has(x8($)))return Q;let J=y2($,"utf8");for(let W of Mj(J)){if(Q.add(W),p4(W))continue;let X=Rj($,W);if(X)Cj(X,Z,Q)}return Q}function XO($,Z){let Q=CQ($),J={},W=Cj($),X=new Set(nA);for(let[j,Y]of Object.entries(RQ)){try{Q.resolve(j);continue}catch{}J[j]=Y}for(let j of W)if(p4(j)&&(Nj(j)||Z))X.add(j);for(let j of X){if(Object.hasOwn(J,j)||MQ($,j))continue;let Y=EQ(j);if(Y)J[j]=Y}if(!Z)return J;for(let j of W){if(!p4(j)||Object.hasOwn(J,j)||MQ($,j)||j.startsWith("node:")||wQ.has(j))continue;let Y=EQ(j);if(Y)J[j]=Y}return J}function jO($){let Z=x8($);return Z===".ts"||Z===".tsx"||Z===".mts"||Z===".cts"}var x$;function YO(){if(x$!==void 0)return x$;let $=fj("jiti");if(!$)return x$=null,null;let Z=r($,"dist","babel.cjs");if(!f0(Z))return x$=null,null;try{let J=CQ(Z)(Z);x$=typeof J==="function"?J:null}catch{x$=null}return x$}async function wj($,Z={}){let Q=!JO($);Ej($,Q);let J=XO($,Q),W=tA(J),X=await import("jiti"),j=typeof X==="function"?X:typeof X.default==="function"?X.default:void 0;if(!j)throw Error("Unable to load jiti");let Y=Object.entries(W).filter(([,K])=>jO(K)).map(([K])=>K),V=YO(),B=V?(K)=>V({...K,interopDefault:!0}):void 0;return await j($,{alias:W,cache:Z.useCache,requireCache:Z.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...wQ],transformModules:Y,tryNative:!1,...B?{transform:B}:{}}).import($,{})}function Pj($,Z){if(!$)return!0;if($.providerIds?.length){if(!Z?.providerId||!$.providerIds.includes(Z.providerId))return!1}if($.modelIds?.length){if(!Z?.modelId||!$.modelIds.includes(Z.modelId))return!1}return!0}function Sj($){return typeof $==="object"&&$!==null}function SQ($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function HO($,Z){if(!Sj($.manifest))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);if(!SQ($.manifest.capabilities))throw Error(`Invalid plugin module at ${Z}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${Z}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!SQ($.manifest.providerIds))throw Error(`Invalid plugin module at ${Z}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!SQ($.manifest.modelIds))throw Error(`Invalid plugin module at ${Z}: manifest.modelIds must be a string array when provided`)}function KO($,Z){if(!Sj($))throw Error(`Invalid plugin module at ${Z}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${Z}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);HO($,Z)}async function bQ($,Z={}){let Q=VO(Z.cwd??process.cwd(),$),J=await wj(Q,{useCache:Z.useCache}),W=Z.exportName??"plugin",X=J.default??J[W];KO(X,Q);let j=X,Y=j.setup,V=Y?(B,H)=>{let K={...Z.session,...H.session},G={...H,session:Object.keys(K).length>0?K:void 0,client:Z.client??H.client,user:Z.user??H.user,workspaceInfo:Z.workspaceInfo??H.workspaceInfo,automation:Z.automation??H.automation,logger:Z.logger??H.logger,telemetry:Z.telemetry??H.telemetry};return Y(B,G)}:void 0;return{...j,manifest:BO(j.manifest),setup:V}}async function bj($,Z={}){return(await g8($,Z)).plugins}async function g8($,Z={}){let Q=[],J=[],W=new Map,X=0;for(let Y of $)try{let V=await bQ(Y,Z);if(!Pj(V.manifest,Z))continue;let B=W.get(V.name);if(B)J.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:Y,overriddenPluginPath:B.pluginPath,message:`Plugin "${V.name}" from ${Y} overrides ${B.pluginPath}`});W.set(V.name,{plugin:V,pluginPath:Y,order:X++})}catch(V){let B=V instanceof Error?V.message:String(V);Q.push({pluginPath:Y,phase:"load",message:B,stack:V instanceof Error?V.stack:void 0})}let j=[...W.values()].sort((Y,V)=>Y.order-V.order);return{plugins:j.map((Y)=>Y.plugin),pluginPaths:j.map((Y)=>Y.pluginPath),failures:Q,warnings:J}}import{existsSync as xQ}from"node:fs";import{createRequire as xj}from"node:module";import{dirname as i4,join as k2}from"node:path";import{fileURLToPath as AO}from"node:url";import{spawn as GO}from"node:child_process";import{basename as FO}from"node:path";import{augmentNodeCommandForDebug as UO,withResolvedClineBuildEnv as DO}from"@cline/shared";function yQ($){if($ instanceof Error)return $;return Error(String($))}var _O="CLINE_JS_RUNTIME_PATH";function yj($){let Z=$?.trim();if(!Z)return!1;let Q=FO(Z).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function kj($={}){let Z=$.env??process.env,Q=$.runtimeExecutable?.trim()||Z[_O]?.trim();if(Q)return Q;let J=$.execPath?.trim()||process.execPath;if(yj(J))return J;for(let W of[Z.BUN_EXEC_PATH,Z.npm_node_execpath,Z.NODE]){let X=W?.trim();if(X&&yj(X))return X}return"node"}function LO($,Z={}){let Q=kj({env:Z.env,execPath:Z.execPath,runtimeExecutable:Z.runtimeExecutable});return UO([Q,...$],{env:Z.env,execArgv:Z.execArgv,debugRole:Z.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class l4{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let Z=this.pending.get($);if(!Z)return;if(this.pending.delete($),Z.timeout)clearTimeout(Z.timeout);return Z}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],Z=LO($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=GO(Z[0]??kj(this.options),Z.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:DO(process.env),windowsHide:!0});this.process=Q;let J="",W=(X)=>{let j=J+X;J=j.length>4000?j.slice(-4000):j};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(X)=>{W(X)}),Q.on("message",(X)=>{this.onMessage(X)}),Q.on("error",(X)=>{this.failPending(Error(`${this.processLabel} process error: ${yQ(X).message}`))}),Q.on("exit",(X,j)=>{this.process=null;let Y=J.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(X)}, signal=${String(j)})${Y?`: ${Y}`:""}`))})}async call($,Z,Q={}){this.start();let J=this.process;if(!J||J.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let W=`req_${++this.requestCounter}`,X={type:"call",id:W,method:$,args:Z};return await new Promise((j,Y)=>{let V={resolve:(B)=>j(B),reject:Y};if((Q.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(W),this.shutdown().catch(()=>{}),Y(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(W,V);try{J.send(X,(B)=>{if(!B)return;let H=this.clearPendingRequest(W);if(!H)return;H.reject(Error(`${this.processLabel} failed to send call "${$}": ${yQ(B).message}`))})}catch(B){this.clearPendingRequest(W),Y(yQ(B))}})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((Z)=>{let Q=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}Z()},300);$.once("exit",()=>{clearTimeout(Q),Z()});try{$.kill("SIGTERM")}catch{clearTimeout(Q),Z()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let Z=this.clearPendingRequest($.id);if(!Z)return;if($.ok){Z.resolve($.result);return}Z.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[Z,Q]of this.pending.entries()){if(this.pending.delete(Z),Q.timeout)clearTimeout(Q.timeout);Q.reject($)}}}function OO($){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 v8($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function qO(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function zO(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=xj($).resolve(`${qO()}/package.json`),J=k2(i4(Q),"extensions","plugin-sandbox-bootstrap.js");return xQ(J)?J:void 0}catch{return}}function TO(){let $=process.execPath?.trim();if(!$)return;let Z=k2(i4(i4($)),"extensions","plugin-sandbox-bootstrap.js");return xQ(Z)?Z:void 0}function NO(){let $=i4(AO(import.meta.url)),Z=xj(import.meta.url),Q=[k2($,"plugin-sandbox-bootstrap.js"),k2($,"extensions","plugin-sandbox-bootstrap.js"),k2($,"agents","plugin-sandbox-bootstrap.js"),zO(),TO()];for(let X of Q.filter((j)=>typeof j==="string"))if(xQ(X))return{file:X};let J=k2($,"plugin-sandbox-bootstrap.ts"),W="jiti";try{W=Z.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(W)});`,`const jiti = createJiti(${JSON.stringify(J)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(J)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
|
|
46
|
+
`)}}var kQ=NO();function hQ($,Z,Q){if(typeof $==="number"&&$>0)return $;if(Q){let J=process.env[Q];if(J){let W=Number(J);if(Number.isInteger(W)&&W>0)return W}}return Z}async function h2($){let Z=new l4({name:"plugin-sandbox",..."file"in kQ?{bootstrapFile:kQ.file}:{bootstrapScript:kQ.script},onEvent:$.onEvent}),Q=hQ($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),J=hQ($.hookTimeoutMs,3000),W=hQ($.contributionTimeoutMs,60000),X={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger),telemetryEnabled:$.telemetryAvailable===!0},j,Y=()=>{return j??=Z.call("initialize",X,{timeoutMs:Q}).finally(()=>{j=void 0}),j},V;try{V=await Z.call("initialize",X,{timeoutMs:Q})}catch(K){throw await Z.shutdown().catch(()=>{}),K}let B=V.plugins.map(OO);return{extensions:B.map((K)=>{let G={name:K.name,__clinePluginPath:K.pluginPath,manifest:K.manifest,setup:(F)=>{RO(F,Z,K,W,Y),MO(F,Z,K,W,Y),EO(F,Z,K,W,Y),wO(F,Z,K,W,Y),CO(F,K)}};return G.hooks=SO(Z,K,J,Y),G}),failures:V.failures,pluginPaths:B.map((K)=>K.pluginPath),shutdown:async()=>{await Z.shutdown()},warnings:V.warnings}}function fO($){let Z=$ instanceof Error?$.message:String($);return/cyclic|circular|bigint/i.test(Z)}function IQ($,Z=new WeakSet){if($===null||typeof $!=="object")return typeof $==="function"||typeof $==="symbol"||typeof $==="bigint"?void 0:$;if(Z.has($))return;let Q=$;if(typeof Q.toJSON==="function")try{return Q.toJSON()}catch{return}Z.add($);try{if(Array.isArray($))return $.map((W)=>IQ(W,Z)??null);let J={};for(let[W,X]of Object.entries($)){let j=IQ(X,Z);if(j!==void 0)J[W]=j}return J}finally{Z.delete($)}}var hj=new Set;function gj($,Z,Q){let J=`${$}:${Z}`;if(hj.has(J))return;hj.add(J);let W=Q instanceof Error?Q.message:String(Q);console.warn(`[plugin-sandbox] ${$} "${Z}" received a payload that is not JSON-serializable (${W}); retrying with non-serializable values dropped. Host-only objects must not be placed on tool contexts or hook payloads.`)}async function vj($,Z,Q){try{return await $(Z)}catch(J){if(!fO(J))throw J;return Q(J),await $(IQ(Z))}}function RO($,Z,Q,J,W){for(let X of Q.contributions?.tools??[]){let j={name:X.name,description:X.description??"",inputSchema:X.inputSchema??{type:"object",properties:{}},timeoutMs:X.timeoutMs,retryable:X.retryable,execute:async(Y,V)=>{return await vj(async(H)=>{let{input:K,context:G}=H;try{return await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:K,context:G},{timeoutMs:J})}catch(F){if(!v8(F))throw F;return await W(),await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:K,context:G},{timeoutMs:J})}},{input:Y,context:V},(H)=>gj("tool",X.name,H))}};$.registerTool(j)}}function MO($,Z,Q,J,W){for(let X of Q.contributions?.commands??[])$.registerCommand({name:X.name,description:X.description,handler:async(j)=>{try{return await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:j},{timeoutMs:J})}catch(Y){if(!v8(Y))throw Y;return await W(),await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:j},{timeoutMs:J})}}})}function EO($,Z,Q,J,W){for(let X of Q.contributions?.rules??[])$.registerRule({id:X.ruleId,source:X.source,content:X.hasContentHandler===!0?async()=>{try{return await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:J})}catch(j){if(!v8(j))throw j;return await W(),await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:J})}}:X.content??""})}function CO($,Z){for(let Q of Z.contributions?.providers??[])$.registerProvider({name:Q.name,description:Q.description,metadata:Q.metadata});for(let Q of Z.contributions?.automationEventTypes??[])$.registerAutomationEventType({eventType:Q.eventType,source:Q.source,description:Q.description,attributesSchema:Q.attributesSchema,payloadSchema:Q.payloadSchema,examples:Q.examples,metadata:Q.metadata});for(let Q of Z.contributions?.mcpServers??[])$.registerMcpServer(Q)}function wO($,Z,Q,J,W){for(let X of Q.contributions?.messageBuilders??[])$.registerMessageBuilder({name:X.name,async build(j){try{let Y=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:j},{timeoutMs:J});return Ij(Y)?Y:j}catch(Y){if(!v8(Y))throw Y;await W();let V=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:j},{timeoutMs:J});return Ij(V)?V:j}}})}function Ij($){return Array.isArray($)&&$.every((Z)=>typeof Z==="object"&&Z!==null&&("role"in Z)&&("content"in Z))}function PO($,Z,Q,J,W){return async(X)=>{return await vj(async(Y)=>{try{return await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:Y},{timeoutMs:J})}catch(V){if(!v8(V))throw V;return await W(),await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:Y},{timeoutMs:J})}},X,(Y)=>gj("hook",Q,Y))}}function SO($,Z,Q,J){let W={};for(let X of Z.hooks??[])W[X]=PO($,Z.pluginId,X,Q,J);return Object.keys(W).length>0?W:void 0}var vQ="package.json",gO="package";function mQ($){return IO($)}function cQ($){return hO($)}function vO($){try{return a4($)&&yO($).isDirectory()}catch{return!1}}function uQ($){let Z=[],Q=new Set;for(let J of $){let W=n4(J);if(Q.has(W))continue;Q.add(W),Z.push(W)}return Z}function cj($){let Z=uQ($);return NQ(Z)}function uj($){return mQ($).flatMap((Z)=>cQ(Z)).filter((Z)=>a4(Z))}function mO($,Z){let Q=[];for(let J of $)try{Q.push(...mj([J],Z))}catch{}return Q}function gQ($){return typeof $==="object"&&$!==null}function cO($){try{let Z=JSON.parse(bO(o4($,vQ),"utf8"));if(!gQ(Z)||!gQ(Z.cline))return[];let Q=Z.cline.plugins;if(!Array.isArray(Q))return[];let J=[];for(let W of Q){if(typeof W==="string"){J.push(W);continue}if(!gQ(W)||!Array.isArray(W.paths))continue;for(let X of W.paths)if(typeof X==="string")J.push(X)}return J}catch{return[]}}function dj($,Z){let Q=n4(Z);return cO($).some((J)=>n4($,J)===Q)}function uO($,Z){return kO($)===gO&&a4(o4(r4($),vQ))&&dj(r4($),Z)}function dO($){let Z=n4($),Q=[],J=r4(Z);while(!0){if(uO(J,Z)){Q.push(J);break}if(a4(o4(J,vQ))){if(dj(J,Z))Q.push(J);break}let W=r4(J);if(W===J)break;J=W}return uQ(Q)}function g$($={}){let Z=$.cwd??process.cwd(),Q=uj($.workspacePath),J=mj($.pluginPaths??[],Z);return cj([...J,...Q])}function pO($={}){let Z=$.cwd??process.cwd(),Q=uj($.workspacePath),J=mO($.pluginPaths??[],Z);return cj([...J,...Q])}function v$($){let Z=[];for(let Q of $)for(let J of dO(Q)){let W=o4(J,xO);if(vO(W))Z.push(W)}return uQ(Z)}function pj($={}){return v$(pO($))}async function s4($={}){let Z=g$($);if(Z.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let J=await g8(Z,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:J.plugins,failures:J.failures,pluginPaths:J.pluginPaths,warnings:J.warnings}}let Q=await h2({pluginPaths:Z,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,telemetryAvailable:Boolean($.telemetry),providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:Q.extensions??[],shutdown:Q.shutdown,failures:Q.failures,pluginPaths:Q.pluginPaths,warnings:Q.warnings}}var t4="SKILL.md",eO="managed.json",$q=new Set([".md",".markdown",".txt"]);function rQ($){return $.trim().toLowerCase()}function I2($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="ENOTDIR"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function $5($){return $q.has(e4($).toLowerCase())}function rj($){let Z=[],Q=new Set;for(let J of $){let W=m8(J);if(Q.has(W))continue;Q.add(W),Z.push(J)}return Z}function Zq($){let Z=[...$?.directories??eQ($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...pj({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return rj(Z)}async function nQ($){try{let Z=await pQ($,{withFileTypes:!0}),Q=[];for(let J of Z){if(!J.isDirectory())continue;let W=c0($,J.name),X=c0(W,eO);try{let j=await lO(X,"utf8"),Y=JSON.parse(j);if(Y&&typeof Y==="object")Q.push(W)}catch(j){if(I2(j))continue;if(j?.name==="SyntaxError")continue;throw j}}return Q.sort((J,W)=>J.localeCompare(W))}catch(Z){if(I2(Z))return[];throw Z}}function aQ($){let Z=rO($),Q=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=Z.match(Q);if(!J)return{data:{},body:Z,hadFrontmatter:!1};let[,W,X]=J;try{let j=tO.parse(W);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:X,hadFrontmatter:!0}}catch(j){let Y=j instanceof Error?j.message:String(j);return{data:{},body:Z,hadFrontmatter:!0,parseError:Y}}}function Z5($,Z,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${Z}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${Z}' must be a string.`);let J=$.trim();if(!J&&Q)throw Error(`Frontmatter field '${Z}' cannot be empty.`);return J||void 0}function x2($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function Qq($,Z){if(R1($.filePath).toLowerCase()!==lj.toLowerCase())return R1($.filePath,e4($.filePath));if(Z&&m8($.filePath)===m8(Z,lj))return"Workspace AGENTS.md";if(m8($.filePath)===m8(nO()))return"Global AGENTS.md";return R1($.filePath,e4($.filePath))}function oQ($,Z){let{data:Q,body:J,parseError:W}=aQ($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let X=J.trim();if(!X)throw Error("Missing instructions body in skill file.");let Y=Z5(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing skill name.");return{name:Y,description:Z5(Q.description,"description",!1),disabled:x2(Q.disabled,"disabled")??(x2(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function sQ($,Z){let{data:Q,body:J,parseError:W}=aQ($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let X=J.trim();if(!X)throw Error("Missing instructions body in rule file.");let j=Z5(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing rule name.");return{name:j,disabled:x2(Q.disabled,"disabled")??(x2(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function tQ($,Z){let{data:Q,body:J,parseError:W}=aQ($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let X=J.trim();if(!X)throw Error("Missing instructions body in workflow file.");let j=Z5(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing workflow name.");return{name:j,disabled:x2(Q.disabled,"disabled")??(x2(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function eQ($){return oO($)}function $7($){return aO($)}function Z7($){return sO($)}async function nj($){if(R1($)===".cline"){let Z=await nQ($);return(await Promise.all(Z.map((J)=>nj(c0(J,lQ))))).flat()}try{let Z=await pQ($,{withFileTypes:!0}),Q=[];for(let J of Z){if(J.isFile()&&J.name===t4){Q.push({directoryPath:$,fileName:J.name,filePath:c0($,J.name)});continue}let W=c0($,J.name);if(J.isDirectory()||J.isSymbolicLink()&&await dQ(W).then((j)=>j.isDirectory()).catch((j)=>{if(I2(j))return!1;throw j}))Q.push({directoryPath:W,fileName:t4,filePath:c0(W,t4)})}return Q}catch(Z){if(I2(Z))return[];throw Z}}async function Q5($){if(R1($)===".cline"){let Z=await nQ($);return(await Promise.all(Z.map((J)=>Q5(c0(J,"rules.md"))))).flat()}try{if((await dQ($)).isFile())return[{directoryPath:iO($),fileName:R1($),filePath:$}]}catch(Z){if(!I2(Z))throw Z}try{let Q=(await pQ($,{withFileTypes:!0})).filter((W)=>W.isFile()&&$5(W.name)).map((W)=>({directoryPath:$,fileName:W.name,filePath:c0($,W.name)})),J=c0($,"AGENTS.md");try{if((await dQ(J)).isFile()){if(!Q.some((j)=>j.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:J})}}catch{}return Q}catch(Z){if(I2(Z))return[];throw Z}}async function Jq($){if(R1($)===".cline"){let Z=await nQ($);return(await Promise.all(Z.map((J)=>Q5(c0(J,iQ))))).flat()}return Q5($)}function Q7($){let Z=Zq($),Q=$?.workspacePath?c0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?rj([...Z,Q]):Z,discoverFiles:nj,includeFile:(J)=>J===t4,parseFile:(J)=>oQ(J.content,R1(J.directoryPath)),resolveId:(J)=>rQ(J.name)}}function J7($){let Z=$?.directories??$7($?.workspacePath),Q=$?.workspacePath?c0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:Q5,includeFile:(J,W)=>J===".clinerules"||$5(J)||$5(W),parseFile:(J)=>sQ(J.content,Qq(J,$?.workspacePath)),resolveId:(J)=>rQ(J.name)}}function W7($){let Z=$?.directories??Z7($?.workspacePath),Q=$?.workspacePath?c0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:Jq,includeFile:(J)=>$5(J),parseFile:(J)=>tQ(J.content,R1(J.filePath,e4(J.filePath))),resolveId:(J)=>rQ(J.name)}}function aj($){let Z=[Q7($?.skills),J7($?.rules),W7($?.workflows)];return new h8(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as oj}from"@cline/shared";function Wq($,Z){if($.description?.trim())return oj($.description,".");if(Z==="workflow")return;return oj($.instructions,".")}function Xq($){return $.disabled!==!0}function sj($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,J])=>({id:Q,record:J})).filter(({record:Q})=>Xq(Q.item)).map(({id:Q,record:J})=>({id:Q,name:J.item.name,instructions:J.item.instructions,description:Wq(J.item,Z),kind:Z})).sort((Q,J)=>Q.name.localeCompare(J.name))}function c8($){let Z=new Map;for(let Q of[...sj($,"workflow"),...sj($,"skill")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,J)=>Q.name.localeCompare(J.name))}function tj($,Z){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let J=Q[1];if(!J)return $;let W=J.length+1,X=$.slice(W),j=c8(Z).find((Y)=>Y.name===J);return j?`${j.instructions}${X}`:$}function ej($){return $.disabled!==!0}function J5($){if($.length===0)return"";return`
|
|
47
47
|
|
|
48
48
|
# Rules
|
|
49
49
|
${$.map((Q)=>`## ${Q.name}
|
|
@@ -51,17 +51,17 @@ ${Q.instructions}`).join(`
|
|
|
51
51
|
|
|
52
52
|
`)}`}function W5($,Z){let Q=$?.trim(),J=Z?.trim();if(Q&&J)return`${Q}
|
|
53
53
|
|
|
54
|
-
${J}`;return Q||J||void 0}function
|
|
54
|
+
${J}`;return Q||J||void 0}function jq($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(ej).sort((Q,J)=>Q.name.localeCompare(J.name))}function $Y($){return J5(jq($))}import{validateWithZod as Vp,zodToJsonSchema as Bp}from"@cline/shared";var N0={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"},g2=[N0.READ_FILES,N0.SEARCH_CODEBASE,N0.RUN_COMMANDS,N0.FETCH_WEB_CONTENT,N0.APPLY_PATCH,N0.EDITOR,N0.SKILLS,N0.ASK,N0.SUBMIT_AND_EXIT];q0();import{createTool as Q$,getDefaultShell as _q,getShellKind as Lq,validateWithZod as J$,zodToJsonSchema as E1}from"@cline/shared";import{spawn as UY}from"node:child_process";import{StringDecoder as Gq}from"node:string_decoder";import{getDefaultShell as Fq,getShellInvocation as Uq}from"@cline/shared";import{validateWithZod as Vq}from"@cline/shared";import{z as R}from"zod";var Z$=6000,m$=R.string().describe("The absolute path of a text file to read content from"),X5=R.object({start_line:R.coerce.number().int().positive().nullable().optional().describe("Optional one-based starting line number to read from; use null or omit for the start of the file"),end_line:R.coerce.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit to read to the end of the file or the read cap, whichever comes first")}).describe("Optional inclusive one-based file line range"),X7=R.object({path:m$,start_line:X5.shape.start_line,end_line:X5.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds. Always include path; start_line/end_line must be on the same object as the path they apply to, never in a separate array element"),Y5=R.object({files:R.array(X7).describe("Array of file read requests; each element is one file and must include path. Omit start_line/end_line or set them to null to read from the start; provide integers on the same object as the path to return only that inclusive one-based line range — never emit a range as its own array element. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),ZY={start_line:X5.shape.start_line,end_line:X5.shape.end_line},v2=R.union([X7,R.object({file_path:m$,...ZY}).transform(({file_path:$,...Z})=>({path:$,...Z})),R.object({filePath:m$,...ZY}).transform(({filePath:$,...Z})=>({path:$,...Z}))]),QY=R.union([Y5,v2,R.array(v2),R.array(R.string()),R.string(),R.object({files:R.array(R.union([m$,v2]))}),R.object({files:v2}),R.object({files:m$}),R.object({file_paths:R.array(m$)}),R.object({file_paths:R.string()}),R.object({paths:R.array(R.union([m$,v2]))}),R.object({paths:v2}),R.object({paths:R.string()})]),V5=R.object({queries:R.array(R.string()).describe("Array of regex search queries to execute")}),JY=R.union([V5,R.array(R.string()),R.string(),R.object({queries:R.string()})]),j5=R.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${Z$*2} characters) to avoid timeouts.`),u8=R.object({command:R.string().min(1).describe("The executable to run directly without shell parsing."),args:R.array(R.string()).optional().describe("Optional argv list passed directly to the executable.")}),WY=R.union([j5,u8]),B5=R.object({commands:R.array(j5).describe("Array of complete shell command strings to execute.")}),Yq=R.object({commands:R.array(WY)}),XY=R.union([B5,Yq,R.object({commands:WY}),R.array(u8),u8,R.object({command:j5}),R.object({cmd:j5}),R.array(R.string()),R.string()]),jY=R.object({url:R.string().describe("The URL to fetch"),prompt:R.string().min(2).describe("Analysis prompt for the fetched content")}),H5=R.object({requests:R.array(jY).describe("Array of the URLs for the web fetch requests")}),K5=R.object({path:R.string().min(1).describe("The absolute path for the action to be performed on"),old_text:R.string().nullable().optional().describe(`Exact text to replace (must match exactly once). Omit this when creating a missing file or inserting via insert_line. Keep this at or below ${Z$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:R.string().describe(`The new content to write when creating a missing file, the replacement text for edits, or the inserted text when insert_line is provided. Keep this at or below ${Z$} characters when possible; for large edits, use multiple calls with small chunks of old_text and new_text to iteratively edit the file.`),insert_line:R.coerce.number().int().nullable().optional().describe("Optional positive one-based boundary line. When provided, the tool inserts new_text before that line instead of performing a replacement edit; use line_count + 1 to append at EOF.")}).describe("Edit a text file by replacing old_text with new_text, create the file with new_text if it does not exist, or insert new_text at insert_line when insert_line is provided. Prefer using this tool for file edits over shell commands. IMPORTANT: large edits can time out, so use small chunks and multiple calls when possible."),G5=R.object({input:R.string().min(1).describe("The freeform apply_patch payload in the canonical patch grammar (e.g *** Begin Patch, *** Update File:, @@, and *** End Patch).")}).describe("Modify or create a text file by applying patches using the canonical apply_patch diff grammar. Prefer sending the patch body directly rather than wrapping it in shell syntax. IMPORTANT: large patches can time out, so use small chunks and multiple calls when possible."),YY=R.union([G5,R.string()]),F5=R.object({skill:R.string().min(1).describe("Name of the skill to execute."),args:R.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),U5=R.object({question:R.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:R.array(R.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),D5=R.object({summary:R.string().min(10).describe("Summarization of the investigation, steps taken, and resolution status to submit at the end of the session. Before submitting, read the problem again along with any provided test's assertions carefully and confirm your fix produces the expected output."),verified:R.boolean().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and taken all necessary steps to resolve the issue.
|
|
55
55
|
'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
|
|
56
|
-
IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function c$($){if($ instanceof Error)return $.message;return String($)}function
|
|
56
|
+
IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function c$($){if($ instanceof Error)return $.message;return String($)}function BY($){if(typeof $.old_text==="string"&&$.old_text.length>Z$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${Z$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>Z$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${Z$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class m2 extends Error{timeoutMs;constructor($,Z){super($);this.name="TimeoutError",this.timeoutMs=Z}}function M1($,Z,Q){return Promise.race([$,new Promise((J,W)=>{setTimeout(()=>W(new m2(Q,Z)),Z)})])}function _5($){let{path:Z,start_line:Q,end_line:J}=$;if(Q==null&&J==null)return Z;return`${Z}:${Q??1}-${J??"EOF"}`}function HY($){let{start_line:Z,end_line:Q}=$;if(Z==null||Q==null||Z<=Q)return null;return`start_line must be less than or equal to end_line (received start_line: ${Z}, end_line: ${Q})`}var Bq=new Set(["start_line","end_line"]);function Hq($){if($===null||typeof $!=="object"||Array.isArray($))return!1;let Z=Object.keys($);return Z.length>0&&Z.every((Q)=>Bq.has(Q))}function VY($){let Z=[];for(let Q of $){if(Hq(Q)){let J=Z[Z.length-1];if(typeof J==="string"){Z[Z.length-1]={path:J,...Q};continue}if(J!==null&&typeof J==="object"&&!Array.isArray(J)&&"path"in J&&Object.keys(Q).every((W)=>!(W in J))){Z[Z.length-1]={...J,...Q};continue}}Z.push(Q)}return Z}function KY($){if(Array.isArray($))return VY($);if($!==null&&typeof $==="object")for(let Z of["files","paths"]){let Q=$[Z];if(Array.isArray(Q))return{...$,[Z]:VY(Q)}}return $}function GY($){let Z=Vq(XY,$);if(typeof Z==="string")return[Z];if(Array.isArray(Z))return Z;if("commands"in Z)return Array.isArray(Z.commands)?Z.commands:[Z.commands];if("command"in Z)return"args"in Z?[Z]:[Z.command];if("cmd"in Z)return[Z.cmd];return[Z]}function Kq($){if(typeof $==="string")return $;let Z=$.args??[];if(Z.length===0)return $.command;let Q=Z.map((J)=>/[\s"]/u.test(J)?JSON.stringify(J):J);return`${$.command} ${Q.join(" ")}`}var j7=200;function FY($){let Z=Kq($);if(Z.length<=j7)return Z;let Q=Z.length-j7;return`${Z.slice(0,j7)} ... [command truncated: ${Q} more chars; full command is in the tool call input]`}var u$=48000;function d8($,Z={}){let Q=Z.maxChars??48000,J=Z.totalChars??$.length;if($.length<=Q&&J<=Q)return $;let W=Math.ceil(Q/2),X=Math.max(1,Q-W);return`${$.slice(0,W)}
|
|
57
57
|
[... output truncated: ${J} chars total. Refine the command (grep, head, tail) to view the elided middle ...]
|
|
58
|
-
`+$.slice(-X)}var
|
|
58
|
+
`+$.slice(-X)}var c2=2000,Y7=2000,L5=48000,u2=48000;class d$ extends Error{exitCode;output;constructor($,Z){super(`Command exited with code ${$}`);this.exitCode=$;this.output=Z;this.name="CommandExitError"}}function DY($){let Z=Math.ceil($/2),Q=Math.max(1,$-Z),J=new Gq("utf8"),W="",X="",j=0,Y=(V)=>{if(!V)return;j+=V.length;let B=Z-W.length;if(B>0){W+=V.slice(0,B),X=(X+V.slice(B)).slice(-Q);return}X=(X+V).slice(-Q)};return{append(V){Y(J.write(V))},snapshot(){return Y(J.end()),{text:W+X,totalChars:j,dropped:j>W.length+X.length}}}}function Dq($,Z,Q,J,W){if(Z.signal?.aborted)return Promise.reject(Error("Command was aborted"));return new Promise((X,j)=>{let Y=process.platform==="win32",V=UY($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!Y,windowsHide:!0}),B=V.pid,H=DY(J),K=DY(J),G=!1,F=!1,U=(T)=>{if(F)return;F=!0,T()},_=async()=>{if(!B)return;if(Y){await new Promise((T)=>{let z=!1,A,f=()=>{if(z)return;z=!0,clearTimeout(N),T()};try{A=UY("taskkill.exe",["/PID",String(B),"/T","/F"],{stdio:"ignore",shell:!1,windowsHide:!0})}catch{V.kill(),T();return}let N=setTimeout(()=>{A.kill(),V.kill(),f()},5000);A.once("error",()=>{V.kill(),f()}),A.once("close",(C)=>{if(C!==0)V.kill();f()})});return}try{process.kill(-B,"SIGKILL")}catch{V.kill("SIGKILL")}},L,O=()=>q(Error("Command was aborted")),D=()=>{clearTimeout(L),Z.signal?.removeEventListener("abort",O)},q=(T)=>{if(G||F)return;G=!0,D(),_().finally(()=>U(()=>j(T)))};if(L=setTimeout(()=>q(new m2(`Command timed out after ${Q}ms`,Q)),Q),Z.signal){if(Z.signal.addEventListener("abort",O,{once:!0}),Z.signal.aborted)O()}V.stdout?.on("data",(T)=>{H.append(T)}),V.stderr?.on("data",(T)=>{K.append(T)}),V.on("close",(T)=>{if(D(),G)return;let z=H.snapshot(),A=K.snapshot();if(T!==0){let f=T??1,N=W?z.text+(A.text?`
|
|
59
59
|
[stderr]
|
|
60
|
-
${A.text}`:""):z.text,C=z.dropped||W&&A.dropped,P=W?z.totalChars+A.totalChars:z.totalChars;if(C||N.length>J)N=
|
|
60
|
+
${A.text}`:""):z.text,C=z.dropped||W&&A.dropped,P=W?z.totalChars+A.totalChars:z.totalChars;if(C||N.length>J)N=d8(N,{maxChars:J,totalChars:P});let n=N.length>0?`[Command exited with code ${f}]
|
|
61
61
|
${N}`:`[Command exited with code ${f}]`;U(()=>j(new d$(f,n)))}else{let f=W?z.text+(A.text?`
|
|
62
62
|
[stderr]
|
|
63
|
-
${A.text}`:""):z.text;if(z.dropped||W&&A.dropped||f.length>J){let C=W?z.totalChars+A.totalChars:z.totalChars;f=
|
|
64
|
-
`))}return Z}function
|
|
63
|
+
${A.text}`:""):z.text;if(z.dropped||W&&A.dropped||f.length>J){let C=W?z.totalChars+A.totalChars:z.totalChars;f=d8(f,{maxChars:J,totalChars:C})}U(()=>X(f))}}),V.on("error",(T)=>{if(D(),G)return;U(()=>j(Error(`Failed to execute command: ${T.message}`)))}),V.stdin?.on("error",(T)=>{if(G||F)return;q(Error(`Failed to write command input: ${T.message}`))}),V.stdin?.end($.input,"utf8")})}function p8($={}){let{shell:Z=Fq(process.platform),timeoutMs:Q=30000,env:J={},combineOutput:W=!0}=$,X=$.maxOutputChars??$.maxOutputBytes??u$;return(j,Y,V)=>{let B=typeof j!=="string",H=B?{args:j.args??[]}:Uq(Z,j);return Dq({executable:B?j.command:Z,args:H.args,cwd:Y,env:J,input:H.input},V,Q,X,W)}}function _Y($,Z){let Q=$.metadata?.[Z];return typeof Q==="string"?Q:void 0}function Aq($,Z,Q){OX($,{tool_name:"run_commands",effective_timeout_ms:Q.effectiveTimeoutMs,timeout_source:Q.timeoutSource,command_count:Q.commandCount,duration_ms:Q.durationMs,ulid:Z.sessionId,mode:_Y(Z,"mode"),source:_Y(Z,"source"),session_id:Z.sessionId,agent_id:Z.agentId,conversation_id:Z.conversationId,run_id:Z.runId,iteration:Z.iteration,tool_call_id:Z.toolCallId})}function Oq($){let Z=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return Z?.[1]??Z?.[2]??Z?.[3]}function qq($){let Z=[];for(let Q=0;Q<$.length;Q+=1){let J=$[Q],W=Oq(J);if(!W){Z.push(J);continue}let X=$.findIndex((Y,V)=>V>Q&&Y.trim()===W);if(X===-1){Z.push(J);continue}let j=[J];while(Q<X){Q+=1;let Y=$[Q];j.push(Y)}Z.push(j.join(`
|
|
64
|
+
`))}return Z}function zq($){let Z=[],Q=[],J=()=>{if(Q.length>0)Z.push(...qq(Q)),Q=[]};for(let W of $){if(typeof W==="string"){Q.push(W);continue}J(),Z.push(W)}return J(),Z}async function Tq($,Z){let{executor:Q,cwd:J,context:W,timeoutMs:X,timeoutSource:j,telemetry:Y}=Z;return Promise.all($.map(async(V)=>{let B=Date.now(),H=FY(V);try{let K=await M1(Q(V,J,W),X,`Command timed out after ${X}ms`);return{query:H,result:K,success:!0}}catch(K){if(K instanceof m2)Aq(Y,W,{effectiveTimeoutMs:K.timeoutMs,timeoutSource:j,commandCount:$.length,durationMs:Date.now()-B});if(K instanceof d$)return{query:H,result:K.output,error:K.message,success:!1};let G=c$(K);return{query:H,result:"",error:`Command failed: ${G}`,success:!1}}}))}function AY($,Z={}){let Q=Z.fileReadTimeoutMs??1e4;return Q$({name:"read_files",description:`Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided on the same file entry as its path. When you already know multiple files you need, read them together in one call, and call this tool in the same response as other independent tool calls. Each read returns at most ${c2} lines / ~${Math.round(L5/1024)}k characters; longer files report their total line count, page through them with start_line/end_line on that file's entry. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. `,inputSchema:E1(Y5),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(J,W)=>{let X=J$(QY,KY(J)),j;if(typeof X==="string")j=[{path:X}];else if(Array.isArray(X))j=X.map((Y)=>typeof Y==="string"?{path:Y}:Y);else if("files"in X)j=(Array.isArray(X.files)?X.files:[X.files]).map((V)=>typeof V==="string"?{path:V}:V);else if("file_paths"in X)j=(Array.isArray(X.file_paths)?X.file_paths:[X.file_paths]).map((V)=>({path:V}));else if("paths"in X)j=(Array.isArray(X.paths)?X.paths:[X.paths]).map((V)=>typeof V==="string"?{path:V}:V);else j=[X];return Promise.all(j.map(async(Y)=>{let V=HY(Y);if(V)return{query:_5(Y),result:"",error:`Invalid file range: ${V}`,success:!1};try{let B=await M1($(Y,W),Q,`File read timed out after ${Q}ms`);return{query:_5(Y),result:B,success:!0}}catch(B){let H=c$(B);return{query:_5(Y),result:"",error:`Error reading file: ${H}`,success:!1}}}))}})}function OY($,Z={}){let Q=Z.searchTimeoutMs??30000,J=Z.cwd??process.cwd();return Q$({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(u2/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:E1(V5),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(W,X)=>{let j=J$(JY,W),Y=Array.isArray(j)?j:typeof j==="object"?Array.isArray(j.queries)?j.queries:[j.queries]:[j];return Promise.all(Y.map(async(V)=>{try{let B=await M1($(V,J,X),Q,`Search timed out after ${Q}ms`);return{query:V,result:B,success:!0}}catch(B){let H=c$(B);return{query:V,result:"",error:`Search failed: ${H}`,success:!1}}}))}})}var LY="Use for listing files, checking git status, running builds, executing tests, etc. Commands must be non-interactive. Commands that require follow-up input like pagers should be skipped or used with supported flags/env (e.g. git --no-pager, --non-interactive) to bypass the interaction steps. ";function Nq($,Z){if($==="powershell"||$==="cmd"){let J=$==="powershell"?"PowerShell":"cmd.exe",W=$==="powershell"?"';'":"'&&'";return"Run non-interactive shell commands from the root of the workspace in Windows environment. "+LY+`Output beyond ~${Math.round(u$/1000)}k characters is middle-truncated (start and end preserved); filter output when you need specific sections. Commands run through ${J}; quote paths and arguments for ${J} and use ${W} to sequence commands. Include multiple commands in the same call when they are independent and safe to run concurrently. When independent reads, searches, or edits are also needed, call those tools in the same response.`}let Q=$==="wsl"?"Commands run through bash in WSL (wsl.exe); the Windows working directory is mounted under /mnt/<drive>. ":Z?"Commands run through a POSIX (bash-compatible) shell on Windows. ":"";return"Run non-interactive shell commands from the root of the workspace. "+LY+Q+`Commands should be properly shell-escaped and targeted to avoid error or timeout. Include multiple commands in the same call when they are independent complete shell commands and safe to run concurrently; multiline scripts and heredocs must be a single command string. When independent reads, searches, or edits are also needed, call those tools in the same response. Output beyond ~${Math.round(u$/1000)}k characters is middle-truncated (start and end preserved); pipe through grep/head/tail when you need specific sections of large output. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.`}function V7($,Z={}){let Q=Z.bashTimeoutMs??30000,J=Z.bashTimeoutMs===void 0?"default_setting":"configured_setting",W=Z.cwd??process.cwd(),X=process.platform==="win32",j=Z.shell,Y=typeof j==="function"?j:()=>j??_q(process.platform),V=()=>Nq(Lq(Y()),X),B=Q$({name:"run_commands",description:V(),inputSchema:E1(B5),timeoutMs:Q*2,retryable:!1,maxRetries:0,execute:async(H,K)=>{let G=zq(GY(H));return Tq(G,{executor:$,cwd:W,context:K,timeoutMs:Q,timeoutSource:J,telemetry:Z.telemetry})}});if(typeof j==="function")Object.defineProperty(B,"description",{get:V,enumerable:!0});return B}function qY($,Z={}){let Q=Z.webFetchTimeoutMs??30000;return Q$({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:E1(H5),timeoutMs:Q*2,retryable:!0,maxRetries:2,execute:async(J,W)=>{let X=J$(H5,J);return Promise.all(X.requests.map(async(j)=>{try{let Y=await M1($(j.url,j.prompt,W),Q,`Web fetch timed out after ${Q}ms`);return{query:j.url,result:Y,success:!0}}catch(Y){let V=c$(Y);return{query:j.url,result:"",error:`Error fetching web content: ${V}`,success:!1}}}))}})}var fq=`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:
|
|
65
65
|
|
|
66
66
|
*** Begin Patch
|
|
67
67
|
*** Update File: path/to/file.ts
|
|
@@ -97,92 +97,92 @@ Example:
|
|
|
97
97
|
</div>
|
|
98
98
|
);
|
|
99
99
|
}
|
|
100
|
-
*** End Patch`;function
|
|
100
|
+
*** End Patch`;function zY($,Z={}){let Q=Z.applyPatchTimeoutMs??30000,J=Z.cwd??process.cwd();return Q$({name:"apply_patch",description:fq,inputSchema:E1(G5),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(W,X)=>{let j=J$(YY,W),Y=typeof j==="string"?j:j.input;try{return{query:"apply_patch",result:await M1($({input:Y},J,X),Q,`apply_patch timed out after ${Q}ms`),success:!0}}catch(V){return{query:"apply_patch",result:"",error:`apply_patch failed: ${c$(V)}`,success:!1}}}})}function TY($,Z={}){let Q=Z.editorTimeoutMs??30000,J=Z.cwd??process.cwd();return Q$({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:E1(K5),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(W,X)=>{let j=J$(K5,W),Y=j.insert_line==null?"edit":"insert",V=BY(j);if(V)return{query:`${Y}:${j.path}`,result:"",error:V,success:!1};try{let B=await M1($(j,J,X),Q,`Editor operation timed out after ${Q}ms`);return{query:`${Y}:${j.path}`,result:B,success:!0}}catch(B){let H=c$(B);return{query:`${Y}:${j.path}`,result:"",error:`Editor operation failed: ${H}`,success:!1}}}})}function d2($,Z={}){let Q=Z.skillsTimeoutMs??15000,J='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=Q$({name:"skills",description:J,inputSchema:E1(F5),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(X,j)=>{let Y=J$(F5,X);return M1($(Y.skill,Y.args||void 0,j),Q,`Skills operation timed out after ${Q}ms`)}});return Object.defineProperty(W,"description",{get(){let X=$.configuredSkills?.filter((j)=>!j.disabled).map((j)=>j.name);if(X&&X.length>0)return`${J} Available skills: ${X.join(", ")}.`;return J},enumerable:!0,configurable:!0}),W}function NY($){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:E1(U5),retryable:!1,maxRetries:0,execute:async(Z,Q)=>{let J=J$(U5,Z);return $(J.question,J.options,Q)}}}function fY($,Z={}){let Q=Z.submitTimeoutMs??15000;return Q$({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:E1(D5),lifecycle:{completesRun:!0},timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(J,W)=>{let X=J$(D5,J);return M1($(X.summary,X.verified,W),Q,`submit_and_exit timed out after ${Q}ms`)}})}function p2($){let{executors:Z,enableReadFiles:Q=!0,enableSearch:J=!0,enableBash:W=!0,enableWebFetch:X=!0,enableApplyPatch:j=!1,enableEditor:Y=!0,enableSkills:V=!0,enableAskQuestion:B=!0,enableSubmitAndExit:H=!1,...K}=$,G=[];if(Q&&Z.readFile)G.push(AY(Z.readFile,K));if(J&&Z.search)G.push(OY(Z.search,K));if(W&&Z.bash)G.push(V7(Z.bash,K));if(X&&Z.webFetch)G.push(qY(Z.webFetch,K));if(Y&&Z.editor)G.push(TY(Z.editor,K));else if(j&&Z.applyPatch)G.push(zY(Z.applyPatch,K));if(V&&Z.skills)G.push(d2(Z.skills,K));let F=H?Z.submit:void 0;if(B&&Z.askQuestion&&!F)G.push(NY(Z.askQuestion));if(F)G.push(fY(F,K));return G}import*as i0 from"node:fs/promises";import*as r0 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"},MY=["%%bash","apply_patch","EOF","```"],l8;((J)=>{J.ADD="add";J.DELETE="delete";J.UPDATE="update"})(l8||={});class H0 extends Error{constructor($){super($);this.name="DiffError"}}function l0($){let Z={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(Q)=>Z[Q]??Q).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class B7{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor($,Z){this.lines=$;this.currentFiles=Z}parse(){this.skipBeginSentinel();while(this.hasMoreLines()&&!this.isEndMarker())this.parseNextAction();if(this.patch.warnings?.length===0)delete this.patch.warnings;return{patch:this.patch,fuzz:this.fuzz}}addWarning($){if(!this.patch.warnings)this.patch.warnings=[];this.patch.warnings.push($)}skipBeginSentinel(){if(this.lines[this.index]?.startsWith(d.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(d.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(d.UPDATE)){this.parseUpdate($.substring(d.UPDATE.length).trim());return}if($?.startsWith(d.DELETE)){this.parseDelete($.substring(d.DELETE.length).trim());return}if($?.startsWith(d.ADD)){this.parseAdd($.substring(d.ADD.length).trim());return}throw new H0(`Unknown line while parsing: ${$}`)}checkDuplicate($,Z){if($ in this.patch.actions)throw new H0(`Duplicate ${Z} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let Z=this.lines[this.index]?.startsWith(d.MOVE)?(this.lines[this.index++]??"").substring(d.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new H0(`Update File Error: Missing File: ${$}`);let Q=this.currentFiles[$]??"",J=this.parseUpdateFile(Q,$);J.movePath=Z,this.patch.actions[$]=J,this.currentPath=void 0}parseUpdateFile($,Z){let Q={type:"update",chunks:[]},J=$.split(`
|
|
101
101
|
`),W=0,X=[d.END,d.UPDATE,d.DELETE,d.ADD,d.END_FILE];while(!X.some((j)=>this.lines[this.index]?.startsWith(j.trim()))){let j=this.lines[this.index],Y=j?.startsWith("@@ ")?j.substring(3):void 0;if(Y!==void 0||(j==="@@"?j:void 0)!==void 0)this.index++;else if(W!==0)throw new H0(`Invalid Line:
|
|
102
|
-
${this.lines[this.index]}`);if(Y?.trim()){let L=l0(Y.trim());for(let O=W;O<J.length;O++){let D=J[O];if(D&&(l0(D)===L||l0(D.trim())===L)){if(W=O+1,l0(D.trim())===L&&l0(D)!==L)this.fuzz++;break}}}let[B,H,K,G]=
|
|
102
|
+
${this.lines[this.index]}`);if(Y?.trim()){let L=l0(Y.trim());for(let O=W;O<J.length;O++){let D=J[O];if(D&&(l0(D)===L||l0(D.trim())===L)){if(W=O+1,l0(D.trim())===L&&l0(D)!==L)this.fuzz++;break}}}let[B,H,K,G]=Eq(this.lines,this.index),[F,U,_]=Mq(J,B,W,G);if(F===-1){let L=B.join(`
|
|
103
103
|
`);this.addWarning({path:this.currentPath||Z,chunkIndex:Q.chunks.length,message:`Could not find matching context (similarity: ${_.toFixed(2)}). Chunk skipped.`,context:L.length>200?`${L.substring(0,200)}...`:L}),this.index=K}else{this.fuzz+=U;for(let L of H)L.origIndex+=F,Q.chunks.push(L);W=F+B.length,this.index=K}}return Q}parseDelete($){if(this.checkDuplicate($,"delete"),!($ in this.currentFiles))throw new H0(`Delete File Error: Missing File: ${$}`);this.patch.actions[$]={type:"delete",chunks:[]},this.index++}parseAdd($){if(this.checkDuplicate($,"add"),$ in this.currentFiles)throw new H0(`Add File Error: File already exists: ${$}`);this.index++;let Z=[],Q=[d.END,d.UPDATE,d.DELETE,d.ADD];while(this.hasMoreLines()&&!Q.some((J)=>this.lines[this.index]?.startsWith(J.trim()))){let J=this.lines[this.index++];if(J===void 0)break;if(!J.startsWith("+"))throw new H0(`Invalid Add File line (missing '+'): ${J}`);Z.push(J.substring(1))}this.patch.actions[$]={type:"add",newFile:Z.join(`
|
|
104
|
-
`),chunks:[]}}}function
|
|
104
|
+
`),chunks:[]}}}function RY($,Z){let Q=$.length>Z.length?$:Z,J=$.length>Z.length?Z:$;if(Q.length===0)return 1;let W=Rq(J,Q);return(Q.length-W)/Q.length}function Rq($,Z){let Q=Z.length+1,J=$.length+1,W=Array(Q*J).fill(0),X=(Y,V)=>W[Y*J+V]??0,j=(Y,V,B)=>{W[Y*J+V]=B};for(let Y=0;Y<=Z.length;Y++)j(Y,0,Y);for(let Y=0;Y<=$.length;Y++)j(0,Y,Y);for(let Y=1;Y<=Z.length;Y++)for(let V=1;V<=$.length;V++)if(Z[Y-1]===$[V-1])j(Y,V,X(Y-1,V-1));else j(Y,V,1+Math.min(X(Y-1,V-1),X(Y,V-1),X(Y-1,V)));return X(Z.length,$.length)}function Mq($,Z,Q,J){if(Z.length===0)return[Q,0,1];let W=0,X=(j)=>{let Y=l0(Z.join(`
|
|
105
105
|
`));for(let B=j;B<$.length;B++){let H=l0($.slice(B,B+Z.length).join(`
|
|
106
|
-
`));if(H===Y)return[B,0,1];let K=
|
|
106
|
+
`));if(H===Y)return[B,0,1];let K=RY(H,Y);if(K>W)W=K}for(let B=j;B<$.length;B++){let H=l0($.slice(B,B+Z.length).map((G)=>G.trimEnd()).join(`
|
|
107
107
|
`)),K=l0(Z.map((G)=>G.trimEnd()).join(`
|
|
108
108
|
`));if(H===K)return[B,1,1]}for(let B=j;B<$.length;B++){let H=l0($.slice(B,B+Z.length).map((G)=>G.trim()).join(`
|
|
109
109
|
`)),K=l0(Z.map((G)=>G.trim()).join(`
|
|
110
110
|
`));if(H===K)return[B,100,1]}let V=0.66;for(let B=j;B<$.length;B++){let H=l0($.slice(B,B+Z.length).join(`
|
|
111
|
-
`)),K=
|
|
112
|
-
`).map((Z)=>Z.replace(/\r$/,""))}function
|
|
111
|
+
`)),K=RY(H,Y);if(K>=V)return[B,1000,K];if(K>W)W=K}return[-1,0,W]};if(J){let[j,Y,V]=X($.length-Z.length);if(j!==-1)return[j,Y,V];return[j,Y,V]=X(Q),[j,Y+1e4,V]}return X(Q)}function Eq($,Z){let Q=Z,J=[],W=[],X=[],j=[],Y="keep",V=["@@",d.END,d.UPDATE,d.DELETE,d.ADD,d.END_FILE];while(Q<$.length){let B=$[Q];if(!B||V.some((G)=>B.startsWith(G.trim())))break;if(B==="***")break;if(B.startsWith("***"))throw new H0(`Invalid line: ${B}`);Q++;let H=Y,K=B;if(K[0]==="+")Y="add";else if(K[0]==="-")Y="delete";else if(K[0]===" ")Y="keep";else Y="keep",K=` ${K}`;if(K=K.slice(1),Y==="keep"&&H!==Y){if(X.length||W.length)j.push({origIndex:J.length-W.length,delLines:W,insLines:X});W=[],X=[]}if(Y==="delete")W.push(K),J.push(K);else if(Y==="add")X.push(K);else J.push(K)}if(X.length||W.length)j.push({origIndex:J.length-W.length,delLines:W,insLines:X});if(Q<$.length&&$[Q]===d.END_FILE)return Q++,[J,j,Q,!0];return[J,j,Q,!1]}function H7($,Z,Q){let J=r0.isAbsolute(Z),W=J?r0.normalize(Z):r0.resolve($,Z);if(!Q||J)return W;let X=r0.relative($,W);if(X.startsWith("..")||r0.isAbsolute(X))throw new H0(`Path must stay within cwd: ${Z}`);return W}function Cq($){return $.split(`
|
|
112
|
+
`).map((Z)=>Z.replace(/\r$/,""))}function EY($){if($.trim()==="")return!1;return MY.some((Z)=>$.startsWith(Z))}function wq($){let Z=0,Q=$.length;while(Z<Q&&EY($[Z]??""))Z++;while(Q>Z&&EY($[Q-1]??""))Q--;return $.slice(Z,Q)}function Pq($){let Z=Cq($),Q=Z.findIndex((j)=>j.startsWith(d.BEGIN)),J=-1;for(let j=Z.length-1;j>=0;j--)if(Z[j]?.startsWith(d.END)){J=j;break}if(Q!==-1||J!==-1){if(Q===-1||J===-1||J<Q)throw new H0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:Z.slice(Q,J+1)}}let W=wq(Z);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 Sq($,Z){let Q=new Set;for(let J of $)for(let W of Z)if(J.startsWith(W)){Q.add(J.substring(W.length).trim());break}return[...Q]}function bq($,Z,Q){if(Z.length===0)return $;let J=$.split(`
|
|
113
113
|
`),W=[],X=0;for(let j of Z){if(j.origIndex>J.length)throw new H0(`${Q}: chunk.origIndex ${j.origIndex} > lines.length ${J.length}`);if(X>j.origIndex)throw new H0(`${Q}: currentIndex ${X} > chunk.origIndex ${j.origIndex}`);W.push(...J.slice(X,j.origIndex)),W.push(...j.insLines),X=j.origIndex+j.delLines.length}return W.push(...J.slice(X)),W.join(`
|
|
114
|
-
`)}async function
|
|
115
|
-
`)}return X}function
|
|
114
|
+
`)}async function yq($,Z,Q,J){let W=Sq($,[d.UPDATE,d.DELETE]),X={};for(let j of W){let Y=H7(Z,j,J),V;try{V=await i0.readFile(Y,Q)}catch{throw new H0(`File not found: ${j}`)}X[j]=V.replace(/\r\n/g,`
|
|
115
|
+
`)}return X}function kq($,Z){let Q={};for(let[J,W]of Object.entries($.actions))switch(W.type){case"delete":Q[J]={type:"delete",oldContent:Z[J]};break;case"add":if(W.newFile===void 0)throw new H0("ADD action without file content");Q[J]={type:"add",newContent:W.newFile};break;case"update":Q[J]={type:"update",oldContent:Z[J],newContent:bq(Z[J]??"",W.chunks,J),movePath:W.movePath};break}return Q}function hq($){let Z=[`Patch could not be applied because ${$.length} hunk${$.length===1?"":"s"} did not match the current file content.`];for(let Q of $){let J=Q.chunkIndex===void 0?"unknown":String(Q.chunkIndex+1);if(Z.push(`${Q.path}: hunk ${J}: ${Q.message}`),Q.context)Z.push(`Context:
|
|
116
116
|
${Q.context}`)}return Z.join(`
|
|
117
|
-
`)}async function
|
|
118
|
-
`)}}import*as X1 from"node:fs/promises";import*as W1 from"node:path";function
|
|
117
|
+
`)}async function Iq($,Z,Q,J){let W=[];for(let[X,j]of Object.entries($)){let Y=H7(Z,X,J);switch(j.type){case"delete":await i0.rm(Y,{force:!0}),W.push(`${X}: [deleted]`);break;case"add":if(j.newContent===void 0)throw new H0(`Cannot create ${X} with no content`);await i0.mkdir(r0.dirname(Y),{recursive:!0}),await i0.writeFile(Y,j.newContent,{encoding:Q}),W.push(X);break;case"update":{if(j.newContent===void 0)throw new H0(`UPDATE change for ${X} has no new content`);if(j.movePath){let V=H7(Z,j.movePath,J);await i0.mkdir(r0.dirname(V),{recursive:!0}),await i0.writeFile(V,j.newContent,{encoding:Q}),await i0.rm(Y,{force:!0}),W.push(`${X} -> ${j.movePath}`)}else await i0.writeFile(Y,j.newContent,{encoding:Q}),W.push(X);break}}}return W}async function A5($,Z,Q={}){let{encoding:J="utf-8",restrictToCwd:W=!0}=Q,X=Pq($),j=await yq(X.lines,Z,J,W),Y=new B7(X.lines,j),{patch:V,fuzz:B}=Y.parse();if(V.warnings&&V.warnings.length>0)throw new H0(hq(V.warnings));return{changes:kq(V,j),fuzz:B}}function i8($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0}=$;return async(J,W,X)=>{let{changes:j,fuzz:Y}=await A5(J.input,W,{encoding:Z,restrictToCwd:Q}),V=await Iq(j,W,Z,Q),B=["Successfully applied patch to the following files:"];for(let H of V)B.push(H);if(Y>0)B.push(`Note: Patch applied with fuzz factor ${Y}`);return B.join(`
|
|
118
|
+
`)}}import*as X1 from"node:fs/promises";import*as W1 from"node:path";function xq($,Z,Q){let J=W1.isAbsolute(Z),W=J?W1.normalize(Z):W1.resolve($,Z);if(!Q)return W;if(J)return W;let X=W1.relative($,W);if(X.startsWith("..")||W1.isAbsolute(X))throw Error(`Path must stay within cwd: ${Z}`);return W}function gq($,Z){if(Z.length===0)return 0;return $.split(Z).length-1}function wY($){return $.includes(`\r
|
|
119
119
|
`)?`\r
|
|
120
120
|
`:`
|
|
121
|
-
`}function
|
|
122
|
-
`)}async function
|
|
123
|
-
${K}`}async function
|
|
121
|
+
`}function CY($,Z){return $.split(/\r\n|\n/).join(Z)}function vq($,Z,Q){let J=$.split(/\r\n|\n/),W=Z.split(/\r\n|\n/),X=0;while(X<J.length&&X<W.length&&J[X]===W[X])X++;let j=J.length,Y=W.length;while(j>X&&Y>X&&J[j-1]===W[Y-1])j--,Y--;let V=j-X,B=Y-X,H=V,K=B;if(V+B>Q)H=Math.min(V,Math.max(Math.ceil(Q/2),Q-B)),K=Math.min(B,Q-H);let G=["```diff"];for(let _=X;_<X+H;_++)G.push(`-${_+1}: ${J[_]}`);for(let _=X;_<X+K;_++)G.push(`+${_+1}: ${W[_]}`);let F=V-H,U=B-K;if(F>0||U>0)G.push(`... diff truncated (${F} more removed, ${U} more added lines) ...`);return G.push("```"),G.join(`
|
|
122
|
+
`)}async function mq($,Z,Q){return await X1.mkdir(W1.dirname($),{recursive:!0}),await X1.writeFile($,Z,{encoding:Q}),`File created successfully at: ${$}`}async function cq($){try{return await X1.access($),!0}catch{return!1}}async function uq($,Z,Q,J,W){let X=await X1.readFile($,J),j=wY(X),Y=CY(Z,j),V=CY(Q??"",j),B=gq(X,Y);if(B===0)throw Error(`No replacement performed: text not found in ${$}.`);if(B>1)throw Error(`No replacement performed: multiple occurrences of text found in ${$}.`);let H=X.replace(Y,()=>V);await X1.writeFile($,H,{encoding:J});let K=vq(X,H,W);return`Edited ${$}
|
|
123
|
+
${K}`}async function dq($,Z,Q,J){let W=await X1.readFile($,J),X=wY(W),j=W.split(/\r\n|\n/),Y=j.length+1;if(Z<1||Z>Y)throw Error(`Invalid insert_line: ${Z}. insert_line must be a positive one-based boundary line in the range 1-${Y}. Use ${Y} to append at EOF.`);let V=Z-1;return j.splice(V,0,...Q.split(/\r\n|\n/)),await X1.writeFile($,j.join(X),{encoding:J}),`Inserted content at line ${Z} in ${$}.`}function r8($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0,maxDiffLines:J=200}=$;return async(W,X,j)=>{let Y=xq(X,W.path,Q);if(W.insert_line!=null)return dq(Y,W.insert_line,W.new_text,Z);if(!await cq(Y))return mq(Y,W.new_text,Z);if(W.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return uq(Y,W.old_text,W.new_text,Z,J)}}import{createReadStream as pq}from"node:fs";import*as O5 from"node:fs/promises";import*as W$ from"node:path";import{createInterface as lq}from"node:readline";import{resolveExistingFilePath as iq}from"@cline/shared/storage";var rq=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),nq={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},PY=1e8,aq=50000;function SY($){let{reason:Z}=$;if(Z instanceof Error)return Z;if(Z!==void 0)return Error(String(Z));return Error("File read was aborted")}async function oq($,Z,Q,J,W,X){if(X?.aborted)throw SY(X);let j=Math.max(J??1,1),Y=W??Number.POSITIVE_INFINITY,V=Number.isFinite(Y),B=V?Y:j+aq-1,H=[],K=0,G=0,F=!1,U=!1,_=Number.isFinite(Y)?Math.min(Y,j+c2-1):j+c2-1,L=Q?String(_).length+3:0,O=pq($,{encoding:Z}),D=lq({input:O,crlfDelay:Number.POSITIVE_INFINITY}),q=X?()=>O.destroy(SY(X)):void 0;if(X&&q)X.addEventListener("abort",q,{once:!0});try{for await(let C of D){if(G+=1,G>Y){G=Y;break}if(!V&&F&&G>=B){U=!0;break}if(G<j||F)continue;if(H.length>=c2){F=!0;continue}let P=C;if(P.length>Y7)P=`${P.slice(0,Y7)} [line truncated]`;let n=K+P.length+L+1;if(n>L5&&H.length>0){F=!0;continue}H.push({lineNumber:G,text:P}),K=n}}finally{if(X&&q)X.removeEventListener("abort",q);D.close(),O.destroy()}let T=String(H[H.length-1]?.lineNumber??G).length,z=H.map(({lineNumber:C,text:P})=>Q?`${String(C).padStart(T," ")} | ${P}`:P).join(`
|
|
124
124
|
`),A=H[H.length-1]?.lineNumber;if(A===void 0)return z;let f=Math.min(Y,G);if(A>=f)return z;let N=U?`${G}+ lines`:f;return`${z}
|
|
125
125
|
|
|
126
|
-
[Showing lines ${j}-${A} of ${N}. Use start_line/end_line to read other sections.]`}function q5($={}){let{maxFileSizeBytes:Z,encoding:Q,includeLineNumbers:J}={...
|
|
127
|
-
`).filter((L)=>L.trim());for(let L of _){if(U.length>=Q)break;let O=JSON.parse(L);if(O.type==="match"){let D=O.data,q=[];if(O.data.submatches&&O.data.submatches.length>0){let T=O.data.submatches[0];U.push({file:D.path.text,line:D.line_number,column:(T?.start??0)+1,match:T?.match?.text??"",context:q})}}else if(O.type==="context"&&U.length>0){let D=U[U.length-1],q=O.data.line_number===D.line?">":" ";D.context.push(`${q} ${O.data.line_number}: ${O.data.lines?.text??O.data.line?.text??""}`)}}G(U.length>0?U:null)}catch{G(null)}return}G(null)}),Y.on("error",()=>{G(null)})})}function
|
|
128
|
-
`))}let F;try{F=new RegExp(V,"gim")}catch(D){throw Error(`Invalid regex pattern: ${V}. ${D instanceof Error?D.message:""}`)}let U=[],_=0,L=await p$(B);for(let D of L){if(H.signal?.aborted)throw Error("Search operation aborted");if(!
|
|
126
|
+
[Showing lines ${j}-${A} of ${N}. Use start_line/end_line to read other sections.]`}function q5($={}){let{maxFileSizeBytes:Z,encoding:Q,includeLineNumbers:J}={...nq,...$};return async(W,X)=>{let{path:j,start_line:Y,end_line:V}=W,B=W$.isAbsolute(j)?W$.normalize(j):W$.resolve(process.cwd(),j),H=iq(B)??B,K=W$.extname(H).toLowerCase(),G=rq.get(K),F=await O5.stat(H);if(!F.isFile())throw Error(`Path is not a file: ${H}`);if(G){if(F.size>Z)throw Error(`Image file too large: ${F.size} bytes (max: ${Z} bytes).`);if(X.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let U=await O5.readFile(H);return[{type:"text",text:"Successfully read image"},{type:"image",data:U.toString("base64"),mediaType:G}]}if(F.size>PY)throw Error(`Text file too large to stream safely: ${F.size} bytes (max: ${PY} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return oq(H,Q,J,Y,V,X.signal)}}import{spawn as vY}from"node:child_process";import*as mY from"node:fs/promises";import*as N5 from"node:path";import{spawn as sq}from"node:child_process";import{readdir as tq}from"node:fs/promises";import G7 from"node:path";import{isMainThread as kY,parentPort as bY,Worker as eq}from"node:worker_threads";var $z=15000,Zz=600000,Qz=1000,Jz=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function yY($){let Z=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return Z==="EACCES"||Z==="EPERM"||Z==="ENOENT"}var l2=new Map;function Wz(){if(!kY)return!1;return!0}function Xz($){if(l2.size<=1)return;for(let[Z,Q]of l2.entries()){if(Q.pending)continue;if($-Q.lastAccessedAt>Zz)l2.delete(Z)}}function jz($,Z){return G7.relative($,Z).split(G7.sep).join("/")}async function Yz($){let Q=(await new Promise((J,W)=>{let X=sq("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"],windowsHide:!0}),j="",Y="";X.stdout.on("data",(V)=>{j+=V.toString()}),X.stderr.on("data",(V)=>{Y+=V.toString()}),X.on("error",W),X.on("close",(V)=>{if(V===0){J(j);return}W(Error(Y||`rg exited with code ${V}`))})})).split(/\r?\n/).map((J)=>J.trim()).filter((J)=>J.length>0).map((J)=>J.replace(/\\/g,"/"));return new Set(Q)}async function hY($,Z,Q){let J;try{J=await tq(Z,{withFileTypes:!0})}catch(W){if(yY(W))return;throw W}for(let W of J){let X=G7.join(Z,W.name);if(W.isDirectory()){if(Jz.has(W.name))continue;try{await hY($,X,Q)}catch(j){if(yY(j))continue;throw j}continue}if(W.isFile())Q.add(jz($,X))}}async function Vz($){let Z=new Set;return await hY($,$,Z),Z}async function z5($){try{return await Yz($)}catch{return Vz($)}}function Bz(){if(kY||!bY)return;let $=bY;$.on("message",(Z)=>{if(Z.type!=="index")return;z5(Z.cwd).then((Q)=>{let J={type:"indexResult",requestId:Z.requestId,files:Array.from(Q)};$.postMessage(J)}).catch((Q)=>{let J={type:"indexResult",requestId:Z.requestId,error:Q instanceof Error?Q.message:"Failed to build file index"};$.postMessage(J)})})}class IY{worker=new eq(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",($)=>{if($.type!=="indexResult")return;let Z=this.pending.get($.requestId);if(!Z)return;if(this.pending.delete($.requestId),$.error){Z.reject(Error($.error));return}Z.resolve($.files??[])}),this.worker.on("error",($)=>{this.flushPending($)}),this.worker.on("exit",($)=>{if($!==0)this.flushPending(Error(`File index worker exited with code ${$}`))})}requestIndex($){let Z=++this.nextRequestId,Q=new Promise((W,X)=>{let j=setTimeout(()=>{this.pending.delete(Z),W(null)},Qz);j.unref(),this.pending.set(Z,{resolve:(Y)=>{clearTimeout(j),W(Y)},reject:(Y)=>{clearTimeout(j),X(Y)}})}),J={type:"index",requestId:Z,cwd:$};return this.worker.postMessage(J),Q}flushPending($){for(let[Z,Q]of this.pending.entries())Q.reject($),this.pending.delete(Z)}}Bz();var K7;function Hz(){if(!Wz())return null;if(K7===void 0)K7=new IY;return K7}async function Kz($){let Z=Hz();if(!Z)return z5($);try{let Q=await Z.requestIndex($);if(Q===null)return z5($);return new Set(Q)}catch{return z5($)}}async function p$($,Z={}){let Q=Z.ttlMs??$z,J=Date.now();Xz(J);let W=l2.get($);if(W&&Q>0&&J-W.lastBuiltAt<=Q&&W.files.size>0)return W.lastAccessedAt=J,W.files;if(W?.pending)return W.lastAccessedAt=J,W.pending;let X=Kz($).then((j)=>{return l2.set($,{files:j,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),j});return l2.set($,{files:W?.files??new Set,lastBuiltAt:W?.lastBuiltAt??0,lastAccessedAt:J,pending:X}),X}async function xY($,Z={}){await p$($,{...Z,ttlMs:0})}import{stat as Gz}from"node:fs/promises";import l$ from"node:path";var Fz=/[),.:;!?`'"]+$/,Uz=/^[(`'"]+/;function Dz($){let Z=$.matchAll(/(^|[\s])@([^\s]+)/g),Q=[];for(let J of Z){let W=(J[2]??"").trim();if(W.length===0)continue;let X=W.replace(Uz,"").replace(Fz,"");if(X.length===0||X.includes("@"))continue;Q.push(X)}return Array.from(new Set(Q))}function _z($,Z){let Q=$.replace(/\\/g,"/"),J=l$.isAbsolute(Q)?l$.resolve(Q):l$.resolve(Z,Q),W=l$.relative(Z,J);if(W.startsWith("..")||l$.isAbsolute(W))return;return W.split(l$.sep).join("/")}async function T5($,Z,Q={}){let J=Dz($);if(J.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:W,maxFileBytes:X,maxTotalBytes:j}=Q,Y=await p$(Z,{ttlMs:Q.ttlMs}),V=[],B=[],H=[],K=0;for(let G of J){if(W&&H.length>=W){B.push(G);continue}let F=_z(G,Z);if(!F||!Y.has(F)){B.push(G);continue}if(!X||!j){V.push(F);continue}let U=l$.join(Z,F);try{if(!(await Gz(U)).isFile()){B.push(G);continue}let L=K+X;if(L>j){B.push(G);continue}K=L,V.push(F)}catch{B.push(G)}}return{prompt:$,mentions:J,matchedFiles:V,ignoredMentions:B}}var Lz=["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"],Az=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],i$=null;function Oz(){if(i$!==null)return Promise.resolve(i$);return new Promise(($)=>{let Z=vY("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});Z.on("close",(Q)=>{i$=Q===0,$(i$)}),Z.on("error",()=>{i$=!1,$(!1)}),setTimeout(()=>{if(!Z.killed)Z.kill("SIGTERM");if(i$===null)i$=!1,$(!1)},1000)})}function qz($,Z,Q,J,W=5000,X){return new Promise((j)=>{let Y=vY("rg",["--json",`--context=${J}`,"--max-count=1","-i",$],{cwd:Z,stdio:["ignore","pipe","pipe"],windowsHide:!0}),V="",B=!1,H=()=>{if(!Y.killed)Y.kill("SIGTERM")},K=setTimeout(()=>{if(!B)B=!0,H(),j(null)},W),G=(F)=>{if(!B)B=!0,clearTimeout(K),H(),j(F)};if(X?.aborted){H(),j(null);return}X?.addEventListener("abort",()=>{G(null)}),Y.stdout.on("data",(F)=>{V+=F.toString()}),Y.stderr.on("data",()=>{}),Y.on("close",(F)=>{if(F===0||F===1){try{let U=[],_=V.split(`
|
|
127
|
+
`).filter((L)=>L.trim());for(let L of _){if(U.length>=Q)break;let O=JSON.parse(L);if(O.type==="match"){let D=O.data,q=[];if(O.data.submatches&&O.data.submatches.length>0){let T=O.data.submatches[0];U.push({file:D.path.text,line:D.line_number,column:(T?.start??0)+1,match:T?.match?.text??"",context:q})}}else if(O.type==="context"&&U.length>0){let D=U[U.length-1],q=O.data.line_number===D.line?">":" ";D.context.push(`${q} ${O.data.line_number}: ${O.data.lines?.text??O.data.line?.text??""}`)}}G(U.length>0?U:null)}catch{G(null)}return}G(null)}),Y.on("error",()=>{G(null)})})}function zz($,Z,Q,J){let W=$.split("/"),X=W[W.length-1]??"";if(W.length-1>J)return!1;for(let V=0;V<W.length-1;V++)if(Z.has(W[V]??""))return!1;let Y=N5.posix.extname(X).slice(1).toLowerCase();return Q.has(Y)||!Y&&!X.startsWith(".")}function f5($={}){let{includeExtensions:Z=Lz,excludeDirs:Q=Az,maxResults:J=100,contextLines:W=2,maxDepth:X=20}=$,j=new Set(Q),Y=new Set(Z.map((V)=>V.toLowerCase()));return async(V,B,H)=>{if(H.signal?.aborted)throw Error("Search operation aborted");let K=await Oz(),G=null;if(K)G=await qz(V,B,J,W,5000,H.signal);if(G){let D=[`Found ${G.length} result${G.length===1?"":"s"} for pattern: ${V}`,""];for(let q of G)D.push(`${q.file}:${q.line}:${q.column}`),D.push(...q.context),D.push("");if(G.length>=J)D.push(`(Showing first ${J} results. Refine your search for more specific results.)`);return gY(D.join(`
|
|
128
|
+
`))}let F;try{F=new RegExp(V,"gim")}catch(D){throw Error(`Invalid regex pattern: ${V}. ${D instanceof Error?D.message:""}`)}let U=[],_=0,L=await p$(B);for(let D of L){if(H.signal?.aborted)throw Error("Search operation aborted");if(!zz(D,j,Y,X))continue;if(U.length>=J)break;_++;let q=N5.join(B,D);try{let z=(await mY.readFile(q,"utf-8")).split(`
|
|
129
129
|
`);for(let A=0;A<z.length;A++){let f=z[A];F.lastIndex=0;let N=F.exec(f);while(N!==null){if(U.length>=J)break;let C=Math.max(0,A-W),P=Math.min(z.length-1,A+W),n=[];for(let g=C;g<=P;g++){let w=g===A?">":" ";n.push(`${w} ${g+1}: ${z[g]}`)}if(U.push({file:D,line:A+1,column:N.index+1,match:N[0],context:n}),N.index===F.lastIndex)F.lastIndex++;N=F.exec(f)}}}catch{}}if(U.length===0)return`No results found for pattern: ${V}
|
|
130
|
-
Searched ${_} files.`;let O=[`Found ${U.length} result${U.length===1?"":"s"} for pattern: ${V}`,`Searched ${_} files.`,""];for(let D of U)O.push(`${D.file}:${D.line}:${D.column}`),O.push(...D.context),O.push("");if(U.length>=J)O.push(`(Showing first ${J} results. Refine your search for more specific results.)`);return
|
|
131
|
-
`))}}function
|
|
130
|
+
Searched ${_} files.`;let O=[`Found ${U.length} result${U.length===1?"":"s"} for pattern: ${V}`,`Searched ${_} files.`,""];for(let D of U)O.push(`${D.file}:${D.line}:${D.column}`),O.push(...D.context),O.push("");if(U.length>=J)O.push(`(Showing first ${J} results. Refine your search for more specific results.)`);return gY(O.join(`
|
|
131
|
+
`))}}function gY($){if($.length<=u2)return $;let Z=Math.ceil(u2/2),Q=Math.max(1,u2-Z);return`${$.slice(0,Z)}
|
|
132
132
|
[... search output truncated: ${$.length} chars total. Narrow the pattern or scope to view the elided matches ...]
|
|
133
|
-
`+$.slice(-Q)}function
|
|
133
|
+
`+$.slice(-Q)}function Tz($){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,`
|
|
134
134
|
`).replace(/<[^>]+>/g," ").replace(/ /g," ").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/&#(\d+);/g,(Z,Q)=>String.fromCharCode(parseInt(Q,10))).replace(/\s+/g," ").replace(/\n\s+/g,`
|
|
135
135
|
`).replace(/\n{3,}/g,`
|
|
136
136
|
|
|
137
|
-
`).trim()}function R5($={}){let{timeoutMs:Z=30000,maxResponseBytes:Q=5000000,userAgent:J="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:W={},followRedirects:X=!0}=$;return async(j,Y,V)=>{let B;try{B=new URL(j)}catch{throw Error(`Invalid URL: ${j}`)}if(!["http:","https:"].includes(B.protocol))throw Error(`Invalid protocol: ${B.protocol}. Only http and https are supported.`);let H=new AbortController,K=setTimeout(()=>H.abort(),Z),G;if(V.signal)G=()=>H.abort(),V.signal.addEventListener("abort",G);try{let F=await fetch(j,{method:"GET",headers:{"User-Agent":J,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:X?"follow":"manual",signal:H.signal});if(clearTimeout(K),!X&&F.status>=300&&F.status<400)return`Redirect to: ${F.headers.get("location")}`;if(!F.ok)throw Error(`HTTP ${F.status}: ${F.statusText}`);let U=F.headers.get("content-type")||"",_=F.body?.getReader();if(!_)throw Error("Failed to read response body");let L=[],O=0;while(!0){let{done:f,value:N}=await _.read();if(f)break;if(O+=N.length,O>Q)throw _.cancel(),Error(`Response too large: exceeded ${Q} bytes`);L.push(N)}let D=new Uint8Array(O),q=0;for(let f of L)D.set(f,q),q+=f.length;let T=new TextDecoder("utf-8").decode(D),z;if(U.includes("text/html")||U.includes("application/xhtml"))z=
|
|
137
|
+
`).trim()}function R5($={}){let{timeoutMs:Z=30000,maxResponseBytes:Q=5000000,userAgent:J="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:W={},followRedirects:X=!0}=$;return async(j,Y,V)=>{let B;try{B=new URL(j)}catch{throw Error(`Invalid URL: ${j}`)}if(!["http:","https:"].includes(B.protocol))throw Error(`Invalid protocol: ${B.protocol}. Only http and https are supported.`);let H=new AbortController,K=setTimeout(()=>H.abort(),Z),G;if(V.signal)G=()=>H.abort(),V.signal.addEventListener("abort",G);try{let F=await fetch(j,{method:"GET",headers:{"User-Agent":J,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:X?"follow":"manual",signal:H.signal});if(clearTimeout(K),!X&&F.status>=300&&F.status<400)return`Redirect to: ${F.headers.get("location")}`;if(!F.ok)throw Error(`HTTP ${F.status}: ${F.statusText}`);let U=F.headers.get("content-type")||"",_=F.body?.getReader();if(!_)throw Error("Failed to read response body");let L=[],O=0;while(!0){let{done:f,value:N}=await _.read();if(f)break;if(O+=N.length,O>Q)throw _.cancel(),Error(`Response too large: exceeded ${Q} bytes`);L.push(N)}let D=new Uint8Array(O),q=0;for(let f of L)D.set(f,q),q+=f.length;let T=new TextDecoder("utf-8").decode(D),z;if(U.includes("text/html")||U.includes("application/xhtml"))z=Tz(T);else if(U.includes("application/json"))try{let f=JSON.parse(T);z=JSON.stringify(f,null,2)}catch{z=T}else z=T;let A=[`URL: ${j}`,`Content-Type: ${U}`,`Size: ${O} bytes`,"","--- Content ---",z.slice(0,50000)];if(z.length>50000)A.push(`
|
|
138
138
|
[Content truncated: showing first 50000 of ${z.length} characters]`);return A.push("","--- Analysis Request ---",`Prompt: ${Y}`),A.join(`
|
|
139
|
-
`)}catch(F){if(clearTimeout(K),F instanceof Error){if(F.name==="AbortError")throw Error(`Request timed out after ${Z}ms`);throw F}throw Error(`Fetch failed: ${String(F)}`)}finally{if(V.signal&&G)V.signal.removeEventListener("abort",G)}}}function F7($={}){return d8($)}function M5($={}){return{readFile:q5($.fileRead),search:f5($.search),bash:F7($.bash),webFetch:R5($.webFetch),applyPatch:l8($.applyPatch),editor:i8($.editor)}}var Tz={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"},r8=[{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 mY($,Z){if(!Z||Z.length===0)return!0;let Q=$.toLowerCase();return Z.some((J)=>Q.includes(J.toLowerCase()))}function Nz($,Z,Q,J){if($.mode&&$.mode!=="any"&&$.mode!==J)return!1;return mY(Z,$.providerIdIncludes)&&mY(Q,$.modelIdIncludes)}function n8($,Z,Q,J){if(!J||J.length===0)return{};let W=new Map;for(let j of J){if(!Nz(j,$,Z,Q))continue;for(let Y of j.disableTools??[])W.set(Y,!1);for(let Y of j.enableTools??[])W.set(Y,!0)}let X={};for(let[j,Y]of W.entries())X[Tz[j]]=Y;return X}var K1={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 X$($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function cY($){if($!=="yolo")return{};let Z={enabled:!0,autoApprove:!0},Q={"*":Z};for(let J of x2)Q[J]=Z;return Q}function uY($,Z){let Q=K1[$],{enableSpawnAgent:J,enableAgentTeams:W,...X}=Q;return d2({...X,...Z})}import{createTool as uT,zodToJsonSchema as dT}from"@cline/shared";import{z as R7}from"zod";J1();import{createAgentRuntime as wT}from"@cline/agents";import{createContributionRegistry as PT,isLikelyAuthError as ST,mergeModelOptions as VV}from"@cline/shared";import{createGateway as yz,createHandlerAsync as kz,hasRegisteredHandler as hz,MODEL_COLLECTIONS_BY_PROVIDER_ID as Iz,normalizeProviderId as xz}from"@cline/llms";import{EMPTY_CONTENT_TEXT as fz}from"@cline/shared";function Rz($){let Z=Ez($.content),Q=[],J=$.id??Pz(),W=0,X=[],j=$.role==="user"&&typeof $.metadata?.userRunSpan==="number"&&Number.isInteger($.metadata.userRunSpan)&&$.metadata.userRunSpan>=0?$.metadata.userRunSpan:void 0,Y=!1,V=(K)=>{if(j===void 0)return $.metadata;if(K&&!Y)return Y=!0,$.metadata;return{...$.metadata,userRunSpan:0}},B=()=>{if(X.length===0)return;let K=W===0?J:`${J}_part_${W}`;W+=1,Q.push({id:K,role:$.role,content:X.map(Cz),createdAt:$.ts??Date.now(),metadata:V(!0),modelInfo:$.modelInfo,metrics:dY($.metrics)}),X=[]};if(Z.length===0)return Q.push({id:J,role:$.role,content:[{type:"text",text:fz}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:dY($.metrics)}),Q;let H=Z.length===1&&Z[0].type==="tool_result";for(let K of Z){if(K.type!=="tool_result"){X.push(K);continue}B();let G=`_tool_${K.tool_use_id}`;Q.push({id:H||J.endsWith(G)?J:`${J}${G}`,role:"tool",content:[lY(K)],createdAt:$.ts??Date.now(),metadata:V(!1)})}return B(),Q}function E5($){return $.flatMap(Rz)}function Mz($){let Z=$.content.map(iY).filter((Q)=>Q!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:Z,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:wz($.metrics)}}function l2($){return $.map(Mz)}function C5($){let Z=[];for(let Q of $){let J=Q.content.map(iY).filter((j)=>j!==void 0),W=Q.role==="tool"?"user":Q.role,X=Z[Z.length-1];if(W==="user"&&J.length>0&&J.every((j)=>j.type==="tool_result")&&X?.role==="user"&&Array.isArray(X.content)&&X.content.every((j)=>j.type==="tool_result")){X.content.push(...J);continue}Z.push({role:W,content:J})}return Z}function Ez($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function Cz($){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 lY($)}}function lY($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function iY($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let Z=$.metadata;return{type:"thinking",thinking:$.text,signature:Z?.signature,details:Z?.details}}case"image":return typeof $.image==="string"?{type:"image",data:$.image,mediaType:$.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:$.path,content:$.content};case"tool-call":{let Z=$.metadata;return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:Z?.thoughtSignature??Z?.signature}}case"tool-result":{let Z=$.output,Q=typeof Z==="string"?Z:Array.isArray(Z)?Z:JSON.stringify(Z);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:Q,is_error:$.isError}}}}function dY($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function wz($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var pY=0;function Pz(){return pY+=1,`msg_${Date.now().toString(36)}_${pY.toString(36)}`}function Sz($){switch($.type){case"text":return[{type:"text-delta",text:$.text}];case"reasoning":return[{type:"reasoning-delta",text:$.reasoning,metadata:$.signature?{thoughtSignature:$.signature,details:$.details}:{details:$.details}}];case"tool_calls":{let Z=$.tool_call.function,Q=Z.arguments;return[{type:"tool-call-delta",toolCallId:$.tool_call.call_id??Z.id,toolName:Z.name,inputText:typeof Q==="string"?Q:void 0,input:typeof Q==="string"?void 0:Q,...$.signature?{metadata:{thoughtSignature:$.signature}}:{}}]}case"usage":return[{type:"usage",usage:{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,reasoningTokenCount:$.thoughtsTokenCount,totalCost:$.totalCost}}];case"done":return[{type:"finish",reason:bz($),error:$.error}];default:return[]}}function bz($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function rY($){return{async*stream(Z){let Q=!1,J=!1;try{let W=typeof $==="function"?await $():$;W.setAbortSignal?.(Z.signal);let X=C5(Z.messages),j=Z.tools.map((Y)=>({name:Y.name,description:Y.description,inputSchema:Y.inputSchema}));for await(let Y of W.createMessage(Z.systemPrompt??"",X,j))for(let V of Sz(Y)){if(V.type==="finish")Q=!0;else if(V.type==="tool-call-delta")J=!0;yield V}if(!Q)yield{type:"finish",reason:J?"tool-calls":"stop"}}catch(W){if(!Q)yield{type:"finish",reason:Z.signal?.aborted?"aborted":"error",error:W instanceof Error?W.message:String(W)}}}}}function gz($){let Z=Object.fromEntries(Object.entries($).filter(([,Q])=>Q!==void 0));return Object.keys(Z).length>0?Z:void 0}function vz($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function mz($){let Z={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(vz($))Object.assign(Z,{apiVersion:$.azure?.apiVersion,useIdentity:$.azure?.useIdentity});if($.providerId==="bedrock")Object.assign(Z,{authentication:$.aws?.authentication,profile:$.aws?.profile,accessKeyId:$.aws?.accessKey,secretAccessKey:$.aws?.secretKey,sessionToken:$.aws?.sessionToken,usePromptCache:$.aws?.usePromptCache,useCrossRegionInference:$.useCrossRegionInference,useGlobalInference:$.useGlobalInference,endpoint:$.aws?.endpoint,customModelBaseId:$.aws?.customModelBaseId});if($.providerId==="vertex"){let Q=$.gcp?.region??$.region;Object.assign(Z,{project:$.gcp?.projectId,projectId:$.gcp?.projectId,location:Q,region:Q})}if($.providerId==="sapaicore")Object.assign(Z,$.sap);return gz(Z)}function cz($){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):void 0}function U7($){let Z=$.providerConfig,Q=Z?.knownModels?Z.knownModels:$.knownModels??Iz[$.providerId]?.models??void 0,J=cz(Z?.maxInputTokens),W=Z?.modelInfo&&Z.modelInfo.id===$.modelId?Z.modelInfo:void 0;if(J===void 0&&!W)return Q;return{...Q??{},[$.modelId]:{...Q?.[$.modelId],...J!==void 0?{contextWindow:J,maxInputTokens:J}:{},...W,id:$.modelId}}}function uz($){if(!$?.length)return;let Z=new Set;for(let Q of $)switch(Q){case"tools":case"reasoning":case"prompt-cache":case"images":Z.add(Q);break;case"structured_output":Z.add("structured-output");break;default:Z.add("text")}return Z.add("text"),[...Z]}function dz($,Z){return{id:$,name:Z.name??$,description:Z.description,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxOutputTokens:Z.maxTokens,capabilities:uz(Z.capabilities),reasoningOptions:Z.reasoningOptions,metadata:{family:Z.family,pricing:Z.pricing,status:Z.status,releaseDate:Z.releaseDate}}}function nY($,Z,Q){let J=$.providerConfig,W=J?.providerId===$.providerId?J:void 0,X={...W??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??W?.apiKey,baseUrl:$.baseUrl??W?.baseUrl,headers:$.headers??W?.headers,knownModels:U7($),maxOutputTokens:$.maxTokensPerTurn,temperature:$.temperature,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:Z,extensionContext:$.extensionContext};if(hz(xz(X.providerId)))return rY(()=>kz(X));return yz({fetch:X.fetch,providerConfigs:[{providerId:X.providerId,apiKey:X.apiKey,baseUrl:X.baseUrl,headers:X.headers,timeoutMs:X.timeoutMs,fetch:X.fetch,options:mz(X),models:X.knownModels?Object.entries(X.knownModels).map(([j,Y])=>dz(j,Y)):void 0}],logger:Z,telemetry:Q??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:X.providerId,modelId:X.modelId},{maxTokens:X.maxOutputTokens,temperature:X.temperature})}q0();import{createMediaBudgetState as pz,IMAGE_OMITTED_PLACEHOLDER as aY,normalizeUserInput as oY,resolveMediaBudget as lz,validateAndReserveImageMedia as iz}from"@cline/shared";var rz=8000,nz=50000,az=6000000,oz=200000,sz=12000,tz=65536,o8=2000,sY=40000,ez=8,D7={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},$T=new Set(["read","read_files"]),r$="[outdated - see the latest file content]",tY="Tool execution was interrupted before a result was produced.",eY=($)=>`
|
|
139
|
+
`)}catch(F){if(clearTimeout(K),F instanceof Error){if(F.name==="AbortError")throw Error(`Request timed out after ${Z}ms`);throw F}throw Error(`Fetch failed: ${String(F)}`)}finally{if(V.signal&&G)V.signal.removeEventListener("abort",G)}}}function F7($={}){return p8($)}function M5($={}){return{readFile:q5($.fileRead),search:f5($.search),bash:F7($.bash),webFetch:R5($.webFetch),applyPatch:i8($.applyPatch),editor:r8($.editor)}}var Nz={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"},n8=[{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 cY($,Z){if(!Z||Z.length===0)return!0;let Q=$.toLowerCase();return Z.some((J)=>Q.includes(J.toLowerCase()))}function fz($,Z,Q,J){if($.mode&&$.mode!=="any"&&$.mode!==J)return!1;return cY(Z,$.providerIdIncludes)&&cY(Q,$.modelIdIncludes)}function a8($,Z,Q,J){if(!J||J.length===0)return{};let W=new Map;for(let j of J){if(!fz(j,$,Z,Q))continue;for(let Y of j.disableTools??[])W.set(Y,!1);for(let Y of j.enableTools??[])W.set(Y,!0)}let X={};for(let[j,Y]of W.entries())X[Nz[j]]=Y;return X}var K1={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 X$($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function uY($){if($!=="yolo")return{};let Z={enabled:!0,autoApprove:!0},Q={"*":Z};for(let J of g2)Q[J]=Z;return Q}function dY($,Z){let Q=K1[$],{enableSpawnAgent:J,enableAgentTeams:W,...X}=Q;return p2({...X,...Z})}import{createTool as dT,zodToJsonSchema as pT}from"@cline/shared";import{z as R7}from"zod";J1();import{createAgentRuntime as PT}from"@cline/agents";import{createContributionRegistry as ST,isLikelyAuthError as bT,mergeModelOptions as BV}from"@cline/shared";import{createGateway as kz,createHandlerAsync as hz,hasRegisteredHandler as Iz,MODEL_COLLECTIONS_BY_PROVIDER_ID as xz,normalizeProviderId as gz}from"@cline/llms";import{EMPTY_CONTENT_TEXT as Rz}from"@cline/shared";function Mz($){let Z=Cz($.content),Q=[],J=$.id??Sz(),W=0,X=[],j=$.role==="user"&&typeof $.metadata?.userRunSpan==="number"&&Number.isInteger($.metadata.userRunSpan)&&$.metadata.userRunSpan>=0?$.metadata.userRunSpan:void 0,Y=!1,V=(K)=>{if(j===void 0)return $.metadata;if(K&&!Y)return Y=!0,$.metadata;return{...$.metadata,userRunSpan:0}},B=()=>{if(X.length===0)return;let K=W===0?J:`${J}_part_${W}`;W+=1,Q.push({id:K,role:$.role,content:X.map(wz),createdAt:$.ts??Date.now(),metadata:V(!0),modelInfo:$.modelInfo,metrics:pY($.metrics)}),X=[]};if(Z.length===0)return Q.push({id:J,role:$.role,content:[{type:"text",text:Rz}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:pY($.metrics)}),Q;let H=Z.length===1&&Z[0].type==="tool_result";for(let K of Z){if(K.type!=="tool_result"){X.push(K);continue}B();let G=`_tool_${K.tool_use_id}`;Q.push({id:H||J.endsWith(G)?J:`${J}${G}`,role:"tool",content:[iY(K)],createdAt:$.ts??Date.now(),metadata:V(!1)})}return B(),Q}function E5($){return $.flatMap(Mz)}function Ez($){let Z=$.content.map(rY).filter((Q)=>Q!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:Z,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:Pz($.metrics)}}function i2($){return $.map(Ez)}function C5($){let Z=[];for(let Q of $){let J=Q.content.map(rY).filter((j)=>j!==void 0),W=Q.role==="tool"?"user":Q.role,X=Z[Z.length-1];if(W==="user"&&J.length>0&&J.every((j)=>j.type==="tool_result")&&X?.role==="user"&&Array.isArray(X.content)&&X.content.every((j)=>j.type==="tool_result")){X.content.push(...J);continue}Z.push({role:W,content:J})}return Z}function Cz($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function wz($){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 iY($)}}function iY($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function rY($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let Z=$.metadata;return{type:"thinking",thinking:$.text,signature:Z?.signature,details:Z?.details}}case"image":return typeof $.image==="string"?{type:"image",data:$.image,mediaType:$.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:$.path,content:$.content};case"tool-call":{let Z=$.metadata;return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:Z?.thoughtSignature??Z?.signature}}case"tool-result":{let Z=$.output,Q=typeof Z==="string"?Z:Array.isArray(Z)?Z:JSON.stringify(Z);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:Q,is_error:$.isError}}}}function pY($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function Pz($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var lY=0;function Sz(){return lY+=1,`msg_${Date.now().toString(36)}_${lY.toString(36)}`}function bz($){switch($.type){case"text":return[{type:"text-delta",text:$.text}];case"reasoning":return[{type:"reasoning-delta",text:$.reasoning,metadata:$.signature?{thoughtSignature:$.signature,details:$.details}:{details:$.details}}];case"tool_calls":{let Z=$.tool_call.function,Q=Z.arguments;return[{type:"tool-call-delta",toolCallId:$.tool_call.call_id??Z.id,toolName:Z.name,inputText:typeof Q==="string"?Q:void 0,input:typeof Q==="string"?void 0:Q,...$.signature?{metadata:{thoughtSignature:$.signature}}:{}}]}case"usage":return[{type:"usage",usage:{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,reasoningTokenCount:$.thoughtsTokenCount,totalCost:$.totalCost}}];case"done":return[{type:"finish",reason:yz($),error:$.error}];default:return[]}}function yz($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function nY($){return{async*stream(Z){let Q=!1,J=!1;try{let W=typeof $==="function"?await $():$;W.setAbortSignal?.(Z.signal);let X=C5(Z.messages),j=Z.tools.map((Y)=>({name:Y.name,description:Y.description,inputSchema:Y.inputSchema}));for await(let Y of W.createMessage(Z.systemPrompt??"",X,j))for(let V of bz(Y)){if(V.type==="finish")Q=!0;else if(V.type==="tool-call-delta")J=!0;yield V}if(!Q)yield{type:"finish",reason:J?"tool-calls":"stop"}}catch(W){if(!Q)yield{type:"finish",reason:Z.signal?.aborted?"aborted":"error",error:W instanceof Error?W.message:String(W)}}}}}function vz($){let Z=Object.fromEntries(Object.entries($).filter(([,Q])=>Q!==void 0));return Object.keys(Z).length>0?Z:void 0}function mz($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function cz($){let Z={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(mz($))Object.assign(Z,{apiVersion:$.azure?.apiVersion,useIdentity:$.azure?.useIdentity});if($.providerId==="bedrock")Object.assign(Z,{authentication:$.aws?.authentication,profile:$.aws?.profile,accessKeyId:$.aws?.accessKey,secretAccessKey:$.aws?.secretKey,sessionToken:$.aws?.sessionToken,usePromptCache:$.aws?.usePromptCache,useCrossRegionInference:$.useCrossRegionInference,useGlobalInference:$.useGlobalInference,endpoint:$.aws?.endpoint,customModelBaseId:$.aws?.customModelBaseId});if($.providerId==="vertex"){let Q=$.gcp?.region??$.region;Object.assign(Z,{project:$.gcp?.projectId,projectId:$.gcp?.projectId,location:Q,region:Q})}if($.providerId==="sapaicore")Object.assign(Z,$.sap);return vz(Z)}function uz($){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):void 0}function U7($){let Z=$.providerConfig,Q=Z?.knownModels?Z.knownModels:$.knownModels??xz[$.providerId]?.models??void 0,J=uz(Z?.maxInputTokens),W=Z?.modelInfo&&Z.modelInfo.id===$.modelId?Z.modelInfo:void 0;if(J===void 0&&!W)return Q;return{...Q??{},[$.modelId]:{...Q?.[$.modelId],...J!==void 0?{contextWindow:J,maxInputTokens:J}:{},...W,id:$.modelId}}}function dz($){if(!$?.length)return;let Z=new Set;for(let Q of $)switch(Q){case"tools":case"reasoning":case"prompt-cache":case"images":Z.add(Q);break;case"structured_output":Z.add("structured-output");break;default:Z.add("text")}return Z.add("text"),[...Z]}function pz($,Z){return{id:$,name:Z.name??$,description:Z.description,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxOutputTokens:Z.maxTokens,capabilities:dz(Z.capabilities),reasoningOptions:Z.reasoningOptions,metadata:{family:Z.family,pricing:Z.pricing,status:Z.status,releaseDate:Z.releaseDate}}}function aY($,Z,Q){let J=$.providerConfig,W=J?.providerId===$.providerId?J:void 0,X={...W??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??W?.apiKey,baseUrl:$.baseUrl??W?.baseUrl,headers:$.headers??W?.headers,knownModels:U7($),maxOutputTokens:$.maxTokensPerTurn,temperature:$.temperature,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:Z,extensionContext:$.extensionContext};if(Iz(gz(X.providerId)))return nY(()=>hz(X));return kz({fetch:X.fetch,providerConfigs:[{providerId:X.providerId,apiKey:X.apiKey,baseUrl:X.baseUrl,headers:X.headers,timeoutMs:X.timeoutMs,fetch:X.fetch,options:cz(X),models:X.knownModels?Object.entries(X.knownModels).map(([j,Y])=>pz(j,Y)):void 0}],logger:Z,telemetry:Q??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:X.providerId,modelId:X.modelId},{maxTokens:X.maxOutputTokens,temperature:X.temperature})}q0();import{createMediaBudgetState as lz,IMAGE_OMITTED_PLACEHOLDER as oY,normalizeUserInput as sY,resolveMediaBudget as iz,validateAndReserveImageMedia as rz}from"@cline/shared";var nz=8000,az=50000,oz=6000000,sz=200000,tz=12000,ez=65536,s8=2000,tY=40000,$T=8,D7={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},ZT=new Set(["read","read_files"]),r$="[outdated - see the latest file content]",eY="Tool execution was interrupted before a result was produced.",$V=($)=>`
|
|
140
140
|
|
|
141
141
|
...[truncated ${$} chars]...
|
|
142
142
|
|
|
143
|
-
`,
|
|
143
|
+
`,t8=($)=>`
|
|
144
144
|
|
|
145
145
|
...[truncated ${$} chars to fit provider request budget]...
|
|
146
146
|
|
|
147
|
-
`,
|
|
147
|
+
`,QT=($)=>`
|
|
148
148
|
|
|
149
149
|
...[assistant text truncated: omitted ${$} chars]...
|
|
150
150
|
|
|
151
|
-
|
|
151
|
+
`,ZV=($)=>`
|
|
152
152
|
|
|
153
153
|
...[assistant text truncated: omitted ${$} chars to fit provider request budget]...
|
|
154
154
|
|
|
155
|
-
`,
|
|
155
|
+
`,JT=($)=>`
|
|
156
156
|
|
|
157
157
|
...[assistant text truncated: omitted ${$} chars due to repeated tool-call markup]...
|
|
158
158
|
|
|
159
|
-
`;function JV($=process.env){return{maxToolResultChars:QV($[D7.maxToolResultChars]),maxTotalTextBytes:QV($[D7.maxTotalTextBytes]),minOutdatedRewriteBytes:WT($[D7.minOutdatedRewriteBytes])}}class L7{indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor($={}){this.maxToolResultChars=a8($.maxToolResultChars,rz),this.maxFileContentChars=a8($.maxFileContentChars,nz),this.maxTotalTextBytes=a8($.maxTotalTextBytes,az),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=a8($.maxAssistantTextChars,oz),this.maxAssistantToolMarkupChars=a8($.maxAssistantToolMarkupChars,sz),this.minOutdatedRewriteBytes=XT($.minOutdatedRewriteBytes,tz)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Q=this.addMissingToolResults($).map((W)=>{if(!Array.isArray(W.content)){if(W.role==="user"&&typeof W.content==="string"){let Y=oY(W.content);if(Y!==W.content)return{...W,content:Y}}if(W.role==="assistant"&&typeof W.content==="string"){let Y=this.truncateAssistantText(W.content);if(Y!==W.content)return{...W,content:Y}}return W}let X=!1,j=W.content.map((Y)=>{let V=this.transformBlock(Y,W.role);if(V!==Y)X=!0;return V});return X?{...W,content:j}:W}),J=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(J)}transformBlock($,Z){if(Z==="user"&&$.type==="text"&&typeof $.text==="string"){let W=oY($.text);if(W!==$.text)return{...$,text:W};return $}if(Z==="assistant"&&$.type==="text"&&typeof $.text==="string"){let W=this.truncateAssistantText($.text);return W===$.text?$:{...$,text:W}}if($.type==="file"){let W=i2($.content,this.maxFileContentChars,eY);return W===$.content?$:{...$,content:W}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),J=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let W=this.committedOutdatedRewrites.get($.tool_use_id);if(W&&W.size>0){let j=this.getReadLocators($).filter((Y)=>W.has(this.toReadLocatorKey(Y))&&this.isOutdatedReadLocator(Y,$.tool_use_id));if(j.length>0)J=this.replaceOutdatedReadContent(J,j)}}return J=this.truncateToolResultContent(J),J===$.content?$:{...$,content:J}}reindex($){let Z=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!Z)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let J=$[Q];if(!Array.isArray(J.content))continue;for(let W=0;W<J.content.length;W++){let X=J.content[W];if(X.type==="file")this.latestFullContentOwnerByPathCache.set(X.path,`file:${Q}:${W}`);else if(X.type==="tool_use"){let j=X.name.toLowerCase();if(this.toolNameByIdCache.set(X.id,j),this.isReadTool(j)){let Y=this.extractLocatorsFromReadToolInput(X.input);if(Y.length>0)this.readLocatorsByToolUseIdCache.set(X.id,Y)}}else if(X.type==="tool_result"){let j=this.resolveToolName(X);if(!this.isReadTool(j)||X.is_error===!0)continue;let Y=this.getReadLocators(X);for(let V of Y)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),X.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,X.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let Z=new Map,Q=new Set,J=0;for(let W of $){if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type!=="tool_result"||X.is_error===!0)continue;let j=this.resolveToolName(X);if(!this.isReadTool(j))continue;Q.add(X.tool_use_id);let Y=this.committedOutdatedRewrites.get(X.tool_use_id),V=new Set,B=new Set;for(let K of this.getReadLocators(X)){let G=this.toReadLocatorKey(K);if(!this.isOutdatedReadLocator(K,X.tool_use_id))continue;if(B.add(G),!Y?.has(G))V.add(G)}if(Y){for(let K of Y)if(!B.has(K))Y.delete(K);if(Y.size===0)this.committedOutdatedRewrites.delete(X.tool_use_id)}if(V.size===0)continue;let H=Z.get(X.tool_use_id);if(!H)H=new Set,Z.set(X.tool_use_id,H);for(let K of V)H.add(K);J+=this.estimateOutdatedReclaimBytes(X.content,V)}}for(let W of this.committedOutdatedRewrites.keys())if(!Q.has(W))this.committedOutdatedRewrites.delete(W);if(Z.size===0||J<this.minOutdatedRewriteBytes)return;for(let[W,X]of Z){let j=this.committedOutdatedRewrites.get(W);if(!j)j=new Set,this.committedOutdatedRewrites.set(W,j);for(let Y of X)j.add(Y)}}estimateOutdatedReclaimBytes($,Z){let Q=this.extractReadLocatorsFromToolResultContent($),J=Q.length>0&&Q.every((V)=>Z.has(this.toReadLocatorKey(V))),W=(V)=>{let B;try{B=JSON.parse(V)}catch{return J||Q.length===0?Q0(this.truncateMiddle(V)):0}let H=Array.isArray(B)?B:[B],K=0;for(let G of H){let F=this.extractLocatorFromResultEntry(G);if(F&&Z.has(this.toReadLocatorKey(F)))K+=this.providerBoundEntryBytes(G)}return K};if(typeof $==="string")return W($);let X=new Set(Z),j=0;for(let V of $)if(V.type==="text")j+=this.countOutdatedImageEntries(V.text,X);let Y=0;for(let V of $)if(V.type==="text")Y+=W(V.text);else if(V.type==="image"){if(j>0)j-=1,Y+=Q0(V.data)}else if(j$(V)){let B=this.extractLocatorFromResultEntry(V);if(B&&Z.has(this.toReadLocatorKey(B)))Y+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(Z.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))Y+=Q0(this.truncateMiddle(V.content))}return Y}providerBoundEntryBytes($){let Z=this.truncateNestedStrings($);return Q0(JSON.stringify(Z))}addMissingToolResults($){let Z=this.collectToolResultIds($),Q=[],J=new Map,W=!1,X=()=>{if(J.size===0)return;j(this.createMissingToolResultMessage(J)),J.clear(),W=!0},j=(Y)=>{let V=Q.at(-1);if(this.shouldMergeUserAfterToolResults(V,Y)){Q[Q.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(Y.content)]},W=!0;return}Q.push(Y)};for(let Y of $){if(this.isToolResultOnlyMessage(Y)){if(j(this.appendMissingToolResults(Y,J)),J.size>0)J.clear(),W=!0;continue}if(Array.isArray(Y.content)){let V=Y.content.filter((H)=>H.type==="tool_result"),B=Y.content.filter((H)=>H.type!=="tool_result");if(V.length>0){let H=this.appendMissingToolResults({...Y,role:"user",content:V},J);if(j(H),J.size>0)J.clear();W=!0}if(B.length>0||V.length===0){if(V.length===0)X();let H=V.length>0?{...Y,content:B}:Y;if(j(H),H.role==="assistant")this.trackMissingToolCalls(H,Z,J)}continue}X(),j(Y)}return X(),W?Q:$}appendMissingToolResults($,Z){if(Z.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(Z)]}}shouldMergeUserAfterToolResults($,Z){return $?.role==="user"&&Z.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(Z.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let J of Q.content)if(J.type==="tool_result")Z.add(J.tool_use_id)}return Z}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}trackMissingToolCalls($,Z,Q){if(!Array.isArray($.content))return;for(let J of $.content){if(J.type!=="tool_use"||Z.has(J.id))continue;Q.set(J.id,J.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([Z,Q])=>({type:"tool_result",tool_use_id:Z,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${tY} Tool: ${$}.`:tY}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let Z=$,Q=this.readResultLocatorCache.get(Z);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(Z,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let Z=$,Q=[],J=this.extractLocatorFromReadRequest(Z);if(J)Q.push(J);if(Array.isArray(Z.files))for(let W of Z.files){let X=this.extractLocatorFromReadRequest(W);if(X)Q.push(X)}if(Array.isArray(Z.file_paths)){for(let W of Z.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($);let Z=[];for(let Q of $){if(Q.type==="text"){Z.push(...this.tryParseReadLocators(Q.text));continue}if(j$(Q)){let J=this.extractLocatorFromResultEntry(Q);if(J)Z.push(J)}}return this.dedupeReadLocators(Z)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let J of $){let W=this.extractLocatorFromResultEntry(J);if(W)Q.push(W)}return this.dedupeReadLocators(Q)}let Z=this.extractLocatorFromResultEntry($);return Z?[Z]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(Q)return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)};if(typeof Z.query==="string"&&Z.query.length>0)return this.parseReadQuery(Z.query);return}extractPath($){let Z=[$.path,$.file_path,$.filePath];for(let Q of Z)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let Z=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!Z)return{path:$,startLine:null,endLine:null};return{path:Z[1],startLine:Number(Z[2]),endLine:Z[3]==="EOF"?null:Number(Z[3])}}dedupeReadLocators($){let Z=new Map;for(let Q of $)Z.set(this.toReadLocatorKey(Q),Q);return Array.from(Z.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,Z){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==Z)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==Z}replaceOutdatedReadContent($,Z){let Q=new Set(Z.map((X)=>this.toReadLocatorKey(X))),J=new Set(Z.map((X)=>X.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??r$;let W=0;for(let X of $)if(X.type==="text")W+=this.countOutdatedImageEntries(X.text,Q);return $.map((X)=>{if(X.type==="file"){if(!J.has(X.path))return X;return{...X,content:r$}}if(X.type==="image"){if(W===0)return X;return W-=1,{type:"text",text:r$}}if(j$(X))return this.replaceOutdatedReadEntry(X,Q);if(X.type!=="text")return X;let j=this.replaceOutdatedInString(X.text,Q);if(j===null)return{...X,text:r$};return j===X.text?X:{...X,text:j}})}countOutdatedImageEntries($,Z){let Q;try{Q=JSON.parse($)}catch{return 0}let J=Array.isArray(Q)?Q:[Q],W=0;for(let X of J){if(!X||typeof X!=="object")continue;let j=X,Y=this.extractLocatorFromResultEntry(j);if(!Y)continue;if(!Z.has(this.toReadLocatorKey(Y)))continue;if(j.result==="Successfully read image"||j.content==="Successfully read image")W+=1}return W}replaceOutdatedInString($,Z){let Q;try{Q=JSON.parse($)}catch{return null}let J=Array.isArray(Q)?Q.map((W)=>this.replaceOutdatedReadEntry(W,Z)):this.replaceOutdatedReadEntry(Q,Z);return JSON.stringify(J)}replaceOutdatedReadEntry($,Z){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!Z.has(this.toReadLocatorKey(Q)))return $;let J={...$};if(typeof J.result==="string")J.result=r$;else if(typeof J.content==="string")J.content=r$;else J.result=r$;return J}isReadTool($){return!!$&&$T.has($)}resolveToolName($){let Z=this.toolNameByIdCache.get($.tool_use_id);if(Z!==void 0)return Z;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((Z)=>{if(Z.type==="file"){let Q=this.truncateMiddle(Z.content);return Q===Z.content?Z:{...Z,content:Q}}if(Z.type==="text"){let Q=this.truncateMiddle(Z.text);return Q===Z.text?Z:{...Z,text:Q}}if(j$(Z))return this.truncateNestedStrings(Z);return Z})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let Z=!1,Q=$.map((J)=>{let W=this.truncateNestedStrings(J);if(W!==J)Z=!0;return W});return Z?Q:$}if($!==null&&typeof $==="object"){if(A7($))return $;let Z=!1,Q={};for(let[J,W]of Object.entries($)){let X=this.truncateNestedStrings(W);if(X!==W)Z=!0;Q[J]=X}return Z?Q:$}return $}truncateMiddle($){return i2($,this.maxToolResultChars,eY)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return i2($,this.maxAssistantToolMarkupChars,QT);return i2($,this.maxAssistantTextChars,ZT)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let Z=0;for(let Q of $.matchAll(JT))if(Z+=1,Z>=ez)return!0;return!1}truncateToTotalTextBudget($){let Z=this.countMessageTextBytes($);if(Z<=this.maxTotalTextBytes)return $;let Q=$.map((W)=>{if(!Array.isArray(W.content))return{...W};return{...W,content:W.content.map((X)=>YT(X))}}),J=this.collectTruncationCandidates(Q);for(let W of J){if(Z<=this.maxTotalTextBytes)break;let X=W.byteLength;if(X<=W.minBytes)continue;let j=Z-this.maxTotalTextBytes,Y=Math.max(W.minBytes,X-j),V=jT(W.get(),Y,W.makeMarker);W.set(V),Z-=X-Q0(V)}return Q}countMessageTextBytes($){let Z=0;for(let Q of $){if(typeof Q.content==="string"){Z+=Q0(Q.content);continue}for(let J of Q.content)if(J.type==="text")Z+=Q0(J.text);else if(J.type==="thinking")Z+=Q0(J.thinking);else if(J.type==="file")Z+=Q0(J.content);else if(J.type==="tool_use")Z+=w5(J.input);else if(J.type==="tool_result"){if(typeof J.content==="string")Z+=Q0(J.content);else for(let W of J.content)if(W.type==="text")Z+=Q0(W.text);else if(W.type==="file")Z+=Q0(W.content);else if(j$(W))Z+=w5(W)}}return Z}collectTruncationCandidates($){let Z=[],Q=[];for(let J of $){if(J.role==="assistant"&&typeof J.content==="string"){Z.push({byteLength:Q0(J.content),minBytes:sY,makeMarker:$V,get:()=>J.content,set:(W)=>{J.content=W}});continue}if(!Array.isArray(J.content))continue;for(let W of J.content){if(W.type==="tool_use"){P5(W.input,Q);continue}if(J.role==="assistant"&&W.type==="text"){Z.push({byteLength:Q0(W.text),minBytes:sY,makeMarker:$V,get:()=>W.text,set:(X)=>{W.text=X}});continue}if(W.type!=="tool_result")continue;if(typeof W.content==="string"){Z.push({byteLength:Q0(W.content),minBytes:o8,makeMarker:s8,get:()=>W.content,set:(X)=>{W.content=X}});continue}for(let X of W.content)if(X.type==="text")Z.push({byteLength:Q0(X.text),minBytes:o8,makeMarker:s8,get:()=>X.text,set:(j)=>{X.text=j}});else if(X.type==="file")Z.push({byteLength:Q0(X.content),minBytes:o8,makeMarker:s8,get:()=>X.content,set:(j)=>{X.content=j}});else if(j$(X))P5(X,Z)}}return Z.sort((J,W)=>W.byteLength-J.byteLength),Q.sort((J,W)=>W.byteLength-J.byteLength),[...Z,...Q]}applyMediaBudget($){let Z=this.resolveMediaBudget();if(Z.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&Z.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&Z.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=pz(),J=!1,W=$.map((X)=>{if(!Array.isArray(X.content))return X;let j=!1,Y=X.content.map((V)=>{let B=this.applyMediaBudgetToBlock(V,Z,Q);if(B!==V)j=!0;return B});if(!j)return X;return J=!0,{...X,content:Y}});return J?W:$}resolveMediaBudget(){return lz(this.mediaBudget)}applyMediaBudgetToBlock($,Z,Q){if(_7($))return this.limitImageContent($,Z,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let J=!1,W=$.content.map((X)=>{let j=this.applyMediaBudgetToToolResultEntry(X,Z,Q);if(j!==X)J=!0;return j});return J?{...$,content:W}:$}applyMediaBudgetToToolResultEntry($,Z,Q){if(_7($))return this.limitImageContent($,Z,Q);if(j$($))return this.limitNestedMedia($,Z,Q);return $}limitNestedMedia($,Z,Q){if(_7($)){let J=this.limitImageContent($,Z,Q);return J.type==="text"?J.text:J}if(Array.isArray($)){let J=!1,W=$.map((X)=>{let j=this.limitNestedMedia(X,Z,Q);if(j!==X)J=!0;return j});return J?W:$}if($!==null&&typeof $==="object"){let J=!1,W={};for(let[X,j]of Object.entries($)){let Y=this.limitNestedMedia(j,Z,Q);if(Y!==j)J=!0;W[X]=Y}return J?W:$}return $}limitImageContent($,Z,Q){if(!WV($))return{type:"text",text:aY};let J=iz($.mediaType,$.data,{maxImageEncodedBytes:Z.maxImageEncodedBytes,maxImageDecodedBytes:Z.maxImageDecodedBytes,maxTotalMediaBytes:Z.maxTotalMediaBytes},Q);if(!J.ok)return{type:"text",text:aY};return{...$,data:J.base64,mediaType:J.mediaType}}}var ZV=String.raw`[\|\uFF5C]`,JT=new RegExp(String.raw`<\s*(?:${ZV}\s*)?DSML\s*(?:${ZV}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function Q0($){return Buffer.byteLength($,"utf8")}function QV($){if($===void 0)return;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>0?Z:void 0}function WT($){if($===void 0)return;let Z=$.trim().toLowerCase();if(Z==="infinity"||Z==="disable")return Number.POSITIVE_INFINITY;let Q=Number.parseInt($,10);return Number.isFinite(Q)&&Q>=0?Q:void 0}function a8($,Z){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):Z}function XT($,Z){if(typeof $!=="number"||Number.isNaN($)||$<0)return Z;return Number.isFinite($)?Math.floor($):$}function i2($,Z,Q){if($.length<=Z)return $;let J=Q($.length-Z),W=Math.max(0,Math.floor((Z-J.length)/2)),X=Math.max(0,$.length-W*2),j=Q(X),Y=Math.max(0,Math.floor((Z-j.length)/2)),V=$.slice(0,Y),B=Y>0?$.slice(-Y):"";return`${V}${j}${B}`}function jT($,Z,Q){if(Q0($)<=Z)return $;let J=0,W=$.length,X=i2($,0,Q);while(J<=W){let j=J+W>>>1,Y=i2($,j,Q);if(Q0(Y)<=Z)X=Y,J=j+1;else W=j-1}return X}function YT($){if($.type==="tool_use")return{...$,input:S5($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((Z)=>j$(Z)?S5(Z):{...Z})}}function j$($){if($===null||typeof $!=="object")return!1;let Z=$.type;return Z!=="text"&&Z!=="image"&&Z!=="file"}function _7($){return $!==null&&typeof $==="object"&&$.type==="image"}function WV($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function A7($){return WV($)}function w5($){if(typeof $==="string")return Q0($);if(Array.isArray($)){let Z=0;for(let Q of $)Z+=w5(Q);return Z}if($!==null&&typeof $==="object"){if(A7($))return 0;let Z=0;for(let Q of Object.values($))Z+=w5(Q);return Z}return 0}function P5($,Z){if(Array.isArray($)){$.forEach((Q,J)=>{if(typeof Q==="string")Z.push({byteLength:Q0(Q),minBytes:o8,makeMarker:s8,get:()=>$[J],set:(W)=>{$[J]=W}});else P5(Q,Z)});return}if($!==null&&typeof $==="object"){if(A7($))return;let Q=$;for(let J of Object.keys(Q)){let W=Q[J];if(typeof W==="string")Z.push({byteLength:Q0(W),minBytes:o8,makeMarker:s8,get:()=>Q[J],set:(X)=>{Q[J]=X}});else P5(W,Z)}}}function S5($){if(Array.isArray($))return $.map(S5);if($!==null&&typeof $==="object"){let Z={};for(let[Q,J]of Object.entries($))Z[Q]=S5(J);return Z}return $}function O7(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class q7{messages=[];conversationId=O7();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=O7(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=O7(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function XV($){let{agentConfig:Z}=$,Q=VT(Z),J=BT(Z),W=$.hooks,X=HT(Z.maxParallelToolCalls);return{sessionId:$.sessionId??Z.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??Z.systemPrompt,messageModelInfo:J,model:$.model,modelOptions:Q,tools:$.tools,hooks:W,prepareTurn:$.prepareTurn,consumePendingUserMessage:Z.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??Z.logger,telemetry:$.telemetry??Z.telemetry,initialMessages:$.initialMessages,completionPolicy:Z.completionPolicy,maxIterations:Z.maxIterations,toolExecution:X,toolPolicies:Z.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:Z.requestToolApproval}}function VT($){let Z={};if($.thinking!==void 0)Z.thinking=$.thinking;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)Z.maxTokensPerTurn=$.maxTokensPerTurn;if($.temperature!==void 0)Z.temperature=$.temperature;if($.apiTimeoutMs!==void 0)Z.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(Z).length>0?Z:void 0}function BT($){let Z=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:Z}}function HT($){if($===void 0)return;return $>=2?"parallel":"sequential"}function KT($){let Z={};if($.providerId!==void 0)Z.providerId=$.providerId;if($.modelId!==void 0)Z.modelId=$.modelId;if($.apiKey!==void 0)Z.apiKey=$.apiKey;if($.baseUrl!==void 0)Z.baseUrl=$.baseUrl;if($.headers!==void 0)Z.headers=$.headers;if($.providerConfig!==void 0)Z.providerConfig=$.providerConfig;if($.thinking===!1)return Z.thinking=!1,Z.reasoningEffort=null,Z.thinkingBudgetTokens=null,Z;if($.thinking===!0)Z.thinking=!0,Z.reasoningEffort=$.reasoningEffort??null,Z.thinkingBudgetTokens=null;else if($.reasoningEffort!==void 0)Z.thinking=!0,Z.reasoningEffort=$.reasoningEffort;if(typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0,Z.thinkingBudgetTokens=Math.trunc($.thinkingBudgetTokens);return Z}function r2($){let Z={...$},Q=Object.hasOwn($,"thinking"),J=Object.hasOwn($,"thinkingBudgetTokens");if($.thinking===!1||$.thinking===null)return Z.reasoningEffort=void 0,Z.thinkingBudgetTokens=void 0,Z;if(!Q&&J&&typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0;return Z}function GT(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function FT($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function z7($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(z7);let Z={};for(let Q of Object.keys($).sort())Z[Q]=z7($[Q]);return Z}function UT($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(z7($))}catch{return String($)}}function DT($,Z,Q,J){if(Z===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=Z,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===J.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=J.hardThreshold}}var jV={softThreshold:3,hardThreshold:5};class T7{config;state=GT();constructor($){this.config={softThreshold:$?.softThreshold??jV.softThreshold,hardThreshold:$?.hardThreshold??jV.hardThreshold}}inspect($){let Z=UT($.input),Q=DT(this.state,$.name,Z,this.config);if(Q.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Q.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){FT(this.state)}}class N7{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let Z=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&Z?Z:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let J=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(J),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Q,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!Z||Q<Z)return{action:"continue"};let W={iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details};this.options.onLimitTelemetry?.(W);let X=await LT(W,this.options.onLimitReached);if(X.action==="continue"){let j=X.guidance?.trim();if(j)this.options.appendRecoveryNotice(j,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:j}}return{action:"stop",reason:X.reason?.trim()||void 0,message:_T({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details,stopReason:X.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function _T($){let Z=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)Z.push(`Error: ${Q}`);let J=$.stopReason?.trim();if(J)Z.push(`Decision: ${J}`);return Z.push("Session state was preserved. Send a new prompt to resume from the latest state."),Z.join(" ")}async function LT($,Z){if(!Z)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await Z($)}catch(Q){return{action:"stop",reason:Q instanceof Error?Q.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function AT($){switch($){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return $;default:return}}function OT($){let Z=$.content.filter((Q)=>Q.type==="text");if(Z.length===0)return;return Z.map((Q)=>Q.text).join("")}function qT($){let Z=$.content.filter((Q)=>Q.type==="reasoning");if(Z.length===0)return;return{reasoning:Z.map((Q)=>Q.text).join(""),redacted:Z.some((Q)=>Q.redacted===!0)}}function zT($){return $.content.find((Z)=>Z.type==="tool-result")}function TT($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function NT($){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 f7{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:AT($.metadata?.reason),metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let Z=[],Q=OT($);if(Q!==void 0)Z.push({type:"content_end",contentType:"text",text:Q});let J=qT($);if(J!==void 0)Z.push({type:"content_end",contentType:"reasoning",reasoning:J.reasoning});return Z}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input}]}translateToolFinished($){let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=Z===void 0?void 0:Date.now()-Z;this.toolStartedAt.delete($.toolCall.toolCallId);let J=zT($.message),W=J?.output,X=NT(J);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:W,error:X,durationMs:Q}]}translateUsage($){let Z=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,J=$.cacheReadTokens-this.lastUsage.cacheReadTokens,W=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,X=this.lastUsage.totalCost??0,Y=($.totalCost??0)-X;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,Z),outputTokens:Math.max(0,Q),cacheReadTokens:J===0?void 0:Math.max(0,J),cacheWriteTokens:W===0?void 0:Math.max(0,W),cost:Y===0?void 0:Y,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let Z={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:TT($.status),text:$.outputText,iterations:$.iterations,usage:Z}]}}function bT($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function yT($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function kT($,Z){let Q=$.trim(),J=Z.map((W)=>W.trim()).filter(Boolean).join(`
|
|
159
|
+
`;function WV($=process.env){return{maxToolResultChars:JV($[D7.maxToolResultChars]),maxTotalTextBytes:JV($[D7.maxTotalTextBytes]),minOutdatedRewriteBytes:XT($[D7.minOutdatedRewriteBytes])}}class L7{indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor($={}){this.maxToolResultChars=o8($.maxToolResultChars,nz),this.maxFileContentChars=o8($.maxFileContentChars,az),this.maxTotalTextBytes=o8($.maxTotalTextBytes,oz),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=o8($.maxAssistantTextChars,sz),this.maxAssistantToolMarkupChars=o8($.maxAssistantToolMarkupChars,tz),this.minOutdatedRewriteBytes=jT($.minOutdatedRewriteBytes,ez)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Q=this.addMissingToolResults($).map((W)=>{if(!Array.isArray(W.content)){if(W.role==="user"&&typeof W.content==="string"){let Y=sY(W.content);if(Y!==W.content)return{...W,content:Y}}if(W.role==="assistant"&&typeof W.content==="string"){let Y=this.truncateAssistantText(W.content);if(Y!==W.content)return{...W,content:Y}}return W}let X=!1,j=W.content.map((Y)=>{let V=this.transformBlock(Y,W.role);if(V!==Y)X=!0;return V});return X?{...W,content:j}:W}),J=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(J)}transformBlock($,Z){if(Z==="user"&&$.type==="text"&&typeof $.text==="string"){let W=sY($.text);if(W!==$.text)return{...$,text:W};return $}if(Z==="assistant"&&$.type==="text"&&typeof $.text==="string"){let W=this.truncateAssistantText($.text);return W===$.text?$:{...$,text:W}}if($.type==="file"){let W=r2($.content,this.maxFileContentChars,$V);return W===$.content?$:{...$,content:W}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),J=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let W=this.committedOutdatedRewrites.get($.tool_use_id);if(W&&W.size>0){let j=this.getReadLocators($).filter((Y)=>W.has(this.toReadLocatorKey(Y))&&this.isOutdatedReadLocator(Y,$.tool_use_id));if(j.length>0)J=this.replaceOutdatedReadContent(J,j)}}return J=this.truncateToolResultContent(J),J===$.content?$:{...$,content:J}}reindex($){let Z=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!Z)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let J=$[Q];if(!Array.isArray(J.content))continue;for(let W=0;W<J.content.length;W++){let X=J.content[W];if(X.type==="file")this.latestFullContentOwnerByPathCache.set(X.path,`file:${Q}:${W}`);else if(X.type==="tool_use"){let j=X.name.toLowerCase();if(this.toolNameByIdCache.set(X.id,j),this.isReadTool(j)){let Y=this.extractLocatorsFromReadToolInput(X.input);if(Y.length>0)this.readLocatorsByToolUseIdCache.set(X.id,Y)}}else if(X.type==="tool_result"){let j=this.resolveToolName(X);if(!this.isReadTool(j)||X.is_error===!0)continue;let Y=this.getReadLocators(X);for(let V of Y)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),X.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,X.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let Z=new Map,Q=new Set,J=0;for(let W of $){if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type!=="tool_result"||X.is_error===!0)continue;let j=this.resolveToolName(X);if(!this.isReadTool(j))continue;Q.add(X.tool_use_id);let Y=this.committedOutdatedRewrites.get(X.tool_use_id),V=new Set,B=new Set;for(let K of this.getReadLocators(X)){let G=this.toReadLocatorKey(K);if(!this.isOutdatedReadLocator(K,X.tool_use_id))continue;if(B.add(G),!Y?.has(G))V.add(G)}if(Y){for(let K of Y)if(!B.has(K))Y.delete(K);if(Y.size===0)this.committedOutdatedRewrites.delete(X.tool_use_id)}if(V.size===0)continue;let H=Z.get(X.tool_use_id);if(!H)H=new Set,Z.set(X.tool_use_id,H);for(let K of V)H.add(K);J+=this.estimateOutdatedReclaimBytes(X.content,V)}}for(let W of this.committedOutdatedRewrites.keys())if(!Q.has(W))this.committedOutdatedRewrites.delete(W);if(Z.size===0||J<this.minOutdatedRewriteBytes)return;for(let[W,X]of Z){let j=this.committedOutdatedRewrites.get(W);if(!j)j=new Set,this.committedOutdatedRewrites.set(W,j);for(let Y of X)j.add(Y)}}estimateOutdatedReclaimBytes($,Z){let Q=this.extractReadLocatorsFromToolResultContent($),J=Q.length>0&&Q.every((V)=>Z.has(this.toReadLocatorKey(V))),W=(V)=>{let B;try{B=JSON.parse(V)}catch{return J||Q.length===0?Q0(this.truncateMiddle(V)):0}let H=Array.isArray(B)?B:[B],K=0;for(let G of H){let F=this.extractLocatorFromResultEntry(G);if(F&&Z.has(this.toReadLocatorKey(F)))K+=this.providerBoundEntryBytes(G)}return K};if(typeof $==="string")return W($);let X=new Set(Z),j=0;for(let V of $)if(V.type==="text")j+=this.countOutdatedImageEntries(V.text,X);let Y=0;for(let V of $)if(V.type==="text")Y+=W(V.text);else if(V.type==="image"){if(j>0)j-=1,Y+=Q0(V.data)}else if(j$(V)){let B=this.extractLocatorFromResultEntry(V);if(B&&Z.has(this.toReadLocatorKey(B)))Y+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(Z.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))Y+=Q0(this.truncateMiddle(V.content))}return Y}providerBoundEntryBytes($){let Z=this.truncateNestedStrings($);return Q0(JSON.stringify(Z))}addMissingToolResults($){let Z=this.collectToolResultIds($),Q=[],J=new Map,W=!1,X=()=>{if(J.size===0)return;j(this.createMissingToolResultMessage(J)),J.clear(),W=!0},j=(Y)=>{let V=Q.at(-1);if(this.shouldMergeUserAfterToolResults(V,Y)){Q[Q.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(Y.content)]},W=!0;return}Q.push(Y)};for(let Y of $){if(this.isToolResultOnlyMessage(Y)){if(j(this.appendMissingToolResults(Y,J)),J.size>0)J.clear(),W=!0;continue}if(Array.isArray(Y.content)){let V=Y.content.filter((H)=>H.type==="tool_result"),B=Y.content.filter((H)=>H.type!=="tool_result");if(V.length>0){let H=this.appendMissingToolResults({...Y,role:"user",content:V},J);if(j(H),J.size>0)J.clear();W=!0}if(B.length>0||V.length===0){if(V.length===0)X();let H=V.length>0?{...Y,content:B}:Y;if(j(H),H.role==="assistant")this.trackMissingToolCalls(H,Z,J)}continue}X(),j(Y)}return X(),W?Q:$}appendMissingToolResults($,Z){if(Z.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(Z)]}}shouldMergeUserAfterToolResults($,Z){return $?.role==="user"&&Z.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(Z.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let J of Q.content)if(J.type==="tool_result")Z.add(J.tool_use_id)}return Z}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}trackMissingToolCalls($,Z,Q){if(!Array.isArray($.content))return;for(let J of $.content){if(J.type!=="tool_use"||Z.has(J.id))continue;Q.set(J.id,J.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([Z,Q])=>({type:"tool_result",tool_use_id:Z,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${eY} Tool: ${$}.`:eY}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let Z=$,Q=this.readResultLocatorCache.get(Z);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(Z,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let Z=$,Q=[],J=this.extractLocatorFromReadRequest(Z);if(J)Q.push(J);if(Array.isArray(Z.files))for(let W of Z.files){let X=this.extractLocatorFromReadRequest(W);if(X)Q.push(X)}if(Array.isArray(Z.file_paths)){for(let W of Z.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($);let Z=[];for(let Q of $){if(Q.type==="text"){Z.push(...this.tryParseReadLocators(Q.text));continue}if(j$(Q)){let J=this.extractLocatorFromResultEntry(Q);if(J)Z.push(J)}}return this.dedupeReadLocators(Z)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let J of $){let W=this.extractLocatorFromResultEntry(J);if(W)Q.push(W)}return this.dedupeReadLocators(Q)}let Z=this.extractLocatorFromResultEntry($);return Z?[Z]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(Q)return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)};if(typeof Z.query==="string"&&Z.query.length>0)return this.parseReadQuery(Z.query);return}extractPath($){let Z=[$.path,$.file_path,$.filePath];for(let Q of Z)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let Z=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!Z)return{path:$,startLine:null,endLine:null};return{path:Z[1],startLine:Number(Z[2]),endLine:Z[3]==="EOF"?null:Number(Z[3])}}dedupeReadLocators($){let Z=new Map;for(let Q of $)Z.set(this.toReadLocatorKey(Q),Q);return Array.from(Z.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,Z){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==Z)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==Z}replaceOutdatedReadContent($,Z){let Q=new Set(Z.map((X)=>this.toReadLocatorKey(X))),J=new Set(Z.map((X)=>X.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??r$;let W=0;for(let X of $)if(X.type==="text")W+=this.countOutdatedImageEntries(X.text,Q);return $.map((X)=>{if(X.type==="file"){if(!J.has(X.path))return X;return{...X,content:r$}}if(X.type==="image"){if(W===0)return X;return W-=1,{type:"text",text:r$}}if(j$(X))return this.replaceOutdatedReadEntry(X,Q);if(X.type!=="text")return X;let j=this.replaceOutdatedInString(X.text,Q);if(j===null)return{...X,text:r$};return j===X.text?X:{...X,text:j}})}countOutdatedImageEntries($,Z){let Q;try{Q=JSON.parse($)}catch{return 0}let J=Array.isArray(Q)?Q:[Q],W=0;for(let X of J){if(!X||typeof X!=="object")continue;let j=X,Y=this.extractLocatorFromResultEntry(j);if(!Y)continue;if(!Z.has(this.toReadLocatorKey(Y)))continue;if(j.result==="Successfully read image"||j.content==="Successfully read image")W+=1}return W}replaceOutdatedInString($,Z){let Q;try{Q=JSON.parse($)}catch{return null}let J=Array.isArray(Q)?Q.map((W)=>this.replaceOutdatedReadEntry(W,Z)):this.replaceOutdatedReadEntry(Q,Z);return JSON.stringify(J)}replaceOutdatedReadEntry($,Z){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!Z.has(this.toReadLocatorKey(Q)))return $;let J={...$};if(typeof J.result==="string")J.result=r$;else if(typeof J.content==="string")J.content=r$;else J.result=r$;return J}isReadTool($){return!!$&&ZT.has($)}resolveToolName($){let Z=this.toolNameByIdCache.get($.tool_use_id);if(Z!==void 0)return Z;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((Z)=>{if(Z.type==="file"){let Q=this.truncateMiddle(Z.content);return Q===Z.content?Z:{...Z,content:Q}}if(Z.type==="text"){let Q=this.truncateMiddle(Z.text);return Q===Z.text?Z:{...Z,text:Q}}if(j$(Z))return this.truncateNestedStrings(Z);return Z})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let Z=!1,Q=$.map((J)=>{let W=this.truncateNestedStrings(J);if(W!==J)Z=!0;return W});return Z?Q:$}if($!==null&&typeof $==="object"){if(A7($))return $;let Z=!1,Q={};for(let[J,W]of Object.entries($)){let X=this.truncateNestedStrings(W);if(X!==W)Z=!0;Q[J]=X}return Z?Q:$}return $}truncateMiddle($){return r2($,this.maxToolResultChars,$V)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return r2($,this.maxAssistantToolMarkupChars,JT);return r2($,this.maxAssistantTextChars,QT)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let Z=0;for(let Q of $.matchAll(WT))if(Z+=1,Z>=$T)return!0;return!1}truncateToTotalTextBudget($){let Z=this.countMessageTextBytes($);if(Z<=this.maxTotalTextBytes)return $;let Q=$.map((W)=>{if(!Array.isArray(W.content))return{...W};return{...W,content:W.content.map((X)=>VT(X))}}),J=this.collectTruncationCandidates(Q);for(let W of J){if(Z<=this.maxTotalTextBytes)break;let X=W.byteLength;if(X<=W.minBytes)continue;let j=Z-this.maxTotalTextBytes,Y=Math.max(W.minBytes,X-j),V=YT(W.get(),Y,W.makeMarker);W.set(V),Z-=X-Q0(V)}return Q}countMessageTextBytes($){let Z=0;for(let Q of $){if(typeof Q.content==="string"){Z+=Q0(Q.content);continue}for(let J of Q.content)if(J.type==="text")Z+=Q0(J.text);else if(J.type==="thinking")Z+=Q0(J.thinking);else if(J.type==="file")Z+=Q0(J.content);else if(J.type==="tool_use")Z+=w5(J.input);else if(J.type==="tool_result"){if(typeof J.content==="string")Z+=Q0(J.content);else for(let W of J.content)if(W.type==="text")Z+=Q0(W.text);else if(W.type==="file")Z+=Q0(W.content);else if(j$(W))Z+=w5(W)}}return Z}collectTruncationCandidates($){let Z=[],Q=[];for(let J of $){if(J.role==="assistant"&&typeof J.content==="string"){Z.push({byteLength:Q0(J.content),minBytes:tY,makeMarker:ZV,get:()=>J.content,set:(W)=>{J.content=W}});continue}if(!Array.isArray(J.content))continue;for(let W of J.content){if(W.type==="tool_use"){P5(W.input,Q);continue}if(J.role==="assistant"&&W.type==="text"){Z.push({byteLength:Q0(W.text),minBytes:tY,makeMarker:ZV,get:()=>W.text,set:(X)=>{W.text=X}});continue}if(W.type!=="tool_result")continue;if(typeof W.content==="string"){Z.push({byteLength:Q0(W.content),minBytes:s8,makeMarker:t8,get:()=>W.content,set:(X)=>{W.content=X}});continue}for(let X of W.content)if(X.type==="text")Z.push({byteLength:Q0(X.text),minBytes:s8,makeMarker:t8,get:()=>X.text,set:(j)=>{X.text=j}});else if(X.type==="file")Z.push({byteLength:Q0(X.content),minBytes:s8,makeMarker:t8,get:()=>X.content,set:(j)=>{X.content=j}});else if(j$(X))P5(X,Z)}}return Z.sort((J,W)=>W.byteLength-J.byteLength),Q.sort((J,W)=>W.byteLength-J.byteLength),[...Z,...Q]}applyMediaBudget($){let Z=this.resolveMediaBudget();if(Z.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&Z.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&Z.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=lz(),J=!1,W=$.map((X)=>{if(!Array.isArray(X.content))return X;let j=!1,Y=X.content.map((V)=>{let B=this.applyMediaBudgetToBlock(V,Z,Q);if(B!==V)j=!0;return B});if(!j)return X;return J=!0,{...X,content:Y}});return J?W:$}resolveMediaBudget(){return iz(this.mediaBudget)}applyMediaBudgetToBlock($,Z,Q){if(_7($))return this.limitImageContent($,Z,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let J=!1,W=$.content.map((X)=>{let j=this.applyMediaBudgetToToolResultEntry(X,Z,Q);if(j!==X)J=!0;return j});return J?{...$,content:W}:$}applyMediaBudgetToToolResultEntry($,Z,Q){if(_7($))return this.limitImageContent($,Z,Q);if(j$($))return this.limitNestedMedia($,Z,Q);return $}limitNestedMedia($,Z,Q){if(_7($)){let J=this.limitImageContent($,Z,Q);return J.type==="text"?J.text:J}if(Array.isArray($)){let J=!1,W=$.map((X)=>{let j=this.limitNestedMedia(X,Z,Q);if(j!==X)J=!0;return j});return J?W:$}if($!==null&&typeof $==="object"){let J=!1,W={};for(let[X,j]of Object.entries($)){let Y=this.limitNestedMedia(j,Z,Q);if(Y!==j)J=!0;W[X]=Y}return J?W:$}return $}limitImageContent($,Z,Q){if(!XV($))return{type:"text",text:oY};let J=rz($.mediaType,$.data,{maxImageEncodedBytes:Z.maxImageEncodedBytes,maxImageDecodedBytes:Z.maxImageDecodedBytes,maxTotalMediaBytes:Z.maxTotalMediaBytes},Q);if(!J.ok)return{type:"text",text:oY};return{...$,data:J.base64,mediaType:J.mediaType}}}var QV=String.raw`[\|\uFF5C]`,WT=new RegExp(String.raw`<\s*(?:${QV}\s*)?DSML\s*(?:${QV}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function Q0($){return Buffer.byteLength($,"utf8")}function JV($){if($===void 0)return;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>0?Z:void 0}function XT($){if($===void 0)return;let Z=$.trim().toLowerCase();if(Z==="infinity"||Z==="disable")return Number.POSITIVE_INFINITY;let Q=Number.parseInt($,10);return Number.isFinite(Q)&&Q>=0?Q:void 0}function o8($,Z){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):Z}function jT($,Z){if(typeof $!=="number"||Number.isNaN($)||$<0)return Z;return Number.isFinite($)?Math.floor($):$}function r2($,Z,Q){if($.length<=Z)return $;let J=Q($.length-Z),W=Math.max(0,Math.floor((Z-J.length)/2)),X=Math.max(0,$.length-W*2),j=Q(X),Y=Math.max(0,Math.floor((Z-j.length)/2)),V=$.slice(0,Y),B=Y>0?$.slice(-Y):"";return`${V}${j}${B}`}function YT($,Z,Q){if(Q0($)<=Z)return $;let J=0,W=$.length,X=r2($,0,Q);while(J<=W){let j=J+W>>>1,Y=r2($,j,Q);if(Q0(Y)<=Z)X=Y,J=j+1;else W=j-1}return X}function VT($){if($.type==="tool_use")return{...$,input:S5($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((Z)=>j$(Z)?S5(Z):{...Z})}}function j$($){if($===null||typeof $!=="object")return!1;let Z=$.type;return Z!=="text"&&Z!=="image"&&Z!=="file"}function _7($){return $!==null&&typeof $==="object"&&$.type==="image"}function XV($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function A7($){return XV($)}function w5($){if(typeof $==="string")return Q0($);if(Array.isArray($)){let Z=0;for(let Q of $)Z+=w5(Q);return Z}if($!==null&&typeof $==="object"){if(A7($))return 0;let Z=0;for(let Q of Object.values($))Z+=w5(Q);return Z}return 0}function P5($,Z){if(Array.isArray($)){$.forEach((Q,J)=>{if(typeof Q==="string")Z.push({byteLength:Q0(Q),minBytes:s8,makeMarker:t8,get:()=>$[J],set:(W)=>{$[J]=W}});else P5(Q,Z)});return}if($!==null&&typeof $==="object"){if(A7($))return;let Q=$;for(let J of Object.keys(Q)){let W=Q[J];if(typeof W==="string")Z.push({byteLength:Q0(W),minBytes:s8,makeMarker:t8,get:()=>Q[J],set:(X)=>{Q[J]=X}});else P5(W,Z)}}}function S5($){if(Array.isArray($))return $.map(S5);if($!==null&&typeof $==="object"){let Z={};for(let[Q,J]of Object.entries($))Z[Q]=S5(J);return Z}return $}function O7(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class q7{messages=[];conversationId=O7();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=O7(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=O7(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function jV($){let{agentConfig:Z}=$,Q=BT(Z),J=HT(Z),W=$.hooks,X=KT(Z.maxParallelToolCalls);return{sessionId:$.sessionId??Z.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??Z.systemPrompt,messageModelInfo:J,model:$.model,modelOptions:Q,tools:$.tools,hooks:W,prepareTurn:$.prepareTurn,consumePendingUserMessage:Z.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??Z.logger,telemetry:$.telemetry??Z.telemetry,initialMessages:$.initialMessages,completionPolicy:Z.completionPolicy,maxIterations:Z.maxIterations,toolExecution:X,toolPolicies:Z.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:Z.requestToolApproval}}function BT($){let Z={};if($.thinking!==void 0)Z.thinking=$.thinking;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)Z.maxTokensPerTurn=$.maxTokensPerTurn;if($.temperature!==void 0)Z.temperature=$.temperature;if($.apiTimeoutMs!==void 0)Z.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(Z).length>0?Z:void 0}function HT($){let Z=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:Z}}function KT($){if($===void 0)return;return $>=2?"parallel":"sequential"}function GT($){let Z={};if($.providerId!==void 0)Z.providerId=$.providerId;if($.modelId!==void 0)Z.modelId=$.modelId;if($.apiKey!==void 0)Z.apiKey=$.apiKey;if($.baseUrl!==void 0)Z.baseUrl=$.baseUrl;if($.headers!==void 0)Z.headers=$.headers;if($.providerConfig!==void 0)Z.providerConfig=$.providerConfig;if($.thinking===!1)return Z.thinking=!1,Z.reasoningEffort=null,Z.thinkingBudgetTokens=null,Z;if($.thinking===!0)Z.thinking=!0,Z.reasoningEffort=$.reasoningEffort??null,Z.thinkingBudgetTokens=null;else if($.reasoningEffort!==void 0)Z.thinking=!0,Z.reasoningEffort=$.reasoningEffort;if(typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0,Z.thinkingBudgetTokens=Math.trunc($.thinkingBudgetTokens);return Z}function n2($){let Z={...$},Q=Object.hasOwn($,"thinking"),J=Object.hasOwn($,"thinkingBudgetTokens");if($.thinking===!1||$.thinking===null)return Z.reasoningEffort=void 0,Z.thinkingBudgetTokens=void 0,Z;if(!Q&&J&&typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0;return Z}function FT(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function UT($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function z7($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(z7);let Z={};for(let Q of Object.keys($).sort())Z[Q]=z7($[Q]);return Z}function DT($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(z7($))}catch{return String($)}}function _T($,Z,Q,J){if(Z===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=Z,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===J.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=J.hardThreshold}}var YV={softThreshold:3,hardThreshold:5};class T7{config;state=FT();constructor($){this.config={softThreshold:$?.softThreshold??YV.softThreshold,hardThreshold:$?.hardThreshold??YV.hardThreshold}}inspect($){let Z=DT($.input),Q=_T(this.state,$.name,Z,this.config);if(Q.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Q.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){UT(this.state)}}class N7{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let Z=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&Z?Z:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let J=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(J),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Q,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!Z||Q<Z)return{action:"continue"};let W={iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details};this.options.onLimitTelemetry?.(W);let X=await AT(W,this.options.onLimitReached);if(X.action==="continue"){let j=X.guidance?.trim();if(j)this.options.appendRecoveryNotice(j,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:j}}return{action:"stop",reason:X.reason?.trim()||void 0,message:LT({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details,stopReason:X.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function LT($){let Z=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)Z.push(`Error: ${Q}`);let J=$.stopReason?.trim();if(J)Z.push(`Decision: ${J}`);return Z.push("Session state was preserved. Send a new prompt to resume from the latest state."),Z.join(" ")}async function AT($,Z){if(!Z)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await Z($)}catch(Q){return{action:"stop",reason:Q instanceof Error?Q.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function OT($){switch($){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return $;default:return}}function qT($){let Z=$.content.filter((Q)=>Q.type==="text");if(Z.length===0)return;return Z.map((Q)=>Q.text).join("")}function zT($){let Z=$.content.filter((Q)=>Q.type==="reasoning");if(Z.length===0)return;return{reasoning:Z.map((Q)=>Q.text).join(""),redacted:Z.some((Q)=>Q.redacted===!0)}}function TT($){return $.content.find((Z)=>Z.type==="tool-result")}function NT($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function fT($){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 f7{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:OT($.metadata?.reason),metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let Z=[],Q=qT($);if(Q!==void 0)Z.push({type:"content_end",contentType:"text",text:Q});let J=zT($);if(J!==void 0)Z.push({type:"content_end",contentType:"reasoning",reasoning:J.reasoning});return Z}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input}]}translateToolFinished($){let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=Z===void 0?void 0:Date.now()-Z;this.toolStartedAt.delete($.toolCall.toolCallId);let J=TT($.message),W=J?.output,X=fT(J);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:W,error:X,durationMs:Q}]}translateUsage($){let Z=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,J=$.cacheReadTokens-this.lastUsage.cacheReadTokens,W=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,X=this.lastUsage.totalCost??0,Y=($.totalCost??0)-X;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,Z),outputTokens:Math.max(0,Q),cacheReadTokens:J===0?void 0:Math.max(0,J),cacheWriteTokens:W===0?void 0:Math.max(0,W),cost:Y===0?void 0:Y,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let Z={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:NT($.status),text:$.outputText,iterations:$.iterations,usage:Z}]}}function yT($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function kT($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function hT($,Z){let Q=$.trim(),J=Z.map((W)=>W.trim()).filter(Boolean).join(`
|
|
160
160
|
|
|
161
161
|
`);if(Q&&J)return`${Q}
|
|
162
162
|
|
|
163
|
-
${J}`;return Q||J}function hT($,Z){let Q=Z?.["*"]??{},J=Z?.[$]??{};return{...Q,...J}.enabled!==!1}function IT($,Z){return $.filter((Q)=>hT(Q.name,Z))}function xT($,Z){return e1(IT($,Z))}function gT($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return{};return{beforeRun:async(Q)=>{for(let J of Z){let W=await J.beforeRun?.(Q);if(W?.stop)return W}return},afterRun:async(Q)=>{for(let J of Z)await J.afterRun?.(Q)},beforeModel:async(Q)=>{let J=Q.request,W;for(let X of Z){let j=await X.beforeModel?.({...Q,request:J});if(!j)continue;if(j.stop)return j;W={...W,...j,options:VV(W?.options,j.options)},J={...J,...j.messages?{messages:j.messages}:{},...j.tools?{tools:j.tools}:{},...j.options?{options:VV(J.options,j.options)}:{}}}return W},afterModel:async(Q)=>{for(let J of Z){let W=await J.afterModel?.(Q);if(W?.stop)return W}return},beforeTool:async(Q)=>{let J=Q.input,W;for(let X of Z){let j=await X.beforeTool?.({...Q,input:J});if(!j)continue;if(j.stop||j.skip)return j;if(W={...W,...j},Object.hasOwn(j,"input"))J=j.input}return W},afterTool:async(Q)=>{let J=Q.result,W;for(let X of Z){let j=await X.afterTool?.({...Q,result:J});if(!j)continue;if(j.stop)return j;if(W={...W,...j},j.result)J=j.result}return W},onEvent:async(Q)=>{for(let J of Z)await J.onEvent?.(Q)}}}class Y${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 f7;shutdownCalled=!1;currentRunToolCalls=[];currentRunUsage={inputTokens:0,outputTokens:0};toolStartedAt=new Map;toolInputs=new Map;currentTurnSuccessfulTools=0;currentTurnFailedTools=0;currentTurnFailureDetails=[];activeTrackerWork=Promise.resolve();trackerAbortInFlight=!1;constructor($,Z={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=Z.logger??$.logger,this.telemetry=Z.telemetry??$.telemetry,this.createAgentRuntimeImpl=Z.createAgentRuntimeImpl??wT,this.conversation=new q7($.initialMessages),this.messageBuilder=new L7(JV()),this.contributionRegistry=PT({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 N7({maxConsecutiveMistakes:Q,onLimitReached:$.onConsecutiveMistakeLimitReached,onLimitTelemetry:(X)=>{xZ(this.telemetry,{ulid:this.config.sessionId??this.conversation.getConversationId(),model:this.config.modelId,provider:this.config.providerId,reason:X.reason,consecutiveMistakes:X.consecutiveMistakes,maxConsecutiveMistakes:X.maxConsecutiveMistakes,agentId:this.agentId,conversationId:this.conversation.getConversationId(),parentAgentId:this.parentAgentId,isSubagent:Boolean(this.parentAgentId)})},emit:(X)=>this.emitLegacyEvent(X),log:(X,j,Y)=>vT(this.logger,X,j,Y),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(X,j)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:X}]})}});let J=$.execution?.loopDetection;this.loopDetectionDisabled=J===!1;let W=J===!1||J===void 0?void 0:J;this.loopTracker=new T7(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 Z=new Set(this.config.tools.map((J)=>J.name)),Q=[...this.config.tools];for(let J of $)if(!Z.has(J.name))Q.push(J),Z.add(J.name);this.config={...this.config,tools:Q}}updateConnection($){let Z=r2($),Q={...this.config};if(Z.providerId!==void 0)Q.providerId=Z.providerId;if(Z.modelId!==void 0)Q.modelId=Z.modelId;if(Z.apiKey!==void 0)Q.apiKey=Z.apiKey;if(Z.baseUrl!==void 0)Q.baseUrl=Z.baseUrl;if(Z.headers!==void 0)Q.headers=Z.headers;if(Z.providerConfig!==void 0)Q.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"reasoningEffort"))Q.reasoningEffort=Z.reasoningEffort??void 0;if(Object.hasOwn(Z,"thinkingBudgetTokens"))Q.thinkingBudgetTokens=Z.thinkingBudgetTokens??void 0;if(Object.hasOwn(Z,"thinking")){if(Q.thinking=Z.thinking??void 0,Z.thinking===!1||Z.thinking===null)Q.reasoningEffort=void 0,Q.thinkingBudgetTokens=void 0}this.config=Q}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.messageBuilder.resetConversationState(),this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let Z=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=Z,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(Z)}async shutdown($,Z){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run($,Z,Q){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!1})}continue($,Z,Q){return this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let Z of this.contributionRegistry.getRegisteredRules()){let Q=await yT(Z);if(Q)$.push(Q)}return kT(this.config.systemPrompt,$)}executeRun($){let Z;return Z=this.executeRunWithAuthRetry($).finally(()=>{if(this.activeRunPromise===Z)this.activeRunPromise=null}),this.activeRunPromise=Z,Z}async executeRunWithAuthRetry($){let Z=await this.executeRunInternal($);if(Z.finishReason!=="error"||!this.config.onAuthError||!ST(Z.text))return Z;if(!await this.config.onAuthError().catch(()=>!1))return Z;let J=await this.executeRunInternal({isContinue:!0});return _X(this.telemetry,this.config.providerId,{recovered:J.finishReason!=="error"}),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 Z=new Date,Q=$.userMessage;if(Q!==void 0){let D=await cT(Q,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:D})}let J=await this.composeSystemPrompt(),W=nY(this.config,this.logger,this.telemetry),X=new Map;for(let D of this.contributionRegistry.getRegisteredTools())X.set(D.name,D);let j=xT([...X.values()],this.config.toolPolicies),Y=new Map;for(let D of j)Y.set(D.name,D);for(let D of this.config.tools)Y.set(D.name,D);let V=this.conversation.getConversationId(),B=BV(this.config),H=Array.from(Y.values()),K=E5(this.conversation.getMessages()),G=XV({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:W,logger:this.logger,telemetry:this.telemetry,tools:H,toolContextMetadata:{modelSupportsImages:B?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(B,H),initialMessages:K,systemPrompt:J}),F=this.createAgentRuntimeImpl(G);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let U=F.subscribe((D)=>{this.handleRuntimeEvent(D)}),_,L;try{if($.isContinue)_=await F.continue(void 0);else _=await F.run("")}catch(D){L=D instanceof Error?D:Error(String(D))}finally{U();try{await this.activeTrackerWork}catch(D){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:D})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(_&&_.messages.length>0){let D=l2(_.messages);this.conversation.replaceMessages(D)}let O=new Date;try{return this.buildLegacyResult({runResult:_,thrownError:L,startedAt:Z,endedAt:O})}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 $=gT([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((Z)=>Z.hooks)]);return{...$,beforeModel:async(Z)=>{let Q=await $.beforeModel?.(Z);if(Q?.stop)return Q;let J=Q?.messages??Z.request.messages,W=await this.prepareMessagesForModelRequest(J);return{...Q,messages:W}}}}createRuntimePrepareTurn($,Z){let Q=this.config.prepareTurn;if(!Q)return;return async(J)=>{let W=l2(J.messages),X=await this.prepareProviderMessagesForApi(W),j=await Q({agentId:J.agentId,conversationId:J.conversationId??this.conversation.getConversationId(),parentAgentId:J.parentAgentId??null,iteration:J.iteration,messages:W,apiMessages:X,abortSignal:J.signal??new AbortController().signal,systemPrompt:J.systemPrompt??"",tools:Z,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:J.emitStatusNotice});if(!j)return;return{...j.messages?{messages:E5(j.messages)}:{},...j.systemPrompt!==void 0?{systemPrompt:j.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let Z=await this.prepareProviderMessagesForApi(C5($));return E5(Z)}async prepareProviderMessagesForApi($){let Z=$,Q=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let J of Q)Z=await J.build(Z);return this.messageBuilder.buildForApi(Z)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=new Date,J=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let W=$.message.content.find((V)=>V.type==="tool-result"),X=W?.type==="tool-result"&&W.isError===!0,j=X?bT(W?.type==="tool-result"?W.output:void 0):void 0,Y={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:J,output:W?.type==="tool-result"?W.output:void 0,error:j,durationMs:Z===void 0?0:Q.getTime()-Z.getTime(),startedAt:Z??Q,endedAt:Q};if(this.currentRunToolCalls.push(Y),X){if(this.currentTurnFailedTools+=1,j)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${j}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let Z=this.currentTurnFailedTools,Q=this.currentTurnSuccessfulTools;if(Z>0&&Q===0){let J=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${Z} tool call(s) failed${J?`: ${J}`:""}`})}else if(Q>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let Z of this.eventAdapter.translate($))this.emitLegacyEvent(Z)}syncConversationFromRuntimeMessage($,Z){if($.length>0){this.conversation.replaceMessages(l2($));return}if(Z.length===0)return;let Q=new Set(this.conversation.getMessages().map((W)=>W.id).filter((W)=>typeof W==="string")),J=l2(Z).filter((W)=>!W.id||!Q.has(W.id));if(J.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...J])}emitLegacyEvent($){for(let Z of this.listeners)try{Z($)}catch(Q){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Q})}}inspectLoopForToolCall($,Z,Q){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let J=this.loopTracker.inspect({name:$,input:Z});if(J.kind==="ok")return;if(J.kind==="soft"){if(J.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:J.message}]});return}this.enqueueMistakeRecord({iteration:Q,reason:"tool_execution_failed",forceAtLimit:!0,details:J.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let Z=await this.mistakeTracker.record($);if(Z.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:Z.message}]}),this.activeRuntime?.abort(Z.reason??Z.message)})}buildLegacyResult($){let{runResult:Z,thrownError:Q,startedAt:J,endedAt:W}=$,X=W.getTime()-J.getTime(),j=Q?"error":mT(Z),Y=(Z?.status==="failed"?Z.error?.message:void 0)||Z?.outputText||"",V=Z?{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens>0?Z.usage.cacheReadTokens:void 0,cacheWriteTokens:Z.usage.cacheWriteTokens>0?Z.usage.cacheWriteTokens:void 0,totalCost:Z.usage.totalCost}:this.currentRunUsage,B=Z?l2(Z.messages):this.conversation.getMessages(),H=BV(this.config);if(Q)throw Q;return{text:Y,usage:V,messages:B,toolCalls:this.currentRunToolCalls,iterations:Z?.iterations??0,finishReason:j,model:{id:this.config.modelId,provider:this.config.providerId,info:H},startedAt:J,endedAt:W,durationMs:X}}}function vT($,Z,Q,J){if(!$)return;if(Z==="debug"){$.debug(Q,J);return}if(Z==="error"&&$.error){$.error(Q,J);return}let W=Z==="warn"?"warn":Z==="error"?"error":"info";$.log(Q,{...J,severity:W})}function mT($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function cT($,Z,Q,J){let{buildInitialUserContent:W}=await Promise.resolve().then(() => YV);return W($,Z,Q,J)}function BV($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let Z=U7($);if(Z?.[$.modelId])return Z[$.modelId];return}import{buildClineSystemPrompt as HV}from"@cline/shared";function KV($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return HV({ide:Z.clineIdeName?.trim()||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,rules:`# Team Teammate Role
|
|
164
|
-
${Q}`,platform:Z.clinePlatform,metadata:Z.workspaceMetadata})}function GV($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return HV({ide:Z.clineIdeName||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,overridePrompt:Q,metadata:Z.workspaceMetadata,platform:Z.clinePlatform})}function n2($){let Z={...$};return{getRuntimeConfig:()=>Z,getConnectionConfig:()=>({providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,onAuthError:Z.onAuthError,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,reasoningEffort:Z.reasoningEffort,thinkingBudgetTokens:Z.thinkingBudgetTokens,maxTokensPerTurn:Z.maxTokensPerTurn,temperature:Z.temperature}),updateConnectionDefaults:(Q)=>{Z={...Z,...Q}}}}function e8($){let Z=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?KV($.prompt,Z):GV($.prompt,Z);return{...$.configProvider.getConnectionConfig(),systemPrompt:Q,tools:$.tools,maxIterations:$.maxIterations??Z.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:Z.hooks,extensions:Z.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:Z.logger,role:$.role}}function a2($){let Z=e8($),Q=new Y$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);return Q}var pT=R7.object({systemPrompt:R7.string().describe("System prompt defining the sub-agent's behavior"),task:R7.string().describe("Task for the sub-agent to complete")});function o2($){return uT({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:dT(pT),execute:async(Z,Q)=>{let J=$.createSubAgentTools?await $.createSubAgentTools(Z,Q):$.subAgentTools??[],W=a2({kind:"subagent",prompt:Z.systemPrompt,configProvider:$.configProvider,tools:J,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),X=W.getAgentId(),j=W.getConversationId(),Y=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:X,conversationId:j,parentAgentId:Y,input:Z})}catch{}try{let V=await W.run(Z.task),B={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:j,parentAgentId:Y,input:Z,result:B,agentResult:V})}catch{}return B}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:j,parentAgentId:Y,input:Z,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as U0,TEAM_AWAIT_TIMEOUT_MS as lT,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as iT,TEAM_RUN_TEXT_PREVIEW_LIMIT as rT,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as nT,TeamAttachOutcomeFragmentInputSchema as FV,TeamAwaitRunsInputSchema as UV,TeamBroadcastInputSchema as DV,TeamBroadcastToolResultSchema as aT,TeamCancelRunInputSchema as _V,TeamCancelRunToolResultSchema as oT,TeamCleanupInputSchema as LV,TeamCleanupToolResultSchema as sT,TeamCreateOutcomeInputSchema as AV,TeamCreateOutcomeToolResultSchema as tT,TeamFinalizeOutcomeInputSchema as OV,TeamFinalizeOutcomeToolResultSchema as eT,TeamListOutcomesInputSchema as qV,TeamListRunsInputSchema as zV,TeamMailboxMessageToolResultSchema as $N,TeamMissionLogInputSchema as TV,TeamMissionLogToolResultSchema as ZN,TeamOutcomeFragmentToolResultSchema as NV,TeamOutcomeToolResultSchema as QN,TeamReadMailboxInputSchema as fV,TeamReviewOutcomeFragmentInputSchema as RV,TeamRunTaskInputSchema as MV,TeamRunTaskToolResultSchema as M7,TeamRunToolSummarySchema as E7,TeamSendMessageInputSchema as EV,TeamSendMessageToolResultSchema as JN,TeamShutdownTeammateInputSchema as CV,TeamSimpleAgentStatusToolResultSchema as wV,TeamSpawnTeammateInputSchema as PV,TeamStatusInputSchema as SV,TeamStatusToolResultSchema as WN,TeamTaskInputSchema as bV,TeamTaskToolResultSchema as $6,validateWithZod as h,zodToJsonSchema as D0}from"@cline/shared";function yV($,Z){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=Z)return Q;return`${Q.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function n$($,Z){if($===void 0)throw Error(`Missing required field: ${Z}`);return $}function XN($){let Z=$.result;if(!Z)return;return{textPreview:yV(Z.text,rT),iterations:Z.iterations,finishReason:Z.finishReason,durationMs:Z.durationMs,usage:{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens,cacheWriteTokens:Z.usage.cacheWriteTokens,totalCost:Z.usage.totalCost}}}function b5($){return $?.toISOString()}function C7($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:yV($.message,iT),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:b5($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:b5($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:b5($.heartbeatAt),lastProgressAt:b5($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:XN($)}}function jN($){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 y5=["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 kV($){let Z=[];if($.createBaseTools)Z.push(...$.createBaseTools());Z.push(...Z6({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1,includeSpawnTool:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:e8({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:Z,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function k5($){let Z=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,J=Z6({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),W=[];for(let X of $.restoredTeammates??[]){if($.runtime.isTeammateActive(X.agentId))continue;kV({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:X}),W.push(X.agentId)}return{tools:J,restoredFromPersistence:Q,restoredTeammates:W}}function Z6($){let Z=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,J=$.includeManagementTools??!0,W=[];if(Q)W.push(U0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:D0(PV),execute:async(j)=>{let Y=h(PV,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!Z)throw Error("Spawning teammates is disabled in this context.");let V={agentId:Y.agentId,rolePrompt:Y.rolePrompt};if(kV({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!J)$.onLeadToolsUnlocked?.(Z6({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return h(wV,{agentId:Y.agentId,status:"spawned"})}}));if(!J)return W;W.push(U0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:D0(CV),execute:async(j)=>{let Y=h(CV,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(Y.agentId,Y.reason),h(wV,{agentId:Y.agentId,status:"stopped"})}})),W.push(U0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:D0(SV),execute:async(j)=>{return h(SV,j),h(WN,$.runtime.getSnapshot())}})),W.push(U0({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:D0(bV),execute:async(j)=>{let Y=h(bV,j);switch(Y.action){case"create":{let V=new Set(nT.create??[]),B=Object.entries(j).filter(([K,G])=>V.has(K)&&G!=null).map(([K])=>K),H=$.runtime.createTask({title:n$(Y.title,"title"),description:n$(Y.description,"description"),dependsOn:Y.dependsOn,assignee:Y.assignee,createdBy:$.requesterId});return h($6,{action:"create",taskId:H.id,status:H.status,...B.length>0?{ignoredFields:B,note:`Ignored fields for action=create: ${B.join(", ")}`}:{}})}case"list":return h($6,{action:"list",tasks:$.runtime.listTaskItems({status:Y.status,assignee:Y.assignee})});case"claim":{let V=$.runtime.claimTask(n$(Y.taskId,"taskId"),$.requesterId);return h($6,{action:"claim",taskId:V.id,status:V.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_task with action=complete when done."})}case"complete":{let V=$.runtime.completeTask(n$(Y.taskId,"taskId"),$.requesterId,n$(Y.summary,"summary"));return h($6,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(n$(Y.taskId,"taskId"),$.requesterId,n$(Y.reason,"reason"));return h($6,{action:"block",taskId:V.id,status:V.status})}}}}));let X=new Map;return W.push(U0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:D0(MV),execute:async(j)=>{let Y=h(MV,j);if(Y.runMode==="async"){let H=$.runtime.startTeammateRun(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0});return h(M7,{agentId:Y.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${Y.agentId} and queued as ${H.id}.`,runId:H.id})}let V=X.get(Y.agentId);if(V){let H=await V;return h(M7,{...H,status:"joined",deduped:!0,message:`Task for ${Y.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let B=$.runtime.routeToTeammate(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0}).then((H)=>h(M7,{agentId:Y.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${Y.agentId} and completed in sync mode.`,text:H.text,iterations:H.iterations})).finally(()=>{X.delete(Y.agentId)});return X.set(Y.agentId,B),await B}})),W.push(U0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:D0(_V),execute:async(j)=>{let Y=h(_V,j),V=$.runtime.cancelRun(Y.runId,Y.reason);return h(oT,{runId:V.id,status:V.status})}})),W.push(U0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:D0(zV),execute:async(j)=>h(E7.array(),$.runtime.listRuns(h(zV,j)).map(C7))})),W.push(U0({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:D0(UV),timeoutMs:lT,execute:async(j)=>{let Y=h(UV,j);if(Y.runId){let H=await $.runtime.awaitRun(Y.runId);return jN(H),h(E7,C7(H))}let V=await $.runtime.awaitAllRuns(),B=V.filter((H)=>["failed","cancelled","interrupted"].includes(H.status));if(B.length>0){let H=B.map((K)=>`${K.id}:${K.status}${K.error?`(${K.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${H}`)}return h(E7.array(),V.map(C7))}})),W.push(U0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:D0(EV),execute:async(j)=>{let Y=h(EV,j),V=$.runtime.sendMessage($.requesterId,Y.toAgentId,Y.subject,Y.body,Y.taskId??void 0);return h(JN,{id:V.id,toAgentId:V.toAgentId})}})),W.push(U0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:D0(DV),execute:async(j)=>{let Y=h(DV,j),V=$.runtime.broadcast($.requesterId,Y.subject,Y.body,{taskId:Y.taskId??void 0});return h(aT,{delivered:V.length})}})),W.push(U0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:D0(fV),execute:async(j)=>{let Y=h(fV,j);return h($N.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:Y.unreadOnly,markRead:!0}))}})),W.push(U0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:D0(TV),execute:async(j)=>{let Y=h(TV,j),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:Y.taskId||void 0,kind:Y.kind,summary:Y.summary,evidence:Y.evidence?.length?Y.evidence:void 0,nextAction:Y.nextAction||void 0});return h(ZN,{id:V.id})}})),W.push(U0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:D0(LV),execute:async(j)=>{if(h(LV,j),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),h(sT,{status:"cleaned"})}})),W.push(U0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:D0(AV),execute:async(j)=>{let Y=h(AV,j),V=$.runtime.createOutcome({title:Y.title,requiredSections:Y.requiredSections,createdBy:$.requesterId});return h(tT,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),W.push(U0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:D0(FV),execute:async(j)=>{let Y=h(FV,j),V=$.runtime.attachOutcomeFragment({outcomeId:Y.outcomeId,section:Y.section,sourceAgentId:$.requesterId,sourceRunId:Y.sourceRunId||void 0,content:Y.content});return h(NV,{fragmentId:V.id,status:V.status})}})),W.push(U0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:D0(RV),execute:async(j)=>{let Y=h(RV,j),V=$.runtime.reviewOutcomeFragment({fragmentId:Y.fragmentId,reviewedBy:$.requesterId,approved:Y.approved});return h(NV,{fragmentId:V.id,status:V.status})}})),W.push(U0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:D0(OV),execute:async(j)=>{let Y=h(OV,j),V=$.runtime.finalizeOutcome(Y.outcomeId);return h(eT,{outcomeId:V.id,status:V.status})}})),W.push(U0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:D0(qV),execute:async(j)=>{return h(qV,j),h(QN.array(),$.runtime.listOutcomes())}})),W}function hV($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}var YN=[{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:o2({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...y5]}],VN={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function BN($){return $==="plan"||$==="yolo"?$:"act"}function xV($){let Z=BN($.mode),Q=K1[X$({mode:Z})],J=n8($.providerId??"",$.modelId??"",Z,r8);return{mode:Z,flags:{...Q,...J,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function IV($,Z){if(Z.disabledToolIds?.has($))return!1;let{flags:Q}=xV(Z);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let J=VN[$];return J?Q[J]===!0:!1}function HN($,Z){if($.id==="editor"){let{flags:Q}=xV(Z),J=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:IV($.id,Z),headlessToolNames:[J?"apply_patch":"editor"]}}return{...$,defaultEnabled:IV($.id,Z)}}function Q6($={}){return YN.map((Z)=>HN(Z,$))}function gV($={}){return Q6($).filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id)}function vV($){if(!$.enabled)return new Set;let Z=Q6($.availabilityContext),Q=new Set(Z.map((J)=>J.id));if(!$.allowlist||$.allowlist.length===0)return new Set(Z.filter((J)=>J.defaultEnabled).map((J)=>J.id));for(let J of $.allowlist)if(!Q.has(J))throw Error(`Unknown tool "${J}". Available tools: ${Z.map((W)=>W.id).join(", ")}`);return new Set($.allowlist)}function w7($,Z={}){return Q6(Z).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function mV($,Z={}){return w7($,Z)}import{getDefaultShell as KN}from"@cline/shared";function J6($={}){let{executorOptions:Z={},executors:Q,...J}=$,W=J.shell??Z.bash?.shell??KN(process.platform),X={...Z,bash:{...Z.bash,shell:W}},j={...M5(X),...Q??{}};return d2({...J,shell:W,executors:j})}function h5($){return $.trim().replace(/^\/+/,"").toLowerCase()}function GN($){if(!$||$.length===0)return;let Z=$.map(h5).filter((Q)=>Q.length>0);return Z.length>0?new Set(Z):void 0}function FN($,Z,Q){if(!Q)return!0;let J=h5($),W=h5(Z),X=J.includes(":")?J.split(":").at(-1)??J:J,j=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(J)||Q.has(W)||Q.has(X)||Q.has(j)}function W6($,Z){let Q=GN(Z);return[...$.getSnapshot("skill").entries()].map(([W,X])=>{let j=X.item;return{id:W,name:j.name.trim(),description:j.description?.trim(),disabled:j.disabled===!0,skill:j}}).filter((W)=>FN(W.id,W.name,Q))}function UN($,Z){return W6($,Z).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,J)=>Q.localeCompare(J))}function DN($,Z,Q){let J=h5(Z);if(!J)return{error:"Missing skill name."};let W=W6($,Q),X=W.find((H)=>H.id===J);if(X){let{skill:H}=X;if(H.disabled===!0)return{error:`Skill "${H.name}" is configured but disabled.`};return{id:X.id,skill:H}}let j=J.includes(":")?J.split(":").at(-1)??J:J,Y=W.filter(({id:H})=>{if(H===j)return!0;return H.endsWith(`:${j}`)}),V=Y.filter(({skill:H})=>H.disabled!==!0);if(V.length===1){let{id:H,skill:K}=V[0];return{id:H,skill:K}}if(V.length>1)return{error:`Skill "${Z}" is ambiguous. Use one of: ${V.map(({id:H})=>H).join(", ")}`};if(Y.length===1){let{skill:H}=Y[0];return{error:`Skill "${H.name}" is configured but disabled.`}}if(Y.length>1)return{error:`Skill "${Z}" is ambiguous, and all matches are disabled: ${Y.map(({id:H})=>H).join(", ")}`};let B=UN($,Q);return{error:B.length>0?`Skill "${Z}" not found. Available skills: ${B.join(", ")}`:"No skills are currently available."}}function P7($,Z=Promise.resolve(),Q){let J=new Set,W=async(X,j)=>{await Z;let Y=DN($,X,Q);if("error"in Y)return Y.error;let{id:V,skill:B}=Y;if(J.has(V))return`Skill "${B.name}" is already running.`;J.add(V);try{let H=j?.trim(),K=H?`
|
|
163
|
+
${J}`;return Q||J}function IT($,Z){let Q=Z?.["*"]??{},J=Z?.[$]??{};return{...Q,...J}.enabled!==!1}function xT($,Z){return $.filter((Q)=>IT(Q.name,Z))}function gT($,Z){return e1(xT($,Z))}function vT($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return{};return{beforeRun:async(Q)=>{for(let J of Z){let W=await J.beforeRun?.(Q);if(W?.stop)return W}return},afterRun:async(Q)=>{for(let J of Z)await J.afterRun?.(Q)},beforeModel:async(Q)=>{let J=Q.request,W;for(let X of Z){let j=await X.beforeModel?.({...Q,request:J});if(!j)continue;if(j.stop)return j;W={...W,...j,options:BV(W?.options,j.options)},J={...J,...j.messages?{messages:j.messages}:{},...j.tools?{tools:j.tools}:{},...j.options?{options:BV(J.options,j.options)}:{}}}return W},afterModel:async(Q)=>{for(let J of Z){let W=await J.afterModel?.(Q);if(W?.stop)return W}return},beforeTool:async(Q)=>{let J=Q.input,W;for(let X of Z){let j=await X.beforeTool?.({...Q,input:J});if(!j)continue;if(j.stop||j.skip)return j;if(W={...W,...j},Object.hasOwn(j,"input"))J=j.input}return W},afterTool:async(Q)=>{let J=Q.result,W;for(let X of Z){let j=await X.afterTool?.({...Q,result:J});if(!j)continue;if(j.stop)return j;if(W={...W,...j},j.result)J=j.result}return W},onEvent:async(Q)=>{for(let J of Z)await J.onEvent?.(Q)}}}class Y${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 f7;shutdownCalled=!1;currentRunToolCalls=[];currentRunUsage={inputTokens:0,outputTokens:0};toolStartedAt=new Map;toolInputs=new Map;currentTurnSuccessfulTools=0;currentTurnFailedTools=0;currentTurnFailureDetails=[];activeTrackerWork=Promise.resolve();trackerAbortInFlight=!1;constructor($,Z={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=Z.logger??$.logger,this.telemetry=Z.telemetry??$.telemetry,this.createAgentRuntimeImpl=Z.createAgentRuntimeImpl??PT,this.conversation=new q7($.initialMessages),this.messageBuilder=new L7(WV()),this.contributionRegistry=ST({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 N7({maxConsecutiveMistakes:Q,onLimitReached:$.onConsecutiveMistakeLimitReached,onLimitTelemetry:(X)=>{xZ(this.telemetry,{ulid:this.config.sessionId??this.conversation.getConversationId(),model:this.config.modelId,provider:this.config.providerId,reason:X.reason,consecutiveMistakes:X.consecutiveMistakes,maxConsecutiveMistakes:X.maxConsecutiveMistakes,agentId:this.agentId,conversationId:this.conversation.getConversationId(),parentAgentId:this.parentAgentId,isSubagent:Boolean(this.parentAgentId)})},emit:(X)=>this.emitLegacyEvent(X),log:(X,j,Y)=>mT(this.logger,X,j,Y),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(X,j)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:X}]})}});let J=$.execution?.loopDetection;this.loopDetectionDisabled=J===!1;let W=J===!1||J===void 0?void 0:J;this.loopTracker=new T7(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 Z=new Set(this.config.tools.map((J)=>J.name)),Q=[...this.config.tools];for(let J of $)if(!Z.has(J.name))Q.push(J),Z.add(J.name);this.config={...this.config,tools:Q}}updateConnection($){let Z=n2($),Q={...this.config};if(Z.providerId!==void 0)Q.providerId=Z.providerId;if(Z.modelId!==void 0)Q.modelId=Z.modelId;if(Z.apiKey!==void 0)Q.apiKey=Z.apiKey;if(Z.baseUrl!==void 0)Q.baseUrl=Z.baseUrl;if(Z.headers!==void 0)Q.headers=Z.headers;if(Z.providerConfig!==void 0)Q.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"reasoningEffort"))Q.reasoningEffort=Z.reasoningEffort??void 0;if(Object.hasOwn(Z,"thinkingBudgetTokens"))Q.thinkingBudgetTokens=Z.thinkingBudgetTokens??void 0;if(Object.hasOwn(Z,"thinking")){if(Q.thinking=Z.thinking??void 0,Z.thinking===!1||Z.thinking===null)Q.reasoningEffort=void 0,Q.thinkingBudgetTokens=void 0}this.config=Q}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.messageBuilder.resetConversationState(),this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let Z=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=Z,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(Z)}async shutdown($,Z){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run($,Z,Q){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!1})}continue($,Z,Q){return this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let Z of this.contributionRegistry.getRegisteredRules()){let Q=await kT(Z);if(Q)$.push(Q)}return hT(this.config.systemPrompt,$)}executeRun($){let Z;return Z=this.executeRunWithAuthRetry($).finally(()=>{if(this.activeRunPromise===Z)this.activeRunPromise=null}),this.activeRunPromise=Z,Z}async executeRunWithAuthRetry($){let Z=await this.executeRunInternal($);if(Z.finishReason!=="error"||!this.config.onAuthError||!bT(Z.text))return Z;if(!await this.config.onAuthError().catch(()=>!1))return Z;let J=await this.executeRunInternal({isContinue:!0});return LX(this.telemetry,this.config.providerId,{recovered:J.finishReason!=="error"}),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 Z=new Date,Q=$.userMessage;if(Q!==void 0){let D=await uT(Q,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:D})}let J=await this.composeSystemPrompt(),W=aY(this.config,this.logger,this.telemetry),X=new Map;for(let D of this.contributionRegistry.getRegisteredTools())X.set(D.name,D);let j=gT([...X.values()],this.config.toolPolicies),Y=new Map;for(let D of j)Y.set(D.name,D);for(let D of this.config.tools)Y.set(D.name,D);let V=this.conversation.getConversationId(),B=HV(this.config),H=Array.from(Y.values()),K=E5(this.conversation.getMessages()),G=jV({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:W,logger:this.logger,telemetry:this.telemetry,tools:H,toolContextMetadata:{modelSupportsImages:B?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(B,H),initialMessages:K,systemPrompt:J}),F=this.createAgentRuntimeImpl(G);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let U=F.subscribe((D)=>{this.handleRuntimeEvent(D)}),_,L;try{if($.isContinue)_=await F.continue(void 0);else _=await F.run("")}catch(D){L=D instanceof Error?D:Error(String(D))}finally{U();try{await this.activeTrackerWork}catch(D){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:D})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(_&&_.messages.length>0){let D=i2(_.messages);this.conversation.replaceMessages(D)}let O=new Date;try{return this.buildLegacyResult({runResult:_,thrownError:L,startedAt:Z,endedAt:O})}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 $=vT([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((Z)=>Z.hooks)]);return{...$,beforeModel:async(Z)=>{let Q=await $.beforeModel?.(Z);if(Q?.stop)return Q;let J=Q?.messages??Z.request.messages,W=await this.prepareMessagesForModelRequest(J);return{...Q,messages:W}}}}createRuntimePrepareTurn($,Z){let Q=this.config.prepareTurn;if(!Q)return;return async(J)=>{let W=i2(J.messages),X=await this.prepareProviderMessagesForApi(W),j=await Q({agentId:J.agentId,conversationId:J.conversationId??this.conversation.getConversationId(),parentAgentId:J.parentAgentId??null,iteration:J.iteration,messages:W,apiMessages:X,abortSignal:J.signal??new AbortController().signal,systemPrompt:J.systemPrompt??"",tools:Z,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:J.emitStatusNotice});if(!j)return;return{...j.messages?{messages:E5(j.messages)}:{},...j.systemPrompt!==void 0?{systemPrompt:j.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let Z=await this.prepareProviderMessagesForApi(C5($));return E5(Z)}async prepareProviderMessagesForApi($){let Z=$,Q=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let J of Q)Z=await J.build(Z);return this.messageBuilder.buildForApi(Z)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=new Date,J=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let W=$.message.content.find((V)=>V.type==="tool-result"),X=W?.type==="tool-result"&&W.isError===!0,j=X?yT(W?.type==="tool-result"?W.output:void 0):void 0,Y={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:J,output:W?.type==="tool-result"?W.output:void 0,error:j,durationMs:Z===void 0?0:Q.getTime()-Z.getTime(),startedAt:Z??Q,endedAt:Q};if(this.currentRunToolCalls.push(Y),X){if(this.currentTurnFailedTools+=1,j)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${j}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let Z=this.currentTurnFailedTools,Q=this.currentTurnSuccessfulTools;if(Z>0&&Q===0){let J=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${Z} tool call(s) failed${J?`: ${J}`:""}`})}else if(Q>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let Z of this.eventAdapter.translate($))this.emitLegacyEvent(Z)}syncConversationFromRuntimeMessage($,Z){if($.length>0){this.conversation.replaceMessages(i2($));return}if(Z.length===0)return;let Q=new Set(this.conversation.getMessages().map((W)=>W.id).filter((W)=>typeof W==="string")),J=i2(Z).filter((W)=>!W.id||!Q.has(W.id));if(J.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...J])}emitLegacyEvent($){for(let Z of this.listeners)try{Z($)}catch(Q){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Q})}}inspectLoopForToolCall($,Z,Q){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let J=this.loopTracker.inspect({name:$,input:Z});if(J.kind==="ok")return;if(J.kind==="soft"){if(J.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:J.message}]});return}this.enqueueMistakeRecord({iteration:Q,reason:"tool_execution_failed",forceAtLimit:!0,details:J.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let Z=await this.mistakeTracker.record($);if(Z.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:Z.message}]}),this.activeRuntime?.abort(Z.reason??Z.message)})}buildLegacyResult($){let{runResult:Z,thrownError:Q,startedAt:J,endedAt:W}=$,X=W.getTime()-J.getTime(),j=Q?"error":cT(Z),Y=(Z?.status==="failed"?Z.error?.message:void 0)||Z?.outputText||"",V=Z?{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens>0?Z.usage.cacheReadTokens:void 0,cacheWriteTokens:Z.usage.cacheWriteTokens>0?Z.usage.cacheWriteTokens:void 0,totalCost:Z.usage.totalCost}:this.currentRunUsage,B=Z?i2(Z.messages):this.conversation.getMessages(),H=HV(this.config);if(Q)throw Q;return{text:Y,usage:V,messages:B,toolCalls:this.currentRunToolCalls,iterations:Z?.iterations??0,finishReason:j,model:{id:this.config.modelId,provider:this.config.providerId,info:H},startedAt:J,endedAt:W,durationMs:X}}}function mT($,Z,Q,J){if(!$)return;if(Z==="debug"){$.debug(Q,J);return}if(Z==="error"&&$.error){$.error(Q,J);return}let W=Z==="warn"?"warn":Z==="error"?"error":"info";$.log(Q,{...J,severity:W})}function cT($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function uT($,Z,Q,J){let{buildInitialUserContent:W}=await Promise.resolve().then(() => VV);return W($,Z,Q,J)}function HV($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let Z=U7($);if(Z?.[$.modelId])return Z[$.modelId];return}import{buildClineSystemPrompt as KV}from"@cline/shared";function GV($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return KV({ide:Z.clineIdeName?.trim()||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,rules:`# Team Teammate Role
|
|
164
|
+
${Q}`,platform:Z.clinePlatform,metadata:Z.workspaceMetadata})}function FV($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return KV({ide:Z.clineIdeName||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,overridePrompt:Q,metadata:Z.workspaceMetadata,platform:Z.clinePlatform})}function a2($){let Z={...$};return{getRuntimeConfig:()=>Z,getConnectionConfig:()=>({providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,onAuthError:Z.onAuthError,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,reasoningEffort:Z.reasoningEffort,thinkingBudgetTokens:Z.thinkingBudgetTokens,maxTokensPerTurn:Z.maxTokensPerTurn,temperature:Z.temperature}),updateConnectionDefaults:(Q)=>{Z={...Z,...Q}}}}function $6($){let Z=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?GV($.prompt,Z):FV($.prompt,Z);return{...$.configProvider.getConnectionConfig(),systemPrompt:Q,tools:$.tools,maxIterations:$.maxIterations??Z.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:Z.hooks,extensions:Z.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:Z.logger,role:$.role}}function o2($){let Z=$6($),Q=new Y$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);return Q}var lT=R7.object({systemPrompt:R7.string().describe("System prompt defining the sub-agent's behavior"),task:R7.string().describe("Task for the sub-agent to complete")});function s2($){return dT({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:pT(lT),execute:async(Z,Q)=>{let J=$.createSubAgentTools?await $.createSubAgentTools(Z,Q):$.subAgentTools??[],W=o2({kind:"subagent",prompt:Z.systemPrompt,configProvider:$.configProvider,tools:J,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),X=W.getAgentId(),j=W.getConversationId(),Y=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:X,conversationId:j,parentAgentId:Y,input:Z})}catch{}try{let V=await W.run(Z.task),B={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:j,parentAgentId:Y,input:Z,result:B,agentResult:V})}catch{}return B}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:j,parentAgentId:Y,input:Z,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as U0,TEAM_AWAIT_TIMEOUT_MS as iT,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as rT,TEAM_RUN_TEXT_PREVIEW_LIMIT as nT,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as aT,TeamAttachOutcomeFragmentInputSchema as UV,TeamAwaitRunsInputSchema as DV,TeamBroadcastInputSchema as _V,TeamBroadcastToolResultSchema as oT,TeamCancelRunInputSchema as LV,TeamCancelRunToolResultSchema as sT,TeamCleanupInputSchema as AV,TeamCleanupToolResultSchema as tT,TeamCreateOutcomeInputSchema as OV,TeamCreateOutcomeToolResultSchema as eT,TeamFinalizeOutcomeInputSchema as qV,TeamFinalizeOutcomeToolResultSchema as $N,TeamListOutcomesInputSchema as zV,TeamListRunsInputSchema as TV,TeamMailboxMessageToolResultSchema as ZN,TeamMissionLogInputSchema as NV,TeamMissionLogToolResultSchema as QN,TeamOutcomeFragmentToolResultSchema as fV,TeamOutcomeToolResultSchema as JN,TeamReadMailboxInputSchema as RV,TeamReviewOutcomeFragmentInputSchema as MV,TeamRunTaskInputSchema as EV,TeamRunTaskToolResultSchema as M7,TeamRunToolSummarySchema as E7,TeamSendMessageInputSchema as CV,TeamSendMessageToolResultSchema as WN,TeamShutdownTeammateInputSchema as wV,TeamSimpleAgentStatusToolResultSchema as PV,TeamSpawnTeammateInputSchema as SV,TeamStatusInputSchema as bV,TeamStatusToolResultSchema as XN,TeamTaskInputSchema as yV,TeamTaskToolResultSchema as Z6,validateWithZod as h,zodToJsonSchema as D0}from"@cline/shared";function kV($,Z){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=Z)return Q;return`${Q.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function n$($,Z){if($===void 0)throw Error(`Missing required field: ${Z}`);return $}function jN($){let Z=$.result;if(!Z)return;return{textPreview:kV(Z.text,nT),iterations:Z.iterations,finishReason:Z.finishReason,durationMs:Z.durationMs,usage:{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens,cacheWriteTokens:Z.usage.cacheWriteTokens,totalCost:Z.usage.totalCost}}}function b5($){return $?.toISOString()}function C7($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:kV($.message,rT),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:b5($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:b5($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:b5($.heartbeatAt),lastProgressAt:b5($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:jN($)}}function YN($){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 y5=["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 hV($){let Z=[];if($.createBaseTools)Z.push(...$.createBaseTools());Z.push(...Q6({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1,includeSpawnTool:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:$6({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:Z,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function k5($){let Z=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,J=Q6({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),W=[];for(let X of $.restoredTeammates??[]){if($.runtime.isTeammateActive(X.agentId))continue;hV({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:X}),W.push(X.agentId)}return{tools:J,restoredFromPersistence:Q,restoredTeammates:W}}function Q6($){let Z=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,J=$.includeManagementTools??!0,W=[];if(Q)W.push(U0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:D0(SV),execute:async(j)=>{let Y=h(SV,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!Z)throw Error("Spawning teammates is disabled in this context.");let V={agentId:Y.agentId,rolePrompt:Y.rolePrompt};if(hV({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!J)$.onLeadToolsUnlocked?.(Q6({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return h(PV,{agentId:Y.agentId,status:"spawned"})}}));if(!J)return W;W.push(U0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:D0(wV),execute:async(j)=>{let Y=h(wV,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(Y.agentId,Y.reason),h(PV,{agentId:Y.agentId,status:"stopped"})}})),W.push(U0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:D0(bV),execute:async(j)=>{return h(bV,j),h(XN,$.runtime.getSnapshot())}})),W.push(U0({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:D0(yV),execute:async(j)=>{let Y=h(yV,j);switch(Y.action){case"create":{let V=new Set(aT.create??[]),B=Object.entries(j).filter(([K,G])=>V.has(K)&&G!=null).map(([K])=>K),H=$.runtime.createTask({title:n$(Y.title,"title"),description:n$(Y.description,"description"),dependsOn:Y.dependsOn,assignee:Y.assignee,createdBy:$.requesterId});return h(Z6,{action:"create",taskId:H.id,status:H.status,...B.length>0?{ignoredFields:B,note:`Ignored fields for action=create: ${B.join(", ")}`}:{}})}case"list":return h(Z6,{action:"list",tasks:$.runtime.listTaskItems({status:Y.status,assignee:Y.assignee})});case"claim":{let V=$.runtime.claimTask(n$(Y.taskId,"taskId"),$.requesterId);return h(Z6,{action:"claim",taskId:V.id,status:V.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_task with action=complete when done."})}case"complete":{let V=$.runtime.completeTask(n$(Y.taskId,"taskId"),$.requesterId,n$(Y.summary,"summary"));return h(Z6,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(n$(Y.taskId,"taskId"),$.requesterId,n$(Y.reason,"reason"));return h(Z6,{action:"block",taskId:V.id,status:V.status})}}}}));let X=new Map;return W.push(U0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:D0(EV),execute:async(j)=>{let Y=h(EV,j);if(Y.runMode==="async"){let H=$.runtime.startTeammateRun(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0});return h(M7,{agentId:Y.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${Y.agentId} and queued as ${H.id}.`,runId:H.id})}let V=X.get(Y.agentId);if(V){let H=await V;return h(M7,{...H,status:"joined",deduped:!0,message:`Task for ${Y.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let B=$.runtime.routeToTeammate(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0}).then((H)=>h(M7,{agentId:Y.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${Y.agentId} and completed in sync mode.`,text:H.text,iterations:H.iterations})).finally(()=>{X.delete(Y.agentId)});return X.set(Y.agentId,B),await B}})),W.push(U0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:D0(LV),execute:async(j)=>{let Y=h(LV,j),V=$.runtime.cancelRun(Y.runId,Y.reason);return h(sT,{runId:V.id,status:V.status})}})),W.push(U0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:D0(TV),execute:async(j)=>h(E7.array(),$.runtime.listRuns(h(TV,j)).map(C7))})),W.push(U0({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:D0(DV),timeoutMs:iT,execute:async(j)=>{let Y=h(DV,j);if(Y.runId){let H=await $.runtime.awaitRun(Y.runId);return YN(H),h(E7,C7(H))}let V=await $.runtime.awaitAllRuns(),B=V.filter((H)=>["failed","cancelled","interrupted"].includes(H.status));if(B.length>0){let H=B.map((K)=>`${K.id}:${K.status}${K.error?`(${K.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${H}`)}return h(E7.array(),V.map(C7))}})),W.push(U0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:D0(CV),execute:async(j)=>{let Y=h(CV,j),V=$.runtime.sendMessage($.requesterId,Y.toAgentId,Y.subject,Y.body,Y.taskId??void 0);return h(WN,{id:V.id,toAgentId:V.toAgentId})}})),W.push(U0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:D0(_V),execute:async(j)=>{let Y=h(_V,j),V=$.runtime.broadcast($.requesterId,Y.subject,Y.body,{taskId:Y.taskId??void 0});return h(oT,{delivered:V.length})}})),W.push(U0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:D0(RV),execute:async(j)=>{let Y=h(RV,j);return h(ZN.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:Y.unreadOnly,markRead:!0}))}})),W.push(U0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:D0(NV),execute:async(j)=>{let Y=h(NV,j),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:Y.taskId||void 0,kind:Y.kind,summary:Y.summary,evidence:Y.evidence?.length?Y.evidence:void 0,nextAction:Y.nextAction||void 0});return h(QN,{id:V.id})}})),W.push(U0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:D0(AV),execute:async(j)=>{if(h(AV,j),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),h(tT,{status:"cleaned"})}})),W.push(U0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:D0(OV),execute:async(j)=>{let Y=h(OV,j),V=$.runtime.createOutcome({title:Y.title,requiredSections:Y.requiredSections,createdBy:$.requesterId});return h(eT,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),W.push(U0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:D0(UV),execute:async(j)=>{let Y=h(UV,j),V=$.runtime.attachOutcomeFragment({outcomeId:Y.outcomeId,section:Y.section,sourceAgentId:$.requesterId,sourceRunId:Y.sourceRunId||void 0,content:Y.content});return h(fV,{fragmentId:V.id,status:V.status})}})),W.push(U0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:D0(MV),execute:async(j)=>{let Y=h(MV,j),V=$.runtime.reviewOutcomeFragment({fragmentId:Y.fragmentId,reviewedBy:$.requesterId,approved:Y.approved});return h(fV,{fragmentId:V.id,status:V.status})}})),W.push(U0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:D0(qV),execute:async(j)=>{let Y=h(qV,j),V=$.runtime.finalizeOutcome(Y.outcomeId);return h($N,{outcomeId:V.id,status:V.status})}})),W.push(U0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:D0(zV),execute:async(j)=>{return h(zV,j),h(JN.array(),$.runtime.listOutcomes())}})),W}function IV($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}var VN=[{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:s2({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...y5]}],BN={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function HN($){return $==="plan"||$==="yolo"?$:"act"}function gV($){let Z=HN($.mode),Q=K1[X$({mode:Z})],J=a8($.providerId??"",$.modelId??"",Z,n8);return{mode:Z,flags:{...Q,...J,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function xV($,Z){if(Z.disabledToolIds?.has($))return!1;let{flags:Q}=gV(Z);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let J=BN[$];return J?Q[J]===!0:!1}function KN($,Z){if($.id==="editor"){let{flags:Q}=gV(Z),J=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:xV($.id,Z),headlessToolNames:[J?"apply_patch":"editor"]}}return{...$,defaultEnabled:xV($.id,Z)}}function J6($={}){return VN.map((Z)=>KN(Z,$))}function vV($={}){return J6($).filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id)}function mV($){if(!$.enabled)return new Set;let Z=J6($.availabilityContext),Q=new Set(Z.map((J)=>J.id));if(!$.allowlist||$.allowlist.length===0)return new Set(Z.filter((J)=>J.defaultEnabled).map((J)=>J.id));for(let J of $.allowlist)if(!Q.has(J))throw Error(`Unknown tool "${J}". Available tools: ${Z.map((W)=>W.id).join(", ")}`);return new Set($.allowlist)}function w7($,Z={}){return J6(Z).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function cV($,Z={}){return w7($,Z)}import{getDefaultShell as GN}from"@cline/shared";function W6($={}){let{executorOptions:Z={},executors:Q,...J}=$,W=J.shell??Z.bash?.shell??GN(process.platform),X={...Z,bash:{...Z.bash,shell:W}},j={...M5(X),...Q??{}};return p2({...J,shell:W,executors:j})}function h5($){return $.trim().replace(/^\/+/,"").toLowerCase()}function FN($){if(!$||$.length===0)return;let Z=$.map(h5).filter((Q)=>Q.length>0);return Z.length>0?new Set(Z):void 0}function UN($,Z,Q){if(!Q)return!0;let J=h5($),W=h5(Z),X=J.includes(":")?J.split(":").at(-1)??J:J,j=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(J)||Q.has(W)||Q.has(X)||Q.has(j)}function X6($,Z){let Q=FN(Z);return[...$.getSnapshot("skill").entries()].map(([W,X])=>{let j=X.item;return{id:W,name:j.name.trim(),description:j.description?.trim(),disabled:j.disabled===!0,skill:j}}).filter((W)=>UN(W.id,W.name,Q))}function DN($,Z){return X6($,Z).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,J)=>Q.localeCompare(J))}function _N($,Z,Q){let J=h5(Z);if(!J)return{error:"Missing skill name."};let W=X6($,Q),X=W.find((H)=>H.id===J);if(X){let{skill:H}=X;if(H.disabled===!0)return{error:`Skill "${H.name}" is configured but disabled.`};return{id:X.id,skill:H}}let j=J.includes(":")?J.split(":").at(-1)??J:J,Y=W.filter(({id:H})=>{if(H===j)return!0;return H.endsWith(`:${j}`)}),V=Y.filter(({skill:H})=>H.disabled!==!0);if(V.length===1){let{id:H,skill:K}=V[0];return{id:H,skill:K}}if(V.length>1)return{error:`Skill "${Z}" is ambiguous. Use one of: ${V.map(({id:H})=>H).join(", ")}`};if(Y.length===1){let{skill:H}=Y[0];return{error:`Skill "${H.name}" is configured but disabled.`}}if(Y.length>1)return{error:`Skill "${Z}" is ambiguous, and all matches are disabled: ${Y.map(({id:H})=>H).join(", ")}`};let B=DN($,Q);return{error:B.length>0?`Skill "${Z}" not found. Available skills: ${B.join(", ")}`:"No skills are currently available."}}function P7($,Z=Promise.resolve(),Q){let J=new Set,W=async(X,j)=>{await Z;let Y=_N($,X,Q);if("error"in Y)return Y.error;let{id:V,skill:B}=Y;if(J.has(V))return`Skill "${B.name}" is already running.`;J.add(V);try{let H=j?.trim(),K=H?`
|
|
165
165
|
<command-args>${H}</command-args>`:"",G=B.description?.trim()?`Description: ${B.description.trim()}
|
|
166
166
|
|
|
167
167
|
`:"";return`<command-name>${B.name}</command-name>${K}
|
|
168
168
|
<command-instructions>
|
|
169
169
|
${G}${B.instructions}
|
|
170
|
-
</command-instructions>`}finally{J.delete(V)}};return Object.defineProperty(W,"configuredSkills",{get:()=>
|
|
170
|
+
</command-instructions>`}finally{J.delete(V)}};return Object.defineProperty(W,"configuredSkills",{get:()=>X6($,Q).map(({skill:X,...j})=>j),enumerable:!0,configurable:!1}),W}function uV($){let Z=$.watcherReady??Promise.resolve();return{name:"cline-user-instructions",manifest:{capabilities:[$.includeRules?"rules":void 0,$.registerSkillsTool?"tools":void 0,$.includeSkills||$.includeWorkflows?"commands":void 0].filter((J)=>Boolean(J))},async setup(J){if(await Z,$.includeRules)J.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>$Y($.watcher)});if($.registerSkillsTool)J.registerTool(d2(P7($.watcher,Z,$.allowedSkillNames)));for(let W of c8($.watcher).filter((X)=>X.kind==="skill"&&$.includeSkills||X.kind==="workflow"&&$.includeWorkflows))J.registerCommand({name:W.name,description:W.description,handler:(X)=>{let j=X.trim();return j?`${W.instructions}
|
|
171
171
|
|
|
172
|
-
${j}`:W.instructions}})}}}class
|
|
173
|
-
${
|
|
172
|
+
${j}`:W.instructions}})}}}class dV{watcher;ready;stopped=!1;constructor($){this.watcher=aj($)}start(){if(!this.ready)this.stopped=!1,this.ready=this.watcher.start();return this.ready}stop(){if(this.stopped)return;this.stopped=!0,this.watcher.stop(),this.ready=void 0}async refreshType($){await this.start(),await this.watcher.refreshType($)}listRecords($){return[...this.watcher.getSnapshot($).entries()].map(([Z,Q])=>({type:$,id:Z,filePath:Q.filePath,item:Q.item}))}listRuntimeCommands(){return c8(this.watcher)}resolveRuntimeSlashCommand($){return tj($,this.watcher)}hasConfiguredSkills($){return X6(this.watcher,$).some((Z)=>!Z.disabled)}createSkillsExecutor($){return P7(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return uV({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function t2($){return new dV($)}import{readFile as LN,writeFile as AN}from"node:fs/promises";import{stripUtf8Bom as ON}from"@cline/shared";import lV from"yaml";function qN($){let Z=ON($),Q=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=Z.match(Q);if(!J)return{data:{},body:Z,hadFrontmatter:!1};let[,W,X]=J,j=lV.parse(W);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:X,hadFrontmatter:!0}}function pV($,Z){return`---
|
|
173
|
+
${lV.stringify($).trimEnd()}
|
|
174
174
|
---
|
|
175
|
-
${Z}`}function
|
|
176
|
-
`,"utf8")}function
|
|
175
|
+
${Z}`}function zN($,Z){let{data:Q,body:J,hadFrontmatter:W}=qN($);if(!W&&Z)return $;if(Z){if(delete Q.disabled,Q.enabled===!1)delete Q.enabled;if(Object.keys(Q).length===0)return J;return pV(Q,J)}return Q.disabled=!0,pV(Q,J)}async function iV({filePath:$,enabled:Z}){let Q=await LN($,"utf8"),J=zN(Q,Z);return await AN($,J),{filePath:$,enabled:Z,disabled:!Z}}import{spawn as Kf}from"node:child_process";import{StringDecoder as AB}from"node:string_decoder";import{formatMcpTimeoutErrorMessage as Gf,isMcpTimeoutConfigured as Ff}from"@cline/shared";import{UnauthorizedError as UB}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as Uf}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as Zf}from"node:crypto";import{UnauthorizedError as Qf}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as Jf}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as Wf}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as Xf}from"@modelcontextprotocol/sdk/client/streamableHttp.js";v5();import{formatMcpTimeoutErrorMessage as tN,resolveMcpTimeoutSeconds as eN}from"@cline/shared";import{ErrorCode as $f,McpError as KB}from"@modelcontextprotocol/sdk/types.js";function G6($){return eN($)*1000}function o$($,Z,Q){if(!($ instanceof KB)||$.code!==$f.RequestTimeout)return $;return new KB($.code,tN(Z,Q),$.data)}var jf="/mcp/oauth/callback",Yf=[1456,1457,1458],Vf=300000;function Bf($){if($ instanceof Error){let Z=$.message.trim();if(Z.length>0)return Z}return String($)}function Hf($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function c5($){let Z={};try{Z=B6($.serverName,{filePath:$.settingsPath})??{}}catch{Z={}}let Q,J,W=async(j)=>{let Y=Z8(j(Z))??{};try{Z=H6($.serverName,()=>Y,{filePath:$.settingsPath})}catch{Z=Y}};return{provider:{get redirectUrl(){return Z.redirectUrl??$.redirectUrl},get clientMetadata(){return Hf(Z.redirectUrl??$.redirectUrl)},state:()=>{return J=Zf(),J},clientInformation:()=>Z.clientInformation,saveClientInformation:async(j)=>{await W((Y)=>({...Y,clientInformation:j,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>Z.tokens,saveTokens:async(j)=>{let Y=Date.now();await W((V)=>({...V,tokens:j,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:Y}))},redirectToAuthorization:async(j)=>{Q=j.toString(),await $.onAuthorizationUrl?.(Q)},saveCodeVerifier:async(j)=>{await W((Y)=>({...Y,codeVerifier:j,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!Z.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return Z.codeVerifier},invalidateCredentials:async(j)=>{await W((Y)=>{if(j==="all")return{lastError:Y.lastError,redirectUrl:Y.redirectUrl};return{...Y,...j==="client"?{clientInformation:void 0}:{},...j==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...j==="verifier"?{codeVerifier:void 0}:{},...j==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(j)=>{await W((Y)=>({...Y,discoveryState:j}))},discoveryState:()=>Z.discoveryState},getLastAuthorizationUrl:()=>Q,getLastOAuthState:()=>J,resetInteractiveState:async()=>{await W((j)=>({...j,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(j)=>{await W((Y)=>({...Y,lastError:j}))},clearError:async()=>{await W((j)=>({...j,lastError:void 0}))}}}function m5($){let Z=$.registration.transport;if(Z.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let Q=Z.headers?{headers:Z.headers}:void 0;if(Z.type==="sse")return new Wf(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch});return new Xf(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch})}function GB($){return new Jf({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function FB($){let Z=$.serverName.trim();if(!Z)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Q}=await Promise.resolve().then(() => (v5(),HB)),J=Q({filePath:$.filePath}).find((B)=>B.name===Z);if(!J)throw Error(`MCP server "${Z}" is not configured.`);if(J.disabled)throw Error(`MCP server "${Z}" is disabled. Enable it before running OAuth.`);if(J.transport.type==="stdio")throw Error(`MCP server "${Z}" uses stdio transport and does not support OAuth browser flow.`);let W=G6(J.timeoutSeconds),X=await T1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:Yf,callbackPath:$.callbackPath??jf,timeoutMs:$.timeoutMs??Vf,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!X.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let j=c5({settingsPath:$.filePath,serverName:Z,redirectUrl:X.callbackUrl,onAuthorizationUrl:async(B)=>{await $.openUrl?.(B)}});await j.resetInteractiveState();let Y=GB($),V;try{let B=m5({registration:J,oauthProvider:j.provider,fetch:$.fetch});try{return await Y.connect(B,{timeout:W}),await Y.listTools(void 0,{timeout:W}),await j.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" is already authorized.`}}catch(H){if(!(H instanceof Qf))throw H;if(!j.getLastAuthorizationUrl())throw Error(`MCP server "${Z}" did not provide an authorization URL.`);let G=await X.waitForCallback();if(!G)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(G.error)throw Error(`OAuth authorization failed: ${G.error}`);if(!G.code)throw Error("OAuth callback did not include an authorization code.");let F=j.getLastOAuthState();if(!F)throw Error(`MCP server "${Z}" did not start an OAuth stateful authorization flow.`);if(G.state!==F)throw Error("OAuth authorization failed: state mismatch.");await B.finishAuth(G.code),V=GB($);let U=m5({registration:J,oauthProvider:j.provider,fetch:$.fetch});return await V.connect(U,{timeout:W}),await V.listTools(void 0,{timeout:W}),await j.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" OAuth authorization completed.`}}}catch(B){let H=Bf(o$(B,Z,W));throw await j.markError(H),Error(H)}finally{await Y.close().catch(()=>{return}),await V?.close().catch(()=>{return}),X.close()}}var Df="2024-11-05",_f=1500,DB="http://127.0.0.1:1456/mcp/oauth/callback";function Q8($){return $ instanceof Error?$.message:String($)}function Lf($,Z,Q){let J=Q8(Z),W=Q8(Q);if(J===W)return Z instanceof Error?Z:Error(J);return Error(`MCP server "${$}" failed to initialize. Newline-delimited attempt: ${J} Content-Length framed attempt: ${W}`)}function _B($){return Buffer.from(`${JSON.stringify($)}
|
|
176
|
+
`,"utf8")}function LB($){let Z=Buffer.from(JSON.stringify($),"utf8");return Buffer.concat([Buffer.from(`Content-Length: ${Z.byteLength}\r
|
|
177
177
|
\r
|
|
178
|
-
`,"utf8"),Z])}class v7{buffer="";decoder=new
|
|
178
|
+
`,"utf8"),Z])}class v7{buffer="";decoder=new AB("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`\r
|
|
179
179
|
\r
|
|
180
|
-
`);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 X=Number.parseInt(W[1],10),j=Q+4,Y=j+X;if(this.buffer.length<Y)break;Z.push(this.buffer.slice(j,Y)),this.buffer=this.buffer.slice(Y)}return Z}}class m7{buffer="";decoder=new
|
|
181
|
-
`);if(Q<0)break;let J=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),J.length>0)Z.push(J)}return Z}}class AB{registration;process;nextRequestId=1;pending=new Map;framedParser=new v7;newlineParser=new m7;stderrBuffer="";connected=!1;protocolMode="newline";requestTimeoutMs;connectAttemptTimeoutMs;constructor($){this.registration=$,this.requestTimeoutMs=K6($.timeoutSeconds),this.connectAttemptTimeoutMs=Gf($.timeoutSeconds)?this.requestTimeoutMs:Df}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 $={protocolVersion:Uf,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}};this.spawnProcess("newline");try{await this.request("initialize",$,this.connectAttemptTimeoutMs)}catch(Z){await this.disconnect().catch(()=>{}),this.spawnProcess("framed");try{await this.request("initialize",$,this.connectAttemptTimeoutMs)}catch(Q){throw await this.disconnect().catch(()=>{}),_f(this.registration.name,Z,Q)}}this.notify("notifications/initialized"),this.connected=!0}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((Z)=>typeof Z?.name==="string"&&typeof Z.inputSchema==="object"&&Z.inputSchema!==null).map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}},void 0,$.context?.signal)}spawnProcess($){let Z=this.registration.transport;if(Z.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${Z.type}`);this.framedParser=new v7,this.newlineParser=new m7,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},J=Hf(Z.command,Z.args??[],{cwd:Z.cwd,env:{...process.env,...Z.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=J,J.stdout.on("data",(W)=>this.handleStdout(W)),J.stderr.on("data",(W)=>{if(this.process!==J)return;if(this.stderrBuffer+=W.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),J.once("error",(W)=>{if(this.process!==J)return;this.failAllPending(Error(`MCP process error: ${Z8(W)}`))}),J.once("exit",(W,X)=>{if(this.process!==J)return;this.connected=!1,this.process=void 0;let j=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${W??"null"}, signal=${X??"null"}).${j}`))})}handleStdout($){try{let Z=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of Z){let J=JSON.parse(Q);if(typeof J.id!=="number")continue;let W=this.takePending(J.id);if(!W)continue;if(J.error){let X=J.error.message||`MCP request failed with code ${J.error.code??"unknown"}`;W.reject(Error(X));continue}W.resolve(J.result)}}catch(Z){this.handleProtocolFailure(Z)}}handleProtocolFailure($){let Z=this.process;if(!Z)return;this.connected=!1,this.process=void 0;let Q=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${Z8($)}.${Q}`)),Z.kill()}async request($,Z,Q=this.requestTimeoutMs,J){let W=this.process;if(!W?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let X=this.nextRequestId++,j={jsonrpc:"2.0",id:X,method:$,...Z?{params:Z}:{}},Y=new Promise((V,B)=>{let H=setTimeout(()=>{this.takePending(X),B(this.createTimeoutError($,Q))},Q),K=J?()=>{let G=this.takePending(X);if(!G)return;let F=J.reason instanceof Error?J.reason:Object.assign(Error(`MCP request aborted for "${this.registration.name}" (${$}).`),{name:"AbortError"});G.reject(F)}:void 0;if(this.pending.set(X,{resolve:V,reject:B,timeout:H,signal:J,onAbort:K}),J&&K){if(J.addEventListener("abort",K,{once:!0}),J.aborted)K()}});if(!this.pending.has(X))return Y;try{W.stdin.write(this.protocolMode==="framed"?_B(j):DB(j))}catch(V){let B=this.takePending(X);if(B)B.reject(V instanceof Error?V:Error(String(V)))}return Y}createTimeoutError($,Z){return Error(Kf(this.registration.name,Z,$))}notify($,Z){let Q=this.process;if(!Q?.stdin.writable)return;let J={jsonrpc:"2.0",method:$,...Z?{params:Z}:{}};Q.stdin.write(this.protocolMode==="framed"?_B(J):DB(J))}failAllPending($){for(let Z of[...this.pending.keys()]){let Q=this.takePending(Z);if(!Q)continue;Q.reject($)}}takePending($){let Z=this.pending.get($);if(!Z)return;if(this.pending.delete($),clearTimeout(Z.timeout),Z.signal&&Z.onAbort)Z.signal.removeEventListener("abort",Z.onAbort);return Z}}class OB{registration;options;client;authContext;requestTimeoutMs;constructor($,Z){this.registration=$;this.options=Z;this.requestTimeoutMs=K6($.timeoutSeconds)}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 $=c5({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??UB});this.authContext=$;let Z;try{Z=new Ff({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"});let Q=m5({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await Z.connect(Q,{timeout:this.requestTimeoutMs}),await $.clearError(),this.client=Z}catch(Q){await Z?.close().catch(()=>{});let J=o$(Q,this.registration.name,this.requestTimeoutMs),W=Q instanceof FB?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):Z8(J);throw await $.markError(W),Error(W)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools(void 0,{timeout:this.requestTimeoutMs})).tools.map((Q)=>({name:Q.name,description:Q.description,inputSchema:Q.inputSchema&&typeof Q.inputSchema==="object"&&!Array.isArray(Q.inputSchema)?Q.inputSchema:{}}))}catch(Z){return await this.handleOperationError(Z)}}async callTool($){let Z=await this.ensureConnectedClient();try{return await Z.callTool({name:$.name,arguments:$.arguments??{}},void 0,{timeout:this.requestTimeoutMs,signal:$.context?.signal})}catch(Q){return await this.handleOperationError(Q)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let Z=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${Z} Run authorizeMcpServerOAuth for this server.`;return`${Z} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let Z=this.authContext??c5({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??UB}),Q=o$($,this.registration.name,this.requestTimeoutMs),J=$ instanceof FB?this.formatUnauthorizedMessage(Z.getLastAuthorizationUrl()):Z8(Q);throw await Z.markError(J),Error(J)}}function u5($={}){return(Z)=>Z.transport.type==="stdio"?new AB(Z):new OB(Z,$)}v5();import{isMcpTimeoutConfigured as qB,resolveMcpTimeoutSeconds as zB}from"@cline/shared";var Lf=5000;function n0(){return Date.now()}function Af($){return $.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}class G6{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??Lf}async registerServer($){await this.runExclusive($.name,async()=>{let Z=this.servers.get($.name);if(!Z){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:n0()});return}let Q=JSON.stringify(Z.registration.transport)!==JSON.stringify($.transport),J=qB(Z.registration.timeoutSeconds)!==qB($.timeoutSeconds)||zB(Z.registration.timeoutSeconds)!==zB($.timeoutSeconds);if(Z.registration={...$},Z.updatedAt=n0(),Q||J)await this.disconnectState(Z),Z.client=void 0,Z.toolCache=void 0,Z.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.connectState(Z)})}async disconnectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z)})}async setServerDisabled($,Z){await this.runExclusive($,async()=>{let Q=this.requireServer($);if(Q.registration={...Q.registration,disabled:Z},Q.updatedAt=n0(),Z)await this.disconnectState(Q)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,Z)=>$.name.localeCompare(Z.name))}async listTools($){let Z=this.requireServer($),Q=Z.toolCacheUpdatedAt??0;if(Z.toolCache&&n0()-Q<=this.toolsCacheTtlMs)return Z.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let Z=this.requireServer($),J=await(await this.ensureConnectedClient(Z)).listTools(),W=Af(J);return Z.toolCache=W,Z.toolCacheUpdatedAt=n0(),Z.updatedAt=n0(),W})}async callTool($){return this.runExclusive($.serverName,async()=>{let Z=this.requireServer($.serverName),Q=await this.ensureConnectedClient(Z);return Z.updatedAt=n0(),Q.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let Z of $)await this.unregisterServer(Z)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=n0();let Z=$.client;try{Z??=await this.clientFactory($.registration),$.client=Z,await Z.connect(),$.status="connected",$.lastError=void 0,$.updatedAt=n0()}catch(Q){throw await Z?.disconnect().catch(()=>{}),$.status="disconnected",$.lastError=Q instanceof Error?Q.message:String(Q),$.updatedAt=n0(),Q}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=n0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=n0()}}requireServer($){let Z=this.servers.get($);if(!Z)throw Error(`Unknown MCP server: ${$}`);return Z}async runExclusive($,Z){let Q=this.operationLocks.get($)??Promise.resolve(),J,W=new Promise((j)=>{J=j}),X=Q.catch(()=>{return}).then(()=>W);this.operationLocks.set($,X),await Q.catch(()=>{return});try{return await Z()}finally{if(J?.(),this.operationLocks.get($)===X)this.operationLocks.delete($)}}}function Q8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function TB($){return Q8($)&&Object.values($).every((Z)=>typeof Z==="string")}function Of($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function qf($){if(!Q8($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function zf($){let Z=$.env?Object.entries($.env):[];if(Z.length===0)return{ok:!0};let Q={};for(let[J,W]of Z){if(typeof W==="string"){Q[J]=W;continue}let X=W.fromEnv?.trim()||J,j=process.env[X];if(typeof j==="string"&&j.length>0){Q[J]=j;continue}if(typeof W.value==="string"){Q[J]=W.value;continue}if(W.required===!0)return{ok:!1,reason:`required environment variable "${X}" is not set`}}return{ok:!0,env:Object.keys(Q).length>0?Q:void 0}}function NB($){if(!Q8($))return{name:"",loadError:"invalid MCP server registration"};let Z=typeof $.name==="string"?$.name.trim():"";if(!Z)return{name:Z,loadError:"empty MCP server name"};let Q=$.env,J=Q===void 0?void 0:Q;if(J!==void 0){if(!Q8(J))return{name:Z,loadError:"invalid env"};for(let[V,B]of Object.entries(J))if(typeof B!=="string"&&!qf(B))return{name:Z,loadError:`invalid env "${V}"`}}let W=$.transport;if(!Q8(W))return{name:Z,loadError:"invalid MCP transport"};let X=W.type;if(X!=="stdio"&&X!=="sse"&&X!=="streamableHttp")return{name:Z,loadError:"invalid MCP transport type"};if(X!=="stdio"&&J!==void 0)return{name:Z,loadError:"top-level env is only supported for stdio MCP transports"};let j=Q8($.metadata)?$.metadata:void 0;if(X==="stdio"){let V=W.command;if(typeof V!=="string"||!V.trim())return{name:Z,loadError:"stdio MCP transport requires command"};let B=W.args;if(B!==void 0&&!Of(B))return{name:Z,loadError:"stdio MCP transport args must be strings"};let H=W.cwd;if(H!==void 0&&typeof H!=="string")return{name:Z,loadError:"stdio MCP transport cwd must be a string"};let K=W.env;if(K!==void 0&&!TB(K))return{name:Z,loadError:"stdio MCP transport env must be strings"};let G=zf({name:Z,transport:{type:"stdio",command:V,args:B,cwd:H,env:K},env:J,metadata:j});if(!G.ok)return{name:Z,loadError:G.reason};let F=K||G.env?{...K??{},...G.env??{}}:void 0;return{name:Z,registration:{name:Z,transport:{type:"stdio",command:V,args:B,cwd:H,env:F},metadata:j}}}if(typeof W.url!=="string"||!W.url.trim())return{name:Z,loadError:`${X} MCP transport requires url`};let Y=W.headers;if(Y!==void 0&&!TB(Y))return{name:Z,loadError:`${X} MCP transport headers must be strings`};return{name:Z,registration:{name:Z,transport:X==="sse"?{type:"sse",url:W.url,headers:Y}:{type:"streamableHttp",url:W.url,headers:Y},metadata:j}}}function c7($){let Z=new Map;return $.map(({server:Q,owner:J,ownerLabel:W})=>{let X=NB(Q);if(!X.registration)return{owner:J,name:X.name,loadError:X.loadError??"invalid MCP server registration"};let j=Z.get(X.registration.name);if(Z.has(X.registration.name)){let Y=j?` already registered by ${j}`:"";return{owner:J,name:X.registration.name,loadError:`duplicate MCP server name "${X.registration.name}"${Y}`}}return Z.set(X.registration.name,W),{owner:J,name:X.registration.name,registration:X.registration}})}import{createHash as Tf}from"node:crypto";var fB=64,Nf=/[^a-zA-Z0-9_-]+/g,RB=8,ff=1,Rf="mcp_tool";function Mf($){return Tf("sha1").update($).digest("hex").slice(0,RB)}function Ef($){return $.replace(Nf,"_")}var d5=({serverName:$,toolName:Z})=>{let Q=`${$}__${Z}`,J=Ef(Q);if(J===Q&&Q.length<=fB)return Q;let W=Mf(Q),X=fB-ff-RB;return`${J.slice(0,X)||Rf}_${W}`};function u7($){return{[($.nameTransform??d5)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function MB($){let Z={};for(let Q of $.toolNames)Object.assign(Z,u7({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return Z}import{createTool as Cf}from"@cline/shared";function wf($,Z){let Q=Z.description?.trim();if(Q)return Q;return`Execute MCP tool "${Z.name}" from server "${$}".`}async function p5($){let Z=await $.provider.listTools($.serverName),Q=$.nameTransform??d5;return Z.map((J)=>{let W=Q({serverName:$.serverName,toolName:J.name});return Cf({name:W,description:wf($.serverName,J),inputSchema:J.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(X,j)=>$.provider.callTool({serverName:$.serverName,toolName:J.name,arguments:X&&typeof X==="object"&&!Array.isArray(X)?X:void 0,context:j})})})}J1();import{stat as Pf}from"node:fs/promises";import{isAbsolute as Sf,relative as bf,resolve as EB}from"node:path";J1();function yf($,Z){let Q=bf(EB($),EB(Z));return Q===""||!Q.startsWith("..")&&!Sf(Q)}var kf=32,J8=new Map;function hf($,Z){if(!J8.has($)&&J8.size>=kf){let Q=J8.keys().next().value;if(Q)J8.delete(Q)}J8.set($,Z)}async function If($){let Z=await Promise.all($.pluginPaths.map(async(Q)=>{try{let J=await Pf(Q);return`${Q}:${J.mtimeMs}:${J.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:Z})}function CB($,Z){return $.map((Q)=>({...Q,enabled:!Z.has(Q.name)}))}function xf($){return $.sort((Z,Q)=>{let J=Z.name.localeCompare(Q.name);if(J!==0)return J;return Z.path.localeCompare(Q.path)})}async function gf($,Z){if(!$.setup)return{tools:[]};let Q=[],J={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(J,{workspaceInfo:Z}),{tools:Q}}async function wB($){let Z=g$({workspacePath:$.workspacePath,cwd:$.cwd}),Q=f1($.disabledToolNames);if(Z.length===0)return{tools:[],failures:[],warnings:[]};let J=await If({pluginPaths:Z,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),W=J8.get(J);if(W)return{tools:CB(W.tools,Q),failures:W.failures,warnings:W.warnings};let X=[],j=[],Y=[],V;try{V=await k2({pluginPaths:Z,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),j=[...V.failures],Y=[...V.warnings];for(let H of V.extensions??[]){let K=H.__clinePluginPath;if(!K)continue;let G=yf($.workspacePath,K)?"workspace-plugin":"global-plugin",F;try{F=await gf(H,{rootPath:$.workspacePath})}catch(U){j.push({pluginPath:K,pluginName:H.name,phase:"setup",message:U instanceof Error?U.message:String(U),stack:U instanceof Error?U.stack:void 0});continue}for(let U of F.tools)X.push({name:U.name,pluginName:H.name,path:K,source:G,description:U.description?.trim()||void 0})}}catch(H){j=Z.map((K)=>({pluginPath:K,phase:"load",message:H instanceof Error?H.message:String(H),stack:H instanceof Error?H.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let B=xf(X);return hf(J,{tools:B,failures:j,warnings:Y}),{tools:CB(B,Q),failures:j,warnings:Y}}async function d7($){return(await wB($)).tools}function D6($,Z){if(!Z)return"global";let Q=kB(Z,$);return!Q.startsWith("..")&&!yB(Q)?"workspace":"global"}function uf($,Z){return D6($,Z)==="workspace"?"workspace-plugin":"global-plugin"}function df($,Z){let Q=kB(SB($),SB(Z));return Q===""||!Q.startsWith("..")&&!yB(Q)}function pf($){try{let Z=JSON.parse(vf($,"utf8"));return typeof Z.name==="string"&&Z.name.trim()?Z.name.trim():void 0}catch{return}}function lf($){let Z=PB($);while(!0){let Q=cf(Z,"package.json");if(U6(Q)){let W=pf(Q);if(W)return W;break}let J=PB(Z);if(J===Z)break;Z=J}return p7($,mf($))}function rf($){let Z=[];for(let Q of g$({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let J of v$([Q]))Z.push({directory:J,pluginName:lf(Q),pluginPath:Q,source:$.workspaceRoot?uf(Q,$.workspaceRoot):"global-plugin"});return Z.sort((Q,J)=>J.directory.length-Q.directory.length)}function nf($,Z){return Z.find((Q)=>df(Q.directory,$))}function F6($){return[...$].sort((Z,Q)=>{let J=(W)=>{switch(W){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(Z.source!==Q.source)return J(Z.source)-J(Q.source);return Z.name.localeCompare(Q.name)})}function hB($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function IB($,Z){return $.cwd?.trim()||Z||process.cwd()}async function bB($,Z){if($.userInstructionService)return await Z($.userInstructionService);let Q=hB($),J=IB($,Q),W=s2({skills:{workspacePath:Q||void 0,includePluginSkills:!0,cwd:J},rules:{workspacePath:Q||void 0},workflows:{workspacePath:Q||void 0}});try{return await W.start(),await Z(W)}finally{W.stop()}}function af($,Z){if(!$)return;let Q=$.listRecords("skill");if(Z.id){let J=Q.find((W)=>W.id===Z.id);if(J)return J}for(let J of Q)if(J.filePath===Z.path||J.item.name===Z.name||J.id===Z.name)return J;return}class W8{async list($={}){return await bB($,async(Z)=>{let Q=hB($),J=rf({workspaceRoot:Q,cwd:IB($,Q)}),W=[],X=[],j=[],Y=[],V=[];if(Z){for(let H of Z.listRecords("workflow")){let K=H.item;W.push({id:H.id,name:K.name,path:H.filePath,enabled:K.disabled!==!0,kind:"workflow",source:D6(H.filePath,Q),description:K.instructions,toggleable:!1})}for(let H of Z.listRecords("rule")){let K=H.item;X.push({id:H.id,name:K.name,path:H.filePath,enabled:K.disabled!==!0,kind:"rule",source:D6(H.filePath,Q),description:K.instructions,toggleable:!1})}for(let H of Z.listRecords("skill")){let K=H.item,G=nf(H.filePath,J);j.push({id:H.id,name:K.name,path:H.filePath,enabled:K.disabled!==!0,kind:"skill",source:G?.source??D6(H.filePath,Q),description:K.description,pluginName:G?.pluginName,pluginPath:G?.pluginPath,toggleable:!0})}}if(Q)try{for(let H of await d7({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))Y.push({id:`${H.pluginName}:${H.name}:${H.path}`,name:H.name,path:H.path,enabled:H.enabled,kind:"tool",source:H.source,description:H.description,toggleable:!0})}catch{}let B=j0();if(a$({filePath:B}))try{for(let H of G1({filePath:B}))V.push({id:H.name,name:H.name,path:B,enabled:H.disabled!==!0,kind:"mcp",source:D6(B,Q),description:H.transport.type,toggleable:!0})}catch{}return{workflows:F6(W.filter((H)=>U6(H.path))),rules:F6(X.filter((H)=>U6(H.path))),skills:F6(j.filter((H)=>U6(H.path))),tools:F6(Y),mcp:F6(V.filter((H)=>U6(H.path)))}})}async toggle($){if($.type==="skills")return await bB($,async(Z)=>{let Q=af(Z,$),J=Q?.filePath;if(!J)throw Error(`Unable to resolve skill setting '${$.id??$.name??p7($.path??"")}'.`);let W=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,X=$.enabled??(W!==void 0?!W:void 0);if(X===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??p7($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await lV({filePath:J,enabled:X}),await Z?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:Z}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)TQ($.name);else Lj($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let Z=$.name?.trim()||$.id?.trim();if(!Z)throw Error("MCP server settings toggle requires a server name.");let Q=$.path?.trim()||j0(),J=$.enabled;if(J===void 0){let W=G1({filePath:Q}).find((X)=>X.name===Z);if(!W)throw Error(`Unknown MCP server: ${Z}`);J=W.disabled===!0}return Y6({filePath:Q,name:Z,disabled:!J}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function _6(){return new W8}function xB($){return{async list(Z){let Q=$;if(Q.listSettings)return await Q.listSettings(Z);return await _6().list(Z)},async toggle(Z){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(Z);return await _6().toggle(Z)}}}function gB($){function Z(){let Q=$.pendingPrompts;if(!Q)throw Error("Pending prompt service is not available.");return Q}return{list(Q){return Z().list(Q)},update(Q){return Z().update(Q)},delete(Q){return Z().delete(Q)}}}function h0(...$){let Z,Q;for(let W of $){if(!W)continue;if(W.toolExecutors)Z={...Z??{},...W.toolExecutors};if(W.requestToolApproval)Q=W.requestToolApproval}let J=Z&&Object.keys(Z).length>0;if(!J&&!Q)return;return{...J?{toolExecutors:Z}:{},...Q?{requestToolApproval:Q}:{}}}var L6="session_not_found";class s$ extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function t$($){return $ instanceof s$||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function l7($){let{hooks:Z,logger:Q,telemetry:J,extensionContext:W,extraTools:X,extensions:j,onTeamEvent:Y,onConsecutiveMistakeLimitReached:V,checkpoint:B,compaction:H,...K}=$,G={};if(Z)G.hooks=Z;if(Q)G.logger=Q;if(J)G.telemetry=J;if(W)G.extensionContext=W;if(X)G.extraTools=X;if(j)G.extensions=j;if(Y)G.onTeamEvent=Y;if(V)G.onConsecutiveMistakeLimitReached=V;if(B?.createCheckpoint)G.checkpoint=B;if(H?.compact)G.compaction=H;let F=Object.keys(G).length>0?G:void 0;return{config:{...K,...B?{checkpoint:{enabled:B.enabled}}:{},...H?{compaction:{enabled:H.enabled,strategy:H.strategy,preserveRecentTokens:H.preserveRecentTokens,summarizer:H.summarizer}}:{}},...F?{localRuntime:F}:{}}}function vB($){let Z=$.config;return"providerId"in Z?{...$,config:{...Z,...of($.localRuntime)},localRuntime:$.localRuntime}:$}function i7($,Z={}){let Q=l7($.config),J=h0(Z.defaultCapabilities,$.capabilities),W=sf(Q.localRuntime,$.localRuntime),X=Z.withExtensionContext?.(W?.extensionContext);if(X)W={...W??{},extensionContext:X};return{...$,...Q,...W?{localRuntime:W}:{},...J?{capabilities:J}:{}}}function of($){if(!$)return{};let{modelCatalogDefaults:Z,userInstructionService:Q,configExtensions:J,onTeamRestored:W,...X}=$;return X}function sf(...$){let Z={};for(let Q of $)if(Q)Object.assign(Z,Q);return Object.keys(Z).length>0?Z:void 0}q0();function mB($){let Z=$.input.config.telemetry??$.telemetry;if(!Z)return;Z.capture({event:x.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??T0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function A6($){return!!$&&typeof $==="object"&&!Array.isArray($)}function r7($){let Z=$?.trim();return Z?Z:void 0}function tf($,Z){let Q=$?.trim();if(!Q)return Z;let J=Date.parse(Q);if(!Number.isFinite(J))return Z;return new Date(J).toISOString()}function cB($,Z){return new Date(new Date($).getTime()+Math.max(0,Math.floor(Z))*1000).toISOString()}function uB($,Z){return new Date(new Date($).getTime()-Math.max(0,Math.floor(Z))*1000).toISOString()}function ef($,Z){if(!$)return Z;return new Date($).getTime()>=new Date(Z).getTime()?$:Z}function $R($,Z){let Q=$.eventId.trim(),J=$.eventType.trim(),W=$.source.trim(),X=r7($.subject),j=r7($.dedupeKey)??`${J}:${W}:${X??Q}`;return{eventId:Q,eventType:J,source:W,subject:X,occurredAt:tf($.occurredAt,Z),workspaceRoot:r7($.workspaceRoot),payload:A6($.payload)?$.payload:void 0,attributes:A6($.attributes)?$.attributes:void 0,dedupeKey:j}}function n7($,Z){if(!Z)return;let Q=Z.split("."),J=$;for(let W of Q){if(!A6(J))return;J=J[W]}return J}function ZR($,Z){if($.attributes&&Object.hasOwn($.attributes,Z))return $.attributes[Z];if($.payload&&Object.hasOwn($.payload,Z))return $.payload[Z];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},J=n7(Q,Z);if(J!==void 0)return J;if($.attributes){let W=n7($.attributes,Z);if(W!==void 0)return W}if($.payload)return n7($.payload,Z);return}function l5($,Z){if(Array.isArray(Z))return Z.some((Q)=>l5($,Q));if(Array.isArray($))return $.some((Q)=>l5(Q,Z));if(A6(Z)){if(!A6($))return!1;return Object.entries(Z).every(([Q,J])=>l5($[Q],J))}return Object.is($,Z)}function QR($,Z){if(!Z||Object.keys(Z).length===0)return!0;return Object.entries(Z).every(([Q,J])=>l5(ZR($,Q),J))}class a7{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let Z=new Date(this.nowFn()).toISOString(),Q=$R($,Z),J=this.store.insertEventLog(Q,{receivedAtIso:Z});if(!J.created)return this.logger?.debug("cron.event.duplicate",{eventId:J.record.eventId,eventType:J.record.eventType,source:J.record.source}),{event:J.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:J.record.dedupeKey}]};try{let W=this.store.listEventSpecsForType(Q.eventType),X=[],j=[],Y=[];for(let H of W){if(!QR(Q,H.filters)){X.push({specId:H.specId,externalId:H.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}j.push(H);let K=this.materializeForSpec(H,Q,J.record.receivedAt);if(K.run)Y.push(K.run);else X.push({specId:H.specId,externalId:H.externalId,reason:K.reason,dedupeKey:Q.dedupeKey})}let V=j.length===0?"unmatched":Y.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(J.record.eventId,{status:V,matchedSpecCount:j.length,queuedRunCount:Y.length,suppressedCount:X.filter((H)=>H.reason!=="filter_mismatch").length});let B=this.store.getEventLog(J.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:J.record.eventId,eventType:J.record.eventType,status:V,matchedSpecCount:j.length,queuedRunCount:Y.length}),{event:B??J.record,duplicate:!1,matchedSpecs:j,queuedRuns:Y,suppressions:X}}catch(W){if(this.store.updateEventLogProcessing(J.record.eventId,{status:"failed",error:W instanceof Error?W.message:String(W)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:J.record.eventId,eventType:J.record.eventType,error:W});throw W}}materializeForSpec($,Z,Q){let J=Z.dedupeKey??Z.eventId,W=$.debounceSeconds??0;if(W>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:J});if(V){let B=ef(V.scheduledFor,cB(Q,W)),H=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:Z.eventId,scheduledFor:B});if(H)return{run:H,reason:"dedupe_window"}}}let X=$.dedupeWindowSeconds??0;if(X>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:J,sinceIso:uB(Q,X)}))return{reason:"dedupe_window"};let j=$.cooldownSeconds??0;if(j>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:uB(Q,j)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:Z.eventId,scheduledFor:W>0?cB(Q,W):Q}),reason:"dedupe_window"}}}class O6{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},Z=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let J of Z)if(this.materializeOneOff(J))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let J of Q)try{if(this.materializeSchedule(J))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasConsumedOneOffRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:$.nextRunAt??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 GR}from"node:path";import{buildClineSystemPrompt as FR}from"@cline/shared";import{nowIso as sB}from"@cline/shared/db";import{basename as JR,resolve as WR}from"node:path";import{performance as dB}from"node:perf_hooks";import{processWorkspaceInfo as lB}from"@cline/shared";import iB from"simple-git";function XR($){let Z=$?.git;if(!Z||typeof Z!=="object"||Array.isArray(Z))return{};let Q=Z;return{...typeof Q.url==="string"&&Q.url.trim()?{url:Q.url.trim()}:{},...typeof Q.branch==="string"&&Q.branch.trim()?{branch:Q.branch.trim()}:{}}}function o7($,Z){let Q={...$??{}};if(!Z.url&&!Z.branch)return delete Q.git,Object.keys(Q).length>0?Q:void 0;let W={...Q.git&&typeof Q.git==="object"&&!Array.isArray(Q.git)?Q.git:{}};if(Z.url)W.url=Z.url;else delete W.url;if(Z.branch)W.branch=Z.branch;else delete W.branch;return Q.git=W,Q}function rB($,Z){let Q=XR($);return Q.url===Z.url&&Q.branch===Z.branch}function nB($){let Z=$.find(({name:Q})=>Q==="origin")??$[0];return(Z?.refs.fetch||Z?.refs.push)?.trim()||void 0}function V$($){return WR($)}async function r5($){return(await s7($)).info}function pB($){let Z=$ instanceof Error?$.message:String($);return/unknown revision|ambiguous argument|does not have any commits yet/i.test(Z)}function i5($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function s7($){let Z=V$($),Q={rootPath:Z,hint:JR(Z)},J={},W;try{let X=iB({baseDir:Z});if(!await X.checkIsRepo())return{info:Q,vcsType:"none",gitState:J};try{let Y=await X.getRemotes(!0);if(Y.length>0){let V=Y.map((H)=>{let K=H.refs.fetch||H.refs.push;return`${H.name}: ${K}`});Q.associatedRemoteUrls=V;let B=nB(Y);if(B)J.url=B}}catch(Y){W??=i5(Y)}try{let Y=(await X.revparse(["HEAD"])).trim();if(Y.length>0)Q.latestGitCommitHash=Y}catch(Y){if(!pB(Y))W??=i5(Y)}try{let Y=(await X.branch()).current.trim();if(Y.length>0)Q.latestGitBranchName=Y,J.branch=Y}catch(Y){if(!pB(Y))W??=i5(Y)}return{info:Q,vcsType:"git",gitState:J,error:W}}catch(X){return{info:Q,vcsType:"none",gitState:J,error:i5(X)}}}async function aB($){try{let Z=iB({baseDir:V$($)});if(!await Z.checkIsRepo())return{};let[Q,J]=await Promise.all([Z.getRemotes(!0),Z.branch()]),W=nB(Q),X=J.current.trim();return{...W?{url:W}:{},...X?{branch:X}:{}}}catch{return}}async function t7($){let Z=await r5($);return lB(Z)}async function oB($){let Z=dB.now(),Q=await s7($),J=dB.now()-Z,W=Q.info;return{workspaceInfo:W,workspaceMetadata:lB(W),durationMs:J,vcsType:Q.vcsType,gitState:Q.gitState,initError:Q.error}}import{mkdirSync as jR,writeFileSync as YR}from"node:fs";import{join as VR}from"node:path";import{resolveCronReportsDir as BR}from"@cline/shared/storage";function B$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function e$($,Z){if(Z===void 0||Z===null)return;return`${$}: ${B$(Z)}`}function HR($,Z,Q){let J=[`runId: ${B$($.runId)}`,`specId: ${B$(Z.specId)}`,`externalId: ${B$(Z.externalId)}`,`title: ${B$(Z.title)}`,`triggerKind: ${B$($.triggerKind)}`,`status: ${B$($.status)}`,`sourcePath: ${B$(Z.sourcePath)}`],W=[e$("sessionId",$.sessionId),e$("startedAt",$.startedAt),e$("completedAt",$.completedAt),e$("triggerEventId",$.triggerEventId),e$("triggerEventType",Q?.eventType),e$("triggerEventSource",Q?.source),e$("triggerEventSubject",Q?.subject)];for(let X of W)if(X)J.push(X);return`---
|
|
180
|
+
`);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 X=Number.parseInt(W[1],10),j=Q+4,Y=j+X;if(this.buffer.length<Y)break;Z.push(this.buffer.slice(j,Y)),this.buffer=this.buffer.slice(Y)}return Z}}class m7{buffer="";decoder=new AB("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`
|
|
181
|
+
`);if(Q<0)break;let J=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),J.length>0)Z.push(J)}return Z}}class OB{registration;process;nextRequestId=1;pending=new Map;framedParser=new v7;newlineParser=new m7;stderrBuffer="";connected=!1;protocolMode="newline";requestTimeoutMs;connectAttemptTimeoutMs;constructor($){this.registration=$,this.requestTimeoutMs=G6($.timeoutSeconds),this.connectAttemptTimeoutMs=Ff($.timeoutSeconds)?this.requestTimeoutMs:_f}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 $={protocolVersion:Df,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}};this.spawnProcess("newline");try{await this.request("initialize",$,this.connectAttemptTimeoutMs)}catch(Z){await this.disconnect().catch(()=>{}),this.spawnProcess("framed");try{await this.request("initialize",$,this.connectAttemptTimeoutMs)}catch(Q){throw await this.disconnect().catch(()=>{}),Lf(this.registration.name,Z,Q)}}this.notify("notifications/initialized"),this.connected=!0}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((Z)=>typeof Z?.name==="string"&&typeof Z.inputSchema==="object"&&Z.inputSchema!==null).map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}},void 0,$.context?.signal)}spawnProcess($){let Z=this.registration.transport;if(Z.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${Z.type}`);this.framedParser=new v7,this.newlineParser=new m7,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},J=Kf(Z.command,Z.args??[],{cwd:Z.cwd,env:{...process.env,...Z.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=J,J.stdout.on("data",(W)=>this.handleStdout(W)),J.stderr.on("data",(W)=>{if(this.process!==J)return;if(this.stderrBuffer+=W.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),J.once("error",(W)=>{if(this.process!==J)return;this.failAllPending(Error(`MCP process error: ${Q8(W)}`))}),J.once("exit",(W,X)=>{if(this.process!==J)return;this.connected=!1,this.process=void 0;let j=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${W??"null"}, signal=${X??"null"}).${j}`))})}handleStdout($){try{let Z=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of Z){let J=JSON.parse(Q);if(typeof J.id!=="number")continue;let W=this.takePending(J.id);if(!W)continue;if(J.error){let X=J.error.message||`MCP request failed with code ${J.error.code??"unknown"}`;W.reject(Error(X));continue}W.resolve(J.result)}}catch(Z){this.handleProtocolFailure(Z)}}handleProtocolFailure($){let Z=this.process;if(!Z)return;this.connected=!1,this.process=void 0;let Q=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${Q8($)}.${Q}`)),Z.kill()}async request($,Z,Q=this.requestTimeoutMs,J){let W=this.process;if(!W?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let X=this.nextRequestId++,j={jsonrpc:"2.0",id:X,method:$,...Z?{params:Z}:{}},Y=new Promise((V,B)=>{let H=setTimeout(()=>{this.takePending(X),B(this.createTimeoutError($,Q))},Q),K=J?()=>{let G=this.takePending(X);if(!G)return;let F=J.reason instanceof Error?J.reason:Object.assign(Error(`MCP request aborted for "${this.registration.name}" (${$}).`),{name:"AbortError"});G.reject(F)}:void 0;if(this.pending.set(X,{resolve:V,reject:B,timeout:H,signal:J,onAbort:K}),J&&K){if(J.addEventListener("abort",K,{once:!0}),J.aborted)K()}});if(!this.pending.has(X))return Y;try{W.stdin.write(this.protocolMode==="framed"?LB(j):_B(j))}catch(V){let B=this.takePending(X);if(B)B.reject(V instanceof Error?V:Error(String(V)))}return Y}createTimeoutError($,Z){return Error(Gf(this.registration.name,Z,$))}notify($,Z){let Q=this.process;if(!Q?.stdin.writable)return;let J={jsonrpc:"2.0",method:$,...Z?{params:Z}:{}};Q.stdin.write(this.protocolMode==="framed"?LB(J):_B(J))}failAllPending($){for(let Z of[...this.pending.keys()]){let Q=this.takePending(Z);if(!Q)continue;Q.reject($)}}takePending($){let Z=this.pending.get($);if(!Z)return;if(this.pending.delete($),clearTimeout(Z.timeout),Z.signal&&Z.onAbort)Z.signal.removeEventListener("abort",Z.onAbort);return Z}}class qB{registration;options;client;authContext;requestTimeoutMs;constructor($,Z){this.registration=$;this.options=Z;this.requestTimeoutMs=G6($.timeoutSeconds)}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 $=c5({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??DB});this.authContext=$;let Z;try{Z=new Uf({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"});let Q=m5({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await Z.connect(Q,{timeout:this.requestTimeoutMs}),await $.clearError(),this.client=Z}catch(Q){await Z?.close().catch(()=>{});let J=o$(Q,this.registration.name,this.requestTimeoutMs),W=Q instanceof UB?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):Q8(J);throw await $.markError(W),Error(W)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools(void 0,{timeout:this.requestTimeoutMs})).tools.map((Q)=>({name:Q.name,description:Q.description,inputSchema:Q.inputSchema&&typeof Q.inputSchema==="object"&&!Array.isArray(Q.inputSchema)?Q.inputSchema:{}}))}catch(Z){return await this.handleOperationError(Z)}}async callTool($){let Z=await this.ensureConnectedClient();try{return await Z.callTool({name:$.name,arguments:$.arguments??{}},void 0,{timeout:this.requestTimeoutMs,signal:$.context?.signal})}catch(Q){return await this.handleOperationError(Q)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let Z=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${Z} Run authorizeMcpServerOAuth for this server.`;return`${Z} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let Z=this.authContext??c5({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??DB}),Q=o$($,this.registration.name,this.requestTimeoutMs),J=$ instanceof UB?this.formatUnauthorizedMessage(Z.getLastAuthorizationUrl()):Q8(Q);throw await Z.markError(J),Error(J)}}function u5($={}){return(Z)=>Z.transport.type==="stdio"?new OB(Z):new qB(Z,$)}v5();import{isMcpTimeoutConfigured as zB,resolveMcpTimeoutSeconds as TB}from"@cline/shared";var Af=5000;function n0(){return Date.now()}function Of($){return $.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}class F6{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??Af}async registerServer($){await this.runExclusive($.name,async()=>{let Z=this.servers.get($.name);if(!Z){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:n0()});return}let Q=JSON.stringify(Z.registration.transport)!==JSON.stringify($.transport),J=zB(Z.registration.timeoutSeconds)!==zB($.timeoutSeconds)||TB(Z.registration.timeoutSeconds)!==TB($.timeoutSeconds);if(Z.registration={...$},Z.updatedAt=n0(),Q||J)await this.disconnectState(Z),Z.client=void 0,Z.toolCache=void 0,Z.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.connectState(Z)})}async disconnectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z)})}async setServerDisabled($,Z){await this.runExclusive($,async()=>{let Q=this.requireServer($);if(Q.registration={...Q.registration,disabled:Z},Q.updatedAt=n0(),Z)await this.disconnectState(Q)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,Z)=>$.name.localeCompare(Z.name))}async listTools($){let Z=this.requireServer($),Q=Z.toolCacheUpdatedAt??0;if(Z.toolCache&&n0()-Q<=this.toolsCacheTtlMs)return Z.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let Z=this.requireServer($),J=await(await this.ensureConnectedClient(Z)).listTools(),W=Of(J);return Z.toolCache=W,Z.toolCacheUpdatedAt=n0(),Z.updatedAt=n0(),W})}async callTool($){return this.runExclusive($.serverName,async()=>{let Z=this.requireServer($.serverName),Q=await this.ensureConnectedClient(Z);return Z.updatedAt=n0(),Q.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let Z of $)await this.unregisterServer(Z)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=n0();let Z=$.client;try{Z??=await this.clientFactory($.registration),$.client=Z,await Z.connect(),$.status="connected",$.lastError=void 0,$.updatedAt=n0()}catch(Q){throw await Z?.disconnect().catch(()=>{}),$.status="disconnected",$.lastError=Q instanceof Error?Q.message:String(Q),$.updatedAt=n0(),Q}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=n0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=n0()}}requireServer($){let Z=this.servers.get($);if(!Z)throw Error(`Unknown MCP server: ${$}`);return Z}async runExclusive($,Z){let Q=this.operationLocks.get($)??Promise.resolve(),J,W=new Promise((j)=>{J=j}),X=Q.catch(()=>{return}).then(()=>W);this.operationLocks.set($,X),await Q.catch(()=>{return});try{return await Z()}finally{if(J?.(),this.operationLocks.get($)===X)this.operationLocks.delete($)}}}function J8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function NB($){return J8($)&&Object.values($).every((Z)=>typeof Z==="string")}function qf($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function zf($){if(!J8($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function Tf($){let Z=$.env?Object.entries($.env):[];if(Z.length===0)return{ok:!0};let Q={};for(let[J,W]of Z){if(typeof W==="string"){Q[J]=W;continue}let X=W.fromEnv?.trim()||J,j=process.env[X];if(typeof j==="string"&&j.length>0){Q[J]=j;continue}if(typeof W.value==="string"){Q[J]=W.value;continue}if(W.required===!0)return{ok:!1,reason:`required environment variable "${X}" is not set`}}return{ok:!0,env:Object.keys(Q).length>0?Q:void 0}}function fB($){if(!J8($))return{name:"",loadError:"invalid MCP server registration"};let Z=typeof $.name==="string"?$.name.trim():"";if(!Z)return{name:Z,loadError:"empty MCP server name"};let Q=$.env,J=Q===void 0?void 0:Q;if(J!==void 0){if(!J8(J))return{name:Z,loadError:"invalid env"};for(let[V,B]of Object.entries(J))if(typeof B!=="string"&&!zf(B))return{name:Z,loadError:`invalid env "${V}"`}}let W=$.transport;if(!J8(W))return{name:Z,loadError:"invalid MCP transport"};let X=W.type;if(X!=="stdio"&&X!=="sse"&&X!=="streamableHttp")return{name:Z,loadError:"invalid MCP transport type"};if(X!=="stdio"&&J!==void 0)return{name:Z,loadError:"top-level env is only supported for stdio MCP transports"};let j=J8($.metadata)?$.metadata:void 0;if(X==="stdio"){let V=W.command;if(typeof V!=="string"||!V.trim())return{name:Z,loadError:"stdio MCP transport requires command"};let B=W.args;if(B!==void 0&&!qf(B))return{name:Z,loadError:"stdio MCP transport args must be strings"};let H=W.cwd;if(H!==void 0&&typeof H!=="string")return{name:Z,loadError:"stdio MCP transport cwd must be a string"};let K=W.env;if(K!==void 0&&!NB(K))return{name:Z,loadError:"stdio MCP transport env must be strings"};let G=Tf({name:Z,transport:{type:"stdio",command:V,args:B,cwd:H,env:K},env:J,metadata:j});if(!G.ok)return{name:Z,loadError:G.reason};let F=K||G.env?{...K??{},...G.env??{}}:void 0;return{name:Z,registration:{name:Z,transport:{type:"stdio",command:V,args:B,cwd:H,env:F},metadata:j}}}if(typeof W.url!=="string"||!W.url.trim())return{name:Z,loadError:`${X} MCP transport requires url`};let Y=W.headers;if(Y!==void 0&&!NB(Y))return{name:Z,loadError:`${X} MCP transport headers must be strings`};return{name:Z,registration:{name:Z,transport:X==="sse"?{type:"sse",url:W.url,headers:Y}:{type:"streamableHttp",url:W.url,headers:Y},metadata:j}}}function c7($){let Z=new Map;return $.map(({server:Q,owner:J,ownerLabel:W})=>{let X=fB(Q);if(!X.registration)return{owner:J,name:X.name,loadError:X.loadError??"invalid MCP server registration"};let j=Z.get(X.registration.name);if(Z.has(X.registration.name)){let Y=j?` already registered by ${j}`:"";return{owner:J,name:X.registration.name,loadError:`duplicate MCP server name "${X.registration.name}"${Y}`}}return Z.set(X.registration.name,W),{owner:J,name:X.registration.name,registration:X.registration}})}import{createHash as Nf}from"node:crypto";var RB=64,ff=/[^a-zA-Z0-9_-]+/g,MB=8,Rf=1,Mf="mcp_tool";function Ef($){return Nf("sha1").update($).digest("hex").slice(0,MB)}function Cf($){return $.replace(ff,"_")}var d5=({serverName:$,toolName:Z})=>{let Q=`${$}__${Z}`,J=Cf(Q);if(J===Q&&Q.length<=RB)return Q;let W=Ef(Q),X=RB-Rf-MB;return`${J.slice(0,X)||Mf}_${W}`};function u7($){return{[($.nameTransform??d5)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function EB($){let Z={};for(let Q of $.toolNames)Object.assign(Z,u7({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return Z}import{createTool as wf}from"@cline/shared";function Pf($,Z){let Q=Z.description?.trim();if(Q)return Q;return`Execute MCP tool "${Z.name}" from server "${$}".`}async function p5($){let Z=await $.provider.listTools($.serverName),Q=$.nameTransform??d5;return Z.map((J)=>{let W=Q({serverName:$.serverName,toolName:J.name});return wf({name:W,description:Pf($.serverName,J),inputSchema:J.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(X,j)=>$.provider.callTool({serverName:$.serverName,toolName:J.name,arguments:X&&typeof X==="object"&&!Array.isArray(X)?X:void 0,context:j})})})}J1();import{stat as Sf}from"node:fs/promises";import{isAbsolute as bf,relative as yf,resolve as CB}from"node:path";J1();function kf($,Z){let Q=yf(CB($),CB(Z));return Q===""||!Q.startsWith("..")&&!bf(Q)}var hf=32,W8=new Map;function If($,Z){if(!W8.has($)&&W8.size>=hf){let Q=W8.keys().next().value;if(Q)W8.delete(Q)}W8.set($,Z)}async function xf($){let Z=await Promise.all($.pluginPaths.map(async(Q)=>{try{let J=await Sf(Q);return`${Q}:${J.mtimeMs}:${J.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:Z})}function wB($,Z){return $.map((Q)=>({...Q,enabled:!Z.has(Q.name)}))}function gf($){return $.sort((Z,Q)=>{let J=Z.name.localeCompare(Q.name);if(J!==0)return J;return Z.path.localeCompare(Q.path)})}async function vf($,Z){if(!$.setup)return{tools:[]};let Q=[],J={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(J,{workspaceInfo:Z}),{tools:Q}}async function PB($){let Z=g$({workspacePath:$.workspacePath,cwd:$.cwd}),Q=f1($.disabledToolNames);if(Z.length===0)return{tools:[],failures:[],warnings:[]};let J=await xf({pluginPaths:Z,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),W=W8.get(J);if(W)return{tools:wB(W.tools,Q),failures:W.failures,warnings:W.warnings};let X=[],j=[],Y=[],V;try{V=await h2({pluginPaths:Z,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),j=[...V.failures],Y=[...V.warnings];for(let H of V.extensions??[]){let K=H.__clinePluginPath;if(!K)continue;let G=kf($.workspacePath,K)?"workspace-plugin":"global-plugin",F;try{F=await vf(H,{rootPath:$.workspacePath})}catch(U){j.push({pluginPath:K,pluginName:H.name,phase:"setup",message:U instanceof Error?U.message:String(U),stack:U instanceof Error?U.stack:void 0});continue}for(let U of F.tools)X.push({name:U.name,pluginName:H.name,path:K,source:G,description:U.description?.trim()||void 0})}}catch(H){j=Z.map((K)=>({pluginPath:K,phase:"load",message:H instanceof Error?H.message:String(H),stack:H instanceof Error?H.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let B=gf(X);return If(J,{tools:B,failures:j,warnings:Y}),{tools:wB(B,Q),failures:j,warnings:Y}}async function d7($){return(await PB($)).tools}function _6($,Z){if(!Z)return"global";let Q=hB(Z,$);return!Q.startsWith("..")&&!kB(Q)?"workspace":"global"}function df($,Z){return _6($,Z)==="workspace"?"workspace-plugin":"global-plugin"}function pf($,Z){let Q=hB(bB($),bB(Z));return Q===""||!Q.startsWith("..")&&!kB(Q)}function lf($){try{let Z=JSON.parse(mf($,"utf8"));return typeof Z.name==="string"&&Z.name.trim()?Z.name.trim():void 0}catch{return}}function rf($){let Z=SB($);while(!0){let Q=uf(Z,"package.json");if(D6(Q)){let W=lf(Q);if(W)return W;break}let J=SB(Z);if(J===Z)break;Z=J}return p7($,cf($))}function nf($){let Z=[];for(let Q of g$({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let J of v$([Q]))Z.push({directory:J,pluginName:rf(Q),pluginPath:Q,source:$.workspaceRoot?df(Q,$.workspaceRoot):"global-plugin"});return Z.sort((Q,J)=>J.directory.length-Q.directory.length)}function af($,Z){return Z.find((Q)=>pf(Q.directory,$))}function U6($){return[...$].sort((Z,Q)=>{let J=(W)=>{switch(W){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(Z.source!==Q.source)return J(Z.source)-J(Q.source);return Z.name.localeCompare(Q.name)})}function IB($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function xB($,Z){return $.cwd?.trim()||Z||process.cwd()}async function yB($,Z){if($.userInstructionService)return await Z($.userInstructionService);let Q=IB($),J=xB($,Q),W=t2({skills:{workspacePath:Q||void 0,includePluginSkills:!0,cwd:J},rules:{workspacePath:Q||void 0},workflows:{workspacePath:Q||void 0}});try{return await W.start(),await Z(W)}finally{W.stop()}}function of($,Z){if(!$)return;let Q=$.listRecords("skill");if(Z.id){let J=Q.find((W)=>W.id===Z.id);if(J)return J}for(let J of Q)if(J.filePath===Z.path||J.item.name===Z.name||J.id===Z.name)return J;return}class X8{async list($={}){return await yB($,async(Z)=>{let Q=IB($),J=nf({workspaceRoot:Q,cwd:xB($,Q)}),W=[],X=[],j=[],Y=[],V=[];if(Z){for(let H of Z.listRecords("workflow")){let K=H.item;W.push({id:H.id,name:K.name,path:H.filePath,enabled:K.disabled!==!0,kind:"workflow",source:_6(H.filePath,Q),description:K.instructions,toggleable:!1})}for(let H of Z.listRecords("rule")){let K=H.item;X.push({id:H.id,name:K.name,path:H.filePath,enabled:K.disabled!==!0,kind:"rule",source:_6(H.filePath,Q),description:K.instructions,toggleable:!1})}for(let H of Z.listRecords("skill")){let K=H.item,G=af(H.filePath,J);j.push({id:H.id,name:K.name,path:H.filePath,enabled:K.disabled!==!0,kind:"skill",source:G?.source??_6(H.filePath,Q),description:K.description,pluginName:G?.pluginName,pluginPath:G?.pluginPath,toggleable:!0})}}if(Q)try{for(let H of await d7({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))Y.push({id:`${H.pluginName}:${H.name}:${H.path}`,name:H.name,path:H.path,enabled:H.enabled,kind:"tool",source:H.source,description:H.description,toggleable:!0})}catch{}let B=j0();if(a$({filePath:B}))try{for(let H of G1({filePath:B}))V.push({id:H.name,name:H.name,path:B,enabled:H.disabled!==!0,kind:"mcp",source:_6(B,Q),description:H.transport.type,toggleable:!0})}catch{}return{workflows:U6(W.filter((H)=>D6(H.path))),rules:U6(X.filter((H)=>D6(H.path))),skills:U6(j.filter((H)=>D6(H.path))),tools:U6(Y),mcp:U6(V.filter((H)=>D6(H.path)))}})}async toggle($){if($.type==="skills")return await yB($,async(Z)=>{let Q=of(Z,$),J=Q?.filePath;if(!J)throw Error(`Unable to resolve skill setting '${$.id??$.name??p7($.path??"")}'.`);let W=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,X=$.enabled??(W!==void 0?!W:void 0);if(X===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??p7($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await iV({filePath:J,enabled:X}),await Z?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:Z}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)TQ($.name);else Aj($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let Z=$.name?.trim()||$.id?.trim();if(!Z)throw Error("MCP server settings toggle requires a server name.");let Q=$.path?.trim()||j0(),J=$.enabled;if(J===void 0){let W=G1({filePath:Q}).find((X)=>X.name===Z);if(!W)throw Error(`Unknown MCP server: ${Z}`);J=W.disabled===!0}return V6({filePath:Q,name:Z,disabled:!J}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function L6(){return new X8}function gB($){return{async list(Z){let Q=$;if(Q.listSettings)return await Q.listSettings(Z);return await L6().list(Z)},async toggle(Z){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(Z);return await L6().toggle(Z)}}}function vB($){function Z(){let Q=$.pendingPrompts;if(!Q)throw Error("Pending prompt service is not available.");return Q}return{list(Q){return Z().list(Q)},update(Q){return Z().update(Q)},delete(Q){return Z().delete(Q)}}}function h0(...$){let Z,Q;for(let W of $){if(!W)continue;if(W.toolExecutors)Z={...Z??{},...W.toolExecutors};if(W.requestToolApproval)Q=W.requestToolApproval}let J=Z&&Object.keys(Z).length>0;if(!J&&!Q)return;return{...J?{toolExecutors:Z}:{},...Q?{requestToolApproval:Q}:{}}}var A6="session_not_found";class s$ extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function t$($){return $ instanceof s$||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function l7($){let{hooks:Z,logger:Q,telemetry:J,extensionContext:W,extraTools:X,extensions:j,onTeamEvent:Y,onConsecutiveMistakeLimitReached:V,checkpoint:B,compaction:H,...K}=$,G={};if(Z)G.hooks=Z;if(Q)G.logger=Q;if(J)G.telemetry=J;if(W)G.extensionContext=W;if(X)G.extraTools=X;if(j)G.extensions=j;if(Y)G.onTeamEvent=Y;if(V)G.onConsecutiveMistakeLimitReached=V;if(B?.createCheckpoint)G.checkpoint=B;if(H?.compact)G.compaction=H;let F=Object.keys(G).length>0?G:void 0;return{config:{...K,...B?{checkpoint:{enabled:B.enabled}}:{},...H?{compaction:{enabled:H.enabled,strategy:H.strategy,preserveRecentTokens:H.preserveRecentTokens,summarizer:H.summarizer}}:{}},...F?{localRuntime:F}:{}}}function mB($){let Z=$.config;return"providerId"in Z?{...$,config:{...Z,...sf($.localRuntime)},localRuntime:$.localRuntime}:$}function i7($,Z={}){let Q=l7($.config),J=h0(Z.defaultCapabilities,$.capabilities),W=tf(Q.localRuntime,$.localRuntime),X=Z.withExtensionContext?.(W?.extensionContext);if(X)W={...W??{},extensionContext:X};return{...$,...Q,...W?{localRuntime:W}:{},...J?{capabilities:J}:{}}}function sf($){if(!$)return{};let{modelCatalogDefaults:Z,userInstructionService:Q,configExtensions:J,onTeamRestored:W,...X}=$;return X}function tf(...$){let Z={};for(let Q of $)if(Q)Object.assign(Z,Q);return Object.keys(Z).length>0?Z:void 0}q0();function cB($){let Z=$.input.config.telemetry??$.telemetry;if(!Z)return;Z.capture({event:x.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??T0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function O6($){return!!$&&typeof $==="object"&&!Array.isArray($)}function r7($){let Z=$?.trim();return Z?Z:void 0}function ef($,Z){let Q=$?.trim();if(!Q)return Z;let J=Date.parse(Q);if(!Number.isFinite(J))return Z;return new Date(J).toISOString()}function uB($,Z){return new Date(new Date($).getTime()+Math.max(0,Math.floor(Z))*1000).toISOString()}function dB($,Z){return new Date(new Date($).getTime()-Math.max(0,Math.floor(Z))*1000).toISOString()}function $R($,Z){if(!$)return Z;return new Date($).getTime()>=new Date(Z).getTime()?$:Z}function ZR($,Z){let Q=$.eventId.trim(),J=$.eventType.trim(),W=$.source.trim(),X=r7($.subject),j=r7($.dedupeKey)??`${J}:${W}:${X??Q}`;return{eventId:Q,eventType:J,source:W,subject:X,occurredAt:ef($.occurredAt,Z),workspaceRoot:r7($.workspaceRoot),payload:O6($.payload)?$.payload:void 0,attributes:O6($.attributes)?$.attributes:void 0,dedupeKey:j}}function n7($,Z){if(!Z)return;let Q=Z.split("."),J=$;for(let W of Q){if(!O6(J))return;J=J[W]}return J}function QR($,Z){if($.attributes&&Object.hasOwn($.attributes,Z))return $.attributes[Z];if($.payload&&Object.hasOwn($.payload,Z))return $.payload[Z];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},J=n7(Q,Z);if(J!==void 0)return J;if($.attributes){let W=n7($.attributes,Z);if(W!==void 0)return W}if($.payload)return n7($.payload,Z);return}function l5($,Z){if(Array.isArray(Z))return Z.some((Q)=>l5($,Q));if(Array.isArray($))return $.some((Q)=>l5(Q,Z));if(O6(Z)){if(!O6($))return!1;return Object.entries(Z).every(([Q,J])=>l5($[Q],J))}return Object.is($,Z)}function JR($,Z){if(!Z||Object.keys(Z).length===0)return!0;return Object.entries(Z).every(([Q,J])=>l5(QR($,Q),J))}class a7{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let Z=new Date(this.nowFn()).toISOString(),Q=ZR($,Z),J=this.store.insertEventLog(Q,{receivedAtIso:Z});if(!J.created)return this.logger?.debug("cron.event.duplicate",{eventId:J.record.eventId,eventType:J.record.eventType,source:J.record.source}),{event:J.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:J.record.dedupeKey}]};try{let W=this.store.listEventSpecsForType(Q.eventType),X=[],j=[],Y=[];for(let H of W){if(!JR(Q,H.filters)){X.push({specId:H.specId,externalId:H.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}j.push(H);let K=this.materializeForSpec(H,Q,J.record.receivedAt);if(K.run)Y.push(K.run);else X.push({specId:H.specId,externalId:H.externalId,reason:K.reason,dedupeKey:Q.dedupeKey})}let V=j.length===0?"unmatched":Y.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(J.record.eventId,{status:V,matchedSpecCount:j.length,queuedRunCount:Y.length,suppressedCount:X.filter((H)=>H.reason!=="filter_mismatch").length});let B=this.store.getEventLog(J.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:J.record.eventId,eventType:J.record.eventType,status:V,matchedSpecCount:j.length,queuedRunCount:Y.length}),{event:B??J.record,duplicate:!1,matchedSpecs:j,queuedRuns:Y,suppressions:X}}catch(W){if(this.store.updateEventLogProcessing(J.record.eventId,{status:"failed",error:W instanceof Error?W.message:String(W)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:J.record.eventId,eventType:J.record.eventType,error:W});throw W}}materializeForSpec($,Z,Q){let J=Z.dedupeKey??Z.eventId,W=$.debounceSeconds??0;if(W>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:J});if(V){let B=$R(V.scheduledFor,uB(Q,W)),H=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:Z.eventId,scheduledFor:B});if(H)return{run:H,reason:"dedupe_window"}}}let X=$.dedupeWindowSeconds??0;if(X>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:J,sinceIso:dB(Q,X)}))return{reason:"dedupe_window"};let j=$.cooldownSeconds??0;if(j>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:dB(Q,j)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:Z.eventId,scheduledFor:W>0?uB(Q,W):Q}),reason:"dedupe_window"}}}class q6{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},Z=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let J of Z)if(this.materializeOneOff(J))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let J of Q)try{if(this.materializeSchedule(J))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasConsumedOneOffRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:$.nextRunAt??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 FR}from"node:path";import{buildClineSystemPrompt as UR}from"@cline/shared";import{nowIso as tB}from"@cline/shared/db";import{basename as WR,resolve as XR}from"node:path";import{performance as pB}from"node:perf_hooks";import{processWorkspaceInfo as iB}from"@cline/shared";import rB from"simple-git";function jR($){let Z=$?.git;if(!Z||typeof Z!=="object"||Array.isArray(Z))return{};let Q=Z;return{...typeof Q.url==="string"&&Q.url.trim()?{url:Q.url.trim()}:{},...typeof Q.branch==="string"&&Q.branch.trim()?{branch:Q.branch.trim()}:{}}}function o7($,Z){let Q={...$??{}};if(!Z.url&&!Z.branch)return delete Q.git,Object.keys(Q).length>0?Q:void 0;let W={...Q.git&&typeof Q.git==="object"&&!Array.isArray(Q.git)?Q.git:{}};if(Z.url)W.url=Z.url;else delete W.url;if(Z.branch)W.branch=Z.branch;else delete W.branch;return Q.git=W,Q}function nB($,Z){let Q=jR($);return Q.url===Z.url&&Q.branch===Z.branch}function aB($){let Z=$.find(({name:Q})=>Q==="origin")??$[0];return(Z?.refs.fetch||Z?.refs.push)?.trim()||void 0}function V$($){return XR($)}async function r5($){return(await s7($)).info}function lB($){let Z=$ instanceof Error?$.message:String($);return/unknown revision|ambiguous argument|does not have any commits yet/i.test(Z)}function i5($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function s7($){let Z=V$($),Q={rootPath:Z,hint:WR(Z)||void 0},J={},W;try{let X=rB({baseDir:Z});if(!await X.checkIsRepo())return{info:Q,vcsType:"none",gitState:J};try{let Y=await X.getRemotes(!0);if(Y.length>0){let V=Y.map((H)=>{let K=H.refs.fetch||H.refs.push;return`${H.name}: ${K}`});Q.associatedRemoteUrls=V;let B=aB(Y);if(B)J.url=B}}catch(Y){W??=i5(Y)}try{let Y=(await X.revparse(["HEAD"])).trim();if(Y.length>0)Q.latestGitCommitHash=Y}catch(Y){if(!lB(Y))W??=i5(Y)}try{let Y=(await X.branch()).current.trim();if(Y.length>0)Q.latestGitBranchName=Y,J.branch=Y}catch(Y){if(!lB(Y))W??=i5(Y)}return{info:Q,vcsType:"git",gitState:J,error:W}}catch(X){return{info:Q,vcsType:"none",gitState:J,error:i5(X)}}}async function oB($){try{let Z=rB({baseDir:V$($)});if(!await Z.checkIsRepo())return{};let[Q,J]=await Promise.all([Z.getRemotes(!0),Z.branch()]),W=aB(Q),X=J.current.trim();return{...W?{url:W}:{},...X?{branch:X}:{}}}catch{return}}async function t7($){let Z=await r5($);return iB(Z)}async function sB($){let Z=pB.now(),Q=await s7($),J=pB.now()-Z,W=Q.info;return{workspaceInfo:W,workspaceMetadata:iB(W),durationMs:J,vcsType:Q.vcsType,gitState:Q.gitState,initError:Q.error}}import{mkdirSync as YR,writeFileSync as VR}from"node:fs";import{join as BR}from"node:path";import{resolveCronReportsDir as HR}from"@cline/shared/storage";function B$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function e$($,Z){if(Z===void 0||Z===null)return;return`${$}: ${B$(Z)}`}function KR($,Z,Q){let J=[`runId: ${B$($.runId)}`,`specId: ${B$(Z.specId)}`,`externalId: ${B$(Z.externalId)}`,`title: ${B$(Z.title)}`,`triggerKind: ${B$($.triggerKind)}`,`status: ${B$($.status)}`,`sourcePath: ${B$(Z.sourcePath)}`],W=[e$("sessionId",$.sessionId),e$("startedAt",$.startedAt),e$("completedAt",$.completedAt),e$("triggerEventId",$.triggerEventId),e$("triggerEventType",Q?.eventType),e$("triggerEventSource",Q?.source),e$("triggerEventSubject",Q?.subject)];for(let X of W)if(X)J.push(X);return`---
|
|
182
182
|
${J.join(`
|
|
183
183
|
`)}
|
|
184
184
|
---
|
|
185
|
-
`}function
|
|
185
|
+
`}function GR($){let Z=[];if($.triggerEvent){let Q=$.triggerEvent,J=[`- 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);Z.push(`## Trigger Event
|
|
186
186
|
|
|
187
187
|
${J.join(`
|
|
188
188
|
`)}
|
|
@@ -201,17 +201,17 @@ ${J.join(`
|
|
|
201
201
|
${Q.join(`
|
|
202
202
|
`)}
|
|
203
203
|
`)}return Z.join(`
|
|
204
|
-
`)}function e7($){let Z=
|
|
205
|
-
${
|
|
206
|
-
`)}class Z3 extends Error{constructor($){super($);this.name="TimeoutError"}}async function
|
|
204
|
+
`)}function e7($){let Z=HR($.specs);YR(Z,{recursive:!0});let Q=BR(Z,`${$.run.runId}.md`),J=`${KR($.run,$.spec,$.data.triggerEvent)}
|
|
205
|
+
${GR($.data)}`;return VR(Q,J,"utf8"),Q}class $3{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,Z,Q){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let J=Math.max(1,Math.floor(Q)),W=this.activeExecutions.get($)??new Set;if(W.size>=J)return!1;return W.add(Z),this.activeExecutions.set($,W),!0}release($,Z){let Q=this.activeExecutions.get($);if(!Q)return;if(Q.delete(Z),Q.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let Z of this.activeExecutions.values())$+=Z.size;return $}}var DR=15000,_R=90,eB=["rules","skills","plugins"];function LR($,Z){return new Set($.extensions??eB).has(Z)}function AR($,Z){let Q=$.tools===void 0?{"*":{autoApprove:!0}}:{"*":{enabled:!1,autoApprove:!0}};for(let J of $.tools??[])Q[J]={enabled:!0,autoApprove:!0};if(Q[N0.ASK]={...Q[N0.ASK],enabled:!1,autoApprove:!0},Z==="yolo")Q[N0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Q}function OR($){let Z=$?.trim();if(!Z)return;return["# Notes Directory",`Use ${Z} for durable notes related to this automation.`,"Before starting, inspect relevant existing notes there when useful. During or after the run, write concise notes there when they would help future runs continue with context."].join(`
|
|
206
|
+
`)}class Z3 extends Error{constructor($){super($);this.name="TimeoutError"}}async function qR($,Z){if(Z<=0)return $;let Q,J=new Promise((W,X)=>{Q=setTimeout(()=>{X(new Z3("cron run timed out"))},Z)});try{return await Promise.race([$,J])}finally{if(Q)clearTimeout(Q)}}class z6{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 $3($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??_R)*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??DR);await this.tick(),this.timer=setInterval(()=>void this.tick(),$)}async stop(){let $=this.started;if(this.started=!1,this.stopping=!0,this.timer)clearInterval(this.timer),this.timer=void 0;if(!$)return;let Z=[...this.activeRuns.entries()];await Promise.all(Z.map(async([Q,J])=>{if(J.sessionId)try{await this.options.runtimeHandlers.abortSession(J.sessionId)}catch{}try{this.store.requeueRun({runId:Q,claimToken:J.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:tB(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((Z)=>this.executeClaim(Z)))}catch($){let Z=this.options.logger;if(Z)if(Z.error)Z.error("cron.runner.tick.failed",{error:$});else Z.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,Z])=>{let Q=this.store.getRun($);return Q?[{...Q,...Z}]:[]})}async executeClaim($){let Z=$.run,Q=this.store.getSpec(Z.specId);if(!Q){this.store.completeRun(Z.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!Q.enabled||Q.removed){this.store.completeRun(Z.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let J=Q.maxParallel&&Q.maxParallel>0?Q.maxParallel:1;if(!this.limiter.acquire(Q.specId,Z.runId,J)){this.store.requeueRun({runId:Z.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(Q.specId,Z.runId),this.store.requeueRun({runId:Z.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(Z.runId,{claimToken:$.claimToken});let X=Z.triggerEventId?this.store.getEventLog(Z.triggerEventId):void 0,j,Y,V=Date.now(),B;if(Q.timeoutSeconds&&Q.timeoutSeconds>0)B=V+Q.timeoutSeconds*1000;try{Y=this.startClaimLeaseHeartbeat($);let H=await this.buildStartRequest(Q);if(j=(await this.options.runtimeHandlers.startSession(H)).sessionId.trim(),!j)throw Error("runtime returned empty sessionId");this.activeRuns.set(Z.runId,{claimToken:$.claimToken,sessionId:j}),this.store.attachSessionIdToRun(Z.runId,j);let G={config:H,prompt:this.buildPrompt(Q,X)},F=this.options.runtimeHandlers.sendSession(j,G),U=B?Math.max(1,B-Date.now()):0,L=(await qR(F,U)).result,O=Date.now(),D=e7({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:j,status:"done"},spec:Q,data:{finalText:L.text,usage:L.usage,toolCalls:L.toolCalls,durationMs:O-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"done",sessionId:j,reportPath:D,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",Q,Z.runId),this.store.updateSpecLastRunAt(Q.specId,tB())}catch(H){let K=H instanceof Z3;if(j&&K)try{await this.options.runtimeHandlers.abortSession(j)}catch{}let G=H instanceof Error?H.message:String(H),F=Date.now(),U=e7({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:j,status:"failed"},spec:Q,data:{error:G,durationMs:F-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"failed",sessionId:j,reportPath:U,error:G,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.failed",Q,Z.runId)}finally{if(Z.triggerKind==="one_off")this.store.updateSpecNextRunAt(Q.specId,void 0);if(Y?.(),j)try{await this.options.runtimeHandlers.stopSession(j)}catch{}this.activeRuns.delete(Z.runId),this.limiter.release(Q.specId,Z.runId)}}publishScheduleExecutionEvent($,Z,Q){if(Z.source!=="hub-schedule"||!this.options.eventPublisher)return;let J=this.store.getRun(Q);if(!J)return;let W=J.status==="done"?"success":J.status==="cancelled"?"aborted":J.status==="running"?"running":J.status==="queued"?"pending":"failed";this.options.eventPublisher($,{scheduleId:Z.externalId,executionId:J.runId,sessionId:J.sessionId,triggeredAt:new Date(J.scheduledFor??J.createdAt).getTime(),startedAt:J.startedAt?new Date(J.startedAt).getTime():void 0,endedAt:J.completedAt?new Date(J.completedAt).getTime():void 0,status:W,errorMessage:J.error})}buildPrompt($,Z){let Q=$.prompt??"";if(!Z)return Q;let J={eventId:Z.eventId,eventType:Z.eventType,source:Z.source,subject:Z.subject,occurredAt:Z.occurredAt,workspaceRoot:Z.workspaceRoot,dedupeKey:Z.dedupeKey,attributes:Z.attributes,payload:Z.payload};return`${Q}
|
|
207
207
|
|
|
208
208
|
Trigger event:
|
|
209
|
-
${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Q=setInterval(()=>{let J=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,J))clearInterval(Q)},Z);return()=>clearInterval(Q)}async buildSystemPrompt($,Z,Q,J){let W=
|
|
209
|
+
${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Q=setInterval(()=>{let J=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,J))clearInterval(Q)},Z);return()=>clearInterval(Q)}async buildSystemPrompt($,Z,Q,J){let W=OR($.notesDirectory),X=W5(void 0,W),j=await t7(Z),Y=UR({ide:"Cline Cron",workspaceRoot:Z,workspaceName:FR(Z),metadata:j,rules:$.systemPrompt?void 0:X,mode:Q,providerId:J,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?W5(Y,X)??Y:Y}async buildStartRequest($){let Z=($.workspaceRoot??"").trim(),Q=($.providerId??"").trim(),J=($.modelId??"").trim(),W=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,X=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():Z;if(!Z)throw Error("cron spec requires workspaceRoot");let j=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:Z,cwd:X,provider:Q,model:J,mode:j,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,Z,j,Q),maxIterations:$.maxIterations,enableTools:W?.enableTools??!0,enableSpawn:W?.enableSpawn??!0,enableTeams:W?.enableTeams??!0,autoApproveTools:W?.autoApproveTools??!0,toolPolicies:AR($,j),configExtensions:eB.filter((Y)=>LR($,Y))}}}import{existsSync as dR,readdirSync as pR,readFileSync as lR,statSync as iR}from"node:fs";import{relative as rR}from"node:path";import{resolveCronSpecsDir as nR}from"@cline/shared/storage";function T6($,Z,Q,J){let W=new Set;function X(j){let Y=j.toLowerCase();if(J){let B=J.indexOf(Y);if(B!==-1)return B+Z}let V=Number(j);if(!Number.isInteger(V)||V<Z||V>Q)throw Error(`Invalid cron value "${j}" for range [${Z}-${Q}]`);return V}for(let j of $.split(",")){if(j==="*"){for(let B=Z;B<=Q;B+=1)W.add(B);continue}let Y=j.indexOf("/");if(Y!==-1){let B=j.slice(0,Y),H=Number(j.slice(Y+1));if(!Number.isInteger(H)||H<1)throw Error(`Invalid step "${j.slice(Y+1)}"`);let K=Z,G=Q;if(B!=="*"){let F=B.indexOf("-");if(F!==-1)K=X(B.slice(0,F)),G=X(B.slice(F+1));else K=X(B)}if(K>G)throw Error(`Invalid cron range "${B}"`);for(let F=K;F<=G;F+=H)W.add(F);continue}let V=j.indexOf("-");if(V!==-1){let B=X(j.slice(0,V)),H=X(j.slice(V+1));if(B>H)throw Error(`Invalid cron range "${j}"`);for(let K=B;K<=H;K+=1)W.add(K);continue}W.add(X(j))}return[...W].sort((j,Y)=>j-Y)}var zR=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],ZH=["sun","mon","tue","wed","thu","fri","sat"];function N6($,Z,Q){let J=$[Z];if(typeof J!=="string")throw Error(`Invalid cron pattern "${Q}": missing field ${Z+1}`);return J}function Q3($,Z){let Q=$[0];if(typeof Q!=="number")throw Error(`Invalid cron pattern: no values parsed for ${Z}`);return Q}function J3($){let Z=$.trim().split(/\s+/);if(Z.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${Z.length}`);return{minutes:T6(N6(Z,0,$),0,59),hours:T6(N6(Z,1,$),0,23),daysOfMonth:T6(N6(Z,2,$),1,31),months:T6(N6(Z,3,$),1,12,zR),daysOfWeek:T6(N6(Z,4,$),0,6,ZH)}}function QH($){J3($)}function JH($,Z,Q=Date.now()){$2($,Q,Z)}var $H=new Map,TR=new Map(ZH.map(($,Z)=>[$,Z]));function WH($){let Z=$?.trim();return Z?Z:void 0}function XH($){let Z=$H.get($);if(Z)return Z;let Q=new Intl.DateTimeFormat("en-US",{timeZone:$,calendar:"gregory",numberingSystem:"latn",year:"numeric",month:"2-digit",day:"2-digit",weekday:"short",hour:"2-digit",minute:"2-digit",hourCycle:"h23"});return $H.set($,Q),Q}function NR($){let Z=WH($);if(!Z)return;XH(Z).format(new Date)}function fR($,Z){let Q=XH(Z).formatToParts(new Date($)),J=new Map(Q.map((j)=>[j.type,j.value])),W=J.get("weekday")?.toLowerCase().slice(0,3)??"",X=TR.get(W);if(X===void 0)throw Error(`Unable to resolve weekday for timezone "${Z}"`);return{month:Number(J.get("month")),dayOfMonth:Number(J.get("day")),dayOfWeek:X,hour:Number(J.get("hour")),minute:Number(J.get("minute"))}}function RR($){let Z=new Date($);return{month:Z.getMonth()+1,dayOfMonth:Z.getDate(),dayOfWeek:Z.getDay(),hour:Z.getHours(),minute:Z.getMinutes()}}function MR($,Z){return $.months.includes(Z.month)&&$.daysOfMonth.includes(Z.dayOfMonth)&&$.daysOfWeek.includes(Z.dayOfWeek)&&$.hours.includes(Z.hour)&&$.minutes.includes(Z.minute)}function ER($,Z,Q){let J=J3($),W=new Date(Z);W.setSeconds(0,0);let X=W.getTime()+60000,j=new Date(Z);j.setFullYear(j.getFullYear()+4);let Y=j.getTime();while(X<=Y){if(MR(J,fR(X,Q)))return X;X+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Q}"`)}function $2($,Z,Q){let J=WH(Q);if(J)return NR(J),ER($,Z,J);let W=J3($),X=new Date(Z);X.setSeconds(0,0),X=new Date(X.getTime()+60000);let j=new Date(Z);j.setFullYear(j.getFullYear()+4);while(X<=j){let{month:Y,dayOfMonth:V,dayOfWeek:B,hour:H,minute:K}=RR(X.getTime());if(!W.months.includes(Y)){let G=W.months.find((U)=>U>Y)??Q3(W.months,"months"),F=G<=Y?1:0;X=new Date(X.getFullYear()+F,G-1,1,0,0,0,0);continue}if(!W.daysOfMonth.includes(V)||!W.daysOfWeek.includes(B)){X=new Date(X.getFullYear(),X.getMonth(),V+1,0,0,0,0);continue}if(!W.hours.includes(H)){let G=W.hours.find((U)=>U>H)??Q3(W.hours,"hours"),F=G<=H?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate()+F,G,0,0,0);continue}if(!W.minutes.includes(K)){let G=W.minutes.find((U)=>U>K)??Q3(W.minutes,"minutes"),F=G<=K?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate(),X.getHours()+F,G,0,0);continue}return X.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{createHash as CR}from"node:crypto";import wR from"yaml";function PR($){let Z=$.replace(/\\/g,"/");if(Z.startsWith("events/")&&Z.endsWith(".event.md"))return"event";if(Z.endsWith(".cron.md"))return"schedule";return"one_off"}function SR($){let Z=$.replace(/\r\n/g,`
|
|
210
210
|
`);if(!Z.startsWith(`---
|
|
211
211
|
`))return{frontmatter:void 0,body:$};let Q=Z.slice(4),J=Q.indexOf(`
|
|
212
212
|
---`);if(J===-1)return{frontmatter:void 0,body:$};let W=Q.slice(0,J),X=Q.slice(J+4);if(X.startsWith(`
|
|
213
|
-
`))X=X.slice(1);return{frontmatter:W,body:X}}function a0($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function
|
|
214
|
-
`),Q.update(Z),Q.digest("hex")}function
|
|
213
|
+
`))X=X.slice(1);return{frontmatter:W,body:X}}function a0($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function bR($){if(!Array.isArray($))return;let Z=$.map((Q)=>typeof Q==="string"?Q.trim():"").filter((Q)=>Q.length>0);return Z.length>0?Z:void 0}function j3($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function yR($){let Z=j3($);if(!Z)return;let Q=a0(Z.providerId),J=a0(Z.modelId);if(Q===void 0&&J===void 0)return;return{providerId:Q,modelId:J}}function kR($){if(typeof $!=="string")return;let Z=$.trim().toLowerCase();if(Z==="act"||Z==="plan"||Z==="yolo")return Z;return}function YH($,Z={}){let Q=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!Q)return;let J=[...new Set(Q.map((W)=>typeof W==="string"?W.trim():"").filter((W)=>W.length>0))];if(Array.isArray($)&&Z.preserveEmptyArray)return J;return J.length>0?J:void 0}var hR=new Set(g2);function IR($){let Z=YH($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((J)=>!hR.has(J));if(Q.length>0)throw Error(`unknown tool(s): ${Q.join(", ")}`);return Z}var xR=new Set(["rules","skills","plugins"]);function gR($){let Z=YH($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((J)=>!xR.has(J));if(Q.length>0)throw Error(`unknown extension(s): ${Q.join(", ")}`);return Z}function W3($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function X3($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function Y3($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Q)=>Y3(Q)).join(",")}]`;let Z=Object.entries($).filter(([,Q])=>Q!==void 0);return Z.sort(([Q],[J])=>Q<J?-1:Q>J?1:0),`{${Z.map(([Q,J])=>`${JSON.stringify(Q)}:${Y3(J)}`).join(",")}}`}function VH($,Z){let Q=CR("sha256");return Q.update(Y3($)),Q.update(`
|
|
214
|
+
`),Q.update(Z),Q.digest("hex")}function vR($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var mR=["schedule","timezone"],cR=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],uR=["cwd"];function jH($,Z,Q,J,W){return{externalId:$,relativePath:$,triggerKind:Z,body:Q,contentHash:VH(J,Q),error:W}}function F1($,Z,Q,J,W,X){return{externalId:$,relativePath:Z,triggerKind:Q,body:J,contentHash:W,error:X}}function BH($){let Z=$.relativePath.replace(/\\/g,"/"),Q=PR(Z),{frontmatter:J,body:W}=SR($.raw),X={};if(J!==void 0&&J.trim().length>0)try{let D=wR.parse(J);if(D&&typeof D==="object"&&!Array.isArray(D))X=D;else if(D!==null&&D!==void 0)return jH(Z,Q,W,{},"frontmatter must be a YAML mapping")}catch(D){return jH(Z,Q,W,{},D instanceof Error?`failed to parse frontmatter: ${D.message}`:"failed to parse frontmatter")}let j=VH(X,W),Y=a0(X.id),V=Y??Z;if(Q!=="schedule"){for(let D of mR)if(X[D]!==void 0)return F1(V,Z,Q,W,j,`field "${D}" is only allowed on *.cron.md specs`)}for(let D of uR)if(X[D]!==void 0)return F1(V,Z,Q,W,j,`field "${D}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Q!=="event"){for(let D of cR)if(X[D]!==void 0)return F1(V,Z,Q,W,j,`field "${D}" is only allowed on .event.md specs`)}let B=a0(X.prompt),H=W.trim(),K=B??(H.length>0?H:void 0);if(!K)return F1(V,Z,Q,W,j,"prompt is required (frontmatter `prompt` or markdown body)");let G=a0(X.workspaceRoot);if(!G)return F1(V,Z,Q,W,j,"workspaceRoot is required");let F,U;try{F=IR(X.tools),U=gR(X.extensions)}catch(D){return F1(V,Z,Q,W,j,D instanceof Error?D.message:String(D))}let _=kR(X.mode);if(X.mode!==void 0&&_===void 0)return F1(V,Z,Q,W,j,"mode must be one of: act, plan, yolo");let L={id:Y,title:a0(X.title)??Y??vR(Z),prompt:K,workspaceRoot:G,mode:_??"yolo",systemPrompt:a0(X.systemPrompt),modelSelection:yR(X.modelSelection),maxIterations:W3(X.maxIterations),timeoutSeconds:W3(X.timeoutSeconds),tools:F,notesDirectory:a0(X.notesDirectory),extensions:U,source:a0(X.source)??"user",tags:bR(X.tags),enabled:typeof X.enabled==="boolean"?X.enabled:!0,metadata:j3(X.metadata)},O;if(Q==="schedule"){let D=a0(X.schedule);if(!D)return F1(V,Z,Q,W,j,"schedule is required for *.cron.md specs");let q=a0(X.timezone);try{JH(D,q)}catch(z){return F1(V,Z,Q,W,j,z instanceof Error?z.message:String(z))}O={...L,triggerKind:"schedule",schedule:D,timezone:q}}else if(Q==="event"){let D=a0(X.event);if(!D)return F1(V,Z,Q,W,j,"event is required for .event.md specs");O={...L,triggerKind:"event",event:D,filters:j3(X.filters),debounceSeconds:X3(X.debounceSeconds),dedupeWindowSeconds:X3(X.dedupeWindowSeconds),cooldownSeconds:X3(X.cooldownSeconds),maxParallel:W3(X.maxParallel)}}else O={...L,triggerKind:"one_off"};return{externalId:V,relativePath:Z,triggerKind:Q,body:W,contentHash:j,spec:O}}function aR($,Z){return rR($,Z).replace(/\\/g,"/")}function oR($){if(!dR($))return[];let Z=[],Q=[$];while(Q.length>0){let J=Q.pop();if(!J)continue;let W;try{W=pR(J,{withFileTypes:!0})}catch{continue}for(let X of W){let j=`${J}/${X.name}`;if(X.isDirectory()){if(X.name==="reports")continue;Q.push(j);continue}if(!X.isFile())continue;if(!X.name.endsWith(".md"))continue;Z.push(j)}}return Z}class V3{store;cronDir;constructor($){this.store=$.store,this.cronDir=nR($.specs??($.workspaceRoot?{scope:"workspace",workspaceRoot:$.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let $={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},Z=oR(this.cronDir),Q=new Set;for(let W of Z){let X=aR(this.cronDir,W);Q.add(X),$.scanned+=1;let j=await this.reconcileFile(X,W);if(j){if($.changes.push(j),$.upserted+=1,j.parse.error)$.invalidParses+=1}}let J=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let W of J)if(!Q.has(W.sourcePath))this.handleFileDeleted(W),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,Z){let Q=this.store.getSpecBySourcePath($),J,W;try{J=lR(Z,"utf8"),W=iR(Z).mtimeMs}catch{return}let j=BH({relativePath:$,raw:J}),Y=this.store.upsertSpec({externalId:j.externalId,sourcePath:$,triggerKind:j.triggerKind,sourceMtimeMs:W,sourceHash:j.contentHash,parseStatus:j.error?"invalid":"valid",parseError:j.error,spec:j.spec});if(!j.error&&j.triggerKind==="schedule"&&Y.record.enabled)this.applyScheduleNextRunAt(Y.record,{forceReset:!Q||Q.removed||!Q.enabled||Q.scheduleExpr!==Y.record.scheduleExpr||Q.timezone!==Y.record.timezone});return{relativePath:$,result:Y,parse:j}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Z of $)this.applyScheduleNextRunAt(Z,{forceReset:!1})}applyScheduleNextRunAt($,Z){if(!$.scheduleExpr)return;if(!Z.forceReset&&$.nextRunAt)return;try{let Q=Date.now(),J=$.lastRunAt?Math.max(Q,new Date($.lastRunAt).getTime()):Q,W=$2($.scheduleExpr,J,$.timezone),X=new Date(W).toISOString();if($.nextRunAt!==X)this.store.updateSpecNextRunAt($.specId,X)}catch{}}}import{existsSync as sR,mkdirSync as tR,watch as eR}from"node:fs";import{relative as $M,resolve as ZM}from"node:path";var QM=250;class B3{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??QM),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{tR($,{recursive:!0}),this.watcher=eR($,{recursive:!0},(Z,Q)=>{if(!Q)return;let J=String(Q).replace(/\\/g,"/");if(!J.endsWith(".md"))return;if(J.startsWith("reports/"))return;this.scheduleReconcile(J)}),this.watcher.on("error",this.onError)}catch(Z){this.onError(Z)}}stop(){for(let $ of this.pending.values())clearTimeout($);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile($){let Z=this.pending.get($);if(Z)clearTimeout(Z);let Q=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,Q)}async reconcileNow($){try{let Z=ZM(this.reconciler.getCronDir(),$);if(!sR(Z)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Q=$M(this.reconciler.getCronDir(),Z).replace(/\\/g,"/");await this.reconciler.reconcileFile(Q,Z),await this.onReconciled()}catch(Z){this.onError(Z)}}}import{randomUUID as f6}from"node:crypto";import{ONE_TIME_SCHEDULE_CRON_PATTERN as R6,ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY as j8}from"@cline/shared";import{asOptionalString as m,asString as $0,loadSqliteDb as WM,nowIso as _0}from"@cline/shared/db";import{resolveCronDbPath as XM}from"@cline/shared/storage";var JM=[`CREATE TABLE IF NOT EXISTS cron_specs (
|
|
215
215
|
spec_id TEXT PRIMARY KEY,
|
|
216
216
|
external_id TEXT NOT NULL,
|
|
217
217
|
source_path TEXT NOT NULL UNIQUE,
|
|
@@ -302,11 +302,11 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
302
302
|
ON cron_specs(trigger_kind, enabled, next_run_at);`,`CREATE INDEX IF NOT EXISTS cron_specs_event_match_idx
|
|
303
303
|
ON cron_specs(trigger_kind, event_type, enabled);`,`CREATE INDEX IF NOT EXISTS cron_specs_parse_status_idx
|
|
304
304
|
ON cron_specs(parse_status, updated_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_source_path_idx
|
|
305
|
-
ON cron_specs(source_path);`];function
|
|
305
|
+
ON cron_specs(source_path);`];function HH($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let Z of JM)$.exec(Z)}function o5($){if(!$)return;try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function H3($,Z={}){if(!$)return;try{let Q=JSON.parse($);if(!Array.isArray(Q))return;let J=Q.map((W)=>typeof W==="string"?W.trim():"").filter((W)=>W.length>0);if(Z.preserveEmpty)return J;return J.length>0?J:void 0}catch{return}}function Z2($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function H$($){return{specId:$0($.spec_id),externalId:$0($.external_id),sourcePath:$0($.source_path),triggerKind:$0($.trigger_kind),sourceMtimeMs:Z2($.source_mtime_ms),sourceHash:m($.source_hash),parseStatus:$0($.parse_status)==="invalid"?"invalid":"valid",parseError:m($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:$0($.title),prompt:m($.prompt),workspaceRoot:m($.workspace_root),scheduleExpr:m($.schedule_expr),timezone:m($.timezone),eventType:m($.event_type),filters:o5(m($.filters_json)),debounceSeconds:Z2($.debounce_seconds),dedupeWindowSeconds:Z2($.dedupe_window_seconds),cooldownSeconds:Z2($.cooldown_seconds),mode:m($.mode),systemPrompt:m($.system_prompt),providerId:m($.provider_id),modelId:m($.model_id),maxIterations:Z2($.max_iterations),timeoutSeconds:Z2($.timeout_seconds),maxParallel:Z2($.max_parallel),tools:H3(m($.tools_json),{preserveEmpty:!0}),notesDirectory:m($.notes_directory),extensions:H3(m($.extensions_json),{preserveEmpty:!0}),source:m($.source),tags:H3(m($.tags_json)),metadata:o5(m($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:m($.last_materialized_run_id),lastRunAt:m($.last_run_at),nextRunAt:m($.next_run_at),createdAt:$0($.created_at),updatedAt:$0($.updated_at)}}function n5($){return{runId:$0($.run_id),specId:$0($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:$0($.trigger_kind),status:$0($.status),claimToken:m($.claim_token),claimStartedAt:m($.claim_started_at),claimUntilAt:m($.claim_until_at),scheduledFor:m($.scheduled_for),triggerEventId:m($.trigger_event_id),startedAt:m($.started_at),completedAt:m($.completed_at),sessionId:m($.session_id),reportPath:m($.report_path),error:m($.error),attemptCount:Number($.attempt_count??0),createdAt:$0($.created_at),updatedAt:$0($.updated_at)}}function KH($){return{eventId:$0($.event_id),eventType:$0($.event_type),source:$0($.source),subject:m($.subject),occurredAt:$0($.occurred_at),receivedAt:$0($.received_at),workspaceRoot:m($.workspace_root),dedupeKey:m($.dedupe_key),payload:o5(m($.payload_json)),attributes:o5(m($.attributes_json)),processingStatus:$0($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:m($.error),createdAt:$0($.created_at),updatedAt:$0($.updated_at)}}function GH($){return $?JSON.stringify($):null}var jM=["triggerKind","prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function a5($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function YM($,Z,Q,J){for(let j of jM){let Y=$[j],V=Z[j];if(a5(Y)!==a5(V))return!0}let W=$.triggerKind==="one_off"||Z.triggerKind==="one_off",X=Z.metadata;if(W&&a5($.metadata?.[j8])!==a5(X?.[j8]))return!0;if(Q===!1&&J===!0)return!0;return!1}function VM($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function BM($){return`hub/schedules/${$}.cron.md`}function HM($){let Z={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};if($.cronPattern.trim()!==R6)delete Z[j8];return Object.keys(Z).length>0?Z:void 0}function K3($){let Z=$.cronPattern.trim()===R6,Q={title:$.name.trim(),prompt:$.prompt,workspaceRoot:$.workspaceRoot.trim(),mode:$.mode??"yolo",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:HM($)};return Z?{...Q,triggerKind:"one_off"}:{...Q,triggerKind:"schedule",schedule:$.cronPattern.trim()}}function FH($){return JSON.stringify(K3($))}function KM($,Z){let Q=$.metadata?{...$.metadata}:{},J=Z.createdBy===null?void 0:Z.createdBy!==void 0?Z.createdBy:typeof Q.__hubScheduleCreatedBy==="string"?Q.__hubScheduleCreatedBy:void 0,W=Z.cwd!==void 0?Z.cwd:typeof Q.__hubScheduleCwd==="string"?Q.__hubScheduleCwd:void 0,X=Z.runtimeOptions!==void 0?Z.runtimeOptions:Q.__hubRuntimeOptions&&typeof Q.__hubRuntimeOptions==="object"&&!Array.isArray(Q.__hubRuntimeOptions)?Q.__hubRuntimeOptions:void 0;delete Q.__hubScheduleCreatedBy,delete Q.__hubScheduleCwd,delete Q.__hubRuntimeOptions;let j=Z.cronPattern??($.triggerKind==="one_off"?R6:$.scheduleExpr??""),Y={...Q,...Z.metadata??{}};if(j.trim()!==R6)delete Y[j8];return{name:Z.name??$.title,cronPattern:j,prompt:Z.prompt??$.prompt??"",workspaceRoot:Z.workspaceRoot??$.workspaceRoot??"",cwd:W,modelSelection:Z.modelSelection!==void 0?Z.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:Z.enabled??$.enabled,mode:Z.mode??($.mode==="plan"?"plan":$.mode==="act"?"act":"yolo"),systemPrompt:Z.systemPrompt===null?void 0:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,maxIterations:Z.maxIterations===null?void 0:Z.maxIterations!==void 0?Z.maxIterations:$.maxIterations,timeoutSeconds:Z.timeoutSeconds===null?void 0:Z.timeoutSeconds!==void 0?Z.timeoutSeconds:$.timeoutSeconds,maxParallel:Z.maxParallel??$.maxParallel??1,createdBy:J,tags:Z.tags??$.tags,runtimeOptions:X,metadata:Object.keys(Y).length>0?Y:void 0}}class M6{db;constructor($={}){let Z=$.dbPath??XM();this.db=WM(Z),HH(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return Z?H$(Z):void 0}getSpec($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return Z?H$(Z):void 0}getSpecByExternalId($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return Z?H$(Z):void 0}listSpecs($={}){let Z=[],Q=[];if($.triggerKind)Z.push("trigger_kind = ?"),Q.push($.triggerKind);if(typeof $.enabled==="boolean")Z.push("enabled = ?"),Q.push($.enabled?1:0);if($.parseStatus)Z.push("parse_status = ?"),Q.push($.parseStatus);if(!$.includeRemoved)Z.push("removed = 0");let J=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${J} ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((j)=>H$(j))}createHubSchedule($){let Z=`sched_${f6()}`,Q=K3($),J=this.upsertSpec({externalId:Z,sourcePath:BM(Z),triggerKind:Q.triggerKind,sourceHash:FH($),parseStatus:"valid",spec:Q});this.initializeHubScheduleNextRun(J.record.specId,$);let W=this.getSpec(J.record.specId);if(!W)throw Error("failed to create hub schedule");return W}getHubSchedule($){let Z=this.db.prepare(`SELECT * FROM cron_specs
|
|
306
306
|
WHERE external_id = ? AND source = 'hub-schedule' AND removed = 0
|
|
307
307
|
ORDER BY created_at ASC LIMIT 1`).get($);return Z?H$(Z):void 0}listHubSchedules($={}){let Z=["source = 'hub-schedule'","trigger_kind IN ('schedule', 'one_off')","removed = 0"],Q=[];if(typeof $.enabled==="boolean")Z.push("enabled = ?"),Q.push($.enabled?1:0);if($.tags&&$.tags.length>0)for(let X of $.tags)Z.push("tags_json LIKE ?"),Q.push(`%"${X.trim()}"%`);let J=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_specs
|
|
308
308
|
WHERE ${Z.join(" AND ")}
|
|
309
|
-
ORDER BY created_at DESC LIMIT ?`).all(...Q,J).map((X)=>H$(X))}updateHubSchedule($,Z){this.db.exec("BEGIN IMMEDIATE;");try{let Q=this.getHubSchedule($);if(!Q){this.db.exec("COMMIT;");return}let J=
|
|
309
|
+
ORDER BY created_at DESC LIMIT ?`).all(...Q,J).map((X)=>H$(X))}updateHubSchedule($,Z){this.db.exec("BEGIN IMMEDIATE;");try{let Q=this.getHubSchedule($);if(!Q){this.db.exec("COMMIT;");return}let J=KM(Q,Z),W=K3(J),X=this.upsertSpec({externalId:$,sourcePath:Q.sourcePath,triggerKind:W.triggerKind,sourceHash:FH(J),parseStatus:"valid",spec:W}),j=Q.enabled!==X.record.enabled;if((Q.triggerKind==="one_off"||X.record.triggerKind==="one_off")&&(X.revisionChanged||j))this.cancelQueuedOneOffRunsForSpec(X.record.specId);if(Z.cronPattern!==void 0||Z.metadata?.[j8]!==void 0||Z.enabled!==void 0)this.initializeHubScheduleNextRun(X.record.specId,J);let V=this.getSpec(X.record.specId);return this.db.exec("COMMIT;"),V}catch(Q){throw this.db.exec("ROLLBACK;"),Q}}initializeHubScheduleNextRun($,Z){if(Z.enabled===!1){this.updateSpecNextRunAt($,void 0);return}if(Z.cronPattern.trim()===R6){let Q=Z.metadata?.[j8];if(typeof Q!=="number"||!Number.isFinite(Q))throw Error("runAt metadata is required for one-time schedules");this.updateSpecNextRunAt($,new Date(Q).toISOString());return}this.initializeScheduleNextRun($)}deleteHubSchedule($){let Z=this.getHubSchedule($);if(!Z)return!1;return this.markSpecRemoved(Z.specId),this.cancelQueuedRunsForSpec(Z.specId),!0}enqueueHubScheduleRun($,Z="manual"){let Q=this.getHubSchedule($);if(!Q||!Q.enabled||Q.removed||Q.parseStatus!=="valid")return;if(Q.triggerKind==="one_off"&&Z==="manual")return this.consumeOneOffWithManualRun(Q);return this.enqueueRun({specId:Q.specId,specRevision:Q.revision,triggerKind:Z,scheduledFor:_0()})}consumeOneOffWithManualRun($){this.db.exec("BEGIN IMMEDIATE;");try{let Z=this.getSpec($.specId);if(!Z||Z.revision!==$.revision||Z.triggerKind!=="one_off"||!Z.enabled||Z.removed||Z.parseStatus!=="valid"){this.db.exec("COMMIT;");return}let Q=_0();this.db.prepare(`UPDATE cron_specs SET next_run_at = NULL, updated_at = ?
|
|
310
310
|
WHERE spec_id = ? AND revision = ?`).run(Q,Z.specId,Z.revision);let J=this.db.prepare(`SELECT * FROM cron_runs
|
|
311
311
|
WHERE spec_id = ? AND spec_revision = ?
|
|
312
312
|
AND trigger_kind IN ('one_off', 'manual')
|
|
@@ -321,7 +321,7 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
321
321
|
AND enabled = 1
|
|
322
322
|
AND removed = 0
|
|
323
323
|
AND parse_status = 'valid'
|
|
324
|
-
ORDER BY created_at ASC`).all($).map((Q)=>H$(Q))}upsertSpec($){let Z=_0(),Q=this.getSpecBySourcePath($.sourcePath),J=$.spec,W={triggerKind:J?.triggerKind??$.triggerKind,title:J?.title??Q?.title??
|
|
324
|
+
ORDER BY created_at ASC`).all($).map((Q)=>H$(Q))}upsertSpec($){let Z=_0(),Q=this.getSpecBySourcePath($.sourcePath),J=$.spec,W={triggerKind:J?.triggerKind??$.triggerKind,title:J?.title??Q?.title??VM($.sourcePath),prompt:J?.prompt,workspaceRoot:J?.workspaceRoot,scheduleExpr:J?.triggerKind==="schedule"?J.schedule:void 0,timezone:J?.triggerKind==="schedule"?J.timezone:void 0,eventType:J?.triggerKind==="event"?J.event:void 0,filters:J?.triggerKind==="event"?J.filters:void 0,debounceSeconds:J?.triggerKind==="event"?J.debounceSeconds:void 0,dedupeWindowSeconds:J?.triggerKind==="event"?J.dedupeWindowSeconds:void 0,cooldownSeconds:J?.triggerKind==="event"?J.cooldownSeconds:void 0,mode:J?.mode,systemPrompt:J?.systemPrompt,providerId:J?.modelSelection?.providerId,modelId:J?.modelSelection?.modelId,maxIterations:J?.maxIterations,timeoutSeconds:J?.timeoutSeconds,maxParallel:J&&"maxParallel"in J?J.maxParallel:void 0,tools:J?.tools,notesDirectory:J?.notesDirectory,extensions:J?.extensions,source:J?.source,metadata:J?.metadata},X=$.parseStatus==="valid"&&(J?.enabled??!0);if(!Q){let H=`cspec_${f6()}`;this.insertSpecRow(H,$,W,X,Z);let K=this.getSpec(H);if(!K)throw Error("failed to insert cron_spec row");return{record:K,created:!0,revisionChanged:!0}}let Y=Q.sourceHash!==$.sourceHash&&YM(Q,W,Q.enabled,X),V=Y?Q.revision+1:Q.revision;this.updateSpecRow(Q.specId,$,W,X,V,Z);let B=this.getSpec(Q.specId);if(!B)throw Error("failed to reload cron_spec after update");return{record:B,created:!1,revisionChanged:Y}}insertSpecRow($,Z,Q,J,W){let X=Z.spec;this.db.prepare(`INSERT INTO cron_specs (
|
|
325
325
|
spec_id, external_id, source_path, trigger_kind,
|
|
326
326
|
source_mtime_ms, source_hash, parse_status, parse_error,
|
|
327
327
|
enabled, removed, title, prompt, workspace_root,
|
|
@@ -344,7 +344,7 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
344
344
|
tools_json = ?, notes_directory = ?, extensions_json = ?, source = ?,
|
|
345
345
|
tags_json = ?, metadata_json = ?,
|
|
346
346
|
revision = ?, updated_at = ?
|
|
347
|
-
WHERE spec_id = ?`).run(Z.externalId,Z.triggerKind,Z.sourceMtimeMs??null,Z.sourceHash,Z.parseStatus,Z.parseError??null,J?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,j?.tags?JSON.stringify(j.tags):null,j?.metadata?JSON.stringify(j.metadata):null,W,X,$)}markSpecRemoved($){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(_0(),$)}updateSpecNextRunAt($,Z){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(Z??null,_0(),$)}updateSpecLastRunAt($,Z){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(Z,_0(),$)}updateLastMaterializedRunId($,Z){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(Z,_0(),$)}initializeScheduleNextRun($){let Z=this.getSpec($);if(!Z||Z.triggerKind!=="schedule"||!Z.enabled||!Z.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let Q=new Date($2(Z.scheduleExpr,Date.now(),Z.timezone)).toISOString();this.updateSpecNextRunAt($,Q)}materializeDueScheduleRun($){let Z=$.nowMs,Q=new Date(Z).toISOString();this.db.exec("BEGIN IMMEDIATE;");try{let J=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($.specId);if(!J)return this.db.exec("COMMIT;"),{queued:!1};let W=H$(J);if(W.triggerKind!=="schedule"||!W.enabled||W.removed||W.parseStatus!=="valid"||!W.scheduleExpr)return this.db.exec("COMMIT;"),{queued:!1};let X=W.nextRunAt;if(!X){let V=new Date($2(W.scheduleExpr,Z,W.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(V,Q,W.specId),this.db.exec("COMMIT;"),{queued:!1,nextRunAt:V}}if(new Date(X).getTime()>Z)return this.db.exec("COMMIT;"),{queued:!1,nextRunAt:X};let j=`crun_${
|
|
347
|
+
WHERE spec_id = ?`).run(Z.externalId,Z.triggerKind,Z.sourceMtimeMs??null,Z.sourceHash,Z.parseStatus,Z.parseError??null,J?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,j?.tags?JSON.stringify(j.tags):null,j?.metadata?JSON.stringify(j.metadata):null,W,X,$)}markSpecRemoved($){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(_0(),$)}updateSpecNextRunAt($,Z){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(Z??null,_0(),$)}updateSpecLastRunAt($,Z){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(Z,_0(),$)}updateLastMaterializedRunId($,Z){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(Z,_0(),$)}initializeScheduleNextRun($){let Z=this.getSpec($);if(!Z||Z.triggerKind!=="schedule"||!Z.enabled||!Z.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let Q=new Date($2(Z.scheduleExpr,Date.now(),Z.timezone)).toISOString();this.updateSpecNextRunAt($,Q)}materializeDueScheduleRun($){let Z=$.nowMs,Q=new Date(Z).toISOString();this.db.exec("BEGIN IMMEDIATE;");try{let J=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($.specId);if(!J)return this.db.exec("COMMIT;"),{queued:!1};let W=H$(J);if(W.triggerKind!=="schedule"||!W.enabled||W.removed||W.parseStatus!=="valid"||!W.scheduleExpr)return this.db.exec("COMMIT;"),{queued:!1};let X=W.nextRunAt;if(!X){let V=new Date($2(W.scheduleExpr,Z,W.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(V,Q,W.specId),this.db.exec("COMMIT;"),{queued:!1,nextRunAt:V}}if(new Date(X).getTime()>Z)return this.db.exec("COMMIT;"),{queued:!1,nextRunAt:X};let j=`crun_${f6()}`,Y;try{Y=new Date($2(W.scheduleExpr,Z,W.timezone)).toISOString()}catch{Y=void 0}return this.db.prepare(`INSERT INTO cron_runs (
|
|
348
348
|
run_id, spec_id, spec_revision, trigger_kind, status,
|
|
349
349
|
scheduled_for, trigger_event_id, attempt_count,
|
|
350
350
|
created_at, updated_at
|
|
@@ -359,9 +359,9 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
359
359
|
payload_json, attributes_json, processing_status,
|
|
360
360
|
matched_spec_count, queued_run_count, suppressed_count,
|
|
361
361
|
error, created_at, updated_at
|
|
362
|
-
) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(W,X,j,$.subject?.trim()||null,Y,J,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,
|
|
362
|
+
) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(W,X,j,$.subject?.trim()||null,Y,J,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,GH($.payload),GH($.attributes),"received",0,0,0,null,Q,Q).changes??0,B=this.getEventLog(W);if(!B)throw Error("failed to insert cron_event_log row");return{record:B,created:V===1}}getEventLog($){let Z=this.db.prepare("SELECT * FROM cron_event_log WHERE event_id = ?").get($);return Z?KH(Z):void 0}listEventLogs($={}){let Z=[],Q=[];if($.eventType)Z.push("event_type = ?"),Q.push($.eventType);if($.source)Z.push("source = ?"),Q.push($.source);if($.processingStatus)Z.push("processing_status = ?"),Q.push($.processingStatus);let J=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_event_log ${J}
|
|
363
363
|
ORDER BY received_at DESC, created_at DESC
|
|
364
|
-
LIMIT ?`).all(...Q,W).map((j)=>
|
|
364
|
+
LIMIT ?`).all(...Q,W).map((j)=>KH(j))}updateEventLogProcessing($,Z){return(this.db.prepare(`UPDATE cron_event_log SET
|
|
365
365
|
processing_status = ?,
|
|
366
366
|
matched_spec_count = COALESCE(?, matched_spec_count),
|
|
367
367
|
queued_run_count = COALESCE(?, queued_run_count),
|
|
@@ -395,7 +395,7 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
395
395
|
AND status = 'queued'`).run($.triggerEventId,$.scheduledFor,Z,$.runId).changes??0)!==1)return;return this.getRun($.runId)}hasConsumedOneOffRevision($,Z){return!!this.db.prepare(`SELECT run_id FROM cron_runs
|
|
396
396
|
WHERE spec_id = ? AND spec_revision = ?
|
|
397
397
|
AND trigger_kind IN ('one_off', 'manual')
|
|
398
|
-
LIMIT 1`).get($,Z)}enqueueRun($){let Z=`crun_${
|
|
398
|
+
LIMIT 1`).get($,Z)}enqueueRun($){let Z=`crun_${f6()}`,Q=_0();this.db.prepare(`INSERT INTO cron_runs (
|
|
399
399
|
run_id, spec_id, spec_revision, trigger_kind, status,
|
|
400
400
|
scheduled_for, trigger_event_id, attempt_count,
|
|
401
401
|
created_at, updated_at
|
|
@@ -414,7 +414,7 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
414
414
|
)
|
|
415
415
|
AND (scheduled_for IS NULL OR scheduled_for <= ?)
|
|
416
416
|
ORDER BY COALESCE(scheduled_for, created_at) ASC
|
|
417
|
-
LIMIT ?`).all(Z,Z,W);for(let Y of j){let V=$0(Y.run_id);if(!V)continue;let B=`cclaim_${
|
|
417
|
+
LIMIT ?`).all(Z,Z,W);for(let Y of j){let V=$0(Y.run_id);if(!V)continue;let B=`cclaim_${f6()}`;if((this.db.prepare(`UPDATE cron_runs SET
|
|
418
418
|
status = 'running',
|
|
419
419
|
claim_token = ?,
|
|
420
420
|
claim_started_at = ?,
|
|
@@ -458,47 +458,47 @@ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
458
458
|
error = ?,
|
|
459
459
|
scheduled_for = COALESCE(?, scheduled_for),
|
|
460
460
|
updated_at = ?
|
|
461
|
-
WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,Z,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,Z){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(Z,_0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,_0(),$)}}class
|
|
462
|
-
`)[0]?.trim())}function K$($){if(!$)return;let Z={...$},Q=Q2(typeof Z.title==="string"?Z.title:void 0);if(Q)Z.title=Q;else delete Z.title;return Object.keys(Z).length>0?Z:void 0}function
|
|
463
|
-
`,"utf8")}function
|
|
464
|
-
`).trim()}function
|
|
465
|
-
`)[0]??W);return
|
|
466
|
-
`,{encoding:"utf8",mode:384}),await
|
|
467
|
-
`,"utf8");try{return await Z()}finally{await RH(Q)}}catch(W){if((W instanceof Error&&"code"in W?String(W.code):"")!=="EEXIST")throw W;let j=await JE(Q),Y=j?Date.now()-Date.parse(j.acquiredAt):fH+1;if(!j||!$E(j.pid)||Y>fH){await RH(Q);continue}if(Date.now()>=J)throw Error(`Timed out waiting for hub startup lock ${Q}`);await ZE(sM)}}async function W2($,Z){try{let Q=await fetch(Z?.authToken?WE($):yH($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let J=await Q.json();if(typeof J.protocolVersion!=="string"||typeof J.host!=="string"||typeof J.port!=="number"||typeof J.url!=="string")return;return{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((W)=>typeof W==="string"):void 0,coreVersion:typeof J.coreVersion==="string"?J.coreVersion:void 0,buildId:typeof J.buildId==="string"?J.buildId:void 0,host:J.host,port:J.port,url:J.url,hubId:typeof J.hubId==="string"?J.hubId:void 0,authToken:typeof J.authToken==="string"?J.authToken:void 0,pid:typeof J.pid==="number"?J.pid:void 0,startedAt:typeof J.startedAt==="string"?J.startedAt:void 0,updatedAt:typeof J.updatedAt==="string"?J.updatedAt:void 0}}catch{return}}function P1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function yH($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function WE($){let Z=new URL(yH($));return Z.pathname="/status",Z.toString()}function Rr($){return iM($)}import{CLINE_HUB_DEV_PORT as XE,CLINE_HUB_PORT as jE,resolveClineBuildEnv as YE}from"@cline/shared";var VE="CLINE_HUB_HOST",BE="CLINE_HUB_PORT",HE="CLINE_HUB_PATHNAME",KE="127.0.0.1",GE=jE,FE="/hub";function kH($){return YE($)==="development"?XE:GE}function UE($={}){return($.env??process.env)[VE]?.trim()||KE}function Q9($={}){let Q=($.env??process.env)[BE]?.trim();if(!Q)return kH($);let J=Number.parseInt(Q,10);if(!Number.isInteger(J)||J<1||J>65535)return kH($);return J}function DE($={}){return($.env??process.env)[HE]?.trim()||FE}function F$($={},Z={}){return{host:$.host??UE(Z),port:$.port??Q9(Z),pathname:$.pathname??DE(Z)}}import{join as _E}from"node:path";var LE="shared:cline",AE="CLINE_HUB_DISCOVERY_PATH",OE="hub-production";function br($){let Z=V$($.trim());return J2(`workspace:${Z||$.trim()}`)}function S1($=LE){return J2($)}function U$(){return{ownerId:OE,discoveryPath:process.env[AE]?.trim()||_E(k6(),"locks","hub","production.json")}}var SE=8000,bE=200,yE=3000,kE=100,hE=[100,250,500,1000,2000],IE="--cline-hub-daemon";function xE($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function gE(){try{let $=ME(k6(),"logs","hub-daemon.log");return TE(RE($),{recursive:!0}),{fd:NE($,"a"),logPath:$}}catch{return}}function gH(){return xH()==="production"?U$():S1()}function X2($){return wE($).compatible}function hH($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function j2($,Z){try{return await W2($,{authToken:Z})}catch{return}}async function vE($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await j2($))?.url)return!0;await new Promise((W)=>setTimeout(W,kE))}return!1}async function J9($,Z){if(await E3($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await vE($.url,yE);return await j1(Z).catch(()=>{return}),Q}async function h6($,Z){if(X2($))return!0;return J9($,Z)}async function vH($){if(xH()!=="production")return;let Z=S1();if(Z.discoveryPath===$.discoveryPath)return;let Q=await R0(Z.discoveryPath);if(Q?.url)await J9(Q,Z.discoveryPath);else await j1(Z.discoveryPath).catch(()=>{return})}function mE(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return EE(new URL(`./entry.${$}`,import.meta.url))}function cE($,Z){let Q=mE(),J=process.execPath?.trim();if(!J)throw Error("unable to resolve runtime executable for hub daemon");let W=fE(J).toLowerCase().includes("bun"),X=Q.startsWith("/$bunfs/"),j=W&&Q.toLowerCase().endsWith(".ts"),Y=X?[IE]:[...j?["--conditions=development"]:[],Q];return{launcher:J,args:[...Y,"--cwd",$,...xE(Z)],cwd:$,env:{...PE(process.env),CLINE_NO_INTERACTIVE:"1",[CE]:"1"}}}function uE($){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 dE($,Z={}){if(IH())return;let Q=cE($,Z),J=gE();try{qE(Q.launcher,Q.args,{detached:!0,stdio:J?["ignore",J.fd,J.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(J)zE(J.fd)}}async function W9($,Z={}){for(let Q=0;;Q++)try{dE($,Z);return}catch(J){let W=hE[Q];if(!uE(J)||W===void 0)throw J;await new Promise((X)=>setTimeout(X,W))}}function mH($,Z={}){if(IH())return;let Q=gH(),J=F$(Z),W=P1(J.host,J.port,J.pathname),X=Z.allowPortFallback===!0&&J.port!==0;vH(Q).catch(()=>{return}).then(()=>R0(Q.discoveryPath)).then(async(j)=>{let Y=!1;if(j?.url)if(!j.authToken){if(Y=!0,!await J9(j,Q.discoveryPath)&&!X)return}else{let H=await j2(j.url,j.authToken);if(H?.url&&X2(H)&&await D$(H.url,{authToken:j.authToken}))return;if(H?.url)await h6({...H,authToken:j.authToken},Q.discoveryPath);else await j1(Q.discoveryPath).catch(()=>{return})}let V=await j2(W);if(V?.url){if(X2(V)){if(!X||!Y)return}else if(!await h6({...V,authToken:void 0},Q.discoveryPath)&&!X)return}let B=X?{...J,port:0}:J;await W9($,B)}).catch(()=>{})}async function dr($,Z={}){let Q=gH(),J=Z.host!==void 0||Z.port!==void 0||Z.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=F$(Z),X=P1(W.host,W.port,W.pathname),j=(F)=>{if(!J)Y8(F.url,F.authToken);return F};await vH(Q).catch(()=>{return});let Y=await R0(Q.discoveryPath),V=!1;if(Y?.url){let F=Y.authToken;if(!F)V=!0,await J9(Y,Q.discoveryPath);else{let U=await j2(Y.url,F);if(U?.url&&X2(U)&&await D$(U.url,{authToken:F}))return j({url:U.url,authToken:F});if(U?.url)await h6({...U,authToken:F},Q.discoveryPath);else await j1(Q.discoveryPath).catch(()=>{return})}}let B=await j2(X);if(B?.url){let F=hH(B,Y,X);if(X2(B))throw Error(`A compatible Cline Hub is already running at ${X}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${V?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`);if(!await h6(F,Q.discoveryPath)&&Z.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is already running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let K=Z.allowPortFallback===!0&&W.port!==0?{...W,port:0}:W;await W9($,K);let G=Date.now()+SE;while(Date.now()<G){let F=await R0(Q.discoveryPath);if(F?.url&&F.authToken){let _=await j2(F.url,F.authToken);if(_?.url&&X2(_)&&await D$(_.url,{authToken:F.authToken}))return j({url:_.url,authToken:F.authToken})}let U=await j2(X);if(U?.url&&!X2(U)){let _=hH(U,F,X);if(!await h6(_,Q.discoveryPath)&&Z.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is still running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((_)=>setTimeout(_,bE))}throw Error("Timed out waiting for detached hub startup.")}function j9(){return iE()==="production"?U$():S1()}function nE(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function lH($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return lH($.data);return String($)}function aE($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function cH($){let Z=$,Q=aE(Z.reason);return new s0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:C3,{closeCode:Z.code,closeReason:Q||void 0})}function oE($,Z){if($ instanceof s0)return $;if($ instanceof Error)return new s0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new s0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new s0("hub_connect_failed",Q);let J=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new s0("hub_connect_failed",J?`Failed to connect to hub at ${Z.toString()} (${J} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var sE=8000,tE=200,uH="*",dH=8000,eE="cline-hub-auth.",iH=new Map,rH=new Set,$C=3000,ZC=3000,QC=100,C3="Hub connection closed",JC=250,WC=5000,pH=0.5;class s0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function XC($){return $ instanceof s0}class X9 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function nH($,Z){return $ instanceof X9&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function aH($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=S3($.toString());return Q?iH.get(Q):void 0}function jC($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function S3($){if(!jC($))return;let Z=new URL(V8($));return Z.search="",Z.hash="",Z.toString()}function w3($){let Z=S3($);return!!Z&&rH.has(Z)}function Y8($,Z){let Q=S3($);if(Q){if(rH.add(Q),Z?.trim())iH.set(Q,Z)}return $}class b1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new s0("hub_connection_closed",C3);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}isConnected(){return this.socket?.readyState===1&&this.registered}getConnectionError(){return this.isConnected()?null:this.lastCloseError}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),Z=this.options.authToken?.trim()||aH($);$.hash="";let J=new(nE())($.toString(),Z?[`${eE}${Z}`]:void 0);this.socket=J;let W=!1;this.connectPromise=new Promise((X,j)=>{let Y=!1,V=setTimeout(()=>{if(Y)return;Y=!0,W=!0,this.lastCloseError=new s0("hub_connect_timeout",`Timed out connecting to hub after ${dH}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{J.close()}catch{}j(this.lastCloseError)},dH);J.addEventListener("open",()=>{if(Y)return;Y=!0,clearTimeout(V),X()}),J.addEventListener("error",(B)=>{if(Y)return;Y=!0,clearTimeout(V),this.lastCloseError=oE(B,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)}),J.addEventListener("close",(B)=>{if(Y)return;if(Y=!0,clearTimeout(V),!W)this.lastCloseError=cH(B),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)})}),J.addEventListener("message",(X)=>{this.handleFrame(JSON.parse(lH(X)))}),J.addEventListener("close",(X)=>{if(this.socket!==J)return;if(!W)this.lastCloseError=cH(X),this.sawSocketClose=!0;this.registered=!1;for(let j of this.pendingReplies.values())j.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let X of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(X));this.reconnectAttempt=0}subscribe($,Z){let Q=Z?.sessionId?.trim()||void 0,J={listener:$,sessionId:Q};return this.listeners.add(J),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(J))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,J){let W=0,X=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,J)}catch(j){if(!X||W>=1||!await this.recoverLocalHubTransport(j))throw j;W+=1}}async commandOnce($,Z,Q,J){await this.connect();let W=pE("hubreq_"),X=rE($,J?.timeoutMs),j=new Promise((V,B)=>{let H=X===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(W))return;B(new X9($,"hub_command_timeout",`Hub command ${$} timed out after ${X}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.`))},X);this.pendingReplies.set(W,{resolve:(K)=>{if(H)clearTimeout(H);V(K)},reject:(K)=>{if(H)clearTimeout(H);B(K)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:W,clientId:this.clientId,sessionId:Q,timeoutMs:X,payload:Z}})}catch(V){throw this.pendingReplies.delete(W),V}let Y=await j;if(!Y.ok){if(Y.error?.code===L6){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new s$(V,Y.error.message)}throw new X9($,Y.error?.code,Y.error?.message??`Hub command ${$} failed`)}return Y}async recoverLocalHubTransport($){if(!w3(this.currentUrl)||!XC($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await I6({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!Z)return!1;return this.currentUrl=Z,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(JC*2**this.reconnectAttempt,WC),Z=Math.round($*(1-pH)+Math.random()*$*pH);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},Z)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!w3(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await I6({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 s0("hub_connection_closed",C3),this.sawSocketClose=!1;for(let Z of this.pendingReplies.values())Z.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new s0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,Z){this.sendFrame({kind:$,clientId:this.clientId,...Z?{sessionId:Z}:{}})}adjustSubscriptionCount($,Z){let Q=this.subscriptionKeyForSessionId($),J=(this.subscriptionCounts.get(Q)??0)+Z;if(J<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(Z<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,J),Z>0&&J===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??uH}subscriptionSessionIdFromKey($){return $===uH?void 0:$}handleFrame($){switch($.kind){case"reply":{let Z=$.envelope.requestId;if(!Z)return;let Q=this.pendingReplies.get(Z);if(!Q)return;this.pendingReplies.delete(Z),Q.resolve($.envelope);return}case"event":for(let Z of this.listeners){if(Z.sessionId&&Z.sessionId!==$.envelope.sessionId?.trim())continue;Z.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function V8($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function D$($,Z){let Q=new b1({url:$,authToken:Z?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function P3($,Z){let Q=V8($),J=await W2(Q,{authToken:Z?.authToken});if(!J)return{status:"unreachable",url:Q};if(!lE(J).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await D$(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function YC($){let Z=Date.now()+sE;while(Date.now()<Z){let Q=await R0($.discoveryPath);if(Q?.url){let J=await P3(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(J.status==="compatible")return Y8(J.url,Q.authToken)}await new Promise((J)=>setTimeout(J,tE))}return}async function VC($){let Z=Date.now()+ZC;while(Date.now()<Z){if(!(await W2($).catch(()=>{return}))?.url)return!0;await new Promise((J)=>setTimeout(J,QC))}return!1}function BC($,Z){try{return V8($)===V8(Z)}catch{return!1}}function HC($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let J=Q;if(J.status==="running"||J.status==="idle"||J.status==="pending")return!0;return Array.isArray(J.participants)&&J.participants.length>0})}async function KC($,Z,Q){let J=new b1({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let W=await J.command("session.list",{limit:500},void 0,{timeoutMs:$C});return!HC(W.payload)}catch{return!1}finally{await J.dispose().catch(()=>{return})}}async function b3($={}){if($.endpoint?.trim()){let W=await P3($.endpoint);return W.status==="compatible"?W.url:void 0}let Z=j9(),Q=await R0(Z.discoveryPath);if(!Q?.url)return;let J=await P3(Q.url,{authToken:Q.authToken});if(J.status==="compatible")return Y8(J.url,Q.authToken);if(J.status==="protocol_mismatch")await j1(Z.discoveryPath).catch(()=>{return});return}async function I6($={}){let Z=await b3($);if(Z&&await D$(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;let Q=j9();return await W9($.workspaceRoot??process.cwd()),await YC(Q)}async function E3($,Z){let Q=new URL($),J=Z?.trim()||aH(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:J?{authorization:`Bearer ${J}`}:void 0})).ok}async function GC($=j9()){let Z=await R0($.discoveryPath);if(!Z?.url)return!1;try{if(await E3(Z.url,Z.authToken))return!0}catch{}return!1}async function oH($){if(!w3($.url))return;let Z=j9(),Q=await R0(Z.discoveryPath);if(!Q?.url||!BC(Q.url,$.url))return;if(!await KC(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await GC())return;if(!await VC(Q.url))return;return await j1(Z.discoveryPath).catch(()=>{return}),await I6({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{resolveProviderRequestHeaders as qC}from"@cline/llms";import{captureSdkError as h3,createSessionId as QK,HUB_CHECKPOINT_CAPABILITY as zC,HUB_COMPACTION_CAPABILITY as TC,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as NC,HUB_HOOK_CAPABILITY_PREFIX as fC,HUB_MISTAKE_LIMIT_CAPABILITY as RC,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as MC,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as EC,isHubToolExecutorName as CC}from"@cline/shared";import{createHash as FC}from"node:crypto";import{formatDisplayUserInput as sH}from"@cline/shared";import{z as U1}from"zod";function UC($){if(!$||typeof $!=="object"||Array.isArray($))return!1;let Z=$;if(Z.role!=="user"&&Z.role!=="assistant")return!1;return typeof Z.content==="string"||Array.isArray(Z.content)}var DC=U1.custom(UC),Y9=U1.object({version:U1.literal(1),updated_at:U1.string().datetime(),conversation_id:U1.string().min(1).optional(),source_message_count:U1.number().int().nonnegative(),source_prefix_hash:U1.string().min(1).optional(),source_last_message_key:U1.string().min(1).optional(),messages:U1.array(DC),system_prompt:U1.string().optional()});function y3($){return JSON.parse(JSON.stringify($))}function tH($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:sH($.content)};return{...$,content:$.content.map((Z)=>Z.type==="text"?{...Z,text:sH(Z.text)}:Z)}}function eH($){if($.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function _C($){let Z=tH($);return eH(Z.role),[["role",Z.role],["content",Z.content],["agent",Z.agent??null],["sessionId",Z.sessionId??null],["metadata",Z.metadata??null],["modelInfo",Z.modelInfo??null],["metrics",Z.metrics??null]]}function $K($){if(!$)return"";let Z=tH($);if(typeof Z.id==="string"&&Z.id.trim())return`id:${Z.id.trim()}`;if(eH(Z.role),typeof Z.ts==="number"&&Number.isFinite(Z.ts))return`ts:${Z.role}:${Z.ts}`;return`content:${Z.role}:${JSON.stringify(Z.content)}`}function ZK($,Z=$.length){let Q=FC("sha256");Q.update(`cline-session-compaction-source-v2
|
|
461
|
+
WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,Z,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,Z){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(Z,_0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,_0(),$)}}class E6{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new M6({dbPath:$.dbPath});let Z=$.specs;this.reconciler=new V3({store:this.store,specs:Z}),this.materializer=new q6({store:this.store}),this.eventIngress=new a7({store:this.store,logger:$.logger}),this.runner=new z6({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:Z,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new B3({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let J=$.logger;if(J)if(J.error)J.error("cron.watcher.failed",{error:Q});else J.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($)}}import{readdir as NM,readFile as zH}from"node:fs/promises";import{join as TH}from"node:path";import{formatDisplayUserInput as fM,normalizeUserInput as RM}from"@cline/shared";import{resolveSessionDataDir as NH}from"@cline/shared/storage";import{mkdirSync as UM,writeFileSync as DM}from"node:fs";import{dirname as _M}from"node:path";import{normalizeUserInput as LM,stripModeNotices as AM}from"@cline/shared";import{nanoid as OM}from"nanoid";import{nanoid as GM}from"nanoid";function C6($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function s5($,Z){let Q=C6($),J=C6(Z),W=`${Q}__${J}`;return W.length>180?W.slice(0,180):W}function G3($,Z){let Q=C6($),J=C6(Z);return`${Q}__teamtask__${J}__${GM(6)}`}function w6($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let J=$.slice(0,Q),W=$.slice(Q+12),X=W.lastIndexOf("__");if(X<=0)return null;let j=W.slice(0,X),Y=W.slice(X+2);if(!J||!j||!Y)return null;return{rootSessionId:J,agentId:j,teamTaskId:Y}}function t5($){if(w6($))return null;let Z="__",Q=$.indexOf(Z);if(Q<=0)return null;let J=$.slice(0,Q),W=$.slice(Q+Z.length);if(!J||!W)return null;return{rootSessionId:J,agentId:W}}function F3($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let Z=String($.reason??"").toLowerCase();if(Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt"))return"cancelled";if(Z.includes("fail")||Z.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as e}from"zod";var FM=e.enum(OQ),u0=e.object({version:e.literal(1),session_id:e.string().min(1),source:e.string().min(1),pid:e.number().int(),started_at:e.string().min(1),ended_at:e.string().min(1).optional(),exit_code:e.number().int().nullable().optional(),status:FM,interactive:e.boolean(),provider:e.string().min(1),model:e.string().min(1),cwd:e.string().min(1),workspace_root:e.string().min(1),team_name:e.string().min(1).optional(),enable_tools:e.boolean(),enable_spawn:e.boolean(),enable_teams:e.boolean(),prompt:e.string().optional(),metadata:e.record(e.string(),e.unknown()).optional(),messages_path:e.string().min(1).optional(),compaction_path:e.string().min(1).optional()});function UH($){if(!$)return!1;return Object.values($).some((Z)=>typeof Z==="function")}function D3($,Z){let Q=[...$??[],...Z??[]];if(Q.length===0)return;let J=[],W=new Set;for(let X of Q){if(W.has(X.name))continue;W.add(X.name),J.push(X)}return J}function DH($){return JSON.stringify($,(Z,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function w1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function U3($,Z){let Q={...$};Q.id=w1(Q.id)??OM();let J=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,W={id:w1(J?.id)??w1(Q.modelId)??w1(Z?.id),provider:w1(J?.provider)??w1(Q.providerId)??w1(Z?.provider),family:w1(J?.family)??w1(Z?.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 e5($){return $.map((Z)=>U3(Z))}function $9($,Z,Q=[]){let J=$.map((V,B)=>{let H=Q[B],G=H?.role===V.role&&JSON.stringify(H.content)===JSON.stringify(V.content)?{...H,...V}:{...V};return U3(G)}),W=Q.length,X=[];for(let V=W;V<J.length;V+=1)if(J[V]?.role==="assistant")X.push(V);if(X.length===0){let V=[...J].reverse().findIndex((B)=>B.role==="assistant");if(V===-1)return J;X.push(J.length-1-V)}let j=X[X.length-1],Y=X.some((V)=>J[V]?.metrics);for(let V of X){let B=J[V],H=B.metrics;if(!H&&V===j&&!Y){let K=Z.usage;H={inputTokens:K.inputTokens,outputTokens:K.outputTokens,cacheReadTokens:K.cacheReadTokens??0,cacheWriteTokens:K.cacheWriteTokens??0,cost:K.totalCost}}J[V]={...U3(B,{id:Z.model.id,provider:Z.model.provider,family:Z.model.info?.family}),...H?{metrics:H}:{},ts:B.ts??Z.endedAt.getTime()}}return J}function P6($){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 qM=120;function Q2($){let Z=$?.trim();return Z?Z.slice(0,qM):void 0}function _3($){let Z=AM(LM($??"")).trim();if(!Z)return;return Q2(Z.split(`
|
|
462
|
+
`)[0]?.trim())}function K$($){if(!$)return;let Z={...$},Q=Q2(typeof Z.title==="string"?Z.title:void 0);if(Q)Z.title=Q;else delete Z.title;return Object.keys(Z).length>0?Z:void 0}function S6($){let Z=K$($.metadata)??{},Q=$.title!==void 0?Q2($.title):_3($.prompt);if(Q)Z.title=Q;return Object.keys(Z).length>0?Z:void 0}function L3($){let Z=w6($);if(Z)return{agent:"teammate",sessionId:Z.rootSessionId,taskType:"team"};let Q=t5($);if(Q)return{agent:"subagent",sessionId:Q.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function A3($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:e5($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function _H($,Z,Q){UM(_M($),{recursive:!0}),DM($,`${JSON.stringify(A3({updatedAt:Z,context:Q,messages:[]}),null,2)}
|
|
463
|
+
`,"utf8")}function LH($,Z){return u0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:Z?.endedAt??$.endedAt??void 0,exit_code:Z?.exitCode??$.exitCode??void 0,status:Z?.status??$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName??void 0,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt??void 0,metadata:Z?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function AH($,Z,Q){let J=0;while(!0){let W=await $();if(W===void 0)return{updated:!1};let X=await Z(W);if(typeof X==="object"&&X!==null&&"updated"in X&&X.updated===!1){if(J+=1,J>=Q)return X;continue}return X}}import{existsSync as zM}from"node:fs";import{readFile as TM}from"node:fs/promises";class b6{listeners=new Set;subscribe($,Z){let Q={listener:$,sessionId:Z?.sessionId?.trim()||void 0};return this.listeners.add(Q),()=>{this.listeners.delete(Q)}}emit($){let Z=$.payload.sessionId?.trim();for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==Z)continue;Q.listener($)}}get size(){return this.listeners.size}}async function G$($){let Z=$?.trim();if(!Z||!zM(Z))return[];try{let Q=(await TM(Z,"utf8")).trim();if(!Q)return[];let J=JSON.parse(Q);if(Array.isArray(J))return J;if(J&&typeof J==="object"&&!Array.isArray(J)){let W=J.messages;if(Array.isArray(W))return W}return[]}catch{return[]}}function O3($){return $?{...$}:void 0}async function OH($,Z){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await Z.queueSpawnRequest($);let J=await Z.upsertSubagentSessionFromHook($);if(!J)return;await Z.appendSubagentHookAudit(J,$),await Z.applySubagentStatus(J,$)}function y6($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function o0($){let Z=y6($);if(!Z)return;return Z.toLowerCase()==="unknown"?void 0:Z}function Z9($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function MM($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function z3($){let Z=$??200;return Number.isFinite(Z)?Math.max(0,Math.floor(Z)):200}function EM($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function CM($){return $.isSubagent!==!0&&!y6($.parentSessionId)}function wM($){let Z=$.match(/\d{13,}/g);if(!Z||Z.length===0)return 0;let Q=0;for(let J of Z){let W=Number.parseInt(J,10);if(Number.isFinite(W)&&W>Q)Q=W}return Q}function T3($){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 PM($){let Z=z3($);if(Z===0)return[];let Q=NH(),W=(await NM(Q,{withFileTypes:!0}).catch(()=>[])).filter((j)=>j.isDirectory()).map((j)=>({entry:j,recency:wM(j.name.trim())})).sort((j,Y)=>Y.recency-j.recency||Y.entry.name.localeCompare(j.entry.name));return(await Promise.all(W.map(async({entry:j})=>{let Y=j.name.trim();if(!Y)return;let V=TH(Q,Y,`${Y}.json`),B=await zH(V,"utf8").catch(()=>{return});if(!B)return;let H;try{H=JSON.parse(B)}catch{return}let K=u0.safeParse(H);if(!K.success)return;return T3(K.data)}))).filter((j)=>Boolean(j)).sort((j,Y)=>Y.startedAt.localeCompare(j.startedAt)).slice(0,Z)}async function SM($,Z,Q){let J=z3(Z);if(J===0)return await $.listSessions(0),[];let W=Q.includeSubagents?J:EM(J),X=await $.listSessions(W);return(Q.includeSubagents?X:X.filter(CM)).slice(0,J)}function bM($){if(typeof $==="string")return $.trim();let Z=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let J=Q;if(J.type!=="text")continue;let W=J.text?.trim();if(W)Z.push(W)}return Z.join(`
|
|
464
|
+
`).trim()}function qH($){return $.replace(/\s+/g," ").trim()}function yM($,Z){if($.length<=Z)return $;return`${$.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function kM($){for(let Z of["user","assistant"])for(let Q of $){if(Q.role!==Z)continue;let J=qH(bM(Q.content));if(!J)continue;let W=Z==="user"?qH(fM(J)):J,X=RM(W.split(`
|
|
465
|
+
`)[0]??W);return yM(X,50)}return}function hM($){let Z=0;for(let Q of $)Z+=Z9(Q.metrics?.cost)??0;return Z}function IM($){let Z,Q;for(let J=$.length-1;J>=0;J-=1){let W=$[J];if(!Z)Z=o0(W.modelInfo?.provider);if(!Q)Q=o0(W.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function xM($){return o0($?.provider)??o0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function gM($){return o0($?.model)??o0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function q3($,Z){let Q=MM($.metadata),J=y6(Z?.title)??y6(Q?.title),W=Z9(Z?.totalCost)??Z9(Q?.totalCost),X=Q||J!==void 0||W!==void 0?{...Q??{},...J!==void 0?{title:J}:{},...W!==void 0?{totalCost:W}:{}}:void 0;return{...$,provider:o0(Z?.provider)??o0($.provider)??xM(Q)??"",model:o0(Z?.model)??o0($.model)??gM(Q)??"",metadata:X}}function vM($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function mM($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!vM(Q)}async function cM($,Z){return await Promise.all(Z.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let J=await $.readSessionMessages(Q.sessionId);return mM(Q,J)?{...Q,status:"idle"}:Q}))}async function uM($,Z){return await Promise.all(Z.map(async(Q)=>{let J=q3(Q),W=Boolean(y6(J.metadata?.title)),X=Boolean(o0(J.provider)),j=Boolean(o0(J.model)),Y=Z9(J.metadata?.totalCost),V=Y!==void 0&&Y>0;if(W&&X&&j&&V)return J;let B=await $.readSessionMessages(Q.sessionId);if(B.length===0)return J;let H=IM(B),K=hM(B);return q3(Q,{title:W?void 0:kM(B),provider:X?void 0:H.provider,model:j?void 0:H.model,totalCost:V||K<=0?void 0:K})}))}async function N3($,Z={}){let Q=z3(Z.limit),J=Z.includeSubagents===!0,W=await SM($,Q,{includeSubagents:J}),X=Z.includeManifestFallback===!0&&W.length<Q?await PM(Math.min(Math.max(Q*2,100),500)):[],j=new Map;for(let B of[...W,...X]){if(j.has(B.sessionId))continue;j.set(B.sessionId,B)}let Y=X.length===0?W:Array.from(j.values()).sort((B,H)=>H.startedAt.localeCompare(B.startedAt)).slice(0,Q),V=await cM($,Y);if(Z.hydrate===!1)return V.map((B)=>q3(B));return await uM($,V)}async function dM($){let Z=$.trim();if(!Z)return;let Q=TH(NH(),Z,`${Z}.json`),J=await zH(Q,"utf8").catch(()=>{return});if(!J)return;try{let W=u0.safeParse(JSON.parse(J));return W.success?W.data.messages_path:void 0}catch{return}}async function pM($,Z={}){let Q=new Map;return await N3({listSessions:async(W)=>{let X=await $.listSessions(W);Q.clear();for(let j of X)Q.set(j.sessionId,j);return X.map(P6)},readSessionMessages:async(W)=>{let X=Q.get(W)?.messagesPath??await dM(W);return await G$(X)}},Z)}import{captureSdkError as RF}from"@cline/shared";import{createSessionId as lE,isHubProtocolCompatible as iE,resolveClineBuildEnv as rE,resolveHubCommandTimeoutMs as nE}from"@cline/shared";import{spawn as zE}from"node:child_process";import{closeSync as TE,mkdirSync as NE,openSync as fE}from"node:fs";import{basename as RE,dirname as ME,join as EE}from"node:path";import{fileURLToPath as CE}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as wE,isHubDaemonProcess as xH,isHubProtocolCompatible as PE,resolveClineBuildEnv as gH,withResolvedClineBuildEnv as SE}from"@cline/shared";import{createHash as lM,randomBytes as iM}from"node:crypto";import{existsSync as rM}from"node:fs";import{chmod as nM,mkdir as f3,readFile as EH,rm as R3,writeFile as CH}from"node:fs/promises";import{dirname as wH,join as M3}from"node:path";import{resolveClineDataDir as h6,resolveClineDir as Cr}from"@cline/shared/storage";var Y8="0.0.68";var k6={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:Y8,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:compaction":"bun --conditions=development run scripts/compact-session.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var aM="CLINE_HUB_DISCOVERY_PATH",oM="CLINE_HUB_BUILD_ID",RH=30000,sM=15000,tM=100;function eM($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function $E($){return lM("sha256").update($).digest("hex").slice(0,12)}function ZE($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(Z){return Z instanceof Error&&"code"in Z?String(Z.code)==="EPERM":!1}}function PH(){return iM(32).toString("hex")}function QE($){return new Promise((Z)=>setTimeout(Z,$))}function JE($){return`${$}.lock`}async function WE($){try{let Z=JSON.parse(await EH(M3($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function MH($){await R3($,{recursive:!0,force:!0}).catch(()=>{return})}function SH(){return process.env[oM]?.trim()||String(k6.version)}function J2($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${$E($)}`,Q=process.env[aM]?.trim()||M3(h6(),"locks","hub","owners",`${eM(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function Pr($=`hub-${Date.now().toString(36)}`){return J2($)}async function R0($){try{let Z=JSON.parse(await EH($,"utf8"));if(typeof Z.hubId!=="string"||typeof Z.protocolVersion!=="string"||typeof Z.authToken!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string"||typeof Z.startedAt!=="string"||typeof Z.updatedAt!=="string")return;return{hubId:Z.hubId,protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,authToken:Z.authToken,host:Z.host,port:Z.port,url:Z.url,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:Z.startedAt,updatedAt:Z.updatedAt}}catch{return}}async function bH($,Z){await f3(wH($),{recursive:!0}),await R3($,{force:!0}).catch(()=>{return}),await CH($,`${JSON.stringify(Z,null,2)}
|
|
466
|
+
`,{encoding:"utf8",mode:384}),await nM($,384)}async function j1($){await R3($,{force:!0}).catch(()=>{return})}async function yH($,Z){let Q=JE($);await f3(wH(Q),{recursive:!0});let J=Date.now()+sM;while(!0)try{await f3(Q,{recursive:!1}),await CH(M3(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
|
|
467
|
+
`,"utf8");try{return await Z()}finally{await MH(Q)}}catch(W){if((W instanceof Error&&"code"in W?String(W.code):"")!=="EEXIST")throw W;let j=await WE(Q),Y=j?Date.now()-Date.parse(j.acquiredAt):RH+1;if(!j||!ZE(j.pid)||Y>RH){await MH(Q);continue}if(Date.now()>=J)throw Error(`Timed out waiting for hub startup lock ${Q}`);await QE(tM)}}async function W2($,Z){try{let Q=await fetch(Z?.authToken?XE($):kH($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let J=await Q.json();if(typeof J.protocolVersion!=="string"||typeof J.host!=="string"||typeof J.port!=="number"||typeof J.url!=="string")return;return{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((W)=>typeof W==="string"):void 0,coreVersion:typeof J.coreVersion==="string"?J.coreVersion:void 0,buildId:typeof J.buildId==="string"?J.buildId:void 0,host:J.host,port:J.port,url:J.url,hubId:typeof J.hubId==="string"?J.hubId:void 0,authToken:typeof J.authToken==="string"?J.authToken:void 0,pid:typeof J.pid==="number"?J.pid:void 0,startedAt:typeof J.startedAt==="string"?J.startedAt:void 0,updatedAt:typeof J.updatedAt==="string"?J.updatedAt:void 0}}catch{return}}function P1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function kH($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function XE($){let Z=new URL(kH($));return Z.pathname="/status",Z.toString()}function Sr($){return rM($)}import{CLINE_HUB_DEV_PORT as jE,CLINE_HUB_PORT as YE,resolveClineBuildEnv as VE}from"@cline/shared";var BE="CLINE_HUB_HOST",HE="CLINE_HUB_PORT",KE="CLINE_HUB_PATHNAME",GE="127.0.0.1",FE=YE,UE="/hub";function hH($){return VE($)==="development"?jE:FE}function DE($={}){return($.env??process.env)[BE]?.trim()||GE}function Q9($={}){let Q=($.env??process.env)[HE]?.trim();if(!Q)return hH($);let J=Number.parseInt(Q,10);if(!Number.isInteger(J)||J<1||J>65535)return hH($);return J}function _E($={}){return($.env??process.env)[KE]?.trim()||UE}function F$($={},Z={}){return{host:$.host??DE(Z),port:$.port??Q9(Z),pathname:$.pathname??_E(Z)}}import{join as LE}from"node:path";var AE="shared:cline",OE="CLINE_HUB_DISCOVERY_PATH",qE="hub-production";function gr($){let Z=V$($.trim());return J2(`workspace:${Z||$.trim()}`)}function S1($=AE){return J2($)}function U$(){return{ownerId:qE,discoveryPath:process.env[OE]?.trim()||LE(h6(),"locks","hub","production.json")}}var bE=8000,yE=200,kE=3000,hE=100,IE=[100,250,500,1000,2000],xE="--cline-hub-daemon";function gE($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function vE(){try{let $=EE(h6(),"logs","hub-daemon.log");return NE(ME($),{recursive:!0}),{fd:fE($,"a"),logPath:$}}catch{return}}function vH(){return gH()==="production"?U$():S1()}function X2($){return PE($).compatible}function IH($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function j2($,Z){try{return await W2($,{authToken:Z})}catch{return}}async function mE($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await j2($))?.url)return!0;await new Promise((W)=>setTimeout(W,hE))}return!1}async function J9($,Z){if(await E3($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await mE($.url,kE);return await j1(Z).catch(()=>{return}),Q}async function I6($,Z){if(X2($))return!0;return J9($,Z)}async function mH($){if(gH()!=="production")return;let Z=S1();if(Z.discoveryPath===$.discoveryPath)return;let Q=await R0(Z.discoveryPath);if(Q?.url)await J9(Q,Z.discoveryPath);else await j1(Z.discoveryPath).catch(()=>{return})}function cE(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return CE(new URL(`./entry.${$}`,import.meta.url))}function uE($,Z){let Q=cE(),J=process.execPath?.trim();if(!J)throw Error("unable to resolve runtime executable for hub daemon");let W=RE(J).toLowerCase().includes("bun"),X=Q.startsWith("/$bunfs/"),j=W&&Q.toLowerCase().endsWith(".ts"),Y=X?[xE]:[...j?["--conditions=development"]:[],Q];return{launcher:J,args:[...Y,"--cwd",$,...gE(Z)],cwd:$,env:{...SE(process.env),CLINE_NO_INTERACTIVE:"1",[wE]:"1"}}}function dE($){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 pE($,Z={}){if(xH())return;let Q=uE($,Z),J=vE();try{zE(Q.launcher,Q.args,{detached:!0,stdio:J?["ignore",J.fd,J.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(J)TE(J.fd)}}async function W9($,Z={}){for(let Q=0;;Q++)try{pE($,Z);return}catch(J){let W=IE[Q];if(!dE(J)||W===void 0)throw J;await new Promise((X)=>setTimeout(X,W))}}function cH($,Z={}){if(xH())return;let Q=vH(),J=F$(Z),W=P1(J.host,J.port,J.pathname),X=Z.allowPortFallback===!0&&J.port!==0;mH(Q).catch(()=>{return}).then(()=>R0(Q.discoveryPath)).then(async(j)=>{let Y=!1;if(j?.url)if(!j.authToken){if(Y=!0,!await J9(j,Q.discoveryPath)&&!X)return}else{let H=await j2(j.url,j.authToken);if(H?.url&&X2(H)&&await D$(H.url,{authToken:j.authToken}))return;if(H?.url)await I6({...H,authToken:j.authToken},Q.discoveryPath);else await j1(Q.discoveryPath).catch(()=>{return})}let V=await j2(W);if(V?.url){if(X2(V)){if(!X||!Y)return}else if(!await I6({...V,authToken:void 0},Q.discoveryPath)&&!X)return}let B=X?{...J,port:0}:J;await W9($,B)}).catch(()=>{})}async function ar($,Z={}){let Q=vH(),J=Z.host!==void 0||Z.port!==void 0||Z.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=F$(Z),X=P1(W.host,W.port,W.pathname),j=(F)=>{if(!J)V8(F.url,F.authToken);return F};await mH(Q).catch(()=>{return});let Y=await R0(Q.discoveryPath),V=!1;if(Y?.url){let F=Y.authToken;if(!F)V=!0,await J9(Y,Q.discoveryPath);else{let U=await j2(Y.url,F);if(U?.url&&X2(U)&&await D$(U.url,{authToken:F}))return j({url:U.url,authToken:F});if(U?.url)await I6({...U,authToken:F},Q.discoveryPath);else await j1(Q.discoveryPath).catch(()=>{return})}}let B=await j2(X);if(B?.url){let F=IH(B,Y,X);if(X2(B))throw Error(`A compatible Cline Hub is already running at ${X}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${V?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`);if(!await I6(F,Q.discoveryPath)&&Z.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is already running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let K=Z.allowPortFallback===!0&&W.port!==0?{...W,port:0}:W;await W9($,K);let G=Date.now()+bE;while(Date.now()<G){let F=await R0(Q.discoveryPath);if(F?.url&&F.authToken){let _=await j2(F.url,F.authToken);if(_?.url&&X2(_)&&await D$(_.url,{authToken:F.authToken}))return j({url:_.url,authToken:F.authToken})}let U=await j2(X);if(U?.url&&!X2(U)){let _=IH(U,F,X);if(!await I6(_,Q.discoveryPath)&&Z.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is still running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((_)=>setTimeout(_,yE))}throw Error("Timed out waiting for detached hub startup.")}function j9(){return rE()==="production"?U$():S1()}function aE(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function iH($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return iH($.data);return String($)}function oE($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function uH($){let Z=$,Q=oE(Z.reason);return new s0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:C3,{closeCode:Z.code,closeReason:Q||void 0})}function sE($,Z){if($ instanceof s0)return $;if($ instanceof Error)return new s0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new s0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new s0("hub_connect_failed",Q);let J=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new s0("hub_connect_failed",J?`Failed to connect to hub at ${Z.toString()} (${J} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var tE=8000,eE=200,dH="*",pH=8000,$C="cline-hub-auth.",rH=new Map,nH=new Set,ZC=3000,QC=3000,JC=100,C3="Hub connection closed",WC=250,XC=5000,lH=0.5;class s0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function jC($){return $ instanceof s0}class X9 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function aH($,Z){return $ instanceof X9&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function oH($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=S3($.toString());return Q?rH.get(Q):void 0}function YC($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function S3($){if(!YC($))return;let Z=new URL(B8($));return Z.search="",Z.hash="",Z.toString()}function w3($){let Z=S3($);return!!Z&&nH.has(Z)}function V8($,Z){let Q=S3($);if(Q){if(nH.add(Q),Z?.trim())rH.set(Q,Z)}return $}class b1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new s0("hub_connection_closed",C3);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}isConnected(){return this.socket?.readyState===1&&this.registered}getConnectionError(){return this.isConnected()?null:this.lastCloseError}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),Z=this.options.authToken?.trim()||oH($);$.hash="";let J=new(aE())($.toString(),Z?[`${$C}${Z}`]:void 0);this.socket=J;let W=!1;this.connectPromise=new Promise((X,j)=>{let Y=!1,V=setTimeout(()=>{if(Y)return;Y=!0,W=!0,this.lastCloseError=new s0("hub_connect_timeout",`Timed out connecting to hub after ${pH}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{J.close()}catch{}j(this.lastCloseError)},pH);J.addEventListener("open",()=>{if(Y)return;Y=!0,clearTimeout(V),X()}),J.addEventListener("error",(B)=>{if(Y)return;Y=!0,clearTimeout(V),this.lastCloseError=sE(B,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)}),J.addEventListener("close",(B)=>{if(Y)return;if(Y=!0,clearTimeout(V),!W)this.lastCloseError=uH(B),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)})}),J.addEventListener("message",(X)=>{this.handleFrame(JSON.parse(iH(X)))}),J.addEventListener("close",(X)=>{if(this.socket!==J)return;if(!W)this.lastCloseError=uH(X),this.sawSocketClose=!0;this.registered=!1;for(let j of this.pendingReplies.values())j.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let X of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(X));this.reconnectAttempt=0}subscribe($,Z){let Q=Z?.sessionId?.trim()||void 0,J={listener:$,sessionId:Q};return this.listeners.add(J),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(J))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,J){let W=0,X=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,J)}catch(j){if(!X||W>=1||!await this.recoverLocalHubTransport(j))throw j;W+=1}}async commandOnce($,Z,Q,J){await this.connect();let W=lE("hubreq_"),X=nE($,J?.timeoutMs),j=new Promise((V,B)=>{let H=X===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(W))return;B(new X9($,"hub_command_timeout",`Hub command ${$} timed out after ${X}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.`))},X);this.pendingReplies.set(W,{resolve:(K)=>{if(H)clearTimeout(H);V(K)},reject:(K)=>{if(H)clearTimeout(H);B(K)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:W,clientId:this.clientId,sessionId:Q,timeoutMs:X,payload:Z}})}catch(V){throw this.pendingReplies.delete(W),V}let Y=await j;if(!Y.ok){if(Y.error?.code===A6){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new s$(V,Y.error.message)}throw new X9($,Y.error?.code,Y.error?.message??`Hub command ${$} failed`)}return Y}async recoverLocalHubTransport($){if(!w3(this.currentUrl)||!jC($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await x6({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!Z)return!1;return this.currentUrl=Z,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(WC*2**this.reconnectAttempt,XC),Z=Math.round($*(1-lH)+Math.random()*$*lH);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},Z)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!w3(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await x6({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 s0("hub_connection_closed",C3),this.sawSocketClose=!1;for(let Z of this.pendingReplies.values())Z.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new s0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,Z){this.sendFrame({kind:$,clientId:this.clientId,...Z?{sessionId:Z}:{}})}adjustSubscriptionCount($,Z){let Q=this.subscriptionKeyForSessionId($),J=(this.subscriptionCounts.get(Q)??0)+Z;if(J<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(Z<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,J),Z>0&&J===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??dH}subscriptionSessionIdFromKey($){return $===dH?void 0:$}handleFrame($){switch($.kind){case"reply":{let Z=$.envelope.requestId;if(!Z)return;let Q=this.pendingReplies.get(Z);if(!Q)return;this.pendingReplies.delete(Z),Q.resolve($.envelope);return}case"event":for(let Z of this.listeners){if(Z.sessionId&&Z.sessionId!==$.envelope.sessionId?.trim())continue;Z.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function B8($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function D$($,Z){let Q=new b1({url:$,authToken:Z?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function P3($,Z){let Q=B8($),J=await W2(Q,{authToken:Z?.authToken});if(!J)return{status:"unreachable",url:Q};if(!iE(J).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await D$(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function VC($){let Z=Date.now()+tE;while(Date.now()<Z){let Q=await R0($.discoveryPath);if(Q?.url){let J=await P3(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(J.status==="compatible")return V8(J.url,Q.authToken)}await new Promise((J)=>setTimeout(J,eE))}return}async function BC($){let Z=Date.now()+QC;while(Date.now()<Z){if(!(await W2($).catch(()=>{return}))?.url)return!0;await new Promise((J)=>setTimeout(J,JC))}return!1}function HC($,Z){try{return B8($)===B8(Z)}catch{return!1}}function KC($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let J=Q;if(J.status==="running"||J.status==="idle"||J.status==="pending")return!0;return Array.isArray(J.participants)&&J.participants.length>0})}async function GC($,Z,Q){let J=new b1({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let W=await J.command("session.list",{limit:500},void 0,{timeoutMs:ZC});return!KC(W.payload)}catch{return!1}finally{await J.dispose().catch(()=>{return})}}async function b3($={}){if($.endpoint?.trim()){let W=await P3($.endpoint);return W.status==="compatible"?W.url:void 0}let Z=j9(),Q=await R0(Z.discoveryPath);if(!Q?.url)return;let J=await P3(Q.url,{authToken:Q.authToken});if(J.status==="compatible")return V8(J.url,Q.authToken);if(J.status==="protocol_mismatch")await j1(Z.discoveryPath).catch(()=>{return});return}async function x6($={}){let Z=await b3($);if(Z&&await D$(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;let Q=j9();return await W9($.workspaceRoot??process.cwd()),await VC(Q)}async function E3($,Z){let Q=new URL($),J=Z?.trim()||oH(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:J?{authorization:`Bearer ${J}`}:void 0})).ok}async function FC($=j9()){let Z=await R0($.discoveryPath);if(!Z?.url)return!1;try{if(await E3(Z.url,Z.authToken))return!0}catch{}return!1}async function sH($){if(!w3($.url))return;let Z=j9(),Q=await R0(Z.discoveryPath);if(!Q?.url||!HC(Q.url,$.url))return;if(!await GC(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await FC())return;if(!await BC(Q.url))return;return await j1(Z.discoveryPath).catch(()=>{return}),await x6({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{resolveProviderRequestHeaders as zC}from"@cline/llms";import{captureSdkError as h3,createSessionId as JK,HUB_CHECKPOINT_CAPABILITY as TC,HUB_COMPACTION_CAPABILITY as NC,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as fC,HUB_HOOK_CAPABILITY_PREFIX as RC,HUB_MISTAKE_LIMIT_CAPABILITY as MC,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as EC,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as CC,isHubToolExecutorName as wC}from"@cline/shared";import{createHash as UC}from"node:crypto";import{formatDisplayUserInput as tH}from"@cline/shared";import{z as U1}from"zod";function DC($){if(!$||typeof $!=="object"||Array.isArray($))return!1;let Z=$;if(Z.role!=="user"&&Z.role!=="assistant")return!1;return typeof Z.content==="string"||Array.isArray(Z.content)}var _C=U1.custom(DC),Y9=U1.object({version:U1.literal(1),updated_at:U1.string().datetime(),conversation_id:U1.string().min(1).optional(),source_message_count:U1.number().int().nonnegative(),source_prefix_hash:U1.string().min(1).optional(),source_last_message_key:U1.string().min(1).optional(),messages:U1.array(_C),system_prompt:U1.string().optional()});function y3($){return JSON.parse(JSON.stringify($))}function eH($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:tH($.content)};return{...$,content:$.content.map((Z)=>Z.type==="text"?{...Z,text:tH(Z.text)}:Z)}}function $K($){if($.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function LC($){let Z=eH($);return $K(Z.role),[["role",Z.role],["content",Z.content],["agent",Z.agent??null],["sessionId",Z.sessionId??null],["metadata",Z.metadata??null],["modelInfo",Z.modelInfo??null],["metrics",Z.metrics??null]]}function ZK($){if(!$)return"";let Z=eH($);if(typeof Z.id==="string"&&Z.id.trim())return`id:${Z.id.trim()}`;if($K(Z.role),typeof Z.ts==="number"&&Number.isFinite(Z.ts))return`ts:${Z.role}:${Z.ts}`;return`content:${Z.role}:${JSON.stringify(Z.content)}`}function QK($,Z=$.length){let Q=UC("sha256");Q.update(`cline-session-compaction-source-v2
|
|
468
468
|
`),Q.update(`${Z}
|
|
469
|
-
`);for(let J of $.slice(0,Z))Q.update(JSON.stringify(
|
|
470
|
-
`);return`sha256:${Q.digest("hex")}`}function V9($){let Z=$.sourceMessages.at(-1),Q=$K(Z);return Y9.parse({version:1,updated_at:$.updatedAt??new Date().toISOString(),...$.conversationId?.trim()?{conversation_id:$.conversationId.trim()}:{},source_message_count:$.sourceMessages.length,source_prefix_hash:ZK($.sourceMessages),...Q?{source_last_message_key:Q}:{},messages:y3($.compactedMessages),...$.systemPrompt!==void 0?{system_prompt:$.systemPrompt}:{}})}function B8($,Z){if(!($.source_message_count<=Z.length))return;let J=!!$.source_prefix_hash&&ZK(Z,$.source_message_count)===$.source_prefix_hash,W=Z[$.source_message_count-1],X=!$.source_prefix_hash&&$.source_message_count>0&&!!$.source_last_message_key&&$K(W)===$.source_last_message_key;if(!(J||X))return;return[...y3($.messages),...y3(Z.slice($.source_message_count))]}function y1($){let Z=Y9.safeParse($);return Z.success?Z.data:void 0}function LC($){return $?JSON.parse(JSON.stringify($)):void 0}function AC($){return $?JSON.parse(JSON.stringify($)):void 0}function OC($){let Z=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,J=(Array.isArray(Z?.history)?Z.history:[]).filter((j)=>!!j&&typeof j==="object"&&!Array.isArray(j)).flatMap((j)=>{let Y=typeof j.ref==="string"?j.ref.trim():"",V=Number(j.createdAt),B=Number(j.runCount);if(!Y||!Number.isFinite(V)||!Number.isInteger(B))return[];return[{ref:Y,createdAt:V,runCount:B,...j.kind==="stash"||j.kind==="commit"?{kind:j.kind}:{}}]}),W=J.at(-1),X=$?.checkpointEnabled===!0?!0:void 0;if(!X&&J.length===0)return;return{...X?{enabled:X}:{},...W?{latest:W}:{},history:J}}function _$($){let{session:Z}=$,Q=LC(Z.metadata);return{version:1,sessionId:Z.sessionId,source:Z.source,status:Z.status,createdAt:Z.startedAt,updatedAt:Z.updatedAt,endedAt:Z.endedAt??null,exitCode:Z.exitCode??null,interactive:Z.interactive,workspace:{cwd:Z.cwd,root:Z.workspaceRoot},model:{providerId:Z.provider,modelId:Z.model},capabilities:{enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams},lineage:{...Z.parentSessionId?{parentSessionId:Z.parentSessionId}:{},...Z.parentAgentId?{parentAgentId:Z.parentAgentId}:{},...Z.agentId?{agentId:Z.agentId}:{},...Z.conversationId?{conversationId:Z.conversationId}:{},isSubagent:Z.isSubagent},...Z.teamName?{team:{name:Z.teamName}}:{},...Z.prompt?{prompt:Z.prompt}:{},...Q?{metadata:Q}:{},...Z.messagesPath?{artifacts:{messagesPath:Z.messagesPath}}:{},...$.messages?{messages:AC($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let J=OC(Q);return J?{checkpoint:J}:{}})()}}function k3($){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 H8($){if(!$)return;return JSON.parse(JSON.stringify($))}var wC=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function JK($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function WK($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function XK($,Z){let Q={...$.config,sessionId:Z},J=qC({providerId:$.config.providerId,sessionId:Z,source:$.source,defaultSource:T0.CORE,client:{name:$.localRuntime?.extensionContext?.client?.name,version:$.localRuntime?.extensionContext?.client?.version,versionHeaderFallback:$.config.headers?.["X-CLIENT-VERSION"],platform:$.localRuntime?.extensionContext?.client?.platform,platformVersion:$.localRuntime?.extensionContext?.client?.platformVersion,isMultiRoot:$.localRuntime?.extensionContext?.client?.isMultiRoot},coreVersion:j8,openAiCodex:{accessToken:$.config.apiKey,userAgentVersion:process.env.npm_package_version},headers:{config:$.config.headers}});if(J)Q.headers=J;return Q}function jK($){let Z=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof Z.agentId==="string"?Z.agentId:"",conversationId:typeof Z.conversationId==="string"?Z.conversationId:"",iteration:typeof Z.iteration==="number"?Z.iteration:0,metadata:Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0}}function Y2($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function YK($,Z){let Q={manifest:[],handlers:new Map};for(let W of Object.keys(Z.toolExecutors??{}).filter(CC)){let X=Z.toolExecutors?.[W];if(typeof X!=="function")continue;Y2(Q,{kind:"toolExecutor",executor:W,capabilityName:`${MC}${W}`},async({payload:j,abortSignal:Y})=>{let V=Array.isArray(j.args)?[...j.args]:[],B={...jK(j.context),signal:Y};return{result:await X(...V,B)}})}for(let W of $?.extraTools??[])Y2(Q,{kind:"tool",name:W.name,description:W.description,inputSchema:H8(W.inputSchema)??{},...W.lifecycle?{lifecycle:H8(W.lifecycle)}:{},capabilityName:`${NC}${W.name}`},async({payload:X,abortSignal:j,progress:Y})=>{let V={...jK(X.context),signal:j};return{result:await W.execute(X.input,{...V,emitUpdate:(H)=>{Y({update:H})}})}});let J=$?.hooks;if(J)for(let W of wC){let X=J[W];if(typeof X!=="function")continue;Y2(Q,{kind:"hook",name:W,capabilityName:`${fC}${W}`},async({payload:j})=>({control:await X(j.context)}))}if($?.compaction?.compact){let W=$.compaction.compact;Y2(Q,{kind:"compaction",capabilityName:TC,config:JK($.compaction)},async({payload:X})=>({result:await W(X.context)}))}if($?.checkpoint?.createCheckpoint){let W=$.checkpoint.createCheckpoint;Y2(Q,{kind:"checkpoint",capabilityName:zC,config:JK($.checkpoint)},async({payload:X})=>({result:await W(X.context)}))}if($?.onConsecutiveMistakeLimitReached){let W=$.onConsecutiveMistakeLimitReached;Y2(Q,{kind:"mistakeLimit",capabilityName:RC},async({payload:X})=>({result:await W(X.context)}))}if($?.userInstructionService){let W=$.userInstructionService;Y2(Q,{kind:"userInstructionService",capabilityName:EC},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 KK($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let Z=$.message;if(typeof Z==="string"&&Z.trim())return Z.trim()}return}function PC($){return KK($)??"Capability request was cancelled."}function SC($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function bC($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function yC($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=typeof Z.inputTokens==="number"?Z.inputTokens:void 0,J=typeof Z.outputTokens==="number"?Z.outputTokens:void 0;if(Q===void 0||J===void 0)return;return{inputTokens:Q,outputTokens:J,cacheReadTokens:typeof Z.cacheReadTokens==="number"?Z.cacheReadTokens:0,cacheWriteTokens:typeof Z.cacheWriteTokens==="number"?Z.cacheWriteTokens:0,totalCost:typeof Z.totalCost==="number"?Z.totalCost:0}}function VK($){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 I3($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function L$($,Z){return I3($?.[Z])??0}function kC($){let Z=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,J=$?.agent&&typeof $.agent==="object"?$.agent:void 0,W=J?.teamRole==="teammate"||J?.teamRole==="lead"?J.teamRole:void 0;return{event:{type:"usage",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,inputTokens:L$(Z,"inputTokens"),outputTokens:L$(Z,"outputTokens"),cacheReadTokens:L$(Z,"cacheReadTokens"),cacheWriteTokens:L$(Z,"cacheWriteTokens"),cost:I3(Z?.totalCost),totalInputTokens:L$(Q,"inputTokens"),totalOutputTokens:L$(Q,"outputTokens"),totalCacheReadTokens:L$(Q,"cacheReadTokens"),totalCacheWriteTokens:L$(Q,"cacheWriteTokens"),totalCost:I3(Q?.totalCost)},teamAgentId:typeof J?.teamAgentId==="string"?J.teamAgentId:void 0,teamRole:W}}function hC($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,J=bC(Q)?Q:Q==="failed"?"error":"completed",W=yC($?.usage??Z?.usage);return{type:"done",reason:J,text:typeof $?.text==="string"?$.text:typeof Z?.text==="string"?Z.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof Z?.iterations==="number"?Z.iterations:0,usage:W}}function V2($,Z){return $.error?.message??`hub command failed: ${Z}`}function x6($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function GK($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof Z?.agentId==="string"?Z.agentId:void 0),parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,isSubagent:typeof Z?.isSubagent==="boolean"?Z.isSubagent:!1,source:typeof Z?.source==="string"?Z.source:T0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:x6($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:x6($.status)==="completed"?0:x6($.status)==="failed"?1:void 0,status:x6($.status),interactive:Z?.interactive===!0,provider:typeof Z?.provider==="string"?Z.provider:"hub",model:typeof Z?.model==="string"?Z.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof Z?.teamName==="string"?Z.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??Z?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??Z?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??Z?.enableTeams===!0,prompt:typeof Z?.prompt==="string"?Z.prompt:void 0,metadata:Z,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,hookPath:typeof Z?.hookPath==="string"?Z.hookPath:void 0}}function A$($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function IC($){let Z=A$($?.snapshot);if(Z)return k3(Z);let Q=$?.session;return Q?GK(Q):void 0}function BK($,Z,Q){let J=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot?.trim()||Z.config.cwd?.trim();if(!J)throw Error("Hub runtime did not return a resolved workspace path.");let W=Q?.cwd?.trim()||Z.config.cwd?.trim()||J;return u0.parse({version:1,session_id:$,source:Z.source??T0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:x6(Q?.status),interactive:Z.interactive===!0,provider:Z.config.providerId,model:Z.config.modelId,cwd:W,workspace_root:J,team_name:Z.config.teamName,enable_tools:Z.config.enableTools,enable_spawn:Z.config.enableSpawnAgent,enable_teams:Z.config.enableAgentTeams,prompt:Z.prompt?.trim()||void 0,metadata:Z.sessionMetadata&&Object.keys(Z.sessionMetadata).length>0?Z.sessionMetadata:void 0})}function HK($,Z){return u0.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??Z.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class B2{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new S6;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,Z){this.clientContext=Z,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd},this.defaultCapabilities=h0($.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 b1({...this.clientOptions,url:$})}async replaceClient($){let Z=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(Z.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!nH($,"session.create"))return!1;let Z=await oH({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!Z)return!1;return await this.replaceClient(Z),!0}registerPlannedSession($,Z,Q){if(this.sessionCapabilities.set($,Z),Q.size>0)this.sessionClientContributionHandlers.set($,Q);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let Z=this.resolveCapabilities($),Q=YK($.localRuntime,Z),J=$.config.sessionId?.trim()||QK(),W=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:H8(XK($,J)),metadata:{...$.sessionMetadata??{},source:$.source??T0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:H8($.toolPolicies),initialMessages:$.initialMessages,...$.initialCompactionState?{initialCompactionState:$.initialCompactionState}:{}});this.registerPlannedSession(J,Z,Q.handlers);let X;try{X=await W()}catch(H){if(this.cleanupPlannedSession(J),await this.recoverLocalHubStartupDeadlock(H)){this.registerPlannedSession(J,Z,Q.handlers);try{X=await W()}catch(K){throw this.cleanupPlannedSession(J),K}}else throw H}let j=A$(X.payload?.snapshot),Y=X.payload?.session,V=(j?.sessionId??Y?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(J),Error("Hub runtime did not return a session id.");let B;try{B=j?HK(j,$):BK(V,$,Y)}catch(H){throw this.cleanupPlannedSession(J),H}if(V!==J)this.cleanupPlannedSession(J),this.registerPlannedSession(V,Z,Q.handlers);return{sessionId:V,manifest:B,manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let J=$.start,W=J?this.resolveCapabilities(J):void 0,X=J?YK(J.localRuntime,W??{}):{manifest:[],handlers:new Map},j,Y;if(J)j=J.config.sessionId?.trim()||QK(),Y=XK(J,j);if(j&&W)this.sessionCapabilities.set(j,W);if(j&&X.handlers.size>0)this.sessionClientContributionHandlers.set(j,X.handlers),this.ensureSessionSubscription(j);let V;try{V=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...J?{workspaceRoot:J.config.workspaceRoot?.trim()||J.config.cwd,cwd:J.config.cwd??$.cwd,sessionConfig:H8(Y),metadata:{...J.sessionMetadata??{},source:J.source??T0.CORE,provider:J.config.providerId,model:J.config.modelId,enableTools:J.config.enableTools,enableSpawn:J.config.enableSpawnAgent,enableTeams:J.config.enableAgentTeams,teamName:J.config.teamName,prompt:J.prompt,interactive:J.interactive===!0},runtimeOptions:{...X.manifest.length>0?{clientContributions:X.manifest}:{},...J.localRuntime?.configExtensions?{configExtensions:J.localRuntime.configExtensions}:{}},toolPolicies:H8(J.toolPolicies),...J.initialCompactionState?{initialCompactionState:J.initialCompactionState}:{}}:{}},Z)}catch(U){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw U}if(!V.ok){let U=typeof V.payload?.error==="string"?V.payload.error:"session.restore failed";if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error(U)}let B=A$(V.payload?.snapshot),H=V.payload?.session,K=(B?.sessionId??H?.sessionId)?.trim();if(Q&&!K){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error("Hub checkpoint restore returned no session id")}if(K&&j&&K!==j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);if(K&&W)this.sessionCapabilities.set(K,W);if(K&&X.handlers.size>0)this.sessionClientContributionHandlers.set(K,X.handlers);if(K)this.ensureSessionSubscription(K);let G=Array.isArray(V.payload?.messages)?V.payload.messages:void 0,F=V.payload?.checkpoint;if(!F){if(K)this.cleanupPlannedSession(K);else if(j)this.cleanupPlannedSession(j);throw Error("Hub checkpoint restore returned no checkpoint")}try{return{sessionId:K,startResult:K?{sessionId:K,manifest:B?HK(B,J??{}):BK(K,J??{},H),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:G,checkpoint:F}}catch(U){if(K)this.cleanupPlannedSession(K);else if(j)this.cleanupPlannedSession(j);throw U}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,updated:Z.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,removed:Z.payload?.removed===!0}}async getAccumulatedUsage($){let Z=await this.client.command("session.get",{includeSnapshot:!0},$),Q=A$(Z.payload?.snapshot);if(Q){let j=Q.usage?{...Q.usage}:void 0,Y=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return j||Y?{usage:j,aggregateUsage:Y}:void 0}let J=Z.payload?.session,W=VK(J?.usage),X=VK(J?.aggregateUsage);return W||X?{usage:W,aggregateUsage:X}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:KK(Z)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,Z]of this.sessionSubscriptions){Z();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(t$(Q))return;throw Q}return IC(Z.payload)}async listSessions($=100){let Z=await this.client.command("session.list",{limit:$}),Q=Array.isArray(Z.payload?.snapshots)?Z.payload.snapshots.flatMap((W)=>{let X=A$(W);return X?[k3(X)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(GK)}async listSettings($){let Z=await this.client.command("settings.list",WK($));if(!Z.ok)throw Error(V2(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",WK($));if(!Z.ok)throw Error(V2(Z,"settings.toggle"));return{snapshot:Z.payload?.snapshot,changedTypes:Array.isArray(Z.payload?.changedTypes)?Z.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,Z){let Q={...Z.metadata??{}};if(typeof Z.prompt==="string")Q.prompt=Z.prompt;if(typeof Z.title==="string")Q.title=Z.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async updateSessionConnection($,Z){let Q=$.trim();if(!Q)return;let J=await this.client.command("session.update_connection",{sessionId:Q,updates:Z},Q);if(!J.ok)throw Error(V2(J,"session.update_connection"))}async updateSessionCompactionState($,Z){let Q=$.trim();if(!Q)return{updated:!1};let J=await this.client.command("session.compaction.update",{sessionId:Q,state:Z},Q);if(!J.ok)h3(this.telemetry,{component:"core",operation:"hub.runtime_host.update_session_compaction_state",error:Error(V2(J,"session.compaction.update")),severity:"warn",handled:!0,context:{command:"session.compaction.update",sessionId:Q,errorCode:J.error?.code}});return{updated:J.ok&&J.payload?.updated===!0}}async readSessionCompactionState($){let Z=$.trim();if(!Z)return;let Q=await this.client.command("session.compaction.get",{sessionId:Z},Z);if(!Q.ok)throw Error(V2(Q,"session.compaction.get"));return y1(Q.payload?.state)}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw h3(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(V2(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:Z,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(V2(Q,"session.messages"));let J=Q.payload?.messages;return Array.isArray(J)?J:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,Z){return this.events.subscribe($,Z)}ensureSessionSubscription($){let Z=$.trim();if(!Z||this.sessionSubscriptions.has(Z))return;let Q=this.client.subscribe((J)=>{this.handleHubEvent(J)},{sessionId:Z});this.sessionSubscriptions.set(Z,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let Z=$.trim();if(!Z)return;this.sessionSubscriptions.get(Z)?.(),this.sessionSubscriptions.delete(Z),this.agentDoneEmittedForCurrentRunBySession.delete(Z)}resolveCapabilities($){return h0(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:hC($.payload)}})}handleHubEvent($){let Z=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!Z)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(Z);let Q=A$($.payload?.snapshot),J=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:J?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"session.notice":{let Q=$.payload?.noticeType,J=$.payload?.displayRole,W=$.payload?.reason,X=$.payload?.agent&&typeof $.payload.agent==="object"?$.payload.agent:void 0,j=X?.teamRole==="lead"||X?.teamRole==="teammate"?X.teamRole:void 0;this.events.emit({type:"agent_event",payload:{sessionId:Z,...j?{teamRole:j}:{},...typeof X?.teamAgentId==="string"?{teamAgentId:X.teamAgentId}:{},event:{type:"notice",...typeof X?.agentId==="string"?{agentId:X.agentId}:{},...typeof X?.conversationId==="string"?{conversationId:X.conversationId}:{},...typeof X?.parentAgentId==="string"?{parentAgentId:X.parentAgentId}:{},noticeType:Q==="recovery"||Q==="stop"?Q:"status",message:typeof $.payload?.message==="string"?$.payload.message:"",...J==="system"||J==="status"?{displayRole:J}:{},...typeof W==="string"?{reason:W}:{},...$.payload?.metadata&&typeof $.payload.metadata==="object"?{metadata:$.payload.metadata}:{}}}});return}case"assistant.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",J=$.payload?.redacted===!0;if(!Q&&!J)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:J}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:Z,payload:$.payload});return}case"usage.updated":{let Q=kC($.payload);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:Z,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"tool",toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Q=A$($.payload?.snapshot),J=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:J?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:Z,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:Z,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=A$($.payload?.snapshot),J=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:Z,payload:{...$.payload,reason:J}}),Q?.interactive===!0&&F0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:J,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{h3(this.telemetry,{component:"core",operation:$,error:Z,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let Z=$.sessionId?.trim();if(!Z)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let J=typeof $.payload?.requestId==="string"?$.payload.requestId:"",W=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!J)return;let X=this.sessionClientContributionHandlers.get(Z)?.get(W);if(!X){await this.client.command("capability.respond",{requestId:J,ok:!1,error:`No client contribution handler registered for capability ${W} in session ${Z}.`},Z).catch(()=>{});return}let j=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},Y=new AbortController;this.activeCapabilityAbortControllers.set(J,Y);let V=(B)=>{this.client.command("capability.progress",{requestId:J,payload:B},Z).catch((H)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",H,$)})};try{let B=await X({payload:j,abortSignal:Y.signal,progress:V});if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:J,ok:!0,payload:B},Z)}catch(B){if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:J,ok:!1,error:B instanceof Error?B.message:String(B)},Z)}finally{this.activeCapabilityAbortControllers.delete(J)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let Z=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!Z)return;let Q=this.activeCapabilityAbortControllers.get(Z);if(!Q)return;Q.abort(PC($.payload.error))}async handleApprovalRequested($){let Z=$.sessionId?.trim();if(!Z)return;let Q=this.sessionCapabilities.get(Z)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let J=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",W=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",X=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!J||!W||!X)return;let j=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},Y=SC($.payload?.inputJson);this.pendingApprovalToolCallIds.add(W),this.emitToolCallContentStart({sessionId:Z,toolCallId:W,toolName:X,toolInput:Y});let V=await Promise.resolve(Q({sessionId:Z,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:Z,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:W,toolName:X,input:Y,policy:j})).catch((B)=>({approved:!1,reason:B instanceof Error?B.message:`Tool approval request failed: ${String(B)}`}));await this.client.command("approval.respond",{approvalId:J,approved:V.approved,reason:V.reason},Z).catch(()=>{})}}class B9 extends B2{constructor($){super({url:V8($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}import{existsSync as xC,mkdirSync as gC}from"node:fs";import{join as vC}from"node:path";import{asBool as g6,asOptionalString as D1,asString as _1,ensureSessionSchema as mC,loadSqliteDb as cC,nowIso as H9,toBoolInt as v6}from"@cline/shared/db";import{resolveDbDataDir as uC}from"@cline/shared/storage";class O${sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??uC()}init(){this.getRawDb()}ensureSessionsDir(){if(!xC(this.sessionsDirPath))gC(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return vC(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=cC(this.sessionDbPath());return mC($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}create($){let Z=H9();this.run(`INSERT OR REPLACE INTO sessions (
|
|
469
|
+
`);for(let J of $.slice(0,Z))Q.update(JSON.stringify(LC(J))),Q.update(`
|
|
470
|
+
`);return`sha256:${Q.digest("hex")}`}function V9($){let Z=$.sourceMessages.at(-1),Q=ZK(Z);return Y9.parse({version:1,updated_at:$.updatedAt??new Date().toISOString(),...$.conversationId?.trim()?{conversation_id:$.conversationId.trim()}:{},source_message_count:$.sourceMessages.length,source_prefix_hash:QK($.sourceMessages),...Q?{source_last_message_key:Q}:{},messages:y3($.compactedMessages),...$.systemPrompt!==void 0?{system_prompt:$.systemPrompt}:{}})}function H8($,Z){if(!($.source_message_count<=Z.length))return;let J=!!$.source_prefix_hash&&QK(Z,$.source_message_count)===$.source_prefix_hash,W=Z[$.source_message_count-1],X=!$.source_prefix_hash&&$.source_message_count>0&&!!$.source_last_message_key&&ZK(W)===$.source_last_message_key;if(!(J||X))return;return[...y3($.messages),...y3(Z.slice($.source_message_count))]}function y1($){let Z=Y9.safeParse($);return Z.success?Z.data:void 0}function AC($){return $?JSON.parse(JSON.stringify($)):void 0}function OC($){return $?JSON.parse(JSON.stringify($)):void 0}function qC($){let Z=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,J=(Array.isArray(Z?.history)?Z.history:[]).filter((j)=>!!j&&typeof j==="object"&&!Array.isArray(j)).flatMap((j)=>{let Y=typeof j.ref==="string"?j.ref.trim():"",V=Number(j.createdAt),B=Number(j.runCount);if(!Y||!Number.isFinite(V)||!Number.isInteger(B))return[];return[{ref:Y,createdAt:V,runCount:B,...j.kind==="stash"||j.kind==="commit"?{kind:j.kind}:{}}]}),W=J.at(-1),X=$?.checkpointEnabled===!0?!0:void 0;if(!X&&J.length===0)return;return{...X?{enabled:X}:{},...W?{latest:W}:{},history:J}}function _$($){let{session:Z}=$,Q=AC(Z.metadata);return{version:1,sessionId:Z.sessionId,source:Z.source,status:Z.status,createdAt:Z.startedAt,updatedAt:Z.updatedAt,endedAt:Z.endedAt??null,exitCode:Z.exitCode??null,interactive:Z.interactive,workspace:{cwd:Z.cwd,root:Z.workspaceRoot},model:{providerId:Z.provider,modelId:Z.model},capabilities:{enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams},lineage:{...Z.parentSessionId?{parentSessionId:Z.parentSessionId}:{},...Z.parentAgentId?{parentAgentId:Z.parentAgentId}:{},...Z.agentId?{agentId:Z.agentId}:{},...Z.conversationId?{conversationId:Z.conversationId}:{},isSubagent:Z.isSubagent},...Z.teamName?{team:{name:Z.teamName}}:{},...Z.prompt?{prompt:Z.prompt}:{},...Q?{metadata:Q}:{},...Z.messagesPath?{artifacts:{messagesPath:Z.messagesPath}}:{},...$.messages?{messages:OC($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let J=qC(Q);return J?{checkpoint:J}:{}})()}}function k3($){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 K8($){if(!$)return;return JSON.parse(JSON.stringify($))}var PC=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function WK($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function XK($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function jK($,Z){let Q={...$.config,sessionId:Z},J=zC({providerId:$.config.providerId,sessionId:Z,source:$.source,defaultSource:T0.CORE,client:{name:$.localRuntime?.extensionContext?.client?.name,version:$.localRuntime?.extensionContext?.client?.version,versionHeaderFallback:$.config.headers?.["X-CLIENT-VERSION"],platform:$.localRuntime?.extensionContext?.client?.platform,platformVersion:$.localRuntime?.extensionContext?.client?.platformVersion,isMultiRoot:$.localRuntime?.extensionContext?.client?.isMultiRoot},coreVersion:Y8,openAiCodex:{accessToken:$.config.apiKey,userAgentVersion:process.env.npm_package_version},headers:{config:$.config.headers}});if(J)Q.headers=J;return Q}function YK($){let Z=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof Z.agentId==="string"?Z.agentId:"",conversationId:typeof Z.conversationId==="string"?Z.conversationId:"",iteration:typeof Z.iteration==="number"?Z.iteration:0,metadata:Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0}}function Y2($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function VK($,Z){let Q={manifest:[],handlers:new Map};for(let W of Object.keys(Z.toolExecutors??{}).filter(wC)){let X=Z.toolExecutors?.[W];if(typeof X!=="function")continue;Y2(Q,{kind:"toolExecutor",executor:W,capabilityName:`${EC}${W}`},async({payload:j,abortSignal:Y})=>{let V=Array.isArray(j.args)?[...j.args]:[],B={...YK(j.context),signal:Y};return{result:await X(...V,B)}})}for(let W of $?.extraTools??[])Y2(Q,{kind:"tool",name:W.name,description:W.description,inputSchema:K8(W.inputSchema)??{},...W.lifecycle?{lifecycle:K8(W.lifecycle)}:{},capabilityName:`${fC}${W.name}`},async({payload:X,abortSignal:j,progress:Y})=>{let V={...YK(X.context),signal:j};return{result:await W.execute(X.input,{...V,emitUpdate:(H)=>{Y({update:H})}})}});let J=$?.hooks;if(J)for(let W of PC){let X=J[W];if(typeof X!=="function")continue;Y2(Q,{kind:"hook",name:W,capabilityName:`${RC}${W}`},async({payload:j})=>({control:await X(j.context)}))}if($?.compaction?.compact){let W=$.compaction.compact;Y2(Q,{kind:"compaction",capabilityName:NC,config:WK($.compaction)},async({payload:X})=>({result:await W(X.context)}))}if($?.checkpoint?.createCheckpoint){let W=$.checkpoint.createCheckpoint;Y2(Q,{kind:"checkpoint",capabilityName:TC,config:WK($.checkpoint)},async({payload:X})=>({result:await W(X.context)}))}if($?.onConsecutiveMistakeLimitReached){let W=$.onConsecutiveMistakeLimitReached;Y2(Q,{kind:"mistakeLimit",capabilityName:MC},async({payload:X})=>({result:await W(X.context)}))}if($?.userInstructionService){let W=$.userInstructionService;Y2(Q,{kind:"userInstructionService",capabilityName:CC},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 GK($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let Z=$.message;if(typeof Z==="string"&&Z.trim())return Z.trim()}return}function SC($){return GK($)??"Capability request was cancelled."}function bC($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function yC($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function kC($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=typeof Z.inputTokens==="number"?Z.inputTokens:void 0,J=typeof Z.outputTokens==="number"?Z.outputTokens:void 0;if(Q===void 0||J===void 0)return;return{inputTokens:Q,outputTokens:J,cacheReadTokens:typeof Z.cacheReadTokens==="number"?Z.cacheReadTokens:0,cacheWriteTokens:typeof Z.cacheWriteTokens==="number"?Z.cacheWriteTokens:0,totalCost:typeof Z.totalCost==="number"?Z.totalCost:0}}function BK($){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 I3($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function L$($,Z){return I3($?.[Z])??0}function hC($){let Z=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,J=$?.agent&&typeof $.agent==="object"?$.agent:void 0,W=J?.teamRole==="teammate"||J?.teamRole==="lead"?J.teamRole:void 0;return{event:{type:"usage",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,inputTokens:L$(Z,"inputTokens"),outputTokens:L$(Z,"outputTokens"),cacheReadTokens:L$(Z,"cacheReadTokens"),cacheWriteTokens:L$(Z,"cacheWriteTokens"),cost:I3(Z?.totalCost),totalInputTokens:L$(Q,"inputTokens"),totalOutputTokens:L$(Q,"outputTokens"),totalCacheReadTokens:L$(Q,"cacheReadTokens"),totalCacheWriteTokens:L$(Q,"cacheWriteTokens"),totalCost:I3(Q?.totalCost)},teamAgentId:typeof J?.teamAgentId==="string"?J.teamAgentId:void 0,teamRole:W}}function IC($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,J=yC(Q)?Q:Q==="failed"?"error":"completed",W=kC($?.usage??Z?.usage);return{type:"done",reason:J,text:typeof $?.text==="string"?$.text:typeof Z?.text==="string"?Z.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof Z?.iterations==="number"?Z.iterations:0,usage:W}}function V2($,Z){return $.error?.message??`hub command failed: ${Z}`}function g6($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function FK($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof Z?.agentId==="string"?Z.agentId:void 0),parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,isSubagent:typeof Z?.isSubagent==="boolean"?Z.isSubagent:!1,source:typeof Z?.source==="string"?Z.source:T0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:g6($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:g6($.status)==="completed"?0:g6($.status)==="failed"?1:void 0,status:g6($.status),interactive:Z?.interactive===!0,provider:typeof Z?.provider==="string"?Z.provider:"hub",model:typeof Z?.model==="string"?Z.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof Z?.teamName==="string"?Z.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??Z?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??Z?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??Z?.enableTeams===!0,prompt:typeof Z?.prompt==="string"?Z.prompt:void 0,metadata:Z,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,hookPath:typeof Z?.hookPath==="string"?Z.hookPath:void 0}}function A$($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function xC($){let Z=A$($?.snapshot);if(Z)return k3(Z);let Q=$?.session;return Q?FK(Q):void 0}function HK($,Z,Q){let J=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot?.trim()||Z.config.cwd?.trim();if(!J)throw Error("Hub runtime did not return a resolved workspace path.");let W=Q?.cwd?.trim()||Z.config.cwd?.trim()||J;return u0.parse({version:1,session_id:$,source:Z.source??T0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:g6(Q?.status),interactive:Z.interactive===!0,provider:Z.config.providerId,model:Z.config.modelId,cwd:W,workspace_root:J,team_name:Z.config.teamName,enable_tools:Z.config.enableTools,enable_spawn:Z.config.enableSpawnAgent,enable_teams:Z.config.enableAgentTeams,prompt:Z.prompt?.trim()||void 0,metadata:Z.sessionMetadata&&Object.keys(Z.sessionMetadata).length>0?Z.sessionMetadata:void 0})}function KK($,Z){return u0.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??Z.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class B2{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new b6;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,Z){this.clientContext=Z,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd},this.defaultCapabilities=h0($.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 b1({...this.clientOptions,url:$})}async replaceClient($){let Z=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(Z.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!aH($,"session.create"))return!1;let Z=await sH({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!Z)return!1;return await this.replaceClient(Z),!0}registerPlannedSession($,Z,Q){if(this.sessionCapabilities.set($,Z),Q.size>0)this.sessionClientContributionHandlers.set($,Q);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let Z=this.resolveCapabilities($),Q=VK($.localRuntime,Z),J=$.config.sessionId?.trim()||JK(),W=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:K8(jK($,J)),metadata:{...$.sessionMetadata??{},source:$.source??T0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:K8($.toolPolicies),initialMessages:$.initialMessages,...$.initialCompactionState?{initialCompactionState:$.initialCompactionState}:{}});this.registerPlannedSession(J,Z,Q.handlers);let X;try{X=await W()}catch(H){if(this.cleanupPlannedSession(J),await this.recoverLocalHubStartupDeadlock(H)){this.registerPlannedSession(J,Z,Q.handlers);try{X=await W()}catch(K){throw this.cleanupPlannedSession(J),K}}else throw H}let j=A$(X.payload?.snapshot),Y=X.payload?.session,V=(j?.sessionId??Y?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(J),Error("Hub runtime did not return a session id.");let B;try{B=j?KK(j,$):HK(V,$,Y)}catch(H){throw this.cleanupPlannedSession(J),H}if(V!==J)this.cleanupPlannedSession(J),this.registerPlannedSession(V,Z,Q.handlers);return{sessionId:V,manifest:B,manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let J=$.start,W=J?this.resolveCapabilities(J):void 0,X=J?VK(J.localRuntime,W??{}):{manifest:[],handlers:new Map},j,Y;if(J)j=J.config.sessionId?.trim()||JK(),Y=jK(J,j);if(j&&W)this.sessionCapabilities.set(j,W);if(j&&X.handlers.size>0)this.sessionClientContributionHandlers.set(j,X.handlers),this.ensureSessionSubscription(j);let V;try{V=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...J?{workspaceRoot:J.config.workspaceRoot?.trim()||J.config.cwd,cwd:J.config.cwd??$.cwd,sessionConfig:K8(Y),metadata:{...J.sessionMetadata??{},source:J.source??T0.CORE,provider:J.config.providerId,model:J.config.modelId,enableTools:J.config.enableTools,enableSpawn:J.config.enableSpawnAgent,enableTeams:J.config.enableAgentTeams,teamName:J.config.teamName,prompt:J.prompt,interactive:J.interactive===!0},runtimeOptions:{...X.manifest.length>0?{clientContributions:X.manifest}:{},...J.localRuntime?.configExtensions?{configExtensions:J.localRuntime.configExtensions}:{}},toolPolicies:K8(J.toolPolicies),...J.initialCompactionState?{initialCompactionState:J.initialCompactionState}:{}}:{}},Z)}catch(U){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw U}if(!V.ok){let U=typeof V.payload?.error==="string"?V.payload.error:"session.restore failed";if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error(U)}let B=A$(V.payload?.snapshot),H=V.payload?.session,K=(B?.sessionId??H?.sessionId)?.trim();if(Q&&!K){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error("Hub checkpoint restore returned no session id")}if(K&&j&&K!==j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);if(K&&W)this.sessionCapabilities.set(K,W);if(K&&X.handlers.size>0)this.sessionClientContributionHandlers.set(K,X.handlers);if(K)this.ensureSessionSubscription(K);let G=Array.isArray(V.payload?.messages)?V.payload.messages:void 0,F=V.payload?.checkpoint;if(!F){if(K)this.cleanupPlannedSession(K);else if(j)this.cleanupPlannedSession(j);throw Error("Hub checkpoint restore returned no checkpoint")}try{return{sessionId:K,startResult:K?{sessionId:K,manifest:B?KK(B,J??{}):HK(K,J??{},H),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:G,checkpoint:F}}catch(U){if(K)this.cleanupPlannedSession(K);else if(j)this.cleanupPlannedSession(j);throw U}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,updated:Z.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,removed:Z.payload?.removed===!0}}async getAccumulatedUsage($){let Z=await this.client.command("session.get",{includeSnapshot:!0},$),Q=A$(Z.payload?.snapshot);if(Q){let j=Q.usage?{...Q.usage}:void 0,Y=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return j||Y?{usage:j,aggregateUsage:Y}:void 0}let J=Z.payload?.session,W=BK(J?.usage),X=BK(J?.aggregateUsage);return W||X?{usage:W,aggregateUsage:X}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:GK(Z)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,Z]of this.sessionSubscriptions){Z();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(t$(Q))return;throw Q}return xC(Z.payload)}async listSessions($=100){let Z=await this.client.command("session.list",{limit:$}),Q=Array.isArray(Z.payload?.snapshots)?Z.payload.snapshots.flatMap((W)=>{let X=A$(W);return X?[k3(X)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(FK)}async listSettings($){let Z=await this.client.command("settings.list",XK($));if(!Z.ok)throw Error(V2(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",XK($));if(!Z.ok)throw Error(V2(Z,"settings.toggle"));return{snapshot:Z.payload?.snapshot,changedTypes:Array.isArray(Z.payload?.changedTypes)?Z.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,Z){let Q={...Z.metadata??{}};if(typeof Z.prompt==="string")Q.prompt=Z.prompt;if(typeof Z.title==="string")Q.title=Z.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async updateSessionConnection($,Z){let Q=$.trim();if(!Q)return;let J=await this.client.command("session.update_connection",{sessionId:Q,updates:Z},Q);if(!J.ok)throw Error(V2(J,"session.update_connection"))}async updateSessionCompactionState($,Z){let Q=$.trim();if(!Q)return{updated:!1};let J=await this.client.command("session.compaction.update",{sessionId:Q,state:Z},Q);if(!J.ok)h3(this.telemetry,{component:"core",operation:"hub.runtime_host.update_session_compaction_state",error:Error(V2(J,"session.compaction.update")),severity:"warn",handled:!0,context:{command:"session.compaction.update",sessionId:Q,errorCode:J.error?.code}});return{updated:J.ok&&J.payload?.updated===!0}}async readSessionCompactionState($){let Z=$.trim();if(!Z)return;let Q=await this.client.command("session.compaction.get",{sessionId:Z},Z);if(!Q.ok)throw Error(V2(Q,"session.compaction.get"));return y1(Q.payload?.state)}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw h3(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(V2(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:Z,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(V2(Q,"session.messages"));let J=Q.payload?.messages;return Array.isArray(J)?J:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,Z){return this.events.subscribe($,Z)}ensureSessionSubscription($){let Z=$.trim();if(!Z||this.sessionSubscriptions.has(Z))return;let Q=this.client.subscribe((J)=>{this.handleHubEvent(J)},{sessionId:Z});this.sessionSubscriptions.set(Z,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let Z=$.trim();if(!Z)return;this.sessionSubscriptions.get(Z)?.(),this.sessionSubscriptions.delete(Z),this.agentDoneEmittedForCurrentRunBySession.delete(Z)}resolveCapabilities($){return h0(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:IC($.payload)}})}handleHubEvent($){let Z=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!Z)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(Z);let Q=A$($.payload?.snapshot),J=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:J?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"session.notice":{let Q=$.payload?.noticeType,J=$.payload?.displayRole,W=$.payload?.reason,X=$.payload?.agent&&typeof $.payload.agent==="object"?$.payload.agent:void 0,j=X?.teamRole==="lead"||X?.teamRole==="teammate"?X.teamRole:void 0;this.events.emit({type:"agent_event",payload:{sessionId:Z,...j?{teamRole:j}:{},...typeof X?.teamAgentId==="string"?{teamAgentId:X.teamAgentId}:{},event:{type:"notice",...typeof X?.agentId==="string"?{agentId:X.agentId}:{},...typeof X?.conversationId==="string"?{conversationId:X.conversationId}:{},...typeof X?.parentAgentId==="string"?{parentAgentId:X.parentAgentId}:{},noticeType:Q==="recovery"||Q==="stop"?Q:"status",message:typeof $.payload?.message==="string"?$.payload.message:"",...J==="system"||J==="status"?{displayRole:J}:{},...typeof W==="string"?{reason:W}:{},...$.payload?.metadata&&typeof $.payload.metadata==="object"?{metadata:$.payload.metadata}:{}}}});return}case"assistant.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",J=$.payload?.redacted===!0;if(!Q&&!J)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:J}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:Z,payload:$.payload});return}case"usage.updated":{let Q=hC($.payload);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:Z,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"tool",toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Q=A$($.payload?.snapshot),J=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:J?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:Z,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:Z,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=A$($.payload?.snapshot),J=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:Z,payload:{...$.payload,reason:J}}),Q?.interactive===!0&&F0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:J,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{h3(this.telemetry,{component:"core",operation:$,error:Z,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let Z=$.sessionId?.trim();if(!Z)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let J=typeof $.payload?.requestId==="string"?$.payload.requestId:"",W=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!J)return;let X=this.sessionClientContributionHandlers.get(Z)?.get(W);if(!X){await this.client.command("capability.respond",{requestId:J,ok:!1,error:`No client contribution handler registered for capability ${W} in session ${Z}.`},Z).catch(()=>{});return}let j=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},Y=new AbortController;this.activeCapabilityAbortControllers.set(J,Y);let V=(B)=>{this.client.command("capability.progress",{requestId:J,payload:B},Z).catch((H)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",H,$)})};try{let B=await X({payload:j,abortSignal:Y.signal,progress:V});if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:J,ok:!0,payload:B},Z)}catch(B){if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:J,ok:!1,error:B instanceof Error?B.message:String(B)},Z)}finally{this.activeCapabilityAbortControllers.delete(J)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let Z=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!Z)return;let Q=this.activeCapabilityAbortControllers.get(Z);if(!Q)return;Q.abort(SC($.payload.error))}async handleApprovalRequested($){let Z=$.sessionId?.trim();if(!Z)return;let Q=this.sessionCapabilities.get(Z)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let J=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",W=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",X=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!J||!W||!X)return;let j=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},Y=bC($.payload?.inputJson);this.pendingApprovalToolCallIds.add(W),this.emitToolCallContentStart({sessionId:Z,toolCallId:W,toolName:X,toolInput:Y});let V=await Promise.resolve(Q({sessionId:Z,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:Z,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:W,toolName:X,input:Y,policy:j})).catch((B)=>({approved:!1,reason:B instanceof Error?B.message:`Tool approval request failed: ${String(B)}`}));await this.client.command("approval.respond",{approvalId:J,approved:V.approved,reason:V.reason},Z).catch(()=>{})}}class B9 extends B2{constructor($){super({url:B8($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}import{existsSync as gC,mkdirSync as vC}from"node:fs";import{join as mC}from"node:path";import{asBool as v6,asOptionalString as D1,asString as _1,ensureSessionSchema as cC,loadSqliteDb as uC,nowIso as H9,toBoolInt as m6}from"@cline/shared/db";import{resolveDbDataDir as dC}from"@cline/shared/storage";class O${sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??dC()}init(){this.getRawDb()}ensureSessionsDir(){if(!gC(this.sessionsDirPath))vC(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return mC(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=uC(this.sessionDbPath());return cC($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}create($){let Z=H9();this.run(`INSERT OR REPLACE INTO sessions (
|
|
471
471
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
472
472
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
473
473
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
474
474
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
475
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,
|
|
475
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,m6($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,m6($.enableTools),m6($.enableSpawn),m6($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,m6($.isSubagent),$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"",$.hookPath??"",$.messagesPath??null,Z])}update($){let Z=[],Q=[];if($.endedAt!==void 0)Z.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)Z.push("exit_code = ?"),Q.push($.exitCode);if($.status!==void 0)Z.push("status = ?"),Q.push($.status);if($.prompt!==void 0)Z.push("prompt = ?"),Q.push($.prompt);if($.metadata!==void 0)Z.push("metadata_json = ?"),Q.push($.metadata?JSON.stringify($.metadata):null);if($.parentSessionId!==void 0)Z.push("parent_session_id = ?"),Q.push($.parentSessionId);if($.parentAgentId!==void 0)Z.push("parent_agent_id = ?"),Q.push($.parentAgentId);if($.agentId!==void 0)Z.push("agent_id = ?"),Q.push($.agentId);if($.conversationId!==void 0)Z.push("conversation_id = ?"),Q.push($.conversationId);if(Z.length===0)return;Z.push("updated_at = ?"),Q.push(H9()),Q.push($.sessionId),this.run(`UPDATE sessions SET ${Z.join(", ")} WHERE session_id = ?`,Q)}updateStatus($,Z,Q){this.update({sessionId:$,status:Z,endedAt:F0(Z)?null:H9(),exitCode:F0(Z)?null:Q??(Z==="failed"?1:0)})}get($){let Z=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
|
|
476
476
|
provider, model, cwd, workspace_root, team_name,
|
|
477
477
|
enable_tools, enable_spawn, enable_teams,
|
|
478
478
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
|
|
479
479
|
prompt, metadata_json, hook_path, messages_path, updated_at
|
|
480
|
-
FROM sessions WHERE session_id = ?`,[$]);if(!Z)return;return{sessionId:_1(Z.session_id),source:_1(Z.source),pid:Number(Z.pid??0),startedAt:_1(Z.started_at),endedAt:Z.ended_at??null,exitCode:Z.exit_code??null,status:_1(Z.status),interactive:
|
|
481
|
-
ORDER BY started_at ASC LIMIT ?`,[$,Z]),J=[];for(let W of Q){let X=this.get(_1(W.session_id));if(X)J.push(X)}return J}delete($,Z=!1){let Q=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(Z)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}}H2();import{existsSync as ZJ,mkdirSync as
|
|
482
|
-
`)}}function
|
|
483
|
-
`).filter(Boolean);await Promise.allSettled(W.map((X)=>K2($,["update-ref","-d",X])))}catch{}}async function
|
|
484
|
-
`,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}async readSessionManifestTitle($){let Z=this.artifacts.sessionManifestPath($,!1),Q;try{Q=await
|
|
485
|
-
`;if(
|
|
486
|
-
`),this.updateCompactionPath($,Q)}async deleteSessionCompactionState($){await
|
|
487
|
-
`,"utf8")}}import{appendFileSync as
|
|
488
|
-
`,"utf8")}}import{formatUserInputBlock as
|
|
480
|
+
FROM sessions WHERE session_id = ?`,[$]);if(!Z)return;return{sessionId:_1(Z.session_id),source:_1(Z.source),pid:Number(Z.pid??0),startedAt:_1(Z.started_at),endedAt:Z.ended_at??null,exitCode:Z.exit_code??null,status:_1(Z.status),interactive:v6(Z.interactive),provider:_1(Z.provider),model:_1(Z.model),cwd:_1(Z.cwd),workspaceRoot:_1(Z.workspace_root),teamName:D1(Z.team_name),enableTools:v6(Z.enable_tools),enableSpawn:v6(Z.enable_spawn),enableTeams:v6(Z.enable_teams),parentSessionId:D1(Z.parent_session_id),parentAgentId:D1(Z.parent_agent_id),agentId:D1(Z.agent_id),conversationId:D1(Z.conversation_id),isSubagent:v6(Z.is_subagent),prompt:D1(Z.prompt),metadata:(()=>{let Q=D1(Z.metadata_json);if(!Q)return;try{let J=JSON.parse(Q);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return})(),hookPath:D1(Z.hook_path),messagesPath:D1(Z.messages_path),updatedAt:D1(Z.updated_at)??H9()}}list($=200){let Z=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Q=[];for(let J of Z){let W=this.get(_1(J.session_id));if(W)Q.push(W)}return Q}listChildren($,Z=200){let Q=this.queryAll(`SELECT session_id FROM sessions WHERE parent_session_id = ?
|
|
481
|
+
ORDER BY started_at ASC LIMIT ?`,[$,Z]),J=[];for(let W of Q){let X=this.get(_1(W.session_id));if(X)J.push(X)}return J}delete($,Z=!1){let Q=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(Z)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}}H2();import{existsSync as ZJ,mkdirSync as WP,readFileSync as dK,renameSync as XP,writeFileSync as jP}from"node:fs";import{join as pK}from"node:path";import{resolveSessionDataDir as YP}from"@cline/shared/storage";import{dirname as QP}from"node:path";import{nanoid as JP}from"nanoid";import{execFile as jw}from"node:child_process";import{promisify as Yw}from"node:util";import{formatDisplayUserInput as AK}from"@cline/shared";var $w=new Set(["auto_compaction","compaction_budget_emergency","completion_reminder","loop_detection_notice","manual_compaction","mistake_stop_notice","recovery_notice"]);function OK($){switch($){case"user":case"assistant":case"tool":case"system":case"status":case"error":return $;default:return"assistant"}}function qK($){return $.metadata&&typeof $.metadata==="object"&&!Array.isArray($.metadata)?$.metadata:void 0}function Zw($){let Z=$?.userRunSpan;return typeof Z==="number"&&Number.isInteger(Z)&&Z>=0?Z:void 0}function Qw($){if(typeof $.content==="string")return{hasAttachment:!1,text:$.content};if(!Array.isArray($.content))return{hasAttachment:!1,text:"unknown"};let Z=!1,Q=!1,J=[];for(let W of $.content){if(!W||typeof W!=="object"||Array.isArray(W))continue;let X=W;if(X.type==="text"&&typeof X.text==="string")J.push(X.text);else if(X.type==="tool_result"||X.type==="tool-result")Q=!0;else if(X.type==="file"||X.type==="image")Z=!0}return{hasAttachment:Z&&!Q,text:J.join(`
|
|
482
|
+
`)}}function Jw($){let Z=AK($);return Z.startsWith("[TASK RESUMPTION]")||Z==="The user approved switching to act mode. Continue with the approved plan now."}function Ww($){let Z=OK($.role),Q=qK($),J=typeof Q?.displayRole==="string"?Q.displayRole.trim().toLowerCase():"";if(J==="system"||J==="status"||J==="error")return J;return Z}function q$($){if(OK($.role)!=="user")return 0;let Z=qK($),Q=typeof Z?.kind==="string"?Z.kind:void 0,J=Zw(Z);if(Q==="compaction"||Q==="compaction_summary")return J??1;if(J!==void 0)return J;if(Q&&$w.has(Q))return 0;let W=Qw($);if(!W.hasAttachment&&!AK(W.text))return 0;if(!W.hasAttachment&&Jw(W.text))return 0;return 1}function Xw($){return q$($)>0}function G8($){let Z=0;for(let Q of $??[])Z+=q$(Q);return Z}var Vw=Yw(jw),zK="cline checkpoint session=";function TK($){return $.includes(zK)}function x3($,Z){$?.log(Z,{severity:"warn"})}function Bw($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))return;let Q=Z;if(!Q.latest||!Array.isArray(Q.history))return;let J=Q.latest,W=Q.history.filter((X)=>!!X&&typeof X==="object"&&typeof X.ref==="string"&&typeof X.createdAt==="number"&&typeof X.runCount==="number");if(typeof J.ref!=="string"||typeof J.createdAt!=="number"||typeof J.runCount!=="number")return;return{latest:J,history:W}}async function K2($,Z){let Q=await Vw("git",["-C",$,...Z],{windowsHide:!0});return{stdout:Q.stdout.trim(),stderr:Q.stderr.trim()}}async function g3($,Z){if(!$)return;let Q=`refs/cline/checkpoints/${Z}/`;try{let{stdout:J}=await K2($,["for-each-ref","--format=%(refname)",Q]),W=J.trim().split(`
|
|
483
|
+
`).filter(Boolean);await Promise.allSettled(W.map((X)=>K2($,["update-ref","-d",X])))}catch{}}async function NK($,Z,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((J)=>K2($,["update-ref",`refs/cline/checkpoints/${Z}/${J.runCount}`,J.ref])))}function Hw($,Z){let Q=$.findIndex((J)=>J.runCount===Z.runCount);if(Q<0)return[...$,Z];return $.map((J,W)=>W===Q?Z:J)}function fK($){let Z,Q,J=async()=>{if(Z!==void 0)return Z;try{Z=(await K2($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Z=!1}return Z},W=async(X)=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:X});if(!await J())return;let j=async(H)=>{try{let G=(await K2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:X,kind:"commit"}}catch(K){x3($.logger,`${H}: ${K instanceof Error?K.message:String(K)}`);return}},Y=`${zK}${$.sessionId} run=${X}`,V="";try{V=(await K2($.cwd,["stash","create",Y])).stdout.trim()}catch(H){return x3($.logger,`Checkpoint snapshot failed: ${H instanceof Error?H.message:String(H)}`),j("Checkpoint HEAD fallback failed")}if(!V)return j("Checkpoint HEAD fallback failed");let B=`refs/cline/checkpoints/${$.sessionId}/${X}`;try{await K2($.cwd,["update-ref",B,V])}catch(H){x3($.logger,`Checkpoint store failed: ${H instanceof Error?H.message:String(H)}`);return}return{ref:V,createdAt:Date.now(),runCount:X,kind:"stash"}};return{beforeRun:async({snapshot:X})=>{if(X.parentAgentId==null)Q=X.messages.length;return},beforeModel:async({snapshot:X})=>{if(X.parentAgentId!=null||X.iteration!==1)return;let j=X.messages.slice(Q??Math.max(0,X.messages.length-1));if(Q=void 0,G8(j)<1)return;let Y=G8(X.messages);if(Y<1)return;let V=await W(Y);if(!V)return;let B=await $.readSessionMetadata(),H=Bw(B);if(H?.latest.ref===V.ref)return;let K=Hw(H?.history??[],V);await $.writeSessionMetadata({...B??{},checkpoint:{latest:V,history:K}});return}}}import{existsSync as K9,mkdirSync as Kw,readdirSync as Gw,rmdirSync as Fw,rmSync as Uw,unlinkSync as Dw}from"node:fs";import{dirname as RK,join as u6}from"node:path";function J0(){return new Date().toISOString()}function d6($){if(!$||!K9($))return;try{Dw($)}catch{}}function _w($){let Z=w6($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=t5($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class v3{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return u6(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!K9(Z))Kw(Z,{recursive:!0});return Z}sessionMessagesPath($){return u6(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionCompactionPath($){return u6(this.sessionArtifactsDir($),`${$}.compaction.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return u6(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!K9(Z)){Z=RK(Z);continue}try{if(Gw(Z).length>0)break;Fw(Z)}catch{break}Z=RK(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!K9($))return;try{Uw($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:J,fileStem:W}=_w($),X=this.sessionArtifactsDir(J);return{messagesPath:u6(X,`${W}.messages.json`)}}}import{appendFileSync as Tw,existsSync as Nw,mkdirSync as wK,readFileSync as fw,writeFileSync as PK}from"node:fs";import{readFile as SK,rm as Rw}from"node:fs/promises";import{dirname as bK,join as Mw}from"node:path";import{ensureHookLogDir as Ew}from"@cline/shared/storage";import{randomUUID as Lw}from"node:crypto";import{mkdir as Aw,open as EK,rename as Ow,rm as qw}from"node:fs/promises";import{dirname as MK}from"node:path";async function zw($){let Z;try{Z=await EK($,"r"),await Z.sync()}catch{}finally{if(Z!==void 0)try{await Z.close()}catch{}}}async function CK($,Z){await Aw(MK($),{recursive:!0});let Q=`${$}.${process.pid}.${Lw()}.tmp`,J;try{J=await EK(Q,"wx"),await J.writeFile(Z,"utf8"),await J.sync(),await J.close(),J=void 0,await Ow(Q,$),await zw(MK($))}catch(W){if(J!==void 0)try{await J.close()}catch{}try{await qw(Q,{force:!0})}catch{}throw W}}function Cw($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="ENOENT"}class m3{adapter;messagesArtifactUploader;logger;artifacts;constructor($,Z,Q){this.adapter=$;this.messagesArtifactUploader=Z;this.logger=Q;this.artifacts=new v3(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,Z,Q){_H(Z,Q,L3($))}writeSessionManifest($,Z){wK(bK($),{recursive:!0}),PK($,`${JSON.stringify(u0.parse(Z),null,2)}
|
|
484
|
+
`,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}async readSessionManifestTitle($){let Z=this.artifacts.sessionManifestPath($,!1),Q;try{Q=await SK(Z,"utf8")}catch{return}try{let J=JSON.parse(Q);if(!J||typeof J!=="object"||Array.isArray(J))return;let W=J.metadata;if(!W||typeof W!=="object"||Array.isArray(W))return;let X=W.title;return typeof X==="string"?X:void 0}catch{return}}readManifestFile($){let Z=this.artifacts.sessionManifestPath($,!1);if(!Nw(Z))return{path:Z};try{return{path:Z,manifest:u0.parse(JSON.parse(fw(Z,"utf8")))}}catch{return{path:Z}}}async resolveArtifactPath($,Z,Q){let W=(await this.adapter.getSession($))?.[Z];return typeof W==="string"&&W.trim().length>0?W:Q($)}async persistSessionMessages($,Z,Q){let J=await this.resolveArtifactPath($,"messagesPath",(j)=>this.artifacts.sessionMessagesPath(j)),W=A3({updatedAt:J0(),context:L3($),messages:Z,systemPrompt:Q}),X=`${JSON.stringify(W,null,2)}
|
|
485
|
+
`;if(wK(bK(J),{recursive:!0}),PK(J,X,"utf8"),!this.messagesArtifactUploader)return;try{let j=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:J,contents:X,row:j})}catch(j){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:j})}}resolveCompactionPath($){let{manifest:Z}=this.readManifestFile($);return Z?.compaction_path?.trim()||this.artifacts.sessionCompactionPath($)}updateCompactionPath($,Z){let Q=this.readManifestFile($);if(!Q.manifest)return;if(Q.manifest.compaction_path===Z)return;this.writeSessionManifest(Q.path,{...Q.manifest,compaction_path:Z})}async readSessionCompactionState($){let Z=this.resolveCompactionPath($);try{return y1(JSON.parse(await SK(Z,"utf8")))}catch(Q){if(Cw(Q))return;this.logger?.debug("Ignoring invalid session compaction state",{sessionId:$,path:Z,error:Q,recovery:"Canonical history is unchanged; deleting the sidecar is safe."});return}}async persistSessionCompactionState($,Z){let Q=this.resolveCompactionPath($),J=Y9.parse(Z);await CK(Q,`${JSON.stringify(J,null,2)}
|
|
486
|
+
`),this.updateCompactionPath($,Q)}async deleteSessionCompactionState($){await Rw(this.resolveCompactionPath($),{force:!0}),this.updateCompactionPath($,void 0)}appendStaleSessionHookLog($,Z,Q,J,W){let j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??Mw(Ew(),"hooks.jsonl");Tw(j,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:J,sessionId:Z,pid:Q,source:W})}
|
|
487
|
+
`,"utf8")}}import{appendFileSync as ww}from"node:fs";import{join as Pw}from"node:path";import{resolveRootSessionId as yK}from"@cline/shared";import{ensureHookLogDir as Sw}from"@cline/shared/storage";import{z as c3}from"zod";var bw="subagent",yw=c3.looseObject({task:c3.string().optional(),systemPrompt:c3.string().optional()});class G9{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,Z,Q,J){this.adapter=$;this.manifestStore=Z;this.toPersistedMessages=Q;this.heartbeatLogIntervalMs=J}teamTaskQueueKey($,Z){return`${$}::${Z}`}activeTeamTaskSessionId($,Z){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,Z))?.at(-1)}buildSubsessionRow($,Z){return{sessionId:Z.sessionId,source:bw,pid:process.ppid,startedAt:Z.startedAt,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:!1,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:Z.parentSessionId,parentAgentId:Z.parentAgentId,agentId:Z.agentId,conversationId:Z.conversationId??null,isSubagent:!0,prompt:Z.prompt,metadata:S6({prompt:Z.prompt}),hookPath:"",messagesPath:Z.messagesPath,updatedAt:Z.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let Z=yK($.sessionContext);if(!Z)return;let Q=yw.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:Z,parentAgentId:$.agent_id,task:Q.success?Q.data.task:void 0,systemPrompt:Q.success?Q.data.systemPrompt:void 0})}async upsertSubagentSession($){let Z=$.rootSessionId;if(!Z)return;let Q=await this.adapter.getSession(Z);if(!Q)return;let J=s5(Z,$.agentId),W=await this.adapter.getSession(J),X=J0(),j=this.manifestStore.artifacts.subagentArtifactPaths(J,$.agentId,this.activeTeamTaskSessionId(Z,$.parentAgentId)),Y=$.prompt??W?.prompt??void 0;if(!Y)Y=await this.adapter.claimSpawnRequest(Z,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!W)return await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:J,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:Y,startedAt:X,...j})),this.manifestStore.initializeMessagesFile(J,j.messagesPath,X),J;return await this.adapter.updateSession({sessionId:J,setRunning:!0,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:W.prompt??Y??null,metadata:S6({metadata:W.metadata??void 0,prompt:W.prompt??Y??null}),expectedStatusLock:W.statusLock}),J}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let Z=yK($.sessionContext);if(!Z)return;if($.hookName==="session_shutdown"){let Q=s5(Z,$.agent_id);return await this.adapter.getSession(Q)?Q:void 0}return await this.upsertSubagentSession({agentId:$.agent_id,parentAgentId:$.parent_agent_id,conversationId:$.taskId,rootSessionId:Z})}async applySubagentStatus($,Z){await this.applySubagentStatusBySessionId($,F3(Z))}async applySubagentStatusBySessionId($,Z){let Q=await this.adapter.getSession($);if(!Q)return;let J=F0(Z)?null:J0(),W=F0(Z)?null:Z==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:Z,endedAt:J,exitCode:W,expectedStatusLock:Q.statusLock})}async applyStatusToRunningChildSessions($,Z){if(!$)return;let Q=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let J of Q)await this.applySubagentStatusBySessionId(J.sessionId,Z)}async onTeamTaskStart($,Z,Q){let J=await this.adapter.getSession($);if(!J)return;let W=G3($,Z),X=J0(),{messagesPath:j}=this.manifestStore.artifacts.subagentArtifactPaths(W,Z);await this.adapter.upsertSession(this.buildSubsessionRow(J,{sessionId:W,parentSessionId:$,parentAgentId:"lead",agentId:Z,prompt:Q||`Team task for ${Z}`,startedAt:X,messagesPath:j})),this.manifestStore.initializeMessagesFile(W,j,X);let Y=this.teamTaskQueueKey($,Z),V=this.teamTaskSessionsByAgent.get(Y)??[];V.push(W),this.teamTaskSessionsByAgent.set(Y,V)}async onTeamTaskEnd($,Z,Q,J,W,X){let j=this.teamTaskQueueKey($,Z),Y=this.teamTaskSessionsByAgent.get(j);if(!Y||Y.length===0)return;let V=Y.shift();if(Y.length===0)this.teamTaskSessionsByAgent.delete(j);if(!V)return;let B=W?.messages??X,H=this.toPersistedMessages(B,W,X);if(H)await this.manifestStore.persistSessionMessages(V,H);await this.applySubagentStatusBySessionId(V,Q),this.teamTaskLastHeartbeatBySession.delete(V),this.teamTaskLastProgressLineBySession.delete(V)}async onTeamTaskProgress($,Z,Q,J){let W=this.teamTaskQueueKey($,Z),X=this.teamTaskSessionsByAgent.get(W)?.[0];if(!X)return;let j=Q.trim();if(!j)return;let Y=J?.kind??"progress";if(Y==="heartbeat"){let B=Date.now(),H=this.teamTaskLastHeartbeatBySession.get(X)??0;if(B-H<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(X,B)}let V=Y==="heartbeat"?"[progress] heartbeat":Y==="text"?`[progress] text: ${j}`:`[progress] ${j}`;if(this.teamTaskLastProgressLineBySession.get(X)===V)return;this.teamTaskLastProgressLineBySession.set(X,V)}async handleSubAgentStart($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;await this.applySubagentStatusBySessionId(Q,"running")}async handleSubAgentEnd($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;if(Z.error){await this.applySubagentStatusBySessionId(Q,"failed");return}let J=this.toPersistedMessages(Z.agentResult?.messages,Z.agentResult);if(J)await this.manifestStore.persistSessionMessages(Q,J);let W=Z.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Q,W==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Q=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??Pw(Sw(),"hooks.jsonl");ww(Q,`${JSON.stringify({ts:J0(),...$})}
|
|
488
|
+
`,"utf8")}}import{formatUserInputBlock as ZP}from"@cline/shared";import{existsSync as kw,readdirSync as hw,readFileSync as Iw}from"node:fs";import{basename as kK,extname as xw,join as gw}from"node:path";import{stripUtf8Bom as vw}from"@cline/shared";import{resolveAgentConfigSearchPaths as mw}from"@cline/shared/storage";import IK from"yaml";import{z as I0}from"zod";var xK=I0.object({name:I0.string().trim().min(1),description:I0.string().trim().min(1),tools:I0.union([I0.string(),I0.array(I0.string())]).optional(),skills:I0.union([I0.string(),I0.array(I0.string())]).optional(),providerId:I0.string().trim().min(1).optional(),modelId:I0.string().trim().min(1).optional(),maxIterations:I0.number().int().positive().optional()});function cw($){$=vw($);let Z=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!Z)throw Error("Missing YAML frontmatter block in agent config file.");let Q=Z[0].length,J=/^---[^\S\r\n]*(?:\r?\n|$)/gm;J.lastIndex=Q;let W,X=Array.from($.matchAll(J)).filter((j)=>j.index>=Q);for(let j of X){let Y=j.index,V=$.slice(Q,Y);try{let B=IK.parse(V);if(!B||typeof B!=="object"||Array.isArray(B))continue;xK.parse(B);let H=$.slice(Y+j[0].length);W={frontmatter:V,body:H}}catch{}}if(W)return W;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function hK($){if($===void 0)return;let Z=Array.isArray($)?$:$.split(",");return Array.from(new Set(Z.map((Q)=>Q.trim()).filter((Q)=>Q.length>0)))}function uw($){return $.trim().toLowerCase()}function dw($){let Z=xw($).toLowerCase();return Z===".yml"||Z===".yaml"}function u3($,Z={}){let{frontmatter:Q,body:J}=cw($),W=IK.parse(Q);if(!W||typeof W!=="object"||Array.isArray(W))throw Error("Agent config frontmatter must be a YAML mapping.");let X=xK.parse(W),j=J.trim();if(!j)throw Error("Missing system prompt body in agent config file.");return{name:X.name,description:X.description,tools:hK(X.tools),skills:hK(X.skills),providerId:X.providerId,modelId:X.modelId,maxIterations:X.maxIterations,systemPrompt:j,path:Z.path}}function F9($){let Z=$.searchPaths??mw($.workspaceRoot),Q=new Map,J=[];for(let X of Z.filter(Boolean)){if(!kw(X))continue;let j;try{j=hw(X,{withFileTypes:!0})}catch(Y){J.push({path:X,error:Y instanceof Error?Y:Error(String(Y))});continue}for(let Y of j){if(!Y.isFile()||!dw(Y.name))continue;let V=gw(X,Y.name);try{let B=Iw(V,"utf8"),H=u3(B,{path:V}),K=uw(H.name);if(!Q.has(K))Q.set(K,H)}catch(B){J.push({path:V,error:B instanceof Error?B:Error(String(B))})}}}return{configs:Array.from(Q.values()).sort((X,j)=>(X.path?kK(X.path):X.name).localeCompare(j.path?kK(j.path):j.name)),errors:J}}import{createTool as pw,zodToJsonSchema as lw}from"@cline/shared";import{z as gK}from"zod";var d3="subagent_",U9=64,iw=gK.object({prompt:gK.string().trim().min(1).describe("Task for the subagent to perform")});function rw($){let Z="",Q=!0;for(let J of $.trim().toLowerCase()){let W=J.charCodeAt(0);if(!(W>=97&&W<=122||W>=48&&W<=57||J==="_")||J==="_"){if(!Q)Z+="_",Q=!0;continue}Z+=J,Q=!1}return Q?Z.slice(0,-1):Z}function nw($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z^=$.charCodeAt(Q),Z=Math.imul(Z,16777619);return(Z>>>0).toString(36)}function p3($){let Z=rw($)||"agent",Q=nw($).slice(0,6),J=`${d3}${Z}`;if(J.length<=U9)return J;let W=U9-d3.length-Q.length-1,X=Z.slice(0,Math.max(1,W));return`${d3}${X}_${Q}`.slice(0,U9)}function l3($){let Z=new Set,Q=[];for(let J of[...$].sort((W,X)=>W.name.localeCompare(X.name))){let W=p3(J.name),X=W,j=2;while(Z.has(X)){let Y=`_${j++}`,V=Math.max(1,U9-Y.length);X=`${W.slice(0,V)}${Y}`}Z.add(X),Q.push({toolName:X,config:J})}return Q}function aw($,Z){return{...$,providerId:Z.providerId??$.providerId,modelId:Z.modelId??$.modelId,maxIterations:Z.maxIterations??$.maxIterations}}function D9($){return l3($.agents).map(({toolName:Z,config:Q})=>{return pw({name:Z,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:lw(iw),execute:async(W,X)=>{let j=$.configProvider.getRuntimeConfig(),Y=a2(aw(j,Q)),V=$.createSubAgentTools?await $.createSubAgentTools(Q,W,X):[],B=o2({kind:"subagent",prompt:Q.systemPrompt,configProvider:Y,tools:V,maxIterations:Q.maxIterations,parentAgentId:X.agentId,abortSignal:X.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),H=B.getAgentId(),K=B.getConversationId(),G=X.agentId,F={systemPrompt:Q.systemPrompt,task:W.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:H,conversationId:K,parentAgentId:G,input:F})}catch{}try{let U=await B.run(W.prompt),_={text:U.text,iterations:U.iterations,finishReason:U.finishReason,usage:{inputTokens:U.usage.inputTokens,outputTokens:U.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:K,parentAgentId:G,input:F,result:_,agentResult:U})}catch{}return _}catch(U){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:K,parentAgentId:G,input:F,error:U instanceof Error?U:Error(String(U))})}catch{}throw U}},timeoutMs:300000,retryable:!1})})}function L1(){return new Date().toISOString()}function vK($,Z){if(Z<=0)return 0;return Math.round($/Z*100)}function ow($,Z){let Q=new Set;for(let W of Z)if(W.status==="reviewed")Q.add(`${W.outcomeId}:${W.section}`);let J=new Set;for(let W of $){if(W.status==="finalized")continue;for(let X of W.requiredSections)if(!Q.has(`${W.id}:${X}`))J.add(`${W.id}:${X}`)}return[...J].sort((W,X)=>W.localeCompare(X))}function _9($,Z){let Q={idle:0,running:0,stopped:0},J={pending:0,in_progress:0,blocked:0,completed:0},W={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},X={draft:0,in_review:0,finalized:0},j={draft:0,reviewed:0,rejected:0},Y=0,V=0;for(let L of Z.members)if(Q[L.status]+=1,L.role==="lead")Y+=1;else V+=1;let B=[],H=[],K=Z.tasks.filter((L)=>L.status==="completed").length,G=new Map(Z.tasks.map((L)=>[L.id,L]));for(let L of Z.tasks){if(J[L.status]+=1,L.status==="blocked"){B.push(L.id);continue}if(L.status!=="pending")continue;if(L.dependsOn.every((D)=>{return G.get(D)?.status==="completed"}))H.push(L.id)}let F=[],U,_=0;for(let L of Z.runs){if(W[L.status]+=1,L.status==="queued"||L.status==="running")F.push(L.id);let O=L.startedAt.getTime();if(O>=_)_=O,U=L.id}for(let L of Z.outcomes)X[L.status]+=1;for(let L of Z.outcomeFragments)j[L.status]+=1;return{teamName:$,updatedAt:L1(),members:{total:Z.members.length,byStatus:Q,leadCount:Y,teammateCount:V},tasks:{total:Z.tasks.length,byStatus:J,blockedTaskIds:B,readyTaskIds:H,completionPct:vK(K,Z.tasks.length)},runs:{total:Z.runs.length,byStatus:W,activeRunIds:F,latestRunId:U},outcomes:{total:Z.outcomes.length,byStatus:X,finalizedPct:vK(X.finalized,Z.outcomes.length),missingRequiredSections:ow(Z.outcomes,Z.outcomeFragments)},fragments:{total:Z.outcomeFragments.length,byStatus:j}}}function L9($){let{event:Z}=$;switch(Z.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),taskId:Z.task.id,agentId:Z.task.assignee??Z.task.createdBy};case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),outcomeId:Z.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),outcomeId:Z.fragment.outcomeId,fragmentId:Z.fragment.id,agentId:Z.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),taskId:Z.message.taskId,agentId:Z.message.fromAgentId,message:Z.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),taskId:Z.entry.taskId,agentId:Z.entry.agentId,message:Z.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1(),agentId:Z.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:L1()}}import{sanitizeFileName as sw,TeamMessageType as I}from"@cline/shared";import{nanoid as tw}from"nanoid";import{TeamMessageType as ba}from"@cline/shared";function i3($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function mK($,Z){return $?.status==="stopped"&&i3(Z)}var ew=600000,cK="recovered_queued";function $P($){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.
|
|
489
489
|
|
|
490
490
|
${$.message}`}class r3{agents=new Map;configs=new Map;onTeamEvent;constructor($,Z){if(this.onTeamEvent=Z,$)for(let[Q,J]of Object.entries($))this.addAgent(Q,J)}addAgent($,Z){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let Q={...Z,onEvent:(W)=>{Z.onEvent?.(W),this.emitEvent({type:I.AgentEvent,agentId:$,event:W})}},J=new Y$(Q);if(Q.onEvent)J.subscribeEvents(Q.onEvent);this.agents.set($,J),this.configs.set($,Z)}removeAgent($){return this.configs.delete($),this.agents.delete($)}getAgent($){return this.agents.get($)}getAgentIds(){return Array.from(this.agents.keys())}get size(){return this.agents.size}async routeTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:I.TaskStart,agentId:$,message:Z});try{let J=await Q.run(Z);return this.emitEvent({type:I.TaskEnd,agentId:$,result:J}),J}catch(J){let W=J instanceof Error?J:Error(String(J));throw this.emitEvent({type:I.TaskEnd,agentId:$,error:W,messages:Q.getMessages()}),J}}async continueTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:I.TaskStart,agentId:$,message:Z});try{let J=await Q.continue(Z);return this.emitEvent({type:I.TaskEnd,agentId:$,result:J}),J}catch(J){let W=J instanceof Error?J:Error(String(J));throw this.emitEvent({type:I.TaskEnd,agentId:$,error:W,messages:Q.getMessages()}),J}}async runParallel($){let Z=$.map(async(Q)=>{let J=this.agents.get(Q.agentId);if(!J)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 J.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 X=W instanceof Error?W:Error(String(W));return this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,error:X,messages:J.getMessages()}),{agentId:Q.agentId,result:void 0,error:X,metadata:Q.metadata}}});return Promise.all(Z)}async runSequential($){let Z=[];for(let Q of $){let J=this.agents.get(Q.agentId);if(!J){Z.push({agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata});continue}this.emitEvent({type:I.TaskStart,agentId:Q.agentId,message:Q.message});try{let W=await J.run(Q.message);this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,result:W}),Z.push({agentId:Q.agentId,result:W,metadata:Q.metadata})}catch(W){let X=W instanceof Error?W:Error(String(W));this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,error:X,messages:J.getMessages()}),Z.push({agentId:Q.agentId,result:void 0,error:X,metadata:Q.metadata})}}return Z}async runPipeline($,Z,Q){let J=[],W=Z;for(let X of $){let j=this.agents.get(X);if(!j){J.push({agentId:X,result:void 0,error:Error(`Agent "${X}" not found in team`)});break}this.emitEvent({type:I.TaskStart,agentId:X,message:W});try{let Y=await j.run(W);this.emitEvent({type:I.TaskEnd,agentId:X,result:Y}),J.push({agentId:X,result:Y});let V=$.indexOf(X)+1;if(V<$.length){let B=$[V];W=Q?Q(Y,B):`Previous agent output:
|
|
491
491
|
${Y.text}
|
|
492
492
|
|
|
493
|
-
Please continue from here.`}}catch(Y){let V=Y instanceof Error?Y:Error(String(Y));this.emitEvent({type:I.TaskEnd,agentId:X,error:V,messages:j.getMessages()}),J.push({agentId:X,result:void 0,error:V});break}}return J}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{}}}class
|
|
493
|
+
Please continue from here.`}}catch(Y){let V=Y instanceof Error?Y:Error(String(Y));this.emitEvent({type:I.TaskEnd,agentId:X,error:V,messages:j.getMessages()}),J.push({agentId:X,result:void 0,error:V});break}}return J}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{}}}class p6{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_${sw(tw(10))}`,this.onTeamEvent=$.onTeamEvent,this.missionLogIntervalSteps=Math.max(1,$.missionLogIntervalSteps??3),this.missionLogIntervalMs=Math.max(1000,$.missionLogIntervalMs??120000),this.maxConcurrentRuns=Math.max(1,$.maxConcurrentRuns??2);let Z=$.leadAgentId??"lead";this.members.set(Z,{agentId:Z,role:"lead",status:"idle",runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()})}getTeamId(){return this.teamId}getTeamName(){return this.teamName}getMemberRole($){return this.members.get($)?.role}getMemberIds(){return Array.from(this.members.keys())}getTeammateIds(){return Array.from(this.members.values()).filter(($)=>$.role==="teammate").map(($)=>$.agentId)}getTask($){return this.tasks.get($)}listTasks(){return Array.from(this.tasks.values())}listTaskItems($){return Array.from(this.tasks.values()).map((Z)=>{let Q=this.getUnresolvedDependencies(Z);return{...Z,blockedBy:Q,isReady:Z.status==="pending"&&!Z.assignee&&Q.length===0}}).filter((Z)=>{if($?.status&&Z.status!==$.status)return!1;if($?.assignee&&Z.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,Z){let Q=Z?.unreadOnly??!0,J=Z?.markRead??!0,W=Z?.limit,X=this.mailbox.filter((Y)=>Y.toAgentId===$&&(!Q||!Y.readAt)),j=typeof W==="number"&&W>0?X.slice(Math.max(0,X.length-W)):X;if(J){let Y=new Date;for(let V of j)if(!V.readAt)V.readAt=Y}return j.map((Y)=>({...Y}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let Q of this.tasks.values())$[Q.status]++;let Z={draft:0,in_review:0,finalized:0};for(let Q of this.outcomes.values())Z[Q.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((Q)=>({agentId:Q.agentId,role:Q.role,description:Q.description,status:Q.status})),taskCounts:$,unreadMessages:this.mailbox.filter((Q)=>!Q.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").length,outcomeCounts:Z}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map(($)=>({agentId:$.agentId,role:$.role,description:$.description,status:$.status})),tasks:Array.from(this.tasks.values()).map(($)=>({...$})),mailbox:this.mailbox.map(($)=>({...$})),missionLog:this.missionLog.map(($)=>({...$})),runs:Array.from(this.runs.values()).map(($)=>({...$})),outcomes:Array.from(this.outcomes.values()).map(($)=>({...$})),outcomeFragments:Array.from(this.outcomeFragments.values()).map(($)=>({...$}))}}hydrateState($){this.clearQueuedRunDispatchTimer(),this.tasks.clear();for(let Q of $.tasks)this.tasks.set(Q.id,{...Q});this.mailbox.length=0,this.mailbox.push(...$.mailbox.map((Q)=>({...Q}))),this.missionLog.length=0,this.missionLog.push(...$.missionLog.map((Q)=>({...Q}))),this.runs.clear();for(let Q of $.runs??[])this.runs.set(Q.id,{...Q});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").map((Q)=>Q.id)),this.outcomes.clear();for(let Q of $.outcomes??[])this.outcomes.set(Q.id,{...Q});this.outcomeFragments.clear();for(let Q of $.outcomeFragments??[])this.outcomeFragments.set(Q.id,{...Q});let Z=Array.from(this.members.values()).filter((Q)=>Q.role==="lead");this.members.clear();for(let Q of Z)this.members.set(Q.agentId,{...Q,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let Q of $.members){if(Q.role!=="teammate")continue;this.members.set(Q.agentId,{agentId:Q.agentId,role:"teammate",description:Q.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,F8($.tasks.map((Q)=>Q.id),"task_")),this.messageCounter=Math.max(this.messageCounter,F8($.mailbox.map((Q)=>Q.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,F8($.missionLog.map((Q)=>Q.id),"log_")),this.runCounter=Math.max(this.runCounter,F8(($.runs??[]).map((Q)=>Q.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,F8(($.outcomes??[]).map((Q)=>Q.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,F8(($.outcomeFragments??[]).map((Q)=>Q.id),"frag_"))}isTeammateActive($){let Z=this.members.get($);return!!Z&&Z.role==="teammate"&&!!Z.agent}spawnTeammate({agentId:$,config:Z}){let Q=this.members.get($);if(Q&&Q.role!=="teammate")throw Error(`Team member "${$}" already exists and is not a teammate`);if(Q&&Q.runningCount>0)throw Error(`Teammate "${$}" is currently running and cannot be respawned`);let J={...Z,apiTimeoutMs:ew,consumePendingUserMessage:()=>{let j=this.members.get($);if(!j||!j.pendingSteerMessage)return;let Y=j.pendingSteerMessage;return j.pendingSteerMessage=void 0,Y},onEvent:(j)=>{Z.onEvent?.(j),this.emitEvent({type:I.AgentEvent,agentId:$,event:j}),this.trackMeaningfulEvent($,j)}},W=new Y$(J);if(J.onEvent)W.subscribeEvents(J.onEvent);let X={agentId:$,role:"teammate",description:Z.role,status:"idle",agent:W,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,X),this.emitEvent({type:I.TeammateSpawned,agentId:$,role:Z.role,teammate:{rolePrompt:Z.systemPrompt,modelId:Z.modelId,maxIterations:Z.maxIterations,runtimeAgentId:W.getAgentId(),conversationId:W.getConversationId(),parentAgentId:null}}),{agentId:X.agentId,role:X.role,description:X.description,status:X.status}}shutdownTeammate($,Z){let Q=this.members.get($);if(!Q||Q.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{Q.agent?.abort()}catch(J){if(!i3(J))throw J}Q.status="stopped",this.emitEvent({type:I.TeammateShutdown,agentId:$,reason:Z})}updateTeammateConnections($){for(let Z of this.members.values()){if(Z.role!=="teammate"||!Z.agent)continue;Z.agent.updateConnection($)}}createTask($){let Z=`task_${String(++this.taskCounter).padStart(4,"0")}`,Q=new Date,J={id:Z,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:Q,updatedAt:Q,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(Z,J),this.emitEvent({type:I.TeamTaskUpdated,task:{...J}}),{...J}}claimTask($,Z){let Q=this.requireTask($);return this.assertDependenciesResolved(Q),Q.status="in_progress",Q.assignee=Z,Q.updatedAt=new Date,this.emitEvent({type:I.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"progress",summary:`Claimed task "${Q.title}"`}),{...Q}}blockTask($,Z,Q){let J=this.requireTask($);return J.status="blocked",J.updatedAt=new Date,J.summary=Q,this.emitEvent({type:I.TeamTaskUpdated,task:{...J}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"blocked",summary:Q}),{...J}}completeTask($,Z,Q){let J=this.requireTask($);if(J.status="completed",J.updatedAt=new Date,J.summary=Q,!J.assignee)J.assignee=Z;return this.emitEvent({type:I.TeamTaskUpdated,task:{...J}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"done",summary:Q}),{...J}}async routeToTeammate($,Z,Q){let J=this.members.get($);if(!J||J.role!=="teammate"||!J.agent)throw Error(`Teammate "${$}" was not found`);if(!J.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");J.runningCount++,J.status="running",this.emitEvent({type:I.TaskStart,agentId:$,message:Z});try{let W=this.listMailbox($,{unreadOnly:!0,markRead:!0}),X=W.length>0?`${this.buildMailboxNotification(W)}
|
|
494
494
|
|
|
495
|
-
${Z}`:Z,j=Q?.continueConversation?await J.agent.continue(X):await J.agent.run(X);return this.emitEvent({type:I.TaskEnd,agentId:$,result:j}),this.recordProgressStep($,`Completed a delegated run (${j.iterations} iterations)`,Q?.taskId,!0),j}catch(W){let X=W instanceof Error?W:Error(String(W));if(this.emitEvent({type:I.TaskEnd,agentId:$,error:X,messages:J.agent.getMessages()}),!vK(J,X))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:X.message});throw X}finally{if(J.runningCount--,J.runningCount<=0&&this.members.get($)?.status!=="stopped")J.status="idle"}}startTeammateRun($,Z,Q){let J=`run_${String(++this.runCounter).padStart(5,"0")}`,W={id:J,agentId:$,taskId:Q?.taskId,status:"queued",message:Z,priority:Q?.priority??0,retryCount:0,maxRetries:Math.max(0,Q?.maxRetries??0),continueConversation:Q?.continueConversation,startedAt:new Date(0),leaseOwner:Q?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(J,W),this.runQueue.push(J),this.emitEvent({type:I.RunQueued,run:{...W}}),this.dispatchQueuedRuns(),{...W}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let Z=this.selectNextDispatchableQueuedRun();$=Z.nextDelayedAttemptAt;let Q=Z.index;if(Q<0){this.scheduleQueuedRunDispatch($);return}let[J]=this.runQueue.splice(Q,1),W=J?this.runs.get(J):void 0;if(!W||W.status!=="queued")continue;this.executeQueuedRun(W)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,Z=Number.NEGATIVE_INFINITY,Q,J=Date.now();for(let W=0;W<this.runQueue.length;W++){let X=this.runs.get(this.runQueue[W]);if(!X||X.status!=="queued")continue;if(X.nextAttemptAt&&X.nextAttemptAt.getTime()>J){if(!Q||X.nextAttemptAt<Q)Q=X.nextAttemptAt;continue}if(X.priority>Z)Z=X.priority,$=W}return{index:$,nextDelayedAttemptAt:Q}}scheduleQueuedRunDispatch($){if(!$)return;let Z=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},Z)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let Z of this.runs.values())if(Z.status==="running")$++;return $}async executeQueuedRun($){let Z=$.currentActivity===mK;$.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 J=Z?ew($):$.message,W=await this.routeToTeammate($.agentId,J,{taskId:$.taskId,continueConversation:$.continueConversation});if(W.finishReason==="error")throw Error(W.text||"Teammate run failed");$.status="completed",$.result=W,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:I.RunCompleted,run:{...$}})}catch(J){let W=J instanceof Error?J.message:String(J??"Unknown error");$.error=W,$.endedAt=new Date;let X=this.members.get($.agentId);if(vK(X,J))$.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 Z=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Q)=>{if(!Z&&!["running","queued"].includes(Q.status))return!1;if($?.status&&Q.status!==$.status)return!1;if($?.agentId&&Q.agentId!==$.agentId)return!1;return!0}).map((Q)=>({...Q}))}getRun($){let Z=this.runs.get($);return Z?{...Z}:void 0}async awaitRun($,Z=250){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);while(Q.status==="queued"||Q.status==="running")await cK(Z);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((Z)=>["queued","running"].includes(Z.status)))await cK($);return this.listRuns()}cancelRun($,Z){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);if(Q.status==="completed"||Q.status==="failed")return{...Q};Q.status="cancelled",Q.error=Z,Q.endedAt=new Date,Q.currentActivity="cancelled";let J=this.runQueue.indexOf($);if(J>=0)this.runQueue.splice(J,1);return this.emitEvent({type:I.RunCancelled,run:{...Q},reason:Z}),{...Q}}recoverActiveRuns($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;let J=this.members.get(Q.agentId);if(!J||J.role!=="teammate"||!J.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=mK,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);Z.push({...Q}),this.emitEvent({type:I.RunQueued,run:{...Q}})}return this.dispatchQueuedRuns(),Z}markStaleRunsInterrupted($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;Q.status="interrupted",Q.error=$,Q.endedAt=new Date,Q.currentActivity="interrupted",Z.push({...Q}),this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),Z}sendMessage($,Z,Q,J,W){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let X=this.members.get(Z);if(!X)throw Error(`Unknown recipient "${Z}"`);let j={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:Z,subject:Q,body:J,taskId:W,sentAt:new Date};if(this.mailbox.push(j),this.emitEvent({type:I.TeamMessage,message:{...j}}),X.role==="teammate"&&X.runningCount>0&&X.agent)X.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Q}". Use the team_read_mailbox tool to read it at your convenience.`;return{...j}}broadcast($,Z,Q,J){let W=[];for(let X of this.members.values()){if(X.agentId===$)continue;if(X.role==="lead")continue;W.push(this.sendMessage($,X.agentId,Z,Q,J?.taskId))}return W}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let Z={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:$.agentId,taskId:$.taskId,kind:$.kind,summary:$.summary,evidence:$.evidence,nextAction:$.nextAction};this.missionLog.push(Z);let Q=this.members.get($.agentId);if(Q)Q.lastMissionAt=Date.now(),Q.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:I.TeamMissionLog,entry:{...Z}}),{...Z}}createOutcome($){let Z={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:$.title,status:"draft",requiredSections:[...new Set($.requiredSections)],createdBy:$.createdBy,createdAt:new Date};return this.outcomes.set(Z.id,Z),this.emitEvent({type:I.OutcomeCreated,outcome:{...Z}}),{...Z}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let Z=this.outcomes.get($.outcomeId);if(!Z)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!Z.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Q={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(Q.id,Q),Z.status==="draft")Z.status="in_review";return this.emitEvent({type:I.OutcomeFragmentAttached,fragment:{...Q}}),{...Q}}reviewOutcomeFragment($){let Z=this.outcomeFragments.get($.fragmentId);if(!Z)throw Error(`Fragment "${$.fragmentId}" was not found`);return Z.status=$.approved?"reviewed":"rejected",Z.reviewedBy=$.reviewedBy,Z.reviewedAt=new Date,this.emitEvent({type:I.OutcomeFragmentReviewed,fragment:{...Z}}),{...Z}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((Z)=>Z.outcomeId===$).map((Z)=>({...Z}))}finalizeOutcome($){let Z=this.outcomes.get($);if(!Z)throw Error(`Outcome "${$}" was not found`);let Q=this.listOutcomeFragments($);for(let J of Z.requiredSections)if(!Q.some((X)=>X.section===J&&X.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${J}" is missing a reviewed fragment.`);return Z.status="finalized",Z.finalizedAt=new Date,this.emitEvent({type:I.OutcomeFinalized,outcome:{...Z}}),{...Z}}cleanup(){for(let $ of this.members.values())if($.role==="teammate"&&$.runningCount>0)throw Error(`Cannot cleanup team while teammate "${$.agentId}" is still running`);if(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let $ of this.members.values())if($.role==="teammate")try{$.agent?.abort()}catch(Z){if(!i3(Z))throw Z}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[$,Z]of this.members.entries())if(Z.role==="teammate")this.members.delete($)}requireTask($){let Z=this.tasks.get($);if(!Z)throw Error(`Task "${$}" was not found`);return Z}assertDependenciesResolved($){let Z=this.getUnresolvedDependencies($);if(Z.length>0)throw Error(`Task "${$.id}" is blocked by "${Z[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((Z)=>{let Q=this.tasks.get(Z);return!Q||Q.status!=="completed"})}trackMeaningfulEvent($,Z){if(this.recordRunActivityFromAgentEvent($,Z),Z.type==="iteration_end"&&Z.hadToolCalls){this.recordProgressStep($,`Completed iteration ${Z.iteration} with ${Z.toolCallCount} tool call(s)`);return}if(Z.type==="content_end"&&Z.contentType==="tool"&&!Z.error){this.recordProgressStep($,`Finished tool "${Z.toolName??"unknown"}"`);return}if(Z.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${Z.iterations} iterations)`});return}if(Z.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:Z.error.message})}recordRunActivityFromAgentEvent($,Z){let Q;switch(Z.type){case"iteration_start":Q=`iteration_${Z.iteration}_started`;break;case"content_start":if(Z.contentType==="tool")Q=`running_tool_${Z.toolName??"unknown"}`;break;case"content_end":if(Z.contentType==="tool")Q=Z.error?this.formatProgressErrorActivity(`tool_${Z.toolName??"unknown"}_error`,Z.error):`finished_tool_${Z.toolName??"unknown"}`;break;case"done":Q="finalizing_response";break;case"error":Q=this.formatProgressErrorActivity("run_error",Z.error.message);break;default:break}if(!Q)return;for(let J of this.runs.values()){if(J.agentId!==$||J.status!=="running")continue;this.recordRunProgress(J,Q)}}recordRunProgress($,Z){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=Z,$.currentActivity=Z,this.emitEvent({type:I.RunProgress,run:{...$},message:Z})}formatProgressErrorActivity($,Z){let Q=Z.replace(/\s+/g," ").trim();if(Q.length===0)return $;let J=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${J}`}recordProgressStep($,Z,Q,J=!1){this.missionStepCounter++;let W=this.members.get($);if(!W)return;let X=this.missionStepCounter-W.lastMissionStep,j=Date.now()-W.lastMissionAt;if(!J&&X<this.missionLogIntervalSteps&&j<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Q,kind:"progress",summary:Z})}buildMailboxNotification($){if($.length===0)return"";let Z=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Q of $)Z.push(`--- Message from ${Q.fromAgentId} | subject: ${Q.subject} ---`),Z.push(Q.body);return Z.push("---"),Z.join(`
|
|
496
|
-
`)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function
|
|
495
|
+
${Z}`:Z,j=Q?.continueConversation?await J.agent.continue(X):await J.agent.run(X);return this.emitEvent({type:I.TaskEnd,agentId:$,result:j}),this.recordProgressStep($,`Completed a delegated run (${j.iterations} iterations)`,Q?.taskId,!0),j}catch(W){let X=W instanceof Error?W:Error(String(W));if(this.emitEvent({type:I.TaskEnd,agentId:$,error:X,messages:J.agent.getMessages()}),!mK(J,X))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:X.message});throw X}finally{if(J.runningCount--,J.runningCount<=0&&this.members.get($)?.status!=="stopped")J.status="idle"}}startTeammateRun($,Z,Q){let J=`run_${String(++this.runCounter).padStart(5,"0")}`,W={id:J,agentId:$,taskId:Q?.taskId,status:"queued",message:Z,priority:Q?.priority??0,retryCount:0,maxRetries:Math.max(0,Q?.maxRetries??0),continueConversation:Q?.continueConversation,startedAt:new Date(0),leaseOwner:Q?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(J,W),this.runQueue.push(J),this.emitEvent({type:I.RunQueued,run:{...W}}),this.dispatchQueuedRuns(),{...W}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let Z=this.selectNextDispatchableQueuedRun();$=Z.nextDelayedAttemptAt;let Q=Z.index;if(Q<0){this.scheduleQueuedRunDispatch($);return}let[J]=this.runQueue.splice(Q,1),W=J?this.runs.get(J):void 0;if(!W||W.status!=="queued")continue;this.executeQueuedRun(W)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,Z=Number.NEGATIVE_INFINITY,Q,J=Date.now();for(let W=0;W<this.runQueue.length;W++){let X=this.runs.get(this.runQueue[W]);if(!X||X.status!=="queued")continue;if(X.nextAttemptAt&&X.nextAttemptAt.getTime()>J){if(!Q||X.nextAttemptAt<Q)Q=X.nextAttemptAt;continue}if(X.priority>Z)Z=X.priority,$=W}return{index:$,nextDelayedAttemptAt:Q}}scheduleQueuedRunDispatch($){if(!$)return;let Z=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},Z)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let Z of this.runs.values())if(Z.status==="running")$++;return $}async executeQueuedRun($){let Z=$.currentActivity===cK;$.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 J=Z?$P($):$.message,W=await this.routeToTeammate($.agentId,J,{taskId:$.taskId,continueConversation:$.continueConversation});if(W.finishReason==="error")throw Error(W.text||"Teammate run failed");$.status="completed",$.result=W,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:I.RunCompleted,run:{...$}})}catch(J){let W=J instanceof Error?J.message:String(J??"Unknown error");$.error=W,$.endedAt=new Date;let X=this.members.get($.agentId);if(mK(X,J))$.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 Z=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Q)=>{if(!Z&&!["running","queued"].includes(Q.status))return!1;if($?.status&&Q.status!==$.status)return!1;if($?.agentId&&Q.agentId!==$.agentId)return!1;return!0}).map((Q)=>({...Q}))}getRun($){let Z=this.runs.get($);return Z?{...Z}:void 0}async awaitRun($,Z=250){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);while(Q.status==="queued"||Q.status==="running")await uK(Z);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((Z)=>["queued","running"].includes(Z.status)))await uK($);return this.listRuns()}cancelRun($,Z){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);if(Q.status==="completed"||Q.status==="failed")return{...Q};Q.status="cancelled",Q.error=Z,Q.endedAt=new Date,Q.currentActivity="cancelled";let J=this.runQueue.indexOf($);if(J>=0)this.runQueue.splice(J,1);return this.emitEvent({type:I.RunCancelled,run:{...Q},reason:Z}),{...Q}}recoverActiveRuns($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;let J=this.members.get(Q.agentId);if(!J||J.role!=="teammate"||!J.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=cK,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);Z.push({...Q}),this.emitEvent({type:I.RunQueued,run:{...Q}})}return this.dispatchQueuedRuns(),Z}markStaleRunsInterrupted($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;Q.status="interrupted",Q.error=$,Q.endedAt=new Date,Q.currentActivity="interrupted",Z.push({...Q}),this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),Z}sendMessage($,Z,Q,J,W){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let X=this.members.get(Z);if(!X)throw Error(`Unknown recipient "${Z}"`);let j={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:Z,subject:Q,body:J,taskId:W,sentAt:new Date};if(this.mailbox.push(j),this.emitEvent({type:I.TeamMessage,message:{...j}}),X.role==="teammate"&&X.runningCount>0&&X.agent)X.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Q}". Use the team_read_mailbox tool to read it at your convenience.`;return{...j}}broadcast($,Z,Q,J){let W=[];for(let X of this.members.values()){if(X.agentId===$)continue;if(X.role==="lead")continue;W.push(this.sendMessage($,X.agentId,Z,Q,J?.taskId))}return W}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let Z={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:$.agentId,taskId:$.taskId,kind:$.kind,summary:$.summary,evidence:$.evidence,nextAction:$.nextAction};this.missionLog.push(Z);let Q=this.members.get($.agentId);if(Q)Q.lastMissionAt=Date.now(),Q.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:I.TeamMissionLog,entry:{...Z}}),{...Z}}createOutcome($){let Z={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:$.title,status:"draft",requiredSections:[...new Set($.requiredSections)],createdBy:$.createdBy,createdAt:new Date};return this.outcomes.set(Z.id,Z),this.emitEvent({type:I.OutcomeCreated,outcome:{...Z}}),{...Z}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let Z=this.outcomes.get($.outcomeId);if(!Z)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!Z.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Q={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(Q.id,Q),Z.status==="draft")Z.status="in_review";return this.emitEvent({type:I.OutcomeFragmentAttached,fragment:{...Q}}),{...Q}}reviewOutcomeFragment($){let Z=this.outcomeFragments.get($.fragmentId);if(!Z)throw Error(`Fragment "${$.fragmentId}" was not found`);return Z.status=$.approved?"reviewed":"rejected",Z.reviewedBy=$.reviewedBy,Z.reviewedAt=new Date,this.emitEvent({type:I.OutcomeFragmentReviewed,fragment:{...Z}}),{...Z}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((Z)=>Z.outcomeId===$).map((Z)=>({...Z}))}finalizeOutcome($){let Z=this.outcomes.get($);if(!Z)throw Error(`Outcome "${$}" was not found`);let Q=this.listOutcomeFragments($);for(let J of Z.requiredSections)if(!Q.some((X)=>X.section===J&&X.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${J}" is missing a reviewed fragment.`);return Z.status="finalized",Z.finalizedAt=new Date,this.emitEvent({type:I.OutcomeFinalized,outcome:{...Z}}),{...Z}}cleanup(){for(let $ of this.members.values())if($.role==="teammate"&&$.runningCount>0)throw Error(`Cannot cleanup team while teammate "${$.agentId}" is still running`);if(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let $ of this.members.values())if($.role==="teammate")try{$.agent?.abort()}catch(Z){if(!i3(Z))throw Z}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[$,Z]of this.members.entries())if(Z.role==="teammate")this.members.delete($)}requireTask($){let Z=this.tasks.get($);if(!Z)throw Error(`Task "${$}" was not found`);return Z}assertDependenciesResolved($){let Z=this.getUnresolvedDependencies($);if(Z.length>0)throw Error(`Task "${$.id}" is blocked by "${Z[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((Z)=>{let Q=this.tasks.get(Z);return!Q||Q.status!=="completed"})}trackMeaningfulEvent($,Z){if(this.recordRunActivityFromAgentEvent($,Z),Z.type==="iteration_end"&&Z.hadToolCalls){this.recordProgressStep($,`Completed iteration ${Z.iteration} with ${Z.toolCallCount} tool call(s)`);return}if(Z.type==="content_end"&&Z.contentType==="tool"&&!Z.error){this.recordProgressStep($,`Finished tool "${Z.toolName??"unknown"}"`);return}if(Z.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${Z.iterations} iterations)`});return}if(Z.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:Z.error.message})}recordRunActivityFromAgentEvent($,Z){let Q;switch(Z.type){case"iteration_start":Q=`iteration_${Z.iteration}_started`;break;case"content_start":if(Z.contentType==="tool")Q=`running_tool_${Z.toolName??"unknown"}`;break;case"content_end":if(Z.contentType==="tool")Q=Z.error?this.formatProgressErrorActivity(`tool_${Z.toolName??"unknown"}_error`,Z.error):`finished_tool_${Z.toolName??"unknown"}`;break;case"done":Q="finalizing_response";break;case"error":Q=this.formatProgressErrorActivity("run_error",Z.error.message);break;default:break}if(!Q)return;for(let J of this.runs.values()){if(J.agentId!==$||J.status!=="running")continue;this.recordRunProgress(J,Q)}}recordRunProgress($,Z){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=Z,$.currentActivity=Z,this.emitEvent({type:I.RunProgress,run:{...$},message:Z})}formatProgressErrorActivity($,Z){let Q=Z.replace(/\s+/g," ").trim();if(Q.length===0)return $;let J=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${J}`}recordProgressStep($,Z,Q,J=!1){this.missionStepCounter++;let W=this.members.get($);if(!W)return;let X=this.missionStepCounter-W.lastMissionStep,j=Date.now()-W.lastMissionAt;if(!J&&X<this.missionLogIntervalSteps&&j<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Q,kind:"progress",summary:Z})}buildMailboxNotification($){if($.length===0)return"";let Z=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Q of $)Z.push(`--- Message from ${Q.fromAgentId} | subject: ${Q.subject} ---`),Z.push(Q.body);return Z.push("---"),Z.join(`
|
|
496
|
+
`)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function uK($){return new Promise((Z)=>setTimeout(Z,$))}function F8($,Z){let Q=0;for(let J of $){if(!J.startsWith(Z))continue;let W=Number.parseInt(J.slice(Z.length),10);if(Number.isFinite(W))Q=Math.max(Q,W)}return Q}function n3($,Z){switch(Z.type){case"run_queued":case"run_started":$.activeTeamRunIds.add(Z.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let Q;if(Z.type==="run_failed")Q=Z.run.error;else if(Z.type==="run_cancelled"||Z.type==="run_interrupted")Q=Z.run.error??Z.reason;$.activeTeamRunIds.delete(Z.run.id),$.pendingTeamRunUpdates.push({runId:Z.run.id,agentId:Z.run.agentId,taskId:Z.run.taskId,status:Z.type.replace("run_",""),error:Q,iterations:Z.run.result?.iterations}),A9($);break}default:break}}async function a3($,Z,Q){switch(Z.type){case"run_progress":await Q("onTeamTaskProgress",$,Z.run.agentId,Z.message,{kind:Z.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(Z.event.type==="content_start"&&Z.event.contentType==="text"&&typeof Z.event.text==="string"){let J=Z.event.text.replace(/\s+/g," ").trim().slice(0,120);if(J)await Q("onTeamTaskProgress",$,Z.agentId,J,{kind:"text"})}break;case"task_start":await Q("onTeamTaskStart",$,Z.agentId,Z.message);break;case"task_end":{if(Z.error)await Q("onTeamTaskEnd",$,Z.agentId,"failed",`[error] ${Z.error.message}`,void 0,Z.messages);else if(Z.result?.finishReason==="aborted")await Q("onTeamTaskEnd",$,Z.agentId,"cancelled","[done] aborted",Z.result,Z.result.messages);else await Q("onTeamTaskEnd",$,Z.agentId,"completed",`[done] ${Z.result?.finishReason??"completed"}`,Z.result,Z.result?.messages);break}default:break}}function o3($,Z,Q,J){if(!$.runtime.teamRuntime)return;let W=$.runtime.teamRuntime.getTeamName();J({type:"team_progress",payload:{sessionId:Z,teamName:W,lifecycle:L9({teamName:W,sessionId:Z,event:Q}),summary:_9(W,$.runtime.teamRuntime.exportState())}})}function l6($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function s3($,Z){if($.aborting)return!1;if(!(Z==="completed"||Z==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&l6($)}function A9($){let Z=$.teamRunWaiters.splice(0);for(let Q of Z)Q()}async function t3($){while(!0){if($.aborting)return[];if($.pendingTeamRunUpdates.length>0){let Z=[...$.pendingTeamRunUpdates];return $.pendingTeamRunUpdates.length=0,Z}if($.activeTeamRunIds.size===0)return[];await new Promise((Z)=>{$.teamRunWaiters.push(Z)})}}function e3($,Z){let Q=Z.map((X)=>{let j=[`- ${X.runId} (${X.agentId}) -> ${X.status}`];if(X.taskId)j.push(` task=${X.taskId}`);if(typeof X.iterations==="number")j.push(` iterations=${X.iterations}`);if(X.error)j.push(` error=${X.error}`);return j.join("")}),J=$.activeTeamRunIds.size,W=J>0?`There are still ${J} 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 i6(`System-delivered teammate async run updates:
|
|
497
497
|
${Q.join(`
|
|
498
498
|
`)}
|
|
499
499
|
|
|
500
|
-
${W}`,$.config.mode)}function
|
|
501
|
-
`,"utf8"),
|
|
500
|
+
${W}`,$.config.mode)}function i6($,Z){return ZP($,Z==="plan"?"plan":Z==="yolo"?"yolo":"act")}var $J=4;class k1{adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor($,Z={}){this.adapter=$;this.manifestStore=new m3($,Z.messagesArtifactUploader,Z.logger),this.teamChildren=new G9($,this.manifestStore,(Q,J,W)=>this.toPersistedMessages(Q,J,W),k1.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,Z,Q){if(!$)return;return Z?$9(Z.messages,Z,Q):e5($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,Z){this.manifestStore.writeSessionManifest($,Z)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let Z=$.startedAt??J0(),Q=$.sessionId.trim(),J=Q.length>0?Q:`${Date.now()}_${JP(5)}`,W=this.manifestStore.artifacts.sessionMessagesPath(J),X=this.manifestStore.artifacts.sessionCompactionPath(J),j=this.manifestStore.artifacts.sessionManifestPath(J),Y=S6({metadata:$.metadata,prompt:$.prompt}),V={version:1,session_id:J,source:$.source,pid:$.pid,started_at:Z,status:"running",interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt?.trim()||void 0,metadata:Y,messages_path:W};return await this.adapter.upsertSession({sessionId:J,source:$.source,pid:$.pid,startedAt:Z,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:null,parentAgentId:null,agentId:null,conversationId:null,isSubagent:!1,prompt:V.prompt??null,metadata:K$(V.metadata),hookPath:"",messagesPath:W,updatedAt:J0()}),this.manifestStore.initializeMessagesFile(J,W,Z),this.manifestStore.writeSessionManifest(j,V),{manifestPath:j,messagesPath:W,compactionPath:X,manifest:V}}async updateSessionStatus($,Z,Q){let J;if((await AH(()=>this.adapter.getSession($),async(X)=>{return J=F0(Z)?void 0:J0(),this.adapter.updateSession({sessionId:$,status:Z,endedAt:J??null,exitCode:F0(Z)?null:typeof Q==="number"?Q:null,expectedStatusLock:X.statusLock})},$J)).updated){if(Z==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:J}}return{updated:!1}}async updateSession($){for(let Z=0;Z<$J;Z++){let Q=await this.adapter.getSession($.sessionId);if(!Q)return{updated:!1};let J=Q.metadata??void 0,W=$.metadata!==void 0?K$($.metadata)??{}:K$(J)??{},X=Q2(typeof J?.title==="string"?J.title:void 0),j=$.title!==void 0?Q2($.title):X??_3($.prompt);if(j)W.title=j;else delete W.title;let Y=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:Y?Object.keys(W).length>0?W:null:void 0,title:j,expectedStatusLock:Q.statusLock})).updated)continue;let{path:B,manifest:H}=this.manifestStore.readManifestFile($.sessionId);if(H){if($.prompt!==void 0)H.prompt=$.prompt??void 0;let K=$.metadata!==void 0?K$($.metadata)??{}:K$(H.metadata)??{};if(j)K.title=j;H.metadata=Object.keys(K).length>0?K:void 0,this.manifestStore.writeSessionManifest(B,H)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,Z){return this.teamChildren.appendSubagentHookAudit(Z),Promise.resolve()}persistSessionMessages($,Z,Q){let J=e5(Z);return this.manifestStore.persistSessionMessages($,J,Q)}async readSessionCompactionState($){return await this.manifestStore.readSessionCompactionState($)}async persistSessionCompactionState($,Z){await this.manifestStore.persistSessionCompactionState($,Z)}async deleteSessionCompactionState($){await this.manifestStore.deleteSessionCompactionState($)}applySubagentStatus($,Z){return this.teamChildren.applySubagentStatus($,Z)}applySubagentStatusBySessionId($,Z){return this.teamChildren.applySubagentStatusBySessionId($,Z)}applyStatusToRunningChildSessions($,Z){return this.teamChildren.applyStatusToRunningChildSessions($,Z)}onTeamTaskStart($,Z,Q){return this.teamChildren.onTeamTaskStart($,Z,Q)}onTeamTaskEnd($,Z,Q,J,W,X){return this.teamChildren.onTeamTaskEnd($,Z,Q,J,W,X)}onTeamTaskProgress($,Z,Q,J){return this.teamChildren.onTeamTaskProgress($,Z,Q,J)}handleSubAgentStart($,Z){return this.teamChildren.handleSubAgentStart($,Z)}handleSubAgentEnd($,Z){return this.teamChildren.handleSubAgentEnd($,Z)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(Z){return typeof Z==="object"&&Z!==null&&"code"in Z&&Z.code==="EPERM"}}async reconcileDeadRunningSession($){if(F0($.status)===!1||this.isPidAlive($.pid))return $;let Z=J0(),Q=k1.STALE_REASON;for(let J=0;J<$J;J++){let W=await this.adapter.getSession($.sessionId);if(!W)return;if(F0(W.status)===!1)return W;let X={...W.metadata??{},terminal_marker:Q,terminal_marker_at:Z,terminal_marker_pid:W.pid,terminal_marker_source:k1.STALE_SOURCE},j=await this.adapter.updateSession({sessionId:W.sessionId,status:"failed",endedAt:Z,exitCode:1,metadata:X,expectedStatusLock:W.statusLock});if(!j.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(W.sessionId,"failed");let Y=LH(W,{status:"failed",endedAt:Z,exitCode:1,metadata:X}),{path:V}=this.manifestStore.readManifestFile(W.sessionId);return this.manifestStore.writeSessionManifest(V,Y),this.manifestStore.appendStaleSessionHookLog(Z,W.sessionId,W.pid,Q,k1.STALE_SOURCE),{...W,status:"failed",endedAt:Z,exitCode:1,metadata:X,statusLock:j.statusLock,updatedAt:Z}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let Z=Math.max(1,Math.floor($)),Q=Math.min(Z*5,2000);await this.reconcileDeadSessions(Q);let J=(await this.adapter.listSessions({limit:Q})).slice(0,Z),W=await Promise.all(J.map((X)=>this.manifestStore.readSessionManifestTitle(X.sessionId)));return J.map((X,j)=>{let Y=K$(X.metadata??void 0),V=Q2(W[j]),B=V?{...Y??{},title:V}:Y;return{...X,metadata:B}})}async reconcileDeadSessions($=2000){let Z=Math.max(1,Math.floor($)),Q=(await Promise.all(["idle","running","pending"].map((W)=>this.adapter.listSessions({limit:Z,status:W})))).flat(),J=0;for(let W of Q){let X=await this.reconcileDeadRunningSession(W);if(X&&X.status!==W.status)J++}return J}async deleteSession($){let Z=$.trim();if(!Z)throw Error("session id is required");let Q=await this.adapter.getSession(Z);if(!Q)return{deleted:!1};if(await this.adapter.deleteSession(Z,!1),!Q.isSubagent){let J=await this.adapter.listSessions({limit:2000,parentSessionId:Z});await this.adapter.deleteSession(Z,!0),await Promise.allSettled(J.map(async(W)=>{await g3(W.cwd,W.sessionId),d6(W.messagesPath),await this.deleteSessionCompactionStateIfExists(W.sessionId),d6(this.manifestStore.artifacts.sessionManifestPath(W.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(W.sessionId)}))}if(await g3(Q.cwd,Z),d6(Q.messagesPath),await this.deleteSessionCompactionStateIfExists(Z),d6(this.manifestStore.artifacts.sessionManifestPath(Z,!1)),Q.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(Z);else{let J=new Set([this.manifestStore.artifacts.sessionArtifactsDir(Z)]);for(let W of[Q.messagesPath])if(typeof W==="string"&&W.trim().length>0)J.add(QP(W));for(let W of J)this.manifestStore.artifacts.removeDir(W)}return{deleted:!0}}async deleteSessionCompactionStateIfExists($){try{await this.manifestStore.deleteSessionCompactionState($)}catch{}}}function QJ(){return new Date().toISOString()}function lK($,Z){let Q=`${$}.tmp`;jP(Q,`${JSON.stringify(Z,null,2)}
|
|
501
|
+
`,"utf8"),XP(Q,$)}class iK{sessionsDirPath;constructor($=YP()){this.sessionsDirPath=$}ensureSessionsDir(){if(!ZJ(this.sessionsDirPath))WP(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return pK(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return pK(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!ZJ($))return{version:1,sessions:{}};try{let Z=JSON.parse(dK($,"utf8"));if(Z?.version===1&&Z.sessions)return Z}catch{}return{version:1,sessions:{}}}writeIndex($){lK(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!ZJ($))return{version:1,nextId:1,requests:[]};try{let Z=JSON.parse(dK($,"utf8"));if(Z?.version===1&&typeof Z.nextId==="number"&&Array.isArray(Z.requests))return Z}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){lK(this.spawnQueuePath(),$)}async upsertSession($){let Z=this.readIndex();Z.sessions[$.sessionId]=$,this.writeIndex(Z)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((Z)=>$.parentSessionId!==void 0?Z.parentSessionId===$.parentSessionId:!0).filter((Z)=>$.status!==void 0?Z.status===$.status:!0).sort((Z,Q)=>Q.startedAt.localeCompare(Z.startedAt)).slice(0,$.limit)}async updateSession($){let Z=this.readIndex(),Q=Z.sessions[$.sessionId];if(!Q)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&Q.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:Q.statusLock};let J=$.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:J,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:Q.isSubagent,updatedAt:QJ()};if($.setRunning)W.status="running",W.endedAt=null,W.exitCode=null;return Z.sessions[$.sessionId]=W,this.writeIndex(Z),{updated:!0,statusLock:W.statusLock}}async deleteSession($,Z){let Q=this.readIndex();if(!Q.sessions[$])return!1;if(delete Q.sessions[$],Z){for(let W of Object.values(Q.sessions))if(W.parentSessionId===$)delete Q.sessions[W.sessionId]}return this.writeIndex(Q),!0}async enqueueSpawnRequest($){let Z=this.readQueue();Z.requests.push({id:Z.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:QJ()}),Z.nextId+=1,this.writeQueue(Z)}async claimSpawnRequest($,Z){let Q=this.readQueue(),J=Q.requests.find((W)=>W.rootSessionId===$&&W.parentAgentId===Z&&!W.consumedAt);if(!J)return;return J.consumedAt=QJ(),this.writeQueue(Q),J.task}}class JJ extends k1{constructor($,Z={}){super(new iK($),Z)}ensureSessionsDir(){return super.ensureSessionsDir()}}import{existsSync as VP,mkdirSync as BP}from"node:fs";import{resolveSessionDataDir as HP}from"@cline/shared/storage";var WJ=`
|
|
502
502
|
session_id AS sessionId,
|
|
503
503
|
source,
|
|
504
504
|
pid,
|
|
@@ -525,7 +525,7 @@ ${W}`,$.config.mode)}function l6($,Z){return $P($,Z==="plan"?"plan":Z==="yolo"?"
|
|
|
525
525
|
metadata_json AS metadata,
|
|
526
526
|
hook_path AS hookPath,
|
|
527
527
|
messages_path AS messagesPath,
|
|
528
|
-
updated_at AS updatedAt`;function XJ($){$.interactive=$.interactive===1,$.enableTools=$.enableTools===1,$.enableSpawn=$.enableSpawn===1,$.enableTeams=$.enableTeams===1,$.isSubagent=$.isSubagent===1;let Z=$.metadata;if(typeof Z==="string"&&Z.trim())try{let Q=JSON.parse(Z);$.metadata=Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:null}catch{$.metadata=null}else $.metadata=null;return $}function jJ($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function
|
|
528
|
+
updated_at AS updatedAt`;function XJ($){$.interactive=$.interactive===1,$.enableTools=$.enableTools===1,$.enableSpawn=$.enableSpawn===1,$.enableTeams=$.enableTeams===1,$.isSubagent=$.isSubagent===1;let Z=$.metadata;if(typeof Z==="string"&&Z.trim())try{let Q=JSON.parse(Z);$.metadata=Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:null}catch{$.metadata=null}else $.metadata=null;return $}function jJ($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function rK($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class nK{store;sessionsDirPath;constructor($,Z=HP()){this.store=$;this.sessionsDirPath=Z}ensureSessionsDir(){if(!VP(this.sessionsDirPath))BP(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
|
|
529
529
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
530
530
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
531
531
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
@@ -541,22 +541,22 @@ ${W}`,$.config.mode)}function l6($,Z){return $P($,Z==="plan"?"plan":Z==="yolo"?"
|
|
|
541
541
|
WHERE session_id = ? AND status_lock = ?`,[J0(),$.expectedStatusLock+1,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.prompt??null,$.sessionId,$.expectedStatusLock]).changes??0)>0,statusLock:$.expectedStatusLock+1}}let Z=[],Q=[];if($.status!==void 0)Z.push("status = ?"),Q.push($.status);if($.endedAt!==void 0)Z.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)Z.push("exit_code = ?"),Q.push($.exitCode);if($.prompt!==void 0)Z.push("prompt = ?"),Q.push($.prompt??null);if($.metadata!==void 0)Z.push("metadata_json = ?"),Q.push(jJ($.metadata));if($.parentSessionId!==void 0)Z.push("parent_session_id = ?"),Q.push($.parentSessionId??null);if($.parentAgentId!==void 0)Z.push("parent_agent_id = ?"),Q.push($.parentAgentId??null);if($.agentId!==void 0)Z.push("agent_id = ?"),Q.push($.agentId??null);if($.conversationId!==void 0)Z.push("conversation_id = ?"),Q.push($.conversationId??null);if(Z.length===0){let j=await this.getSession($.sessionId);return{updated:!!j,statusLock:j?.statusLock??0}}let J=0;if($.expectedStatusLock!==void 0)J=$.expectedStatusLock+1,Z.push("status_lock = ?"),Q.push(J);Z.push("updated_at = ?"),Q.push(J0());let W=`UPDATE sessions SET ${Z.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)J=(await this.getSession($.sessionId))?.statusLock??0;return{updated:!0,statusLock:J}}async deleteSession($,Z){let Q=this.store.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(Z)this.store.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}async enqueueSpawnRequest($){this.store.run(`INSERT INTO subagent_spawn_queue (root_session_id, parent_agent_id, task, system_prompt, created_at, consumed_at)
|
|
542
542
|
VALUES (?, ?, ?, ?, ?, NULL)`,[$.rootSessionId,$.parentAgentId,$.task??null,$.systemPrompt??null,J0()])}async claimSpawnRequest($,Z){let Q=this.store.queryOne(`SELECT id, task FROM subagent_spawn_queue
|
|
543
543
|
WHERE root_session_id = ? AND parent_agent_id = ? AND consumed_at IS NULL
|
|
544
|
-
ORDER BY id ASC LIMIT 1`,[$,Z]);if(!Q||typeof Q.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[J0(),Q.id]),Q.task??void 0}}class z$ extends k1{store;constructor($,Z={}){super(new
|
|
544
|
+
ORDER BY id ASC LIMIT 1`,[$,Z]);if(!Q||typeof Q.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[J0(),Q.id]),Q.task??void 0}}class z$ extends k1{store;constructor($,Z={}){super(new nK($,Z.sessionArtifactsDir),Z);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
|
|
545
545
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
546
546
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
547
547
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
548
548
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
549
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,J0()])}}import{readdirSync as
|
|
549
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,J0()])}}import{readdirSync as xy}from"node:fs";import{homedir as gy}from"node:os";import{isAbsolute as vy,join as oJ,resolve as sJ}from"node:path";import{captureSdkError as M$,createSessionId as my,isLikelyAuthError as cy,normalizeUserInput as uy}from"@cline/shared";import{setHomeDirIfUnset as dy}from"@cline/shared/storage";q0();import{estimateRequestInputTokens as oP}from"@cline/shared";import{createHandlerAsync as IP}from"@cline/llms";function KP($){switch($){case"agentic_summary":case"basic_compaction_projection":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!0,dropThinkingBlocks:!0};case"normal_provider_request":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!1,dropThinkingBlocks:!1}}}function aK($){return $.map((Z)=>({...Z,content:Array.isArray(Z.content)?Z.content.map((Q)=>({...Q})):Z.content,...Z.metadata?{metadata:{...Z.metadata}}:{}}))}function A1($){try{return JSON.stringify($).length}catch{return String($).length}}function O9($,Z){return $.reduce((Q,J)=>Q+Z(J),0)}function eK($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}function q9($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q.role==="user"&&!eK(Q))return Z}return-1}function GP($){for(let Z=0;Z<$.length;Z+=1){let Q=$[Z];if(Q.role==="user"&&!eK(Q))return Z}return-1}function VJ($){let Z=new Set;if(!Array.isArray($.content))return Z;for(let Q of $.content)if(Q.type==="tool_use")Z.add(Q.id);else if(Q.type==="tool_result")Z.add(Q.tool_use_id);return Z}function FP($){let Z=new Map;for(let Q=0;Q<$.length;Q+=1)for(let J of VJ($[Q])){let W=Z.get(J);if(W)W.add(Q);else Z.set(J,new Set([Q]))}return Z}function YJ($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let J of Q.content)if(J.type==="tool_result")Z.add(J.tool_use_id)}for(let Q=$.length-1;Q>=0;Q-=1){let J=$[Q];if(!Array.isArray(J.content))continue;if(J.content.some((W)=>W.type==="tool_use"&&!Z.has(W.id)))return Q}return $.length}function UP($,Z){let Q=FP($),J=new Set,W=[Z];while(W.length>0){let X=W.shift();if(X===void 0||J.has(X))continue;J.add(X);for(let j of VJ($[X]))for(let Y of Q.get(j)??[])if(!J.has(Y))W.push(Y)}return J}function DP($){return $.type==="image"||$.type==="redacted_thinking"}function _P($){return $.type==="image"}function LP($,Z,Q){if(Z.dropThinkingBlocks&&$.type==="thinking")return!0;return Z.dropUnsafeOutsideLiveTail&&!Q&&DP($)}function oK($,Z,Q,J="over_budget"){let W=[],X=[];for(let j=0;j<$.length;j+=1){let Y=$[j];if(Array.isArray(Y.content)&&Y.content.length===0){Q.push({kind:"dropped_message",path:{messageIndex:Z[j]},reason:J,originalSize:A1(Y),finalSize:0});continue}W.push(Y),X.push(Z[j])}return{messages:W,originalIndexes:X}}function AP($,Z,Q,J,W,X){return $.map((j,Y)=>{if(!Array.isArray(j.content))return j;let V=!1,B=Y===J||Y>=W,H=j.content.flatMap((K,G)=>{if(LP(K,X,B))return V=!0,Q.push({kind:"dropped_block",path:{messageIndex:Z[Y],blockIndex:G},reason:"unsafe_to_truncate",originalSize:A1(K),finalSize:0}),[];if(K.type==="tool_result"&&Array.isArray(K.content)){let F=K.content.filter((U)=>{if(X.dropUnsafeOutsideLiveTail&&!B&&_P(U))return!1;return!0});if(F.length!==K.content.length){V=!0;let U={...K,content:F};return Q.push({kind:"dropped_block",path:{messageIndex:Z[Y],blockIndex:G},reason:"unsafe_to_truncate",originalSize:A1(K),finalSize:A1(U)}),[U]}}return[K]});return V?{...j,content:H}:j})}function OP($,Z,Q){return $.map((J,W)=>{if(!Array.isArray(J.content))return J;let X=!1,j=J.content.filter((Y,V)=>{if(Y.type!=="thinking")return!0;return X=!0,Q.push({kind:"dropped_block",path:{messageIndex:Z[W],blockIndex:V},reason:"unsafe_to_truncate",originalSize:A1(Y),finalSize:0}),!1});return X?{...J,content:j}:J})}function U8($,Z){if(Z<=0)return"";if($.length<=Z)return $;if(Z<=16)return $.slice(0,Math.max(1,Z));let Q=`
|
|
550
550
|
...[truncated ${$.length-Z} chars]`,J=Math.max(1,Z-Q.length),W=`
|
|
551
|
-
...[truncated ${$.length-J} chars]`;return`${$.slice(0,J)}${W}`}function
|
|
552
|
-
...[truncated ${$.length-Z} chars]`}function
|
|
551
|
+
...[truncated ${$.length-J} chars]`;return`${$.slice(0,J)}${W}`}function sK($,Z){if(typeof $==="string")return U8($,Z);let Q=Z;return $.map((J)=>{if(Q<=0){if(J.type==="text")return{...J,text:""};if(J.type==="file")return{...J,content:""};return J}if(J.type==="text"){let W=U8(J.text,Q);return Q-=W.length,{...J,text:W}}if(J.type==="file"){let W=U8(J.content,Q);return Q-=W.length,{...J,content:W}}return J})}function qP($){if(typeof $==="string")return $.length;return $.reduce((Z,Q)=>{if(Q.type==="text")return Z+Q.text.length;if(Q.type==="file")return Z+Q.content.length;return Z},0)}function zP($,Z){if(typeof $.content==="string")return{...$,content:U8($.content,Z)};let Q=Z;return{...$,content:$.content.map((J)=>{if(Q<=0){if(J.type==="text")return{...J,text:""};if(J.type==="file")return{...J,content:""};if(J.type==="tool_result")return{...J,content:sK(J.content,0)};return J}if(J.type==="text"){let W=U8(J.text,Q);return Q-=W.length,{...J,text:W}}if(J.type==="file"){let W=U8(J.content,Q);return Q-=W.length,{...J,content:W}}if(J.type==="tool_result"){let W=sK(J.content,Q);return Q-=qP(W),{...J,content:W}}return J})}}function TP($){if(typeof $.content==="string")return $.content.length>0;return $.content.some((Z)=>Z.type==="text"||Z.type==="file"||Z.type==="tool_result")}function NP($,Z,Q){return{messages:$.filter((J,W)=>!Q.has(W)),originalIndexes:Z.filter((J,W)=>!Q.has(W))}}function fP($,Z){if(Z<0)return!1;for(let Q of $)if(Q>=Z)return!0;return!1}function tK($,Z){return Z>=0&&$.has(Z)}function r6($){let Z=[],Q=[],J=KP($.policyIntent);if($.targetTokens<=0)return{status:"failed",messages:aK($.messages),actions:Z,liveTailHandling:"preserved_out_of_band",estimatedTokens:O9($.messages,$.estimateMessageTokens),warnings:[{code:"budget_impossible",message:"Target budget must be greater than zero."}]};let W=aK($.messages),X=W.map((B,H)=>H);if(J.dropThinkingBlocks){let B=oK(OP(W,X,Z),X,Z,"unsafe_to_truncate");W=B.messages,X=B.originalIndexes}let j=J.protectLatestTypedUser?q9(W):-1,Y=J.protectLiveTailFromDrop?YJ(W):W.length;if(J.dropUnsafeOutsideLiveTail){let B=oK(AP(W,X,Z,j,Y,J),X,Z);W=B.messages,X=B.originalIndexes}let V=O9(W,$.estimateMessageTokens);if(V<=$.targetTokens)return{status:"ok",messages:W,actions:Z,liveTailHandling:Z.length>0?"included_degraded":"included_verbatim",estimatedTokens:V,warnings:Q};for(let B=W.length-1;B>=0&&V>$.targetTokens;B-=1){let H=q9(W);if(B===H)continue;if(J.protectLiveTailFromDrop&&B>=YJ(W))continue;if(!TP(W[B]))continue;let K=A1(W[B]),G=Math.max(1,K/Math.max(1,$.estimateMessageTokens(W[B]))),F=Math.max(16,Math.floor($.targetTokens*G/Math.max(1,W.length)));W[B]=zP(W[B],F),Z.push({kind:"truncated_text",path:{messageIndex:X[B]},reason:"over_budget",originalSize:K,finalSize:A1(W[B])}),V=O9(W,$.estimateMessageTokens)}for(let B=0;B<W.length&&V>$.targetTokens;){let H=GP(W),K=q9(W),G=J.protectLiveTailFromDrop?YJ(W):W.length;if(B===H||B===K){Z.push({kind:"preserved",path:{messageIndex:X[B]},reason:"protected_live_tail",originalSize:A1(W[B]),finalSize:A1(W[B])}),B+=1;continue}let F=UP(W,B);if(tK(F,H)){B+=1;continue}if(tK(F,K)){B+=1;continue}if(fP(F,G)){B+=1;continue}for(let _ of F)Z.push({kind:"dropped_message",path:{messageIndex:X[_]},reason:F.size>1||VJ(W[_]).size>0?"tool_pair_boundary":"over_budget",originalSize:A1(W[_]),finalSize:0});let U=NP(W,X,F);W=U.messages,X=U.originalIndexes,V=O9(W,$.estimateMessageTokens)}if(V>$.targetTokens)return Q.push({code:"budget_unachievable_with_protections",message:"Projection could not reach budget without violating protected content."}),{status:"failed",messages:W,actions:Z,liveTailHandling:"included_degraded",estimatedTokens:V,warnings:Q};return{status:"ok",messages:W,actions:Z,liveTailHandling:Z.length>0?"included_degraded":"included_verbatim",estimatedTokens:V,warnings:Q}}import{CHARS_PER_TOKEN as No,estimateTokens as z9}from"@cline/shared";var WG=128000,RP=0.9,F2=0.9,XG=0.7,jG=20000,$G=1024,ZG=2000,YG=2000;function QG($){return typeof $==="number"&&Number.isFinite($)&&$>0}function s6($){let Z=QG($.contextWindow)?$.contextWindow:void 0,Q=QG($.maxInputTokens)?$.maxInputTokens:void 0;if(Q!==void 0)return Z===void 0?Q:Math.min(Q,Z);return Z===void 0?void 0:Z*RP}function o6($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
|
|
552
|
+
...[truncated ${$.length-Z} chars]`}function MP($){let Z=EP($);if(typeof Z==="string")return Z;return Z.map((Q)=>{switch(Q.type){case"text":return Q.text;case"file":return`<file path="${Q.path}">
|
|
553
553
|
${Q.content}
|
|
554
554
|
</file>`;case"image":return`[image:${Q.mediaType}]`;default:return""}}).join(`
|
|
555
|
-
`)}function
|
|
556
|
-
`)}function
|
|
555
|
+
`)}function EP($){if(typeof $==="string")return o6($,ZG);return $.map((Z)=>{switch(Z.type){case"text":return{...Z,text:o6(Z.text,ZG)};case"file":return{...Z,content:o6(Z.content,YG)};case"image":return Z;default:return Z}})}function CP($){return Object.entries($).map(([Z,Q])=>`${Z}=${JSON.stringify(Q)}`).join(", ")}function VG($){if(typeof $.content==="string")return`[${$.role==="user"?"User":"Bot"}]: ${$.content}`;let Z=[];for(let Q of $.content)switch(Q.type){case"text":Z.push(`[${$.role==="user"?"User":"Bot"}]: ${Q.text}`);break;case"thinking":Z.push(`[Bot thinking]: ${o6(Q.thinking,2000)}`);break;case"redacted_thinking":Z.push("[Bot thinking]: [redacted]");break;case"tool_use":Z.push(`[Bot tool calls]: ${Q.name}(${CP(Q.input)})`);break;case"tool_result":Z.push(`[Tool result]: ${MP(Q.content)}`);break;case"file":Z.push(`[${$.role==="user"?"User":"Bot"} file ${Q.path}]: ${o6(Q.content,YG)}`);break;case"image":Z.push(`[${$.role==="user"?"User":"Bot"} image]: ${Q.mediaType}`);break}return Z.join(`
|
|
556
|
+
`)}function BG($){return $.map(VG).join(`
|
|
557
557
|
|
|
558
|
-
`).trim()}function
|
|
559
|
-
`);try{let W=JSON.parse(Z);if(W&&typeof W.result==="string")Z=W.result}catch{}let{POSITIVE_INFINITY:Q,NEGATIVE_INFINITY:J}=Number;for(let W of Z.matchAll(/(?:^|\n|\\n)[-+](\d+): /g)){let X=Number(W[1]);if(!Number.isFinite(X))continue;Q=Math.min(Q,X),J=Math.max(J,X)}return Q<=J?{start:Q,end:J}:void 0}function FJ($){let Z=[],Q=[],J=[],W=new Map;for(let X of $){if(!Array.isArray(X.content))continue;for(let j of X.content){if(j.type==="tool_use"){let Y=j.input??{};if(j.name==="read_files"){if(Array.isArray(Y.files)){for(let V of Y.files)if(V&&typeof V==="object"){let B=
|
|
558
|
+
`).trim()}function HG(){let $=new WeakMap;return(Z)=>{let Q=Z,J=$.get(Q);if(typeof J==="number")return J;let W;try{W=JSON.stringify(Z)}catch{W=VG(Z)}let X=z9(W.length);return $.set(Q,X),X}}function BJ($){return $.metadata?.kind==="compaction_summary"}function HJ($){if(!BJ($))return;let Z=$.metadata;if(!Z)return;let Q=Z.details;return{kind:"compaction_summary",displayRole:"system",userRunSpan:typeof Z.userRunSpan==="number"&&Number.isInteger(Z.userRunSpan)&&Z.userRunSpan>=0?Z.userRunSpan:1,summary:String(Z.summary??""),details:{readFiles:Array.isArray(Q?.readFiles)?Q.readFiles.filter((J)=>typeof J==="string").map((J)=>J.trim()).filter((J)=>J.length>0):[],modifiedFiles:Array.isArray(Q?.modifiedFiles)?Q.modifiedFiles.filter((J)=>typeof J==="string").map((J)=>J.trim()).filter((J)=>J.length>0):[]},tokensBefore:Number(Z.tokensBefore??0),generatedAt:Number(Z.generatedAt??0)}}function wP($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}function h1($){return $.role==="user"&&!wP($)&&!BJ($)}function PP($){for(let Z=$.length-1;Z>=0;Z-=1)if(h1($[Z]))return Z;return 0}function KG($){for(let Z=$.length-1;Z>=0;Z-=1)if(BJ($[Z]))return Z;return-1}function SP($){return $.role==="assistant"||h1($)}function GG($,Z,Q){let J=0,W=$.length;for(let Y=$.length-1;Y>=0;Y-=1)if(J+=Q($[Y]),W=Y,J>=Z)break;if(W<=0)return 0;let X=PP($),j=X>0?Math.min(W,X):W;while(j>0&&!SP($[j]))j-=1;return j}function G2($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((Z)=>G2(Z));if($&&typeof $==="object"){let Z=$,Q=[];for(let J of["path","file_path","target_file","new_file_path","old_file_path"])Q.push(...G2(Z[J]));if(Array.isArray(Z.files)){for(let J of Z.files)if(J&&typeof J==="object")Q.push(...G2(J.path))}if(Array.isArray(Z.file_paths))Q.push(...G2(Z.file_paths));return Q}return[]}function n6($,Z){let Q=new Set($);for(let J of Z){let W=J.trim();if(!W)continue;Q.add(W)}return[...Q].sort((J,W)=>J.localeCompare(W))}function KJ($){let Z=[],Q=[];for(let J of $){let W=HJ(J);if(W){Z=n6(Z,W.details.readFiles),Q=n6(Q,W.details.modifiedFiles);continue}if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type==="file"){Z=n6(Z,[X.path]);continue}if(X.type!=="tool_use")continue;let j=G2(X.input);if(X.name==="read_files"){Z=n6(Z,j);continue}if(X.name==="editor"||X.name==="apply_patch")Q=n6(Q,j)}}return{readFiles:Z,modifiedFiles:Q}}var JG=100;function GJ($){return $.readFiles.length>0||$.editedFiles.length>0||$.commands.length>0}function a6($,Z){let Q=Z.trim();if(Q&&!$.includes(Q))$.push(Q)}function bP($){if($.length<=JG)return $;return`${$.slice(0,JG)}...`}function yP($){let Z=typeof $.path==="string"?$.path.trim():"";if(!Z)return;let{start_line:Q,end_line:J}=$;if(typeof Q==="number"&&typeof J==="number")return`${Z}:${Q}-${J}`;return Z}function kP($){let Z=typeof $==="string"?$:$.map((W)=>W.type==="text"?W.text:W.type==="file"?W.content:"").join(`
|
|
559
|
+
`);try{let W=JSON.parse(Z);if(W&&typeof W.result==="string")Z=W.result}catch{}let{POSITIVE_INFINITY:Q,NEGATIVE_INFINITY:J}=Number;for(let W of Z.matchAll(/(?:^|\n|\\n)[-+](\d+): /g)){let X=Number(W[1]);if(!Number.isFinite(X))continue;Q=Math.min(Q,X),J=Math.max(J,X)}return Q<=J?{start:Q,end:J}:void 0}function FJ($){let Z=[],Q=[],J=[],W=new Map;for(let X of $){if(!Array.isArray(X.content))continue;for(let j of X.content){if(j.type==="tool_use"){let Y=j.input??{};if(j.name==="read_files"){if(Array.isArray(Y.files)){for(let V of Y.files)if(V&&typeof V==="object"){let B=yP(V);if(B)a6(Z,B)}}else for(let V of G2(Y))a6(Z,V);continue}if(j.name==="editor"||j.name==="apply_patch"){let V=G2(Y)[0];if(V)W.set(j.id,V);continue}if(j.name==="run_commands"){let V=Array.isArray(Y.commands)?Y.commands:[];for(let B of V)if(typeof B==="string"&&B.trim())a6(J,bP(B.trim()))}continue}if(j.type==="tool_result"){let Y=W.get(j.tool_use_id);if(!Y)continue;let V=kP(j.content);a6(Q,V?`${Y}:${V.start}-${V.end}`:Y),W.delete(j.tool_use_id)}}}for(let X of W.values())a6(Q,X);return{readFiles:Z,editedFiles:Q,commands:J}}function FG($){return[`Files read:
|
|
560
560
|
${$.readFiles.join(`
|
|
561
561
|
`)}`,`Files edited:
|
|
562
562
|
${$.editedFiles.join(`
|
|
@@ -564,15 +564,15 @@ ${$.editedFiles.join(`
|
|
|
564
564
|
${$.commands.join(`
|
|
565
565
|
`)}`].join(`
|
|
566
566
|
|
|
567
|
-
`)}function
|
|
567
|
+
`)}function hP($){let Z=$.readFiles.length>0?$.readFiles.map((J)=>`- ${J}`).join(`
|
|
568
568
|
`):"- none",Q=$.modifiedFiles.length>0?$.modifiedFiles.map((J)=>`- ${J}`).join(`
|
|
569
569
|
`):"- none";return`## Files
|
|
570
570
|
Read:
|
|
571
571
|
${Z}
|
|
572
572
|
Modified:
|
|
573
|
-
${Q}`}function
|
|
573
|
+
${Q}`}function UG($,Z){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
|
|
574
574
|
|
|
575
|
-
${
|
|
575
|
+
${hP(Z)}`.trim()}function UJ($){let Z=[`Summarize this session for continuation. Be concise and factual.
|
|
576
576
|
|
|
577
577
|
## Goal
|
|
578
578
|
One sentence: what is being built or fixed.
|
|
@@ -594,23 +594,23 @@ Edited: ${$.fileOps.modifiedFiles.join(", ")||"none"}`];if($.previousSummary?.tr
|
|
|
594
594
|
${$.previousSummary.trim()}`);return Z.push(`Conversation:
|
|
595
595
|
${$.conversationText||"(empty)"}`),Z.join(`
|
|
596
596
|
|
|
597
|
-
`)}function
|
|
597
|
+
`)}function DG($){let Z=$.summarizer,Q=(W)=>{if(W.providerId==="openai-codex"){let{maxOutputTokens:X,...j}=W;return{...j,thinking:!1}}return{...W,maxOutputTokens:W.maxOutputTokens??$G,thinking:!1}};if(!Z)return Q($.activeProviderConfig);let J=Z.providerConfig?.providerId===Z.providerId?Z.providerConfig:void 0;return Q({...J??{},providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey??J?.apiKey,baseUrl:Z.baseUrl??J?.baseUrl,headers:Z.headers??J?.headers,modelInfo:Z.modelInfo??J?.modelInfo,knownModels:Z.knownModels??J?.knownModels,maxOutputTokens:Z.maxOutputTokens??$G})}function _G($){return{role:"user",content:[{type:"text",text:`Context summary:
|
|
598
598
|
|
|
599
|
-
${$.summary}`}],metadata:{kind:"compaction_summary",displayRole:"system",userRunSpan:$.userRunSpan,summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}var DJ=1024;function
|
|
600
|
-
`)||void 0}function
|
|
599
|
+
${$.summary}`}],metadata:{kind:"compaction_summary",displayRole:"system",userRunSpan:$.userRunSpan,summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}var DJ=1024;function xP($){let Z=s6({maxInputTokens:$.maxInputTokens??$.modelInfo?.maxInputTokens,contextWindow:$.modelInfo?.contextWindow});if(Z!==void 0)return Z;let Q=$.knownModels?.[$.modelId];return s6({maxInputTokens:Q?.maxInputTokens,contextWindow:Q?.contextWindow})}function gP($){return r6({messages:$.messages,targetTokens:Math.max(1,$.targetTokens),policyIntent:"agentic_summary",estimateMessageTokens:$.estimateMessageTokens})}async function vP($){let Z=await IP($.providerConfig),Q="";for await(let J of Z.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(J.type==="text"){Q+=J.text;continue}if(J.type==="done"&&!J.success&&J.error)throw Error(J.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Q.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Q.trim()}function mP($){try{return JSON.stringify($).length}catch{return String($).length}}async function LG($){let Z=$.context.messages;if(Z.length<2)return;let Q=GG(Z,$.preserveRecentTokens,$.estimateMessageTokens);if(Q<=0||Q>=Z.length)return;let J=Z.slice(0,Q),W=KG(J),X=W>=0?HJ(J[W])?.summary:void 0,j=W>=0?J.slice(W+1):J;if(j.length===0)return;let Y=KJ(J),V=DG({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),B=xP(V),H=$.summarizer===void 0,K=Math.max($.context.budget.request.maxInputTokens,$.context.budget.request.triggerTokens,DJ);if(B===void 0&&!H)$.logger?.log("Agentic compaction summarizer has no known input limit; using conservative summary budget",{severity:"warn",summarizerProviderId:V.providerId,summarizerModelId:V.modelId,fallbackInputLimit:DJ});let G=B??(H?K:DJ),F=z9(UJ({previousSummary:X,conversationText:"",fileOps:Y}).length),U=G-F;if(U<=0){$.logger?.debug("Skipped agentic compaction: summarizer budget exhausted",{summarizerProviderId:V.providerId,summarizerModelId:V.modelId,summarizerInputLimit:G,summaryRequestOverheadTokens:F});return}let _=gP({messages:j,targetTokens:U,estimateMessageTokens:$.estimateMessageTokens});if(_.status==="failed"){$.logger?.log("Skipped agentic compaction: summary input budget failed",{severity:"warn",budgetWarnings:_.warnings.map((C)=>C.code),summaryInputEstimatedTokens:_.estimatedTokens,targetTokens:U,summarizerProviderId:V.providerId,summarizerModelId:V.modelId});return}let L=KJ(_.messages),O=BG(_.messages),D=UJ({previousSummary:X,conversationText:O,fileOps:L});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:J.length,newMessagesToFold:j.length,preservedMessages:Z.length-Q,previousSummaryChars:X?.length??0,conversationTextChars:O.length,summaryRequestChars:D.length,summaryRequestEstimatedTokens:z9(D.length),newMessagesJsonChars:mP(j),summaryInputEstimatedTokens:_.estimatedTokens,summaryInputActions:_.actions.length,summaryInputWarnings:_.warnings.map((C)=>C.code),summaryRequestOverheadTokens:F,summarizerProviderId:V.providerId,summarizerModelId:V.modelId,summarizerInputLimit:G,maxInputTokens:$.context.budget.request.maxInputTokens,triggerTokens:$.context.budget.request.triggerTokens});let q=await vP({providerConfig:V,request:D,logger:$.logger});if(!q.trim())return;let T=UG(q,L),z=Z.reduce((C,P)=>C+$.estimateMessageTokens(P),0),A=[_G({summary:T,fileOps:L,tokensBefore:z,userRunSpan:G8(J)}),...Z.slice(Q)],f=A.reduce((C,P)=>C+$.estimateMessageTokens(P),0);$.logger?.debug("Performed agentic compaction",{messagesBefore:Z.length,messagesAfter:A.length,messagesSummarized:Q,messagesPreserved:Z.length-Q,tokensBefore:z,tokensAfter:f,maxInputTokens:$.context.budget.request.maxInputTokens});let N=_.actions.filter((C)=>C.reason==="over_budget"||C.reason==="tool_pair_boundary").length;return{messages:A,budget:{policyIntent:"agentic_summary",actionCount:N,warningCount:_.warnings.length,liveTailHandling:_.liveTailHandling}}}function AG($,Z){return $.reduce((Q,J)=>Q+Z(J),0)}function cP($){if(typeof $.content==="string"){let Q=$.content.trim();return Q?{...$,content:Q}:void 0}let Z=$.content.filter((Q)=>Q.type!=="text"||Q.text.trim());if(Z.length===0)return;return{...$,content:Z.map((Q)=>Q.type==="text"?{...Q,text:Q.text.trim()}:Q)}}function uP($,Z){return JSON.stringify($)!==JSON.stringify(Z)}var dP=3;function OG($){if($.role!=="assistant")return;if(typeof $.content==="string")return $.content.trim()||void 0;return $.content.filter((Q)=>Q.type==="text").map((Q)=>Q.text.trim()).filter(Boolean).join(`
|
|
600
|
+
`)||void 0}function qG($,Z){let Q=Z.length>0?`
|
|
601
601
|
|
|
602
602
|
Your recent responses:
|
|
603
603
|
${Z.join(`
|
|
604
604
|
---
|
|
605
605
|
`)}`:"";return{type:"text",text:`<SYSTEM_NOTICE>
|
|
606
606
|
Earlier context was compacted. Summary of your actions after the request above:
|
|
607
|
-
${GG($)}${Q}</SYSTEM_NOTICE>`}}function T9($,Z){if(typeof $.content==="string")return $.content.trim()?[{type:"text",text:$.content}]:[];if(Z)return[...$.content];return $.content.filter((Q)=>Q.type!=="file"&&Q.type!=="image")}function dP($,Z){let Q=new Map;Z.forEach((B,H)=>{if(B.id)Q.set(B.id,H)});let J=(B)=>B.id?Q.get(B.id):void 0,W=new Set;for(let B=Z.length-1;B>=0&&W.size<uP;B-=1)if(AG(Z[B]))W.add(B);let X=(B,H)=>{let K=[];for(let G=B;G<H;G+=1){if(!W.has(G))continue;let F=AG(Z[G]);if(F)K.push(F)}return K},j=-1;for(let B=$.length-1;B>=0;B-=1)if(h1($[B])){j=B;break}let Y=[],V=0;while(V<$.length){if(!h1($[V])){let K=J($[V]);Y.push({message:$[V],firstOriginalIndex:K,lastOriginalIndex:K,isTypedUser:!1}),V+=1;continue}let B=V;while(B+1<$.length&&h1($[B+1]))B+=1;let H=$[V];if(B>V){let K=[],G=0;for(let F=V;F<=B;F+=1){if(G+=q$($[F]),F>V){let U=J($[F-1]),_=J($[F]);if(U!==void 0&&_!==void 0&&_>U+1){let L=FJ(Z.slice(U+1,_)),O=X(U+1,_);if(GJ(L)||O.length>0)K.push(OG(L,O))}}K.push(...T9($[F],F===j))}H={...$[V],content:K,metadata:{...$[V].metadata,userRunSpan:G}}}else{let K=T9(H,V===j);if(Array.isArray(H.content)&&K.length!==H.content.length)H={...H,content:K}}Y.push({message:H,firstOriginalIndex:J($[V]),lastOriginalIndex:J($[B]),isTypedUser:!0}),V=B+1}for(let B=0;B<Y.length;B+=1){let H=Y[B];if(!H.isTypedUser||H.lastOriginalIndex===void 0)continue;let K=Y[B+1],G=K?K.firstOriginalIndex:Z.length;if(G===void 0||G<=H.lastOriginalIndex+1)continue;let F=FJ(Z.slice(H.lastOriginalIndex+1,G)),U=X(H.lastOriginalIndex+1,G);if(!GJ(F)&&U.length===0)continue;H.message={...H.message,content:[...T9(H.message,!0),OG(F,U)]}}return Y.map((B)=>B.message)}function qG($){if(!$.metrics)return $;let{metrics:Z,...Q}=$;return Q}function pP($){let Z=!1,Q={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,cost:0};for(let J of $){let W=J.metrics;if(!W)continue;Z=!0,Q.inputTokens+=W.inputTokens??0,Q.outputTokens+=W.outputTokens??0,Q.cacheReadTokens+=W.cacheReadTokens??0,Q.cacheWriteTokens+=W.cacheWriteTokens??0,Q.cost+=W.cost??0}return Z?Q:void 0}function lP($,Z){if(!$)return Z;if(!Z)return $;return{inputTokens:$.inputTokens+Z.inputTokens,outputTokens:$.outputTokens+Z.outputTokens,cacheReadTokens:$.cacheReadTokens+Z.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens+Z.cacheWriteTokens,cost:$.cost+Z.cost}}function iP($){let Z=$?.metadata;if(!Z||Z.kind!=="compaction")return{messagesRemoved:0,usageBefore:void 0};let Q=Z.usageBefore;return{messagesRemoved:typeof Z.messagesRemoved==="number"?Z.messagesRemoved:0,usageBefore:Q&&typeof Q==="object"?{inputTokens:Q.inputTokens??0,outputTokens:Q.outputTokens??0,cacheReadTokens:Q.cacheReadTokens??0,cacheWriteTokens:Q.cacheWriteTokens??0,cost:Q.cost??0}:void 0}}var zG="preserved";function TG($){return $.metadata?.compaction===zG}function rP($){if(TG($))return $;return{...$,metadata:{...$.metadata,compaction:zG}}}function nP($){if(typeof $.content==="string")return $.content.trim()?$:void 0;let Z=$.content.filter((Q)=>Q.type!=="thinking"&&Q.type!=="redacted_thinking");if(!Z.some((Q)=>Q.type==="text"&&Q.text.trim()))return;return{...$,content:Z}}function NG($){let Z=$.context.messages,Q=$.estimateMessageTokens;if(Z.length<2)return;let J=Math.max(1,Math.min($.context.budget.messages.targetTokens,$.context.budget.messages.triggerTokens)),W=[];for(let A=0;A<Z.length;A+=1)if(h1(Z[A]))W.push(A);let X=new Map;for(let A of W){let f=mP(Z[A]);if(f)X.set(A,f)}if(X.size===0)return;let j=W[W.length-1],Y=0;for(let[A,f]of X)Y+=Q({...f,content:T9(f,A===j)});let V=new Set;for(let A=0;A<Z.length;A+=1){if(X.has(A))continue;if(TG(Z[A]))V.add(A),Y+=Q(Z[A])}let B=new Set;{let A=Z.length,f=0;for(let N=Z.length-1;N>j;N-=1){if(V.has(N))break;let C=Q(Z[N]);if(Y+f+C>J)break;f+=C,A=N}while(A<Z.length&&Z[A].role!=="assistant")A+=1;for(let N=A;N<Z.length;N+=1)B.add(N),Y+=Q(Z[N])}let H=new Map;for(let A=W.length-2;A>=0;A-=1){let f=W[A]+1,N=W[A+1];for(let C=N-1;C>=f;C-=1){let P=Z[C];if(V.has(C))break;if(P.role!=="assistant")continue;if(Array.isArray(P.content)&&P.content.some((g)=>g.type==="tool_use"))continue;let n=nP(P);if(n){let g=Q(n);if(Y+g<=J)H.set(C,n),Y+=g}break}}let K=[];for(let A=0;A<Z.length;A+=1){let f=X.get(A);if(f){K.push(f);continue}if(V.has(A)||B.has(A)){K.push(Z[A]);continue}let N=H.get(A);if(N)K.push(N)}let G=LG(Z,$.estimateMessageTokens),F=Math.min(Math.max(J,Y),Math.max(1,$.context.budget.messages.triggerTokens)),U=i6({messages:K,targetTokens:F,policyIntent:"basic_compaction_projection",estimateMessageTokens:$.estimateMessageTokens});if(U.status==="failed")$.logger?.debug("Basic compaction returned best-effort projection",{budgetWarnings:U.warnings.map((A)=>A.code),projectedTokens:U.estimatedTokens,targetTokens:J,maxInputTokens:$.context.budget.request.maxInputTokens});let _=dP(U.messages,Z);if(!cP(Z,_))return;let L=iP(_[0]),O=lP(L.usageBefore,pP(Z)),D={kind:"compaction",reason:$.context.mode==="manual"?"manual_compaction":"auto_compaction",displayRole:"system",messagesRemoved:L.messagesRemoved+(Z.length-_.length),...O?{usageBefore:O}:{}},q=_.map((A,f)=>{if(f===0&&h1(A))return qG({...A,metadata:{...A.metadata,...D,userRunSpan:q$(A)}});return qG(h1(A)?A:rP(A))}),T=LG(q,$.estimateMessageTokens),z=U.actions.filter((A)=>A.reason==="over_budget"||A.reason==="tool_pair_boundary").length;return $.logger?.debug("Performed basic compaction",{messagesBefore:Z.length,messagesAfter:q.length,messagesRemoved:Z.length-q.length,tokensBefore:G,tokensAfter:T,budgetStatus:U.status,budgetActions:z,budgetWarnings:U.warnings.map((A)=>A.code),targetTokens:J,maxInputTokens:$.context.budget.request.maxInputTokens}),{messages:q,budget:{policyIntent:"basic_compaction_projection",actionCount:z,warningCount:U.warnings.length,liveTailHandling:U.liveTailHandling}}}var oP=0.5;function sP($,Z){if(Z.aborted)return!0;return $ instanceof Error&&($.name==="AbortError"||$.name==="AgentRuntimeAbortError")}function tP($){return $ instanceof Error?{errorName:$.name,errorMessage:$.message}:{errorMessage:String($)}}function MG($){try{return JSON.stringify($).length}catch{return String($).length}}function eP($){let Z=0,Q=0,J=0;for(let W of $){if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type!=="tool_result")continue;let j=MG(X.content);Z+=1,Q+=j,J=Math.max(J,j)}}return{toolResultCount:Z,toolResultSerializedChars:Q,maxToolResultSerializedChars:J}}var fG={basic:({context:$,estimateMessageTokens:Z,logger:Q})=>NG({context:$,estimateMessageTokens:Z,logger:Q}),agentic:({context:$,providerConfig:Z,compaction:Q,estimateMessageTokens:J,logger:W})=>_G({context:$,providerConfig:Z,summarizer:Q?.summarizer,preserveRecentTokens:Math.min(Q?.preserveRecentTokens??XG,$.budget.messages.targetTokens),estimateMessageTokens:J,logger:W})};function $S($){let Z=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,Z));return Math.max(1,Math.floor(Math.min($.messageTriggerTokens,$.messageInputTokens*Q)))}function ZS($){let Z=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*oP):Math.floor($.triggerTokens*WG),Q=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(Z,$.maxInputTokens,Q))}function RG($,Z){return Math.max(1,Math.floor($-Z))}function QS($){let Z=0,Q=!1;for(let J of $)if(J.role==="user")Q=!0;else if(J.role==="assistant"&&Q)Z+=1,Q=!1;return Z}function _J($,Z={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let J=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},W=BG(),X=Q?.strategy??"agentic",j=fG[X],Y=Z.mode??"auto",V=Q?.compact?"custom":X;return async(B)=>{let H=B.apiMessages.reduce((p,G0)=>p+W(G0),0),K=aP({systemPrompt:B.systemPrompt,messages:B.apiMessages,tools:B.tools}),G=B.messages.reduce((p,G0)=>p+W(G0),0),F=Math.max(0,K-H),U=o6({maxInputTokens:B.model.info?.maxInputTokens,contextWindow:B.model.info?.contextWindow})??JG,_=U*F2,L=RG(_,F),O=K>=_;if($.logger?.debug("Context compaction diagnostics",{mode:Y,strategy:X,iteration:B.iteration,providerId:$.providerId,modelId:$.modelId,requestInputTokens:K,apiMessageTokens:H,messageInputTokens:G,requestOverheadTokens:F,maxInputTokens:U,requestTriggerTokens:_,messageTriggerTokens:L,thresholdRatio:F2,shouldCompact:O,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:MG(B.apiMessages),...eP(B.apiMessages)}),Y==="auto"&&!O)return;let D,q;if(Y==="auto")D=ZS({maxInputTokens:U,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:_,messagePairCount:QS(B.messages)}),q=RG(D,F);else q=$S({messageInputTokens:G,messageTriggerTokens:L,manualTargetRatio:Z.manualTargetRatio}),D=F+q;let T={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId,iteration:B.iteration,messages:B.messages,model:B.model,mode:Y,budget:{request:{inputTokens:K,maxInputTokens:U,triggerTokens:_,targetTokens:D,overheadTokens:F,thresholdRatio:F2,utilizationRatio:U>0?K/U:0},messages:{inputTokens:G,triggerTokens:L,targetTokens:q}}},z=Y==="manual"?"manual_compaction":"auto_compaction";B.emitStatusNotice?.(Y==="manual"?"compacting":"auto-compacting",{kind:z,reason:z,phase:"started",iteration:B.iteration,triggerTokens:_,targetTokens:D,maxInputTokens:U,messageTargetTokens:q});let A=B.messages.length,f=Date.now(),N={context:T,providerConfig:{...J,abortSignal:B.abortSignal},compaction:Q,estimateMessageTokens:W,logger:$.logger},C=V,P;if(Q?.compact)P=await Q.compact(T);else try{P=await j(N)}catch(p){if(X!=="agentic"||sP(p,B.abortSignal))throw p;$.logger?.log("Agentic compaction failed; falling back to basic compaction",{severity:"warn",...tP(p)}),C="basic",P=await fG.basic(N)}let n=Date.now()-f,g=$.sessionId??B.conversationId,w={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId??void 0};if(P?.messages){let p=P.messages.reduce((d1,p1)=>d1+W(p1),0),G0=F+p;if($.logger?.log("Context compaction completed",{severity:"info",strategy:C,maxInputTokens:U,messageInputTokens:G,apiInputTokens:H,requestInputTokens:K,requestOverheadTokens:F,afterMessageTokens:p,afterRequestTokens:G0,tokensSaved:K-G0,utilizationBefore:`${(K/U*100).toFixed(1)}%`,utilizationAfter:`${(G0/U*100).toFixed(1)}%`,thresholdTrigger:`${(F2*100).toFixed(1)}%`,messagesBefore:A,messagesAfter:P.messages.length,messagesRemoved:A-P.messages.length}),B.emitStatusNotice?.(Y==="manual"?"compacted":"auto-compacted",{kind:z,reason:z,phase:"completed",iteration:B.iteration,tokensBefore:K,tokensAfter:G0,messagesBefore:A,messagesAfter:P.messages.length,maxInputTokens:U}),dZ($.telemetry,{ulid:g,strategy:C,mode:Y,messagesBefore:A,messagesAfter:P.messages.length,messagesRemoved:A-P.messages.length,tokensBefore:K,tokensAfter:G0,tokensSaved:K-G0,triggerTokens:_,maxInputTokens:U,thresholdRatio:F2,durationMs:n,provider:$.providerId,modelId:$.modelId,...w}),P.budget&&(P.budget.actionCount>0||P.budget.warningCount>0))OX($.telemetry,{ulid:g,strategy:C,mode:Y,policyIntent:P.budget.policyIntent,actionCount:P.budget.actionCount,warningCount:P.budget.warningCount,liveTailHandling:P.budget.liveTailHandling,provider:$.providerId,modelId:$.modelId,...w}),B.emitStatusNotice?.("compaction-budget-adjusted",{kind:"compaction_budget_emergency",reason:"compaction_budget_emergency",iteration:B.iteration,policyIntent:P.budget.policyIntent,actionCount:P.budget.actionCount,warningCount:P.budget.warningCount})}else B.emitStatusNotice?.(Y==="manual"?"compaction-skipped":"auto-compaction-skipped",{kind:z,reason:z,phase:"skipped",iteration:B.iteration,maxInputTokens:U}),pZ($.telemetry,{ulid:g,strategy:C,mode:Y,reason:"no_result",tokensBefore:K,triggerTokens:_,maxInputTokens:U,thresholdRatio:F2,durationMs:n,provider:$.providerId,modelId:$.modelId,...w});return P}}function LJ($){return async(Z)=>{let Q=$.getState?.(),J=Q?B8(Q,Z.messages):void 0;if(Q&&J){let X=$.compact?await $.compact({...Z,messages:J,apiMessages:J}):void 0;if(X?.messages){let j=X.systemPrompt??Q.system_prompt,Y=V9({sourceMessages:Z.messages,compactedMessages:X.messages,conversationId:Z.conversationId,systemPrompt:j});return await $.saveState?.(Y,Z.messages),{...X,...j!==void 0?{systemPrompt:j}:{}}}return{messages:J,...X?.systemPrompt!==void 0?{systemPrompt:X.systemPrompt}:Q.system_prompt!==void 0?{systemPrompt:Q.system_prompt}:{}}}let W=$.compact?await $.compact(Z):void 0;if(W?.messages){let X=V9({sourceMessages:Z.messages,compactedMessages:W.messages,conversationId:Z.conversationId,systemPrompt:W.systemPrompt});await $.saveState?.(X,Z.messages)}return W}}q0();function P0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function M0($,Z){return{inputTokens:$.inputTokens+Math.max(0,Z.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,Z.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,Z.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,Z.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,Z.totalCost??0)}}function N9($){let Z=P0();for(let Q of $)Z=M0(Z,Q);return Z}function U8($){return typeof $==="number"&&Number.isFinite($)?$:0}function f9($){let Z=P0();for(let Q of $){let J=Q.metrics;if(!J)continue;Z=M0(Z,{inputTokens:U8(J.inputTokens),outputTokens:U8(J.outputTokens),cacheReadTokens:U8(J.cacheReadTokens),cacheWriteTokens:U8(J.cacheWriteTokens),totalCost:U8(J.cost)})}return Z}function JS($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let J=U8(Q.metrics?.inputTokens);return J>0?J:void 0}return}function WS($){if(!$||typeof $!=="object")return;let Z=$,Q=Z.skill??Z.skill_name??Z.skillName;if(typeof Q!=="string")return;let J=Q.trim();return J.length>0?J:void 0}function AJ($){if(!$||typeof $!=="object")return{};let Z=$;return{agentId:typeof Z.agentId==="string"?Z.agentId:void 0,conversationId:typeof Z.conversationId==="string"?Z.conversationId:void 0,parentAgentId:typeof Z.parentAgentId==="string"?Z.parentAgentId:void 0}}function I1($){let Z=$.agentId?.trim();if(!Z)return;let Q=$.parentAgentId?.trim()||void 0,J=$.teamRole,W="root";if(J==="teammate")W="team_teammate";else if(J==="lead")W="team_lead";else if(Q)W="subagent";return{agentId:Z,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:J,teamAgentId:$.teamAgentId?.trim()||void 0}}function XS($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function jS($){let Z=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of Z){let J=Q?.trim();if(J)return J}return $.isPrimaryAgentEvent?"root":"unknown"}function OJ($,Z,Q){let{sessionId:J,config:W,liveSession:X,emit:j}=$,Y=W.telemetry,V=X?.runtime.teamRuntime,B=Q?.isPrimaryAgentEvent??!0,H=AJ(Z),K=I1({agentId:Q?.agentId??H.agentId,conversationId:Q?.conversationId??H.conversationId,parentAgentId:Q?.parentAgentId??H.parentAgentId,createdByAgentId:Q?.createdByAgentId,teamId:Q?.teamId??V?.getTeamId(),teamName:Q?.teamName??V?.getTeamName(),teamRole:Q?.teamRole,teamAgentId:Q?.teamAgentId});if(Z.type==="content_start"&&Z.contentType==="tool"&&Z.toolName==="skills"){let G=WS(Z.input);if(G)hZ(Y,{ulid:J,skillName:G,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:W.providerId,modelId:W.modelId,...K})}if(Z.type==="content_end"&&Z.contentType==="tool"){let G=Z.toolName??"unknown",F=!Z.error;if(w8(Y,{ulid:J,tool:G,autoApproved:void 0,success:F,modelId:W.modelId,provider:W.providerId,...K}),!F&&(G==="editor"||G==="apply_patch"))IZ(Y,{ulid:J,modelId:W.modelId,provider:W.providerId,errorType:Z.error,...K})}if(Z.type==="notice"&&Z.reason==="api_error")z4(Y,{ulid:J,model:W.modelId,provider:W.providerId,errorMessage:Z.message,...K});if(Z.type==="error")z4(Y,{ulid:J,model:W.modelId,provider:W.providerId,errorMessage:Z.error?.message??"unknown error",...K});if(Z.type==="usage"&&X?.turnUsageBaseline){let G=XS(Z);if(B){X.turnPrimaryUsage=M0(X.turnPrimaryUsage??P0(),G);let U=M0(X.turnUsageBaseline,X.turnPrimaryUsage);$.usageBySession.set(J,U),C8(Y,{ulid:J,provider:W.providerId,model:W.modelId,source:"assistant",mode:W.mode,...K}),yZ(Y,{ulid:J,tokensIn:Z.inputTokens,tokensOut:Z.outputTokens,cacheWriteTokens:Z.cacheWriteTokens,cacheReadTokens:Z.cacheReadTokens,totalCost:Z.cost,model:W.modelId,...K})}else{let U=jS({isPrimaryAgentEvent:B,overrides:Q,eventMetadata:H}),_=X.turnUsageByAgent??new Map;X.turnUsageByAgent=_,_.set(U,M0(_.get(U)??P0(),G))}let F=M0(X.turnPrimaryUsage??P0(),N9(X.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(J,M0(X.turnAggregateUsageBaseline??X.turnUsageBaseline,F))}if(Z.type==="iteration_end"&&B)$.persistMessages(J,X?.agent.getMessages()??[],X?.config.systemPrompt);j({type:"agent_event",payload:{sessionId:J,event:Z,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(B?"lead":void 0):void 0}}),j({type:"chunk",payload:{sessionId:J,stream:"agent",chunk:UH(Z),ts:Date.now()}})}function x1($){return $.workspaceRoot??$.cwd}import{resolveProviderRequestHeaders as xS}from"@cline/llms";import{hasRuntimeConfigExtension as gS}from"@cline/shared";import{appendFileSync as qS,readFileSync as zS}from"node:fs";import{join as TS}from"node:path";import{augmentNodeCommandForDebug as NS}from"@cline/shared";import{ensureHookLogDir as wG}from"@cline/shared/storage";function R9($,Z){if(!Z)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:Z}}import{existsSync as YS,readdirSync as VS}from"node:fs";import{basename as BS,extname as HS,join as KS}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as EG,resolveHooksConfigSearchPaths as GS}from"@cline/shared/storage";function qJ($){return GS($)}var M9;((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"})(M9||={});var zJ={["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"},FS=new Map(Object.values(M9).map(($)=>[$.toLowerCase(),$])),US=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function TJ($){let Z=HS($).toLowerCase();if(!US.has(Z))return;let Q=BS($,Z).trim().toLowerCase();return FS.get(Q)}function D8($){let Z=[],Q=new Set,J=qJ($).filter((W)=>YS(W));for(let W of J)try{for(let X of VS(W,{withFileTypes:!0})){if(!X.isFile())continue;let j=TJ(X.name);if(!j)continue;let Y=KS(W,X.name);if(Q.has(Y))continue;Q.add(Y),Z.push({fileName:j,hookEventName:zJ[j],path:Y})}}catch{}return Z.sort((W,X)=>W.path.localeCompare(X.path))}import{spawn as DS}from"node:child_process";import{augmentNodeCommandForDebug as _S,withResolvedClineBuildEnv as LS}from"@cline/shared";function AS($){let Z=$.trim();if(!Z)return{};let J=Z.split(`
|
|
608
|
-
`).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),W=J.length>0?J[J.length-1]:Z;try{return{parsedJson:JSON.parse(W)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse subprocess stdout JSON"}}}function
|
|
609
|
-
`),J=[...$.appendMessages??[],...Z.appendMessages??[]];return{cancel:$.cancel===!0||Z.cancel===!0?!0:void 0,review:$.review===!0||Z.review===!0?!0:void 0,context:Q||void 0,overrideInput:Z.overrideInput!==void 0?Z.overrideInput:$.overrideInput,systemPrompt:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,appendMessages:J.length>0?J:void 0}}function
|
|
610
|
-
`,j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??TS(wG(),"hooks.jsonl");wG(j),qS(j,W,"utf8")};return{beforeRun:async(J)=>{let W=RJ(J,"");Q({...E0(W,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(J)=>{let W=SG(J);Q({...E0(W,Z),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:E9(W.call.input)}});return},afterTool:async(J)=>{let W=bG(J);Q({...E0(W,Z),hookName:"tool_result",iteration:W.iteration,tool_result:W.record,postToolUse:{toolName:W.record.name,parameters:E9(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:J,result:W})=>{let X=T$(J);if(W.status==="completed"){Q({...E0(X,Z),hookName:"agent_end",iteration:W.iterations,turn:{outputText:W.outputText,status:W.status},taskComplete:{taskMetadata:{}}});return}if(W.status==="aborted"||NJ(W.error?.message)){Q({...E0(X,Z),hookName:"agent_abort",reason:W.error?.message,taskCancel:{taskMetadata:{}}});return}if(W.error)Q({...E0(X,Z),hookName:"agent_error",iteration:W.iterations,error:{name:W.error.name,message:W.error.message,stack:W.error.stack}})},onEvent:async(J)=>{if(J.type!=="message-added"||J.message.role!=="user")return;let W=RJ({snapshot:J.snapshot},yG(J.message.content));Q({...E0(W,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:W.userMessage,attachments:[]}})}}}function MJ($){let Z=PS($.workspacePath);if(!Object.values(Z).some((K)=>K.length>0))return;let J=async(K,G)=>{let F=Z[G]??[];if(F.length===0)return;await D2({commands:F,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:G==="agent_resume"?{...E0(K,$),hookName:G,taskResume:{taskMetadata:{},previousState:{}}}:{...E0(K,$),hookName:G,taskStart:{taskMetadata:{}}}})},W=async(K)=>{let G=Z.prompt_submit??[];if(G.length>0)await D2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...E0(K,$),hookName:"prompt_submit",userPromptSubmit:{prompt:K.userMessage,attachments:[]}}})},X=async(K)=>{let G=Z.tool_call??[];if(G.length===0)return;return SS({commands:G,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...E0(K,$),hookName:"tool_call",iteration:K.iteration,tool_call:{id:K.call.id,name:K.call.name,input:K.call.input},preToolUse:{toolName:K.call.name,parameters:E9(K.call.input)}}})},j=async(K)=>{let G=Z.tool_result??[];if(G.length===0)return;await D2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...E0(K,$),hookName:"tool_result",iteration:K.iteration,tool_result:K.record,postToolUse:{toolName:K.record.name,parameters:E9(K.record.input),result:typeof K.record.output==="string"?K.record.output:JSON.stringify(K.record.output),success:!K.record.error,executionTimeMs:K.record.durationMs}}})},Y=async(K)=>{let G=Z.agent_end??[];if(G.length===0)return;await D2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...E0(K,$),hookName:"agent_end",iteration:K.iteration,turn:K.turn,taskComplete:{taskMetadata:{}}}})},V=async(K)=>{let G=Z.agent_error??[];if(G.length===0)return;await D2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...E0(K,$),hookName:"agent_error",iteration:K.iteration,error:{name:K.error.name,message:K.error.message,stack:K.error.stack}}})},B=async(K)=>{if(NJ(K.reason)){let F=Z.agent_abort??[];if(F.length>0)await D2({commands:F,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...E0(K,$),hookName:"agent_abort",reason:K.reason,taskCancel:{taskMetadata:{}}}})}let G=Z.session_shutdown??[];if(G.length===0)return;await D2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...E0(K,$),hookName:"session_shutdown",reason:K.reason}})},H={};if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0||(Z.prompt_submit?.length??0)>0){if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0)H.beforeRun=async(K)=>{let G=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await J(T$(K.snapshot),G);return};if((Z.prompt_submit?.length??0)>0)H.onEvent=async(K)=>{if(K.type!=="message-added"||K.message.role!=="user")return;await W(RJ({snapshot:K.snapshot},yG(K.message.content)))}}if((Z.tool_call?.length??0)>0)H.beforeTool=async(K)=>{let G=await X(SG(K));return bS(G)};if((Z.tool_result?.length??0)>0)H.afterTool=async(K)=>{await j(bG(K));return};if((Z.agent_end?.length??0)>0)H.afterRun=async({snapshot:K,result:G})=>{if(G.status!=="completed")return;await Y({...T$(K),iteration:G.iterations,turn:{outputText:G.outputText,status:G.status}})};if((Z.agent_error?.length??0)>0||(Z.agent_abort?.length??0)>0||(Z.session_shutdown?.length??0)>0){let K=H.afterRun;H.afterRun=async(G)=>{await K?.(G);let{snapshot:F,result:U}=G;if(U.status==="aborted"||NJ(U.error?.message)){await B({...T$(F),reason:U.error?.message});return}if(U.error)await V({...T$(F),iteration:U.iterations,error:U.error})}}return H}function w9($){return R9("core.hook_config_files",MJ($))}function _2($,Z){let Q=$.map((J)=>J[Z]).filter((J)=>typeof J==="function");if(Q.length===0)return;return async(J)=>{let W;for(let X of Q){let j=await X(J);if(!j||typeof j!=="object")continue;let Y=j;W={...W??{},...Y,stop:W?.stop===!0||Y.stop===!0?!0:Y.stop,options:W?.options||Y.options?{...W?.options??{},...Y.options??{}}:void 0}}return W}}function t6($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:_2(Z,"beforeRun"),afterRun:_2(Z,"afterRun"),beforeModel:_2(Z,"beforeModel"),afterModel:_2(Z,"afterModel"),beforeTool:_2(Z,"beforeTool"),afterTool:_2(Z,"afterTool"),onEvent:_2(Z,"onEvent")}}import{z as N$}from"zod";var e6=P2;var kG=N$.object({settings:P2,updatedAt:N$.string().datetime(),tokenSource:N$.enum(["manual","oauth","migration"]).default("manual")}),P9=N$.object({version:N$.literal(1),lastUsedProvider:N$.string().min(1).optional(),providers:N$.record(N$.string(),kG)});function _8(){return{version:1,providers:{}}}J1();import{upsertWorkspaceInfo as yS,WorkspaceManifestSchema as EJ}from"@cline/shared";class S9{manifest;listeners=new Set;constructor($){this.manifest=EJ.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await r5($);return this.manifest=yS(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=V$($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=EJ.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let J=await this.addWorkspacePath(Z);return this.manifest=EJ.parse({...this.manifest,currentWorkspacePath:J.rootPath}),this.emit({type:"workspace_switched",workspace:J}),J}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=V$($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}q0();import{createHash as kS}from"node:crypto";var hG=new Set,IG=new Set;function hS($){return kS("sha256").update($).digest("hex")}function IS($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function xG($){if(!$.telemetry)return;let Z=hS($.rootPath),Q=$.rootCount??1;if(!hG.has(Z))hG.add(Z),CZ($.telemetry,{root_count:Q,vcs_types:IS($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!IG.has(Z)){IG.add(Z);let J=Error($.initError.message);J.name=$.initError.errorType||"Error",wZ($.telemetry,J,{fallback_to_single_root:!0,workspace_count:Q})}}function vS($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function mS($,Z,Q){if(Z.length>0)for(let X of Z)Q?.log(X.message,{severity:"warn"});if($.length===0)return;let J=$.slice(0,3).map(vS).join("; "),W=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${J}${W}. Use --verbose for more details.`,{severity:"warn"});for(let X of $)Q?.log(`Plugin initialization failed (${X.phase}) for ${X.pluginPath}`,{severity:"warn",stack:X.stack,pluginPath:X.pluginPath,pluginName:X.pluginName})}function cS($,Z){let Q=typeof $.thinking==="boolean",J=typeof $.reasoningEffort==="string";if(!Q&&!J)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...J?{effort:$.reasoningEffort}:{}}}function gG($,Z){return gS($,Z)}function uS($,Z,Q,J,W,X){let j=J.getProviderSettings($.providerId),Y=W||j?.modelCatalog?{...W??{},...j?.modelCatalog??{}}:void 0,V=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,B=xS({providerId:$.providerId,sessionId:Z,source:Q,defaultSource:T0.CLI,client:{name:$.extensionContext?.client?.name,version:$.extensionContext?.client?.version,versionHeaderFallback:$.headers?.["X-CLIENT-VERSION"],platform:$.extensionContext?.client?.platform,platformVersion:$.extensionContext?.client?.platformVersion,isMultiRoot:$.extensionContext?.client?.isMultiRoot},coreVersion:j8,openAiCodex:{accountId:V?.accountId??j?.auth?.accountId,accessToken:V?.accessToken??$.apiKey??j?.auth?.accessToken??j?.apiKey,userAgentVersion:process.env.npm_package_version},headers:{stored:j?.headers,config:$.headers,session:V?.headers}}),H={...j??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??j?.apiKey,baseUrl:$.baseUrl??j?.baseUrl,headers:void 0,reasoning:cS($,j?.reasoning),modelCatalog:Y},K={...N1(H),...V??{}};if(B)K.headers=B;if($.knownModels)K.knownModels=$.knownModels;if($.extensionContext)K.extensionContext=$.extensionContext;let F=$.fetch??K.fetch??X;if(F)K.fetch=F;return K}async function vG($){let{input:Z,sessionId:Q,providerSettingsManager:J,defaultTelemetry:W,defaultLogger:X,defaultCapabilities:j,defaultToolPolicies:Y,defaultFetch:V,onPluginEvent:B,onTeamEvent:H,createSubAgentLifecycleCallbacks:K,createSpawnTool:G,localRuntime:F,readSessionMetadata:U,writeSessionMetadata:_}=$,L=x1(Z.config),{modelCatalogDefaults:O,userInstructionService:D,configExtensions:q,onTeamRestored:T,...z}=F??{},A=Object.keys(z).length>0?z:void 0,{workspaceInfo:f,workspaceMetadata:N,gitState:C,durationMs:P,vcsType:n,initError:g}=await oB(L),w=A?.extensionContext,p={...w??{},workspace:{...f,...w?.workspace??{}},session:{...w?.session??{},sessionId:Q},logger:w?.logger??A?.logger??X,telemetry:w?.telemetry??A?.telemetry??W};xG({telemetry:p.telemetry,rootPath:f.rootPath,workspaceInfo:f,rootCount:1,vcsType:n,durationMs:P,initError:g,featureFlagEnabled:!0});let G0=w9({cwd:Z.config.cwd,workspacePath:L,rootSessionId:Q,logger:A?.logger,workspaceInfo:f}),d1=FH(A?.hooks)?void 0:C9({rootSessionId:Q,workspacePath:L,workspaceInfo:f}),p1=t6([A?.hooks,d1]),Z0;if(gG(q,"plugins"))try{Z0=await s4({pluginPaths:A?.pluginPaths,workspacePath:L,cwd:Z.config.cwd,onEvent:B,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:f,session:p.session,client:p.client,user:p.user,logger:p.logger,telemetry:p.telemetry,automation:p.automation}),mS(Z0.failures,Z0.warnings,A?.logger)}catch(O0){let S$=O0 instanceof Error?O0.message:String(O0);A?.logger?.log?.(`plugin loading failed; continuing without plugins (${S$})`)}let l1=D3(G0?[G0]:void 0,D3(A?.extensions,fQ(Z0?.extensions))),V1=gG(q,"plugins")?v$(Z0?.pluginPaths??[]):void 0,g0={...Z.config,...A??{},sessionId:Q,hooks:p1,extensions:l1,extensionContext:p,telemetry:p.telemetry,logger:p.logger},i1=uS(g0,Q,Z.source,J,O,V),L0=t6([g0.hooks,g0.checkpoint?.enabled===!0?NK({cwd:g0.cwd,sessionId:Q,logger:g0.logger,createCheckpoint:g0.checkpoint?.createCheckpoint,readSessionMetadata:U,writeSessionMetadata:_}):void 0]),w0={...g0,providerConfig:i1,workspaceMetadata:N,hooks:L0},B1=Z.toolPolicies??g0.toolPolicies??Y,v=h0(j,Z.capabilities),b0=v?.requestToolApproval,y=v?.toolExecutors,Y0=K?.(w0),A0=new S9({currentWorkspacePath:f.rootPath,workspaces:{[f.rootPath]:f}});return{effectiveInput:Z,config:w0,providerConfig:i1,workspaceMetadata:N,workspaceInfo:f,gitState:C,extensions:l1,hooks:L0,toolPolicies:B1,requestToolApproval:b0,pluginSandboxShutdown:Z0?.shutdown,runtimeBuilderInput:{config:w0,hooks:L0,extensions:l1,onTeamEvent:H,createSpawnTool:G,onTeamRestored:T,onSubAgentEvent:Y0?.onSubAgentEvent,onSubAgentStart:Y0?.onSubAgentStart,onSubAgentEnd:Y0?.onSubAgentEnd,userInstructionService:D,pluginSkillDirectories:V1,configExtensions:q,toolExecutors:y,toolPolicies:B1,workspaceManager:A0,logger:w0.logger,telemetry:w0.telemetry,requestToolApproval:b0}}}import{resolveDocumentsExtensionPath as dS}from"@cline/shared/storage";q0();function mG($,Z,Q,J,W){if(Q)bZ($.telemetry,{ulid:Z,apiProvider:$.providerId,...W});else SZ($.telemetry,{ulid:Z,apiProvider:$.providerId,...W});pS($.telemetry,{workspacePath:J})}function pS($,Z){let Q=dS("Hooks"),J=D8(Z.workspacePath),W=new Map;for(let X of J){let j=X.hookEventName??"unknown",Y=W.get(j)??{global:0,workspace:0};if(X.path===Q||X.path.startsWith(`${Q}/`))Y.global+=1;else Y.workspace+=1;W.set(j,Y)}for(let[X,j]of W.entries())uZ($,X,j.global,j.workspace)}function cG($,Z){for(let Q of Z.mentions)mZ($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)gZ($,"file",Q.length);for(let Q of Z.ignoredMentions)vZ($,"file","not_found",Q)}import{chmodSync as ZF,existsSync as hJ,mkdirSync as yb,readFileSync as kb,renameSync as hb,rmSync as Ib,writeFileSync as xb}from"node:fs";import{basename as QF,dirname as IJ}from"node:path";import{resolveProviderSettingsPath as gb}from"@cline/shared/storage";import{existsSync as lS,mkdirSync as iS,readFileSync as rS,renameSync as nS,rmSync as aS,writeFileSync as oS}from"node:fs";import{mkdir as sS,readFile as tS,rename as eS,rm as $b,writeFile as Zb}from"node:fs/promises";import{dirname as wJ,join as Qb}from"node:path";import*as K0 from"@cline/llms";import{ApiFormatSchema as Jb,ModelCapabilitySchema as Wb,ProviderCapabilitySchema as Xb,ProviderClientSchema as jb,ProviderProtocolSchema as Yb}from"@cline/shared";import{z as o}from"zod";var CJ=o.number().finite().positive().optional().catch(void 0),$4=o.number().finite().nonnegative().optional().catch(void 0),Vb=o.object({id:o.string().optional(),name:o.string().optional(),maxTokens:CJ,contextWindow:CJ,maxInputTokens:CJ,capabilities:o.array(Wb).optional(),supportsVision:o.boolean().optional(),supportsAttachments:o.boolean().optional(),supportsReasoning:o.boolean().optional(),inputPrice:$4,outputPrice:$4,cacheReadsPrice:$4,cacheWritesPrice:$4,temperature:$4,apiFormat:Jb.optional()}).passthrough(),Bb=o.object({name:o.string(),baseUrl:o.string(),defaultModelId:o.string().optional(),protocol:Yb.optional(),client:jb.optional(),capabilities:o.array(Xb).optional(),modelsSourceUrl:o.string().optional()}).passthrough(),uG=o.object({provider:Bb.optional(),models:o.record(o.string(),Vb).optional()}).passthrough(),dG=o.object({version:o.literal(1),providers:o.record(o.string(),uG)}),Hb=o.object({version:o.literal(1),providers:o.record(o.string(),o.unknown())}),b9=new Set;function pG($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function f$($){return Qb(wJ($.getFilePath()),"models.json")}function y9(){return{version:1,providers:{}}}function lG($){let Z=Hb.safeParse($);if(!Z.success)return s("models.json content is not a valid models file envelope; starting from an empty registry"),y9();let Q={};for(let[J,W]of Object.entries(Z.data.providers)){let X=uG.safeParse(W);if(X.success)Q[J]=X.data;else s(`models.json: dropping invalid entry for provider=${J}`)}return{version:1,providers:Q}}function k9($){if(!lS($))return y9();try{let Z=rS($,"utf8");return lG(JSON.parse(Z))}catch{s(`models.json at ${$} exists but is unreadable or invalid JSON; treating as an empty registry`)}return y9()}async function L8($){try{let Z=await tS($,"utf8");return lG(JSON.parse(Z))}catch(Z){if(Z?.code!=="ENOENT")s(`models.json at ${$} exists but is unreadable or invalid JSON; treating as an empty registry`)}return y9()}function PJ($,Z){iS(wJ($),{recursive:!0});let Q=dG.parse(Z),J=`${$}.${process.pid}.tmp`;try{oS(J,`${JSON.stringify(Q,null,2)}
|
|
611
|
-
`,"utf8"),
|
|
612
|
-
`,"utf8"),await eS(J,$)}catch(W){throw await $b(J,{force:!0}).catch(()=>{}),W}}function iG($,Z){return{id:$,name:Z.name??$,supportsAttachments:Z.capabilities?.includes("files"),supportsVision:Z.capabilities?.includes("images"),supportsReasoning:Z.capabilities?.includes("reasoning")||Z.thinkingConfig!=null}}function rG($){if(!$||$.length===0)return;let Z=new Set;if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("tools"))Z.add("tools");return Z.size>0?[...Z]:void 0}function nG($){let Z=new Set;if(!$||$.length===0)return[...Z];if($.includes("streaming"))Z.add("streaming");if($.includes("tools"))Z.add("tools");if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("vision"))Z.add("images"),Z.add("files");return[...Z]}function Kb($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function aG($,Z){return $??Z??"openai-chat"}function oG($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function sG($,Z,Q){let J=new Set(Z?.capabilities??Q??[]);if(Z?.supportsVision!==void 0)if(Z.supportsVision)J.add("images");else J.delete("images");if(Z?.supportsAttachments!==void 0)if(Z.supportsAttachments)J.add("files");else J.delete("files");if(Z?.supportsReasoning!==void 0)if(Z.supportsReasoning)J.add("reasoning");else J.delete("reasoning");let W=Z?.apiFormat,X=Z?.inputPrice!==void 0||Z?.outputPrice!==void 0||Z?.cacheReadsPrice!==void 0||Z?.cacheWritesPrice!==void 0;return{id:$,name:Z?.name??$,...Z?.maxTokens!==void 0?{maxTokens:Z.maxTokens}:{},...Z?.contextWindow!==void 0?{contextWindow:Z.contextWindow}:{},...Z?.maxInputTokens!==void 0?{maxInputTokens:Z.maxInputTokens}:{},...J.size>0?{capabilities:[...J]}:{},...Z?.temperature!==void 0?{temperature:Z.temperature}:{},...W!==void 0?{apiFormat:W}:{},...X?{pricing:{...Z?.inputPrice!==void 0?{input:Z.inputPrice}:{},...Z?.outputPrice!==void 0?{output:Z.outputPrice}:{},...Z?.cacheReadsPrice!==void 0?{cacheRead:Z.cacheReadsPrice}:{},...Z?.cacheWritesPrice!==void 0?{cacheWrite:Z.cacheWritesPrice}:{}}}:{}}}function Gb($,Z){for(let[Q,J]of Object.entries(Z??{})){let W=J.id?.trim()||Q.trim();if(!W)continue;K0.registerModel($,W,sG(W,J))}}function Fb($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function Ub($){return Object.assign({},...K0.resolveProviderModelCatalogKeys($).map((Q)=>K0.getGeneratedModelsForProvider(Q)))}function Db($){let Z=$.provider.trim();if(!Z||K0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let J=K0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],W=Ub(Z),X=nG($.capabilities),j=X.length>0?X:void 0,Y=$.model?.trim(),V={...W,...J?.models??{}};if(Y)V[Y]=Fb(Y,V[Y],j);let B=Object.keys(V).filter(Boolean),H=Y||B[0];if(!H)return;let K=aG($.protocol,J?.provider.protocol),G=oG($.client,K,J?.provider.client);K0.registerProvider({provider:{id:Z,name:J?.provider.name??pG(Z),description:J?.provider.description,protocol:K,client:G,baseUrl:Q,modelsSourceUrl:J?.provider.modelsSourceUrl,defaultModelId:H,capabilities:rG($.capabilities)??J?.provider.capabilities,source:"file"},models:V})}function I9($){for(let Z of Object.values($.providers))Db(Z.settings)}function A8($,Z){let Q=Z.models??{};if(!Kb(Z.provider)){Gb($,Q);return}let J=nG(Z.provider.capabilities),W=Object.entries(Q).map(([B,H])=>({id:H.id?.trim()||B.trim(),model:H})).filter(({id:B})=>B.length>0),X=Z.provider.defaultModelId?.trim()||W[0]?.id||"default",j=aG(Z.provider.protocol,void 0),Y=oG(Z.provider.client,j,void 0),V=Object.fromEntries(W.map(({id:B,model:H})=>[B,{...sG(B,H,J.length>0?J:void 0),status:"active"}]));K0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||pG($),protocol:j,client:Y,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:X,capabilities:rG(Z.provider.capabilities),source:"file"},models:V})}function _b($,Z,Q){let J=Q?.models??{},W=new Set;for(let[Y,V]of Object.entries(Z?.models??{})){if(Object.hasOwn(J,Y))continue;let B=V.id?.trim()||Y.trim();if(B)W.add(B),K0.unregisterModel($,B)}if(!Q)return;let X=K0.getProviderCollectionSync($);A8($,Q);let j=K0.getProviderCollectionSync($);if(X&&j&&j!==X){let Y=Object.fromEntries(Object.entries(X.models).filter(([V])=>!W.has(V)));K0.registerProvider({...j,models:{...Y,...j.models}})}}function SJ($){let Z=f$($);if(b9.has(Z))return;let Q=k9(Z);for(let[J,W]of Object.entries(Q.providers))A8(J,W);b9.add(Z)}async function tG($){let Z=f$($);if(b9.has(Z))return;let Q=await L8(Z);for(let[J,W]of Object.entries(Q.providers))A8(J,W);b9.add(Z)}import{existsSync as Lb,readFileSync as Ab}from"node:fs";import{dirname as Ob,join as bJ}from"node:path";import*as g1 from"@cline/llms";import{ReasoningLevelSchema as qb}from"@cline/shared";import{resolveClineDataDir as zb}from"@cline/shared/storage";var x9="openai",Tb=g1.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,Nb=128000;function $F($){let Z=$?.trim();if(!Z)return;try{let Q=JSON.parse(Z);if(!Q)return;let J=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:J,accountId:Q.userInfo?.id}}catch{return}}function M($){let Z=$?.trim();return Z?Z:void 0}function fb($){return $==="credentials"?"iam":$}function eG($){if(!Lb($))return;try{let Z=Ab($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function Rb($){let Z=$.dataDir??zb(),Q=$.globalStatePath??bJ(Z,"globalState.json"),J=$.secretsPath??bJ(Z,"secrets.json"),W=eG(Q),X=eG(J);if(!W&&!X)return;return{globalState:W??{},secrets:X??{}}}function yJ($){return g1.normalizeProviderId($)}function g9($){if($===x9)return $;return g1.normalizeProviderId($)}function Mb($,Z,Q,J){let W=Q==="plan"?"planMode":"actMode",X=Z===J?M(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,Y={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`}[Z];return(Y?M(typeof $[Y]==="string"?$[Y]:void 0):void 0)??X}function Eb($,Z,Q){let J=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,W=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(M).find(Boolean),X=qb.safeParse(W),j=X.success?X.data:void 0,Y=typeof J==="number"&&Number.isInteger(J)&&J>0?J:void 0;if(!j&&Y===void 0)return;return{...j?{effort:j}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function Cb($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),J=M(Q.access_token),W=M(Q.refresh_token),X=M(Q.accountId);if(!J&&!W&&!X)return;return{...J?{apiKey:J}:{},auth:{...J?{accessToken:J}:{},...W?{refreshToken:W}:{},...X?{accountId:X}:{}}}}catch{return}}function wb($){let Z=g1.getGeneratedModelsForProvider($),J=g1.getProviderCollectionSync($)?.provider.defaultModelId;if(J&&Z[J])return J;return Object.keys(Z)[0]??void 0}function Pb($,Z,Q,J){let W=yJ($),X=M(J==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),j=X?g9(X):void 0,Y=Mb(Z,$,J,j)??wb(W),V=Eb(Z,W,J),B=typeof Z.requestTimeoutMs==="number"&&Number.isInteger(Z.requestTimeoutMs)&&Z.requestTimeoutMs>0?Z.requestTimeoutMs:void 0,H={anthropic:Q.apiKey,cline:Q.clineApiKey,openai:Q.openAiApiKey,"openai-native":Q.openAiNativeApiKey,openrouter:Q.openRouterApiKey,bedrock:Q.awsBedrockApiKey,gemini:Q.geminiApiKey,ollama:Q.ollamaApiKey,deepseek:Q.deepSeekApiKey,requesty:Q.requestyApiKey,together:Q.togetherApiKey,fireworks:Q.fireworksApiKey,qwen:Q.qwenApiKey,doubao:Q.doubaoApiKey,mistral:Q.mistralApiKey,litellm:Q.liteLlmApiKey,asksage:Q.asksageApiKey,xai:Q.xaiApiKey,moonshot:Q.moonshotApiKey,zai:Q.zaiApiKey,huggingface:Q.huggingFaceApiKey,nebius:Q.nebiusApiKey,sambanova:Q.sambanovaApiKey,cerebras:Q.cerebrasApiKey,groq:Q.groqApiKey,"huawei-cloud-maas":Q.huaweiCloudMaasApiKey,baseten:Q.basetenApiKey,"vercel-ai-gateway":Q.vercelAiGatewayApiKey,dify:Q.difyApiKey,minimax:Q.minimaxApiKey,hicap:Q.hicapApiKey,aihubmix:Q.aihubmixApiKey,nousResearch:Q.nousResearchApiKey,oca:Q.ocaApiKey},K={};if($==="openai-codex")Object.assign(K,Cb(Q));if($==="cline")try{let D=M(Q["cline:clineAccountId"]);if(D)K.auth={...K.auth??{},...$F(D)}}catch{}if($===x9&&Z.openAiHeaders)K.headers=Z.openAiHeaders;if($==="bedrock"){let D=fb(Z.awsAuthentication),q=D==="profile"||Z.awsUseProfile===!0;K.aws={accessKey:M(Q.awsAccessKey),secretKey:M(Q.awsSecretKey),sessionToken:M(Q.awsSessionToken),region:M(Z.awsRegion),authentication:D,profile:q?M(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:M(Z.awsBedrockEndpoint),customModelBaseId:M(J==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")K.gcp={projectId:M(Z.vertexProjectId),region:M(Z.vertexRegion)};if($===x9&&(Z.azureApiVersion||Z.azureIdentity!==void 0))K.azure={apiVersion:M(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let D=Z.sapAiCoreUseOrchestrationMode??!0;K.sap={clientId:M(Q.sapAiCoreClientId),clientSecret:M(Q.sapAiCoreClientSecret),tokenUrl:M(Z.sapAiCoreTokenUrl),resourceGroup:M(Z.sapAiResourceGroup),deploymentId:D?void 0:M(J==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:D}}if($==="oca"){K.oca={mode:Z.ocaMode};let D=M(Q.ocaRefreshToken);if(D)K.auth={...K.auth??{},refreshToken:D}}if($==="qwen")K.apiLine=Z.qwenApiLine;if($==="moonshot")K.apiLine=Z.moonshotApiLine;if($==="zai")K.apiLine=Z.zaiApiLine;if($==="minimax")K.apiLine=Z.minimaxApiLine;let G={anthropic:Z.anthropicBaseUrl,openai:Z.openAiBaseUrl,ollama:Z.ollamaBaseUrl,lmstudio:Z.lmStudioBaseUrl,litellm:Z.liteLlmBaseUrl,gemini:Z.geminiBaseUrl,requesty:Z.requestyBaseUrl,asksage:Z.asksageApiUrl,dify:Z.difyBaseUrl,oca:Z.ocaBaseUrl,aihubmix:Z.aihubmixBaseUrl,sapaicore:Z.sapAiCoreBaseUrl},F=M(H[$]),U=M(G[$]),_={provider:W,...F?{apiKey:F}:{},...Y?{model:Y}:{},...U?{baseUrl:U}:{},...V?{reasoning:V}:{},...B?{timeout:B}:{},...K},L=e6.safeParse(_);if(!L.success)return;return Object.keys(_).filter((D)=>D!=="provider").length>0?L.data:void 0}function Z4($){return typeof $==="number"&&Number.isFinite($)&&$>0?$:void 0}function Sb($,Z,Q){if($!==Tb)return;if(!Z.baseUrl||!Z.model)return;let J=Z4(Q?.contextWindow)??Nb,W=Z4(Q?.maxTokens),X=Z4(Q?.inputPrice),j=Z4(Q?.outputPrice),Y=Z4(Q?.temperature),V=["streaming","tools"];if(Q?.supportsImages!==!1)V.push("images");if(Q?.supportsPromptCache===!0)V.push("prompt-cache");return{provider:{name:"OpenAI Compatible",baseUrl:Z.baseUrl,defaultModelId:Z.model},models:{[Z.model]:{id:Z.model,name:Z.model,contextWindow:J,maxInputTokens:J,capabilities:V,...W!==void 0?{maxTokens:W}:{},...X!==void 0?{inputPrice:X}:{},...j!==void 0?{outputPrice:j}:{},...Y!==void 0?{temperature:Y}:{}}}}}function bb($,Z){let Q=new Set;for(let W of[$.actModeApiProvider,$.planModeApiProvider]){let X=M(W);if(X)Q.add(g9(X))}if(M(Z.apiKey))Q.add("anthropic");if(M(Z.openRouterApiKey))Q.add("openrouter");if(M(Z.openAiApiKey))Q.add(x9);if(M(Z.openAiNativeApiKey))Q.add("openai-native");if(M(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(M(Z.geminiApiKey))Q.add("gemini");if(M(Z.ollamaApiKey))Q.add("ollama");if(M(Z.deepSeekApiKey))Q.add("deepseek");if(M(Z.requestyApiKey))Q.add("requesty");if(M(Z.togetherApiKey))Q.add("together");if(M(Z.fireworksApiKey))Q.add("fireworks");if(M(Z.qwenApiKey))Q.add("qwen");if(M(Z.doubaoApiKey))Q.add("doubao");if(M(Z.mistralApiKey))Q.add("mistral");if(M(Z.liteLlmApiKey))Q.add("litellm");if(M(Z.asksageApiKey))Q.add("asksage");if(M(Z.xaiApiKey))Q.add("xai");if(M(Z.moonshotApiKey))Q.add("moonshot");if(M(Z.zaiApiKey))Q.add("zai");if(M(Z.huggingFaceApiKey))Q.add("huggingface");if(M(Z.nebiusApiKey))Q.add("nebius");if(M(Z.sambanovaApiKey))Q.add("sambanova");if(M(Z.cerebrasApiKey))Q.add("cerebras");if(M(Z.groqApiKey))Q.add("groq");if(M(Z.huaweiCloudMaasApiKey))Q.add("huawei-cloud-maas");if(M(Z.basetenApiKey))Q.add("baseten");if(M(Z.vercelAiGatewayApiKey))Q.add("vercel-ai-gateway");if(M(Z.difyApiKey))Q.add("dify");if(M(Z.minimaxApiKey))Q.add("minimax");if(M(Z.hicapApiKey))Q.add("hicap");if(M(Z.aihubmixApiKey))Q.add("aihubmix");if(M(Z.nousResearchApiKey))Q.add("nousResearch");if(M(Z.awsAccessKey)||M(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||M($.awsProfile))Q.add("bedrock");if(M($.vertexProjectId)||M($.vertexRegion))Q.add("vertex");if(M(Z.clineApiKey))Q.add("cline");let J=$F(M(Z["cline:clineAccountId"]));if(J?.accessToken||J?.refreshToken||J?.accountId)Q.add("cline");if(M(Z.ocaApiKey))Q.add("oca");if(M(Z.sapAiCoreClientId)||M(Z.sapAiCoreClientSecret)||M($.sapAiCoreTokenUrl)||M($.sapAiCoreBaseUrl)||M($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function kJ($){let Z=$.providerSettingsManager.read(),Q=Rb($);if(!Q)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let{globalState:J,secrets:W}=Q,X=J.mode==="plan"?"plan":"act",j=X==="plan"?"act":"plan",Y=M(X==="plan"?J.planModeApiProvider:J.actModeApiProvider),V=Y?g9(Y):void 0,B=M(X==="plan"?J.actModeApiProvider:J.planModeApiProvider),H=B?g9(B):void 0,K=bb(J,W),G=_8();G.providers={...Z.providers},G.lastUsedProvider=Z.lastUsedProvider;let F=new Date().toISOString(),U=0,_=bJ(Ob($.providerSettingsManager.getFilePath()),"models.json"),L=k9(_),O=0;for(let T of K){let z=yJ(T);if(G.providers[z])continue;let A=T!==V&&T===H?j:X,f=Pb(T,J,W,A);if(!f)continue;G.providers[z]={settings:f,updatedAt:F,tokenSource:"migration"},U+=1;let N=Sb(z,f,A==="plan"?J.planModeOpenAiModelInfo:J.actModeOpenAiModelInfo);if(N&&!L.providers[z])L.providers[z]=N,O+=1}if(U===0&&O===0)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let D=M(X==="plan"?J.planModeApiProvider:J.actModeApiProvider),q=D?yJ(D):void 0;if(G.lastUsedProvider=Z.lastUsedProvider??(q&&G.providers[q]?q:Object.keys(G.providers)[0]),$.providerSettingsManager.write(G),O>0)PJ(_,L);return{migrated:U>0||O>0,providerCount:Object.keys(G.providers).length,lastUsedProvider:G.lastUsedProvider}}function vb(){return new Date().toISOString()}var mb="cline",cb="cline-pass";function ub($){if(QF($)!=="providers.json")return;let Z=IJ($);if(QF(Z)!=="settings")return;return IJ(Z)}class R${filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??gb(),this.dataDir=$.dataDir??ub(this.filePath),this.dataDir||!$.filePath)kJ({providerSettingsManager:this,dataDir:this.dataDir});if(SJ(this),I9(this.read()),hJ(this.filePath))try{ZF(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!hJ(this.filePath))return _8();try{let $=kb(this.filePath,"utf8"),Z=JSON.parse($),Q=P9.safeParse(Z);if(Q.success){I9(Q.data);let J=Q.data.providers.cline?.settings?.auth;return s(`providers.read providers=[${Object.keys(Q.data.providers).join(",")}] lastUsed=${Q.data.lastUsedProvider??"none"} clineAuthPresent=${!!J?.accessToken} clineAccessTokenHash=${y0(J?.accessToken)} clineRefreshTokenHash=${y0(J?.refreshToken)}`),Q.data}}catch{}return _8()}write($){let Z=P9.parse($),Q=IJ(this.filePath);if(!hJ(Q))yb(Q,{recursive:!0,mode:448});let J=`${this.filePath}.${process.pid}.tmp`;try{xb(J,`${JSON.stringify(Z,null,2)}
|
|
613
|
-
`,{encoding:"utf8",mode:384}),
|
|
607
|
+
${FG($)}${Q}</SYSTEM_NOTICE>`}}function T9($,Z){if(typeof $.content==="string")return $.content.trim()?[{type:"text",text:$.content}]:[];if(Z)return[...$.content];return $.content.filter((Q)=>Q.type!=="file"&&Q.type!=="image")}function pP($,Z){let Q=new Map;Z.forEach((B,H)=>{if(B.id)Q.set(B.id,H)});let J=(B)=>B.id?Q.get(B.id):void 0,W=new Set;for(let B=Z.length-1;B>=0&&W.size<dP;B-=1)if(OG(Z[B]))W.add(B);let X=(B,H)=>{let K=[];for(let G=B;G<H;G+=1){if(!W.has(G))continue;let F=OG(Z[G]);if(F)K.push(F)}return K},j=-1;for(let B=$.length-1;B>=0;B-=1)if(h1($[B])){j=B;break}let Y=[],V=0;while(V<$.length){if(!h1($[V])){let K=J($[V]);Y.push({message:$[V],firstOriginalIndex:K,lastOriginalIndex:K,isTypedUser:!1}),V+=1;continue}let B=V;while(B+1<$.length&&h1($[B+1]))B+=1;let H=$[V];if(B>V){let K=[],G=0;for(let F=V;F<=B;F+=1){if(G+=q$($[F]),F>V){let U=J($[F-1]),_=J($[F]);if(U!==void 0&&_!==void 0&&_>U+1){let L=FJ(Z.slice(U+1,_)),O=X(U+1,_);if(GJ(L)||O.length>0)K.push(qG(L,O))}}K.push(...T9($[F],F===j))}H={...$[V],content:K,metadata:{...$[V].metadata,userRunSpan:G}}}else{let K=T9(H,V===j);if(Array.isArray(H.content)&&K.length!==H.content.length)H={...H,content:K}}Y.push({message:H,firstOriginalIndex:J($[V]),lastOriginalIndex:J($[B]),isTypedUser:!0}),V=B+1}for(let B=0;B<Y.length;B+=1){let H=Y[B];if(!H.isTypedUser||H.lastOriginalIndex===void 0)continue;let K=Y[B+1],G=K?K.firstOriginalIndex:Z.length;if(G===void 0||G<=H.lastOriginalIndex+1)continue;let F=FJ(Z.slice(H.lastOriginalIndex+1,G)),U=X(H.lastOriginalIndex+1,G);if(!GJ(F)&&U.length===0)continue;H.message={...H.message,content:[...T9(H.message,!0),qG(F,U)]}}return Y.map((B)=>B.message)}function zG($){if(!$.metrics)return $;let{metrics:Z,...Q}=$;return Q}function lP($){let Z=!1,Q={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,cost:0};for(let J of $){let W=J.metrics;if(!W)continue;Z=!0,Q.inputTokens+=W.inputTokens??0,Q.outputTokens+=W.outputTokens??0,Q.cacheReadTokens+=W.cacheReadTokens??0,Q.cacheWriteTokens+=W.cacheWriteTokens??0,Q.cost+=W.cost??0}return Z?Q:void 0}function iP($,Z){if(!$)return Z;if(!Z)return $;return{inputTokens:$.inputTokens+Z.inputTokens,outputTokens:$.outputTokens+Z.outputTokens,cacheReadTokens:$.cacheReadTokens+Z.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens+Z.cacheWriteTokens,cost:$.cost+Z.cost}}function rP($){let Z=$?.metadata;if(!Z||Z.kind!=="compaction")return{messagesRemoved:0,usageBefore:void 0};let Q=Z.usageBefore;return{messagesRemoved:typeof Z.messagesRemoved==="number"?Z.messagesRemoved:0,usageBefore:Q&&typeof Q==="object"?{inputTokens:Q.inputTokens??0,outputTokens:Q.outputTokens??0,cacheReadTokens:Q.cacheReadTokens??0,cacheWriteTokens:Q.cacheWriteTokens??0,cost:Q.cost??0}:void 0}}var TG="preserved";function NG($){return $.metadata?.compaction===TG}function nP($){if(NG($))return $;return{...$,metadata:{...$.metadata,compaction:TG}}}function aP($){if(typeof $.content==="string")return $.content.trim()?$:void 0;let Z=$.content.filter((Q)=>Q.type!=="thinking"&&Q.type!=="redacted_thinking");if(!Z.some((Q)=>Q.type==="text"&&Q.text.trim()))return;return{...$,content:Z}}function fG($){let Z=$.context.messages,Q=$.estimateMessageTokens;if(Z.length<2)return;let J=Math.max(1,Math.min($.context.budget.messages.targetTokens,$.context.budget.messages.triggerTokens)),W=[];for(let A=0;A<Z.length;A+=1)if(h1(Z[A]))W.push(A);let X=new Map;for(let A of W){let f=cP(Z[A]);if(f)X.set(A,f)}if(X.size===0)return;let j=W[W.length-1],Y=0;for(let[A,f]of X)Y+=Q({...f,content:T9(f,A===j)});let V=new Set;for(let A=0;A<Z.length;A+=1){if(X.has(A))continue;if(NG(Z[A]))V.add(A),Y+=Q(Z[A])}let B=new Set;{let A=Z.length,f=0;for(let N=Z.length-1;N>j;N-=1){if(V.has(N))break;let C=Q(Z[N]);if(Y+f+C>J)break;f+=C,A=N}while(A<Z.length&&Z[A].role!=="assistant")A+=1;for(let N=A;N<Z.length;N+=1)B.add(N),Y+=Q(Z[N])}let H=new Map;for(let A=W.length-2;A>=0;A-=1){let f=W[A]+1,N=W[A+1];for(let C=N-1;C>=f;C-=1){let P=Z[C];if(V.has(C))break;if(P.role!=="assistant")continue;if(Array.isArray(P.content)&&P.content.some((g)=>g.type==="tool_use"))continue;let n=aP(P);if(n){let g=Q(n);if(Y+g<=J)H.set(C,n),Y+=g}break}}let K=[];for(let A=0;A<Z.length;A+=1){let f=X.get(A);if(f){K.push(f);continue}if(V.has(A)||B.has(A)){K.push(Z[A]);continue}let N=H.get(A);if(N)K.push(N)}let G=AG(Z,$.estimateMessageTokens),F=Math.min(Math.max(J,Y),Math.max(1,$.context.budget.messages.triggerTokens)),U=r6({messages:K,targetTokens:F,policyIntent:"basic_compaction_projection",estimateMessageTokens:$.estimateMessageTokens});if(U.status==="failed")$.logger?.debug("Basic compaction returned best-effort projection",{budgetWarnings:U.warnings.map((A)=>A.code),projectedTokens:U.estimatedTokens,targetTokens:J,maxInputTokens:$.context.budget.request.maxInputTokens});let _=pP(U.messages,Z);if(!uP(Z,_))return;let L=rP(_[0]),O=iP(L.usageBefore,lP(Z)),D={kind:"compaction",reason:$.context.mode==="manual"?"manual_compaction":"auto_compaction",displayRole:"system",messagesRemoved:L.messagesRemoved+(Z.length-_.length),...O?{usageBefore:O}:{}},q=_.map((A,f)=>{if(f===0&&h1(A))return zG({...A,metadata:{...A.metadata,...D,userRunSpan:q$(A)}});return zG(h1(A)?A:nP(A))}),T=AG(q,$.estimateMessageTokens),z=U.actions.filter((A)=>A.reason==="over_budget"||A.reason==="tool_pair_boundary").length;return $.logger?.debug("Performed basic compaction",{messagesBefore:Z.length,messagesAfter:q.length,messagesRemoved:Z.length-q.length,tokensBefore:G,tokensAfter:T,budgetStatus:U.status,budgetActions:z,budgetWarnings:U.warnings.map((A)=>A.code),targetTokens:J,maxInputTokens:$.context.budget.request.maxInputTokens}),{messages:q,budget:{policyIntent:"basic_compaction_projection",actionCount:z,warningCount:U.warnings.length,liveTailHandling:U.liveTailHandling}}}var sP=0.5;function tP($,Z){if(Z.aborted)return!0;return $ instanceof Error&&($.name==="AbortError"||$.name==="AgentRuntimeAbortError")}function eP($){return $ instanceof Error?{errorName:$.name,errorMessage:$.message}:{errorMessage:String($)}}function EG($){try{return JSON.stringify($).length}catch{return String($).length}}function $S($){let Z=0,Q=0,J=0;for(let W of $){if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type!=="tool_result")continue;let j=EG(X.content);Z+=1,Q+=j,J=Math.max(J,j)}}return{toolResultCount:Z,toolResultSerializedChars:Q,maxToolResultSerializedChars:J}}var RG={basic:({context:$,estimateMessageTokens:Z,logger:Q})=>fG({context:$,estimateMessageTokens:Z,logger:Q}),agentic:({context:$,providerConfig:Z,compaction:Q,estimateMessageTokens:J,logger:W})=>LG({context:$,providerConfig:Z,summarizer:Q?.summarizer,preserveRecentTokens:Math.min(Q?.preserveRecentTokens??jG,$.budget.messages.targetTokens),estimateMessageTokens:J,logger:W})};function ZS($){let Z=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,Z));return Math.max(1,Math.floor(Math.min($.messageTriggerTokens,$.messageInputTokens*Q)))}function QS($){let Z=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*sP):Math.floor($.triggerTokens*XG),Q=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(Z,$.maxInputTokens,Q))}function MG($,Z){return Math.max(1,Math.floor($-Z))}function JS($){let Z=0,Q=!1;for(let J of $)if(J.role==="user")Q=!0;else if(J.role==="assistant"&&Q)Z+=1,Q=!1;return Z}function _J($,Z={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let J=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},W=HG(),X=Q?.strategy??"agentic",j=RG[X],Y=Z.mode??"auto",V=Q?.compact?"custom":X;return async(B)=>{let H=B.apiMessages.reduce((p,G0)=>p+W(G0),0),K=oP({systemPrompt:B.systemPrompt,messages:B.apiMessages,tools:B.tools}),G=B.messages.reduce((p,G0)=>p+W(G0),0),F=Math.max(0,K-H),U=s6({maxInputTokens:B.model.info?.maxInputTokens,contextWindow:B.model.info?.contextWindow})??WG,_=U*F2,L=MG(_,F),O=K>=_;if($.logger?.debug("Context compaction diagnostics",{mode:Y,strategy:X,iteration:B.iteration,providerId:$.providerId,modelId:$.modelId,requestInputTokens:K,apiMessageTokens:H,messageInputTokens:G,requestOverheadTokens:F,maxInputTokens:U,requestTriggerTokens:_,messageTriggerTokens:L,thresholdRatio:F2,shouldCompact:O,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:EG(B.apiMessages),...$S(B.apiMessages)}),Y==="auto"&&!O)return;let D,q;if(Y==="auto")D=QS({maxInputTokens:U,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:_,messagePairCount:JS(B.messages)}),q=MG(D,F);else q=ZS({messageInputTokens:G,messageTriggerTokens:L,manualTargetRatio:Z.manualTargetRatio}),D=F+q;let T={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId,iteration:B.iteration,messages:B.messages,model:B.model,mode:Y,budget:{request:{inputTokens:K,maxInputTokens:U,triggerTokens:_,targetTokens:D,overheadTokens:F,thresholdRatio:F2,utilizationRatio:U>0?K/U:0},messages:{inputTokens:G,triggerTokens:L,targetTokens:q}}},z=Y==="manual"?"manual_compaction":"auto_compaction";B.emitStatusNotice?.(Y==="manual"?"compacting":"auto-compacting",{kind:z,reason:z,phase:"started",iteration:B.iteration,triggerTokens:_,targetTokens:D,maxInputTokens:U,messageTargetTokens:q});let A=B.messages.length,f=Date.now(),N={context:T,providerConfig:{...J,abortSignal:B.abortSignal},compaction:Q,estimateMessageTokens:W,logger:$.logger},C=V,P;if(Q?.compact)P=await Q.compact(T);else try{P=await j(N)}catch(p){if(X!=="agentic"||tP(p,B.abortSignal))throw p;$.logger?.log("Agentic compaction failed; falling back to basic compaction",{severity:"warn",...eP(p)}),C="basic",P=await RG.basic(N)}let n=Date.now()-f,g=$.sessionId??B.conversationId,w={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId??void 0};if(P?.messages){let p=P.messages.reduce((d1,p1)=>d1+W(p1),0),G0=F+p;if($.logger?.log("Context compaction completed",{severity:"info",strategy:C,maxInputTokens:U,messageInputTokens:G,apiInputTokens:H,requestInputTokens:K,requestOverheadTokens:F,afterMessageTokens:p,afterRequestTokens:G0,tokensSaved:K-G0,utilizationBefore:`${(K/U*100).toFixed(1)}%`,utilizationAfter:`${(G0/U*100).toFixed(1)}%`,thresholdTrigger:`${(F2*100).toFixed(1)}%`,messagesBefore:A,messagesAfter:P.messages.length,messagesRemoved:A-P.messages.length}),B.emitStatusNotice?.(Y==="manual"?"compacted":"auto-compacted",{kind:z,reason:z,phase:"completed",iteration:B.iteration,tokensBefore:K,tokensAfter:G0,messagesBefore:A,messagesAfter:P.messages.length,maxInputTokens:U}),dZ($.telemetry,{ulid:g,strategy:C,mode:Y,messagesBefore:A,messagesAfter:P.messages.length,messagesRemoved:A-P.messages.length,tokensBefore:K,tokensAfter:G0,tokensSaved:K-G0,triggerTokens:_,maxInputTokens:U,thresholdRatio:F2,durationMs:n,provider:$.providerId,modelId:$.modelId,...w}),P.budget&&(P.budget.actionCount>0||P.budget.warningCount>0))qX($.telemetry,{ulid:g,strategy:C,mode:Y,policyIntent:P.budget.policyIntent,actionCount:P.budget.actionCount,warningCount:P.budget.warningCount,liveTailHandling:P.budget.liveTailHandling,provider:$.providerId,modelId:$.modelId,...w}),B.emitStatusNotice?.("compaction-budget-adjusted",{kind:"compaction_budget_emergency",reason:"compaction_budget_emergency",iteration:B.iteration,policyIntent:P.budget.policyIntent,actionCount:P.budget.actionCount,warningCount:P.budget.warningCount})}else B.emitStatusNotice?.(Y==="manual"?"compaction-skipped":"auto-compaction-skipped",{kind:z,reason:z,phase:"skipped",iteration:B.iteration,maxInputTokens:U}),pZ($.telemetry,{ulid:g,strategy:C,mode:Y,reason:"no_result",tokensBefore:K,triggerTokens:_,maxInputTokens:U,thresholdRatio:F2,durationMs:n,provider:$.providerId,modelId:$.modelId,...w});return P}}function LJ($){return async(Z)=>{let Q=$.getState?.(),J=Q?H8(Q,Z.messages):void 0;if(Q&&J){let X=$.compact?await $.compact({...Z,messages:J,apiMessages:J}):void 0;if(X?.messages){let j=X.systemPrompt??Q.system_prompt,Y=V9({sourceMessages:Z.messages,compactedMessages:X.messages,conversationId:Z.conversationId,systemPrompt:j});return await $.saveState?.(Y,Z.messages),{...X,...j!==void 0?{systemPrompt:j}:{}}}return{messages:J,...X?.systemPrompt!==void 0?{systemPrompt:X.systemPrompt}:Q.system_prompt!==void 0?{systemPrompt:Q.system_prompt}:{}}}let W=$.compact?await $.compact(Z):void 0;if(W?.messages){let X=V9({sourceMessages:Z.messages,compactedMessages:W.messages,conversationId:Z.conversationId,systemPrompt:W.systemPrompt});await $.saveState?.(X,Z.messages)}return W}}q0();function P0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function M0($,Z){return{inputTokens:$.inputTokens+Math.max(0,Z.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,Z.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,Z.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,Z.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,Z.totalCost??0)}}function N9($){let Z=P0();for(let Q of $)Z=M0(Z,Q);return Z}function D8($){return typeof $==="number"&&Number.isFinite($)?$:0}function f9($){let Z=P0();for(let Q of $){let J=Q.metrics;if(!J)continue;Z=M0(Z,{inputTokens:D8(J.inputTokens),outputTokens:D8(J.outputTokens),cacheReadTokens:D8(J.cacheReadTokens),cacheWriteTokens:D8(J.cacheWriteTokens),totalCost:D8(J.cost)})}return Z}function WS($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let J=D8(Q.metrics?.inputTokens);return J>0?J:void 0}return}function XS($){if(!$||typeof $!=="object")return;let Z=$,Q=Z.skill??Z.skill_name??Z.skillName;if(typeof Q!=="string")return;let J=Q.trim();return J.length>0?J:void 0}function AJ($){if(!$||typeof $!=="object")return{};let Z=$;return{agentId:typeof Z.agentId==="string"?Z.agentId:void 0,conversationId:typeof Z.conversationId==="string"?Z.conversationId:void 0,parentAgentId:typeof Z.parentAgentId==="string"?Z.parentAgentId:void 0}}function I1($){let Z=$.agentId?.trim();if(!Z)return;let Q=$.parentAgentId?.trim()||void 0,J=$.teamRole,W="root";if(J==="teammate")W="team_teammate";else if(J==="lead")W="team_lead";else if(Q)W="subagent";return{agentId:Z,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:J,teamAgentId:$.teamAgentId?.trim()||void 0}}function jS($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function YS($){let Z=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of Z){let J=Q?.trim();if(J)return J}return $.isPrimaryAgentEvent?"root":"unknown"}function OJ($,Z,Q){let{sessionId:J,config:W,liveSession:X,emit:j}=$,Y=W.telemetry,V=X?.runtime.teamRuntime,B=Q?.isPrimaryAgentEvent??!0,H=AJ(Z),K=I1({agentId:Q?.agentId??H.agentId,conversationId:Q?.conversationId??H.conversationId,parentAgentId:Q?.parentAgentId??H.parentAgentId,createdByAgentId:Q?.createdByAgentId,teamId:Q?.teamId??V?.getTeamId(),teamName:Q?.teamName??V?.getTeamName(),teamRole:Q?.teamRole,teamAgentId:Q?.teamAgentId});if(Z.type==="content_start"&&Z.contentType==="tool"&&Z.toolName==="skills"){let G=XS(Z.input);if(G)hZ(Y,{ulid:J,skillName:G,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:W.providerId,modelId:W.modelId,...K})}if(Z.type==="content_end"&&Z.contentType==="tool"){let G=Z.toolName??"unknown",F=!Z.error;if(P8(Y,{ulid:J,tool:G,autoApproved:void 0,success:F,modelId:W.modelId,provider:W.providerId,...K}),!F&&(G==="editor"||G==="apply_patch"))IZ(Y,{ulid:J,modelId:W.modelId,provider:W.providerId,errorType:Z.error,...K})}if(Z.type==="notice"&&Z.reason==="api_error")T4(Y,{ulid:J,model:W.modelId,provider:W.providerId,errorMessage:Z.message,...K});if(Z.type==="error")T4(Y,{ulid:J,model:W.modelId,provider:W.providerId,errorMessage:Z.error?.message??"unknown error",...K});if(Z.type==="usage"&&X?.turnUsageBaseline){let G=jS(Z);if(B){X.turnPrimaryUsage=M0(X.turnPrimaryUsage??P0(),G);let U=M0(X.turnUsageBaseline,X.turnPrimaryUsage);$.usageBySession.set(J,U),w8(Y,{ulid:J,provider:W.providerId,model:W.modelId,source:"assistant",mode:W.mode,...K}),yZ(Y,{ulid:J,tokensIn:Z.inputTokens,tokensOut:Z.outputTokens,cacheWriteTokens:Z.cacheWriteTokens,cacheReadTokens:Z.cacheReadTokens,totalCost:Z.cost,model:W.modelId,...K})}else{let U=YS({isPrimaryAgentEvent:B,overrides:Q,eventMetadata:H}),_=X.turnUsageByAgent??new Map;X.turnUsageByAgent=_,_.set(U,M0(_.get(U)??P0(),G))}let F=M0(X.turnPrimaryUsage??P0(),N9(X.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(J,M0(X.turnAggregateUsageBaseline??X.turnUsageBaseline,F))}if(Z.type==="iteration_end"&&B)$.persistMessages(J,X?.agent.getMessages()??[],X?.config.systemPrompt);j({type:"agent_event",payload:{sessionId:J,event:Z,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(B?"lead":void 0):void 0}}),j({type:"chunk",payload:{sessionId:J,stream:"agent",chunk:DH(Z),ts:Date.now()}})}function x1($){return $.workspaceRoot??$.cwd}import{resolveProviderRequestHeaders as gS}from"@cline/llms";import{hasRuntimeConfigExtension as vS}from"@cline/shared";import{appendFileSync as zS,readFileSync as TS}from"node:fs";import{join as NS}from"node:path";import{augmentNodeCommandForDebug as fS}from"@cline/shared";import{ensureHookLogDir as PG}from"@cline/shared/storage";function R9($,Z){if(!Z)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:Z}}import{existsSync as VS,readdirSync as BS}from"node:fs";import{basename as HS,extname as KS,join as GS}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as CG,resolveHooksConfigSearchPaths as FS}from"@cline/shared/storage";function qJ($){return FS($)}var M9;((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"})(M9||={});var zJ={["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"},US=new Map(Object.values(M9).map(($)=>[$.toLowerCase(),$])),DS=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function TJ($){let Z=KS($).toLowerCase();if(!DS.has(Z))return;let Q=HS($,Z).trim().toLowerCase();return US.get(Q)}function _8($){let Z=[],Q=new Set,J=qJ($).filter((W)=>VS(W));for(let W of J)try{for(let X of BS(W,{withFileTypes:!0})){if(!X.isFile())continue;let j=TJ(X.name);if(!j)continue;let Y=GS(W,X.name);if(Q.has(Y))continue;Q.add(Y),Z.push({fileName:j,hookEventName:zJ[j],path:Y})}}catch{}return Z.sort((W,X)=>W.path.localeCompare(X.path))}import{spawn as _S}from"node:child_process";import{augmentNodeCommandForDebug as LS,withResolvedClineBuildEnv as AS}from"@cline/shared";function OS($){let Z=$.trim();if(!Z)return{};let J=Z.split(`
|
|
608
|
+
`).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),W=J.length>0?J[J.length-1]:Z;try{return{parsedJson:JSON.parse(W)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse subprocess stdout JSON"}}}function wG($,Z){let Q=$ instanceof Error?$:Error(String($)),J=Q,W=Z.join(" ");if(J.code==="EACCES"){let j=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 j.code=J.code,j}let X=Error(`Failed to execute hook command "${W}": ${Q.message}`);return X.code=J.code,X}async function qS($,Z){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((J,W)=>{let X=!1,j=(B)=>{if(X)return;X=!0,B()},Y=(B)=>{let H=B.code;return H==="EPIPE"||H==="EOF"||H==="ERR_STREAM_DESTROYED"},V=(B)=>{if(Y(B)){j(J);return}j(()=>W(B))};Q.on("error",V),Q.once("close",()=>Q.off("error",V)),Q.end(Z,(B)=>{if(B){if(Y(B)){j(J);return}j(()=>W(B));return}j(J)})})}async function U2($,Z){let Q=LS(Z.command,{env:Z.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let J=!!Z.detached,W=_S(Q[0],Q.slice(1),{cwd:Z.cwd,env:AS(Z.env),stdio:J?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:J,windowsHide:!0}),X="",j="",Y=!1,V;if(!J&&(!W.stdout||!W.stderr))throw W.kill("SIGKILL"),Error("runSubprocessEvent failed to create stdout/stderr pipes");W.stdout?.on("data",(K)=>{X+=K.toString()}),W.stderr?.on("data",(K)=>{j+=K.toString()});let B=new Promise((K,G)=>{W.once("spawn",()=>{try{Z.onSpawn?.({command:Q,pid:W.pid??void 0,detached:J})}catch{}K()}),W.once("error",(F)=>G(wG(F,Q)))}),H=new Promise((K,G)=>{W.once("error",(F)=>{if(V)clearTimeout(V);G(wG(F,Q))}),W.once("close",(F)=>{if(V)clearTimeout(V);let{parsedJson:U,parseError:_}=OS(X);K({exitCode:F,stdout:X,stderr:j,parsedJson:U,parseError:_,timedOut:Y})})});if(J)H.catch(()=>{return});if(!J&&(Z.timeoutMs??0)>0)V=setTimeout(()=>{Y=!0,W.kill("SIGKILL")},Z.timeoutMs);if(await Promise.race([Promise.all([B,qS(W,JSON.stringify($))]),H]),J){W.unref();return}return await H}function E9($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,J]of Object.entries($))Z[Q]=typeof J==="string"?J:JSON.stringify(J);return Z}function t6($,Z,Q){let J=Q instanceof Error?`: ${Q.message}`:"",W=`${Z}${J}`;if($){try{$.log(W,{severity:"warn",...Q!==void 0?{error:Q}:{}})}catch{}return}console.warn(W)}function RS($,Z){if(!Z)return $;if(!$)return{...Z};let Q=[$.context,Z.context].filter((W)=>typeof W==="string"&&W.length>0).join(`
|
|
609
|
+
`),J=[...$.appendMessages??[],...Z.appendMessages??[]];return{cancel:$.cancel===!0||Z.cancel===!0?!0:void 0,review:$.review===!0||Z.review===!0?!0:void 0,context:Q||void 0,overrideInput:Z.overrideInput!==void 0?Z.overrideInput:$.overrideInput,systemPrompt:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,appendMessages:J.length>0?J:void 0}}function MS($){if(!$||typeof $!=="object")return;let Z=$,Q=typeof Z.context==="string"?Z.context:typeof Z.contextModification==="string"?Z.contextModification:typeof Z.errorMessage==="string"?Z.errorMessage:void 0;return{cancel:typeof Z.cancel==="boolean"?Z.cancel:void 0,review:typeof Z.review==="boolean"?Z.review:void 0,context:Q,overrideInput:Object.hasOwn(Z,"overrideInput")?Z.overrideInput:void 0}}function NJ($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function E0($,Z){let Q=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",J={rootSessionId:Z.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:J,workspaceRoots:Z.workspacePath?[Z.workspacePath]:[],workspaceInfo:Z.workspaceInfo,userId:Q,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}async function fJ($,Z){if(Z.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await U2($,Z)}catch(Q){let J=wS(Z.command,process.platform,Q);if(!J)throw Q;return await U2($,{...Z,command:J})}}function ES($){try{let Q=TS($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Q?.startsWith("#!"))return;let J=Q.slice(2).trim();if(!J)return;let W=J.split(/\s+/).filter(Boolean);return W.length>0?W:void 0}catch{return}}function CS($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function wS($,Z=process.platform,Q){if(Z!=="win32"||!CS(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function SG($){if($.length===0)return;let[Z,...Q]=$,J=Z.replace(/\\/g,"/").toLowerCase(),W=J.split("/").at(-1)??J;if(W==="env")return SG(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 PS($){let Z=ES($);if(Z&&Z.length>0)return[...SG(Z)??Z,$];let Q=$.toLowerCase();if(Q.endsWith(".sh")||Q.endsWith(".bash")||Q.endsWith(".zsh"))return["bash",$];if(Q.endsWith(".js")||Q.endsWith(".mjs")||Q.endsWith(".cjs"))return fS(["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 SS($){let Z={};for(let Q of _8($)){if(!Q.hookEventName)continue;let J=Q.hookEventName,W=Z[J]??[];W.push(PS(Q.path)),Z[J]=W}return Z}async function bS($){let Z;for(let Q of $.commands){let J=Q.join(" ");try{let W=await fJ($.payload,{command:Q,cwd:$.cwd,env:process.env,detached:!1,timeoutMs:$.timeoutMs});if(W?.timedOut){t6($.logger,`hook command timed out: ${J}`);continue}if(W?.parseError){t6($.logger,`hook command returned invalid JSON control output: ${J} (${W.parseError})`);continue}Z=RS(Z,MS(W?.parsedJson))}catch(W){t6($.logger,`hook command failed: ${J}`,W)}}return Z}async function D2($){if($.detached){for(let Z of $.commands){let Q=Z.join(" ");fJ($.payload,{command:Z,cwd:$.cwd,env:process.env,detached:!0}).catch((J)=>{t6($.logger,`hook command failed: ${Q}`,J)})}return}await Promise.all($.commands.map(async(Z)=>{let Q=Z.join(" ");try{await fJ($.payload,{command:Z,cwd:$.cwd,env:process.env,detached:$.detached})}catch(J){t6($.logger,`hook command failed: ${Q}`,J)}}))}function T$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function RJ($,Z){return{...T$($.snapshot),userMessage:Z}}function bG($){return{...T$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function yG($){return{...T$($.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 kG($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function yS($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}function C9($){let Z={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(J)=>{let W=`${JSON.stringify({ts:new Date().toISOString(),...J})}
|
|
610
|
+
`,j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??NS(PG(),"hooks.jsonl");PG(j),zS(j,W,"utf8")};return{beforeRun:async(J)=>{let W=RJ(J,"");Q({...E0(W,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(J)=>{let W=bG(J);Q({...E0(W,Z),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:E9(W.call.input)}});return},afterTool:async(J)=>{let W=yG(J);Q({...E0(W,Z),hookName:"tool_result",iteration:W.iteration,tool_result:W.record,postToolUse:{toolName:W.record.name,parameters:E9(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:J,result:W})=>{let X=T$(J);if(W.status==="completed"){Q({...E0(X,Z),hookName:"agent_end",iteration:W.iterations,turn:{outputText:W.outputText,status:W.status},taskComplete:{taskMetadata:{}}});return}if(W.status==="aborted"||NJ(W.error?.message)){Q({...E0(X,Z),hookName:"agent_abort",reason:W.error?.message,taskCancel:{taskMetadata:{}}});return}if(W.error)Q({...E0(X,Z),hookName:"agent_error",iteration:W.iterations,error:{name:W.error.name,message:W.error.message,stack:W.error.stack}})},onEvent:async(J)=>{if(J.type!=="message-added"||J.message.role!=="user")return;let W=RJ({snapshot:J.snapshot},kG(J.message.content));Q({...E0(W,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:W.userMessage,attachments:[]}})}}}function MJ($){let Z=SS($.workspacePath);if(!Object.values(Z).some((K)=>K.length>0))return;let J=async(K,G)=>{let F=Z[G]??[];if(F.length===0)return;await D2({commands:F,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:G==="agent_resume"?{...E0(K,$),hookName:G,taskResume:{taskMetadata:{},previousState:{}}}:{...E0(K,$),hookName:G,taskStart:{taskMetadata:{}}}})},W=async(K)=>{let G=Z.prompt_submit??[];if(G.length>0)await D2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...E0(K,$),hookName:"prompt_submit",userPromptSubmit:{prompt:K.userMessage,attachments:[]}}})},X=async(K)=>{let G=Z.tool_call??[];if(G.length===0)return;return bS({commands:G,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...E0(K,$),hookName:"tool_call",iteration:K.iteration,tool_call:{id:K.call.id,name:K.call.name,input:K.call.input},preToolUse:{toolName:K.call.name,parameters:E9(K.call.input)}}})},j=async(K)=>{let G=Z.tool_result??[];if(G.length===0)return;await D2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...E0(K,$),hookName:"tool_result",iteration:K.iteration,tool_result:K.record,postToolUse:{toolName:K.record.name,parameters:E9(K.record.input),result:typeof K.record.output==="string"?K.record.output:JSON.stringify(K.record.output),success:!K.record.error,executionTimeMs:K.record.durationMs}}})},Y=async(K)=>{let G=Z.agent_end??[];if(G.length===0)return;await D2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...E0(K,$),hookName:"agent_end",iteration:K.iteration,turn:K.turn,taskComplete:{taskMetadata:{}}}})},V=async(K)=>{let G=Z.agent_error??[];if(G.length===0)return;await D2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...E0(K,$),hookName:"agent_error",iteration:K.iteration,error:{name:K.error.name,message:K.error.message,stack:K.error.stack}}})},B=async(K)=>{if(NJ(K.reason)){let F=Z.agent_abort??[];if(F.length>0)await D2({commands:F,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...E0(K,$),hookName:"agent_abort",reason:K.reason,taskCancel:{taskMetadata:{}}}})}let G=Z.session_shutdown??[];if(G.length===0)return;await D2({commands:G,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...E0(K,$),hookName:"session_shutdown",reason:K.reason}})},H={};if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0||(Z.prompt_submit?.length??0)>0){if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0)H.beforeRun=async(K)=>{let G=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await J(T$(K.snapshot),G);return};if((Z.prompt_submit?.length??0)>0)H.onEvent=async(K)=>{if(K.type!=="message-added"||K.message.role!=="user")return;await W(RJ({snapshot:K.snapshot},kG(K.message.content)))}}if((Z.tool_call?.length??0)>0)H.beforeTool=async(K)=>{let G=await X(bG(K));return yS(G)};if((Z.tool_result?.length??0)>0)H.afterTool=async(K)=>{await j(yG(K));return};if((Z.agent_end?.length??0)>0)H.afterRun=async({snapshot:K,result:G})=>{if(G.status!=="completed")return;await Y({...T$(K),iteration:G.iterations,turn:{outputText:G.outputText,status:G.status}})};if((Z.agent_error?.length??0)>0||(Z.agent_abort?.length??0)>0||(Z.session_shutdown?.length??0)>0){let K=H.afterRun;H.afterRun=async(G)=>{await K?.(G);let{snapshot:F,result:U}=G;if(U.status==="aborted"||NJ(U.error?.message)){await B({...T$(F),reason:U.error?.message});return}if(U.error)await V({...T$(F),iteration:U.iterations,error:U.error})}}return H}function w9($){return R9("core.hook_config_files",MJ($))}function _2($,Z){let Q=$.map((J)=>J[Z]).filter((J)=>typeof J==="function");if(Q.length===0)return;return async(J)=>{let W;for(let X of Q){let j=await X(J);if(!j||typeof j!=="object")continue;let Y=j;W={...W??{},...Y,stop:W?.stop===!0||Y.stop===!0?!0:Y.stop,options:W?.options||Y.options?{...W?.options??{},...Y.options??{}}:void 0}}return W}}function e6($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:_2(Z,"beforeRun"),afterRun:_2(Z,"afterRun"),beforeModel:_2(Z,"beforeModel"),afterModel:_2(Z,"afterModel"),beforeTool:_2(Z,"beforeTool"),afterTool:_2(Z,"afterTool"),onEvent:_2(Z,"onEvent")}}import{z as N$}from"zod";var $4=S2;var hG=N$.object({settings:S2,updatedAt:N$.string().datetime(),tokenSource:N$.enum(["manual","oauth","migration"]).default("manual")}),P9=N$.object({version:N$.literal(1),lastUsedProvider:N$.string().min(1).optional(),providers:N$.record(N$.string(),hG)});function L8(){return{version:1,providers:{}}}J1();import{upsertWorkspaceInfo as kS,WorkspaceManifestSchema as EJ}from"@cline/shared";class S9{manifest;listeners=new Set;constructor($){this.manifest=EJ.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await r5($);return this.manifest=kS(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=V$($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=EJ.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let J=await this.addWorkspacePath(Z);return this.manifest=EJ.parse({...this.manifest,currentWorkspacePath:J.rootPath}),this.emit({type:"workspace_switched",workspace:J}),J}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=V$($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}q0();import{createHash as hS}from"node:crypto";var IG=new Set,xG=new Set;function IS($){return hS("sha256").update($).digest("hex")}function xS($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function gG($){if(!$.telemetry)return;let Z=IS($.rootPath),Q=$.rootCount??1;if(!IG.has(Z))IG.add(Z),CZ($.telemetry,{root_count:Q,vcs_types:xS($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!xG.has(Z)){xG.add(Z);let J=Error($.initError.message);J.name=$.initError.errorType||"Error",wZ($.telemetry,J,{fallback_to_single_root:!0,workspace_count:Q})}}function mS($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function cS($,Z,Q){if(Z.length>0)for(let X of Z)Q?.log(X.message,{severity:"warn"});if($.length===0)return;let J=$.slice(0,3).map(mS).join("; "),W=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${J}${W}. Use --verbose for more details.`,{severity:"warn"});for(let X of $)Q?.log(`Plugin initialization failed (${X.phase}) for ${X.pluginPath}`,{severity:"warn",stack:X.stack,pluginPath:X.pluginPath,pluginName:X.pluginName})}function uS($,Z){let Q=typeof $.thinking==="boolean",J=typeof $.reasoningEffort==="string";if(!Q&&!J)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...J?{effort:$.reasoningEffort}:{}}}function vG($,Z){return vS($,Z)}function dS($,Z,Q,J,W,X){let j=J.getProviderSettings($.providerId),Y=W||j?.modelCatalog?{...W??{},...j?.modelCatalog??{}}:void 0,V=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,B=gS({providerId:$.providerId,sessionId:Z,source:Q,defaultSource:T0.CLI,client:{name:$.extensionContext?.client?.name,version:$.extensionContext?.client?.version,versionHeaderFallback:$.headers?.["X-CLIENT-VERSION"],platform:$.extensionContext?.client?.platform,platformVersion:$.extensionContext?.client?.platformVersion,isMultiRoot:$.extensionContext?.client?.isMultiRoot},coreVersion:Y8,openAiCodex:{accountId:V?.accountId??j?.auth?.accountId,accessToken:V?.accessToken??$.apiKey??j?.auth?.accessToken??j?.apiKey,userAgentVersion:process.env.npm_package_version},headers:{stored:j?.headers,config:$.headers,session:V?.headers}}),H={...j??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??j?.apiKey,baseUrl:$.baseUrl??j?.baseUrl,headers:void 0,reasoning:uS($,j?.reasoning),modelCatalog:Y},K={...N1(H),...V??{}};if(B)K.headers=B;if($.knownModels)K.knownModels=$.knownModels;if($.extensionContext)K.extensionContext=$.extensionContext;let F=$.fetch??K.fetch??X;if(F)K.fetch=F;return K}async function mG($){let{input:Z,sessionId:Q,providerSettingsManager:J,defaultTelemetry:W,defaultLogger:X,defaultCapabilities:j,defaultToolPolicies:Y,defaultFetch:V,onPluginEvent:B,onTeamEvent:H,createSubAgentLifecycleCallbacks:K,createSpawnTool:G,localRuntime:F,readSessionMetadata:U,writeSessionMetadata:_}=$,L=x1(Z.config),{modelCatalogDefaults:O,userInstructionService:D,configExtensions:q,onTeamRestored:T,...z}=F??{},A=Object.keys(z).length>0?z:void 0,{workspaceInfo:f,workspaceMetadata:N,gitState:C,durationMs:P,vcsType:n,initError:g}=await sB(L),w=A?.extensionContext,p={...w??{},workspace:{...f,...w?.workspace??{}},session:{...w?.session??{},sessionId:Q},logger:w?.logger??A?.logger??X,telemetry:w?.telemetry??A?.telemetry??W};gG({telemetry:p.telemetry,rootPath:f.rootPath,workspaceInfo:f,rootCount:1,vcsType:n,durationMs:P,initError:g,featureFlagEnabled:!0});let G0=w9({cwd:Z.config.cwd,workspacePath:L,rootSessionId:Q,logger:A?.logger,workspaceInfo:f}),d1=UH(A?.hooks)?void 0:C9({rootSessionId:Q,workspacePath:L,workspaceInfo:f}),p1=e6([A?.hooks,d1]),Z0;if(vG(q,"plugins"))try{Z0=await s4({pluginPaths:A?.pluginPaths,workspacePath:L,cwd:Z.config.cwd,onEvent:B,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:f,session:p.session,client:p.client,user:p.user,logger:p.logger,telemetry:p.telemetry,automation:p.automation}),cS(Z0.failures,Z0.warnings,A?.logger)}catch(O0){let S$=O0 instanceof Error?O0.message:String(O0);A?.logger?.log?.(`plugin loading failed; continuing without plugins (${S$})`)}let l1=D3(G0?[G0]:void 0,D3(A?.extensions,fQ(Z0?.extensions))),V1=vG(q,"plugins")?v$(Z0?.pluginPaths??[]):void 0,g0={...Z.config,...A??{},sessionId:Q,hooks:p1,extensions:l1,extensionContext:p,telemetry:p.telemetry,logger:p.logger},i1=dS(g0,Q,Z.source,J,O,V),L0=e6([g0.hooks,g0.checkpoint?.enabled===!0?fK({cwd:g0.cwd,sessionId:Q,logger:g0.logger,createCheckpoint:g0.checkpoint?.createCheckpoint,readSessionMetadata:U,writeSessionMetadata:_}):void 0]),w0={...g0,providerConfig:i1,workspaceMetadata:N,hooks:L0},B1=Z.toolPolicies??g0.toolPolicies??Y,v=h0(j,Z.capabilities),b0=v?.requestToolApproval,y=v?.toolExecutors,Y0=K?.(w0),A0=new S9({currentWorkspacePath:f.rootPath,workspaces:{[f.rootPath]:f}});return{effectiveInput:Z,config:w0,providerConfig:i1,workspaceMetadata:N,workspaceInfo:f,gitState:C,extensions:l1,hooks:L0,toolPolicies:B1,requestToolApproval:b0,pluginSandboxShutdown:Z0?.shutdown,runtimeBuilderInput:{config:w0,hooks:L0,extensions:l1,onTeamEvent:H,createSpawnTool:G,onTeamRestored:T,onSubAgentEvent:Y0?.onSubAgentEvent,onSubAgentStart:Y0?.onSubAgentStart,onSubAgentEnd:Y0?.onSubAgentEnd,userInstructionService:D,pluginSkillDirectories:V1,configExtensions:q,toolExecutors:y,toolPolicies:B1,workspaceManager:A0,logger:w0.logger,telemetry:w0.telemetry,requestToolApproval:b0}}}import{resolveDocumentsExtensionPath as pS}from"@cline/shared/storage";q0();function cG($,Z,Q,J,W){if(Q)bZ($.telemetry,{ulid:Z,apiProvider:$.providerId,...W});else SZ($.telemetry,{ulid:Z,apiProvider:$.providerId,...W});lS($.telemetry,{workspacePath:J})}function lS($,Z){let Q=pS("Hooks"),J=_8(Z.workspacePath),W=new Map;for(let X of J){let j=X.hookEventName??"unknown",Y=W.get(j)??{global:0,workspace:0};if(X.path===Q||X.path.startsWith(`${Q}/`))Y.global+=1;else Y.workspace+=1;W.set(j,Y)}for(let[X,j]of W.entries())uZ($,X,j.global,j.workspace)}function uG($,Z){for(let Q of Z.mentions)mZ($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)gZ($,"file",Q.length);for(let Q of Z.ignoredMentions)vZ($,"file","not_found",Q)}import{chmodSync as QF,existsSync as hJ,mkdirSync as kb,readFileSync as hb,renameSync as Ib,rmSync as xb,writeFileSync as gb}from"node:fs";import{basename as JF,dirname as IJ}from"node:path";import{resolveProviderSettingsPath as vb}from"@cline/shared/storage";import{existsSync as iS,mkdirSync as rS,readFileSync as nS,renameSync as aS,rmSync as oS,writeFileSync as sS}from"node:fs";import{mkdir as tS,readFile as eS,rename as $b,rm as Zb,writeFile as Qb}from"node:fs/promises";import{dirname as wJ,join as Jb}from"node:path";import*as K0 from"@cline/llms";import{ApiFormatSchema as Wb,ModelCapabilitySchema as Xb,ProviderCapabilitySchema as jb,ProviderClientSchema as Yb,ProviderProtocolSchema as Vb}from"@cline/shared";import{z as o}from"zod";var CJ=o.number().finite().positive().optional().catch(void 0),Z4=o.number().finite().nonnegative().optional().catch(void 0),Bb=o.object({id:o.string().optional(),name:o.string().optional(),maxTokens:CJ,contextWindow:CJ,maxInputTokens:CJ,capabilities:o.array(Xb).optional(),supportsVision:o.boolean().optional(),supportsAttachments:o.boolean().optional(),supportsReasoning:o.boolean().optional(),inputPrice:Z4,outputPrice:Z4,cacheReadsPrice:Z4,cacheWritesPrice:Z4,temperature:Z4,apiFormat:Wb.optional()}).passthrough(),Hb=o.object({name:o.string(),baseUrl:o.string(),defaultModelId:o.string().optional(),protocol:Vb.optional(),client:Yb.optional(),capabilities:o.array(jb).optional(),modelsSourceUrl:o.string().optional()}).passthrough(),dG=o.object({provider:Hb.optional(),models:o.record(o.string(),Bb).optional()}).passthrough(),pG=o.object({version:o.literal(1),providers:o.record(o.string(),dG)}),Kb=o.object({version:o.literal(1),providers:o.record(o.string(),o.unknown())}),b9=new Set;function lG($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function f$($){return Jb(wJ($.getFilePath()),"models.json")}function y9(){return{version:1,providers:{}}}function iG($){let Z=Kb.safeParse($);if(!Z.success)return s("models.json content is not a valid models file envelope; starting from an empty registry"),y9();let Q={};for(let[J,W]of Object.entries(Z.data.providers)){let X=dG.safeParse(W);if(X.success)Q[J]=X.data;else s(`models.json: dropping invalid entry for provider=${J}`)}return{version:1,providers:Q}}function k9($){if(!iS($))return y9();try{let Z=nS($,"utf8");return iG(JSON.parse(Z))}catch{s(`models.json at ${$} exists but is unreadable or invalid JSON; treating as an empty registry`)}return y9()}async function A8($){try{let Z=await eS($,"utf8");return iG(JSON.parse(Z))}catch(Z){if(Z?.code!=="ENOENT")s(`models.json at ${$} exists but is unreadable or invalid JSON; treating as an empty registry`)}return y9()}function PJ($,Z){rS(wJ($),{recursive:!0});let Q=pG.parse(Z),J=`${$}.${process.pid}.tmp`;try{sS(J,`${JSON.stringify(Q,null,2)}
|
|
611
|
+
`,"utf8"),aS(J,$)}catch(W){throw oS(J,{force:!0}),W}}async function h9($,Z){await tS(wJ($),{recursive:!0});let Q=pG.parse(Z),J=`${$}.${process.pid}.tmp`;try{await Qb(J,`${JSON.stringify(Q,null,2)}
|
|
612
|
+
`,"utf8"),await $b(J,$)}catch(W){throw await Zb(J,{force:!0}).catch(()=>{}),W}}function rG($,Z){return{id:$,name:Z.name??$,supportsAttachments:Z.capabilities?.includes("files"),supportsVision:Z.capabilities?.includes("images"),supportsReasoning:Z.capabilities?.includes("reasoning")||Z.thinkingConfig!=null}}function nG($){if(!$||$.length===0)return;let Z=new Set;if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("tools"))Z.add("tools");return Z.size>0?[...Z]:void 0}function aG($){let Z=new Set;if(!$||$.length===0)return[...Z];if($.includes("streaming"))Z.add("streaming");if($.includes("tools"))Z.add("tools");if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("vision"))Z.add("images"),Z.add("files");return[...Z]}function Gb($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function oG($,Z){return $??Z??"openai-chat"}function sG($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function tG($,Z,Q){let J=new Set(Z?.capabilities??Q??[]);if(Z?.supportsVision!==void 0)if(Z.supportsVision)J.add("images");else J.delete("images");if(Z?.supportsAttachments!==void 0)if(Z.supportsAttachments)J.add("files");else J.delete("files");if(Z?.supportsReasoning!==void 0)if(Z.supportsReasoning)J.add("reasoning");else J.delete("reasoning");let W=Z?.apiFormat,X=Z?.inputPrice!==void 0||Z?.outputPrice!==void 0||Z?.cacheReadsPrice!==void 0||Z?.cacheWritesPrice!==void 0;return{id:$,name:Z?.name??$,...Z?.maxTokens!==void 0?{maxTokens:Z.maxTokens}:{},...Z?.contextWindow!==void 0?{contextWindow:Z.contextWindow}:{},...Z?.maxInputTokens!==void 0?{maxInputTokens:Z.maxInputTokens}:{},...J.size>0?{capabilities:[...J]}:{},...Z?.temperature!==void 0?{temperature:Z.temperature}:{},...W!==void 0?{apiFormat:W}:{},...X?{pricing:{...Z?.inputPrice!==void 0?{input:Z.inputPrice}:{},...Z?.outputPrice!==void 0?{output:Z.outputPrice}:{},...Z?.cacheReadsPrice!==void 0?{cacheRead:Z.cacheReadsPrice}:{},...Z?.cacheWritesPrice!==void 0?{cacheWrite:Z.cacheWritesPrice}:{}}}:{}}}function Fb($,Z){for(let[Q,J]of Object.entries(Z??{})){let W=J.id?.trim()||Q.trim();if(!W)continue;K0.registerModel($,W,tG(W,J))}}function Ub($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function Db($){return Object.assign({},...K0.resolveProviderModelCatalogKeys($).map((Q)=>K0.getGeneratedModelsForProvider(Q)))}function _b($){let Z=$.provider.trim();if(!Z||K0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let J=K0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],W=Db(Z),X=aG($.capabilities),j=X.length>0?X:void 0,Y=$.model?.trim(),V={...W,...J?.models??{}};if(Y)V[Y]=Ub(Y,V[Y],j);let B=Object.keys(V).filter(Boolean),H=Y||B[0];if(!H)return;let K=oG($.protocol,J?.provider.protocol),G=sG($.client,K,J?.provider.client);K0.registerProvider({provider:{id:Z,name:J?.provider.name??lG(Z),description:J?.provider.description,protocol:K,client:G,baseUrl:Q,modelsSourceUrl:J?.provider.modelsSourceUrl,defaultModelId:H,capabilities:nG($.capabilities)??J?.provider.capabilities,source:"file"},models:V})}function I9($){for(let Z of Object.values($.providers))_b(Z.settings)}function O8($,Z){let Q=Z.models??{};if(!Gb(Z.provider)){Fb($,Q);return}let J=aG(Z.provider.capabilities),W=Object.entries(Q).map(([B,H])=>({id:H.id?.trim()||B.trim(),model:H})).filter(({id:B})=>B.length>0),X=Z.provider.defaultModelId?.trim()||W[0]?.id||"default",j=oG(Z.provider.protocol,void 0),Y=sG(Z.provider.client,j,void 0),V=Object.fromEntries(W.map(({id:B,model:H})=>[B,{...tG(B,H,J.length>0?J:void 0),status:"active"}]));K0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||lG($),protocol:j,client:Y,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:X,capabilities:nG(Z.provider.capabilities),source:"file"},models:V})}function Lb($,Z,Q){let J=Q?.models??{},W=new Set;for(let[Y,V]of Object.entries(Z?.models??{})){if(Object.hasOwn(J,Y))continue;let B=V.id?.trim()||Y.trim();if(B)W.add(B),K0.unregisterModel($,B)}if(!Q)return;let X=K0.getProviderCollectionSync($);O8($,Q);let j=K0.getProviderCollectionSync($);if(X&&j&&j!==X){let Y=Object.fromEntries(Object.entries(X.models).filter(([V])=>!W.has(V)));K0.registerProvider({...j,models:{...Y,...j.models}})}}function SJ($){let Z=f$($);if(b9.has(Z))return;let Q=k9(Z);for(let[J,W]of Object.entries(Q.providers))O8(J,W);b9.add(Z)}async function eG($){let Z=f$($);if(b9.has(Z))return;let Q=await A8(Z);for(let[J,W]of Object.entries(Q.providers))O8(J,W);b9.add(Z)}import{existsSync as Ab,readFileSync as Ob}from"node:fs";import{dirname as qb,join as bJ}from"node:path";import*as g1 from"@cline/llms";import{ReasoningLevelSchema as zb}from"@cline/shared";import{resolveClineDataDir as Tb}from"@cline/shared/storage";var x9="openai",Nb=g1.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,fb=128000;function ZF($){let Z=$?.trim();if(!Z)return;try{let Q=JSON.parse(Z);if(!Q)return;let J=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:J,accountId:Q.userInfo?.id}}catch{return}}function M($){let Z=$?.trim();return Z?Z:void 0}function Rb($){return $==="credentials"?"iam":$}function $F($){if(!Ab($))return;try{let Z=Ob($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function Mb($){let Z=$.dataDir??Tb(),Q=$.globalStatePath??bJ(Z,"globalState.json"),J=$.secretsPath??bJ(Z,"secrets.json"),W=$F(Q),X=$F(J);if(!W&&!X)return;return{globalState:W??{},secrets:X??{}}}function yJ($){return g1.normalizeProviderId($)}function g9($){if($===x9)return $;return g1.normalizeProviderId($)}function Eb($,Z,Q,J){let W=Q==="plan"?"planMode":"actMode",X=Z===J?M(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,Y={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`}[Z];return(Y?M(typeof $[Y]==="string"?$[Y]:void 0):void 0)??X}function Cb($,Z,Q){let J=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,W=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(M).find(Boolean),X=zb.safeParse(W),j=X.success?X.data:void 0,Y=typeof J==="number"&&Number.isInteger(J)&&J>0?J:void 0;if(!j&&Y===void 0)return;return{...j?{effort:j}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function wb($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),J=M(Q.access_token),W=M(Q.refresh_token),X=M(Q.accountId);if(!J&&!W&&!X)return;return{...J?{apiKey:J}:{},auth:{...J?{accessToken:J}:{},...W?{refreshToken:W}:{},...X?{accountId:X}:{}}}}catch{return}}function Pb($){let Z=g1.getGeneratedModelsForProvider($),J=g1.getProviderCollectionSync($)?.provider.defaultModelId;if(J&&Z[J])return J;return Object.keys(Z)[0]??void 0}function Sb($,Z,Q,J){let W=yJ($),X=M(J==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),j=X?g9(X):void 0,Y=Eb(Z,$,J,j)??Pb(W),V=Cb(Z,W,J),B=typeof Z.requestTimeoutMs==="number"&&Number.isInteger(Z.requestTimeoutMs)&&Z.requestTimeoutMs>0?Z.requestTimeoutMs:void 0,H={anthropic:Q.apiKey,cline:Q.clineApiKey,openai:Q.openAiApiKey,"openai-native":Q.openAiNativeApiKey,openrouter:Q.openRouterApiKey,bedrock:Q.awsBedrockApiKey,gemini:Q.geminiApiKey,ollama:Q.ollamaApiKey,deepseek:Q.deepSeekApiKey,requesty:Q.requestyApiKey,together:Q.togetherApiKey,fireworks:Q.fireworksApiKey,qwen:Q.qwenApiKey,doubao:Q.doubaoApiKey,mistral:Q.mistralApiKey,litellm:Q.liteLlmApiKey,asksage:Q.asksageApiKey,xai:Q.xaiApiKey,moonshot:Q.moonshotApiKey,zai:Q.zaiApiKey,huggingface:Q.huggingFaceApiKey,nebius:Q.nebiusApiKey,sambanova:Q.sambanovaApiKey,cerebras:Q.cerebrasApiKey,groq:Q.groqApiKey,"huawei-cloud-maas":Q.huaweiCloudMaasApiKey,baseten:Q.basetenApiKey,"vercel-ai-gateway":Q.vercelAiGatewayApiKey,dify:Q.difyApiKey,minimax:Q.minimaxApiKey,hicap:Q.hicapApiKey,aihubmix:Q.aihubmixApiKey,nousResearch:Q.nousResearchApiKey,oca:Q.ocaApiKey},K={};if($==="openai-codex")Object.assign(K,wb(Q));if($==="cline")try{let D=M(Q["cline:clineAccountId"]);if(D)K.auth={...K.auth??{},...ZF(D)}}catch{}if($===x9&&Z.openAiHeaders)K.headers=Z.openAiHeaders;if($==="bedrock"){let D=Rb(Z.awsAuthentication),q=D==="profile"||Z.awsUseProfile===!0;K.aws={accessKey:M(Q.awsAccessKey),secretKey:M(Q.awsSecretKey),sessionToken:M(Q.awsSessionToken),region:M(Z.awsRegion),authentication:D,profile:q?M(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:M(Z.awsBedrockEndpoint),customModelBaseId:M(J==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")K.gcp={projectId:M(Z.vertexProjectId),region:M(Z.vertexRegion)};if($===x9&&(Z.azureApiVersion||Z.azureIdentity!==void 0))K.azure={apiVersion:M(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let D=Z.sapAiCoreUseOrchestrationMode??!0;K.sap={clientId:M(Q.sapAiCoreClientId),clientSecret:M(Q.sapAiCoreClientSecret),tokenUrl:M(Z.sapAiCoreTokenUrl),resourceGroup:M(Z.sapAiResourceGroup),deploymentId:D?void 0:M(J==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:D}}if($==="oca"){K.oca={mode:Z.ocaMode};let D=M(Q.ocaRefreshToken);if(D)K.auth={...K.auth??{},refreshToken:D}}if($==="qwen")K.apiLine=Z.qwenApiLine;if($==="moonshot")K.apiLine=Z.moonshotApiLine;if($==="zai")K.apiLine=Z.zaiApiLine;if($==="minimax")K.apiLine=Z.minimaxApiLine;let G={anthropic:Z.anthropicBaseUrl,openai:Z.openAiBaseUrl,ollama:Z.ollamaBaseUrl,lmstudio:Z.lmStudioBaseUrl,litellm:Z.liteLlmBaseUrl,gemini:Z.geminiBaseUrl,requesty:Z.requestyBaseUrl,asksage:Z.asksageApiUrl,dify:Z.difyBaseUrl,oca:Z.ocaBaseUrl,aihubmix:Z.aihubmixBaseUrl,sapaicore:Z.sapAiCoreBaseUrl},F=M(H[$]),U=M(G[$]),_={provider:W,...F?{apiKey:F}:{},...Y?{model:Y}:{},...U?{baseUrl:U}:{},...V?{reasoning:V}:{},...B?{timeout:B}:{},...K},L=$4.safeParse(_);if(!L.success)return;return Object.keys(_).filter((D)=>D!=="provider").length>0?L.data:void 0}function Q4($){return typeof $==="number"&&Number.isFinite($)&&$>0?$:void 0}function bb($,Z,Q){if($!==Nb)return;if(!Z.baseUrl||!Z.model)return;let J=Q4(Q?.contextWindow)??fb,W=Q4(Q?.maxTokens),X=Q4(Q?.inputPrice),j=Q4(Q?.outputPrice),Y=Q4(Q?.temperature),V=["streaming","tools"];if(Q?.supportsImages!==!1)V.push("images");if(Q?.supportsPromptCache===!0)V.push("prompt-cache");return{provider:{name:"OpenAI Compatible",baseUrl:Z.baseUrl,defaultModelId:Z.model},models:{[Z.model]:{id:Z.model,name:Z.model,contextWindow:J,maxInputTokens:J,capabilities:V,...W!==void 0?{maxTokens:W}:{},...X!==void 0?{inputPrice:X}:{},...j!==void 0?{outputPrice:j}:{},...Y!==void 0?{temperature:Y}:{}}}}}function yb($,Z){let Q=new Set;for(let W of[$.actModeApiProvider,$.planModeApiProvider]){let X=M(W);if(X)Q.add(g9(X))}if(M(Z.apiKey))Q.add("anthropic");if(M(Z.openRouterApiKey))Q.add("openrouter");if(M(Z.openAiApiKey))Q.add(x9);if(M(Z.openAiNativeApiKey))Q.add("openai-native");if(M(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(M(Z.geminiApiKey))Q.add("gemini");if(M(Z.ollamaApiKey))Q.add("ollama");if(M(Z.deepSeekApiKey))Q.add("deepseek");if(M(Z.requestyApiKey))Q.add("requesty");if(M(Z.togetherApiKey))Q.add("together");if(M(Z.fireworksApiKey))Q.add("fireworks");if(M(Z.qwenApiKey))Q.add("qwen");if(M(Z.doubaoApiKey))Q.add("doubao");if(M(Z.mistralApiKey))Q.add("mistral");if(M(Z.liteLlmApiKey))Q.add("litellm");if(M(Z.asksageApiKey))Q.add("asksage");if(M(Z.xaiApiKey))Q.add("xai");if(M(Z.moonshotApiKey))Q.add("moonshot");if(M(Z.zaiApiKey))Q.add("zai");if(M(Z.huggingFaceApiKey))Q.add("huggingface");if(M(Z.nebiusApiKey))Q.add("nebius");if(M(Z.sambanovaApiKey))Q.add("sambanova");if(M(Z.cerebrasApiKey))Q.add("cerebras");if(M(Z.groqApiKey))Q.add("groq");if(M(Z.huaweiCloudMaasApiKey))Q.add("huawei-cloud-maas");if(M(Z.basetenApiKey))Q.add("baseten");if(M(Z.vercelAiGatewayApiKey))Q.add("vercel-ai-gateway");if(M(Z.difyApiKey))Q.add("dify");if(M(Z.minimaxApiKey))Q.add("minimax");if(M(Z.hicapApiKey))Q.add("hicap");if(M(Z.aihubmixApiKey))Q.add("aihubmix");if(M(Z.nousResearchApiKey))Q.add("nousResearch");if(M(Z.awsAccessKey)||M(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||M($.awsProfile))Q.add("bedrock");if(M($.vertexProjectId)||M($.vertexRegion))Q.add("vertex");if(M(Z.clineApiKey))Q.add("cline");let J=ZF(M(Z["cline:clineAccountId"]));if(J?.accessToken||J?.refreshToken||J?.accountId)Q.add("cline");if(M(Z.ocaApiKey))Q.add("oca");if(M(Z.sapAiCoreClientId)||M(Z.sapAiCoreClientSecret)||M($.sapAiCoreTokenUrl)||M($.sapAiCoreBaseUrl)||M($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function kJ($){let Z=$.providerSettingsManager.read(),Q=Mb($);if(!Q)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let{globalState:J,secrets:W}=Q,X=J.mode==="plan"?"plan":"act",j=X==="plan"?"act":"plan",Y=M(X==="plan"?J.planModeApiProvider:J.actModeApiProvider),V=Y?g9(Y):void 0,B=M(X==="plan"?J.actModeApiProvider:J.planModeApiProvider),H=B?g9(B):void 0,K=yb(J,W),G=L8();G.providers={...Z.providers},G.lastUsedProvider=Z.lastUsedProvider;let F=new Date().toISOString(),U=0,_=bJ(qb($.providerSettingsManager.getFilePath()),"models.json"),L=k9(_),O=0;for(let T of K){let z=yJ(T);if(G.providers[z])continue;let A=T!==V&&T===H?j:X,f=Sb(T,J,W,A);if(!f)continue;G.providers[z]={settings:f,updatedAt:F,tokenSource:"migration"},U+=1;let N=bb(z,f,A==="plan"?J.planModeOpenAiModelInfo:J.actModeOpenAiModelInfo);if(N&&!L.providers[z])L.providers[z]=N,O+=1}if(U===0&&O===0)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let D=M(X==="plan"?J.planModeApiProvider:J.actModeApiProvider),q=D?yJ(D):void 0;if(G.lastUsedProvider=Z.lastUsedProvider??(q&&G.providers[q]?q:Object.keys(G.providers)[0]),$.providerSettingsManager.write(G),O>0)PJ(_,L);return{migrated:U>0||O>0,providerCount:Object.keys(G.providers).length,lastUsedProvider:G.lastUsedProvider}}function mb(){return new Date().toISOString()}var cb="cline",ub="cline-pass";function db($){if(JF($)!=="providers.json")return;let Z=IJ($);if(JF(Z)!=="settings")return;return IJ(Z)}class R${filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??vb(),this.dataDir=$.dataDir??db(this.filePath),this.dataDir||!$.filePath)kJ({providerSettingsManager:this,dataDir:this.dataDir});if(SJ(this),I9(this.read()),hJ(this.filePath))try{QF(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!hJ(this.filePath))return L8();try{let $=hb(this.filePath,"utf8"),Z=JSON.parse($),Q=P9.safeParse(Z);if(Q.success){I9(Q.data);let J=Q.data.providers.cline?.settings?.auth;return s(`providers.read providers=[${Object.keys(Q.data.providers).join(",")}] lastUsed=${Q.data.lastUsedProvider??"none"} clineAuthPresent=${!!J?.accessToken} clineAccessTokenHash=${y0(J?.accessToken)} clineRefreshTokenHash=${y0(J?.refreshToken)}`),Q.data}}catch{}return L8()}write($){let Z=P9.parse($),Q=IJ(this.filePath);if(!hJ(Q))kb(Q,{recursive:!0,mode:448});let J=`${this.filePath}.${process.pid}.tmp`;try{gb(J,`${JSON.stringify(Z,null,2)}
|
|
613
|
+
`,{encoding:"utf8",mode:384}),Ib(J,this.filePath)}catch(W){throw xb(J,{force:!0}),W}try{QF(this.filePath,384)}catch{}I9(Z)}saveProviderSettings($,Z={}){let Q=$4.parse($),J=this.read(),W=Q.provider,X=Z.setLastUsed!==!1,j=J.providers[W],Y=Z.tokenSource??j?.tokenSource??"manual",V={...J,providers:{...J.providers,[W]:{settings:Q,updatedAt:mb(),tokenSource:Y}},lastUsedProvider:X?W:J.lastUsedProvider};this.write(V);let B=J.providers.cline?.settings?.auth,H=Q.provider==="cline"?Q.auth:V.providers.cline?.settings?.auth,K=!!B?.accessToken&&!H?.accessToken;return s(`providers.save providerId=${W} tokenSource=${Y} clineAuthWasPresent=${!!B?.accessToken} clineAuthIsPresent=${!!H?.accessToken} authDropped=${K}`),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,W=z0(Z)?.storageProviderId;if(!W||W===Z)return Q;let X=$.providers[W]?.settings;if(!X)return Q;return $4.parse({...X.auth?{auth:X.auth}:{},...X.apiKey?{apiKey:X.apiKey}:{},...X.baseUrl?{baseUrl:X.baseUrl}:{},...Q??{},provider:Z})}getProviderSettings($){let Z=this.read();return this.resolveProviderSettings(Z,$)}resolveLastUsedProviderId($,Z){let Q=$.lastUsedProvider;if(Q===ub&&Z.isClinePassEnabled===!1)return cb;return Q}getLastUsedProviderSettings($={}){let Z=this.read(),Q=this.resolveLastUsedProviderId(Z,$);if(!Q)return;return this.resolveProviderSettings(Z,Q)}getProviderConfig($,Z){let Q=this.getProviderSettings($);if(!Q)return;return N1(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return N1(Z,$)}async refreshCatalog(){try{await P2({})}catch{}}}q0();H2();import{mkdir as pb,writeFile as lb}from"node:fs/promises";import{join as ib}from"node:path";import{AGENTS_RULES_FILE_NAME as rb,resolveChatWorkspacePath as nb}from"@cline/shared/storage";var ab=`# Cline chat workspace
|
|
614
614
|
|
|
615
615
|
This directory is Cline's shared workspace for chat sessions that were
|
|
616
616
|
started without a project. It is not a project of its own, and other chat
|
|
@@ -628,10 +628,10 @@ Projects from earlier chat sessions may already exist as folders here; the
|
|
|
628
628
|
user may refer back to them. Never assume loose files in this directory
|
|
629
629
|
belong to the current conversation, and keep new work inside a named folder
|
|
630
630
|
rather than at the top level.
|
|
631
|
-
`;async function
|
|
632
|
-
`).map((J)=>J.trim()).filter(Boolean).map((J)=>{try{return JSON.parse(J)}catch{return}}).filter((J)=>J!==void 0).reverse().slice(0,Z)}loadRuntime($){let Z=this.readEnvelope($);return{state:Z?.teamState?
|
|
633
|
-
`,"utf8")}persistRuntime($,Z,Q){this.ensureTeamSubdir($);let J={version:1,updatedAt:
|
|
634
|
-
`,"utf8"),
|
|
631
|
+
`;async function ob(){let $=nb();await pb($,{recursive:!0,mode:448});let Z=ib($,rb);try{await lb(Z,ab,{flag:"wx"})}catch(Q){if(Q.code!=="EEXIST")throw Q}return $}async function WF($){let Z=$.cwd?.trim()??"",Q=$.workspaceRoot?.trim()??"",J=Z||Q||await ob();return{...$,cwd:Z||J,workspaceRoot:Q||J}}import{execFile as sb}from"node:child_process";import{randomUUID as tb}from"node:crypto";import{promisify as eb}from"node:util";var W0=eb(sb);async function XF($,Z){try{return(await W0("git",["-C",$,"rev-parse","--verify","--quiet",Z],{windowsHide:!0})).stdout.trim()||void 0}catch{return}}async function jF($){if((await W0("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);let Q=(await W0("git",["-C",$,"rev-parse","--verify","HEAD"],{windowsHide:!0})).stdout.trim(),J=await XF($,"refs/stash"),W=tb(),X=`refs/cline/restore-transactions/${W}`;await W0("git",["-C",$,"stash","push","--include-untracked","--message",`cline restore transaction ${W}`],{windowsHide:!0});let j=await XF($,"refs/stash"),Y=j!==void 0&&j!==J;if(Y)try{await W0("git",["-C",$,"update-ref",X,j],{windowsHide:!0}),await W0("git",["-C",$,"stash","drop","stash@{0}"],{windowsHide:!0})}catch(B){try{await W0("git",["-C",$,"reset","--hard",Q],{windowsHide:!0}),await W0("git",["-C",$,"clean","-fd"],{windowsHide:!0}),await W0("git",["-C",$,"stash","apply","--index",j],{windowsHide:!0})}catch(H){throw AggregateError([B,H],"Workspace snapshot and rollback both failed")}throw B}let V=!1;return{async commit(){if(V)return;if(V=!0,!Y)return;await W0("git",["-C",$,"update-ref","-d",X],{windowsHide:!0}).catch(()=>{return})},async rollback(){if(V)return;if(await W0("git",["-C",$,"reset","--hard",Q],{windowsHide:!0}),await W0("git",["-C",$,"clean","-fd"],{windowsHide:!0}),Y)await W0("git",["-C",$,"stash","apply","--index",X],{windowsHide:!0}),await W0("git",["-C",$,"update-ref","-d",X],{windowsHide:!0});V=!0}}}function J4($){let Z=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(Z?.history)?Z.history:[]).filter((J)=>!!J&&typeof J==="object"&&!Array.isArray(J)).flatMap((J)=>{let W=String(J.ref??"").trim(),X=Number(J.createdAt??0),j=Number(J.runCount??0);if(W.length===0||!Number.isFinite(X)||!Number.isInteger(j)||j<1)return[];let Y=J.kind==="stash"||J.kind==="commit"?J.kind:void 0;return[{ref:W,createdAt:X,runCount:j,...Y?{kind:Y}:{}}]})}function xJ($,Z){let Q=J4($).filter((W)=>W.runCount<=Z),J=Q.at(-1);return J?{latest:J,history:Q}:void 0}function v9($,Z){return $.reduce((Q,J)=>{if(J.runCount>Z)return Q;if(!Q||J.runCount>Q.runCount)return J;return Q},void 0)}function YF($,Z){let Q=0;for(let J=0;J<$.length;J+=1){let W=$[J];if(!W)continue;let X=q$(W);if(X<1)continue;let j=Q+1;if(Q+=X,Q===Z)return{index:J,span:X};if(Q>Z)throw Error(`Run ${Z} is folded into a compacted message spanning runs ${j}-${Q}`)}throw Error(`Could not find user message for run ${Z}`)}function $y($,Z){let{index:Q}=YF($,Z);return $.slice(0,Q+1)}function gJ($,Z){let{index:Q,span:J}=YF($,Z);if(J!==1)throw Error(`Cannot fork before run ${Z} because it is folded into a compacted message`);return $.slice(0,Q)}function VF($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=v9(J4($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let J=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!J)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:J,...$.restoreMessages!==!1?{messages:$y($.messages??[],Z)}:{}}}async function Zy($,Z){if(Z.kind)return Z.kind;let Q=await W0("git",["-C",$,"show","-s","--format=%P%x00%B",Z.ref],{windowsHide:!0}),J=Q.stdout.indexOf("\x00"),W=J<0?[]:Q.stdout.slice(0,J).trim().split(/\s+/).filter(Boolean),X=J<0?"":Q.stdout.slice(J+1);return W.length>=2&&TK(X)?"stash":"commit"}async function BF($,Z){if((await W0("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);await W0("git",["-C",$,"cat-file","-e",`${Z.ref}^{commit}`],{windowsHide:!0});let J=await Zy($,Z),W=J==="commit"?Z.ref:`${Z.ref}^1`;if(await W0("git",["-C",$,"cat-file","-e",`${W}^{commit}`],{windowsHide:!0}),J==="stash")await W0("git",["-C",$,"cat-file","-e",`${Z.ref}^2^{commit}`],{windowsHide:!0});if(await W0("git",["-C",$,"reset","--hard",W],{windowsHide:!0}),await W0("git",["-C",$,"clean","-fd"],{windowsHide:!0}),J==="commit")return;await W0("git",["-C",$,"stash","apply",Z.ref],{windowsHide:!0})}class e0 extends Error{code;constructor($,Z){super(Z);this.code=$;this.name="SessionVersioningError"}}function Qy($){let Z=$.sessionId.trim();if(!Z)throw new e0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new e0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new e0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new e0("invalid_restore","checkpointRunCount must be a positive integer");return Z}class q8{async restoreCheckpoint($){let Z=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,J=Qy({sessionId:$.sessionId,restoreMessages:Z,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),W=await $.getSession(J);if(!W)throw new e0("session_not_found",`Session ${J} not found`);let X=Z?await $.readMessages(J):void 0;if(Z&&X?.length===0)throw new e0("session_messages_not_found",`No messages found for session ${J}`);let j=VF({session:W,messages:X,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:Z}),Y=_$({session:W,messages:X}),V,B=[],H,K;if(Z){let{startSession:O,getStartedSessionId:D,cleanupStartedSession:q}=$;if(!$.start||!O||!D||!q)throw new e0("invalid_restore","startSession, getStartedSessionId, and cleanupStartedSession are required when restore.messages is true");K={startSession:O,getStartedSessionId:D,cleanupStartedSession:q},V=xJ(W,$.checkpointRunCount),B=$.restore?.omitCheckpointMessageFromSession?gJ(X??[],$.checkpointRunCount):j.messages??[];let T={sourceSession:W,sourceMessages:X,sourceSnapshot:Y,plan:j,restoredCheckpointMetadata:V,initialMessages:B,restoreMessages:Z,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};H=$.buildStartInput?await $.buildStartInput(T,$.start):$.start}let G=$.applyWorkspaceCheckpoint??BF,F=$.beginWorkspaceRestoreTransaction??($.applyWorkspaceCheckpoint?void 0:jF),U=Q&&F?await F(j.cwd):void 0,_=!1,L;try{if(Q)await G(j.cwd,j.checkpoint);if(!K)return await U?.commit(),_=!0,{checkpoint:j.checkpoint,sourceSnapshot:Y};let O=await K.startSession(H);L={result:O,cleanup:K.cleanupStartedSession};let D=K.getStartedSessionId(O);if(!D)throw new e0("invalid_restore","Restored session did not return a session id");await($.retainCheckpointRefs??NK)(j.cwd,D,V?.history??[]);let q=$.readRestoredSession?await $.readRestoredSession(D):void 0,T=q?_$({session:q,messages:B}):void 0;return await U?.commit(),_=!0,{sessionId:D,startResult:O,messages:j.messages,checkpoint:j.checkpoint,sourceSnapshot:Y,...T?{restoredSnapshot:T}:{}}}catch(O){let D=[];if(L)try{await L.cleanup(L.result)}catch(q){D.push(q)}if(U&&!_)try{await U.rollback()}catch(q){D.push(q)}if(D.length>0)throw AggregateError([O,...D],"Checkpoint restore failed and recovery did not complete");throw O}}}import{hasRuntimeConfigExtension as _y,resolveMcpTimeoutSeconds as Ly}from"@cline/shared";import{nanoid as Ay}from"nanoid";J1();import{appendFileSync as Jy,existsSync as z8,mkdirSync as HF,readdirSync as Wy,readFileSync as KF,renameSync as Xy,writeFileSync as jy}from"node:fs";import{join as vJ}from"node:path";import{resolveTeamDataDir as Yy}from"@cline/shared/storage";function GF(){return new Date().toISOString()}function mJ($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function FF($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class m9{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??Yy()}init(){this.ensureTeamDir()}listTeamNames(){if(!z8(this.teamDirPath))return[];return Wy(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>z8(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let Z=this.readEnvelope($);return Z?.teamState?FF(Z.teamState):void 0}readHistory($,Z=200){let Q=this.historyPath($);if(!z8(Q))return[];return KF(Q,"utf8").split(`
|
|
632
|
+
`).map((J)=>J.trim()).filter(Boolean).map((J)=>{try{return JSON.parse(J)}catch{return}}).filter((J)=>J!==void 0).reverse().slice(0,Z)}loadRuntime($){let Z=this.readEnvelope($);return{state:Z?.teamState?FF(Z.teamState):void 0,teammates:Z?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,Z){this.ensureTeamSubdir($),Jy(this.historyPath($),`${JSON.stringify({ts:GF(),eventType:Z.type,payload:Z})}
|
|
633
|
+
`,"utf8")}persistRuntime($,Z,Q){this.ensureTeamSubdir($);let J={version:1,updatedAt:GF(),teamState:Z,teammates:Q},W=this.statePath($),X=`${W}.tmp`;jy(X,`${JSON.stringify(J,null,2)}
|
|
634
|
+
`,"utf8"),Xy(X,W)}markInProgressRunsInterrupted($,Z){let Q=this.readEnvelope($);if(!Q?.teamState?.runs?.length)return[];let J=Q.teamState.runs.filter((X)=>X.status==="queued"||X.status==="running").map((X)=>X.id);if(J.length===0)return[];let W=new Date;return Q.teamState={...Q.teamState,runs:Q.teamState.runs.map((X)=>X.status==="queued"||X.status==="running"?{...X,status:"interrupted",error:Z,endedAt:W}:X)},this.persistRuntime($,Q.teamState,Q.teammates),J}ensureTeamDir(){if(!z8(this.teamDirPath))HF(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let Z=vJ(this.ensureTeamDir(),mJ($));if(!z8(Z))HF(Z,{recursive:!0});return Z}statePath($){return vJ(this.ensureTeamDir(),mJ($),"state.json")}historyPath($){return vJ(this.ensureTeamDir(),mJ($),"task-history.jsonl")}readEnvelope($){let Z=this.statePath($);if(!z8(Z))return;try{let Q=JSON.parse(KF(Z,"utf8"));if(Q?.version===1&&Q.teamState)return Q}catch{}return}}import{existsSync as Vy,mkdirSync as By}from"node:fs";import{join as Hy}from"node:path";import{safeJsonParse as UF}from"@cline/shared";import{loadSqliteDb as Ky,nowIso as cJ}from"@cline/shared/db";import{resolveDbDataDir as Gy}from"@cline/shared/storage";function Fy(){return Gy()}function T8($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function Uy($){let Z=UF($);if(!Array.isArray(Z))return[];let Q=[];for(let J of Z){if(!J||typeof J!=="object")continue;let W=J,X=W.agentId,j=W.rolePrompt;if(typeof X!=="string"||!X.trim())continue;if(typeof j!=="string"||!j.trim())continue;let Y={agentId:X.trim(),rolePrompt:j};if(typeof W.modelId==="string"&&W.modelId.trim())Y.modelId=W.modelId.trim();if(typeof W.maxIterations==="number"&&Number.isFinite(W.maxIterations))Y.maxIterations=Math.max(1,Math.floor(W.maxIterations));Q.push(Y)}return Q}function Dy($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class W4{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??Fy()}init(){this.getRawDb()}ensureTeamDir(){if(!Vy(this.teamDirPath))By(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return Hy(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=Ky(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
|
|
635
635
|
CREATE TABLE IF NOT EXISTS team_store_schema_version (
|
|
636
636
|
lock INTEGER PRIMARY KEY CHECK (lock = 1),
|
|
637
637
|
version INTEGER NOT NULL
|
|
@@ -715,8 +715,8 @@ rather than at the top level.
|
|
|
715
715
|
version INTEGER NOT NULL DEFAULT 1,
|
|
716
716
|
PRIMARY KEY(team_name, fragment_id)
|
|
717
717
|
);
|
|
718
|
-
`)}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}withTransaction($){let Z=this.getRawDb();Z.exec("BEGIN IMMEDIATE;");try{$(),Z.exec("COMMIT;")}catch(Q){try{Z.exec("ROLLBACK;")}catch{}throw Q}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let Z=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[
|
|
719
|
-
VALUES (?, ?, ?, ?, NULL, ?)`,[
|
|
718
|
+
`)}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}withTransaction($){let Z=this.getRawDb();Z.exec("BEGIN IMMEDIATE;");try{$(),Z.exec("COMMIT;")}catch(Q){try{Z.exec("ROLLBACK;")}catch{}throw Q}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let Z=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[T8($)]);if(!Z)return;let Q=UF(Z.state_json);if(!Q)return;try{return Dy(Q)}catch{return}}readHistory($,Z=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[T8($),Z]).flatMap((Q)=>{try{return[{eventType:Q.event_type,payload:JSON.parse(Q.payload_json),ts:Q.ts}]}catch{return[]}})}loadRuntime($){let Z=T8($),Q=this.readState(Z),J=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[Z]),W=J?Uy(J.teammates_json):[];return{state:Q,teammates:W,interruptedRunIds:[]}}appendTeamEvent($,Z,Q,J){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
|
|
719
|
+
VALUES (?, ?, ?, ?, NULL, ?)`,[T8($),cJ(),Z,JSON.stringify(Q),J??null])}persistRuntime($,Z,Q){let J=T8($),W=cJ();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
|
|
720
720
|
VALUES (?, ?, ?, ?)
|
|
721
721
|
ON CONFLICT(team_name) DO UPDATE SET
|
|
722
722
|
state_json = excluded.state_json,
|
|
@@ -761,41 +761,41 @@ rather than at the top level.
|
|
|
761
761
|
status = excluded.status,
|
|
762
762
|
reviewed_by = excluded.reviewed_by,
|
|
763
763
|
reviewed_at = excluded.reviewed_at,
|
|
764
|
-
version = team_outcome_fragments.version + 1`,[J,X.outcomeId,X.id,X.section,X.sourceAgentId,X.sourceRunId??null,X.content,X.status,X.reviewedBy??null,X.reviewedAt?X.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,Z){let Q=
|
|
765
|
-
WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,W,Q]),J.map((X)=>X.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function UF($={}){try{let Z=new J4($);return Z.init(),Z}catch{let Z=new m9({teamDir:$.teamDir});return Z.init(),Z}}function c9($,Z){return Dy($,Z)}function Ay($,Z){let Q=Z?.["*"]??{},J=Z?.[$]??{};return{...Q,...J}.enabled!==!1}function Oy($,Z){return $.filter((Q)=>Ay(Q.name,Z))}function uJ($,Z){return e1(Oy($,Z))}var qy={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 zy($){let Z=$.trim().toLowerCase();return qy[Z]??Z}function Ty($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(zy));if(Z.skills!==void 0)Q.add("skills");return $.filter((J)=>Q.has(J.name))}function DF(){return`team-${Ly(5)}`}function u9($,Z,Q,J,W,X,j,Y,V){let B=K1[X$({mode:Q})],H=n8(Z,J,Q,W??r8);return uJ(J6({cwd:$,telemetry:V,...B,enableSkills:!!j,...H,executors:{...j?{skills:j}:{},...Y??{}}}),X)}function Ny($){return u9($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,fy,$.toolExecutors).some((Z)=>Z.name==="skills")}var fy=async()=>"";async function Ry($){let Z=j0();if(!a$({filePath:Z}))return{tools:[]};let Q=new G6({clientFactory:u5({settingsPath:Z})}),J;try{J=await H6(Q,{filePath:Z})}catch(Y){await Q.dispose().catch(()=>{});let V=Y instanceof Error?Y.message:String(Y);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let W=J.filter((Y)=>Y.disabled!==!0),X=await Promise.allSettled(W.map((Y)=>p5({serverName:Y.name,provider:Q,timeoutMs:_y(Y.timeoutSeconds)*1000}))),j=[];for(let[Y,V]of X.entries())if(V.status==="fulfilled")j.push(...V.value);else{let B=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${W[Y].name}", skipping: ${B}`)}return{tools:j,shutdown:async()=>{await Q.dispose()}}}function My($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function Ey($){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 Cy($){let Z=K1[X$({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??Z.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??Z.enableAgentTeams??!0,disableMcpSettingsTools:$.disableMcpSettingsTools===!0,yolo:$.yolo===!0,missionLogIntervalSteps:typeof $.missionLogIntervalSteps==="number"&&Number.isFinite($.missionLogIntervalSteps)?$.missionLogIntervalSteps:3,missionLogIntervalMs:typeof $.missionLogIntervalMs==="number"&&Number.isFinite($.missionLogIntervalMs)?$.missionLogIntervalMs:120000}}class d9{teamRuntimeEntries=new Map;async build($){let{config:Z,hooks:Q,extensions:J,logger:W,telemetry:X,createSpawnTool:j,onTeamRestored:Y,userInstructionService:V,configExtensions:B,toolExecutors:H}=$,K=$.onTeamEvent??(()=>{}),G=Cy(Z),F=Z.workspaceRoot??Z.cwd,U=$.toolPolicies??Z.toolPolicies,_=f1(),L=[],O=Z.teamName?.trim()||DF(),D=Z.sessionId?.trim()||O,q=G.enableSpawnAgent?F9({workspaceRoot:F}):{configs:[],errors:[]},T=q.configs.some((u)=>u.skills!==void 0),z=c9(B,"rules"),A=c9(B,"skills"),f=A||T,N=c9(B,"workflows"),C=c9(B,"plugins"),P=z||A||N,n=!1,g=Boolean(V),w=V,p;for(let u of q.errors)(W??Z.logger)?.log?.(`[agents] Failed to load agent config at ${u.path}: ${u.error.message}`);if(!w&&(P||T))w=s2({skills:f?{workspacePath:F,includePluginSkills:C,pluginSkillDirectories:C?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(w)await w.start().catch(()=>{});let G0=G.enableTools&&A&&Boolean(w)&&w?.hasConfiguredSkills(Z.skills)===!0&&Ny({cwd:Z.cwd,providerId:Z.providerId,mode:G.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:U,toolExecutors:H}),d1=w&&P?w.createExtension({includeRules:z,includeSkills:A,includeWorkflows:N,registerSkillsTool:G0,allowedSkillNames:Z.skills}):void 0,p1=d1?[...J??Z.extensions??[],d1]:J??Z.extensions;if(G.enableTools){if(L.push(...u9(Z.cwd,Z.providerId,G.mode,Z.modelId,Z.toolRoutingRules,U,void 0,H,X??Z.telemetry)),!G.disableMcpSettingsTools){let u=await Ry(Z.logger);L.push(...u.tools),p=u.shutdown}}let Z0,q1=G.enableAgentTeams?UF():void 0,l1=q1?.loadRuntime(D),V1=l1?.state,g0=l1?.teammates??[],i1=new Map(g0.map((u)=>[u.agentId,u])),L0=Z.sessionId||O,w0,B1=[],v=!1,b0=n2({providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey??"",baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,reasoningEffort:Z.reasoningEffort,thinkingBudgetTokens:Z.thinkingBudgetTokens,maxTokensPerTurn:Z.maxTokensPerTurn,temperature:Z.temperature,maxIterations:Z.maxIterations,hooks:Q,extensions:p1,logger:W??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(G.enableSpawnAgent){if(q.configs.length>0)L.push(...uJ(D9({configProvider:b0,agents:q.configs,createSubAgentTools:(u)=>G.enableTools?Ty(u9(Z.cwd,u.providerId??Z.providerId,G.mode,u.modelId??Z.modelId,Z.toolRoutingRules,U,u.skills!==void 0&&w?.createSkillsExecutor?w.createSkillsExecutor(u.skills):void 0,H,X??Z.telemetry),u):[],hookErrorMode:Z.hookErrorMode,toolPolicies:U,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),U))}if(!this.teamRuntimeEntries.has(L0))this.teamRuntimeEntries.set(L0,{delegatedAgentConfigProvider:b0});let y=()=>{if(!G.enableAgentTeams)return;let u=this.teamRuntimeEntries.get(L0)??{delegatedAgentConfigProvider:b0};if(this.teamRuntimeEntries.set(L0,u),Z0=u.runtime,!Z0){if(Z0=new d6({teamName:O,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:G.missionLogIntervalSteps,missionLogIntervalMs:G.missionLogIntervalMs,onTeamEvent:(V0)=>{if(K(V0),Z0&&q1){if(V0.type==="teammate_spawned"&&V0.teammate?.rolePrompt){let z1={agentId:V0.agentId,rolePrompt:V0.teammate.rolePrompt,modelId:V0.teammate.modelId,maxIterations:V0.teammate.maxIterations};i1.set(z1.agentId,z1)}if(V0.type==="teammate_shutdown"&&!Ey(V0.reason))i1.delete(V0.agentId);q1.handleTeamEvent(D,V0),q1.persistRuntime(D,Z0.exportState(),Array.from(i1.values()))}}}),V1)Z0.hydrateState(V1),v=!0;u.runtime=Z0}if(!n){if(!Z0)return;n=!0;let V0=k5({runtime:Z0,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(V1),restoredTeammates:g0,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(z1)=>{B1=z1,w0?.addTools(z1)},createBaseTools:G.enableTools?()=>u9(Z.cwd,Z.providerId,G.mode,Z.modelId,Z.toolRoutingRules,U,void 0,H,X??Z.telemetry):void 0,teammateConfigProvider:b0});if(v)Z0.recoverActiveRuns("runtime_recovered");if(V0.restoredFromPersistence)Y?.();L.push(...V0.tools)}return Z0};if(G.enableSpawnAgent&&j){let u=j();L.push({...u,execute:async(V0,z1)=>{return y(),u.execute(V0,z1)}})}if(G.enableAgentTeams)y();let Y0=uJ(L,U),A0=Y0.some((u)=>u.name==="submit_and_exit"&&u.lifecycle?.completesRun===!0),O0=G.enableAgentTeams?()=>{let u=this.teamRuntimeEntries.get(L0)?.runtime;if(!u)return;let V0=u.listTasks(),z1=V0.some((r1)=>r1.status==="in_progress"||r1.status==="pending"),VX=u.listRuns({}),Q_=VX.some((r1)=>r1.status==="running"||r1.status==="queued");if(z1||Q_){let r1=V0.filter((p0)=>p0.status==="in_progress"||p0.status==="pending").map((p0)=>`${p0.id} (${p0.status}): ${p0.title}`).join(", "),BX=VX.filter((p0)=>p0.status==="running"||p0.status==="queued").map((p0)=>`${p0.id} (${p0.status})`).join(", "),fZ=[];if(r1)fZ.push(`Unfinished tasks: ${r1}`);if(BX)fZ.push(`Active runs: ${BX}`);return`[SYSTEM] You still have team obligations. ${fZ.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,S$=A0?{requireCompletionTool:!0,...O0?{completionGuard:O0}:{}}:O0?{completionGuard:O0}:void 0;return{tools:Y0,logger:W??Z.logger,telemetry:X??Z.telemetry,teamRuntime:Z0,teamRestoredFromPersistence:Boolean(V1),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(L0)?.delegatedAgentConfigProvider??b0,extensions:p1,completionPolicy:S$,registerLeadAgent:(u)=>{if(w0=u,B1.length>0)u.addTools(e1(B1,[..._]))},shutdown:async(u)=>{if(My(Z0,u),this.teamRuntimeEntries.delete(L0),await p?.(),!g)w?.stop()}}}}function wy($,Z){let Q=$?.expiresAt,J=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===J}class W4 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 p9{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new R$,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=z0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let J=this.refreshInFlight.get(Z);if(J)return J;let W=this.resolveProviderApiKeyInternal($,Z,Q).catch((X)=>{throw X}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,W),W}async resolveProviderApiKeyInternal($,Z,Q){let J=z0($);if(!J)return null;let W=this.providerSettingsManager.getProviderSettings(Z);if(!W)return s(`oauth.resolve providerId=${$} storageProviderId=${Z} outcome=no_settings`),null;let X=HQ($,W);if(!X)return s(`oauth.resolve providerId=${$} storageProviderId=${Z} outcome=no_credentials`),null;s(`oauth.resolve.start providerId=${$} storageProviderId=${Z} forceRefresh=${Q} accessTokenHash=${y0(X.access)} refreshTokenHash=${y0(X.refresh)}`);let j=await J.refresh({settings:W,credentials:X,forceRefresh:Q,telemetry:this.telemetry});if(!j)throw s(`oauth.resolve providerId=${$} outcome=refresh_returned_null`),new W4($);let Y=b8({manager:this.providerSettingsManager,providerId:$,settings:W,credentials:j,setLastUsed:!1,save:!1}),V=!wy(W.auth,Y.auth);if(V)s(`oauth.resolve.refreshed providerId=${$} newAccessTokenHash=${y0(j.access)} newRefreshTokenHash=${y0(j.refresh)} savingToDisk=true`),this.providerSettingsManager.saveProviderSettings(Y,{setLastUsed:!1,tokenSource:"oauth"});else s(`oauth.resolve providerId=${$} outcome=not_refreshed`);return{apiKey:J.getApiKey(Y)??j.access,accountId:j.accountId,refreshed:V}}}import{normalizeUserInput as Py}from"@cline/shared";import{nanoid as Sy}from"nanoid";class _F{list($){return $?$1($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),J=$.pendingPrompts.findIndex((V)=>V.id===Q);if(J<0)return{sessionId:Z.sessionId,prompts:$1($),updated:!1};let W=$.pendingPrompts[J];if(!W)return{sessionId:Z.sessionId,prompts:$1($),updated:!1};let X=Z.prompt===void 0?W.prompt:Py(Z.prompt).trim();if(!X)throw Error("prompt cannot be empty");let j=Z.delivery??W.delivery,Y={...W,prompt:X,mode:Z.mode??W.mode,delivery:j};return $.pendingPrompts.splice(J,1),by($,Y,J,W.delivery),{sessionId:Z.sessionId,prompts:$1($),prompt:l9(Y),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),J=$.pendingPrompts.findIndex((X)=>X.id===Q);if(J<0)return{sessionId:Z.sessionId,prompts:$1($),removed:!1};let[W]=$.pendingPrompts.splice(J,1);return{sessionId:Z.sessionId,prompts:$1($),prompt:W?l9(W):void 0,removed:!0}}enqueue($,Z){let{prompt:Q,mode:J,delivery:W,userImages:X,userFiles:j}=Z,Y=$.pendingPrompts.findIndex((V)=>V.prompt===Q);if(Y>=0){let[V]=$.pendingPrompts.splice(Y,1),B={...V,prompt:Q,mode:J??V.mode,userImages:X??V.userImages,userFiles:j??V.userFiles};if(W==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...B,delivery:"steer"});else $.pendingPrompts.push(B)}else{let V={id:`pending_${Date.now()}_${Sy(5)}`,prompt:Q,mode:J,delivery:W,userImages:X,userFiles:j};if(W==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return $1($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((J)=>J.delivery==="steer");if(Z<0)return{prompts:$1($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:$1($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:$1($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),$1($)}clear($){return $.pendingPrompts.length=0,[]}}class dJ{deps;service=new _F;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}delete($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}enqueue($,Z){let Q=this.deps.getSession($);if(!Q||Q.aborting)return;this.service.enqueue(Q,Z),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let Z=this.deps.getSession($);if(!Z)return;let{entry:Q}=this.service.consumeSteer(Z);if(!Q)return;return this.emitPrompts(Z),this.emitSubmitted(Z,Q),Q}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:$1($)}})}scheduleDrain($,Z){if(Z.pendingPrompts.length===0||Z.aborting||Z.drainingPendingPrompts||!Z.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let Z=this.deps.getSession($);if(!Z)return;if(Z.aborting||Z.drainingPendingPrompts)return;if(!Z.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(Z);if(!Q)return;this.emitPrompts(Z),this.emitSubmitted(Z,Q),Z.drainingPendingPrompts=!0;let J=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{J=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,J&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=l9(Z);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}})}}function l9($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function $1($){return $.pendingPrompts.map(l9)}function by($,Z,Q,J){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(J==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}q0();class lJ{deps;constructor($){this.deps=$}dispatchAgentEvent($,Z,Q){let J=this.deps.getSession($),W={sessionId:$,config:Z,liveSession:J,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},X=AJ(Q),j=!!J&&(!X.agentId||X.agentId===pJ(J.agent));OJ(W,Q,j?{isPrimaryAgentEvent:!0,agentId:pJ(J.agent),conversationId:J.agent.getConversationId(),...J?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(n3(Q,Z),Z.type==="agent_event"){let J={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};OJ(J,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let J=I1({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:pJ(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(J)k$(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...J})}}if(await a3($,Z,this.deps.invokeBackendOptional),Q)o3(Q,$,Z,this.deps.emit)}async handlePluginEvent($,Z,Q,J){if(Z.name==="plugin_log"){this.handlePluginLog($,Z.payload);return}if(Z.name==="plugin_telemetry"){this.handlePluginTelemetry($,Z.payload,J);return}if(Z.name==="automation_event"){let B=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!B)return;let H=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!H)return;await B.ingestEvent(H);return}if(Z.name!=="steer_message"&&Z.name!=="queue_message"&&Z.name!=="pending_prompt")return;let W=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0,X=typeof W?.sessionId==="string"&&W.sessionId.trim().length>0?W.sessionId.trim():$,j=typeof W?.prompt==="string"?W.prompt.trim():"";if(!j)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":W?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(X,{prompt:j,delivery:Y})}handlePluginTelemetry($,Z,Q){let W=this.deps.getSession($)?.config.telemetry??Q;if(!W||!Z||typeof Z!=="object")return;let X=Z,j=typeof X.pluginName==="string"&&X.pluginName?X.pluginName:"unknown";if(X.kind==="event"){let Y=typeof X.event==="string"?X.event.trim():"";if(!Y)return;let V={...X.properties&&typeof X.properties==="object"?X.properties:{},plugin_name:j,session_id:$};if(X.required===!0)W.captureRequired(`plugin.${Y}`,V);else W.capture({event:`plugin.${Y}`,properties:V});return}if(X.kind==="metric"){let Y=typeof X.name==="string"?X.name.trim():"",V=typeof X.value==="number"?X.value:NaN;if(!Y||Number.isNaN(V))return;let B={...X.attributes&&typeof X.attributes==="object"?X.attributes:{},plugin_name:j},H=typeof X.description==="string"?X.description:void 0,K=X.required===!0,G=`plugin.${Y}`;if(X.metric==="counter")W.recordCounter(G,V,B,H,K);else if(X.metric==="histogram")W.recordHistogram(G,V,B,H,K);else if(X.metric==="gauge")W.recordGauge(G,V,B,H,K)}}handlePluginLog($,Z,Q){let J=this.deps.getSession($),W=Q??J?.config.extensionContext?.logger??J?.config.logger;if(!W||!Z||typeof Z!=="object")return;let X=Z,j=typeof X.message==="string"?X.message:"";if(!j)return;let Y=X.metadata&&typeof X.metadata==="object"?{...X.metadata}:{};if(Y.sessionId??=$,typeof X.pluginName==="string"&&X.pluginName)Y.pluginName=X.pluginName;if(X.level==="debug"){W.debug(j,Y);return}if(X.level==="error"){if(W.error)W.error(j,Y);else W.log(j,{...Y,severity:"error"});return}W.log(j,Y)}}function pJ($){return $.getAgentId()}function iJ($){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:x1($.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 rJ($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function LF($,Z,...Q){let J=rJ($,Z);if(!J)throw Error(`session service method not available: ${Z}`);return Promise.resolve(J.apply($,Q))}async function AF($,Z,...Q){let J=rJ($,Z);if(!J)return;await Promise.resolve(J.apply($,Q))}async function OF($,Z,...Q){let J=rJ($,Z);if(!J)return;return await Promise.resolve(J.apply($,Q))}J1();q0();function nJ($,Z,Q){return{onSubAgentEvent:(J)=>$.onAgentEvent(Q,Z,J),onSubAgentStart:(J)=>{let W=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(J.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let X=I1({agentId:J.subAgentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:J.parentAgentId});if(X)k$(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...X});T4(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:J.parentAgentId,agentId:J.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",Q,J)},onSubAgentEnd:(J)=>{let W=$.getSession(Q)?.runtime.teamRuntime,X=$.subAgentStarts.get(J.subAgentId),j=X?Date.now()-X.startedAt:0,Y=J.result?.text?J.result.text.split(`
|
|
766
|
-
`).length:0;T4(Z.telemetry,{event:"ended",ulid:Q,durationMs:j,outputLines:Y,errorMessage:J.error?String(J.error):void 0,agentId:J.subAgentId,parentId:J.parentAgentId,...I1({agentId:J.subAgentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:J.parentAgentId})}),$.subAgentStarts.delete(J.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,J)}}}function aJ($,Z,Q,J){let W=nJ($,Z,Q);return o2({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let j=Z.enableTools?J6({cwd:Z.cwd,telemetry:Z.telemetry,...K1[X$({mode:Z.mode})],executors:J}):[];if(Z.enableSpawnAgent)j.push(aJ($,Z,Q,J));return e1(j)},...W})}import{readFile as yy,stat as ky}from"node:fs/promises";var hy=20480000;async function qF($){let Z=await ky($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>hy)throw Error("File is too large to read into context.");let Q=await yy($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var zF=5000;function X4($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function dy($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=X4(Z.inputTokens),J=X4(Z.outputTokens),W=X4(Z.cacheReadTokens),X=X4(Z.cacheWriteTokens),j=X4(Z.totalCost);if(Q===void 0||J===void 0||W===void 0||X===void 0||j===void 0)return;return{inputTokens:Q,outputTokens:J,cacheReadTokens:W,cacheWriteTokens:X,totalCost:j}}function py($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}function TF($,Z){if(!Z)return!1;if($.source_message_count!==Z.source_message_count)return $.source_message_count<Z.source_message_count;return Date.parse($.updated_at)<Date.parse(Z.updated_at)}class E${runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultLogger;defaultFetch;events=new S6;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new O8;constructor($){let Z=xy();if(Z)uy(Z);let Q=t0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new d9,this.createAgentInstance=$.createAgent??((J)=>new Y$(J)),this.defaultCapabilities=h0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new R$,this.oauthTokenManager=$.oauthTokenManager??new p9({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultLogger=$.logger,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new dJ({getSession:(J)=>this.sessions.get(J),emit:(J)=>this.emit(J),send:(J)=>this.runTurn(J)}),this.pendingPrompts={list:async(J)=>this.pendingPromptsController.list(J.sessionId),update:async(J)=>this.pendingPromptsController.update(J),delete:async(J)=>this.pendingPromptsController.delete(J)},this.eventBridge=new lJ({getSession:(J)=>this.sessions.get(J),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(J)=>this.emit(J),persistMessages:(J,W,X)=>{this.invoke("persistSessionMessages",J,W,X)},enqueuePendingPrompt:(J,W)=>this.pendingPromptsController.enqueue(J,W),invokeBackendOptional:(J,...W)=>this.invokeOptional(J,...W)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.config.sessionId?.trim()??"",Q=Z||vy(),J=Z.length>0&&($.initialMessages?.length??0)>0&&!$.prompt?.trim(),W=Boolean($.config.cwd?.trim()||$.config.workspaceRoot?.trim()),X=J&&!W?await this.invokeOptionalValue("readSessionManifest",Q):void 0,j=X?{...$.config,cwd:X.cwd,workspaceRoot:X.workspace_root}:await JF($.config);return await this.startResolvedSession({...$,config:j},Q,Z.length>0,X)}async startResolvedSession($,Z,Q,J){let W=$.source??T0.CLI,X=J0(),j=await this.applyInitialOAuthCredentials($),Y=j.initialMessages??[],V=Y.length>0?f9(Y):P0(),B=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!B)throw Error("session service method not available: ensureSessionsDir");let H=oJ(B,Z),K=oJ(H,`${Z}.messages.json`),G=oJ(H,`${Z}.json`),F=x1($.config),U=u0.parse({version:1,session_id:Z,source:W,pid:process.pid,started_at:X,status:"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:F,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:K}),_,L;if(Q&&Y.length>0&&!j.prompt?.trim()){let y=J??await this.invokeOptionalValue("readSessionManifest",Z);if(y)U=y,_={manifestPath:G,messagesPath:y.messages_path||K,compactionPath:y.compaction_path,manifest:y},L=await this.invokeOptionalValue("readSessionCompactionState",Z)}let D=await this.seedAggregateUsageFromArtifacts({initialUsage:V,sessionDir:H,rootMessagesPath:_?.messagesPath??K,manifest:U});this.usageBySession.set(Z,V),this.aggregateUsageBySession.set(Z,D);let q=h0(this.defaultCapabilities,$.capabilities),T=q?.toolExecutors??this.toolExecutors,z=$.localRuntime,A=z?.extensionContext?.logger??z?.logger,f=z?.extensionContext?.automation,N=z?.extensionContext?.telemetry??z?.telemetry??this.defaultTelemetry,C,P={getSession:(y)=>this.sessions.get(y),subAgentStarts:this.subAgentStarts,onAgentEvent:(y,Y0,A0)=>this.eventBridge.dispatchAgentEvent(y,Y0,A0),invokeBackendOptional:(y,...Y0)=>this.invokeOptional(y,...Y0)};C=await vG({input:j,localRuntime:$.localRuntime,sessionId:Z,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultLogger:this.defaultLogger,defaultCapabilities:q,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(y)=>{if(y.name==="plugin_log"){this.eventBridge.handlePluginLog(Z,y.payload,A);return}this.eventBridge.handlePluginEvent(Z,y,f,N)},onTeamEvent:(y)=>{this.eventBridge.handleTeamEvent(Z,y),C.config.onTeamEvent?.(y)},createSpawnTool:()=>aJ(P,C.config,Z,T),createSubAgentLifecycleCallbacks:(y)=>nJ(P,y,Z),readSessionMetadata:async()=>(await this.getSession(Z))?.metadata,writeSessionMetadata:async(y)=>{await this.persistSessionMetadata(Z,()=>y)}});let n=o7({..._?.manifest.metadata??{},...j.sessionMetadata??{}},C.gitState);if(!_)U.metadata=n;let g=await this.runtimeBuilder.build(C.runtimeBuilderInput),w=C.config,p=C.providerConfig;if(g.teamRuntime&&!w.teamName?.trim())w.teamName=g.teamRuntime.getTeamName();let G0=async()=>{let y=this.sessions.get(Z);if(!y||!w2(y.config.providerId))return!1;try{return await this.syncOAuthCredentials(y,{forceRefresh:!0}),!0}catch{return!1}};g.delegatedAgentConfigProvider?.updateConnectionDefaults({onAuthError:G0});let d1=[...g.tools,...w.extraTools??[]],p1=g.extensions??C.extensions,Z0=j.initialCompactionState,q1,l1=_J(w),V1=Z0??L,g0=V1?{...V1,conversation_id:V1.conversation_id?.trim()||Z}:void 0,i1=LJ({compact:l1,getState:()=>q1?.compactionState,saveState:async(y,Y0)=>{let A0=q1;if(!A0)return;let O0={...y,conversation_id:A0.sessionId};try{if(!(await this.persistActiveSessionCompactionState(A0,O0,Y0)).updated)w.logger?.debug?.("Skipped stale session compaction state",{sessionId:A0.sessionId,sourceMessageCount:O0.source_message_count})}catch(S$){w.logger?.error?.("Failed to persist session compaction state",{sessionId:A0.sessionId,error:S$}),M$(w.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:S$,context:{sessionId:A0.sessionId,providerId:w.providerId,modelId:w.modelId}})}}}),L0={sessionId:Z,providerId:p.providerId,modelId:p.modelId,apiKey:p.apiKey,baseUrl:p.baseUrl,headers:p.headers,onAuthError:G0,knownModels:p.knownModels,providerConfig:p,thinking:w.thinking,reasoningEffort:w.reasoningEffort??p.reasoningEffort,thinkingBudgetTokens:w.thinkingBudgetTokens,maxTokensPerTurn:w.maxTokensPerTurn,temperature:w.temperature,systemPrompt:w.systemPrompt,maxIterations:w.maxIterations,execution:w.execution,prepareTurn:i1,tools:d1,hooks:C.hooks,extensions:p1,hookErrorMode:w.hookErrorMode,initialMessages:C.effectiveInput.initialMessages,userFileContentLoader:qF,toolPolicies:C.toolPolicies,requestToolApproval:C.requestToolApproval?async(y)=>{let Y0=C.requestToolApproval,A0=this.sessions.get(Z);if(A0)await this.markTurnPending(A0);try{if(!Y0)return{approved:!1,reason:"Tool approval callback is not configured."};return await Y0(y)}finally{let O0=this.sessions.get(Z);if(O0?.status==="pending")await this.markTurnRunning(O0)}}:void 0,telemetry:w.telemetry,onConsecutiveMistakeLimitReached:w.onConsecutiveMistakeLimitReached,completionPolicy:g.completionPolicy,consumePendingUserMessage:()=>{let y=this.pendingPromptsController.consumeSteer(Z);return y?l6(y.prompt,y.mode??w.mode):void 0},logger:g.logger??w.logger,extensionContext:w.extensionContext,onEvent:(y)=>this.eventBridge.dispatchAgentEvent(Z,w,y)};L0.hooks={...L0.hooks,onEvent:async(y)=>{if(await C.hooks?.onEvent?.(y),y.type!=="assistant-message")return;let Y0=this.sessions.get(Z);if(!Y0)return;let A0=Y0.agent.getMessages();try{await this.invoke("persistSessionMessages",Z,A0,w.systemPrompt)}catch(O0){w.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:Z,error:O0}),M$(w.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:O0,severity:"warn",handled:!0,context:{sessionId:Z,providerId:w.providerId,modelId:w.modelId}})}}};let w0=this.createAgentInstance(L0);if(L0.onEvent)w0.subscribeEvents(L0.onEvent);g.registerLeadAgent?.(w0);let B1=I1({agentId:w0.getAgentId(),conversationId:w0.getConversationId(),teamId:g.teamRuntime?.getTeamId(),teamName:g.teamRuntime?.getTeamName(),teamRole:g.teamRuntime?"lead":void 0});if(mG(w,Z,Q,F,B1),B1)k$(w.telemetry,{ulid:Z,modelId:w.modelId,provider:w.providerId,...B1});if(g.teamRuntime)cZ(w.telemetry,{ulid:Z,teamId:g.teamRuntime.getTeamId(),teamName:g.teamRuntime.getTeamName(),leadAgentId:w0.getAgentId(),restoredFromPersistence:g.teamRestoredFromPersistence===!0});let v={sessionId:Z,config:w,sessionMetadata:n,..._?{artifacts:_}:{},source:W,startedAt:_?.manifest.started_at??X,updatedAt:_?.manifest.ended_at??_?.manifest.started_at??X,pendingPrompt:U.prompt,runtime:g,agent:w0,started:!1,status:_?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,compactionState:g0,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:C.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(q1=v,v.compactionState&&!this.isCompactionStateForSession(v.sessionId,v.compactionState,v))v.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:v.sessionId,conversationId:v.compactionState.conversation_id}),v.compactionState=void 0;if(this.sessions.set(Z,v),_)await this.refreshActiveSessionGitMetadata(v,C.gitState);if(this.emitStatus(Z,"running"),Y.length>0&&!_){if(await this.ensureSessionPersisted(v),await this.invoke("persistSessionMessages",v.sessionId,Y,v.config.systemPrompt),v.compactionState){if(!(await this.persistActiveSessionCompactionState(v,v.compactionState)).updated)v.compactionState=void 0}if(!j.prompt?.trim())await this.updateStatus(v,"completed",0)}let b0;try{if(j.prompt?.trim())if(b0=await this.executeTurn(v,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!v.interactive)await this.finalizeSingleRun(v,b0.finishReason);else await this.completeInteractiveTurn(v,b0.finishReason)}catch(y){if(v.interactive&&v.aborting)b0=await this.completeAbortedInteractiveTurn(v);else{M$(v.config.telemetry,{component:"core",operation:"session.start",error:y,severity:"error",handled:!1,context:{sessionId:v.sessionId,providerId:v.config.providerId,modelId:v.config.modelId}});try{await this.failSession(v)}catch(Y0){v.config.logger?.error?.("Session failure cleanup threw",{sessionId:v.sessionId,error:Y0})}throw y}}return{sessionId:Z,manifest:U,manifestPath:G,messagesPath:K,result:b0}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let J=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...J?{sessionMetadata:J}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,cleanupStartedSession:async(Z)=>{if(!await this.deleteSession(Z.sessionId))throw Error(`Failed to clean up restored session ${Z.sessionId}`)},readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),J=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:J??"immediate"}}),J==="queue"||J==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:J,userImages:$.userImages,userFiles:$.userFiles});return}try{let W=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,W.finishReason);else await this.completeInteractiveTurn(Z,W.finishReason);if(W.finishReason==="error"||W.finishReason==="aborted")return W;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),W}catch(W){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw M$(Z.config.telemetry,{component:"core",operation:"session.submit",error:W,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),W}}async getAccumulatedUsage($){let Z=O3(this.usageBySession.get($)),Q=O3(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,this.pendingPromptsController.clearAborted(Q),Q.agent.abort(Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!F0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!F0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return iJ(Z);let Q=$.trim();if(!Q)return;let J=await this.getRow(Q);if(J)return w6(J);let W=await this.readManifest(Q);return W?T3(W):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(w6),J=new Set(Q.map((W)=>W.sessionId));for(let W of this.sessions.values()){if(J.has(W.sessionId))continue;Q.unshift(iJ(W))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async updateSessionCompactionState($,Z){let Q=$.trim();if(!Q)return{updated:!1};let J=this.sessions.get(Q),W=J?void 0:await this.getSession(Q);if(!(J??W))return{updated:!1};if(J){let Y=await this.readSessionMessages(Q),V=Z.source_message_count>0&&Y.length>=Z.source_message_count,B=V?Y:void 0;if(V){if(!await this.canPersistCompactionState(Q,Z,J,void 0,Y))return{updated:!1};J.agent.restore(Y)}return await this.persistActiveSessionCompactionState(J,Z,B)}if(!await this.canPersistCompactionState(Q,Z,void 0,W))return{updated:!1};let j=await this.invokeOptionalValue("readSessionCompactionState",Q);if(TF(Z,j))return{updated:!1};return await this.invoke("persistSessionCompactionState",Q,Z),{updated:!0}}async readSessionCompactionState($){let Z=$.trim();if(!Z)return;let Q=this.sessions.get(Z);if(Q)for(;;){let J=Q.compactionStateWriteQueue;if(!J)return Q.compactionState;await J.catch(()=>{return})}return await this.invokeOptionalValue("readSessionCompactionState",Z)}isCompactionStateForSession($,Z,Q,J){let W=Z.conversation_id?.trim();if(!W)return!0;if(W===$)return!0;let X=Q?.agent.getConversationId()?.trim()||J?.conversationId?.trim();return X?W===X:!1}async canPersistCompactionState($,Z,Q,J,W){if(!Z.conversation_id?.trim())return!1;if(!this.isCompactionStateForSession($,Z,Q,J))return!1;let X=W??Q?.agent.getMessages()??await this.readSessionMessages($);return B8(Z,X)!==void 0}async persistActiveSessionCompactionState($,Z,Q){if(!await this.canPersistCompactionState($.sessionId,Z,$,void 0,Q))return{updated:!1};return await this.enqueueCompactionStateWrite($,async()=>{let J=$.compactionState,W=J!==void 0&&B8(J,Q??$.agent.getMessages())!==void 0;if(J&&(W?TF(Z,J):Date.parse(Z.updated_at)<Date.parse(J.updated_at)))return{updated:!1};return await this.invoke("persistSessionCompactionState",$.sessionId,Z),$.compactionState=Z,{updated:!0}})}async enqueueCompactionStateWrite($,Z){let J=($.compactionStateWriteQueue??Promise.resolve()).catch(()=>{return}).then(Z),W=J.then(()=>{return},()=>{return});$.compactionStateWriteQueue=W;try{return await J}finally{if($.compactionStateWriteQueue===W)$.compactionStateWriteQueue=void 0}}async readLiveSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=this.sessions.get(Z);if(Q){let J=Q.agent.getMessages();if(J.length>0)return J}return this.readSessionMessages(Z)}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return G$(Q.messagesPath);let J=await this.readManifest(Z);return G$(J?.messages_path)}async dispatchHookEvent($){await AH($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){await this.updateSessionConnection($,{modelId:Z})}async updateSessionConnection($,Z){let Q=r2(Z),J=this.getSessionOrThrow($);if(Q.providerId!==void 0)J.config.providerId=Q.providerId;if(Q.modelId!==void 0)J.config.modelId=Q.modelId;if(Q.apiKey!==void 0)J.config.apiKey=Q.apiKey;if(Q.baseUrl!==void 0)J.config.baseUrl=Q.baseUrl;if(Q.headers!==void 0)J.config.headers=Q.headers;if(Q.providerConfig!==void 0)J.config.providerConfig=Q.providerConfig;if(Object.hasOwn(Q,"reasoningEffort"))J.config.reasoningEffort=Q.reasoningEffort??void 0;if(Object.hasOwn(Q,"thinkingBudgetTokens"))J.config.thinkingBudgetTokens=Q.thinkingBudgetTokens??void 0;if(Object.hasOwn(Q,"thinking")){if(J.config.thinking=Q.thinking??void 0,Q.thinking===!1||Q.thinking===null)J.config.reasoningEffort=void 0,J.config.thinkingBudgetTokens=void 0}let W={...Q.providerId!==void 0?{providerId:Q.providerId}:{},...Q.modelId!==void 0?{modelId:Q.modelId}:{},...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{},...Q.providerConfig!==void 0?{providerConfig:Q.providerConfig}:{},...Object.hasOwn(Q,"reasoningEffort")?{reasoningEffort:Q.reasoningEffort??void 0}:{},...Object.hasOwn(Q,"thinking")?{thinking:Q.thinking??void 0}:{},...Object.hasOwn(Q,"thinkingBudgetTokens")?{thinkingBudgetTokens:Q.thinkingBudgetTokens??void 0}:{}};if(Q.thinking===!1||Q.thinking===null)W.reasoningEffort=void 0,W.thinkingBudgetTokens=void 0;let X={...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{}};if(J.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults(W),J.agent.updateConnection(Q),J.runtime.teamRuntime?.updateTeammateConnections(X),Q.providerId||Q.modelId)await this.mutateSessionManifest(J,(j)=>{if(Q.providerId)j.provider=Q.providerId;if(Q.modelId)j.model=Q.modelId})}async mutateSessionManifest($,Z){let Q=$.artifacts;if(!Q)return;let J=$.sessionId,X=(this.manifestMutationQueues.get(J)??Promise.resolve()).then(async()=>{let Y=await this.invokeOptionalValue("readSessionManifest",J)??Q.manifest;return Z(Y),Q.manifest=Y,await this.invoke("writeSessionManifest",Q.manifestPath,Y),Y}),j=X.then(()=>{return},()=>{return});this.manifestMutationQueues.set(J,j);try{return await X}finally{if(this.manifestMutationQueues.get(J)===j)this.manifestMutationQueues.delete(J)}}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),J=Q.prompt.trim(),W=Q?.userImages?.length,X=Q?.userFiles?.length;if(!J&&!W&&!X)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=J;await this.ensureSessionPersisted($),await this.refreshActiveSessionGitMetadata($),await this.syncOAuthCredentials($),await this.markTurnRunning($);try{let j=await this.executeAgentTurn($,J,Q.userImages,Q.userFiles);while(s3($,j.finishReason)){let Y=await t3($);if(Y.length===0)break;let V=e3($,Y);j=await this.executeAgentTurn($,V)}return j}finally{await this.refreshActiveSessionGitMetadata($)}}async completeInteractiveTurn($,Z){if(p6($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),J=P0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:J}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:J,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,J){let W=$.started||$.agent.getMessages().length>0,X=$.persistedMessages??$.agent.getMessages(),j=this.usageBySession.get($.sessionId)??P0(),Y=this.aggregateUsageBySession.get($.sessionId)??j;$.turnUsageBaseline=j,$.turnAggregateUsageBaseline=Y,$.turnPrimaryUsage=P0(),$.turnUsageByAgent=new Map,kZ($.config.telemetry,$.sessionId,$.config.mode),C8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=W?()=>$.agent.continue(Z,Q,J):()=>$.agent.run(Z,Q,J),B=await this.runWithAuthRetry($,V,X);$.started=!0;let H=$9(B.messages,B,X);$.persistedMessages=H;let K=N9($.turnUsageByAgent?.values()??[]),G=M0(j,B.usage),F=M0(M0(P0(),B.usage),K),U=M0(Y,F);return this.usageBySession.set($.sessionId,G),this.aggregateUsageBySession.set($.sessionId,U),await this.persistSessionMetadata($.sessionId,(_)=>({..._??{},totalCost:G.totalCost,aggregatedAgentsCost:U.totalCost,usage:G,aggregateUsage:U})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,B),B}catch(V){throw M$($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((J)=>J.name===N0.SUBMIT_AND_EXIT&&J.error===void 0))return;$.submitAndExitObserved=!0,q4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,Z){let Q=x1($.config),J=cy(Z.prompt).trim();if(!J)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let W=await T5(J,Q);cG($.config.telemetry,W);let X=l6(W.prompt,Z.mode??$.config.mode),j=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),Y=this.resolveAbsoluteFilePaths(Q,W.matchedFiles),V=Array.from(new Set([...j,...Y]));return{prompt:X,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=x1($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:Z,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async refreshActiveSessionGitMetadata($,Z){try{let Q=Z??await aB(x1($.config));if(!Q||!$.artifacts)return;if(rB($.artifacts.manifest.metadata,Q))return;await this.persistSessionMetadata($.sessionId,(J)=>o7({...J??{},...$.sessionMetadata??{}},Q))}catch(Q){$.config.logger?.debug?.("Failed to refresh session git metadata",{sessionId:$.sessionId,error:Q})}}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,Z){let Q=this.sessions.get($),J=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,W=Z(J?.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($,Z){if(p6($))return;let Q=Z==="aborted"||$.aborting,J=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":J?"failed":"completed",exitCode:J?1:0,shutdownReason:J?"session_error":"session_complete",endReason:Z})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(Z.status==="completed"&&!$.submitAndExitObserved)q4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});A9($);let Q=[],J=(W,X)=>{Q.push(X),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:W,error:X,severity:"warn"}),M$($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){await this.refreshActiveSessionGitMetadata($);try{await this.updateStatus($,Z.status,Z.exitCode)}catch(W){J("update_status",W)}try{await $.agent.shutdown(Z.shutdownReason)}catch(W){J("agent_shutdown",W)}}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(W){J("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){J("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){let Q=[],J=(W,X)=>{Q.push(X),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:W,error:X,severity:"warn"}),M$($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(Z)}catch(W){J("agent_shutdown",W)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(W){J("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){J("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let J=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!J.updated)return;let W=await this.mutateSessionManifest($,(X)=>{if(X.status=Z,F0(Z))delete X.ended_at,X.exit_code=null;else X.ended_at=J.endedAt??J0(),X.exit_code=typeof Q==="number"?Q:null});if(!W)return;$.status=Z,$.updatedAt=J.endedAt??J0(),$.endedAt=F0(Z)?null:W.ended_at,$.exitCode=W.exit_code,this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(J){if(!w2($.config.providerId)||!my(J))throw J;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),Z()}}async syncOAuthCredentials($,Z){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:Z?.forceRefresh})}catch(J){if(J instanceof W4)throw Error(`${J.providerId} requires re-authentication.`);throw J}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new s$($);throw M$(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((J)=>J.trim()).filter((J)=>J.length>0).map((J)=>gy(J)?J:sJ($,J));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return I1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let Z=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=M0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let J=sJ(Z),W=`${Q}.messages.json`,X;try{X=Iy($)}catch{return P0()}let j=P0();for(let Y of X){if(!Y.endsWith(".messages.json"))continue;if(Y===W)continue;let V=sJ($,Y);if(V===J)continue;let B=await G$(V);if(B.length===0)continue;j=M0(j,f9(B))}return j}withPersistedAggregateUsageFloor($,Z){let Q=dy(Z.metadata?.aggregateUsage);if(Q)return py($,Q);let J=Z.metadata?.aggregatedAgentsCost;if(typeof J!=="number"||!Number.isFinite(J)||J<=$.totalCost)return $;return{...$,totalCost:J}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:_$({session:Z,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),zF))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(zF)).find((J)=>J.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return LF(this.sessionService,$,...Z)}invokeOptional($,...Z){return AF(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return OF(this.sessionService,$,...Z)}}function ly($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let Z=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(Z==="local"||Z==="hub"||Z==="remote")return Z;return"auto"}var j4,Y4;function iy($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;mH(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function ry($){await $.reconcileDeadSessions?.().catch(()=>{})}function RF($){try{let Z=new O$;return Z.init(),new z$(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),fF($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new JJ(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function NF($,Z,Q){return new E$({sessionService:Q??$.sessionService??RF($),capabilities:$.capabilities,logger:$.logger,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function ny($){if(j4)return j4;if(Y4)return await Y4;return Y4=(async()=>{return j4=RF($),await ry(j4),j4})().finally(()=>{Y4=void 0}),await Y4}async function i9($){let Z=t0($.distinctId);$.telemetry?.setDistinctId(Z);let Q=ly($);if(iy(Q,$),Q==="remote"){let J=$.remote?.endpoint?.trim();if(!J)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:J}),new B9({endpoint:J,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let J=$.hub?.endpoint?.trim(),W=J||await I6({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:J||void 0}),new B2({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 J=await b3({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(J){$.logger?.log("Using discovered local hub runtime host",{url:J});let W=new B2({url:J,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(X){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:X}),fF($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:X,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),NF($,Z)}return NF($,Z)}import{existsSync as ay,mkdirSync as oy,readFileSync as sy,writeFileSync as ty}from"node:fs";import{dirname as ey}from"node:path";import{FEATURE_FLAGS as MF,FeatureFlagDefaultValue as tJ}from"@cline/shared";var $k=3600000,Zk=604800000,EF=1;class V4{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??$k,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??Zk,this.context={...$.context??{}},this.hydrateFromPersistentCache()}setContext($){this.context={...$}}hydrateCache($){this.cacheInfo={updateTime:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload},this.rebuildCacheFromSnapshot($.flagsPayload)}getCacheSnapshot(){return{updateTime:this.cacheInfo.updateTime,userId:this.cacheInfo.userId,flagsPayload:this.cacheInfo.flagsPayload}}async poll($){let Z=$??this.context.userId??null,Q=Date.now();if(Q-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===Z)return}let J=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:Z||null};try{let W=await this.provider.getAllFlagsAndPayloads({flagKeys:MF.length>0?MF:void 0,context:{...this.context,userId:Z}});if(this.cacheInfo.userId!==Z)return;this.cacheInfo.flagsPayload=W,this.rebuildCacheFromSnapshot(W),this.writePersistentCache()}catch(W){if(this.cacheInfo.userId!==Z)return;throw this.cacheInfo=J.updateTime?J:{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((Z)=>this.isFeatureFlagPayload(Z));if(typeof $==="object")return Object.values($).every((Z)=>this.isFeatureFlagPayload(Z));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=Object.entries($).filter(([,J])=>this.isFeatureFlagPayload(J));if(Z.length===0)return;let Q={};for(let[J,W]of Z)Q[J]=W;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!ay(this.cacheFilePath))return;let $=JSON.parse(sy(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==EF||typeof Z.updatedAt!=="number"||!Number.isFinite(Z.updatedAt)||Date.now()-Z.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:Z.updatedAt,userId:Z.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(Z.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(Z.flagsPayload?.featureFlagPayloads)}}}catch($){this.logger?.error?.("Error reading SDK feature flags cache",{error:$});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;oy(ey(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:EF,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};ty(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
|
|
767
|
-
`,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let Z=new Map;for(let Q of this.getReturnedFlagKeys($)){let J=this.getFeatureFlag(Q);Z.set(Q,J??!1)}this.cache=Z}getFeatureFlag($){try{let Z=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],J=Z??Q??tJ[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==J)this.telemetry?.capture({event:x.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return J}catch(Z){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:Z}),tJ[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??tJ[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,Z){if(process.env.IS_TEST==="true")this.cache.set($,Z)}async dispose(){await this.provider.dispose()}}class B4{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}H2();import{execFile as Qk}from"node:child_process";import*as wF from"node:fs/promises";import*as T8 from"node:path";import{promisify as Jk}from"node:util";var Wk=Jk(Qk),Xk=52428800;async function r9($,Z){let{stdout:Q}=await Wk("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:Xk,encoding:"utf8"});return Q}function CF($){return $.split("\x00").filter(Boolean)}function PF($,Z){let Q=T8.resolve($,Z),J=T8.relative($,Q);if(J.startsWith("..")||T8.isAbsolute(J))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function jk($,Z,Q){try{return await r9($,["show",`${Z}:${Q}`])}catch{return""}}async function Yk($,Z){try{return await wF.readFile(PF($,Z),"utf8")}catch{return""}}async function Vk($,Z){await r9($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,J]=await Promise.all([r9($,["diff","--name-only","-z",Z.ref,"--"]),r9($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...CF(Q),...CF(J)])].sort((X,j)=>X.localeCompare(j))}function SF($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=v9(Q4($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let J=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!J)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Q,cwd:J}}async function bF($,Z){let Q=await Vk($,Z);return(await Promise.all(Q.map(async(W)=>{let[X,j]=await Promise.all([jk($,Z.ref,W),Yk($,W)]);return{filePath:PF($,W),leftContent:X,rightContent:j}}))).filter((W)=>W.leftContent!==W.rightContent)}async function eJ($){let Z=SF($),Q=await bF(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}class $W{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,Z,Q,J,W,X,j,Y,V,B){this.clientName=Z,this.runtimeAddress=Q,this.host=$,this.prepare=J,this.capabilities=W,this.logger=X,this.telemetry=j,this.distinctId=Y,this.featureFlags=V,this.settings=xB($),this.pendingPrompts=gB($),this.automation=new qQ(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=B?new M6({workspaceRoot:B.workspaceRoot??process.cwd(),specs:{cronSpecsDir:B.cronSpecsDir??B.cronDir,scope:Bj(B.cronScope),workspaceRoot:B.workspaceRoot},runtimeHandlers:Hj({host:$,getExtensionContext:()=>v4({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:B.dbPath,logger:B.logger,pollIntervalMs:B.pollIntervalMs,claimLeaseSeconds:B.claimLeaseSeconds,globalMaxConcurrency:B.globalMaxConcurrency,watcherDebounceMs:B.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((H)=>{if(H.type!=="ended")return;this.disposeSessionBootstrap(H.payload.sessionId)})}static async create($={}){let Z=t0($.distinctId),Q=h0($.capabilities),J={...$,capabilities:Q,distinctId:Z},W=await i9(J),X=Vj($.automation),j=$.featureFlags||new V4({provider:new B4,telemetry:$.telemetry,logger:$.logger,context:{distinctId:Z,clientName:$.clientName}}),Y=new $W(W,$.clientName,W.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,Z,j,X?{...X,logger:$.logger}:void 0);if(X&&X.autoStart!==!1)await Y.automation.start();return Y}async disposeSessionBootstrap($){let Z=this.activeSessionBootstraps.get($);if(!Z)return;this.activeSessionBootstraps.delete($),await Promise.resolve(Z.dispose?.())}async start($){let Z=vB($),Q=await this.prepare?.(Z);try{let J=Q?await Q.applyToStartSessionInput(Z):Z,W=await this.host.startSession(i7(J,{defaultCapabilities:this.capabilities,withExtensionContext:(X)=>v4({automationService:this.automationService,automation:this.automation,context:X,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Q)if(await this.host.getSession(W.sessionId))this.activeSessionBootstraps.set(W.sessionId,Q);else await Promise.resolve(Q.dispose?.());return mB({input:J,sessionId:W.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),W}catch(J){throw await Promise.resolve(Q?.dispose?.()),J}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let Z=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(Z.map((Q)=>this.disposeSessionBootstrap(Q)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await N3(this.host,$);list=async($=200,Z={})=>await this.listHistory({...Z,limit:$});delete=async($)=>{let Z=await this.host.deleteSession($);if(Z)await this.disposeSessionBootstrap($);return Z};update=(...$)=>this.host.updateSession(...$);updateSessionCompactionState=(...$)=>this.host.updateSessionCompactionState(...$);readSessionCompactionState=(...$)=>this.host.readSessionCompactionState(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);readLiveMessages=($)=>this.host.readLiveSessionMessages?this.host.readLiveSessionMessages($):this.host.readSessionMessages($);async restore($){let Z=$.start?i7($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>v4({automationService:this.automationService,automation:this.automation,context:Q,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:$.sessionId,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restore:$.restore,start:Z})}async compareCheckpoint($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=await this.host.getSession(Z);if(!Q)throw Error(`Session ${Z} not found`);return eJ({session:Q,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,Z){return this.host.subscribe($,Z)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()};updateSessionConnection=(...$)=>{return this.host.updateSessionConnection?.(...$)??Promise.resolve()}}import{HookEventNameSchema as kF,HookEventPayloadSchema as hF,parseHookEventPayload as n9,resolveHookSessionContext as Bk}from"@cline/shared";import{z as L2}from"zod";var Hk=L2.object({contextModification:L2.string().optional(),cancel:L2.boolean().optional(),review:L2.boolean().optional(),errorMessage:L2.string().optional(),context:L2.string().optional(),overrideInput:L2.unknown().optional()}).passthrough();var Kk=["agent","hook"];async function a9($,Z={}){let Q=Z.command??Kk;return await U2($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function IF($){return $ instanceof Error?$:Error(String($))}function Gk($){if(!$||typeof $!=="object")return;let Z=Hk.safeParse($);if(!Z.success)return;let Q=Z.data;if(!(("cancel"in Q)||("review"in Q)||("context"in Q)||("contextModification"in Q)||("overrideInput"in Q)||("errorMessage"in Q)))return;let 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 yF($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,J]of Object.entries($))if(typeof J==="string")Z[Q]=J;else Z[Q]=JSON.stringify(J);return Z}function v1($,Z,Q){let J=Q.env??process.env,W=J.CLINE_USER_ID?.trim()||J.USER?.trim()||"unknown",X=Q.cwd||process.cwd();return{clineVersion:J.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:Z.conversationId,sessionContext:Bk(Q.sessionContext,{hookName:$,conversationId:Z.conversationId,agentId:Z.agentId,parentAgentId:Z.parentAgentId}),workspaceRoots:X?[X]:[],workspaceInfo:Q.workspaceInfo,userId:W,agent_id:Z.agentId,parent_agent_id:Z.parentAgentId}}function Fk($){return{name:$.name,message:$.message,stack:$.stack}}function Uk($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function Dk($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function _k($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function Lk($){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 Ak($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}async function A2($,Z){try{let Q=await a9($,{command:Z.command,cwd:Z.cwd,env:Z.env,detached:!0,onSpawn:Z.onSpawn});Z.onDispatch?.({payload:$,result:Q,detached:!0})}catch(Q){Z.onDispatchError?.(IF(Q),$)}}function xF($={}){return{hooks:{beforeRun:async(Y)=>{let V=Dk(Y);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...v1("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await A2(H,$)}else{let H={...v1("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await A2(H,$)}return},beforeTool:async(Y)=>{let V={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},B={...v1("tool_call",V,$),hookName:"tool_call",iteration:Y.snapshot.iteration,tool_call:{id:Y.toolCall.toolCallId,name:Y.toolCall.toolName,input:Y.input},preToolUse:{toolName:Y.toolCall.toolName,parameters:yF(Y.input)}};try{let H=await a9(B,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:B,result:H,detached:!1}),H?.timedOut)throw Error("tool_call hook command timed out");if(H?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${H.parseError}`);return Ak(Gk(H?.parsedJson))}catch(H){$.onDispatchError?.(IF(H),B);return}},afterTool:async(Y)=>{let V=Lk(Y),B={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},H={...v1("tool_result",B,$),hookName:"tool_result",iteration:Y.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:yF(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await A2(H,$);return},afterRun:async({snapshot:Y,result:V})=>{let B={agentId:Y.agentId,conversationId:Y.conversationId??Y.runId??Y.agentId,parentAgentId:Y.parentAgentId??null};if(V.status==="completed"){let G={...v1("agent_end",B,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await A2(G,$);return}let H=V.status==="aborted"||Uk(V.error?.message)?"agent_abort":"agent_error",K=H==="agent_error"?{...v1(H,B,$),hookName:H,iteration:V.iterations,error:Fk(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...v1(H,B,$),hookName:H,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await A2(K,$)},onEvent:async(Y)=>{if(Y.type!=="message-added"||Y.message.role!=="user")return;let V={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},B={...v1("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:_k(Y.message.content),attachments:[]}};await A2(B,$)}},shutdown:async({agentId:Y,conversationId:V,parentAgentId:B,reason:H})=>{let K={...v1("session_shutdown",{agentId:Y,conversationId:V,parentAgentId:B},$),hookName:"session_shutdown",reason:H};await A2(K,$)}}}import{createSessionId as Ok,readHubScheduleMode as gF}from"@cline/shared";function Z1($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function vF($,Z,Q){return{version:$.version,requestId:$.requestId??Ok("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class o9{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return Z1($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return Z1($,{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 Z1($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return Z1($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return Z1($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return Z1($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return Z1($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return Z1($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return Z1($,{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 Z1($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return Z1($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return Z1($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return vF($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Z){return vF($,"schedule_command_failed",Z instanceof Error?Z.message:String(Z))}}toCreateInput($){let Z=gF($,"yolo"),Q=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:Q,mode:Z}}toUpdateInput($){let Z=gF($),Q=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:Q,...Z===void 0?{}:{mode:Z}}}}import{ONE_TIME_SCHEDULE_CRON_PATTERN as mF,ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY as qk}from"@cline/shared";function s9($){return $?new Date($).getTime():void 0}function zk($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function H4($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.triggerKind==="one_off"?mF:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof Z?.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:s9($.nextRunAt),lastRunAt:s9($.lastRunAt),createdBy:typeof Z?.__hubScheduleCreatedBy==="string"?Z.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:Z?.__hubRuntimeOptions&&typeof Z.__hubRuntimeOptions==="object"&&!Array.isArray(Z.__hubRuntimeOptions)?Z.__hubRuntimeOptions:void 0,metadata:zk($)}}function Tk($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function ZW($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:s9($.startedAt),endedAt:s9($.completedAt),status:Tk($.status),errorMessage:$.error}}class t9{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new R6({dbPath:$.dbPath}),this.materializer=new O6({store:this.store}),this.runner=new q6({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(this.validateScheduleTiming($.cronPattern,$.metadata,!0),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return H4(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?H4(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>H4(Z))}updateSchedule($,Z){let Q=this.store.getHubSchedule($);if(!Q)return;let J=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot,W=Z.enabled??Q.enabled,X=H4(Q);if(this.validateScheduleTiming(Z.cronPattern??X.cronPattern,Z.metadata??X.metadata,W),W&&!J)throw Error("workspaceRoot is required for enabled schedules");let j=this.store.updateHubSchedule($,{...Z,scheduleId:$});return j?H4(j):void 0}validateScheduleTiming($,Z,Q){if($.trim()!==mF){ZH($);return}let J=Z?.[qk];if(typeof J!=="number"||!Number.isFinite(J)||Q&&J<=Date.now())throw Error("runAt must be a future timestamp")}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;await this.runner.tick();let Q=this.store.getRun(Z.runId)??Z;return ZW(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),ZW(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((W)=>{let X=Z??this.store.getSpec(W.specId);if(!X||X.source!=="hub-schedule")return;return ZW(W,X.externalId)}).filter((W)=>{if(!W)return!1;return!$.status||W.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,J=0,W=0,X;for(let j of Z){if(j.status==="success"||j.status==="completed")Q+=1;if(!X&&j.status!=="success"&&j.status!=="completed")X=j;if(j.startedAt&&j.endedAt)W+=j.endedAt-j.startedAt,J+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:J>0?W/J/1000:0,lastFailure:X}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let Z=this.store.getSpec($.specId);if(!Z||Z.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:Z.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:Z.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+Z.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let Z={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(Z).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,J)=>String(Q.nextRunAt).localeCompare(String(J.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:J})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:J}))}}QZ();import{resolveClineBuildEnv as lk}from"@cline/shared";function ik($,Z){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Q?`Failed to connect to hub at ${Z} (${Q} event before socket open).`:`Failed to connect to hub at ${Z}.`)}var rk="cline-hub-auth.";function nk($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function ak($,Z){let Q=new URL($),J=new URL(Z);return Q.search="",Q.hash="",J.search="",J.hash="",Q.toString()===J.toString()}function dF(){return lk()==="production"?U$():S1()}async function ok($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=dF(),J=await R0(Q.discoveryPath);if(J?.url&&ak($.toString(),J.url))return J.authToken;return}async function sk($={}){let Z=F$($);if(!nk($)){let Q=dF(),J=await R0(Q.discoveryPath);if(J?.url)return J.url}return P1(Z.host,Z.port,Z.pathname)}async function pF($){return await new Promise((Z,Q)=>{(async()=>{let J=new URL($),W=await ok(J);J.hash="";let X=new WebSocket(J.toString(),W?[`${rk}${W}`]:void 0),j=new Map,Y=0;X.addEventListener("open",()=>{Z({send(V){let B=V.requestId??`hub-client-${++Y}`;return new Promise((H,K)=>{j.set(B,{resolve:H,reject:K});let G={kind:"command",envelope:{...V,requestId:B}};X.send(JSON.stringify(G))})},close(){X.close()}})}),X.addEventListener("message",(V)=>{let B=JSON.parse(String(V.data));if(B.kind==="reply"&&B.envelope.requestId){let H=j.get(B.envelope.requestId);if(H)j.delete(B.envelope.requestId),H.resolve(B.envelope)}}),X.addEventListener("close",()=>{for(let V of j.values())V.reject(Error("Hub connection closed"));j.clear()}),X.addEventListener("error",(V)=>{Q(ik(V,$))})})().catch(Q)})}async function E10($){try{return(await pF($)).close(),!0}catch{return!1}}async function C10($,Z){let Q=await sk($),J=await pF(Q);try{return await J.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{J.close()}}function XW($){return $?JSON.parse(JSON.stringify($)):{}}function JZ($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?XW(Z.metadata):void 0;return{sessionId:typeof Z.sessionId==="string"?Z.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function lF($,Z){return $.error?.message??`hub command failed: ${Z}`}function tk($){let Z=XW($);if(typeof Z.error==="string"&&Z.error.trim())return{...Z,error:Z.error.trim()};let Q=Z.result&&typeof Z.result==="object"?Z.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...Z,error:Q.text.trim()};let J=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof J?.message==="string"&&J.message.trim())return{...Z,error:J.message.trim()};return Z}function iF($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function ek($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error("hub checkpoint restore returned no checkpoint");let Q=Z;if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Q}function $h($){let Z=XW($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||iF(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||iF(Z)||"",eventType:"schedule.execution.failed",payload:Z};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:Z};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:Z};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:Z};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:Z};case"session.notice":return{sessionId:Q,eventType:"runtime.chat.notice",payload:Z};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:Z};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:Z};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:Z};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:Z};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:tk($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class Zh{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new b1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-session-client",displayName:$.displayName??"hub session client",workspaceRoot:$.workspaceRoot,cwd:$.cwd})}async ensureMetadataApplied(){if(this.metadataApplied||!this.options.metadata){if(!this.options.metadata)await this.client.connect();return}await this.client.connect(),await this.client.command("client.update",{metadata:this.options.metadata}),this.metadataApplied=!0}async connect(){await this.ensureMetadataApplied()}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession($){await this.ensureMetadataApplied();let Z=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),Q=JZ(Z.payload);if(!Q?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}}}async sendRuntimeSession($,Z,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:Z.prompt,mode:Z.config.mode,attachments:Z.attachments,delivery:Z.delivery,timeoutSeconds:Z.config.timeoutSeconds},$,Q)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(t$(Q))return;throw Q}return JZ(Z.payload)}async readMessages($){let Z=$.trim();if(!Z)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw Error(lF(Q,"session.messages"));let J=Q.payload?.messages;return Array.isArray(J)?J:[]}async restore($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let J=$.config,W=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...J?{workspaceRoot:J.workspaceRoot,cwd:J.cwd,sessionConfig:{providerId:J.provider,modelId:J.model,apiKey:J.apiKey,cwd:J.cwd??J.workspaceRoot,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:J.mode??"act",rules:J.rules,maxIterations:J.maxIterations,enableTools:J.enableTools,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},metadata:{source:J.source??"cli",provider:J.provider,model:J.model,enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams,prompt:void 0,interactive:J.interactive!==!1},runtimeOptions:{mode:J.mode,systemPrompt:J.systemPrompt,maxIterations:J.maxIterations,enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams,autoApproveTools:J.autoApproveTools,configExtensions:J.configExtensions},modelSelection:{provider:J.provider,model:J.model,apiKey:J.apiKey},toolPolicies:J.toolPolicies}:{}},Z);if(!W.ok)throw Error(lF(W,"session.restore"));let X=JZ(W.payload);if(Q&&!X?.sessionId)throw Error("hub checkpoint restore returned no session id");let j=Array.isArray(W.payload?.messages)?W.payload.messages:void 0,Y=ek(W.payload);return{sessionId:X?.sessionId,startResult:X?.sessionId?{sessionId:X.sessionId,manifestPath:"",messagesPath:X.messagesPath??""}:void 0,...j?{messages:j}:{},checkpoint:Y}}async listSessions($){await this.ensureMetadataApplied();let Z=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(Z.payload?.sessions)?Z.payload?.sessions:[]).map((J)=>JZ({session:J})).filter((J)=>Boolean(J?.sessionId))}async deleteSession($,Z=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:Z})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,Z){let Q=new Set(($.sessionIds??[]).map((W)=>W.trim()).filter(Boolean)),J=this.client.subscribe((W)=>{let X=$h(W);if(!X)return;if(Q.size>0&&!Q.has(X.sessionId))return;Z.onEvent?.(X)});return this.ensureMetadataApplied().catch((W)=>{Z.onError?.(W instanceof Error?W:Error(String(W)))}),J}streamTeamProgress($,Z){let Q=this.client.subscribe((J)=>{if(J.event!=="team.progress"||!J.payload)return;Z.onProjection?.(J.payload)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list");return Array.isArray(Z.payload?.schedules)?Z.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,Z){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...Z})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,Z){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:Z});return Array.isArray(Q.payload?.executions)?Q.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(Z.payload?.upcoming)?Z.payload?.upcoming:[]}}class Qh{client;constructor($){this.client=new b1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let Z=await this.client.command("session.list",{limit:$});return Array.isArray(Z.payload?.sessions)?Z.payload.sessions:[]}subscribeUI($){return this.client.subscribe((Z)=>{switch(Z.event){case"ui.notify":$.onNotify?.(Z.payload);break;case"ui.show_window":$.onShowWindow?.(Z.payload);break;case"hub.client.registered":$.onClientRegistered?.(Z.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(Z.payload??{});break;case"session.created":$.onSessionCreated?.(Z.payload??{});break;case"session.updated":$.onSessionUpdated?.(Z.payload??{});break;case"session.detached":$.onSessionDetached?.(Z.payload??{});break}})}}import{normalizeProviderId as Jh}from"@cline/llms";function Wh($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function Xh($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function m10($={}){let Z=async(J)=>J,Q=new E$({sessionService:new z$(new O$),capabilities:{toolExecutors:{submit:Z}},fetch:$.fetch,telemetry:$.telemetry});return{async startSession(J){let W=(J.cwd?.trim()||J.workspaceRoot).trim(),X=await Q.startSession({source:J.source?.trim()||T0.CLI,interactive:!1,config:{providerId:Jh(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:W,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:Xh(J),maxIterations:J.maxIterations,enableTools:J.enableTools!==!1,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},toolPolicies:J.toolPolicies??{"*":{autoApprove:J.autoApproveTools!==!1}},localRuntime:{configExtensions:J.configExtensions}});return{sessionId:X.sessionId,startResult:{sessionId:X.sessionId,manifestPath:X.manifestPath,messagesPath:X.messagesPath}}},async sendSession(J,W){let X=await Q.runTurn({sessionId:J,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((j)=>j.content)});if(!X)throw Error("local hub schedule runtime returned no turn result");return{result:Wh(X)}},async abortSession(J){return await Q.abort(J,Error("hub schedule abort")),{applied:!0}},async stopSession(J){return await Q.stopSession(J),{applied:!0}}}}import{resolveClineBuildEnv as aU}from"@cline/shared";function jh($){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(`
|
|
768
|
-
`).trim()||void 0}var rF=120,jW="...";function YW($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=rF)return Z;let Q=rF-Buffer.byteLength(jW,"utf8");if(Q<=0)return jW;let J="";for(let W of Z){if(Buffer.byteLength(J+W,"utf8")>Q)break;J+=W}return`${J}${jW}`}async function nF($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,W=[...await G$(Q)].reverse().find((V)=>V.role==="assistant"),X=W?jh(W.content):void 0,j=$?.workspaceRoot?.trim()||"workspace",Y=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():j;return{title:`Task completed (${Z})`,body:YW(X&&X.length>0?X:Y.length>0?Y:j),severity:"info"}}import{captureSdkError as YZ,createSessionId as XI}from"@cline/shared";import{createSessionId as Hh}from"@cline/shared";import{createSessionId as Bh}from"@cline/shared";function Yh($){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 Vh($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())Z.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())Z.parentAgentId=$.parentAgentId;if($.agentId?.trim())Z.agentId=$.agentId;if($.conversationId?.trim())Z.conversationId=$.conversationId;if($.messagesPath?.trim())Z.messagesPath=$.messagesPath;if($.prompt?.trim())Z.prompt=$.prompt;if($.provider?.trim())Z.provider=$.provider;if($.model?.trim())Z.model=$.model;if($.source?.trim())Z.source=$.source;if(typeof $.pid==="number")Z.pid=$.pid;return Object.keys(Z).length>0?Z:void 0}function WZ($,Z,Q,J){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:Yh($.status),participants:Z?[...Z.participants.values()]:[],metadata:Vh($),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}}:{},...J?{aggregateUsage:{...J}}:{}}}function c($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function k($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function N8($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function C0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function q2($,Z,Q){return{version:"v1",event:$,eventId:Bh("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function S0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let J=await $.sessionHost.getAccumulatedUsage?.(Z);return WZ(Q,$.sessionState.get(Z),J?.usage,J?.aggregateUsage)}async function d0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[J,W]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return _$({session:Q,messages:J,usage:W?.usage,aggregateUsage:W?.aggregateUsage})}function VW($,Z,Q,J,W={}){let X=$.sessionState.get(Z);if(X){if(W.interactive!==void 0)X.interactive=W.interactive;if(J==="creator"&&!X.createdByClientId)X.createdByClientId=Q;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:J});return X}let j={createdByClientId:Q,interactive:W.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:J}]])};return $.sessionState.set(Z,j),j}function aF($,Z,Q,J,W={}){let X=$.sessionState.get(Z);if(X){if(W.interactive!==void 0)X.interactive=W.interactive;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:J});return X}let j={interactive:W.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:J}]])};return $.sessionState.set(Z,j),j}async function BW($,Z){let Q=Hh("approval_"),J=Z.sessionId;if($.sessionState.get(J)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((X)=>{$.pendingApprovals.set(Q,{sessionId:J,resolve:X}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:Z.sessionId,agentId:Z.agentId,conversationId:Z.conversationId,iteration:Z.iteration,toolCallId:Z.toolCallId,toolName:Z.toolName,inputJson:JSON.stringify(Z.input??null),policy:Z.policy},J))})}function HW($,Z,Q){let J=$.pendingApprovals.get(Z);if(!J)return;return $.pendingApprovals.delete(Z),J.resolve(Q),{sessionId:J.sessionId}}function KW($,Z,Q){let J=0;for(let[W,X]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:W,sessionId:X.sessionId}))continue;$.pendingApprovals.delete(W),X.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:W,approved:!1,cancelled:!0,reason:Q},X.sessionId)),J+=1}return J}async function oF($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return k(Z,"approval_not_found",`Unknown approval: ${Q}`);let W=typeof Z.payload?.reason==="string"?Z.payload.reason:Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)&&typeof Z.payload.payload.reason==="string"?Z.payload.payload.reason:void 0,X=Z.payload?.approved===!0,j=HW($,Q,{approved:X,reason:W});if(!j)return k(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:X,reason:W},j.sessionId)),c(Z,{approvalId:Q,approved:X})}import{createSessionId as Fh}from"@cline/shared";function Kh($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var sF={debug:10,info:20,warn:30,error:40,silent:50};function Gh(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function i($,Z,Q={}){if(sF[$]<sF[Gh()])return;let J=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([W,X])=>[W,Kh(X)]).filter(([,W])=>W!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${J}`);return}console.log(`[hub] ${J}`)}function GW($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);i("error",$,{error:Q})}async function tF($,Z,Q,J,W,X){let j=Fh("capreq_"),Y=performance.now();return i("info","capability.request.start",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:W}),await new Promise((V,B)=>{$.pendingCapabilityRequests.set(j,{sessionId:Z,targetClientId:W,capabilityName:Q,onProgress:X,resolve:(H)=>{if(i(H.ok?"info":"warn","capability.request.end",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:W,ok:H.ok,error:H.error,durationMs:Math.round(performance.now()-Y)}),!H.ok){B(Error(H.error||`Capability ${Q} was rejected by ${W}.`));return}V(H.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:j,targetClientId:W,capabilityName:Q,payload:J},Z)),i("info","capability.request.published",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:W})})}function eF($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",J=$.pendingCapabilityRequests.get(Q);if(!J)return k(Z,"capability_not_found",`Unknown capability request: ${Q}`);if((Z.clientId?.trim()||"")!==J.targetClientId)return k(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${J.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==J.sessionId)return k(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${J.sessionId}`);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return J.onProgress?.(X),c(Z,{requestId:Q})}function C$($,Z,Q){let J=0;for(let[W,X]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:W,...X}))continue;$.pendingCapabilityRequests.delete(W),i("warn","capability.request.cancelled",{requestId:W,sessionId:X.sessionId,capabilityName:X.capabilityName,targetClientId:X.targetClientId,reason:Q}),X.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:W,capabilityName:X.capabilityName,targetClientId:X.targetClientId,ok:!1,cancelled:!0,error:Q},X.sessionId)),J+=1}return J}async function $U($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",J=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",W=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!J||!W)return k(Z,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{},j=await $.requestCapability(Q,J,X,W);return c(Z,j)}catch(X){return k(Z,"capability_request_failed",X instanceof Error?X.message:String(X))}}function ZU($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",J=$.pendingCapabilityRequests.get(Q);if(!J)return k(Z,"capability_not_found",`Unknown capability request: ${Q}`);let W=Z.clientId?.trim()||"";if(W!==J.targetClientId)return k(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${J.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==J.sessionId)return k(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${J.sessionId}`);$.pendingCapabilityRequests.delete(Q);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,j=typeof Z.payload?.error==="string"?Z.payload.error:void 0,Y=Z.payload?.ok===!0;return i(Y?"info":"warn","capability.respond",{requestId:Q,sessionId:J.sessionId,capabilityName:J.capabilityName,targetClientId:J.targetClientId,respondedByClientId:W,ok:Y,error:j}),J.resolve({ok:Y,payload:X,error:j}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:J.capabilityName,targetClientId:J.targetClientId,respondedByClientId:W,ok:Y,payload:X,error:j},J.sessionId)),c(Z,{requestId:Q,ok:Y})}import{createSessionId as Uh}from"@cline/shared";function QU($,Z){let Q=Z.payload,J=Q?.clientId?.trim()||Z.clientId?.trim()||Uh("client_");return $.clients.set(J,{clientId:J,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:J,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),c(Z,{clientId:J})}function JU($,Z){let Q=Z.clientId?.trim(),J=Q?$.clients.get(Q):void 0;if(!Q||!J)return k(Z,"client_not_found","Client is not registered with this hub.");let W=N8(Z.payload?.metadata);if(J.lastSeenAt=Date.now(),W)J.metadata=JSON.parse(JSON.stringify(W));return c(Z)}function WU($,Z,Q){let J=Z.clientId?.trim();if(J)$.clients.delete(J),Q(J),$.publish($.buildEvent("hub.client.disconnected",{clientId:J}));return c(Z)}function XU($,Z){return c(Z,{clients:[...$.clients.values()]})}import{buildConnectorConnectArgs as Nh,CONNECTOR_PLATFORMS as fh,connectorChannelsFromPlatforms as Rh,listConnectorCatalog as Mh,mergeConnectorConnectArgs as Eh,shouldIncludeConnectorField as Ch}from"@cline/shared";import{withConnectorStore as DW}from"@cline/shared/db";import{existsSync as Dh,readdirSync as _h,readFileSync as Lh}from"node:fs";import{join as jU}from"node:path";import{listConnectorCatalog as Ah}from"@cline/shared";import{resolveConnectorDataDir as Oh}from"@cline/shared/storage";var YU={startedAt:($)=>typeof $.startedAt==="string"?$.startedAt:void 0,port:($)=>typeof $.port==="number"?$.port:void 0,baseUrl:($)=>typeof $.baseUrl==="string"?$.baseUrl:void 0,connectionMode:($)=>typeof $.connectionMode==="string"?$.connectionMode:void 0,userName:($)=>typeof $.userName==="string"?$.userName:void 0,botUsername:($)=>typeof $.botUsername==="string"?$.botUsername:void 0,applicationId:($)=>typeof $.applicationId==="string"?$.applicationId:void 0,phoneNumberId:($)=>typeof $.phoneNumberId==="string"?$.phoneNumberId:void 0},qh={discord:{required:["userName","applicationId"],optional:["startedAt","port","baseUrl"]},telegram:{required:["botUsername"],optional:["startedAt"]},gchat:{required:["userName"],optional:["startedAt","port","baseUrl"]},linear:{required:["userName"],optional:["startedAt","port","baseUrl"]},slack:{required:["userName"],optional:["startedAt","connectionMode","port","baseUrl"]},whatsapp:{required:["userName"],optional:["startedAt","phoneNumberId","port","baseUrl"]}};function zh($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function Th($,Z){let Q;try{let V=JSON.parse(Lh(Z,"utf8"));if(!V||typeof V!=="object"||Array.isArray(V))return;Q=V}catch{return}let J=typeof Q.pid==="number"?Q.pid:void 0,W=typeof Q.hubUrl==="string"?Q.hubUrl:typeof Q.rpcAddress==="string"?Q.rpcAddress:void 0;if(!J||!W||!zh(J))return;let X=qh[$];if(!X)return;let j={};for(let V of X.required){let B=YU[V](Q);if(!B||typeof B==="string"&&!B.trim())return;j[V]=B}for(let V of X.optional){let B=YU[V](Q);if(B!==void 0)j[V]=B}let Y=$==="telegram"?j.botUsername:$==="discord"?j.applicationId:$==="whatsapp"&&typeof Q.instanceKey==="string"?Q.instanceKey:j.userName;if(!Y)return;return{id:`${$}:${Y}`,type:$,instanceId:Y,pid:J,hubUrl:W,...j}}function FW(){let $=[];for(let{name:Z}of Ah()){let Q=jU(Oh(),Z);if(!Dh(Q))continue;for(let J of _h(Q)){if(!J.endsWith(".json")||J.endsWith(".threads.json"))continue;let W=Th(Z,jU(Q,J));if(W)$.push(W)}}return $.sort((Z,Q)=>{if(Z.type!==Q.type)return Z.type.localeCompare(Q.type);let J=Z.botUsername??Z.userName??"",W=Q.botUsername??Q.userName??"";return J.localeCompare(W)})}q0();function XZ($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function BU($){return typeof $==="string"?$.trim():void 0}function VU($){if(!XZ($))return{};let Z={};for(let[Q,J]of Object.entries($))if(typeof J==="string")Z[Q]=J.trim();return Z}function wh(){return DW(($)=>$.listConfigs()).map(($)=>({id:$.channel,type:$.type,configuredAt:$.configuredAt,updatedAt:$.updatedAt})).sort(($,Z)=>$.type.localeCompare(Z.type))}function _W(){return{available:Rh(),active:FW(),configured:wh()}}function Ph($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function Sh($,Z){let Q={};for(let W of $.fields)Q[W.flag]=Z[W.flag]??W.initialValue??"";let J={};for(let W of $.fields){if(!Ch(W,Q))continue;Ph(W,Q),J[W.flag]=Q[W.flag]}return J}function bh($){if(!XZ($))throw Error("connector.configure payload must be an object.");let Z=BU($.channel);if(!Z)throw Error("channel is required");let Q=fh.find((K)=>K.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(Mh().map((K)=>K.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let W=VU($.values),X=Sh(Q,W),j=XZ($.security)?$.security:{},Y=j.enabled===!0,V=VU(j.values);if(Y&&Q.security)for(let K of Q.security.fields){let G=V[K.key];if(!G)throw Error(K.requiredMessage);let F=K.validate?.(G);if(F)throw Error(F)}let B=Y?{enabled:!0,values:V}:{enabled:!1,values:{}},H=Nh(Q,X,B);return DW((K)=>K.upsertConfig({channel:Z,type:Z,values:X,security:B,updateConnectArgs:(G)=>Eh(Q,G.connection.connectArgs,H,{replaceSecurityArgs:G.config?.security?.enabled===!0||B.enabled})})),_W()}function yh($){if(!XZ($))throw Error("connector.delete_config payload must be an object.");let Z=BU($.channel);if(!Z)throw Error("channel is required");return DW((Q)=>Q.deleteConfig(Z)),_W()}function kh($){return $==="connector.configure"||$==="connector.delete_config"}function UW($,Z,Q){if(!kh(Z.command))return;w8($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function HU($,Z){try{if(Z.command==="connector.channels")return c(Z,_W());if(Z.command==="connector.configure"){let Q=bh(Z.payload);return UW($,Z,!0),c(Z,Q)}if(Z.command==="connector.delete_config"){let Q=yh(Z.payload);return UW($,Z,!0),c(Z,Q)}return k(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return UW($,Z,!1),k(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var hh=30000;function Ih($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function xh($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function gh($,Z,Q){let J=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return k($,L6,J)}function vh($){return $?$:void 0}function mh($){let Z=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(Z&&Number.isFinite(Z)&&Z>0)return Math.floor(Z);let Q=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(Q&&Number.isFinite(Q)&&Q>0)return Math.floor(Q*1000);return}async function ch($,Z,Q,J){let W=performance.now(),X=!1,j={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:J},Y=setInterval(()=>{if(X)return;let H=Math.round(performance.now()-W);i("warn","run.heartbeat",{...j,elapsedMs:H}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:H,...J?{timeoutMs:J}:{}},Q.sessionId))},hh),V=$.sessionHost.runTurn(Q);V.then((H)=>{if(!X)return;i("warn","run.late_end",{...j,elapsedMs:Math.round(performance.now()-W),finishReason:H?.finishReason})},(H)=>{if(!X)return;i("error","run.late_error",{...j,elapsedMs:Math.round(performance.now()-W),error:H})});let B;try{if(!J)return await V;return await Promise.race([V,new Promise((H,K)=>{B=setTimeout(()=>{let G=`Hub run ${Z.command} timed out after ${J}ms.`;X=!0,clearInterval(Y),K(Error(G)),i("error","run.timeout",{...j,elapsedMs:Math.round(performance.now()-W)}),KW($,(F)=>F.sessionId===Q.sessionId,G),C$($,(F)=>F.sessionId===Q.sessionId,G),$.sessionHost.abort(Q.sessionId,G).catch((F)=>{i("error","run.timeout_abort_failed",{...j,error:F})})},J)})])}finally{if(X=!0,clearInterval(Y),B)clearTimeout(B)}}async function KU($,Z){let Q=C0(Z),J=Z.payload&&typeof Z.payload==="object"?Z.payload:{},W=typeof J.prompt==="string"?J.prompt:typeof J.input==="string"?J.input:"";if(!W.trim())return k(Z,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let X=J.attachments&&typeof J.attachments==="object"&&!Array.isArray(J.attachments)?J.attachments:void 0,j=Array.isArray(X?.userFiles)?X.userFiles.filter((H)=>typeof H==="string"):void 0,Y=mh(J);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let V;try{V=await ch($,Z,{sessionId:Q,prompt:W,mode:vh(J.mode),delivery:J.delivery==="queue"||J.delivery==="steer"?J.delivery:void 0,userImages:Array.isArray(X?.userImages)?X.userImages:void 0,userFiles:j,timeoutMs:Y},Y)}catch(H){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(t$(H))return gh(Z,Q,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Q)),H}if(V){let H=await d0($,Q),K=xh(V);if($.publish($.buildEvent(Ih(V.finishReason),{reason:V.finishReason,...K?{error:K}:{},result:V,...H?{snapshot:H}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let B=await d0($,Q);return c(Z,V||B?{...V?{result:V}:{},...B?{snapshot:B}:{}}:void 0)}async function GU($,Z){let Q=C0(Z),J=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";KW($,(W)=>W.sessionId===Q,J);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(W){i("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:W})}finally{C$($,(W)=>W.sessionId===Q,J)}return c(Z,{applied:!0})}async function FU($,Z){let Q=n9(Z.payload?.payload);if(!Q)return k(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),c(Z,{applied:!0})}async function UU($,Z){switch(Z.type){case"chunk":return;case"agent_event":await uh($,Z);return;case"hook":if(Z.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:Z.payload.toolName},Z.payload.sessionId));else if(Z.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:Z.payload.toolName},Z.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:Z.payload.sessionId,summary:Z.payload.summary,lastEvent:Z.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,Z.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:Z.payload.sessionId,prompts:Z.payload.prompts},Z.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:Z.payload.id,prompt:Z.payload.prompt,delivery:Z.payload.delivery,attachmentCount:Z.payload.attachmentCount,userImages:Z.payload.userImages,userFiles:Z.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:Z.payload.sessionId,prompt:Q},Z.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:Z.payload.sessionId,snapshot:Z.payload.snapshot},Z.payload.sessionId));return;case"status":{let[Q,J]=await Promise.all([S0($,Z.payload.sessionId),d0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...J?{snapshot:J}:{}},Z.payload.sessionId));return}case"ended":await dh($,Z);return;default:return}}async function uh($,Z){let{sessionId:Q,event:J}=Z.payload;if(J.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:J.iteration},Q));return}if(J.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:J.iteration,hadToolCalls:J.hadToolCalls,toolCallCount:J.toolCallCount},Q));return}if(J.type==="content_start"){if(J.contentType==="text"&&typeof J.text==="string"&&J.text.length>0){$.publish($.buildEvent("assistant.delta",{text:J.text},Q));return}if(J.contentType==="reasoning"){if(J.redacted&&!J.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof J.reasoning==="string"&&J.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:J.reasoning,redacted:J.redacted===!0},Q));return}if(J.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:J.toolCallId,toolName:J.toolName,input:J.input},Q));return}}if(J.type==="content_end"){switch(J.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:J.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:J.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:J.toolCallId,toolName:J.toolName,output:J.output,error:J.error},Q));break}return}if(J.type==="notice"){$.publish($.buildEvent("session.notice",{sessionId:Q,message:J.message,noticeType:J.noticeType,...J.displayRole?{displayRole:J.displayRole}:{},...J.reason?{reason:J.reason}:{},...J.metadata?{metadata:J.metadata}:{},agent:{kind:Z.payload.teamRole==="teammate"?"teammate":J.parentAgentId?"subagent":"lead",agentId:J.agentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(J.type==="usage"){let W;try{W=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{W=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:J.inputTokens,outputTokens:J.outputTokens,cacheReadTokens:J.cacheReadTokens??0,cacheWriteTokens:J.cacheWriteTokens??0,totalCost:J.cost??0},totals:{inputTokens:J.totalInputTokens,outputTokens:J.totalOutputTokens,cacheReadTokens:J.totalCacheReadTokens??0,cacheWriteTokens:J.totalCacheWriteTokens??0,totalCost:J.totalCost??0},usage:W?.usage,aggregateUsage:W?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":J.parentAgentId?"subagent":"lead",agentId:J.agentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(J.type==="done")$.publish($.buildEvent("agent.done",{reason:J.reason,text:J.text,iterations:J.iterations,usage:J.usage},Q))}async function dh($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),J=Q===Z.payload.reason||Q==="run.start.reply";if(J)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[W,X]=await Promise.all([S0($,Z.payload.sessionId),d0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let j=await nF(W);$.publish($.buildEvent("ui.notify",j,Z.payload.sessionId))}if(J)return;$.publish($.buildEvent(Z.payload.reason==="aborted"?"run.aborted":Z.payload.reason==="error"||Z.payload.reason==="failed"?"run.failed":"run.completed",{reason:Z.payload.reason,...X?{snapshot:X}:{}},Z.payload.sessionId))}import{createSessionId as AU,parseRuntimeConfigExtensions as OU,ReasoningEffortSchema as $I}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as C$0,HUB_COMPACTION_CAPABILITY as w$0,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as P$0,HUB_HOOK_CAPABILITY_PREFIX as S$0,HUB_MISTAKE_LIMIT_CAPABILITY as b$0,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as y$0,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as k$0,isHubToolExecutorName as ph}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as v$0,HUB_COMPACTION_CAPABILITY as m$0,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as c$0,HUB_HOOK_CAPABILITY_PREFIX as u$0,HUB_MISTAKE_LIMIT_CAPABILITY as d$0,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as p$0,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as l$0}from"@cline/shared";var lh=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function z2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function ih($,Z){let Q=typeof $.name==="string"?$.name.trim():"",J=typeof $.description==="string"?$.description:"",W=typeof $.capabilityName==="string"?$.capabilityName.trim():"",X=z2($.inputSchema);if(!Q||!J||!X||!W||Z.has(W))return;return Z.add(W),{kind:"tool",capabilityName:W,name:Q,description:J,inputSchema:X,...z2($.lifecycle)?{lifecycle:z2($.lifecycle)}:{}}}function AW($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let J of $){if(!J||typeof J!=="object"||Array.isArray(J))continue;let W=J,X=W.kind,j=typeof W.capabilityName==="string"?W.capabilityName.trim():"";if(!j||Q.has(j))continue;if(X==="tool"){let Y=ih(W,Q);if(Y)Z.push(Y);continue}if(X==="toolExecutor"){let Y=W.executor;if(!ph(Y))continue;Q.add(j),Z.push({kind:"toolExecutor",capabilityName:j,executor:Y});continue}if(X==="hook"){let Y=typeof W.name==="string"?W.name.trim():"";if(!Y)continue;Q.add(j),Z.push({kind:"hook",capabilityName:j,name:Y});continue}if(X==="compaction"){Q.add(j),Z.push({kind:"compaction",capabilityName:j,...z2(W.config)?{config:z2(W.config)}:{}});continue}if(X==="checkpoint"){Q.add(j),Z.push({kind:"checkpoint",capabilityName:j,...z2(W.config)?{config:z2(W.config)}:{}});continue}if(X==="mistakeLimit"){Q.add(j),Z.push({kind:"mistakeLimit",capabilityName:j});continue}if(X==="userInstructionService")Q.add(j),Z.push({kind:"userInstructionService",capabilityName:j})}return Z}function _U($){let Z=$.metadata?{...$.metadata}:void 0;return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:Z&&Object.keys(Z).length>0?Z:void 0}}function rh($){return Object.hasOwn($,"update")?$.update:$}function U4($){return $.trim().replace(/^\/+/,"").toLowerCase()}function nh($){let Z=($??[]).map(U4).filter(Boolean);return Z.length>0?new Set(Z):void 0}function ah($,Z,Q){if(!Q)return!0;let J=U4($),W=U4(Z),X=J.includes(":")?J.split(":").at(-1)??J:J,j=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(J)||Q.has(W)||Q.has(X)||Q.has(j)}function LW($,Z){let Q=nh(Z);return $.records.skill.map((J)=>({id:J.id,name:J.item.name,description:"description"in J.item&&typeof J.item.description==="string"?J.item.description:void 0,disabled:J.item.disabled===!0,skill:J.item})).filter((J)=>ah(J.id,J.name,Q))}function DU($,Z){let Q=async(J,W)=>{let X=U4(J),Y=LW($,Z).filter((G)=>G.id===X||U4(G.name)===X||G.id.endsWith(`:${X}`)).filter((G)=>!G.disabled);if(Y.length!==1)return Y.length>1?`Skill "${J}" is ambiguous. Use one of: ${Y.map((G)=>G.id).join(", ")}`:`Skill "${J}" not found.`;let V=Y[0].skill,B=W?.trim(),H=B?`
|
|
764
|
+
version = team_outcome_fragments.version + 1`,[J,X.outcomeId,X.id,X.section,X.sourceAgentId,X.sourceRunId??null,X.content,X.status,X.reviewedBy??null,X.reviewedAt?X.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,Z){let Q=T8($),J=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[Q]);if(J.length===0)return[];let W=cJ();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
|
|
765
|
+
WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,W,Q]),J.map((X)=>X.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function DF($={}){try{let Z=new W4($);return Z.init(),Z}catch{let Z=new m9({teamDir:$.teamDir});return Z.init(),Z}}function c9($,Z){return _y($,Z)}function Oy($,Z){let Q=Z?.["*"]??{},J=Z?.[$]??{};return{...Q,...J}.enabled!==!1}function qy($,Z){return $.filter((Q)=>Oy(Q.name,Z))}function uJ($,Z){return e1(qy($,Z))}var zy={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 Ty($){let Z=$.trim().toLowerCase();return zy[Z]??Z}function Ny($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(Ty));if(Z.skills!==void 0)Q.add("skills");return $.filter((J)=>Q.has(J.name))}function _F(){return`team-${Ay(5)}`}function u9($,Z,Q,J,W,X,j,Y,V){let B=K1[X$({mode:Q})],H=a8(Z,J,Q,W??n8);return uJ(W6({cwd:$,telemetry:V,...B,enableSkills:!!j,...H,executors:{...j?{skills:j}:{},...Y??{}}}),X)}function fy($){return u9($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,Ry,$.toolExecutors).some((Z)=>Z.name==="skills")}var Ry=async()=>"";async function My($){let Z=j0();if(!a$({filePath:Z}))return{tools:[]};let Q=new F6({clientFactory:u5({settingsPath:Z})}),J;try{J=await K6(Q,{filePath:Z})}catch(Y){await Q.dispose().catch(()=>{});let V=Y instanceof Error?Y.message:String(Y);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let W=J.filter((Y)=>Y.disabled!==!0),X=await Promise.allSettled(W.map((Y)=>p5({serverName:Y.name,provider:Q,timeoutMs:Ly(Y.timeoutSeconds)*1000}))),j=[];for(let[Y,V]of X.entries())if(V.status==="fulfilled")j.push(...V.value);else{let B=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${W[Y].name}", skipping: ${B}`)}return{tools:j,shutdown:async()=>{await Q.dispose()}}}function Ey($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function Cy($){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 wy($){let Z=K1[X$({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??Z.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??Z.enableAgentTeams??!0,disableMcpSettingsTools:$.disableMcpSettingsTools===!0,yolo:$.yolo===!0,missionLogIntervalSteps:typeof $.missionLogIntervalSteps==="number"&&Number.isFinite($.missionLogIntervalSteps)?$.missionLogIntervalSteps:3,missionLogIntervalMs:typeof $.missionLogIntervalMs==="number"&&Number.isFinite($.missionLogIntervalMs)?$.missionLogIntervalMs:120000}}class d9{teamRuntimeEntries=new Map;async build($){let{config:Z,hooks:Q,extensions:J,logger:W,telemetry:X,createSpawnTool:j,onTeamRestored:Y,userInstructionService:V,configExtensions:B,toolExecutors:H}=$,K=$.onTeamEvent??(()=>{}),G=wy(Z),F=Z.workspaceRoot??Z.cwd,U=$.toolPolicies??Z.toolPolicies,_=f1(),L=[],O=Z.teamName?.trim()||_F(),D=Z.sessionId?.trim()||O,q=G.enableSpawnAgent?F9({workspaceRoot:F}):{configs:[],errors:[]},T=q.configs.some((u)=>u.skills!==void 0),z=c9(B,"rules"),A=c9(B,"skills"),f=A||T,N=c9(B,"workflows"),C=c9(B,"plugins"),P=z||A||N,n=!1,g=Boolean(V),w=V,p;for(let u of q.errors)(W??Z.logger)?.log?.(`[agents] Failed to load agent config at ${u.path}: ${u.error.message}`);if(!w&&(P||T))w=t2({skills:f?{workspacePath:F,includePluginSkills:C,pluginSkillDirectories:C?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(w)await w.start().catch(()=>{});let G0=G.enableTools&&A&&Boolean(w)&&w?.hasConfiguredSkills(Z.skills)===!0&&fy({cwd:Z.cwd,providerId:Z.providerId,mode:G.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:U,toolExecutors:H}),d1=w&&P?w.createExtension({includeRules:z,includeSkills:A,includeWorkflows:N,registerSkillsTool:G0,allowedSkillNames:Z.skills}):void 0,p1=d1?[...J??Z.extensions??[],d1]:J??Z.extensions;if(G.enableTools){if(L.push(...u9(Z.cwd,Z.providerId,G.mode,Z.modelId,Z.toolRoutingRules,U,void 0,H,X??Z.telemetry)),!G.disableMcpSettingsTools){let u=await My(Z.logger);L.push(...u.tools),p=u.shutdown}}let Z0,q1=G.enableAgentTeams?DF():void 0,l1=q1?.loadRuntime(D),V1=l1?.state,g0=l1?.teammates??[],i1=new Map(g0.map((u)=>[u.agentId,u])),L0=Z.sessionId||O,w0,B1=[],v=!1,b0=a2({providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey??"",baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,reasoningEffort:Z.reasoningEffort,thinkingBudgetTokens:Z.thinkingBudgetTokens,maxTokensPerTurn:Z.maxTokensPerTurn,temperature:Z.temperature,maxIterations:Z.maxIterations,hooks:Q,extensions:p1,logger:W??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(G.enableSpawnAgent){if(q.configs.length>0)L.push(...uJ(D9({configProvider:b0,agents:q.configs,createSubAgentTools:(u)=>G.enableTools?Ny(u9(Z.cwd,u.providerId??Z.providerId,G.mode,u.modelId??Z.modelId,Z.toolRoutingRules,U,u.skills!==void 0&&w?.createSkillsExecutor?w.createSkillsExecutor(u.skills):void 0,H,X??Z.telemetry),u):[],hookErrorMode:Z.hookErrorMode,toolPolicies:U,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),U))}if(!this.teamRuntimeEntries.has(L0))this.teamRuntimeEntries.set(L0,{delegatedAgentConfigProvider:b0});let y=()=>{if(!G.enableAgentTeams)return;let u=this.teamRuntimeEntries.get(L0)??{delegatedAgentConfigProvider:b0};if(this.teamRuntimeEntries.set(L0,u),Z0=u.runtime,!Z0){if(Z0=new p6({teamName:O,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:G.missionLogIntervalSteps,missionLogIntervalMs:G.missionLogIntervalMs,onTeamEvent:(V0)=>{if(K(V0),Z0&&q1){if(V0.type==="teammate_spawned"&&V0.teammate?.rolePrompt){let z1={agentId:V0.agentId,rolePrompt:V0.teammate.rolePrompt,modelId:V0.teammate.modelId,maxIterations:V0.teammate.maxIterations};i1.set(z1.agentId,z1)}if(V0.type==="teammate_shutdown"&&!Cy(V0.reason))i1.delete(V0.agentId);q1.handleTeamEvent(D,V0),q1.persistRuntime(D,Z0.exportState(),Array.from(i1.values()))}}}),V1)Z0.hydrateState(V1),v=!0;u.runtime=Z0}if(!n){if(!Z0)return;n=!0;let V0=k5({runtime:Z0,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(V1),restoredTeammates:g0,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(z1)=>{B1=z1,w0?.addTools(z1)},createBaseTools:G.enableTools?()=>u9(Z.cwd,Z.providerId,G.mode,Z.modelId,Z.toolRoutingRules,U,void 0,H,X??Z.telemetry):void 0,teammateConfigProvider:b0});if(v)Z0.recoverActiveRuns("runtime_recovered");if(V0.restoredFromPersistence)Y?.();L.push(...V0.tools)}return Z0};if(G.enableSpawnAgent&&j){let u=j();L.push({...u,execute:async(V0,z1)=>{return y(),u.execute(V0,z1)}})}if(G.enableAgentTeams)y();let Y0=uJ(L,U),A0=Y0.some((u)=>u.name==="submit_and_exit"&&u.lifecycle?.completesRun===!0),O0=G.enableAgentTeams?()=>{let u=this.teamRuntimeEntries.get(L0)?.runtime;if(!u)return;let V0=u.listTasks(),z1=V0.some((r1)=>r1.status==="in_progress"||r1.status==="pending"),BX=u.listRuns({}),J_=BX.some((r1)=>r1.status==="running"||r1.status==="queued");if(z1||J_){let r1=V0.filter((p0)=>p0.status==="in_progress"||p0.status==="pending").map((p0)=>`${p0.id} (${p0.status}): ${p0.title}`).join(", "),HX=BX.filter((p0)=>p0.status==="running"||p0.status==="queued").map((p0)=>`${p0.id} (${p0.status})`).join(", "),fZ=[];if(r1)fZ.push(`Unfinished tasks: ${r1}`);if(HX)fZ.push(`Active runs: ${HX}`);return`[SYSTEM] You still have team obligations. ${fZ.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,S$=A0?{requireCompletionTool:!0,...O0?{completionGuard:O0}:{}}:O0?{completionGuard:O0}:void 0;return{tools:Y0,logger:W??Z.logger,telemetry:X??Z.telemetry,teamRuntime:Z0,teamRestoredFromPersistence:Boolean(V1),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(L0)?.delegatedAgentConfigProvider??b0,extensions:p1,completionPolicy:S$,registerLeadAgent:(u)=>{if(w0=u,B1.length>0)u.addTools(e1(B1,[..._]))},shutdown:async(u)=>{if(Ey(Z0,u),this.teamRuntimeEntries.delete(L0),await p?.(),!g)w?.stop()}}}}function Py($,Z){let Q=$?.expiresAt,J=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===J}class X4 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 p9{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new R$,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=z0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let J=this.refreshInFlight.get(Z);if(J)return J;let W=this.resolveProviderApiKeyInternal($,Z,Q).catch((X)=>{throw X}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,W),W}async resolveProviderApiKeyInternal($,Z,Q){let J=z0($);if(!J)return null;let W=this.providerSettingsManager.getProviderSettings(Z);if(!W)return s(`oauth.resolve providerId=${$} storageProviderId=${Z} outcome=no_settings`),null;let X=HQ($,W);if(!X)return s(`oauth.resolve providerId=${$} storageProviderId=${Z} outcome=no_credentials`),null;s(`oauth.resolve.start providerId=${$} storageProviderId=${Z} forceRefresh=${Q} accessTokenHash=${y0(X.access)} refreshTokenHash=${y0(X.refresh)}`);let j=await J.refresh({settings:W,credentials:X,forceRefresh:Q,telemetry:this.telemetry});if(!j)throw s(`oauth.resolve providerId=${$} outcome=refresh_returned_null`),new X4($);let Y=y8({manager:this.providerSettingsManager,providerId:$,settings:W,credentials:j,setLastUsed:!1,save:!1}),V=!Py(W.auth,Y.auth);if(V)s(`oauth.resolve.refreshed providerId=${$} newAccessTokenHash=${y0(j.access)} newRefreshTokenHash=${y0(j.refresh)} savingToDisk=true`),this.providerSettingsManager.saveProviderSettings(Y,{setLastUsed:!1,tokenSource:"oauth"});else s(`oauth.resolve providerId=${$} outcome=not_refreshed`);return{apiKey:J.getApiKey(Y)??j.access,accountId:j.accountId,refreshed:V}}}import{normalizeUserInput as Sy}from"@cline/shared";import{nanoid as by}from"nanoid";class LF{list($){return $?$1($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),J=$.pendingPrompts.findIndex((V)=>V.id===Q);if(J<0)return{sessionId:Z.sessionId,prompts:$1($),updated:!1};let W=$.pendingPrompts[J];if(!W)return{sessionId:Z.sessionId,prompts:$1($),updated:!1};let X=Z.prompt===void 0?W.prompt:Sy(Z.prompt).trim();if(!X)throw Error("prompt cannot be empty");let j=Z.delivery??W.delivery,Y={...W,prompt:X,mode:Z.mode??W.mode,delivery:j};return $.pendingPrompts.splice(J,1),yy($,Y,J,W.delivery),{sessionId:Z.sessionId,prompts:$1($),prompt:l9(Y),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),J=$.pendingPrompts.findIndex((X)=>X.id===Q);if(J<0)return{sessionId:Z.sessionId,prompts:$1($),removed:!1};let[W]=$.pendingPrompts.splice(J,1);return{sessionId:Z.sessionId,prompts:$1($),prompt:W?l9(W):void 0,removed:!0}}enqueue($,Z){let{prompt:Q,mode:J,delivery:W,userImages:X,userFiles:j}=Z,Y=$.pendingPrompts.findIndex((V)=>V.prompt===Q);if(Y>=0){let[V]=$.pendingPrompts.splice(Y,1),B={...V,prompt:Q,mode:J??V.mode,userImages:X??V.userImages,userFiles:j??V.userFiles};if(W==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...B,delivery:"steer"});else $.pendingPrompts.push(B)}else{let V={id:`pending_${Date.now()}_${by(5)}`,prompt:Q,mode:J,delivery:W,userImages:X,userFiles:j};if(W==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return $1($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((J)=>J.delivery==="steer");if(Z<0)return{prompts:$1($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:$1($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:$1($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),$1($)}clear($){return $.pendingPrompts.length=0,[]}}class dJ{deps;service=new LF;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}delete($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}enqueue($,Z){let Q=this.deps.getSession($);if(!Q||Q.aborting)return;this.service.enqueue(Q,Z),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let Z=this.deps.getSession($);if(!Z)return;let{entry:Q}=this.service.consumeSteer(Z);if(!Q)return;return this.emitPrompts(Z),this.emitSubmitted(Z,Q),Q}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:$1($)}})}scheduleDrain($,Z){if(Z.pendingPrompts.length===0||Z.aborting||Z.drainingPendingPrompts||!Z.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let Z=this.deps.getSession($);if(!Z)return;if(Z.aborting||Z.drainingPendingPrompts)return;if(!Z.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(Z);if(!Q)return;this.emitPrompts(Z),this.emitSubmitted(Z,Q),Z.drainingPendingPrompts=!0;let J=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{J=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,J&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=l9(Z);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}})}}function l9($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function $1($){return $.pendingPrompts.map(l9)}function yy($,Z,Q,J){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(J==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}q0();class lJ{deps;constructor($){this.deps=$}dispatchAgentEvent($,Z,Q){let J=this.deps.getSession($),W={sessionId:$,config:Z,liveSession:J,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},X=AJ(Q),j=!!J&&(!X.agentId||X.agentId===pJ(J.agent));OJ(W,Q,j?{isPrimaryAgentEvent:!0,agentId:pJ(J.agent),conversationId:J.agent.getConversationId(),...J?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(n3(Q,Z),Z.type==="agent_event"){let J={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};OJ(J,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let J=I1({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:pJ(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(J)k$(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...J})}}if(await a3($,Z,this.deps.invokeBackendOptional),Q)o3(Q,$,Z,this.deps.emit)}async handlePluginEvent($,Z,Q,J){if(Z.name==="plugin_log"){this.handlePluginLog($,Z.payload);return}if(Z.name==="plugin_telemetry"){this.handlePluginTelemetry($,Z.payload,J);return}if(Z.name==="automation_event"){let B=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!B)return;let H=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!H)return;await B.ingestEvent(H);return}if(Z.name!=="steer_message"&&Z.name!=="queue_message"&&Z.name!=="pending_prompt")return;let W=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0,X=typeof W?.sessionId==="string"&&W.sessionId.trim().length>0?W.sessionId.trim():$,j=typeof W?.prompt==="string"?W.prompt.trim():"";if(!j)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":W?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(X,{prompt:j,delivery:Y})}handlePluginTelemetry($,Z,Q){let W=this.deps.getSession($)?.config.telemetry??Q;if(!W||!Z||typeof Z!=="object")return;let X=Z,j=typeof X.pluginName==="string"&&X.pluginName?X.pluginName:"unknown";if(X.kind==="event"){let Y=typeof X.event==="string"?X.event.trim():"";if(!Y)return;let V={...X.properties&&typeof X.properties==="object"?X.properties:{},plugin_name:j,session_id:$};if(X.required===!0)W.captureRequired(`plugin.${Y}`,V);else W.capture({event:`plugin.${Y}`,properties:V});return}if(X.kind==="metric"){let Y=typeof X.name==="string"?X.name.trim():"",V=typeof X.value==="number"?X.value:NaN;if(!Y||Number.isNaN(V))return;let B={...X.attributes&&typeof X.attributes==="object"?X.attributes:{},plugin_name:j},H=typeof X.description==="string"?X.description:void 0,K=X.required===!0,G=`plugin.${Y}`;if(X.metric==="counter")W.recordCounter(G,V,B,H,K);else if(X.metric==="histogram")W.recordHistogram(G,V,B,H,K);else if(X.metric==="gauge")W.recordGauge(G,V,B,H,K)}}handlePluginLog($,Z,Q){let J=this.deps.getSession($),W=Q??J?.config.extensionContext?.logger??J?.config.logger;if(!W||!Z||typeof Z!=="object")return;let X=Z,j=typeof X.message==="string"?X.message:"";if(!j)return;let Y=X.metadata&&typeof X.metadata==="object"?{...X.metadata}:{};if(Y.sessionId??=$,typeof X.pluginName==="string"&&X.pluginName)Y.pluginName=X.pluginName;if(X.level==="debug"){W.debug(j,Y);return}if(X.level==="error"){if(W.error)W.error(j,Y);else W.log(j,{...Y,severity:"error"});return}W.log(j,Y)}}function pJ($){return $.getAgentId()}function iJ($){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:x1($.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 rJ($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function AF($,Z,...Q){let J=rJ($,Z);if(!J)throw Error(`session service method not available: ${Z}`);return Promise.resolve(J.apply($,Q))}async function OF($,Z,...Q){let J=rJ($,Z);if(!J)return;await Promise.resolve(J.apply($,Q))}async function qF($,Z,...Q){let J=rJ($,Z);if(!J)return;return await Promise.resolve(J.apply($,Q))}J1();q0();function nJ($,Z,Q){return{onSubAgentEvent:(J)=>$.onAgentEvent(Q,Z,J),onSubAgentStart:(J)=>{let W=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(J.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let X=I1({agentId:J.subAgentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:J.parentAgentId});if(X)k$(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...X});N4(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:J.parentAgentId,agentId:J.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",Q,J)},onSubAgentEnd:(J)=>{let W=$.getSession(Q)?.runtime.teamRuntime,X=$.subAgentStarts.get(J.subAgentId),j=X?Date.now()-X.startedAt:0,Y=J.result?.text?J.result.text.split(`
|
|
766
|
+
`).length:0;N4(Z.telemetry,{event:"ended",ulid:Q,durationMs:j,outputLines:Y,errorMessage:J.error?String(J.error):void 0,agentId:J.subAgentId,parentId:J.parentAgentId,...I1({agentId:J.subAgentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:J.parentAgentId})}),$.subAgentStarts.delete(J.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,J)}}}function aJ($,Z,Q,J){let W=nJ($,Z,Q);return s2({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let j=Z.enableTools?W6({cwd:Z.cwd,telemetry:Z.telemetry,...K1[X$({mode:Z.mode})],executors:J}):[];if(Z.enableSpawnAgent)j.push(aJ($,Z,Q,J));return e1(j)},...W})}import{readFile as ky,stat as hy}from"node:fs/promises";var Iy=20480000;async function zF($){let Z=await hy($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>Iy)throw Error("File is too large to read into context.");let Q=await ky($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var TF=5000;function j4($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function py($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=j4(Z.inputTokens),J=j4(Z.outputTokens),W=j4(Z.cacheReadTokens),X=j4(Z.cacheWriteTokens),j=j4(Z.totalCost);if(Q===void 0||J===void 0||W===void 0||X===void 0||j===void 0)return;return{inputTokens:Q,outputTokens:J,cacheReadTokens:W,cacheWriteTokens:X,totalCost:j}}function ly($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}function NF($,Z){if(!Z)return!1;if($.source_message_count!==Z.source_message_count)return $.source_message_count<Z.source_message_count;return Date.parse($.updated_at)<Date.parse(Z.updated_at)}class E${runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultLogger;defaultFetch;events=new b6;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new q8;constructor($){let Z=gy();if(Z)dy(Z);let Q=t0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new d9,this.createAgentInstance=$.createAgent??((J)=>new Y$(J)),this.defaultCapabilities=h0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new R$,this.oauthTokenManager=$.oauthTokenManager??new p9({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultLogger=$.logger,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new dJ({getSession:(J)=>this.sessions.get(J),emit:(J)=>this.emit(J),send:(J)=>this.runTurn(J)}),this.pendingPrompts={list:async(J)=>this.pendingPromptsController.list(J.sessionId),update:async(J)=>this.pendingPromptsController.update(J),delete:async(J)=>this.pendingPromptsController.delete(J)},this.eventBridge=new lJ({getSession:(J)=>this.sessions.get(J),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(J)=>this.emit(J),persistMessages:(J,W,X)=>{this.invoke("persistSessionMessages",J,W,X)},enqueuePendingPrompt:(J,W)=>this.pendingPromptsController.enqueue(J,W),invokeBackendOptional:(J,...W)=>this.invokeOptional(J,...W)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.config.sessionId?.trim()??"",Q=Z||my(),J=Z.length>0&&($.initialMessages?.length??0)>0&&!$.prompt?.trim(),W=Boolean($.config.cwd?.trim()||$.config.workspaceRoot?.trim()),X=J&&!W?await this.invokeOptionalValue("readSessionManifest",Q):void 0,j=X?{...$.config,cwd:X.cwd,workspaceRoot:X.workspace_root}:await WF($.config);return await this.startResolvedSession({...$,config:j},Q,Z.length>0,X)}async startResolvedSession($,Z,Q,J){let W=$.source??T0.CLI,X=J0(),j=await this.applyInitialOAuthCredentials($),Y=j.initialMessages??[],V=Y.length>0?f9(Y):P0(),B=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!B)throw Error("session service method not available: ensureSessionsDir");let H=oJ(B,Z),K=oJ(H,`${Z}.messages.json`),G=oJ(H,`${Z}.json`),F=x1($.config),U=u0.parse({version:1,session_id:Z,source:W,pid:process.pid,started_at:X,status:"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:F,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:K}),_,L;if(Q&&Y.length>0&&!j.prompt?.trim()){let y=J??await this.invokeOptionalValue("readSessionManifest",Z);if(y)U=y,_={manifestPath:G,messagesPath:y.messages_path||K,compactionPath:y.compaction_path,manifest:y},L=await this.invokeOptionalValue("readSessionCompactionState",Z)}let D=await this.seedAggregateUsageFromArtifacts({initialUsage:V,sessionDir:H,rootMessagesPath:_?.messagesPath??K,manifest:U});this.usageBySession.set(Z,V),this.aggregateUsageBySession.set(Z,D);let q=h0(this.defaultCapabilities,$.capabilities),T=q?.toolExecutors??this.toolExecutors,z=$.localRuntime,A=z?.extensionContext?.logger??z?.logger,f=z?.extensionContext?.automation,N=z?.extensionContext?.telemetry??z?.telemetry??this.defaultTelemetry,C,P={getSession:(y)=>this.sessions.get(y),subAgentStarts:this.subAgentStarts,onAgentEvent:(y,Y0,A0)=>this.eventBridge.dispatchAgentEvent(y,Y0,A0),invokeBackendOptional:(y,...Y0)=>this.invokeOptional(y,...Y0)};C=await mG({input:j,localRuntime:$.localRuntime,sessionId:Z,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultLogger:this.defaultLogger,defaultCapabilities:q,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(y)=>{if(y.name==="plugin_log"){this.eventBridge.handlePluginLog(Z,y.payload,A);return}this.eventBridge.handlePluginEvent(Z,y,f,N)},onTeamEvent:(y)=>{this.eventBridge.handleTeamEvent(Z,y),C.config.onTeamEvent?.(y)},createSpawnTool:()=>aJ(P,C.config,Z,T),createSubAgentLifecycleCallbacks:(y)=>nJ(P,y,Z),readSessionMetadata:async()=>(await this.getSession(Z))?.metadata,writeSessionMetadata:async(y)=>{await this.persistSessionMetadata(Z,()=>y)}});let n=o7({..._?.manifest.metadata??{},...j.sessionMetadata??{}},C.gitState);if(!_)U.metadata=n;let g=await this.runtimeBuilder.build(C.runtimeBuilderInput),w=C.config,p=C.providerConfig;if(g.teamRuntime&&!w.teamName?.trim())w.teamName=g.teamRuntime.getTeamName();let G0=async()=>{let y=this.sessions.get(Z);if(!y||!w2(y.config.providerId))return!1;try{return await this.syncOAuthCredentials(y,{forceRefresh:!0}),!0}catch{return!1}};g.delegatedAgentConfigProvider?.updateConnectionDefaults({onAuthError:G0});let d1=[...g.tools,...w.extraTools??[]],p1=g.extensions??C.extensions,Z0=j.initialCompactionState,q1,l1=_J(w),V1=Z0??L,g0=V1?{...V1,conversation_id:V1.conversation_id?.trim()||Z}:void 0,i1=LJ({compact:l1,getState:()=>q1?.compactionState,saveState:async(y,Y0)=>{let A0=q1;if(!A0)return;let O0={...y,conversation_id:A0.sessionId};try{if(!(await this.persistActiveSessionCompactionState(A0,O0,Y0)).updated)w.logger?.debug?.("Skipped stale session compaction state",{sessionId:A0.sessionId,sourceMessageCount:O0.source_message_count})}catch(S$){w.logger?.error?.("Failed to persist session compaction state",{sessionId:A0.sessionId,error:S$}),M$(w.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:S$,context:{sessionId:A0.sessionId,providerId:w.providerId,modelId:w.modelId}})}}}),L0={sessionId:Z,providerId:p.providerId,modelId:p.modelId,apiKey:p.apiKey,baseUrl:p.baseUrl,headers:p.headers,onAuthError:G0,knownModels:p.knownModels,providerConfig:p,thinking:w.thinking,reasoningEffort:w.reasoningEffort??p.reasoningEffort,thinkingBudgetTokens:w.thinkingBudgetTokens,maxTokensPerTurn:w.maxTokensPerTurn,temperature:w.temperature,systemPrompt:w.systemPrompt,maxIterations:w.maxIterations,execution:w.execution,prepareTurn:i1,tools:d1,hooks:C.hooks,extensions:p1,hookErrorMode:w.hookErrorMode,initialMessages:C.effectiveInput.initialMessages,userFileContentLoader:zF,toolPolicies:C.toolPolicies,requestToolApproval:C.requestToolApproval?async(y)=>{let Y0=C.requestToolApproval,A0=this.sessions.get(Z);if(A0)await this.markTurnPending(A0);try{if(!Y0)return{approved:!1,reason:"Tool approval callback is not configured."};return await Y0(y)}finally{let O0=this.sessions.get(Z);if(O0?.status==="pending")await this.markTurnRunning(O0)}}:void 0,telemetry:w.telemetry,onConsecutiveMistakeLimitReached:w.onConsecutiveMistakeLimitReached,completionPolicy:g.completionPolicy,consumePendingUserMessage:()=>{let y=this.pendingPromptsController.consumeSteer(Z);return y?i6(y.prompt,y.mode??w.mode):void 0},logger:g.logger??w.logger,extensionContext:w.extensionContext,onEvent:(y)=>this.eventBridge.dispatchAgentEvent(Z,w,y)};L0.hooks={...L0.hooks,onEvent:async(y)=>{if(await C.hooks?.onEvent?.(y),y.type!=="assistant-message")return;let Y0=this.sessions.get(Z);if(!Y0)return;let A0=Y0.agent.getMessages();try{await this.invoke("persistSessionMessages",Z,A0,w.systemPrompt)}catch(O0){w.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:Z,error:O0}),M$(w.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:O0,severity:"warn",handled:!0,context:{sessionId:Z,providerId:w.providerId,modelId:w.modelId}})}}};let w0=this.createAgentInstance(L0);if(L0.onEvent)w0.subscribeEvents(L0.onEvent);g.registerLeadAgent?.(w0);let B1=I1({agentId:w0.getAgentId(),conversationId:w0.getConversationId(),teamId:g.teamRuntime?.getTeamId(),teamName:g.teamRuntime?.getTeamName(),teamRole:g.teamRuntime?"lead":void 0});if(cG(w,Z,Q,F,B1),B1)k$(w.telemetry,{ulid:Z,modelId:w.modelId,provider:w.providerId,...B1});if(g.teamRuntime)cZ(w.telemetry,{ulid:Z,teamId:g.teamRuntime.getTeamId(),teamName:g.teamRuntime.getTeamName(),leadAgentId:w0.getAgentId(),restoredFromPersistence:g.teamRestoredFromPersistence===!0});let v={sessionId:Z,config:w,sessionMetadata:n,..._?{artifacts:_}:{},source:W,startedAt:_?.manifest.started_at??X,updatedAt:_?.manifest.ended_at??_?.manifest.started_at??X,pendingPrompt:U.prompt,runtime:g,agent:w0,started:!1,status:_?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,compactionState:g0,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:C.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(q1=v,v.compactionState&&!this.isCompactionStateForSession(v.sessionId,v.compactionState,v))v.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:v.sessionId,conversationId:v.compactionState.conversation_id}),v.compactionState=void 0;if(this.sessions.set(Z,v),_)await this.refreshActiveSessionGitMetadata(v,C.gitState);if(this.emitStatus(Z,"running"),Y.length>0&&!_){if(await this.ensureSessionPersisted(v),await this.invoke("persistSessionMessages",v.sessionId,Y,v.config.systemPrompt),v.compactionState){if(!(await this.persistActiveSessionCompactionState(v,v.compactionState)).updated)v.compactionState=void 0}if(!j.prompt?.trim())await this.updateStatus(v,"completed",0)}let b0;try{if(j.prompt?.trim())if(b0=await this.executeTurn(v,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!v.interactive)await this.finalizeSingleRun(v,b0.finishReason);else await this.completeInteractiveTurn(v,b0.finishReason)}catch(y){if(v.interactive&&v.aborting)b0=await this.completeAbortedInteractiveTurn(v);else{M$(v.config.telemetry,{component:"core",operation:"session.start",error:y,severity:"error",handled:!1,context:{sessionId:v.sessionId,providerId:v.config.providerId,modelId:v.config.modelId}});try{await this.failSession(v)}catch(Y0){v.config.logger?.error?.("Session failure cleanup threw",{sessionId:v.sessionId,error:Y0})}throw y}}return{sessionId:Z,manifest:U,manifestPath:G,messagesPath:K,result:b0}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let J=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...J?{sessionMetadata:J}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,cleanupStartedSession:async(Z)=>{if(!await this.deleteSession(Z.sessionId))throw Error(`Failed to clean up restored session ${Z.sessionId}`)},readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),J=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:J??"immediate"}}),J==="queue"||J==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:J,userImages:$.userImages,userFiles:$.userFiles});return}try{let W=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,W.finishReason);else await this.completeInteractiveTurn(Z,W.finishReason);if(W.finishReason==="error"||W.finishReason==="aborted")return W;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),W}catch(W){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw M$(Z.config.telemetry,{component:"core",operation:"session.submit",error:W,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),W}}async getAccumulatedUsage($){let Z=O3(this.usageBySession.get($)),Q=O3(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,this.pendingPromptsController.clearAborted(Q),Q.agent.abort(Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!F0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!F0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return iJ(Z);let Q=$.trim();if(!Q)return;let J=await this.getRow(Q);if(J)return P6(J);let W=await this.readManifest(Q);return W?T3(W):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(P6),J=new Set(Q.map((W)=>W.sessionId));for(let W of this.sessions.values()){if(J.has(W.sessionId))continue;Q.unshift(iJ(W))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async updateSessionCompactionState($,Z){let Q=$.trim();if(!Q)return{updated:!1};let J=this.sessions.get(Q),W=J?void 0:await this.getSession(Q);if(!(J??W))return{updated:!1};if(J){let Y=await this.readSessionMessages(Q),V=Z.source_message_count>0&&Y.length>=Z.source_message_count,B=V?Y:void 0;if(V){if(!await this.canPersistCompactionState(Q,Z,J,void 0,Y))return{updated:!1};J.agent.restore(Y)}return await this.persistActiveSessionCompactionState(J,Z,B)}if(!await this.canPersistCompactionState(Q,Z,void 0,W))return{updated:!1};let j=await this.invokeOptionalValue("readSessionCompactionState",Q);if(NF(Z,j))return{updated:!1};return await this.invoke("persistSessionCompactionState",Q,Z),{updated:!0}}async readSessionCompactionState($){let Z=$.trim();if(!Z)return;let Q=this.sessions.get(Z);if(Q)for(;;){let J=Q.compactionStateWriteQueue;if(!J)return Q.compactionState;await J.catch(()=>{return})}return await this.invokeOptionalValue("readSessionCompactionState",Z)}isCompactionStateForSession($,Z,Q,J){let W=Z.conversation_id?.trim();if(!W)return!0;if(W===$)return!0;let X=Q?.agent.getConversationId()?.trim()||J?.conversationId?.trim();return X?W===X:!1}async canPersistCompactionState($,Z,Q,J,W){if(!Z.conversation_id?.trim())return!1;if(!this.isCompactionStateForSession($,Z,Q,J))return!1;let X=W??Q?.agent.getMessages()??await this.readSessionMessages($);return H8(Z,X)!==void 0}async persistActiveSessionCompactionState($,Z,Q){if(!await this.canPersistCompactionState($.sessionId,Z,$,void 0,Q))return{updated:!1};return await this.enqueueCompactionStateWrite($,async()=>{let J=$.compactionState,W=J!==void 0&&H8(J,Q??$.agent.getMessages())!==void 0;if(J&&(W?NF(Z,J):Date.parse(Z.updated_at)<Date.parse(J.updated_at)))return{updated:!1};return await this.invoke("persistSessionCompactionState",$.sessionId,Z),$.compactionState=Z,{updated:!0}})}async enqueueCompactionStateWrite($,Z){let J=($.compactionStateWriteQueue??Promise.resolve()).catch(()=>{return}).then(Z),W=J.then(()=>{return},()=>{return});$.compactionStateWriteQueue=W;try{return await J}finally{if($.compactionStateWriteQueue===W)$.compactionStateWriteQueue=void 0}}async readLiveSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=this.sessions.get(Z);if(Q){let J=Q.agent.getMessages();if(J.length>0)return J}return this.readSessionMessages(Z)}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return G$(Q.messagesPath);let J=await this.readManifest(Z);return G$(J?.messages_path)}async dispatchHookEvent($){await OH($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){await this.updateSessionConnection($,{modelId:Z})}async updateSessionConnection($,Z){let Q=n2(Z),J=this.getSessionOrThrow($);if(Q.providerId!==void 0)J.config.providerId=Q.providerId;if(Q.modelId!==void 0)J.config.modelId=Q.modelId;if(Q.apiKey!==void 0)J.config.apiKey=Q.apiKey;if(Q.baseUrl!==void 0)J.config.baseUrl=Q.baseUrl;if(Q.headers!==void 0)J.config.headers=Q.headers;if(Q.providerConfig!==void 0)J.config.providerConfig=Q.providerConfig;if(Object.hasOwn(Q,"reasoningEffort"))J.config.reasoningEffort=Q.reasoningEffort??void 0;if(Object.hasOwn(Q,"thinkingBudgetTokens"))J.config.thinkingBudgetTokens=Q.thinkingBudgetTokens??void 0;if(Object.hasOwn(Q,"thinking")){if(J.config.thinking=Q.thinking??void 0,Q.thinking===!1||Q.thinking===null)J.config.reasoningEffort=void 0,J.config.thinkingBudgetTokens=void 0}let W={...Q.providerId!==void 0?{providerId:Q.providerId}:{},...Q.modelId!==void 0?{modelId:Q.modelId}:{},...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{},...Q.providerConfig!==void 0?{providerConfig:Q.providerConfig}:{},...Object.hasOwn(Q,"reasoningEffort")?{reasoningEffort:Q.reasoningEffort??void 0}:{},...Object.hasOwn(Q,"thinking")?{thinking:Q.thinking??void 0}:{},...Object.hasOwn(Q,"thinkingBudgetTokens")?{thinkingBudgetTokens:Q.thinkingBudgetTokens??void 0}:{}};if(Q.thinking===!1||Q.thinking===null)W.reasoningEffort=void 0,W.thinkingBudgetTokens=void 0;let X={...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{}};if(J.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults(W),J.agent.updateConnection(Q),J.runtime.teamRuntime?.updateTeammateConnections(X),Q.providerId||Q.modelId)await this.mutateSessionManifest(J,(j)=>{if(Q.providerId)j.provider=Q.providerId;if(Q.modelId)j.model=Q.modelId})}async mutateSessionManifest($,Z){let Q=$.artifacts;if(!Q)return;let J=$.sessionId,X=(this.manifestMutationQueues.get(J)??Promise.resolve()).then(async()=>{let Y=await this.invokeOptionalValue("readSessionManifest",J)??Q.manifest;return Z(Y),Q.manifest=Y,await this.invoke("writeSessionManifest",Q.manifestPath,Y),Y}),j=X.then(()=>{return},()=>{return});this.manifestMutationQueues.set(J,j);try{return await X}finally{if(this.manifestMutationQueues.get(J)===j)this.manifestMutationQueues.delete(J)}}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),J=Q.prompt.trim(),W=Q?.userImages?.length,X=Q?.userFiles?.length;if(!J&&!W&&!X)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=J;await this.ensureSessionPersisted($),await this.refreshActiveSessionGitMetadata($),await this.syncOAuthCredentials($),await this.markTurnRunning($);try{let j=await this.executeAgentTurn($,J,Q.userImages,Q.userFiles);while(s3($,j.finishReason)){let Y=await t3($);if(Y.length===0)break;let V=e3($,Y);j=await this.executeAgentTurn($,V)}return j}finally{await this.refreshActiveSessionGitMetadata($)}}async completeInteractiveTurn($,Z){if(l6($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),J=P0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:J}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:J,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,J){let W=$.started||$.agent.getMessages().length>0,X=$.persistedMessages??$.agent.getMessages(),j=this.usageBySession.get($.sessionId)??P0(),Y=this.aggregateUsageBySession.get($.sessionId)??j;$.turnUsageBaseline=j,$.turnAggregateUsageBaseline=Y,$.turnPrimaryUsage=P0(),$.turnUsageByAgent=new Map,kZ($.config.telemetry,$.sessionId,$.config.mode),w8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=W?()=>$.agent.continue(Z,Q,J):()=>$.agent.run(Z,Q,J),B=await this.runWithAuthRetry($,V,X);$.started=!0;let H=$9(B.messages,B,X);$.persistedMessages=H;let K=N9($.turnUsageByAgent?.values()??[]),G=M0(j,B.usage),F=M0(M0(P0(),B.usage),K),U=M0(Y,F);return this.usageBySession.set($.sessionId,G),this.aggregateUsageBySession.set($.sessionId,U),await this.persistSessionMetadata($.sessionId,(_)=>({..._??{},totalCost:G.totalCost,aggregatedAgentsCost:U.totalCost,usage:G,aggregateUsage:U})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,B),B}catch(V){throw M$($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((J)=>J.name===N0.SUBMIT_AND_EXIT&&J.error===void 0))return;$.submitAndExitObserved=!0,z4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,Z){let Q=x1($.config),J=uy(Z.prompt).trim();if(!J)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let W=await T5(J,Q);uG($.config.telemetry,W);let X=i6(W.prompt,Z.mode??$.config.mode),j=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),Y=this.resolveAbsoluteFilePaths(Q,W.matchedFiles),V=Array.from(new Set([...j,...Y]));return{prompt:X,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=x1($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:Z,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async refreshActiveSessionGitMetadata($,Z){try{let Q=Z??await oB(x1($.config));if(!Q||!$.artifacts)return;if(nB($.artifacts.manifest.metadata,Q))return;await this.persistSessionMetadata($.sessionId,(J)=>o7({...J??{},...$.sessionMetadata??{}},Q))}catch(Q){$.config.logger?.debug?.("Failed to refresh session git metadata",{sessionId:$.sessionId,error:Q})}}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,Z){let Q=this.sessions.get($),J=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,W=Z(J?.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($,Z){if(l6($))return;let Q=Z==="aborted"||$.aborting,J=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":J?"failed":"completed",exitCode:J?1:0,shutdownReason:J?"session_error":"session_complete",endReason:Z})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(Z.status==="completed"&&!$.submitAndExitObserved)z4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});A9($);let Q=[],J=(W,X)=>{Q.push(X),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:W,error:X,severity:"warn"}),M$($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){await this.refreshActiveSessionGitMetadata($);try{await this.updateStatus($,Z.status,Z.exitCode)}catch(W){J("update_status",W)}try{await $.agent.shutdown(Z.shutdownReason)}catch(W){J("agent_shutdown",W)}}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(W){J("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){J("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){let Q=[],J=(W,X)=>{Q.push(X),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:W,error:X,severity:"warn"}),M$($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(Z)}catch(W){J("agent_shutdown",W)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(W){J("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){J("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let J=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!J.updated)return;let W=await this.mutateSessionManifest($,(X)=>{if(X.status=Z,F0(Z))delete X.ended_at,X.exit_code=null;else X.ended_at=J.endedAt??J0(),X.exit_code=typeof Q==="number"?Q:null});if(!W)return;$.status=Z,$.updatedAt=J.endedAt??J0(),$.endedAt=F0(Z)?null:W.ended_at,$.exitCode=W.exit_code,this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(J){if(!w2($.config.providerId)||!cy(J))throw J;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),Z()}}async syncOAuthCredentials($,Z){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:Z?.forceRefresh})}catch(J){if(J instanceof X4)throw Error(`${J.providerId} requires re-authentication.`);throw J}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new s$($);throw M$(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((J)=>J.trim()).filter((J)=>J.length>0).map((J)=>vy(J)?J:sJ($,J));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return I1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let Z=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=M0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let J=sJ(Z),W=`${Q}.messages.json`,X;try{X=xy($)}catch{return P0()}let j=P0();for(let Y of X){if(!Y.endsWith(".messages.json"))continue;if(Y===W)continue;let V=sJ($,Y);if(V===J)continue;let B=await G$(V);if(B.length===0)continue;j=M0(j,f9(B))}return j}withPersistedAggregateUsageFloor($,Z){let Q=py(Z.metadata?.aggregateUsage);if(Q)return ly($,Q);let J=Z.metadata?.aggregatedAgentsCost;if(typeof J!=="number"||!Number.isFinite(J)||J<=$.totalCost)return $;return{...$,totalCost:J}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:_$({session:Z,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),TF))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(TF)).find((J)=>J.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return AF(this.sessionService,$,...Z)}invokeOptional($,...Z){return OF(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return qF(this.sessionService,$,...Z)}}function iy($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let Z=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(Z==="local"||Z==="hub"||Z==="remote")return Z;return"auto"}var Y4,V4;function ry($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;cH(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function ny($){await $.reconcileDeadSessions?.().catch(()=>{})}function MF($){try{let Z=new O$;return Z.init(),new z$(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),RF($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new JJ(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function fF($,Z,Q){return new E$({sessionService:Q??$.sessionService??MF($),capabilities:$.capabilities,logger:$.logger,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function ay($){if(Y4)return Y4;if(V4)return await V4;return V4=(async()=>{return Y4=MF($),await ny(Y4),Y4})().finally(()=>{V4=void 0}),await V4}async function i9($){let Z=t0($.distinctId);$.telemetry?.setDistinctId(Z);let Q=iy($);if(ry(Q,$),Q==="remote"){let J=$.remote?.endpoint?.trim();if(!J)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:J}),new B9({endpoint:J,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let J=$.hub?.endpoint?.trim(),W=J||await x6({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:J||void 0}),new B2({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 J=await b3({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(J){$.logger?.log("Using discovered local hub runtime host",{url:J});let W=new B2({url:J,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(X){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:X}),RF($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:X,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),fF($,Z)}return fF($,Z)}import{existsSync as oy,mkdirSync as sy,readFileSync as ty,writeFileSync as ey}from"node:fs";import{dirname as $k}from"node:path";import{FEATURE_FLAGS as EF,FeatureFlagDefaultValue as tJ}from"@cline/shared";var Zk=3600000,Qk=604800000,CF=1;class B4{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??Zk,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??Qk,this.context={...$.context??{}},this.hydrateFromPersistentCache()}setContext($){this.context={...$}}hydrateCache($){this.cacheInfo={updateTime:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload},this.rebuildCacheFromSnapshot($.flagsPayload)}getCacheSnapshot(){return{updateTime:this.cacheInfo.updateTime,userId:this.cacheInfo.userId,flagsPayload:this.cacheInfo.flagsPayload}}async poll($){let Z=$??this.context.userId??null,Q=Date.now();if(Q-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===Z)return}let J=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:Z||null};try{let W=await this.provider.getAllFlagsAndPayloads({flagKeys:EF.length>0?EF:void 0,context:{...this.context,userId:Z}});if(this.cacheInfo.userId!==Z)return;this.cacheInfo.flagsPayload=W,this.rebuildCacheFromSnapshot(W),this.writePersistentCache()}catch(W){if(this.cacheInfo.userId!==Z)return;throw this.cacheInfo=J.updateTime?J:{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((Z)=>this.isFeatureFlagPayload(Z));if(typeof $==="object")return Object.values($).every((Z)=>this.isFeatureFlagPayload(Z));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=Object.entries($).filter(([,J])=>this.isFeatureFlagPayload(J));if(Z.length===0)return;let Q={};for(let[J,W]of Z)Q[J]=W;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!oy(this.cacheFilePath))return;let $=JSON.parse(ty(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==CF||typeof Z.updatedAt!=="number"||!Number.isFinite(Z.updatedAt)||Date.now()-Z.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:Z.updatedAt,userId:Z.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(Z.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(Z.flagsPayload?.featureFlagPayloads)}}}catch($){this.logger?.error?.("Error reading SDK feature flags cache",{error:$});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;sy($k(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:CF,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};ey(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
|
|
767
|
+
`,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let Z=new Map;for(let Q of this.getReturnedFlagKeys($)){let J=this.getFeatureFlag(Q);Z.set(Q,J??!1)}this.cache=Z}getFeatureFlag($){try{let Z=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],J=Z??Q??tJ[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==J)this.telemetry?.capture({event:x.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return J}catch(Z){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:Z}),tJ[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??tJ[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,Z){if(process.env.IS_TEST==="true")this.cache.set($,Z)}async dispose(){await this.provider.dispose()}}class H4{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}H2();import{execFile as Jk}from"node:child_process";import*as PF from"node:fs/promises";import*as N8 from"node:path";import{promisify as Wk}from"node:util";var Xk=Wk(Jk),jk=52428800;async function r9($,Z){let{stdout:Q}=await Xk("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:jk,encoding:"utf8"});return Q}function wF($){return $.split("\x00").filter(Boolean)}function SF($,Z){let Q=N8.resolve($,Z),J=N8.relative($,Q);if(J.startsWith("..")||N8.isAbsolute(J))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function Yk($,Z,Q){try{return await r9($,["show",`${Z}:${Q}`])}catch{return""}}async function Vk($,Z){try{return await PF.readFile(SF($,Z),"utf8")}catch{return""}}async function Bk($,Z){await r9($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,J]=await Promise.all([r9($,["diff","--name-only","-z",Z.ref,"--"]),r9($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...wF(Q),...wF(J)])].sort((X,j)=>X.localeCompare(j))}function bF($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=v9(J4($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let J=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!J)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Q,cwd:J}}async function yF($,Z){let Q=await Bk($,Z);return(await Promise.all(Q.map(async(W)=>{let[X,j]=await Promise.all([Yk($,Z.ref,W),Vk($,W)]);return{filePath:SF($,W),leftContent:X,rightContent:j}}))).filter((W)=>W.leftContent!==W.rightContent)}async function eJ($){let Z=bF($),Q=await yF(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}class $W{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,Z,Q,J,W,X,j,Y,V,B){this.clientName=Z,this.runtimeAddress=Q,this.host=$,this.prepare=J,this.capabilities=W,this.logger=X,this.telemetry=j,this.distinctId=Y,this.featureFlags=V,this.settings=gB($),this.pendingPrompts=vB($),this.automation=new qQ(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=B?new E6({workspaceRoot:B.workspaceRoot??process.cwd(),specs:{cronSpecsDir:B.cronSpecsDir??B.cronDir,scope:Hj(B.cronScope),workspaceRoot:B.workspaceRoot},runtimeHandlers:Kj({host:$,getExtensionContext:()=>v4({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:B.dbPath,logger:B.logger,pollIntervalMs:B.pollIntervalMs,claimLeaseSeconds:B.claimLeaseSeconds,globalMaxConcurrency:B.globalMaxConcurrency,watcherDebounceMs:B.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((H)=>{if(H.type!=="ended")return;this.disposeSessionBootstrap(H.payload.sessionId)})}static async create($={}){let Z=t0($.distinctId),Q=h0($.capabilities),J={...$,capabilities:Q,distinctId:Z},W=await i9(J),X=Bj($.automation),j=$.featureFlags||new B4({provider:new H4,telemetry:$.telemetry,logger:$.logger,context:{distinctId:Z,clientName:$.clientName}}),Y=new $W(W,$.clientName,W.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,Z,j,X?{...X,logger:$.logger}:void 0);if(X&&X.autoStart!==!1)await Y.automation.start();return Y}async disposeSessionBootstrap($){let Z=this.activeSessionBootstraps.get($);if(!Z)return;this.activeSessionBootstraps.delete($),await Promise.resolve(Z.dispose?.())}async start($){let Z=mB($),Q=await this.prepare?.(Z);try{let J=Q?await Q.applyToStartSessionInput(Z):Z,W=await this.host.startSession(i7(J,{defaultCapabilities:this.capabilities,withExtensionContext:(X)=>v4({automationService:this.automationService,automation:this.automation,context:X,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Q)if(await this.host.getSession(W.sessionId))this.activeSessionBootstraps.set(W.sessionId,Q);else await Promise.resolve(Q.dispose?.());return cB({input:J,sessionId:W.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),W}catch(J){throw await Promise.resolve(Q?.dispose?.()),J}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let Z=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(Z.map((Q)=>this.disposeSessionBootstrap(Q)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await N3(this.host,$);list=async($=200,Z={})=>await this.listHistory({...Z,limit:$});delete=async($)=>{let Z=await this.host.deleteSession($);if(Z)await this.disposeSessionBootstrap($);return Z};update=(...$)=>this.host.updateSession(...$);updateSessionCompactionState=(...$)=>this.host.updateSessionCompactionState(...$);readSessionCompactionState=(...$)=>this.host.readSessionCompactionState(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);readLiveMessages=($)=>this.host.readLiveSessionMessages?this.host.readLiveSessionMessages($):this.host.readSessionMessages($);async restore($){let Z=$.start?i7($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>v4({automationService:this.automationService,automation:this.automation,context:Q,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:$.sessionId,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restore:$.restore,start:Z})}async compareCheckpoint($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=await this.host.getSession(Z);if(!Q)throw Error(`Session ${Z} not found`);return eJ({session:Q,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,Z){return this.host.subscribe($,Z)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()};updateSessionConnection=(...$)=>{return this.host.updateSessionConnection?.(...$)??Promise.resolve()}}import{HookEventNameSchema as hF,HookEventPayloadSchema as IF,parseHookEventPayload as n9,resolveHookSessionContext as Hk}from"@cline/shared";import{z as L2}from"zod";var Kk=L2.object({contextModification:L2.string().optional(),cancel:L2.boolean().optional(),review:L2.boolean().optional(),errorMessage:L2.string().optional(),context:L2.string().optional(),overrideInput:L2.unknown().optional()}).passthrough();var Gk=["agent","hook"];async function a9($,Z={}){let Q=Z.command??Gk;return await U2($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function xF($){return $ instanceof Error?$:Error(String($))}function Fk($){if(!$||typeof $!=="object")return;let Z=Kk.safeParse($);if(!Z.success)return;let Q=Z.data;if(!(("cancel"in Q)||("review"in Q)||("context"in Q)||("contextModification"in Q)||("overrideInput"in Q)||("errorMessage"in Q)))return;let 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 kF($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,J]of Object.entries($))if(typeof J==="string")Z[Q]=J;else Z[Q]=JSON.stringify(J);return Z}function v1($,Z,Q){let J=Q.env??process.env,W=J.CLINE_USER_ID?.trim()||J.USER?.trim()||"unknown",X=Q.cwd||process.cwd();return{clineVersion:J.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:Z.conversationId,sessionContext:Hk(Q.sessionContext,{hookName:$,conversationId:Z.conversationId,agentId:Z.agentId,parentAgentId:Z.parentAgentId}),workspaceRoots:X?[X]:[],workspaceInfo:Q.workspaceInfo,userId:W,agent_id:Z.agentId,parent_agent_id:Z.parentAgentId}}function Uk($){return{name:$.name,message:$.message,stack:$.stack}}function Dk($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function _k($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function Lk($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function Ak($){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 Ok($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}async function A2($,Z){try{let Q=await a9($,{command:Z.command,cwd:Z.cwd,env:Z.env,detached:!0,onSpawn:Z.onSpawn});Z.onDispatch?.({payload:$,result:Q,detached:!0})}catch(Q){Z.onDispatchError?.(xF(Q),$)}}function gF($={}){return{hooks:{beforeRun:async(Y)=>{let V=_k(Y);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...v1("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await A2(H,$)}else{let H={...v1("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await A2(H,$)}return},beforeTool:async(Y)=>{let V={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},B={...v1("tool_call",V,$),hookName:"tool_call",iteration:Y.snapshot.iteration,tool_call:{id:Y.toolCall.toolCallId,name:Y.toolCall.toolName,input:Y.input},preToolUse:{toolName:Y.toolCall.toolName,parameters:kF(Y.input)}};try{let H=await a9(B,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:B,result:H,detached:!1}),H?.timedOut)throw Error("tool_call hook command timed out");if(H?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${H.parseError}`);return Ok(Fk(H?.parsedJson))}catch(H){$.onDispatchError?.(xF(H),B);return}},afterTool:async(Y)=>{let V=Ak(Y),B={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},H={...v1("tool_result",B,$),hookName:"tool_result",iteration:Y.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:kF(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await A2(H,$);return},afterRun:async({snapshot:Y,result:V})=>{let B={agentId:Y.agentId,conversationId:Y.conversationId??Y.runId??Y.agentId,parentAgentId:Y.parentAgentId??null};if(V.status==="completed"){let G={...v1("agent_end",B,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await A2(G,$);return}let H=V.status==="aborted"||Dk(V.error?.message)?"agent_abort":"agent_error",K=H==="agent_error"?{...v1(H,B,$),hookName:H,iteration:V.iterations,error:Uk(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...v1(H,B,$),hookName:H,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await A2(K,$)},onEvent:async(Y)=>{if(Y.type!=="message-added"||Y.message.role!=="user")return;let V={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},B={...v1("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:Lk(Y.message.content),attachments:[]}};await A2(B,$)}},shutdown:async({agentId:Y,conversationId:V,parentAgentId:B,reason:H})=>{let K={...v1("session_shutdown",{agentId:Y,conversationId:V,parentAgentId:B},$),hookName:"session_shutdown",reason:H};await A2(K,$)}}}import{createSessionId as qk,readHubScheduleMode as vF}from"@cline/shared";function Z1($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function mF($,Z,Q){return{version:$.version,requestId:$.requestId??qk("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class o9{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return Z1($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return Z1($,{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 Z1($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return Z1($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return Z1($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return Z1($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return Z1($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return Z1($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return Z1($,{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 Z1($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return Z1($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return Z1($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return mF($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Z){return mF($,"schedule_command_failed",Z instanceof Error?Z.message:String(Z))}}toCreateInput($){let Z=vF($,"yolo"),Q=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:Q,mode:Z}}toUpdateInput($){let Z=vF($),Q=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:Q,...Z===void 0?{}:{mode:Z}}}}import{ONE_TIME_SCHEDULE_CRON_PATTERN as cF,ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY as zk}from"@cline/shared";function s9($){return $?new Date($).getTime():void 0}function Tk($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function K4($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.triggerKind==="one_off"?cF:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof Z?.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:s9($.nextRunAt),lastRunAt:s9($.lastRunAt),createdBy:typeof Z?.__hubScheduleCreatedBy==="string"?Z.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:Z?.__hubRuntimeOptions&&typeof Z.__hubRuntimeOptions==="object"&&!Array.isArray(Z.__hubRuntimeOptions)?Z.__hubRuntimeOptions:void 0,metadata:Tk($)}}function Nk($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function ZW($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:s9($.startedAt),endedAt:s9($.completedAt),status:Nk($.status),errorMessage:$.error}}class t9{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new M6({dbPath:$.dbPath}),this.materializer=new q6({store:this.store}),this.runner=new z6({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(this.validateScheduleTiming($.cronPattern,$.metadata,!0),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return K4(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?K4(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>K4(Z))}updateSchedule($,Z){let Q=this.store.getHubSchedule($);if(!Q)return;let J=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot,W=Z.enabled??Q.enabled,X=K4(Q);if(this.validateScheduleTiming(Z.cronPattern??X.cronPattern,Z.metadata??X.metadata,W),W&&!J)throw Error("workspaceRoot is required for enabled schedules");let j=this.store.updateHubSchedule($,{...Z,scheduleId:$});return j?K4(j):void 0}validateScheduleTiming($,Z,Q){if($.trim()!==cF){QH($);return}let J=Z?.[zk];if(typeof J!=="number"||!Number.isFinite(J)||Q&&J<=Date.now())throw Error("runAt must be a future timestamp")}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;await this.runner.tick();let Q=this.store.getRun(Z.runId)??Z;return ZW(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),ZW(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((W)=>{let X=Z??this.store.getSpec(W.specId);if(!X||X.source!=="hub-schedule")return;return ZW(W,X.externalId)}).filter((W)=>{if(!W)return!1;return!$.status||W.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,J=0,W=0,X;for(let j of Z){if(j.status==="success"||j.status==="completed")Q+=1;if(!X&&j.status!=="success"&&j.status!=="completed")X=j;if(j.startedAt&&j.endedAt)W+=j.endedAt-j.startedAt,J+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:J>0?W/J/1000:0,lastFailure:X}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let Z=this.store.getSpec($.specId);if(!Z||Z.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:Z.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:Z.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+Z.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let Z={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(Z).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,J)=>String(Q.nextRunAt).localeCompare(String(J.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:J})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:J}))}}QZ();import{resolveClineBuildEnv as ik}from"@cline/shared";function rk($,Z){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Q?`Failed to connect to hub at ${Z} (${Q} event before socket open).`:`Failed to connect to hub at ${Z}.`)}var nk="cline-hub-auth.";function ak($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function ok($,Z){let Q=new URL($),J=new URL(Z);return Q.search="",Q.hash="",J.search="",J.hash="",Q.toString()===J.toString()}function pF(){return ik()==="production"?U$():S1()}async function sk($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=pF(),J=await R0(Q.discoveryPath);if(J?.url&&ok($.toString(),J.url))return J.authToken;return}async function tk($={}){let Z=F$($);if(!ak($)){let Q=pF(),J=await R0(Q.discoveryPath);if(J?.url)return J.url}return P1(Z.host,Z.port,Z.pathname)}async function lF($){return await new Promise((Z,Q)=>{(async()=>{let J=new URL($),W=await sk(J);J.hash="";let X=new WebSocket(J.toString(),W?[`${nk}${W}`]:void 0),j=new Map,Y=0;X.addEventListener("open",()=>{Z({send(V){let B=V.requestId??`hub-client-${++Y}`;return new Promise((H,K)=>{j.set(B,{resolve:H,reject:K});let G={kind:"command",envelope:{...V,requestId:B}};X.send(JSON.stringify(G))})},close(){X.close()}})}),X.addEventListener("message",(V)=>{let B=JSON.parse(String(V.data));if(B.kind==="reply"&&B.envelope.requestId){let H=j.get(B.envelope.requestId);if(H)j.delete(B.envelope.requestId),H.resolve(B.envelope)}}),X.addEventListener("close",()=>{for(let V of j.values())V.reject(Error("Hub connection closed"));j.clear()}),X.addEventListener("error",(V)=>{Q(rk(V,$))})})().catch(Q)})}async function y10($){try{return(await lF($)).close(),!0}catch{return!1}}async function k10($,Z){let Q=await tk($),J=await lF(Q);try{return await J.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{J.close()}}function XW($){return $?JSON.parse(JSON.stringify($)):{}}function JZ($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?XW(Z.metadata):void 0;return{sessionId:typeof Z.sessionId==="string"?Z.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function iF($,Z){return $.error?.message??`hub command failed: ${Z}`}function ek($){let Z=XW($);if(typeof Z.error==="string"&&Z.error.trim())return{...Z,error:Z.error.trim()};let Q=Z.result&&typeof Z.result==="object"?Z.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...Z,error:Q.text.trim()};let J=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof J?.message==="string"&&J.message.trim())return{...Z,error:J.message.trim()};return Z}function rF($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function $h($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error("hub checkpoint restore returned no checkpoint");let Q=Z;if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Q}function Zh($){let Z=XW($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||rF(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||rF(Z)||"",eventType:"schedule.execution.failed",payload:Z};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:Z};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:Z};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:Z};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:Z};case"session.notice":return{sessionId:Q,eventType:"runtime.chat.notice",payload:Z};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:Z};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:Z};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:Z};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:Z};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:ek($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class Qh{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new b1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-session-client",displayName:$.displayName??"hub session client",workspaceRoot:$.workspaceRoot,cwd:$.cwd})}async ensureMetadataApplied(){if(this.metadataApplied||!this.options.metadata){if(!this.options.metadata)await this.client.connect();return}await this.client.connect(),await this.client.command("client.update",{metadata:this.options.metadata}),this.metadataApplied=!0}async connect(){await this.ensureMetadataApplied()}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession($){await this.ensureMetadataApplied();let Z=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),Q=JZ(Z.payload);if(!Q?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}}}async sendRuntimeSession($,Z,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:Z.prompt,mode:Z.config.mode,attachments:Z.attachments,delivery:Z.delivery,timeoutSeconds:Z.config.timeoutSeconds},$,Q)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(t$(Q))return;throw Q}return JZ(Z.payload)}async readMessages($){let Z=$.trim();if(!Z)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw Error(iF(Q,"session.messages"));let J=Q.payload?.messages;return Array.isArray(J)?J:[]}async restore($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let J=$.config,W=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...J?{workspaceRoot:J.workspaceRoot,cwd:J.cwd,sessionConfig:{providerId:J.provider,modelId:J.model,apiKey:J.apiKey,cwd:J.cwd??J.workspaceRoot,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:J.mode??"act",rules:J.rules,maxIterations:J.maxIterations,enableTools:J.enableTools,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},metadata:{source:J.source??"cli",provider:J.provider,model:J.model,enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams,prompt:void 0,interactive:J.interactive!==!1},runtimeOptions:{mode:J.mode,systemPrompt:J.systemPrompt,maxIterations:J.maxIterations,enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams,autoApproveTools:J.autoApproveTools,configExtensions:J.configExtensions},modelSelection:{provider:J.provider,model:J.model,apiKey:J.apiKey},toolPolicies:J.toolPolicies}:{}},Z);if(!W.ok)throw Error(iF(W,"session.restore"));let X=JZ(W.payload);if(Q&&!X?.sessionId)throw Error("hub checkpoint restore returned no session id");let j=Array.isArray(W.payload?.messages)?W.payload.messages:void 0,Y=$h(W.payload);return{sessionId:X?.sessionId,startResult:X?.sessionId?{sessionId:X.sessionId,manifestPath:"",messagesPath:X.messagesPath??""}:void 0,...j?{messages:j}:{},checkpoint:Y}}async listSessions($){await this.ensureMetadataApplied();let Z=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(Z.payload?.sessions)?Z.payload?.sessions:[]).map((J)=>JZ({session:J})).filter((J)=>Boolean(J?.sessionId))}async deleteSession($,Z=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:Z})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,Z){let Q=new Set(($.sessionIds??[]).map((W)=>W.trim()).filter(Boolean)),J=this.client.subscribe((W)=>{let X=Zh(W);if(!X)return;if(Q.size>0&&!Q.has(X.sessionId))return;Z.onEvent?.(X)});return this.ensureMetadataApplied().catch((W)=>{Z.onError?.(W instanceof Error?W:Error(String(W)))}),J}streamTeamProgress($,Z){let Q=this.client.subscribe((J)=>{if(J.event!=="team.progress"||!J.payload)return;Z.onProjection?.(J.payload)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list");return Array.isArray(Z.payload?.schedules)?Z.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,Z){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...Z})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,Z){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:Z});return Array.isArray(Q.payload?.executions)?Q.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(Z.payload?.upcoming)?Z.payload?.upcoming:[]}}class Jh{client;constructor($){this.client=new b1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let Z=await this.client.command("session.list",{limit:$});return Array.isArray(Z.payload?.sessions)?Z.payload.sessions:[]}subscribeUI($){return this.client.subscribe((Z)=>{switch(Z.event){case"ui.notify":$.onNotify?.(Z.payload);break;case"ui.show_window":$.onShowWindow?.(Z.payload);break;case"hub.client.registered":$.onClientRegistered?.(Z.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(Z.payload??{});break;case"session.created":$.onSessionCreated?.(Z.payload??{});break;case"session.updated":$.onSessionUpdated?.(Z.payload??{});break;case"session.detached":$.onSessionDetached?.(Z.payload??{});break}})}}import{normalizeProviderId as Wh}from"@cline/llms";function Xh($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function jh($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function i10($={}){let Z=async(J)=>J,Q=new E$({sessionService:new z$(new O$),capabilities:{toolExecutors:{submit:Z}},fetch:$.fetch,telemetry:$.telemetry});return{async startSession(J){let W=(J.cwd?.trim()||J.workspaceRoot).trim(),X=await Q.startSession({source:J.source?.trim()||T0.CLI,interactive:!1,config:{providerId:Wh(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:W,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:jh(J),maxIterations:J.maxIterations,enableTools:J.enableTools!==!1,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},toolPolicies:J.toolPolicies??{"*":{autoApprove:J.autoApproveTools!==!1}},localRuntime:{configExtensions:J.configExtensions}});return{sessionId:X.sessionId,startResult:{sessionId:X.sessionId,manifestPath:X.manifestPath,messagesPath:X.messagesPath}}},async sendSession(J,W){let X=await Q.runTurn({sessionId:J,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((j)=>j.content)});if(!X)throw Error("local hub schedule runtime returned no turn result");return{result:Xh(X)}},async abortSession(J){return await Q.abort(J,Error("hub schedule abort")),{applied:!0}},async stopSession(J){return await Q.stopSession(J),{applied:!0}}}}import{resolveClineBuildEnv as oU}from"@cline/shared";function Yh($){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(`
|
|
768
|
+
`).trim()||void 0}var nF=120,jW="...";function YW($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=nF)return Z;let Q=nF-Buffer.byteLength(jW,"utf8");if(Q<=0)return jW;let J="";for(let W of Z){if(Buffer.byteLength(J+W,"utf8")>Q)break;J+=W}return`${J}${jW}`}async function aF($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,W=[...await G$(Q)].reverse().find((V)=>V.role==="assistant"),X=W?Yh(W.content):void 0,j=$?.workspaceRoot?.trim()||"workspace",Y=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():j;return{title:`Task completed (${Z})`,body:YW(X&&X.length>0?X:Y.length>0?Y:j),severity:"info"}}import{captureSdkError as YZ,createSessionId as jI}from"@cline/shared";import{createSessionId as Kh}from"@cline/shared";import{createSessionId as Hh}from"@cline/shared";function Vh($){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 Bh($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())Z.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())Z.parentAgentId=$.parentAgentId;if($.agentId?.trim())Z.agentId=$.agentId;if($.conversationId?.trim())Z.conversationId=$.conversationId;if($.messagesPath?.trim())Z.messagesPath=$.messagesPath;if($.prompt?.trim())Z.prompt=$.prompt;if($.provider?.trim())Z.provider=$.provider;if($.model?.trim())Z.model=$.model;if($.source?.trim())Z.source=$.source;if(typeof $.pid==="number")Z.pid=$.pid;return Object.keys(Z).length>0?Z:void 0}function WZ($,Z,Q,J){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:Vh($.status),participants:Z?[...Z.participants.values()]:[],metadata:Bh($),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}}:{},...J?{aggregateUsage:{...J}}:{}}}function c($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function k($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function f8($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function C0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function q2($,Z,Q){return{version:"v1",event:$,eventId:Hh("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function S0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let J=await $.sessionHost.getAccumulatedUsage?.(Z);return WZ(Q,$.sessionState.get(Z),J?.usage,J?.aggregateUsage)}async function d0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[J,W]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return _$({session:Q,messages:J,usage:W?.usage,aggregateUsage:W?.aggregateUsage})}function VW($,Z,Q,J,W={}){let X=$.sessionState.get(Z);if(X){if(W.interactive!==void 0)X.interactive=W.interactive;if(J==="creator"&&!X.createdByClientId)X.createdByClientId=Q;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:J});return X}let j={createdByClientId:Q,interactive:W.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:J}]])};return $.sessionState.set(Z,j),j}function oF($,Z,Q,J,W={}){let X=$.sessionState.get(Z);if(X){if(W.interactive!==void 0)X.interactive=W.interactive;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:J});return X}let j={interactive:W.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:J}]])};return $.sessionState.set(Z,j),j}async function BW($,Z){let Q=Kh("approval_"),J=Z.sessionId;if($.sessionState.get(J)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((X)=>{$.pendingApprovals.set(Q,{sessionId:J,resolve:X}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:Z.sessionId,agentId:Z.agentId,conversationId:Z.conversationId,iteration:Z.iteration,toolCallId:Z.toolCallId,toolName:Z.toolName,inputJson:JSON.stringify(Z.input??null),policy:Z.policy},J))})}function HW($,Z,Q){let J=$.pendingApprovals.get(Z);if(!J)return;return $.pendingApprovals.delete(Z),J.resolve(Q),{sessionId:J.sessionId}}function KW($,Z,Q){let J=0;for(let[W,X]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:W,sessionId:X.sessionId}))continue;$.pendingApprovals.delete(W),X.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:W,approved:!1,cancelled:!0,reason:Q},X.sessionId)),J+=1}return J}async function sF($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return k(Z,"approval_not_found",`Unknown approval: ${Q}`);let W=typeof Z.payload?.reason==="string"?Z.payload.reason:Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)&&typeof Z.payload.payload.reason==="string"?Z.payload.payload.reason:void 0,X=Z.payload?.approved===!0,j=HW($,Q,{approved:X,reason:W});if(!j)return k(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:X,reason:W},j.sessionId)),c(Z,{approvalId:Q,approved:X})}import{createSessionId as Uh}from"@cline/shared";function Gh($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var tF={debug:10,info:20,warn:30,error:40,silent:50};function Fh(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function i($,Z,Q={}){if(tF[$]<tF[Fh()])return;let J=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([W,X])=>[W,Gh(X)]).filter(([,W])=>W!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${J}`);return}console.log(`[hub] ${J}`)}function GW($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);i("error",$,{error:Q})}async function eF($,Z,Q,J,W,X){let j=Uh("capreq_"),Y=performance.now();return i("info","capability.request.start",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:W}),await new Promise((V,B)=>{$.pendingCapabilityRequests.set(j,{sessionId:Z,targetClientId:W,capabilityName:Q,onProgress:X,resolve:(H)=>{if(i(H.ok?"info":"warn","capability.request.end",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:W,ok:H.ok,error:H.error,durationMs:Math.round(performance.now()-Y)}),!H.ok){B(Error(H.error||`Capability ${Q} was rejected by ${W}.`));return}V(H.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:j,targetClientId:W,capabilityName:Q,payload:J},Z)),i("info","capability.request.published",{requestId:j,sessionId:Z,capabilityName:Q,targetClientId:W})})}function $U($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",J=$.pendingCapabilityRequests.get(Q);if(!J)return k(Z,"capability_not_found",`Unknown capability request: ${Q}`);if((Z.clientId?.trim()||"")!==J.targetClientId)return k(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${J.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==J.sessionId)return k(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${J.sessionId}`);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return J.onProgress?.(X),c(Z,{requestId:Q})}function C$($,Z,Q){let J=0;for(let[W,X]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:W,...X}))continue;$.pendingCapabilityRequests.delete(W),i("warn","capability.request.cancelled",{requestId:W,sessionId:X.sessionId,capabilityName:X.capabilityName,targetClientId:X.targetClientId,reason:Q}),X.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:W,capabilityName:X.capabilityName,targetClientId:X.targetClientId,ok:!1,cancelled:!0,error:Q},X.sessionId)),J+=1}return J}async function ZU($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",J=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",W=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!J||!W)return k(Z,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{},j=await $.requestCapability(Q,J,X,W);return c(Z,j)}catch(X){return k(Z,"capability_request_failed",X instanceof Error?X.message:String(X))}}function QU($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",J=$.pendingCapabilityRequests.get(Q);if(!J)return k(Z,"capability_not_found",`Unknown capability request: ${Q}`);let W=Z.clientId?.trim()||"";if(W!==J.targetClientId)return k(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${J.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==J.sessionId)return k(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${J.sessionId}`);$.pendingCapabilityRequests.delete(Q);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,j=typeof Z.payload?.error==="string"?Z.payload.error:void 0,Y=Z.payload?.ok===!0;return i(Y?"info":"warn","capability.respond",{requestId:Q,sessionId:J.sessionId,capabilityName:J.capabilityName,targetClientId:J.targetClientId,respondedByClientId:W,ok:Y,error:j}),J.resolve({ok:Y,payload:X,error:j}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:J.capabilityName,targetClientId:J.targetClientId,respondedByClientId:W,ok:Y,payload:X,error:j},J.sessionId)),c(Z,{requestId:Q,ok:Y})}import{createSessionId as Dh}from"@cline/shared";function JU($,Z){let Q=Z.payload,J=Q?.clientId?.trim()||Z.clientId?.trim()||Dh("client_");return $.clients.set(J,{clientId:J,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:J,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),c(Z,{clientId:J})}function WU($,Z){let Q=Z.clientId?.trim(),J=Q?$.clients.get(Q):void 0;if(!Q||!J)return k(Z,"client_not_found","Client is not registered with this hub.");let W=f8(Z.payload?.metadata);if(J.lastSeenAt=Date.now(),W)J.metadata=JSON.parse(JSON.stringify(W));return c(Z)}function XU($,Z,Q){let J=Z.clientId?.trim();if(J)$.clients.delete(J),Q(J),$.publish($.buildEvent("hub.client.disconnected",{clientId:J}));return c(Z)}function jU($,Z){return c(Z,{clients:[...$.clients.values()]})}import{buildConnectorConnectArgs as fh,CONNECTOR_PLATFORMS as Rh,connectorChannelsFromPlatforms as Mh,listConnectorCatalog as Eh,mergeConnectorConnectArgs as Ch,shouldIncludeConnectorField as wh}from"@cline/shared";import{withConnectorStore as DW}from"@cline/shared/db";import{existsSync as _h,readdirSync as Lh,readFileSync as Ah}from"node:fs";import{join as YU}from"node:path";import{listConnectorCatalog as Oh}from"@cline/shared";import{resolveConnectorDataDir as qh}from"@cline/shared/storage";var VU={startedAt:($)=>typeof $.startedAt==="string"?$.startedAt:void 0,port:($)=>typeof $.port==="number"?$.port:void 0,baseUrl:($)=>typeof $.baseUrl==="string"?$.baseUrl:void 0,connectionMode:($)=>typeof $.connectionMode==="string"?$.connectionMode:void 0,userName:($)=>typeof $.userName==="string"?$.userName:void 0,botUsername:($)=>typeof $.botUsername==="string"?$.botUsername:void 0,applicationId:($)=>typeof $.applicationId==="string"?$.applicationId:void 0,phoneNumberId:($)=>typeof $.phoneNumberId==="string"?$.phoneNumberId:void 0},zh={discord:{required:["userName","applicationId"],optional:["startedAt","port","baseUrl"]},telegram:{required:["botUsername"],optional:["startedAt"]},gchat:{required:["userName"],optional:["startedAt","port","baseUrl"]},linear:{required:["userName"],optional:["startedAt","port","baseUrl"]},slack:{required:["userName"],optional:["startedAt","connectionMode","port","baseUrl"]},whatsapp:{required:["userName"],optional:["startedAt","phoneNumberId","port","baseUrl"]}};function Th($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function Nh($,Z){let Q;try{let V=JSON.parse(Ah(Z,"utf8"));if(!V||typeof V!=="object"||Array.isArray(V))return;Q=V}catch{return}let J=typeof Q.pid==="number"?Q.pid:void 0,W=typeof Q.hubUrl==="string"?Q.hubUrl:typeof Q.rpcAddress==="string"?Q.rpcAddress:void 0;if(!J||!W||!Th(J))return;let X=zh[$];if(!X)return;let j={};for(let V of X.required){let B=VU[V](Q);if(!B||typeof B==="string"&&!B.trim())return;j[V]=B}for(let V of X.optional){let B=VU[V](Q);if(B!==void 0)j[V]=B}let Y=$==="telegram"?j.botUsername:$==="discord"?j.applicationId:$==="whatsapp"&&typeof Q.instanceKey==="string"?Q.instanceKey:j.userName;if(!Y)return;return{id:`${$}:${Y}`,type:$,instanceId:Y,pid:J,hubUrl:W,...j}}function FW(){let $=[];for(let{name:Z}of Oh()){let Q=YU(qh(),Z);if(!_h(Q))continue;for(let J of Lh(Q)){if(!J.endsWith(".json")||J.endsWith(".threads.json"))continue;let W=Nh(Z,YU(Q,J));if(W)$.push(W)}}return $.sort((Z,Q)=>{if(Z.type!==Q.type)return Z.type.localeCompare(Q.type);let J=Z.botUsername??Z.userName??"",W=Q.botUsername??Q.userName??"";return J.localeCompare(W)})}q0();function XZ($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function HU($){return typeof $==="string"?$.trim():void 0}function BU($){if(!XZ($))return{};let Z={};for(let[Q,J]of Object.entries($))if(typeof J==="string")Z[Q]=J.trim();return Z}function Ph(){return DW(($)=>$.listConfigs()).map(($)=>({id:$.channel,type:$.type,configuredAt:$.configuredAt,updatedAt:$.updatedAt})).sort(($,Z)=>$.type.localeCompare(Z.type))}function _W(){return{available:Mh(),active:FW(),configured:Ph()}}function Sh($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function bh($,Z){let Q={};for(let W of $.fields)Q[W.flag]=Z[W.flag]??W.initialValue??"";let J={};for(let W of $.fields){if(!wh(W,Q))continue;Sh(W,Q),J[W.flag]=Q[W.flag]}return J}function yh($){if(!XZ($))throw Error("connector.configure payload must be an object.");let Z=HU($.channel);if(!Z)throw Error("channel is required");let Q=Rh.find((K)=>K.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(Eh().map((K)=>K.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let W=BU($.values),X=bh(Q,W),j=XZ($.security)?$.security:{},Y=j.enabled===!0,V=BU(j.values);if(Y&&Q.security)for(let K of Q.security.fields){let G=V[K.key];if(!G)throw Error(K.requiredMessage);let F=K.validate?.(G);if(F)throw Error(F)}let B=Y?{enabled:!0,values:V}:{enabled:!1,values:{}},H=fh(Q,X,B);return DW((K)=>K.upsertConfig({channel:Z,type:Z,values:X,security:B,updateConnectArgs:(G)=>Ch(Q,G.connection.connectArgs,H,{replaceSecurityArgs:G.config?.security?.enabled===!0||B.enabled})})),_W()}function kh($){if(!XZ($))throw Error("connector.delete_config payload must be an object.");let Z=HU($.channel);if(!Z)throw Error("channel is required");return DW((Q)=>Q.deleteConfig(Z)),_W()}function hh($){return $==="connector.configure"||$==="connector.delete_config"}function UW($,Z,Q){if(!hh(Z.command))return;P8($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function KU($,Z){try{if(Z.command==="connector.channels")return c(Z,_W());if(Z.command==="connector.configure"){let Q=yh(Z.payload);return UW($,Z,!0),c(Z,Q)}if(Z.command==="connector.delete_config"){let Q=kh(Z.payload);return UW($,Z,!0),c(Z,Q)}return k(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return UW($,Z,!1),k(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var Ih=30000;function xh($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function gh($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function vh($,Z,Q){let J=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return k($,A6,J)}function mh($){return $?$:void 0}function ch($){let Z=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(Z&&Number.isFinite(Z)&&Z>0)return Math.floor(Z);let Q=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(Q&&Number.isFinite(Q)&&Q>0)return Math.floor(Q*1000);return}async function uh($,Z,Q,J){let W=performance.now(),X=!1,j={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:J},Y=setInterval(()=>{if(X)return;let H=Math.round(performance.now()-W);i("warn","run.heartbeat",{...j,elapsedMs:H}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:H,...J?{timeoutMs:J}:{}},Q.sessionId))},Ih),V=$.sessionHost.runTurn(Q);V.then((H)=>{if(!X)return;i("warn","run.late_end",{...j,elapsedMs:Math.round(performance.now()-W),finishReason:H?.finishReason})},(H)=>{if(!X)return;i("error","run.late_error",{...j,elapsedMs:Math.round(performance.now()-W),error:H})});let B;try{if(!J)return await V;return await Promise.race([V,new Promise((H,K)=>{B=setTimeout(()=>{let G=`Hub run ${Z.command} timed out after ${J}ms.`;X=!0,clearInterval(Y),K(Error(G)),i("error","run.timeout",{...j,elapsedMs:Math.round(performance.now()-W)}),KW($,(F)=>F.sessionId===Q.sessionId,G),C$($,(F)=>F.sessionId===Q.sessionId,G),$.sessionHost.abort(Q.sessionId,G).catch((F)=>{i("error","run.timeout_abort_failed",{...j,error:F})})},J)})])}finally{if(X=!0,clearInterval(Y),B)clearTimeout(B)}}async function GU($,Z){let Q=C0(Z),J=Z.payload&&typeof Z.payload==="object"?Z.payload:{},W=typeof J.prompt==="string"?J.prompt:typeof J.input==="string"?J.input:"";if(!W.trim())return k(Z,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let X=J.attachments&&typeof J.attachments==="object"&&!Array.isArray(J.attachments)?J.attachments:void 0,j=Array.isArray(X?.userFiles)?X.userFiles.filter((H)=>typeof H==="string"):void 0,Y=ch(J);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let V;try{V=await uh($,Z,{sessionId:Q,prompt:W,mode:mh(J.mode),delivery:J.delivery==="queue"||J.delivery==="steer"?J.delivery:void 0,userImages:Array.isArray(X?.userImages)?X.userImages:void 0,userFiles:j,timeoutMs:Y},Y)}catch(H){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(t$(H))return vh(Z,Q,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Q)),H}if(V){let H=await d0($,Q),K=gh(V);if($.publish($.buildEvent(xh(V.finishReason),{reason:V.finishReason,...K?{error:K}:{},result:V,...H?{snapshot:H}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let B=await d0($,Q);return c(Z,V||B?{...V?{result:V}:{},...B?{snapshot:B}:{}}:void 0)}async function FU($,Z){let Q=C0(Z),J=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";KW($,(W)=>W.sessionId===Q,J);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(W){i("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:W})}finally{C$($,(W)=>W.sessionId===Q,J)}return c(Z,{applied:!0})}async function UU($,Z){let Q=n9(Z.payload?.payload);if(!Q)return k(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),c(Z,{applied:!0})}async function DU($,Z){switch(Z.type){case"chunk":return;case"agent_event":await dh($,Z);return;case"hook":if(Z.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:Z.payload.toolName},Z.payload.sessionId));else if(Z.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:Z.payload.toolName},Z.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:Z.payload.sessionId,summary:Z.payload.summary,lastEvent:Z.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,Z.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:Z.payload.sessionId,prompts:Z.payload.prompts},Z.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:Z.payload.id,prompt:Z.payload.prompt,delivery:Z.payload.delivery,attachmentCount:Z.payload.attachmentCount,userImages:Z.payload.userImages,userFiles:Z.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:Z.payload.sessionId,prompt:Q},Z.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:Z.payload.sessionId,snapshot:Z.payload.snapshot},Z.payload.sessionId));return;case"status":{let[Q,J]=await Promise.all([S0($,Z.payload.sessionId),d0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...J?{snapshot:J}:{}},Z.payload.sessionId));return}case"ended":await ph($,Z);return;default:return}}async function dh($,Z){let{sessionId:Q,event:J}=Z.payload;if(J.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:J.iteration},Q));return}if(J.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:J.iteration,hadToolCalls:J.hadToolCalls,toolCallCount:J.toolCallCount},Q));return}if(J.type==="content_start"){if(J.contentType==="text"&&typeof J.text==="string"&&J.text.length>0){$.publish($.buildEvent("assistant.delta",{text:J.text},Q));return}if(J.contentType==="reasoning"){if(J.redacted&&!J.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof J.reasoning==="string"&&J.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:J.reasoning,redacted:J.redacted===!0},Q));return}if(J.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:J.toolCallId,toolName:J.toolName,input:J.input},Q));return}}if(J.type==="content_end"){switch(J.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:J.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:J.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:J.toolCallId,toolName:J.toolName,output:J.output,error:J.error},Q));break}return}if(J.type==="notice"){$.publish($.buildEvent("session.notice",{sessionId:Q,message:J.message,noticeType:J.noticeType,...J.displayRole?{displayRole:J.displayRole}:{},...J.reason?{reason:J.reason}:{},...J.metadata?{metadata:J.metadata}:{},agent:{kind:Z.payload.teamRole==="teammate"?"teammate":J.parentAgentId?"subagent":"lead",agentId:J.agentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(J.type==="usage"){let W;try{W=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{W=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:J.inputTokens,outputTokens:J.outputTokens,cacheReadTokens:J.cacheReadTokens??0,cacheWriteTokens:J.cacheWriteTokens??0,totalCost:J.cost??0},totals:{inputTokens:J.totalInputTokens,outputTokens:J.totalOutputTokens,cacheReadTokens:J.totalCacheReadTokens??0,cacheWriteTokens:J.totalCacheWriteTokens??0,totalCost:J.totalCost??0},usage:W?.usage,aggregateUsage:W?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":J.parentAgentId?"subagent":"lead",agentId:J.agentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(J.type==="done")$.publish($.buildEvent("agent.done",{reason:J.reason,text:J.text,iterations:J.iterations,usage:J.usage},Q))}async function ph($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),J=Q===Z.payload.reason||Q==="run.start.reply";if(J)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[W,X]=await Promise.all([S0($,Z.payload.sessionId),d0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let j=await aF(W);$.publish($.buildEvent("ui.notify",j,Z.payload.sessionId))}if(J)return;$.publish($.buildEvent(Z.payload.reason==="aborted"?"run.aborted":Z.payload.reason==="error"||Z.payload.reason==="failed"?"run.failed":"run.completed",{reason:Z.payload.reason,...X?{snapshot:X}:{}},Z.payload.sessionId))}import{createSessionId as OU,parseRuntimeConfigExtensions as qU,ReasoningEffortSchema as ZI}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as k$0,HUB_COMPACTION_CAPABILITY as h$0,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as I$0,HUB_HOOK_CAPABILITY_PREFIX as x$0,HUB_MISTAKE_LIMIT_CAPABILITY as g$0,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as v$0,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as m$0,isHubToolExecutorName as lh}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as l$0,HUB_COMPACTION_CAPABILITY as i$0,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as r$0,HUB_HOOK_CAPABILITY_PREFIX as n$0,HUB_MISTAKE_LIMIT_CAPABILITY as a$0,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as o$0,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as s$0}from"@cline/shared";var ih=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function z2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function rh($,Z){let Q=typeof $.name==="string"?$.name.trim():"",J=typeof $.description==="string"?$.description:"",W=typeof $.capabilityName==="string"?$.capabilityName.trim():"",X=z2($.inputSchema);if(!Q||!J||!X||!W||Z.has(W))return;return Z.add(W),{kind:"tool",capabilityName:W,name:Q,description:J,inputSchema:X,...z2($.lifecycle)?{lifecycle:z2($.lifecycle)}:{}}}function AW($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let J of $){if(!J||typeof J!=="object"||Array.isArray(J))continue;let W=J,X=W.kind,j=typeof W.capabilityName==="string"?W.capabilityName.trim():"";if(!j||Q.has(j))continue;if(X==="tool"){let Y=rh(W,Q);if(Y)Z.push(Y);continue}if(X==="toolExecutor"){let Y=W.executor;if(!lh(Y))continue;Q.add(j),Z.push({kind:"toolExecutor",capabilityName:j,executor:Y});continue}if(X==="hook"){let Y=typeof W.name==="string"?W.name.trim():"";if(!Y)continue;Q.add(j),Z.push({kind:"hook",capabilityName:j,name:Y});continue}if(X==="compaction"){Q.add(j),Z.push({kind:"compaction",capabilityName:j,...z2(W.config)?{config:z2(W.config)}:{}});continue}if(X==="checkpoint"){Q.add(j),Z.push({kind:"checkpoint",capabilityName:j,...z2(W.config)?{config:z2(W.config)}:{}});continue}if(X==="mistakeLimit"){Q.add(j),Z.push({kind:"mistakeLimit",capabilityName:j});continue}if(X==="userInstructionService")Q.add(j),Z.push({kind:"userInstructionService",capabilityName:j})}return Z}function LU($){let Z=$.metadata?{...$.metadata}:void 0;return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:Z&&Object.keys(Z).length>0?Z:void 0}}function nh($){return Object.hasOwn($,"update")?$.update:$}function D4($){return $.trim().replace(/^\/+/,"").toLowerCase()}function ah($){let Z=($??[]).map(D4).filter(Boolean);return Z.length>0?new Set(Z):void 0}function oh($,Z,Q){if(!Q)return!0;let J=D4($),W=D4(Z),X=J.includes(":")?J.split(":").at(-1)??J:J,j=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(J)||Q.has(W)||Q.has(X)||Q.has(j)}function LW($,Z){let Q=ah(Z);return $.records.skill.map((J)=>({id:J.id,name:J.item.name,description:"description"in J.item&&typeof J.item.description==="string"?J.item.description:void 0,disabled:J.item.disabled===!0,skill:J.item})).filter((J)=>oh(J.id,J.name,Q))}function _U($,Z){let Q=async(J,W)=>{let X=D4(J),Y=LW($,Z).filter((G)=>G.id===X||D4(G.name)===X||G.id.endsWith(`:${X}`)).filter((G)=>!G.disabled);if(Y.length!==1)return Y.length>1?`Skill "${J}" is ambiguous. Use one of: ${Y.map((G)=>G.id).join(", ")}`:`Skill "${J}" not found.`;let V=Y[0].skill,B=W?.trim(),H=B?`
|
|
769
769
|
<command-args>${B}</command-args>`:"",K=V.description?.trim()?`Description: ${V.description.trim()}
|
|
770
770
|
|
|
771
771
|
`:"";return`<command-name>${V.name}</command-name>${H}
|
|
772
772
|
<command-instructions>
|
|
773
773
|
${K}${V.instructions}
|
|
774
|
-
</command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>LW($,Z).map(({skill:J,...W})=>W),enumerable:!0}),Q}function
|
|
774
|
+
</command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>LW($,Z).map(({skill:J,...W})=>W),enumerable:!0}),Q}function sh($,Z,Q,J){let W={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},X=async()=>{let j=await J($,Q.capabilityName,{},Z);if(j?.snapshot)W=j.snapshot};return{start:X,stop:()=>{},refreshType:async()=>{await X()},listRecords:(j)=>[...W.records[j]],listRuntimeCommands:()=>[...W.runtimeCommands],resolveRuntimeSlashCommand:(j)=>{if(!j.startsWith("/")||j.length<2)return j;let V=j.match(/^\/(\S+)/)?.[1];if(!V)return j;let B=W.runtimeCommands.find((H)=>H.name===V);return B?`${B.instructions}${j.slice(V.length+1)}`:j},hasConfiguredSkills:(j)=>LW(W,j).some((Y)=>!Y.disabled),createSkillsExecutor:(j)=>_U(W,j),createExtension:(j)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[j.includeRules?"rules":void 0,j.registerSkillsTool?"tools":void 0,j.includeSkills||j.includeWorkflows?"commands":void 0].filter((Y)=>Boolean(Y))},setup(Y){if(j.includeRules)Y.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>J5(W.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(j.registerSkillsTool)Y.registerTool(d2(_U(W,j.allowedSkillNames)));for(let V of W.runtimeCommands.filter((B)=>B.kind==="skill"&&j.includeSkills||B.kind==="workflow"&&j.includeWorkflows))Y.registerCommand({name:V.name,description:V.description,handler:(B)=>{let H=B.trim();return H?`${V.instructions}
|
|
775
775
|
|
|
776
|
-
${H}`:V.instructions}})}})}}function sh($,Z,Q,J){let W=Q.map((X)=>[X.executor,async(...j)=>{let Y=j.at(-1),V=j.slice(0,-1);return(await J($,X.capabilityName,{executor:X.executor,args:V,context:_U(Y)},Z))?.result}]);return W.length>0?Object.fromEntries(W):void 0}function th($,Z,Q,J){if(Q.length===0)return;return Q.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema,lifecycle:W.lifecycle,async execute(X,j){return(await J($,W.capabilityName,{toolName:W.name,input:X,context:_U(j)},Z,j.emitUpdate?(V)=>{j.emitUpdate?.(rh(V))}:void 0))?.result}}))}function eh($,Z,Q,J){let W=new Map(Q.map((j)=>[j.name,j])),X={};for(let j of lh){let Y=W.get(j);if(!Y)continue;X[j]=async(V)=>{return(await J($,Y.capabilityName,{context:V},Z))?.control}}return Object.keys(X).length>0?X:void 0}function OW($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),J=$.contributions.filter((V)=>V.kind==="hook"),W=$.contributions.find((V)=>V.kind==="compaction"),X=$.contributions.find((V)=>V.kind==="checkpoint"),j=$.contributions.find((V)=>V.kind==="mistakeLimit"),Y=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:sh($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...J.length>0?{hooks:eh($.sessionId,$.targetClientId,J,$.requestCapability)}:{},...Q.length>0?{extraTools:th($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...W?{compaction:{...$.sessionConfig?.compaction??{},...W.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{checkpoint:{...$.sessionConfig?.checkpoint??{},...X.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...j?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:V},$.targetClientId))?.result}}:{},...Y?{userInstructionService:oh($.sessionId,$.targetClientId,Y,$.requestCapability)}:{}}}}var LU="hubCapabilityOwnerClientId";function jZ($){return typeof $==="string"&&$.trim().length>0?$.trim():void 0}function ZI($){if($===null)return null;let Z=$I.safeParse($);return Z.success?Z.data:void 0}function QI($){let Z=N8($)??{},Q={},J=jZ(Z.providerId);if(J)Q.providerId=J;let W=jZ(Z.modelId);if(W)Q.modelId=W;let X=jZ(Z.apiKey);if(X!==void 0)Q.apiKey=X;let j=jZ(Z.baseUrl);if(j!==void 0)Q.baseUrl=j;if(Z.headers&&typeof Z.headers==="object")Q.headers=Z.headers;if(Z.providerConfig&&typeof Z.providerConfig==="object")Q.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"thinking")){if(typeof Z.thinking==="boolean"||Z.thinking===null)Q.thinking=Z.thinking}if(Object.hasOwn(Z,"reasoningEffort")){let Y=ZI(Z.reasoningEffort);if(Y!==void 0)Q.reasoningEffort=Y}if(Object.hasOwn(Z,"thinkingBudgetTokens")){if(typeof Z.thinkingBudgetTokens==="number"&&Number.isFinite(Z.thinkingBudgetTokens)&&Z.thinkingBudgetTokens>0)Q.thinkingBudgetTokens=Math.trunc(Z.thinkingBudgetTokens);else if(Z.thinkingBudgetTokens===null)Q.thinkingBudgetTokens=null}return r2(Q)}function JI($,Z){return $.sessionState.get(Z)?.createdByClientId}function WI($){if(!$||!(LU in $))return $;let Z={...$};return delete Z[LU],Z}function qU($){let Z=JI($.ctx,$.sessionId);if(!Z)return k($.envelope,"session_wrong_client",`Session ${$.sessionId} has no owner`);if(Z!==$.clientId)return k($.envelope,"session_wrong_client",`Session ${$.sessionId} is owned by ${Z}`);return}async function zU($,Z,Q){let J=performance.now(),W={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};i("info","session.create.begin",W);let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},j=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{},Y=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0,V=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{},B=y1(X.initialCompactionState);if(typeof Y?.mode==="string")j.mode=Y.mode;else if(typeof V.mode==="string")j.mode=V.mode;if(typeof Y?.systemPrompt==="string")j.systemPrompt=Y.systemPrompt;else if(typeof V.systemPrompt==="string")j.systemPrompt=V.systemPrompt;if(Y?.checkpoint?.enabled===!0)j.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)j.checkpointEnabled=!0;let H=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},K=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():void 0,G=Z.clientId?.trim()||"hub-client",F=AW(V.clientContributions);i("info","session.create.contributions_parsed",{...W,clientId:G,workspaceRoot:K,cwd:typeof X.cwd==="string"?X.cwd:void 0,contributionCount:F.length});let _=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||AU(),L=OU(V.configExtensions);i("info","session.create.runtime_build.begin",{...W,sessionId:_,configExtensionCount:L?.length??0});let O=OW({sessionId:_,targetClientId:G,contributions:F,sessionConfig:Y,requestCapability:$.requestCapability});i("info","session.create.start_session.begin",{...W,sessionId:_,provider:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof j.provider==="string"?j.provider:"hub"),model:Y?.modelId??(typeof H.model==="string"?H.model:typeof j.model==="string"?j.model:"hub")});let D=await $.sessionHost.startSession({source:typeof j.source==="string"?j.source:void 0,interactive:j.interactive!==!1,sessionMetadata:Object.keys(j).length>0?j:void 0,initialMessages:Array.isArray(X.initialMessages)?X.initialMessages:void 0,initialCompactionState:B,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:L,...O.localRuntime},capabilities:{toolExecutors:O.toolExecutors,requestToolApproval:Q},config:{...Y??{},sessionId:_,providerId:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof j.provider==="string"?j.provider:"hub"),modelId:Y?.modelId??(typeof H.model==="string"?H.model:typeof j.model==="string"?j.model:"hub"),apiKey:Y?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:Y?.cwd??(typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():K),workspaceRoot:Y?.workspaceRoot??K,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 j.teamName==="string"?j.teamName:void 0)},toolPolicies:X.toolPolicies&&typeof X.toolPolicies==="object"&&!Array.isArray(X.toolPolicies)?JSON.parse(JSON.stringify(X.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});i("info","session.create.start_session.end",{...W,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-J),hasImmediateResult:!!D.result}),VW($,D.sessionId,G,"creator",{interactive:j.interactive!==!1}),i("info","session.create.read_records.begin",{...W,sessionId:D.sessionId});let[q,T]=await Promise.all([S0($,D.sessionId),d0($,D.sessionId)]);if(i("info","session.create.read_records.end",{...W,sessionId:D.sessionId,hasSession:!!q,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-J)}),q)$.publish($.buildEvent("session.created",{session:q,...T?{snapshot:T}:{}},D.sessionId));return i("info","session.create.reply",{...W,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-J)}),c(Z,{session:q,...T?{snapshot:T}:{}})}async function TU($,Z,Q){let J=Z.payload&&typeof Z.payload==="object"?Z.payload:{},W=typeof J.sessionId==="string"?J.sessionId.trim():Z.sessionId?.trim()||"",X=J.checkpointRunCount;if(!W)return k(Z,"invalid_restore","session.restore requires a session id");let j=J.restore&&typeof J.restore==="object"?J.restore:{},Y=j.messages!==!1;if(typeof X!=="number")return k(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=J.sessionConfig&&typeof J.sessionConfig==="object"?JSON.parse(JSON.stringify(J.sessionConfig)):void 0;if(Y&&!V)return k(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let B=J.runtimeOptions&&typeof J.runtimeOptions==="object"?J.runtimeOptions:{},H=y1(J.initialCompactionState),K=J.metadata&&typeof J.metadata==="object"?JSON.parse(JSON.stringify(J.metadata)):{};if(typeof V?.mode==="string")K.mode=V.mode;else if(typeof B.mode==="string")K.mode=B.mode;if(typeof V?.systemPrompt==="string")K.systemPrompt=V.systemPrompt;else if(typeof B.systemPrompt==="string")K.systemPrompt=B.systemPrompt;if(V?.checkpoint?.enabled===!0)K.checkpointEnabled=!0;else if(B.checkpointEnabled===!0)K.checkpointEnabled=!0;let G=J.modelSelection&&typeof J.modelSelection==="object"?J.modelSelection:{},F=Z.clientId?.trim()||"hub-client",U=AW(B.clientContributions),L=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||AU(),O=OU(B.configExtensions),D=OW({sessionId:L,targetClientId:F,contributions:U,sessionConfig:V,requestCapability:$.requestCapability}),T=await new O8().restoreCheckpoint({sessionId:W,checkpointRunCount:X,restore:{messages:j.messages,workspace:j.workspace,omitCheckpointMessageFromSession:j.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(N)=>$.sessionHost.getSession(N),readMessages:(N)=>$.sessionHost.readSessionMessages(N),buildStartInput:(N)=>{if(N.restoredCheckpointMetadata)K.checkpoint=N.restoredCheckpointMetadata;let C=typeof J.workspaceRoot==="string"&&J.workspaceRoot.trim()?J.workspaceRoot.trim():typeof J.cwd==="string"&&J.cwd.trim()?J.cwd.trim():N.sourceSession.workspaceRoot||N.sourceSession.cwd;return{source:typeof K.source==="string"?K.source:void 0,interactive:K.interactive!==!1,sessionMetadata:{...K,restoredFromSessionId:W,restoredCheckpointRunCount:X},initialMessages:N.initialMessages,initialCompactionState:H,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:O,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:L,providerId:V?.providerId??(typeof G.provider==="string"?G.provider:N.sourceSession.provider),modelId:V?.modelId??(typeof G.model==="string"?G.model:N.sourceSession.model),apiKey:V?.apiKey??(typeof G.apiKey==="string"?G.apiKey:""),cwd:V?.cwd??N.plan.cwd,workspaceRoot:V?.workspaceRoot??C,systemPrompt:V?.systemPrompt??(typeof B.systemPrompt==="string"?B.systemPrompt:""),mode:V?.mode??(B.mode==="plan"||B.mode==="yolo"?B.mode:"act"),maxIterations:V?.maxIterations??(typeof B.maxIterations==="number"?B.maxIterations:void 0),enableTools:V?.enableTools??B.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??B.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??B.enableTeams!==!1,checkpoint:V?.checkpoint??(B.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof K.teamName==="string"?K.teamName:void 0)},toolPolicies:J.toolPolicies&&typeof J.toolPolicies==="object"&&!Array.isArray(J.toolPolicies)?JSON.parse(JSON.stringify(J.toolPolicies)):B.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(N)=>$.sessionHost.startSession(N),getStartedSessionId:(N)=>N.sessionId,cleanupStartedSession:async(N)=>{if(!await $.sessionHost.deleteSession(N.sessionId))throw Error(`Failed to clean up restored session ${N.sessionId}`)},readRestoredSession:(N)=>$.sessionHost.getSession(N)});if(!Y)return c(Z,{checkpoint:T.checkpoint});let z=T.startResult;if(!z)return k(Z,"restore_failed","Checkpoint restore did not start a session");VW($,z.sessionId,F,"creator",{interactive:K.interactive!==!1});let[A,f]=await Promise.all([S0($,z.sessionId),d0($,z.sessionId)]);if(A)$.publish($.buildEvent("session.created",{session:A,...f?{snapshot:f}:{}},z.sessionId));return c(Z,{session:A,...f?{snapshot:f}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof e0)return k(Z,V.code,V.code==="session_not_found"?`Unknown session: ${W}`:V.message);return k(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function NU($,Z){let Q=C0(Z);if(!Q)return k(Z,"invalid_session_attach","session.attach requires a session id");let J=await S0($,Q);if(!J)return k(Z,"session_not_found",`Unknown session: ${Q}`);aF($,Q,Z.clientId?.trim()||"hub-client","participant");let W=await S0($,Q);return $.publish($.buildEvent("session.attached",{session:W??J},Q)),c(Z,{session:W??J})}async function fU($,Z){let Q=C0(Z);if(!Q)return k(Z,"invalid_session_detach","session.detach requires a session id");let J=Z.clientId?.trim()||"hub-client",W=$.sessionState.get(Q);if(W){if(W.participants.delete(J),W.createdByClientId===J)W.createdByClientId=void 0;if(W.participants.size===0)$.sessionState.delete(Q)}C$($,(Y)=>Y.sessionId===Q&&Y.targetClientId===J,`Capability owner client ${J} detached before request was resolved.`);let[X,j]=await Promise.all([S0($,Q),d0($,Q)]);return $.publish($.buildEvent("session.detached",X?{session:X,...j?{snapshot:j}:{},clientId:J}:{clientId:J},Q)),c(Z)}async function RU($,Z){let Q=C0(Z),J=Z.payload?.includeSnapshot===!0,[W,X]=await Promise.all([S0($,Q),J?d0($,Q):Promise.resolve(void 0)]);return W?c(Z,{session:W,...X?{snapshot:X}:{}}):k(Z,"session_not_found",`Unknown session: ${Q}`)}async function MU($,Z){let Q=C0(Z);if(!Q)return k(Z,"invalid_session_id","session.messages requires a session id");if(!await S0($,Q))return k(Z,"session_not_found",`Unknown session: ${Q}`);let W=await $.sessionHost.readSessionMessages(Q);return c(Z,{sessionId:Q,messages:W})}async function EU($,Z){let Q=C0(Z);if(!Q)return k(Z,"invalid_session_id","session.compaction.get requires a session id");if(!await S0($,Q))return k(Z,"session_not_found",`Unknown session: ${Q}`);let W=Z.clientId?.trim()||"hub-client",X=qU({sessionId:Q,ctx:$,clientId:W,envelope:Z});if(X)return X;let j=await $.sessionHost.readSessionCompactionState(Q);return c(Z,{sessionId:Q,state:j})}async function CU($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,W=(await $.sessionHost.listSessions(Q)).map((X)=>WZ(X,$.sessionState.get(X.sessionId)));return c(Z,{sessions:W})}async function wU($,Z){let Q=C0(Z),J=WI(N8(Z.payload?.metadata)),W=await $.sessionHost.updateSession(Q,{metadata:J}),[X,j]=await Promise.all([S0($,Q),d0($,Q)]);if(X)$.publish($.buildEvent("session.updated",{session:X,...j?{snapshot:j}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:W.updated,payload:{updated:W.updated,session:X,...j?{snapshot:j}:{}}}}async function PU($,Z){let Q=C0(Z);if(!Q)return k(Z,"invalid_session_update_connection","session.update_connection requires a session id");let J=$.sessionHost.updateSessionConnection;if(!J)return k(Z,"unsupported_session_update_connection","runtime host does not support session connection updates");let W=N8(Z.payload),X=QI(W?.updates);return await J.call($.sessionHost,Q,X),c(Z,{sessionId:Q,updated:!0})}async function SU($,Z){let Q=C0(Z);if(!Q)return k(Z,"invalid_session_id","session.compaction.update requires a session id");let J=Z.clientId?.trim()||"hub-client",W=await S0($,Q);if(!W)return k(Z,"session_not_found",`Unknown session: ${Q}`);let X=qU({sessionId:Q,ctx:$,clientId:J,envelope:Z});if(X)return X;let j=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=y1(j.state);if(!Y)return k(Z,"invalid_compaction_state","session.compaction.update requires a valid compaction state");let V=await $.sessionHost.updateSessionCompactionState(Q,Y),[B,H]=V.updated?await Promise.all([S0($,Q),d0($,Q)]):[W,void 0];if(V.updated)$.publish($.buildEvent("session.updated",{session:B??W,...H?{snapshot:H}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:!0,payload:{updated:V.updated,session:B??W,...H?{snapshot:H}:{}}}}async function bU($,Z){let Q=C0(Z),J=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),c(Z,{deleted:J})}async function yU($,Z){let Q=C0(Z),J=$.sessionHost.pendingPrompts;if(!J)return k(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await J.list({sessionId:Q});return c(Z,{sessionId:Q,prompts:W})}async function kU($,Z){let Q=C0(Z),J=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",W=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,X=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,j=$.sessionHost.pendingPrompts;if(!j)return k(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let Y=await j.update({sessionId:Q,promptId:J,prompt:W,delivery:X});return c(Z,Y)}async function hU($,Z){let Q=C0(Z),J=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",W=$.sessionHost.pendingPrompts;if(!W)return k(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await W.delete({sessionId:Q,promptId:J});return c(Z,X)}function IU($){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 jI=new Set(["skills","workflows","rules","tools","mcp"]);function qW($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function D4($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="string")throw Error(`settings payload '${Z}' must be a string.`);return Q}function YI($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="boolean")throw Error(`settings payload '${Z}' must be a boolean.`);return Q}function xU($){if($===void 0)return{};if(!qW($))throw Error("settings.list payload must be an object.");return{cwd:D4($,"cwd"),workspaceRoot:D4($,"workspaceRoot"),availabilityContext:qW($.availabilityContext)?$.availabilityContext:void 0}}function VI($){if(!qW($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!jI.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...xU($),type:Z,id:D4($,"id"),path:D4($,"path"),name:D4($,"name"),enabled:YI($,"enabled")}}class VZ{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=XI("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new E$({sessionService:new z$(new O$),fetch:$.fetch,logger:$.logger,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(Z)=>this.publish(Z),buildEvent:q2,requestCapability:(Z,Q,J,W,X)=>tF(this.ctx,Z,Q,J,W,X)},this.schedules=new t9({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let J=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!J)return;this.publish(q2(J,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new o9(this.schedules),this.settings=$.settingsService??new W8,$.cronOptions)this.cronService=new M6({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{UU(this.ctx,Z).catch((Q)=>{GW("session event handling failed",Q),YZ(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Q,severity:"error",handled:!0,context:{eventType:Z.type,sessionId:Z.payload.sessionId}})})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}}async stop(){for(let $ of this.pendingApprovals.keys())HW(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 Z=await this.dispatchCommand($);return this.captureFailedReply($,Z),Z}catch(Z){throw YZ(this.options.telemetry,{component:"core",operation:"hub.command",error:Z,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),Z}}async dispatchCommand($){switch($.command){case"client.register":return QU(this.ctx,$);case"client.update":return JU(this.ctx,$);case"client.unregister":return WU(this.ctx,$,(Z)=>{this.listeners.delete(Z),this.detachClientFromSessions(Z)});case"client.list":return XU(this.ctx,$);case"session.create":return await zU(this.ctx,$,(Z)=>BW(this.ctx,Z));case"session.restore":return await TU(this.ctx,$,(Z)=>BW(this.ctx,Z));case"session.attach":return await NU(this.ctx,$);case"session.detach":return await fU(this.ctx,$);case"session.get":return await RU(this.ctx,$);case"session.messages":return await MU(this.ctx,$);case"session.compaction.get":return await EU(this.ctx,$);case"session.list":return await CU(this.ctx,$);case"session.update":return await wU(this.ctx,$);case"session.update_connection":return await PU(this.ctx,$);case"session.compaction.update":return await SU(this.ctx,$);case"session.pending_prompts":return await yU(this.ctx,$);case"session.update_pending_prompt":return await kU(this.ctx,$);case"session.remove_pending_prompt":return await hU(this.ctx,$);case"session.delete":return await bU(this.ctx,$);case"session.hook":return await FU(this.ctx,$);case"run.start":case"session.send_input":return await KU(this.ctx,$);case"run.abort":return await GU(this.ctx,$);case"capability.request":return await $U(this.ctx,$);case"approval.respond":return await oF(this.ctx,$);case"capability.respond":return ZU(this.ctx,$);case"capability.progress":return eF(this.ctx,$);case"ui.notify":return this.publish(q2("ui.notify",$.payload??{})),c($);case"ui.show_window":return this.publish(q2("ui.show_window",$.payload??{})),c($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"connector.channels":case"connector.configure":case"connector.delete_config":return await HU(this.ctx,$);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let Z=await this.scheduleCommands.handleCommand($);if(Z.ok){let Q=IU($.command);if(Q)this.publish(q2(Q,Z.payload))}return Z}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!BI(Z.error.code))return;YZ(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(Z.error.message),severity:Z.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:Z.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let Z=await this.settings.list(xU($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:Z instanceof Error?Z.message:String(Z)}}}}async handleSettingsToggle($){try{let Z=await this.settings.toggle(VI($.payload));return this.publish(q2("settings.changed",{types:Z.changedTypes,snapshot:Z.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z.snapshot,changedTypes:Z.changedTypes}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:Z instanceof Error?Z.message:String(Z)}}}}subscribe($,Z,Q){let J=this.listeners.get($)??new Set,W={sessionId:Q?.sessionId,listener:Z};return J.add(W),this.listeners.set($,J),()=>{let X=this.listeners.get($);if(!X)return;if(X.delete(W),X.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries()){if(Q.participants.delete($),Q.createdByClientId===$)Q.createdByClientId=void 0;if(Q.participants.size===0)this.sessionState.delete(Z)}C$(this.ctx,(Z)=>Z.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let Z of this.listeners.values())for(let Q of Z){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(J){GW(`listener threw while publishing ${$.event}`,J),YZ(this.options.telemetry,{component:"core",operation:"hub.publish",error:J,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function BI($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as FI}from"node:crypto";import UI from"node:http";import DI from"node:net";import{URL as MW}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as mU,HUB_CAPABILITIES as _I,isHubProtocolCompatible as LI,MAX_CLIENT_HUB_PROTOCOL_VERSION as cU,MIN_CLIENT_HUB_PROTOCOL_VERSION as uU}from"@cline/shared";import{WebSocketServer as AI}from"ws";import{captureSdkError as gU,HUB_COMMAND_SLOW_LOG_MS as HI,resolveHubCommandTimeoutMs as KI,safeJsonParse as GI}from"@cline/shared";function zW($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function vU($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}class TW{transport;telemetry;constructor($,Z){this.transport=$;this.telemetry=Z}attach($){let Z=new Map,Q=new Set,J=!1,W=(V)=>{try{$.send(JSON.stringify(V))}catch(B){console.error(`[hub] failed to send websocket frame: ${B instanceof Error?B.stack||B.message:String(B)}`)}},X=(V)=>{W({kind:"event",envelope:V})},j=async(V)=>{try{let B=JSON.parse(V.data);switch(B.kind){case"command":{let H=performance.now(),K=!1,G=zW(B);i("info","command.start",G);let F=setTimeout(()=>{if(K)return;i("warn","command.slow",{...G,elapsedMs:Math.round(performance.now()-H)})},HI),U=this.transport.command(B.envelope);U.then((T)=>{if(!K)return;i(T.ok?"warn":"error","command.late_end",{...G,elapsedMs:Math.round(performance.now()-H),ok:T.ok,errorCode:T.error?.code,errorMessage:T.error?.message})},(T)=>{if(!K)return;i("error","command.late_error",{...G,elapsedMs:Math.round(performance.now()-H),error:T})});let _=!1,L,O,D=KI(B.envelope.command,B.envelope.timeoutMs);try{O=D===null?await U:await Promise.race([U,new Promise((T)=>{L=setTimeout(()=>{_=!0,gU(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${B.envelope.command} did not complete within ${D}ms.`),severity:"error",handled:!0,context:{...G,timeoutMs:D}}),T(vU(B,"hub_command_timeout",`Hub command ${B.envelope.command} did not complete within ${D}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${B.envelope.requestId}.`))},D)})])}catch(T){if(clearTimeout(F),L)clearTimeout(L);throw T}if(K=_,clearTimeout(F),L)clearTimeout(L);let q=Math.round(performance.now()-H);if(_)i("error","command.timeout",{...G,durationMs:q,timeoutMs:D});else i(O.ok?"info":"warn","command.end",{...G,durationMs:q,ok:O.ok,errorCode:O.error?.code,errorMessage:O.error?.message});if(B.envelope.command==="client.register"&&O.ok){let z=(B.envelope.payload??{}).clientId?.trim()||B.envelope.clientId?.trim();if(z)Q.add(z)}else if(B.envelope.command==="client.unregister"&&O.ok){let T=B.envelope.clientId?.trim();if(T)Q.delete(T)}W({kind:"reply",envelope:O});break}case"stream.subscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;if(Z.has(H))break;let K=await this.transport.subscribe(B.clientId,X,{sessionId:B.sessionId});Z.set(H,K);break}case"stream.unsubscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;Z.get(H)?.(),Z.delete(H);break}case"reply":case"event":break}}catch(B){let H=typeof V.data==="string"?GI(V.data):void 0;if(!H||H.kind!=="command"){i("error","rejected malformed websocket frame",{error:B});return}i("error","command.error",{...zW(H),error:B}),gU(this.telemetry,{component:"core",operation:"hub.websocket_command",error:B,severity:"error",handled:!0,context:zW(H)}),W({kind:"reply",envelope:vU(H,"command_failed",B instanceof Error?B.message:"Unknown hub error")})}},Y=()=>{if(J)return;J=!0;for(let V of Z.values())V();Z.clear();for(let V of Q)this.transport.command({version:"v1",command:"client.unregister",clientId:V});Q.clear(),$.removeEventListener("message",j),$.removeEventListener("close",Y)};return $.addEventListener("message",j),$.addEventListener("close",Y),Y}}class NW{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}}function OI($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();return String($)}function qI($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(J)=>{Q({data:OI(J)})});return}$.on("close",Q)},removeEventListener(){}}}function zI($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
776
|
+
${H}`:V.instructions}})}})}}function th($,Z,Q,J){let W=Q.map((X)=>[X.executor,async(...j)=>{let Y=j.at(-1),V=j.slice(0,-1);return(await J($,X.capabilityName,{executor:X.executor,args:V,context:LU(Y)},Z))?.result}]);return W.length>0?Object.fromEntries(W):void 0}function eh($,Z,Q,J){if(Q.length===0)return;return Q.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema,lifecycle:W.lifecycle,async execute(X,j){return(await J($,W.capabilityName,{toolName:W.name,input:X,context:LU(j)},Z,j.emitUpdate?(V)=>{j.emitUpdate?.(nh(V))}:void 0))?.result}}))}function $I($,Z,Q,J){let W=new Map(Q.map((j)=>[j.name,j])),X={};for(let j of ih){let Y=W.get(j);if(!Y)continue;X[j]=async(V)=>{return(await J($,Y.capabilityName,{context:V},Z))?.control}}return Object.keys(X).length>0?X:void 0}function OW($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),J=$.contributions.filter((V)=>V.kind==="hook"),W=$.contributions.find((V)=>V.kind==="compaction"),X=$.contributions.find((V)=>V.kind==="checkpoint"),j=$.contributions.find((V)=>V.kind==="mistakeLimit"),Y=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:th($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...J.length>0?{hooks:$I($.sessionId,$.targetClientId,J,$.requestCapability)}:{},...Q.length>0?{extraTools:eh($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...W?{compaction:{...$.sessionConfig?.compaction??{},...W.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{checkpoint:{...$.sessionConfig?.checkpoint??{},...X.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...j?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:V},$.targetClientId))?.result}}:{},...Y?{userInstructionService:sh($.sessionId,$.targetClientId,Y,$.requestCapability)}:{}}}}var AU="hubCapabilityOwnerClientId";function jZ($){return typeof $==="string"&&$.trim().length>0?$.trim():void 0}function QI($){if($===null)return null;let Z=ZI.safeParse($);return Z.success?Z.data:void 0}function JI($){let Z=f8($)??{},Q={},J=jZ(Z.providerId);if(J)Q.providerId=J;let W=jZ(Z.modelId);if(W)Q.modelId=W;let X=jZ(Z.apiKey);if(X!==void 0)Q.apiKey=X;let j=jZ(Z.baseUrl);if(j!==void 0)Q.baseUrl=j;if(Z.headers&&typeof Z.headers==="object")Q.headers=Z.headers;if(Z.providerConfig&&typeof Z.providerConfig==="object")Q.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"thinking")){if(typeof Z.thinking==="boolean"||Z.thinking===null)Q.thinking=Z.thinking}if(Object.hasOwn(Z,"reasoningEffort")){let Y=QI(Z.reasoningEffort);if(Y!==void 0)Q.reasoningEffort=Y}if(Object.hasOwn(Z,"thinkingBudgetTokens")){if(typeof Z.thinkingBudgetTokens==="number"&&Number.isFinite(Z.thinkingBudgetTokens)&&Z.thinkingBudgetTokens>0)Q.thinkingBudgetTokens=Math.trunc(Z.thinkingBudgetTokens);else if(Z.thinkingBudgetTokens===null)Q.thinkingBudgetTokens=null}return n2(Q)}function WI($,Z){return $.sessionState.get(Z)?.createdByClientId}function XI($){if(!$||!(AU in $))return $;let Z={...$};return delete Z[AU],Z}function zU($){let Z=WI($.ctx,$.sessionId);if(!Z)return k($.envelope,"session_wrong_client",`Session ${$.sessionId} has no owner`);if(Z!==$.clientId)return k($.envelope,"session_wrong_client",`Session ${$.sessionId} is owned by ${Z}`);return}async function TU($,Z,Q){let J=performance.now(),W={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};i("info","session.create.begin",W);let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},j=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{},Y=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0,V=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{},B=y1(X.initialCompactionState);if(typeof Y?.mode==="string")j.mode=Y.mode;else if(typeof V.mode==="string")j.mode=V.mode;if(typeof Y?.systemPrompt==="string")j.systemPrompt=Y.systemPrompt;else if(typeof V.systemPrompt==="string")j.systemPrompt=V.systemPrompt;if(Y?.checkpoint?.enabled===!0)j.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)j.checkpointEnabled=!0;let H=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},K=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():void 0,G=Z.clientId?.trim()||"hub-client",F=AW(V.clientContributions);i("info","session.create.contributions_parsed",{...W,clientId:G,workspaceRoot:K,cwd:typeof X.cwd==="string"?X.cwd:void 0,contributionCount:F.length});let _=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||OU(),L=qU(V.configExtensions);i("info","session.create.runtime_build.begin",{...W,sessionId:_,configExtensionCount:L?.length??0});let O=OW({sessionId:_,targetClientId:G,contributions:F,sessionConfig:Y,requestCapability:$.requestCapability});i("info","session.create.start_session.begin",{...W,sessionId:_,provider:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof j.provider==="string"?j.provider:"hub"),model:Y?.modelId??(typeof H.model==="string"?H.model:typeof j.model==="string"?j.model:"hub")});let D=await $.sessionHost.startSession({source:typeof j.source==="string"?j.source:void 0,interactive:j.interactive!==!1,sessionMetadata:Object.keys(j).length>0?j:void 0,initialMessages:Array.isArray(X.initialMessages)?X.initialMessages:void 0,initialCompactionState:B,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:L,...O.localRuntime},capabilities:{toolExecutors:O.toolExecutors,requestToolApproval:Q},config:{...Y??{},sessionId:_,providerId:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof j.provider==="string"?j.provider:"hub"),modelId:Y?.modelId??(typeof H.model==="string"?H.model:typeof j.model==="string"?j.model:"hub"),apiKey:Y?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:Y?.cwd??(typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():K),workspaceRoot:Y?.workspaceRoot??K,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 j.teamName==="string"?j.teamName:void 0)},toolPolicies:X.toolPolicies&&typeof X.toolPolicies==="object"&&!Array.isArray(X.toolPolicies)?JSON.parse(JSON.stringify(X.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});i("info","session.create.start_session.end",{...W,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-J),hasImmediateResult:!!D.result}),VW($,D.sessionId,G,"creator",{interactive:j.interactive!==!1}),i("info","session.create.read_records.begin",{...W,sessionId:D.sessionId});let[q,T]=await Promise.all([S0($,D.sessionId),d0($,D.sessionId)]);if(i("info","session.create.read_records.end",{...W,sessionId:D.sessionId,hasSession:!!q,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-J)}),q)$.publish($.buildEvent("session.created",{session:q,...T?{snapshot:T}:{}},D.sessionId));return i("info","session.create.reply",{...W,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-J)}),c(Z,{session:q,...T?{snapshot:T}:{}})}async function NU($,Z,Q){let J=Z.payload&&typeof Z.payload==="object"?Z.payload:{},W=typeof J.sessionId==="string"?J.sessionId.trim():Z.sessionId?.trim()||"",X=J.checkpointRunCount;if(!W)return k(Z,"invalid_restore","session.restore requires a session id");let j=J.restore&&typeof J.restore==="object"?J.restore:{},Y=j.messages!==!1;if(typeof X!=="number")return k(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=J.sessionConfig&&typeof J.sessionConfig==="object"?JSON.parse(JSON.stringify(J.sessionConfig)):void 0;if(Y&&!V)return k(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let B=J.runtimeOptions&&typeof J.runtimeOptions==="object"?J.runtimeOptions:{},H=y1(J.initialCompactionState),K=J.metadata&&typeof J.metadata==="object"?JSON.parse(JSON.stringify(J.metadata)):{};if(typeof V?.mode==="string")K.mode=V.mode;else if(typeof B.mode==="string")K.mode=B.mode;if(typeof V?.systemPrompt==="string")K.systemPrompt=V.systemPrompt;else if(typeof B.systemPrompt==="string")K.systemPrompt=B.systemPrompt;if(V?.checkpoint?.enabled===!0)K.checkpointEnabled=!0;else if(B.checkpointEnabled===!0)K.checkpointEnabled=!0;let G=J.modelSelection&&typeof J.modelSelection==="object"?J.modelSelection:{},F=Z.clientId?.trim()||"hub-client",U=AW(B.clientContributions),L=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||OU(),O=qU(B.configExtensions),D=OW({sessionId:L,targetClientId:F,contributions:U,sessionConfig:V,requestCapability:$.requestCapability}),T=await new q8().restoreCheckpoint({sessionId:W,checkpointRunCount:X,restore:{messages:j.messages,workspace:j.workspace,omitCheckpointMessageFromSession:j.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(N)=>$.sessionHost.getSession(N),readMessages:(N)=>$.sessionHost.readSessionMessages(N),buildStartInput:(N)=>{if(N.restoredCheckpointMetadata)K.checkpoint=N.restoredCheckpointMetadata;let C=typeof J.workspaceRoot==="string"&&J.workspaceRoot.trim()?J.workspaceRoot.trim():typeof J.cwd==="string"&&J.cwd.trim()?J.cwd.trim():N.sourceSession.workspaceRoot||N.sourceSession.cwd;return{source:typeof K.source==="string"?K.source:void 0,interactive:K.interactive!==!1,sessionMetadata:{...K,restoredFromSessionId:W,restoredCheckpointRunCount:X},initialMessages:N.initialMessages,initialCompactionState:H,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:O,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:L,providerId:V?.providerId??(typeof G.provider==="string"?G.provider:N.sourceSession.provider),modelId:V?.modelId??(typeof G.model==="string"?G.model:N.sourceSession.model),apiKey:V?.apiKey??(typeof G.apiKey==="string"?G.apiKey:""),cwd:V?.cwd??N.plan.cwd,workspaceRoot:V?.workspaceRoot??C,systemPrompt:V?.systemPrompt??(typeof B.systemPrompt==="string"?B.systemPrompt:""),mode:V?.mode??(B.mode==="plan"||B.mode==="yolo"?B.mode:"act"),maxIterations:V?.maxIterations??(typeof B.maxIterations==="number"?B.maxIterations:void 0),enableTools:V?.enableTools??B.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??B.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??B.enableTeams!==!1,checkpoint:V?.checkpoint??(B.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof K.teamName==="string"?K.teamName:void 0)},toolPolicies:J.toolPolicies&&typeof J.toolPolicies==="object"&&!Array.isArray(J.toolPolicies)?JSON.parse(JSON.stringify(J.toolPolicies)):B.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(N)=>$.sessionHost.startSession(N),getStartedSessionId:(N)=>N.sessionId,cleanupStartedSession:async(N)=>{if(!await $.sessionHost.deleteSession(N.sessionId))throw Error(`Failed to clean up restored session ${N.sessionId}`)},readRestoredSession:(N)=>$.sessionHost.getSession(N)});if(!Y)return c(Z,{checkpoint:T.checkpoint});let z=T.startResult;if(!z)return k(Z,"restore_failed","Checkpoint restore did not start a session");VW($,z.sessionId,F,"creator",{interactive:K.interactive!==!1});let[A,f]=await Promise.all([S0($,z.sessionId),d0($,z.sessionId)]);if(A)$.publish($.buildEvent("session.created",{session:A,...f?{snapshot:f}:{}},z.sessionId));return c(Z,{session:A,...f?{snapshot:f}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof e0)return k(Z,V.code,V.code==="session_not_found"?`Unknown session: ${W}`:V.message);return k(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function fU($,Z){let Q=C0(Z);if(!Q)return k(Z,"invalid_session_attach","session.attach requires a session id");let J=await S0($,Q);if(!J)return k(Z,"session_not_found",`Unknown session: ${Q}`);oF($,Q,Z.clientId?.trim()||"hub-client","participant");let W=await S0($,Q);return $.publish($.buildEvent("session.attached",{session:W??J},Q)),c(Z,{session:W??J})}async function RU($,Z){let Q=C0(Z);if(!Q)return k(Z,"invalid_session_detach","session.detach requires a session id");let J=Z.clientId?.trim()||"hub-client",W=$.sessionState.get(Q);if(W){if(W.participants.delete(J),W.createdByClientId===J)W.createdByClientId=void 0;if(W.participants.size===0)$.sessionState.delete(Q)}C$($,(Y)=>Y.sessionId===Q&&Y.targetClientId===J,`Capability owner client ${J} detached before request was resolved.`);let[X,j]=await Promise.all([S0($,Q),d0($,Q)]);return $.publish($.buildEvent("session.detached",X?{session:X,...j?{snapshot:j}:{},clientId:J}:{clientId:J},Q)),c(Z)}async function MU($,Z){let Q=C0(Z),J=Z.payload?.includeSnapshot===!0,[W,X]=await Promise.all([S0($,Q),J?d0($,Q):Promise.resolve(void 0)]);return W?c(Z,{session:W,...X?{snapshot:X}:{}}):k(Z,"session_not_found",`Unknown session: ${Q}`)}async function EU($,Z){let Q=C0(Z);if(!Q)return k(Z,"invalid_session_id","session.messages requires a session id");if(!await S0($,Q))return k(Z,"session_not_found",`Unknown session: ${Q}`);let W=await $.sessionHost.readSessionMessages(Q);return c(Z,{sessionId:Q,messages:W})}async function CU($,Z){let Q=C0(Z);if(!Q)return k(Z,"invalid_session_id","session.compaction.get requires a session id");if(!await S0($,Q))return k(Z,"session_not_found",`Unknown session: ${Q}`);let W=Z.clientId?.trim()||"hub-client",X=zU({sessionId:Q,ctx:$,clientId:W,envelope:Z});if(X)return X;let j=await $.sessionHost.readSessionCompactionState(Q);return c(Z,{sessionId:Q,state:j})}async function wU($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,W=(await $.sessionHost.listSessions(Q)).map((X)=>WZ(X,$.sessionState.get(X.sessionId)));return c(Z,{sessions:W})}async function PU($,Z){let Q=C0(Z),J=XI(f8(Z.payload?.metadata)),W=await $.sessionHost.updateSession(Q,{metadata:J}),[X,j]=await Promise.all([S0($,Q),d0($,Q)]);if(X)$.publish($.buildEvent("session.updated",{session:X,...j?{snapshot:j}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:W.updated,payload:{updated:W.updated,session:X,...j?{snapshot:j}:{}}}}async function SU($,Z){let Q=C0(Z);if(!Q)return k(Z,"invalid_session_update_connection","session.update_connection requires a session id");let J=$.sessionHost.updateSessionConnection;if(!J)return k(Z,"unsupported_session_update_connection","runtime host does not support session connection updates");let W=f8(Z.payload),X=JI(W?.updates);return await J.call($.sessionHost,Q,X),c(Z,{sessionId:Q,updated:!0})}async function bU($,Z){let Q=C0(Z);if(!Q)return k(Z,"invalid_session_id","session.compaction.update requires a session id");let J=Z.clientId?.trim()||"hub-client",W=await S0($,Q);if(!W)return k(Z,"session_not_found",`Unknown session: ${Q}`);let X=zU({sessionId:Q,ctx:$,clientId:J,envelope:Z});if(X)return X;let j=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=y1(j.state);if(!Y)return k(Z,"invalid_compaction_state","session.compaction.update requires a valid compaction state");let V=await $.sessionHost.updateSessionCompactionState(Q,Y),[B,H]=V.updated?await Promise.all([S0($,Q),d0($,Q)]):[W,void 0];if(V.updated)$.publish($.buildEvent("session.updated",{session:B??W,...H?{snapshot:H}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:!0,payload:{updated:V.updated,session:B??W,...H?{snapshot:H}:{}}}}async function yU($,Z){let Q=C0(Z),J=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),c(Z,{deleted:J})}async function kU($,Z){let Q=C0(Z),J=$.sessionHost.pendingPrompts;if(!J)return k(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await J.list({sessionId:Q});return c(Z,{sessionId:Q,prompts:W})}async function hU($,Z){let Q=C0(Z),J=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",W=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,X=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,j=$.sessionHost.pendingPrompts;if(!j)return k(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let Y=await j.update({sessionId:Q,promptId:J,prompt:W,delivery:X});return c(Z,Y)}async function IU($,Z){let Q=C0(Z),J=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",W=$.sessionHost.pendingPrompts;if(!W)return k(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await W.delete({sessionId:Q,promptId:J});return c(Z,X)}function xU($){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 YI=new Set(["skills","workflows","rules","tools","mcp"]);function qW($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function _4($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="string")throw Error(`settings payload '${Z}' must be a string.`);return Q}function VI($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="boolean")throw Error(`settings payload '${Z}' must be a boolean.`);return Q}function gU($){if($===void 0)return{};if(!qW($))throw Error("settings.list payload must be an object.");return{cwd:_4($,"cwd"),workspaceRoot:_4($,"workspaceRoot"),availabilityContext:qW($.availabilityContext)?$.availabilityContext:void 0}}function BI($){if(!qW($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!YI.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...gU($),type:Z,id:_4($,"id"),path:_4($,"path"),name:_4($,"name"),enabled:VI($,"enabled")}}class VZ{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=jI("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new E$({sessionService:new z$(new O$),fetch:$.fetch,logger:$.logger,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(Z)=>this.publish(Z),buildEvent:q2,requestCapability:(Z,Q,J,W,X)=>eF(this.ctx,Z,Q,J,W,X)},this.schedules=new t9({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let J=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!J)return;this.publish(q2(J,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new o9(this.schedules),this.settings=$.settingsService??new X8,$.cronOptions)this.cronService=new E6({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{DU(this.ctx,Z).catch((Q)=>{GW("session event handling failed",Q),YZ(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Q,severity:"error",handled:!0,context:{eventType:Z.type,sessionId:Z.payload.sessionId}})})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}}async stop(){for(let $ of this.pendingApprovals.keys())HW(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 Z=await this.dispatchCommand($);return this.captureFailedReply($,Z),Z}catch(Z){throw YZ(this.options.telemetry,{component:"core",operation:"hub.command",error:Z,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),Z}}async dispatchCommand($){switch($.command){case"client.register":return JU(this.ctx,$);case"client.update":return WU(this.ctx,$);case"client.unregister":return XU(this.ctx,$,(Z)=>{this.listeners.delete(Z),this.detachClientFromSessions(Z)});case"client.list":return jU(this.ctx,$);case"session.create":return await TU(this.ctx,$,(Z)=>BW(this.ctx,Z));case"session.restore":return await NU(this.ctx,$,(Z)=>BW(this.ctx,Z));case"session.attach":return await fU(this.ctx,$);case"session.detach":return await RU(this.ctx,$);case"session.get":return await MU(this.ctx,$);case"session.messages":return await EU(this.ctx,$);case"session.compaction.get":return await CU(this.ctx,$);case"session.list":return await wU(this.ctx,$);case"session.update":return await PU(this.ctx,$);case"session.update_connection":return await SU(this.ctx,$);case"session.compaction.update":return await bU(this.ctx,$);case"session.pending_prompts":return await kU(this.ctx,$);case"session.update_pending_prompt":return await hU(this.ctx,$);case"session.remove_pending_prompt":return await IU(this.ctx,$);case"session.delete":return await yU(this.ctx,$);case"session.hook":return await UU(this.ctx,$);case"run.start":case"session.send_input":return await GU(this.ctx,$);case"run.abort":return await FU(this.ctx,$);case"capability.request":return await ZU(this.ctx,$);case"approval.respond":return await sF(this.ctx,$);case"capability.respond":return QU(this.ctx,$);case"capability.progress":return $U(this.ctx,$);case"ui.notify":return this.publish(q2("ui.notify",$.payload??{})),c($);case"ui.show_window":return this.publish(q2("ui.show_window",$.payload??{})),c($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"connector.channels":case"connector.configure":case"connector.delete_config":return await KU(this.ctx,$);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let Z=await this.scheduleCommands.handleCommand($);if(Z.ok){let Q=xU($.command);if(Q)this.publish(q2(Q,Z.payload))}return Z}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!HI(Z.error.code))return;YZ(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(Z.error.message),severity:Z.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:Z.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let Z=await this.settings.list(gU($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:Z instanceof Error?Z.message:String(Z)}}}}async handleSettingsToggle($){try{let Z=await this.settings.toggle(BI($.payload));return this.publish(q2("settings.changed",{types:Z.changedTypes,snapshot:Z.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z.snapshot,changedTypes:Z.changedTypes}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:Z instanceof Error?Z.message:String(Z)}}}}subscribe($,Z,Q){let J=this.listeners.get($)??new Set,W={sessionId:Q?.sessionId,listener:Z};return J.add(W),this.listeners.set($,J),()=>{let X=this.listeners.get($);if(!X)return;if(X.delete(W),X.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries()){if(Q.participants.delete($),Q.createdByClientId===$)Q.createdByClientId=void 0;if(Q.participants.size===0)this.sessionState.delete(Z)}C$(this.ctx,(Z)=>Z.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let Z of this.listeners.values())for(let Q of Z){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(J){GW(`listener threw while publishing ${$.event}`,J),YZ(this.options.telemetry,{component:"core",operation:"hub.publish",error:J,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function HI($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as UI}from"node:crypto";import DI from"node:http";import _I from"node:net";import{URL as MW}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as cU,HUB_CAPABILITIES as LI,isHubProtocolCompatible as AI,MAX_CLIENT_HUB_PROTOCOL_VERSION as uU,MIN_CLIENT_HUB_PROTOCOL_VERSION as dU}from"@cline/shared";import{WebSocketServer as OI}from"ws";import{captureSdkError as vU,HUB_COMMAND_SLOW_LOG_MS as KI,resolveHubCommandTimeoutMs as GI,safeJsonParse as FI}from"@cline/shared";function zW($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function mU($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}class TW{transport;telemetry;constructor($,Z){this.transport=$;this.telemetry=Z}attach($){let Z=new Map,Q=new Set,J=!1,W=(V)=>{try{$.send(JSON.stringify(V))}catch(B){console.error(`[hub] failed to send websocket frame: ${B instanceof Error?B.stack||B.message:String(B)}`)}},X=(V)=>{W({kind:"event",envelope:V})},j=async(V)=>{try{let B=JSON.parse(V.data);switch(B.kind){case"command":{let H=performance.now(),K=!1,G=zW(B);i("info","command.start",G);let F=setTimeout(()=>{if(K)return;i("warn","command.slow",{...G,elapsedMs:Math.round(performance.now()-H)})},KI),U=this.transport.command(B.envelope);U.then((T)=>{if(!K)return;i(T.ok?"warn":"error","command.late_end",{...G,elapsedMs:Math.round(performance.now()-H),ok:T.ok,errorCode:T.error?.code,errorMessage:T.error?.message})},(T)=>{if(!K)return;i("error","command.late_error",{...G,elapsedMs:Math.round(performance.now()-H),error:T})});let _=!1,L,O,D=GI(B.envelope.command,B.envelope.timeoutMs);try{O=D===null?await U:await Promise.race([U,new Promise((T)=>{L=setTimeout(()=>{_=!0,vU(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${B.envelope.command} did not complete within ${D}ms.`),severity:"error",handled:!0,context:{...G,timeoutMs:D}}),T(mU(B,"hub_command_timeout",`Hub command ${B.envelope.command} did not complete within ${D}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${B.envelope.requestId}.`))},D)})])}catch(T){if(clearTimeout(F),L)clearTimeout(L);throw T}if(K=_,clearTimeout(F),L)clearTimeout(L);let q=Math.round(performance.now()-H);if(_)i("error","command.timeout",{...G,durationMs:q,timeoutMs:D});else i(O.ok?"info":"warn","command.end",{...G,durationMs:q,ok:O.ok,errorCode:O.error?.code,errorMessage:O.error?.message});if(B.envelope.command==="client.register"&&O.ok){let z=(B.envelope.payload??{}).clientId?.trim()||B.envelope.clientId?.trim();if(z)Q.add(z)}else if(B.envelope.command==="client.unregister"&&O.ok){let T=B.envelope.clientId?.trim();if(T)Q.delete(T)}W({kind:"reply",envelope:O});break}case"stream.subscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;if(Z.has(H))break;let K=await this.transport.subscribe(B.clientId,X,{sessionId:B.sessionId});Z.set(H,K);break}case"stream.unsubscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;Z.get(H)?.(),Z.delete(H);break}case"reply":case"event":break}}catch(B){let H=typeof V.data==="string"?FI(V.data):void 0;if(!H||H.kind!=="command"){i("error","rejected malformed websocket frame",{error:B});return}i("error","command.error",{...zW(H),error:B}),vU(this.telemetry,{component:"core",operation:"hub.websocket_command",error:B,severity:"error",handled:!0,context:zW(H)}),W({kind:"reply",envelope:mU(H,"command_failed",B instanceof Error?B.message:"Unknown hub error")})}},Y=()=>{if(J)return;J=!0;for(let V of Z.values())V();Z.clear();for(let V of Q)this.transport.command({version:"v1",command:"client.unregister",clientId:V});Q.clear(),$.removeEventListener("message",j),$.removeEventListener("close",Y)};return $.addEventListener("message",j),$.addEventListener("close",Y),Y}}class NW{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}}function qI($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();return String($)}function zI($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(J)=>{Q({data:qI(J)})});return}$.on("close",Q)},removeEventListener(){}}}function TI($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
777
777
|
Connection: close\r
|
|
778
778
|
Content-Length: 0\r
|
|
779
779
|
\r
|
|
780
|
-
`),$.end()}catch{$.destroy()}}function
|
|
780
|
+
`),$.end()}catch{$.destroy()}}function NI($){try{$.write(`HTTP/1.1 401 Unauthorized\r
|
|
781
781
|
Connection: close\r
|
|
782
782
|
Content-Length: 0\r
|
|
783
783
|
\r
|
|
784
|
-
`),$.end()}catch{$.destroy()}}function fW($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),J=Buffer.from(Z,"utf8");return Q.length===J.length&&
|
|
785
|
-
Caused by: ${$.stack}`;return X}async function
|
|
786
|
-
`,"utf8");let V=Z.timeoutMs??300000,B=Z.pollIntervalMs??200,H=Date.now();while(Date.now()-H<V){try{let K=await
|
|
787
|
-
`,"utf8")}function jD($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))]}}function GZ($){if(!T2($))return;let Z=$.metadata;return T2(Z)?Z:void 0}function KZ($,Z){let Q=GZ($);if(!Q||Q.source!=="plugin")return!1;let J=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,W=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&J===Z.pluginName){if(!Z.pluginPath||W===Z.pluginPath)return!0}if(W&&Z.pluginPath&&(W===Z.pluginPath||HZ(Z.pluginPath,W)||HZ(W,Z.pluginPath)))return!0;if(J&&Z.pluginNames?.some((X)=>X===J))return!0;if(W&&Z.pluginPaths?.some((X)=>W===X||HZ(X,W)||HZ(W,X)))return!0;return!1}function Kx($){let Z=T2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:XD($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function Gx($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await k2({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],J=[],W=(Z.failures??[]).map((X)=>({pluginPath:X.pluginPath,pluginName:X.pluginName,message:X.message}));for(let X of Z.extensions??[]){let j=X.__clinePluginPath;if(!j)continue;if(!X.setup){Q.push({pluginName:X.name,pluginPath:j});continue}let Y=[],V={registerTool:(B)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(B)=>{if(!X.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');Y.push(B)}};try{await X.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(B){W.push({pluginPath:j,pluginName:X.name,message:B instanceof Error?B.message:String(B)});continue}Q.push({pluginName:X.name,pluginPath:j});for(let B of Y)J.push({pluginName:X.name,pluginPath:j,server:{...B,metadata:{...B.metadata??{},source:"plugin",pluginName:X.name,pluginPath:j}}})}return{plugins:Q,servers:J,failures:W}}finally{await Z.shutdown().catch(()=>{})}}async function kW($){let Z=$.settingsPath??j0(),Q={mutations:[],failures:[]},J;try{J=await Gx($)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Q}Q.failures.push(...J.failures);let W;try{W=SW(Z)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Q}let X=bW(W),j=new Map,Y=new Map;for(let B of J.plugins)j.set(B.pluginPath,new Set),Y.set(B.pluginPath,B.pluginName);let V=c7(J.servers.map((B)=>({server:B.server,owner:B,ownerLabel:B.pluginName})));for(let B of V){let H=B.owner;if(!j.has(H.pluginPath))j.set(H.pluginPath,new Set);if(B.name)j.get(H.pluginPath)?.add(B.name);if(!B.registration){Q.mutations.push({name:B.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:B.loadError??"invalid MCP server registration"});continue}let K=X[B.registration.name];if(K!==void 0){if(!KZ(K,{pluginName:H.pluginName,pluginPath:H.pluginPath})){Q.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}X[B.registration.name]=Kx({registration:B.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:T2(K)?K:void 0}),Q.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:K===void 0?"created":"updated"})}for(let[B,H]of Object.entries(X)){let K=GZ(H),G=typeof K?.pluginPath==="string"?K.pluginPath:"",F=j.get(G);if(F&&KZ(H,{pluginPath:G})&&!F.has(B))delete X[B],Q.mutations.push({name:B,pluginName:typeof K?.pluginName==="string"?K.pluginName:Y.get(G)??"plugin",pluginPath:G,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((B)=>B.action!=="skipped"))try{yW(Z,W,X)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)})}return Q}function Fx($){let Z=$.settingsPath??j0(),Q;try{Q=SW(Z)}catch{return[]}let J=bW(Q),W=jD($),X=[];for(let[j,Y]of Object.entries(J)){if(!T2(Y)||!KZ(Y,W))continue;let V=GZ(Y);J[j]={...Y,disabled:!0},X.push({name:j,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(X.length>0)yW(Z,Q,J);return X}function hW($){let Z=$.settingsPath??j0(),Q;try{Q=SW(Z)}catch{return[]}let J=bW(Q),W=jD($),X=[];for(let[j,Y]of Object.entries(J)){if(!KZ(Y,W))continue;let V=GZ(Y);delete J[j],X.push({name:j,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(X.length>0)yW(Z,Q,J);return X}var cW="_installed",fx="package",Rx=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function xW($){return $.trim().toLowerCase()}function Y1($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function Mx($){return $.replace(/-[0-9a-f]{12}$/i,"")}function gW($){let Z=Ox($);return Z?$.slice(0,-Z.length):$}function vW($){if(!R8($))return;try{let Z=JSON.parse(Dx($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function uW($,Z){let Q=zx(Z,$);return Q===""||!Q.startsWith("..")&&!qx(Q)}function YD($){let Q=f8($).split(IW),J=Q.lastIndexOf(cW);if(J<0)return;let W=Q[J+1];if(!W)return;let X=Rx.get(W)??1,j=J+2+X;if(Q.length<j)return;let Y=Q.slice(0,j).join(IW)||IW;return R8(Y)?Y:void 0}function FZ($){try{return Ux($,{withFileTypes:!0})}catch{return[]}}function Ex($){let Z=m1($,cW);if(!R8(Z))return[];let Q=[];for(let J of FZ(Z)){if(!J.isDirectory())continue;let W=m1(Z,J.name);if(J.name==="git"){for(let X of FZ(W)){if(!X.isDirectory())continue;let j=m1(W,X.name);for(let Y of FZ(j))if(Y.isDirectory())Q.push(m1(j,Y.name))}continue}for(let X of FZ(W))if(X.isDirectory())Q.push(m1(W,X.name))}return Q.sort((J,W)=>J.localeCompare(W))}function VD($){try{return Tx($)}catch{return[]}}function mW($){let Z=VD($),Q=new Set;Y1(Q,Q1($)),Y1(Q,Mx(Q1($))),Y1(Q,vW(m1($,"package.json"))),Y1(Q,vW(m1($,fx,"package.json")));for(let J of Z)Y1(Q,Q1(J)),Y1(Q,gW(Q1(J)));return{installPath:$,entryPaths:Z,names:[...Q].sort((J,W)=>J.localeCompare(W)),installed:!0}}function Cx($,Z){let Q=f8($),J=Z.find((j)=>uW(Q,j));if(!J)return;let W=w$(Q);while(W!==J&&W!==w$(W)){if(R8(m1(W,"package.json")))return W;W=w$(W)}let X=Q1(Q);if((X==="index.ts"||X==="index.js")&&w$(Q)!==J)return w$(Q);return Q}function BD($,Z){let Q=Cx($,Z);if(!Q)return;let J=new Set;return Y1(J,Q1($)),Y1(J,gW(Q1($))),Y1(J,Q1(Q)),Y1(J,gW(Q1(Q))),Y1(J,vW(m1(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...J].sort((W,X)=>W.localeCompare(X)),installed:!1}}function wx($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return Nx(Z).filter((Q)=>R8(Q))}function Px($){let Z=new Map;for(let Q of $){for(let J of Ex(Q))Z.set(J,mW(J));for(let J of VD(Q)){let W=YD(J);if(W){if(!Z.has(W))Z.set(W,mW(W));continue}let X=BD(J,$);if(X)Z.set(X.installPath,X)}}return[...Z.values()].sort((Q,J)=>Q.installPath.localeCompare(J.installPath))}function Sx($,Z){let Q=xW(Z);if(!Q)return!1;if(xW($.installPath)===Q)return!0;return $.names.some((J)=>xW(J)===Q)}function bx($,Z,Q){let J=f8($);for(let X of Z){if(uW(J,X.installPath))return X;if(X.entryPaths.some((j)=>f8(j)===J))return X}let W=YD(J);if(W)return mW(W);if(R8(J))return BD(J,Q);return}function yx($){let Z=X0(),Q=Z.disabledPlugins;if(!Q?.length)return;let J=Q.filter((W)=>{let X=f8(W);if(uW(X,$.installPath))return!1;return!$.entryPaths.some((j)=>f8(j)===X)});if(J.length===Q.length)return;m0({...Z,disabledPlugins:J})}function kx($){let Z=w$($);while(Z!==w$(Z)&&Q1(Z)!==cW){try{_x(Z)}catch{return}Z=w$(Z)}}function hx($){return`${$.names[0]??Q1($.installPath)} at ${$.installPath}`}async function dW($){let Z=wx($),Q=Px(Z),J=$.path?.trim(),W=$.name?.trim(),X;if(J){if(X=bx(J,Q,Z),!X)throw Error(`No plugin found at ${J}`)}else{if(!W)throw Error("plugin uninstall requires a plugin name");let Y=Q.filter((V)=>Sx(V,W));if(Y.length===0)throw Error(`No plugin found matching "${W}"`);if(Y.length>1)throw Error(`Multiple plugins match "${W}": ${Y.map(hx).join(", ")}`);X=Y[0]}let j=Ax(X.installPath,{throwIfNoEntry:!1});if(!j)throw Error(`Plugin install path does not exist: ${X.installPath}`);if(hW({pluginPaths:[X.installPath,...X.entryPaths],pluginNames:X.names}),Lx(X.installPath,{recursive:j.isDirectory(),force:!0}),yx(X),X.installed)kx(X.installPath);return{name:W||X.names[0]||Q1(X.installPath),installPath:X.installPath,removedPaths:[X.installPath],entryPaths:X.entryPaths}}var pW=120000,L4=12000,dx=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,px=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,lx=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,ix=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function lW($){return $.install?.args??[]}function rx(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||gx()}function nx($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function ax($){return nx($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function GD($){return $.split(/\r?\n/).map((Z)=>{if(!dx.test(Z))return Z;return Z.replace(px,"$1[redacted]").replace(lx,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(ix,"$1 [redacted]").replace(/((?:^|[^\w])(?:api\s+key|access\s+token|refresh\s+token|auth(?:orization)?\s+token|secret|password|credential)\s+(?:is\s+)?)(\S+)/gi,"$1[redacted]")}).join(`
|
|
788
|
-
`).slice(-
|
|
789
|
-
`)).trim();return Z.length>0?Z:void 0}function
|
|
790
|
-
Timed out after ${pW/1000}s.`,j.kill("SIGTERM")},pW);B.unref?.(),H.unref?.(),j.stdout?.on("data",(K)=>{if(Y+=String(K),Y.length>
|
|
784
|
+
`),$.end()}catch{$.destroy()}}function fW($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),J=Buffer.from(Z,"utf8");return Q.length===J.length&&UI(Q,J)}function pU($,Z){let Q=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,J=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",W=`Failed to start hub server on ${Z.host}:${Z.port}${Z.pathname}: ${J}`,X=Error(Q?`${W} (${Q})`:W);if(Q)$.code=Q,X.code=Q;if($ instanceof Error&&$.stack)X.stack=`${X.name}: ${X.message}
|
|
785
|
+
Caused by: ${$.stack}`;return X}async function fI($){return await new Promise((Z,Q)=>{let J=_I.createServer();J.once("error",Q),J.listen(0,$,()=>{let W=J.address();if(!W||typeof W==="string"){J.close(()=>Q(Error("Failed to resolve free port")));return}let X=W.port;J.close((j)=>{if(j){Q(j);return}Z(X)})})})}function RI($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var RW=new Map,lU="cline-hub-auth.",MI=30000;function EW($){return Array.isArray($)?$.join(","):$??""}function iU($){return $===32||$===9}function rU($){let Z=EW($).trim(),Q="bearer";if(Z.length<=6||Z.slice(0,6).toLowerCase()!=="bearer"||!iU(Z.charCodeAt(6)))return null;let J=7;while(J<Z.length&&iU(Z.charCodeAt(J)))J+=1;return Z.slice(J).trim()||null}function EI($){for(let Z of EW($).split(",")){let Q=Z.trim();if(Q.startsWith(lU))return Q.slice(lU.length).trim()||null}return null}function nU($){let Z=$.trim().toLowerCase();return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"||Z==="[::1]"}function CI($){let Z=EW($).trim();if(!Z)return!1;try{return nU(new MW(Z).hostname)}catch{return!1}}async function CW($){let Z=$.owner??J2(),Q=$.host??"127.0.0.1",J=$.pathname??"/hub",W=$.port??Q9(),X=W===0?await fI(Q):W,j=X,Y=P1(Q,X,J),V=SH(),B=PH(),H=new VZ($);await H.start();let K=new TW(new NW(H),$.telemetry),G=new Set,F=new Date().toISOString(),U={protocolVersion:cU,minClientProtocolVersion:dU,maxClientProtocolVersion:uU,capabilities:LI,coreVersion:k6.version,buildId:V,pid:process.pid,startedAt:F},_=new Set,L,O,D=async()=>{if(O)return O;return O=(async()=>{if(L)clearInterval(L),L=void 0;for(let A of _)A.terminate?.();_.clear();for(let A of G)A();if(G.clear(),await new Promise((A,f)=>{T.close((N)=>{if(N){f(N);return}A()})}),await new Promise((A,f)=>{q.close((N)=>{if(N){f(N);return}A()})}),await H.stop(),(await R0(Z.discoveryPath))?.url===Y)await j1(Z.discoveryPath)})(),O},q=DI.createServer((z,A)=>{if((z.url??"/")==="/health"){let N=JSON.stringify({ok:!0,protocolVersion:U.protocolVersion,minClientProtocolVersion:U.minClientProtocolVersion,maxClientProtocolVersion:U.maxClientProtocolVersion,coreVersion:U.coreVersion,host:Q,port:j,url:Y});A.statusCode=200,A.setHeader("content-type","application/json"),A.end(N);return}if((z.url??"/")==="/status"){if(!fW(rU(z.headers.authorization),B)){A.statusCode=401,A.end("Unauthorized");return}let N=JSON.stringify({hubId:H.getHubId(),...U,authToken:B,host:Q,port:j,url:Y,updatedAt:new Date().toISOString()});A.statusCode=200,A.setHeader("content-type","application/json"),A.end(N);return}if((z.url??"/")==="/version"){A.statusCode=200,A.setHeader("content-type","application/json"),A.end(JSON.stringify(U));return}if(new MW(z.url??"/",`http://${Q}:${j}`).pathname==="/shutdown"&&z.method==="POST"){if(!fW(rU(z.headers.authorization),B)){A.statusCode=401,A.end("Unauthorized");return}A.statusCode=202,A.setHeader("content-type","application/json"),A.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{D()});return}A.statusCode=404,A.end("Not found")}),T=new OI({noServer:!0});L=setInterval(()=>{for(let z of _){if(z.isAlive===!1){try{z.terminate?.()}catch{}_.delete(z);continue}z.isAlive=!1;try{z.ping?.()}catch{try{z.terminate?.()}catch{}_.delete(z)}}},MI),q.on("upgrade",(z,A,f)=>{if(new MW(z.url??"/",`http://${Q}:${j}`).pathname!==J){A.destroy();return}if(!(fW(EI(z.headers["sec-websocket-protocol"]),B)||nU(Q)&&CI(z.headers.origin))){NI(A);return}try{T.handleUpgrade(z,A,f,(P)=>{let n=P;n.isAlive=!0,n.on("pong",()=>{n.isAlive=!0}),_.add(n);let g=K.attach(zI(P));G.add(g),P.once("close",()=>{_.delete(n),g(),G.delete(g)})})}catch{TI(A)}});try{await new Promise((z,A)=>{q.once("error",(f)=>{A(pU(f,{host:Q,port:X,pathname:J}))}),q.listen(X,Q,()=>{let f=q.address();if(!f||typeof f==="string"){A(pU(Error("Failed to resolve hub port"),{host:Q,port:X,pathname:J}));return}j=f.port,Y=P1(Q,j,J),z()})})}catch(z){if(L)clearInterval(L),L=void 0;throw await H.stop().catch(()=>{return}),z}return await bH(Z.discoveryPath,{hubId:H.getHubId(),protocolVersion:cU,minClientProtocolVersion:dU,maxClientProtocolVersion:uU,capabilities:[...U.capabilities],coreVersion:k6.version,buildId:V,authToken:B,host:Q,port:j,url:Y,pid:process.pid,startedAt:F,updatedAt:F}),{host:Q,port:j,url:Y,authToken:B,close:D}}async function aU($){let Z=$.owner??J2(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=$.host??"127.0.0.1",W=$.port??Q9(),X=$.pathname??"/hub",j=P1(J,W,X),Y=Z.discoveryPath,V=(H)=>{if(!Q)V8(H.url,H.authToken);return H},B=RW.get(Y);if(B){let H=await B;if(H.url===j)return V({server:H,url:H.url,authToken:H.authToken,action:"reuse"})}return await yH(Z.discoveryPath,async()=>{let H=await R0(Z.discoveryPath);if(H?.url&&(H.url===j||$.allowPortFallback===!0)){let F=await W2(H.url,{authToken:H.authToken});if(F?.url&&AI(F).compatible&&await D$(F.url,{authToken:H.authToken}))return V({url:F.url,authToken:H.authToken,action:"reuse"})}if(H?.url)await j1(Z.discoveryPath);let G=async(F)=>{let U=CW({...F,owner:Z});RW.set(Y,U);try{let _=await U;return V({server:_,url:_.url,authToken:_.authToken,action:"started"})}catch(_){throw RW.delete(Y),_}};try{return await G($)}catch(F){if(!$.allowPortFallback||!RI(F))throw F;return await G({...$,port:0})}})}function sU(){return oU()==="production"?U$():S1()}function wI($){return oU()!=="production"&&!$}async function J80($){let Z=F$({host:$.host,port:$.port,pathname:$.pathname});return await CW({...$,...Z,owner:sU()})}async function W80($){let Z=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=F$({host:$.host,port:$.port,pathname:$.pathname});return await aU({...$,...Q,allowPortFallback:$.allowPortFallback??wI(Z),owner:sU()})}BZ();import{buildRemoteConfigSessionBlobUploadMetadata as eU,clearRemoteConfigSessionBlobUpload as PI,createClineTelemetryServiceConfig as SI,createSessionId as bI,createRemoteConfigSessionMessagesArtifactUploader as yI,prepareRemoteConfigRuntime as kI,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as $D,readRemoteConfigSessionBlobUploadMetadata as hI,registerRemoteConfigSessionBlobUpload as ZD}from"@cline/shared";function II($,Z){let Q=$.telemetry||Z.telemetryService?{...Z.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return O2(SI(Q)).telemetry}function xI(){let $=yI();return{async uploadMessagesFile(Z){await $.uploadMessagesFile(Z)}}}async function gI($){let Z=await kI($),Q=II(Z,$),J=[Z.pluginDefinition],W=Z.claims?.subject,X=eU(Z.bundle?.remoteConfig,W),j;return{prepared:Z,extensions:J,telemetry:Q,applyToStartSessionInput(Y){let V=Y.config.extensions??[],B=Y.config.telemetry,H=X?Y.config.sessionId?.trim()||bI():Y.config.sessionId;if(H&&X)j=H;let K=H&&X?ZD(H,Z.bundle?.remoteConfig,W):void 0,G=K?{...Y.sessionMetadata??{},[$D]:K}:Y.sessionMetadata;return{...Y,...G?{sessionMetadata:G}:{},config:{...Y.config,...H?{sessionId:H}:{},extensions:[...V,...J],telemetry:Q??B}}},async dispose(){if(j)PI(j)}}}import{mkdir as vI,readFile as mI,unlink as cI,writeFile as uI}from"node:fs/promises";import{join as QD}from"node:path";function dI($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function pI($){return new Promise((Z)=>setTimeout(Z,$))}async function wW($){try{await cI($)}catch{}}async function lI($,Z={}){let Q=Z.approvalDir?.trim(),J=Z.sessionId?.trim();if(!Q||!J)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await vI(Q,{recursive:!0});let W=dI(`${$.toolCallId}`),X=QD(Q,`${J}.request.${W}.json`),j=QD(Q,`${J}.decision.${W}.json`),Y=Z.nowIso??(()=>new Date().toISOString());await uI(X,`${JSON.stringify({requestId:W,sessionId:J,createdAt:Y(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
|
|
786
|
+
`,"utf8");let V=Z.timeoutMs??300000,B=Z.pollIntervalMs??200,H=Date.now();while(Date.now()-H<V){try{let K=await mI(j,"utf8"),G=JSON.parse(K),F={approved:G.approved===!0,reason:typeof G.reason==="string"?G.reason:void 0};return await Promise.all([wW(j),wW(X)]),F}catch{}await pI(B)}return await wW(X),{approved:!1,reason:"Tool approval request timed out"}}import{withConnectorStore as L4}from"@cline/shared/db";var iI=new Set(["-i","--interactive"]);function rI($,Z){let Q=$.filter((W)=>!iI.has(W));return Q.some((W)=>W==="--cwd"||W.startsWith("--cwd="))?Q:[...Q,"--cwd",Z]}function nI($,Z,Q,J=process.cwd()){try{let W=rI(Q,J);L4((X)=>X.recordConnected($,Z,W))}catch{}}function aI($,Z){try{L4((Q)=>{if($)Q.setEnabled($,!1,Z);else Q.disableAll()})}catch{}}function oI($,Z){try{return L4((Q)=>Q.getConnection($,Z))}catch{return}}function sI($,Z){try{L4((Q)=>Q.deleteConnection($,Z))}catch{}}async function tI($){let Z=$.log??(()=>{}),Q;try{Q=L4((W)=>W.listConnections()).filter((W)=>W.enabled).map((W)=>({channel:W.channel,instanceId:W.instanceId,args:W.connectArgs}))}catch(W){return Z(`[connect] failed to read persisted connectors: ${W instanceof Error?W.message:String(W)}`),[]}let J=[];for(let W of Q){let{channel:X,instanceId:j}=W;if($.isHealthy?.(W))continue;Z(`[connect] reconnecting ${X} connector ${j}`);try{let Y=await $.start(W);if(J.push({channel:X,instanceId:j,ok:Y}),!Y)Z(`[connect] failed to reconnect ${X} connector ${j}`)}catch(Y){let V=Y instanceof Error?Y.message:String(Y);J.push({channel:X,instanceId:j,ok:!1,error:V}),Z(`[connect] failed to reconnect ${X} connector ${j}: ${V}`)}}return J}J1();import{spawn as xx}from"node:child_process";import{existsSync as GD,rmSync as gx}from"node:fs";import{homedir as vx,platform as mx}from"node:os";import{dirname as cx,join as KD}from"node:path";import{resolveClineDir as ux,resolveMcpSettingsPath as dx}from"@cline/shared/storage";function eI($){let Z=($??"stdio").trim();if(Z==="http"||Z==="streamable-http")return"streamableHttp";if(Z==="stdio"||Z==="sse"||Z==="streamableHttp")return Z;throw Error(`Unsupported MCP transport "${Z}". Expected stdio, sse, http, streamable-http, or streamableHttp.`)}function $x($){let Z;try{Z=new URL($)}catch{throw Error(`Invalid MCP server URL: ${$}`)}if(Z.protocol!=="http:"&&Z.protocol!=="https:")throw Error(`Invalid MCP server URL: ${$} (only http and https are supported)`)}function Zx($){let Z=$.indexOf(":");if(Z<=0)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);let Q=$.slice(0,Z).trim(),J=$.slice(Z+1).trim();if(!Q||!J)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);if(!/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(Q))throw Error(`Invalid MCP header name "${Q}".`);return[Q,J]}function Qx($){let Z=$.indexOf("<");return Z>=0&&$.indexOf(">",Z+1)>Z+1}function JD($){let Z=[...$.headers??[]],Q=[],J=$.transport,W=$.targetArgs??[];for(let X=0;X<W.length;X++){let j=W[X];if($.parseTransport&&j==="--transport"){let Y=W[X+1];if(!Y)throw Error("--transport requires a value");J=Y,X++;continue}if($.parseTransport&&j?.startsWith("--transport=")){J=j.slice(12);continue}if(j==="--header"){let Y=W[X+1];if(!Y)throw Error("--header requires a value");Z.push(Y),X++;continue}if(j?.startsWith("--header=")){Z.push(j.slice(9));continue}Q.push(j)}return{headers:Z,targetArgs:Q,transport:J}}function Jx($){if($.length===0)return{warnings:[]};let Z={},Q=[];for(let J of $){let[W,X]=Zx(J);if(Z[W]=X,Qx(X))Q.push(`Header "${W}" looks like it contains a placeholder. Update it in MCP settings before using this server.`)}return{headers:Z,warnings:Q}}function WD($){let Z=$.name.trim();if(!Z)throw Error("MCP server name is required");let{headers:Q,targetArgs:J,transport:W}=JD({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),X=eI(W),{headers:j,warnings:Y}=Jx(Q);if(X==="stdio"){if(Q.length>0)throw Error("Stdio MCP installs do not support request headers.");let[B,...H]=J;if(!B?.trim())throw Error("Stdio MCP install requires a command after the server name, for example: cline mcp install fs --yes -- npx -y @modelcontextprotocol/server-filesystem /tmp");return{name:Z,transport:{type:X,command:B,args:H.length>0?H:void 0},warnings:Y}}if(J.length!==1)throw Error("Remote MCP install requires exactly one URL argument after the server name.");let V=J[0]?.trim()??"";return $x(V),{name:Z,transport:j?{type:X,url:V,headers:j}:{type:X,url:V},warnings:Y}}function PW($){let[Z,...Q]=$;if(!Z)throw Error("Marketplace MCP install args must start with a server name.");return{name:Z,...JD({parseTransport:!0,targetArgs:Q})}}function Wx($,Z,Q){C1(Q,(J)=>{let W=J.mcpServers,X=W&&typeof W==="object"&&!Array.isArray(W)?{...W}:{};X[$]={transport:Z},J.mcpServers=X})}function Xx($){let{name:Z,transport:Q,warnings:J}=WD($);return Wx(Z,Q,$.settingsPath??j0()),{name:Z,status:"installed",transport:Q,warnings:J}}J1();import{existsSync as M8,readdirSync as Dx,readFileSync as _x,rmdirSync as Lx,rmSync as Ax,statSync as Ox}from"node:fs";import{basename as Q1,dirname as w$,extname as qx,isAbsolute as zx,join as m1,relative as Tx,resolve as R8,sep as IW}from"node:path";import{discoverPluginModulePaths as Nx,resolvePluginConfigSearchPaths as fx}from"@cline/shared/storage";import{existsSync as jx,mkdirSync as Yx,readFileSync as Vx,writeFileSync as Bx}from"node:fs";import{dirname as jD,isAbsolute as Hx,relative as Kx,resolve as XD}from"node:path";function T2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function HZ($,Z){let Q=Kx(XD($),XD(Z));return Q===""||!Q.startsWith("..")&&!Hx(Q)}function SW($){if(!jx($))return{mcpServers:{}};try{let Z=JSON.parse(Vx($,"utf8"));if(T2(Z))return Z}catch(Z){throw Error(`Invalid MCP settings at "${$}": ${Z instanceof Error?Z.message:String(Z)}`)}throw Error(`Invalid MCP settings at "${$}": expected an object`)}function bW($){if(T2($.mcpServers))return{...$.mcpServers};return{}}function yW($,Z,Q){Yx(jD($),{recursive:!0}),Bx($,`${JSON.stringify({...Z,mcpServers:Q},null,2)}
|
|
787
|
+
`,"utf8")}function YD($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))]}}function GZ($){if(!T2($))return;let Z=$.metadata;return T2(Z)?Z:void 0}function KZ($,Z){let Q=GZ($);if(!Q||Q.source!=="plugin")return!1;let J=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,W=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&J===Z.pluginName){if(!Z.pluginPath||W===Z.pluginPath)return!0}if(W&&Z.pluginPath&&(W===Z.pluginPath||HZ(Z.pluginPath,W)||HZ(W,Z.pluginPath)))return!0;if(J&&Z.pluginNames?.some((X)=>X===J))return!0;if(W&&Z.pluginPaths?.some((X)=>W===X||HZ(X,W)||HZ(W,X)))return!0;return!1}function Gx($){let Z=T2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:jD($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function Fx($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await h2({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],J=[],W=(Z.failures??[]).map((X)=>({pluginPath:X.pluginPath,pluginName:X.pluginName,message:X.message}));for(let X of Z.extensions??[]){let j=X.__clinePluginPath;if(!j)continue;if(!X.setup){Q.push({pluginName:X.name,pluginPath:j});continue}let Y=[],V={registerTool:(B)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(B)=>{if(!X.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');Y.push(B)}};try{await X.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(B){W.push({pluginPath:j,pluginName:X.name,message:B instanceof Error?B.message:String(B)});continue}Q.push({pluginName:X.name,pluginPath:j});for(let B of Y)J.push({pluginName:X.name,pluginPath:j,server:{...B,metadata:{...B.metadata??{},source:"plugin",pluginName:X.name,pluginPath:j}}})}return{plugins:Q,servers:J,failures:W}}finally{await Z.shutdown().catch(()=>{})}}async function kW($){let Z=$.settingsPath??j0(),Q={mutations:[],failures:[]},J;try{J=await Fx($)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Q}Q.failures.push(...J.failures);let W;try{W=SW(Z)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Q}let X=bW(W),j=new Map,Y=new Map;for(let B of J.plugins)j.set(B.pluginPath,new Set),Y.set(B.pluginPath,B.pluginName);let V=c7(J.servers.map((B)=>({server:B.server,owner:B,ownerLabel:B.pluginName})));for(let B of V){let H=B.owner;if(!j.has(H.pluginPath))j.set(H.pluginPath,new Set);if(B.name)j.get(H.pluginPath)?.add(B.name);if(!B.registration){Q.mutations.push({name:B.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:B.loadError??"invalid MCP server registration"});continue}let K=X[B.registration.name];if(K!==void 0){if(!KZ(K,{pluginName:H.pluginName,pluginPath:H.pluginPath})){Q.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}X[B.registration.name]=Gx({registration:B.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:T2(K)?K:void 0}),Q.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:K===void 0?"created":"updated"})}for(let[B,H]of Object.entries(X)){let K=GZ(H),G=typeof K?.pluginPath==="string"?K.pluginPath:"",F=j.get(G);if(F&&KZ(H,{pluginPath:G})&&!F.has(B))delete X[B],Q.mutations.push({name:B,pluginName:typeof K?.pluginName==="string"?K.pluginName:Y.get(G)??"plugin",pluginPath:G,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((B)=>B.action!=="skipped"))try{yW(Z,W,X)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)})}return Q}function Ux($){let Z=$.settingsPath??j0(),Q;try{Q=SW(Z)}catch{return[]}let J=bW(Q),W=YD($),X=[];for(let[j,Y]of Object.entries(J)){if(!T2(Y)||!KZ(Y,W))continue;let V=GZ(Y);J[j]={...Y,disabled:!0},X.push({name:j,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(X.length>0)yW(Z,Q,J);return X}function hW($){let Z=$.settingsPath??j0(),Q;try{Q=SW(Z)}catch{return[]}let J=bW(Q),W=YD($),X=[];for(let[j,Y]of Object.entries(J)){if(!KZ(Y,W))continue;let V=GZ(Y);delete J[j],X.push({name:j,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(X.length>0)yW(Z,Q,J);return X}var cW="_installed",Rx="package",Mx=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function xW($){return $.trim().toLowerCase()}function Y1($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function Ex($){return $.replace(/-[0-9a-f]{12}$/i,"")}function gW($){let Z=qx($);return Z?$.slice(0,-Z.length):$}function vW($){if(!M8($))return;try{let Z=JSON.parse(_x($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function uW($,Z){let Q=Tx(Z,$);return Q===""||!Q.startsWith("..")&&!zx(Q)}function VD($){let Q=R8($).split(IW),J=Q.lastIndexOf(cW);if(J<0)return;let W=Q[J+1];if(!W)return;let X=Mx.get(W)??1,j=J+2+X;if(Q.length<j)return;let Y=Q.slice(0,j).join(IW)||IW;return M8(Y)?Y:void 0}function FZ($){try{return Dx($,{withFileTypes:!0})}catch{return[]}}function Cx($){let Z=m1($,cW);if(!M8(Z))return[];let Q=[];for(let J of FZ(Z)){if(!J.isDirectory())continue;let W=m1(Z,J.name);if(J.name==="git"){for(let X of FZ(W)){if(!X.isDirectory())continue;let j=m1(W,X.name);for(let Y of FZ(j))if(Y.isDirectory())Q.push(m1(j,Y.name))}continue}for(let X of FZ(W))if(X.isDirectory())Q.push(m1(W,X.name))}return Q.sort((J,W)=>J.localeCompare(W))}function BD($){try{return Nx($)}catch{return[]}}function mW($){let Z=BD($),Q=new Set;Y1(Q,Q1($)),Y1(Q,Ex(Q1($))),Y1(Q,vW(m1($,"package.json"))),Y1(Q,vW(m1($,Rx,"package.json")));for(let J of Z)Y1(Q,Q1(J)),Y1(Q,gW(Q1(J)));return{installPath:$,entryPaths:Z,names:[...Q].sort((J,W)=>J.localeCompare(W)),installed:!0}}function wx($,Z){let Q=R8($),J=Z.find((j)=>uW(Q,j));if(!J)return;let W=w$(Q);while(W!==J&&W!==w$(W)){if(M8(m1(W,"package.json")))return W;W=w$(W)}let X=Q1(Q);if((X==="index.ts"||X==="index.js")&&w$(Q)!==J)return w$(Q);return Q}function HD($,Z){let Q=wx($,Z);if(!Q)return;let J=new Set;return Y1(J,Q1($)),Y1(J,gW(Q1($))),Y1(J,Q1(Q)),Y1(J,gW(Q1(Q))),Y1(J,vW(m1(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...J].sort((W,X)=>W.localeCompare(X)),installed:!1}}function Px($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return fx(Z).filter((Q)=>M8(Q))}function Sx($){let Z=new Map;for(let Q of $){for(let J of Cx(Q))Z.set(J,mW(J));for(let J of BD(Q)){let W=VD(J);if(W){if(!Z.has(W))Z.set(W,mW(W));continue}let X=HD(J,$);if(X)Z.set(X.installPath,X)}}return[...Z.values()].sort((Q,J)=>Q.installPath.localeCompare(J.installPath))}function bx($,Z){let Q=xW(Z);if(!Q)return!1;if(xW($.installPath)===Q)return!0;return $.names.some((J)=>xW(J)===Q)}function yx($,Z,Q){let J=R8($);for(let X of Z){if(uW(J,X.installPath))return X;if(X.entryPaths.some((j)=>R8(j)===J))return X}let W=VD(J);if(W)return mW(W);if(M8(J))return HD(J,Q);return}function kx($){let Z=X0(),Q=Z.disabledPlugins;if(!Q?.length)return;let J=Q.filter((W)=>{let X=R8(W);if(uW(X,$.installPath))return!1;return!$.entryPaths.some((j)=>R8(j)===X)});if(J.length===Q.length)return;m0({...Z,disabledPlugins:J})}function hx($){let Z=w$($);while(Z!==w$(Z)&&Q1(Z)!==cW){try{Lx(Z)}catch{return}Z=w$(Z)}}function Ix($){return`${$.names[0]??Q1($.installPath)} at ${$.installPath}`}async function dW($){let Z=Px($),Q=Sx(Z),J=$.path?.trim(),W=$.name?.trim(),X;if(J){if(X=yx(J,Q,Z),!X)throw Error(`No plugin found at ${J}`)}else{if(!W)throw Error("plugin uninstall requires a plugin name");let Y=Q.filter((V)=>bx(V,W));if(Y.length===0)throw Error(`No plugin found matching "${W}"`);if(Y.length>1)throw Error(`Multiple plugins match "${W}": ${Y.map(Ix).join(", ")}`);X=Y[0]}let j=Ox(X.installPath,{throwIfNoEntry:!1});if(!j)throw Error(`Plugin install path does not exist: ${X.installPath}`);if(hW({pluginPaths:[X.installPath,...X.entryPaths],pluginNames:X.names}),Ax(X.installPath,{recursive:j.isDirectory(),force:!0}),kx(X),X.installed)hx(X.installPath);return{name:W||X.names[0]||Q1(X.installPath),installPath:X.installPath,removedPaths:[X.installPath],entryPaths:X.entryPaths}}var pW=120000,A4=12000,px=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,lx=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,ix=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,rx=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function lW($){return $.install?.args??[]}function nx(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||vx()}function ax($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function ox($){return ax($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function FD($){return $.split(/\r?\n/).map((Z)=>{if(!px.test(Z))return Z;return Z.replace(lx,"$1[redacted]").replace(ix,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(rx,"$1 [redacted]").replace(/((?:^|[^\w])(?:api\s+key|access\s+token|refresh\s+token|auth(?:orization)?\s+token|secret|password|credential)\s+(?:is\s+)?)(\S+)/gi,"$1[redacted]")}).join(`
|
|
788
|
+
`).slice(-A4)}function sx($){let Z=FD([$.stdout,$.stderr].filter(Boolean).join(`
|
|
789
|
+
`)).trim();return Z.length>0?Z:void 0}function tx($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function ex($,Z){return[$,...Z].map((Q)=>tx(FD(Q).trim())).join(" ")}var $g=async($,Z)=>new Promise((Q,J)=>{let W=!1,X=!1,j=xx($,Z,{env:process.env,shell:mx()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),Y="",V="",B=setTimeout(()=>{if(!W)j.kill("SIGKILL")},pW+5000),H=setTimeout(()=>{X=!0,V+=`
|
|
790
|
+
Timed out after ${pW/1000}s.`,j.kill("SIGTERM")},pW);B.unref?.(),H.unref?.(),j.stdout?.on("data",(K)=>{if(Y+=String(K),Y.length>A4*2)Y=Y.slice(-A4)}),j.stderr?.on("data",(K)=>{if(V+=String(K),V.length>A4*2)V=V.slice(-A4)}),j.once("error",(K)=>{clearTimeout(H),clearTimeout(B),J(K)}),j.once("close",(K,G)=>{W=!0,clearTimeout(H),clearTimeout(B),Q({exitCode:X?124:K??(G==="SIGINT"?130:1),stdout:Y,stderr:V})})});function Zg($){return`${$.type}:${$.id}`}function iW($){let Z=lW($);if(Z.length===0)throw Error("Marketplace install args are required.");return PW(Z).name}function UD($,Z={}){let Q=iW($),J=Z.mcpSettingsPath??dx(),W=C1(J,(X)=>{let j=X.mcpServers&&typeof X.mcpServers==="object"&&!Array.isArray(X.mcpServers)?X.mcpServers:{},Y=Object.hasOwn(j,Q);if(Y)delete j[Q];return X.mcpServers=j,Y});return{name:Q,deleted:W}}function rW($){let Z=new Set,Q=(W)=>{let X=ox(W??"");if(X&&X!=="skill")Z.add(X)};Q($.id),Q($.name);let J=lW($);for(let W=0;W<J.length;W++){let X=J[W];if((X==="--skill"||X==="-s")&&J[W+1]){Q(J[W+1]),W++;continue}let j=X.split("@").at(1);if(j)Q(j)}return[...Z]}function nW($){return[KD(ux(),"skills",$,"SKILL.md"),KD(nx(),".agents","skills",$,"SKILL.md")].filter((Z,Q,J)=>J.indexOf(Z)===Q)}function aW($){if($.type!=="skill")return;return rW($).find((Z)=>nW(Z).some((Q)=>GD(Q)))}function DD($){return aW($)!==void 0}function Qg($){let Z=[];if($.type!=="skill")return Z;for(let Q of rW($))for(let J of nW(Q)){if(!GD(J))continue;let W=cx(J);gx(W,{recursive:!0,force:!0}),Z.push(W)}return Z}async function _D($,Z={}){let Q=aW($);if(!Q)return{id:$.id,type:"skill",status:"uninstalled",message:`${$.name??$.id} is not installed.`};let J="npx",W=["-y","skills@latest","remove",Q,"-g","-y"],X=ex(J,W),j=Z.spawnCommand??$g,Y;try{Y=await j(J,W)}catch(H){throw Error(`Failed to start ${$.name??$.id} uninstall command:
|
|
791
791
|
${X}
|
|
792
|
-
${H instanceof Error?H.message:String(H)}`)}let V=
|
|
792
|
+
${H instanceof Error?H.message:String(H)}`)}let V=sx(Y);if(Y.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${Y.exitCode}.
|
|
793
793
|
Command:
|
|
794
794
|
${X}${V?`
|
|
795
795
|
|
|
796
|
-
${V}`:""}`);let B=
|
|
797
|
-
`)||void 0}}async function
|
|
798
|
-
`)}}async function
|
|
799
|
-
`,"utf8")}function Eg($,Z){let Q=a($,"node_modules","@cline");if(!O1(Q))return;for(let J of SD(Q)){if(`@cline/${J.name}`===Z)continue;LZ(a(Q,J.name),{recursive:!0,force:!0})}}function PD($){let Z=Rg(wD($)).map((X)=>P$($,X)).filter((X)=>O1(X)&&eW(X).isFile()&&_Z(X));if(Z.length>0)return Z;let Q=Hg($);if(Q?.length)return Q;let J=[],W=[$];while(W.length>0){let X=W.pop();if(!X)continue;for(let j of SD(X)){let Y=a(X,j.name);if(j.name==="node_modules"||j.name===".git")continue;if(j.isDirectory()){W.push(Y);continue}if(j.isFile()&&!j.name.startsWith(".")&&_Z(Y))J.push(Y)}}return J.sort((X,j)=>X.localeCompare(j))}function SD($){try{return Xg($,{withFileTypes:!0})}catch{return[]}}function Cg($,Z){let Q=PD(Z);if(Q.length===0)throw Error(`No plugin entry files found in ${Z}`);return Q.map((J)=>`./${MD(RD($,J))}`)}async function wg($,Z,Q){let J=Cg($,Z);return await AZ(a($,"package.json"),JSON.stringify({...Fg,name:Q,cline:{plugins:[{paths:J}]}},null,2),"utf8"),J}async function Pg($,Z,Q){let J=a(Z,OZ);return await fD(J,{recursive:!0}),await AZ(a(J,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await E8(Q,["install",$.spec,"--prefix",J,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),Eg(J,$.name),a(J,"node_modules",$.name)}async function $X($,Z){if(!O1(a($,"package.json")))return;await Mg($),await E8(Z,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function Sg($,Z,Q){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let J=a(Z,OZ),W=["clone","--filter=blob:none"];if($.ref)W.push("--branch",$.ref);W.push("--",$.repo,J);try{await E8("git",W)}catch(X){if(!$.ref)throw X;await E8("git",["clone","--filter=blob:none","--",$.repo,J]),await E8("git",["checkout","--detach",$.ref],{cwd:J})}return await $X(J,Q),J}async function bg($,Z,Q,J){let W=a(Z,"repo");await E8("git",["clone","--filter=blob:none","--depth","1","--",J,W]);let X=a(W,"plugins",$.slug);if(!O1(X)||!eW(X).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${J}`);let j=a(Z,OZ);return await sW(X,j,{recursive:!0,filter:(Y)=>{let V=u1(Y);return V!==".git"&&V!=="node_modules"}}),LZ(W,{recursive:!0,force:!0}),await $X(j,Q),j}function oW($){return Error(`Remote plugin file from ${$} exceeds the ${DZ} byte limit`)}function yg($){let Z=$.headers.get("content-length");if(!Z)return;let Q=Number(Z);if(!Number.isFinite(Q)||Q<0)return;return Q}async function kg($,Z){let Q=yg($);if(Q!==void 0&&Q>DZ)throw oW(Z);if(!$.body){let j=Buffer.from(await $.text(),"utf8");if(j.byteLength>DZ)throw oW(Z);return j}let J=$.body.getReader(),W=[],X=0;try{while(!0){let{done:j,value:Y}=await J.read();if(j)break;let V=Buffer.from(Y);if(X+=V.byteLength,X>DZ)throw await J.cancel().catch(()=>{return}),oW(Z);W.push(V)}return Buffer.concat(W,X)}finally{J.releaseLock()}}async function hg($,Z){let Q=new AbortController,J=setTimeout(()=>{Q.abort()},OD);try{let W=await fetch($.url,{signal:Q.signal});if(!W.ok){let j=W.statusText?` ${W.statusText}`:"";throw Error(`Failed to download plugin file from ${$.url}: ${W.status}${j}`)}let X=await kg(W,$.url);return tW(Z,{recursive:!0}),await AZ(a(Z,$.filename),X),Z}catch(W){if(W instanceof Error&&W.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${OD}ms`);throw W}finally{clearTimeout(J)}}async function Ig($,Z,Q,J){let W=P$(Q,qZ($.path));if(!O1(W))throw Error(`Plugin source path does not exist: ${W}`);let X=eW(W);if(X.isFile()){if(!_Z(W))throw Error(`Plugin file must be .js or .ts: ${W}`);tW(Z,{recursive:!0});let Y=a(Z,u1(W));return await sW(W,Y),Z}if(!X.isDirectory())throw Error(`Plugin source must be a file or directory: ${W}`);let j=a(Z,OZ);return await sW(W,j,{recursive:!0,filter:(Y)=>{let V=u1(Y);return V!==".git"&&V!=="node_modules"}}),await $X(j,J),j}function xg($,Z){if(O1($)&&!Z)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function gg($,Z,Q){if(tW(AD(Z),{recursive:!0}),!O1(Z)){UZ($,Z);return}if(!Q)throw Error(`Plugin is already installed at ${Z}. Use --force to replace it.`);let J=a(AD(Z),`.replace-${u1(Z)}-${Date.now()}-${process.pid}-${N2(`${Z}:${Math.random()}`)}`);UZ(Z,J);try{UZ($,Z)}catch(W){if(!O1(Z)&&O1(J))UZ(J,Z);throw W}try{LZ(J,{recursive:!0,force:!0})}catch{}}function vg($){let Z=$.transport;if(Z.type==="stdio")return!1;return Z.headers!==void 0&&Object.keys(Z.headers).length>0}function mg($){let Z=$.oauth?.tokens?.access_token;return typeof Z==="string"&&Z.trim().length>0}function cg($){let Z=$.metadata;if(!Z||Z.source!=="plugin"||typeof Z.pluginName!=="string"||typeof Z.pluginPath!=="string")return;return{pluginName:Z.pluginName,pluginPath:Z.pluginPath}}function bD($){let Z=new Set($.pluginPaths.map((W)=>P$(W)));if(Z.size===0)return[];let Q;try{Q=G1({filePath:$.settingsPath??j0()})}catch{return[]}let J=[];for(let W of Q){let X=cg(W);if(!X||!Z.has(P$(X.pluginPath)))continue;let j=W.transport.type;if(j==="stdio")continue;if(vg(W)||mg(W))continue;J.push({name:W.name,pluginName:X.pluginName,pluginPath:X.pluginPath,transportType:j,lastError:W.oauth?.lastError})}return J.sort((W,X)=>W.name.localeCompare(X.name))}async function ug($){let Z=$.source.trim(),Q=CD(Z,$.sourceType),J=$.cwd?.trim(),W=J?P$(J):process.cwd(),X=zg(J?W:void 0),j=Dg($.officialPluginsRepo),Y=Ng(Q,W,j),V=Tg(X,Q,Y),B=fg(Q,W),H=a(X,M8,".tmp"),K=a(H,`${Date.now()}-${process.pid}-${N2(`${Z}:${Math.random()}`)}`),G=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;xg(V,F),await fD(H,{recursive:!0});let U;try{if(Q.type==="npm")U=await Pg(Q,K,G);else if(Q.type==="git")U=await Sg(Q,K,G);else if(Q.type==="official")U=await bg(Q,K,G,j);else if(Q.type==="remote")U=await hg(Q,K);else U=await Ig(Q,K,W,G);let _=(Q.type==="local"||Q.type==="remote")&&U===K?PD(K).map((D)=>`./${MD(RD(K,D))}`):await wg(K,U,B);if(_.length===0)throw Error(`No plugin entry files found for ${Z}`);gg(K,V,F);let L={source:Z,installPath:V,entryPaths:_.map((D)=>P$(V,D)),mcpSyncFailures:[],mcpOAuthCandidates:[]},O=await kW({pluginPaths:L.entryPaths,cwd:W,workspacePath:W});return L.mcpSyncFailures=O.failures,L.mcpOAuthCandidates=bD({pluginPaths:L.entryPaths}),L}catch(_){throw LZ(K,{recursive:!0,force:!0}),_}}import*as x0 from"@cline/llms";var kD="cline-pass";function dg($){return $.apiKey??$.auth?.apiKey}function pg($){return($.auth?.accessToken?.trim()??"").length>0}function hD($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function lg($){let Z=$.split(/\s+/).filter(Boolean);if(Z.length===0)return"?";if(Z.length===1)return Z[0].slice(0,2).toUpperCase();return`${Z[0][0]}${Z[1][0]}`.toUpperCase()}function ig($){let Z=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let J of $)Q=Q*31+J.charCodeAt(0)>>>0;return Z[Q%Z.length]}function ID($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>iG(Z,Q))}async function rg($,Z){let Q=await x0.getModelsForProvider($),J=$===kD;if(!Z&&!J)return Q;let W=await _Q($,{loadLatestOnInit:J,loadPrivateOnAuth:!0,failOnError:!1},Z);if($==="litellm"&&W?.knownModels)return W.knownModels;if(J&&W?.knownModels)return W.knownModels;return W?.knownModels?{...Q,...W.knownModels}:Q}function ZX($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function ng($){if(!$?.length)return;return[...new Set($)]}function ag($,Z){return ng([...$??[],...Z??[]])}function og($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function sg($){if(!$||typeof $!=="object")return!1;let Z=$;return typeof Z.path==="string"&&Z.path.trim().length>0&&typeof Z.label==="string"&&Z.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(Z.type))}function tg($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(sg)}var zZ={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},yD={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function eg($){if(!$)return[zZ];if($.source!=="system")return $.baseUrl?[zZ,yD]:[zZ];let Z=[];if($.env?.length)Z.push(zZ);if($.baseUrl)Z.push(yD);return Z}function $v($,Z){return Z.split(".").reduce((Q,J)=>{if(!Q||typeof Q!=="object")return;return Q[J]},$)}function Zv($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function Qv($,Z,Q){if(!$?.length)return;let J={};for(let W of $){let j=Zv(W.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:$v(Z,W.path))??W.defaultValue;if(j!==void 0)J[W.path]=j}return J}function xD($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function QX($,Z){let Q=Z?.includes("vision")??!1,J=Z?.includes("reasoning")??!1;return Object.fromEntries($.map((W)=>[W,{id:W,name:W,supportsVision:Q,supportsAttachments:Q,supportsReasoning:J}]))}async function gD($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await P4($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function vD($,Z){let Q=$.read(),J=!1;if(Q.providers[Z])delete Q.providers[Z],J=!0;if(Q.lastUsedProvider===Z)delete Q.lastUsedProvider,J=!0;if(J)$.write(Q);x0.unregisterProvider(Z)}async function Jv($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let J=Z.baseUrl.trim(),W=Z.apiKey?.trim()??"";if(!J&&!W){let U=f$($);if((await L8(U)).providers[Q]){let L=await cD($,{providerId:Q});return{providerId:Q,settingsPath:L.settingsPath,modelsPath:L.modelsPath,modelsCount:0}}return vD($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:U,modelsCount:0}}if(x0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let X=Z.name.trim();if(!X)throw Error("name is required");if(!J)throw Error("baseUrl is required");let j=ZX(Z.models),Y=Z.modelsSourceUrl?.trim(),V=await gD({providerId:Q,explicitModels:j,modelsSourceUrl:Y,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let B=Z.defaultModelId?.trim()&&V.includes(Z.defaultModelId.trim())?Z.defaultModelId.trim():V[0],H=Z.capabilities?.length?[...new Set(Z.capabilities)]:void 0,K=xD(Z.headers);$.saveProviderSettings({provider:Q,apiKey:W||void 0,baseUrl:J,headers:K,timeout:Z.timeoutMs,model:B,protocol:Z.protocol,client:Z.client},{setLastUsed:!1});let G=f$($),F=await L8(G);return F.providers[Q]={provider:{name:X,baseUrl:J,defaultModelId:B,protocol:Z.protocol,client:Z.client,capabilities:H,modelsSourceUrl:Y},models:QX(V,H)},await h9(G,F),A8(Q,F.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:G,modelsCount:V.length}}async function mD($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let J=f$($),W=await L8(J),X=W.providers[Q];if(!X){let T=$.getProviderSettings(Q);if(!T)throw Error(`provider "${Q}" does not exist`);let z=Z.modelsSourceUrl?.trim(),A=ZX(Z.models)[0]??T.model?.trim();if(!A&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);X={provider:{name:Z.name?.trim()||hD(Q),baseUrl:Z.baseUrl?.trim()??T.baseUrl?.trim()??"",defaultModelId:A,protocol:T.protocol,client:T.client,capabilities:T.capabilities},models:A?QX([A],T.capabilities):{}}}if(!X.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let j=Z.name?.trim()??X.provider.name.trim();if(!j)throw Error("name is required");let Y=Z.baseUrl?.trim()??X.provider.baseUrl.trim();if(!Y)throw Error("baseUrl is required");let V=Z.capabilities===void 0?X.provider.capabilities:Z.capabilities===null?void 0:[...new Set(Z.capabilities)],B=Z.protocol===void 0?X.provider.protocol:Z.protocol??void 0,H=Z.client===void 0?X.provider.client:Z.client??void 0,K=ZX(Z.models),G=Z.modelsSourceUrl===void 0?X.provider.modelsSourceUrl:Z.modelsSourceUrl?.trim()||void 0,F=Z.models!==void 0||Z.modelsSourceUrl!==void 0&&!!G,U=Object.keys(X.models??{}).map((T)=>T.trim()).filter(Boolean),_=await gD({providerId:Q,explicitModels:K,modelsSourceUrl:G,fallbackModelIds:U,shouldRecompute:F});if(_.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let L=Z.defaultModelId===void 0?X.provider.defaultModelId?.trim():Z.defaultModelId?.trim(),O=L&&_.includes(L)?L:_[0],q={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:Y,model:O};if(B)q.protocol=B;else delete q.protocol;if(H)q.client=H;else delete q.client;if(Z.apiKey!==void 0){let T=Z.apiKey?.trim()??"";if(T)q.apiKey=T;else delete q.apiKey}if(Z.headers!==void 0){let T=xD(Z.headers);if(T)q.headers=T;else delete q.headers}if(Z.timeoutMs!==void 0)if(typeof Z.timeoutMs==="number")q.timeout=Z.timeoutMs;else delete q.timeout;return $.saveProviderSettings(q,{setLastUsed:!1}),W.providers[Q]={provider:{name:j,baseUrl:Y,defaultModelId:O,protocol:B,client:H,capabilities:V,modelsSourceUrl:G},models:QX(_,V)},await h9(J,W),A8(Q,W.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:J,modelsCount:_.length}}async function cD($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let J=f$($),W=await L8(J);if(!W.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete W.providers[Q],await h9(J,W),x0.unregisterProvider(Q),vD($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:J}}function Wv($,Z,Q={}){let J=Z.trim();if(!J)throw Error("providerId is required");let W=$.read().providers[J]?.settings;return $.saveProviderSettings({...W??{},provider:J},{setLastUsed:!1,tokenSource:Q.tokenSource}),{providerId:J,enabled:!0,settingsPath:$.getFilePath()}}async function Xv($,Z={}){let Q=$.read(),J=x0.getProviderIds(),W=await Promise.all(J.map(async(j)=>{let[Y,V]=await Promise.all([x0.getProvider(j),x0.getModelsForProvider(j)]),B=ID(V),H=Q.providers[j]?.settings,K=$.getProviderSettings(j),G=Y?.name??hD(j),F=ag(Y?.capabilities,K?.capabilities),U=tg(Y?.metadata)??eg(Y);return{provider:{id:j,name:G,models:B.length,color:ig(j),letter:lg(G),enabled:Boolean(H),apiKey:K?dg(K):void 0,oauthAccessTokenPresent:K?pg(K):void 0,baseUrl:K?.baseUrl??Y?.baseUrl,defaultModelId:Y?.defaultModelId,protocol:K?.protocol??Y?.protocol,client:K?.client??Y?.client,capabilities:F,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:U,configValues:Qv(U,K,Y),modelList:B},rank:og(Y?.metadata)}}));W.sort((j,Y)=>{if(j.rank!==Y.rank)return j.rank-Y.rank;return j.provider.name.localeCompare(Y.provider.name)||j.provider.id.localeCompare(Y.provider.id)});let X=W.map((j)=>j.provider);if(Z.isClinePassEnabled!==!0)X=X.filter((j)=>j.id!==kD);return{providers:X,settingsPath:$.getFilePath()}}async function jv($,Z){let Q=$.trim(),J=await rg(Q,Z),W=ID(J);return{providerId:Q,models:W}}function TZ($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function uD($,Z){if(!TZ(Z))return TZ($)?{...$}:void 0;let Q=TZ($)?{...$}:{};for(let[J,W]of Object.entries(Z)){if(W==null||W===""){delete Q[J];continue}if(TZ(W)){let X=uD(Q[J],W);if(X&&Object.keys(X).length>0)Q[J]=X;else delete Q[J];continue}Q[J]=W}return Object.keys(Q).length>0?Q:void 0}function Yv($,Z){let Q=Z.providerId.trim();if(Z.enabled===!1){let X=$.read();if(delete X.providers[Q],X.lastUsedProvider===Q)delete X.lastUsedProvider;return $.write(X),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let W={...$.getProviderSettings(Q)??{},provider:Q};for(let X of["apiKey","baseUrl","model","region"])if(Object.hasOwn(Z,X)&&typeof Z[X]==="string")if(Z[X].trim().length===0)delete W[X];else W[X]=Z[X];for(let X of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(Z,X))W[X]=Z[X];for(let X of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(Z,X)&&Z[X]!=null){let j=uD(W[X],Z[X]);if(j)W[X]=j;else delete W[X]}return $.saveProviderSettings(W,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function Vv($,Z){let Q=Z.trim(),J=$.getProviderSettings(Q),X=x0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,j=J?.baseUrl?.trim()||X?.baseUrl?.trim(),Y=S4(j,X?.baseUrl,X?.modelsSourceUrl);if(!J||!X||!j||!Y)return{providerId:Q,refreshed:!1};let V=await mD($,{providerId:Q,name:X.name,baseUrl:j,apiKey:J.apiKey,headers:J.headers??null,timeoutMs:J.timeout??null,modelsSourceUrl:Y,protocol:J.protocol??X.protocol??null,client:J.client??X.client??null,capabilities:J.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:V.modelsCount}}function Bv($){let Z=$.trim().toLowerCase(),Q=z0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function Hv($,Z,Q,J){let W=z0($);if(!W)throw Error(`provider "${$}" does not support OAuth login`);let X=A4({onPrompt:async(j)=>j.defaultValue??"",openUrl:Q,onOpenUrlError:({error:j})=>{throw j instanceof Error?j:Error(String(j))}});return W.login({settings:Z,callbacks:X,telemetry:J})}function Kv($,Z,Q,J,W){return b8({manager:$,providerId:Z,settings:Q,credentials:J,setLastUsed:W?.setLastUsed})}async function Gv($,Z,Q,J){let W=A4({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return BQ($,Z,{callbacks:W,telemetry:J})}function Fv($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}import*as NZ from"@cline/llms";var Uv=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],Dv={"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 _v($,Z){let Q={};for(let J of Uv){let W=$[J],X=Z[J];if(W||X)Q[J]={...W,...X}}return Q}function Lv($){let Z=Dv[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:_v($.fields,Z.fields)}}var Av=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function Ov($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return Av.has($)}function qv($){let Z=NZ.normalizeProviderId($);if(w2(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=NZ.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:Z,authMethod:"local",fields:{}};let J=Q?.provider.baseUrl,W={apiKey:{}};if(Ov(Z,Q))W.baseUrl={defaultValue:J};return Lv({providerId:Z,authMethod:"api-key",fields:W})}BZ();q0();QZ();import{appendFileSync as zv,existsSync as JX,mkdirSync as Tv,readFileSync as Nv,renameSync as fv,unlinkSync as Rv,writeFileSync as Mv}from"node:fs";import{join as WX}from"node:path";import{resolveTeamDataDir as Ev}from"@cline/shared/storage";function Cv($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class dD{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=Cv($.teamName),Q=$.baseDir?.trim()||Ev();this.dirPath=WX(Q,Z),this.statePath=WX(this.dirPath,"state.json"),this.taskHistoryPath=WX(this.dirPath,"task-history.jsonl")}loadState(){if(!JX(this.statePath))return;try{let $=Nv(this.statePath,"utf8"),Z=JSON.parse($);if(Z.version!==1||!Z.teamState)return;for(let Q of Z.teammates??[])this.teammateSpecs.set(Q.agentId,Q);return iK(Z.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec($){this.teammateSpecs.set($.agentId,$)}removeTeammateSpec($){this.teammateSpecs.delete($)}persist($){if(!this.hasPersistableState($)){this.clearPersistedState();return}this.ensureDir();let Z={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Q=`${this.statePath}.tmp`;Mv(Q,`${JSON.stringify(Z,null,2)}
|
|
800
|
-
`,"utf8"),
|
|
801
|
-
`,"utf8")}ensureDir(){if(!JX(this.dirPath))Tv(this.dirPath,{recursive:!0})}hasPersistableState($){let Z=$.exportState();if(this.teammateSpecs.size>0)return!0;if(Z.members.some((Q)=>Q.role==="teammate"))return!0;return Z.tasks.length>0||Z.mailbox.length>0||Z.missionLog.length>0}clearPersistedState(){if(JX(this.statePath))Rv(this.statePath)}}import{z as b}from"zod";var pD=b.object({workspaceRoot:b.string().min(1),cwd:b.string().optional(),provider:b.string().min(1),model:b.string().min(1),mode:b.enum(["act","plan"]).default("act"),apiKey:b.string(),systemPrompt:b.string().optional(),rules:b.string().optional(),maxIterations:b.number().int().positive().optional(),enableTools:b.boolean(),enableSpawn:b.boolean().optional(),enableTeams:b.boolean().optional(),autoApproveTools:b.boolean().optional(),missionStepInterval:b.number().int().positive().optional(),missionTimeIntervalMs:b.number().int().positive().optional()}),lD=b.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),iD=b.enum(["user","assistant","tool","system","status","error"]),rD=b.object({id:b.string().min(1),mediaType:b.enum(["image/png","image/jpeg","image/gif","image/webp"]),data:b.string().min(1)}),nD=b.object({id:b.string().min(1),sessionId:b.string().nullable(),role:iD,content:b.string(),images:b.array(rD).optional(),createdAt:b.number().int().nonnegative(),meta:b.object({stream:b.enum(["stdout","stderr"]).optional(),toolName:b.string().optional(),iteration:b.number().int().nonnegative().optional(),agentId:b.string().optional(),conversationId:b.string().optional(),hookEventName:b.string().optional(),inputTokens:b.number().int().nonnegative().optional(),outputTokens:b.number().int().nonnegative().optional(),checkpoint:b.object({ref:b.string(),createdAt:b.number().int().nonnegative(),runCount:b.number().int().positive(),kind:b.enum(["stash","commit"]).optional()}).optional()}).optional()}),aD=b.object({toolCalls:b.number().int().nonnegative(),tokensIn:b.number().int().nonnegative(),tokensOut:b.number().int().nonnegative()}),wv=b.object({sessionId:b.string().nullable(),status:lD,config:pD,messages:b.array(nD),rawTranscript:b.string(),error:b.string().nullable(),summary:aD});var Pv=j8;import{Agent as I50,createAgentRuntime as x50}from"@cline/agents";import{getClineEnvironmentConfig as Sv}from"@cline/shared";var bv=5000,oD={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}],clinePass:[]};function yv($){return{recommended:$.recommended.map((Z)=>({...Z,tags:[...Z.tags]})),free:$.free.map((Z)=>({...Z,tags:[...Z.tags]})),clinePass:$.clinePass.map((Z)=>({...Z,tags:[...Z.tags]}))}}function XX($){if(!$||typeof $!=="object")return null;let Z=$;if(typeof Z.id!=="string"||Z.id.length===0)return null;return{id:Z.id,name:typeof Z.name==="string"&&Z.name.length>0?Z.name:Z.id,description:typeof Z.description==="string"?Z.description:"",tags:Array.isArray(Z.tags)?Z.tags.filter((Q)=>typeof Q==="string"):[]}}function kv($){if(!$||typeof $!=="object")return null;let Z=$,Q=Array.isArray(Z.recommended)?Z.recommended:[],J=Array.isArray(Z.free)?Z.free:[],W=Array.isArray(Z.clinePass)?Z.clinePass:[],X=Q.map(XX).filter((V)=>V!==null),j=J.map(XX).filter((V)=>V!==null),Y=W.map(XX).filter((V)=>V!==null);if(X.length===0&&j.length===0&&Y.length===0)return null;return{recommended:X,free:j,clinePass:Y}}function hv($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=Sv().apiBaseUrl;try{return($.providerSettingsManager??new R$).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function Iv($,Z,Q){let J=new AbortController,W=setTimeout(()=>J.abort(),Q);try{return await $(Z,{signal:J.signal})}finally{clearTimeout(W)}}async function xv($={}){try{let Z=hv($),Q=$.fetchImpl??fetch,J=await Iv(Q,`${Z}/api/v1/ai/cline/recommended-models`,$.timeoutMs??bv);if(!J.ok)throw Error(`HTTP ${J.status}`);let W=await J.json(),X=kv(W);if(X)return X}catch{}return yv(oD)}import{readFile as gv}from"node:fs/promises";import vv from"node:path";function mv($){return $}async function cv($){let Z=vv.resolve($),Q=await gv(Z,"utf8"),J;try{J=JSON.parse(Q)}catch(W){let X=W instanceof Error?W.message:String(W);throw Error(`Failed to parse JSON config at "${Z}": ${X}`)}return uv(J,Z)}function uv($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let J=$.providers;if(!Array.isArray(J))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!J.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}import{BUILT_IN_PROVIDER_IDS as eD,createHandler as lv,createHandlerAsync as iv,getProviderCollection as rv,hasProvider as $_,registerAsyncHandler as nv,registerHandler as av,registerModel as ov,registerProvider as Z_}from"@cline/llms";function sD($){return $?{...$}:{}}function dv($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function pv($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function tD($){let Z=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:Z,defaultModel:$.collection.provider.defaultModelId,modelCount:Z.length}}class jX{providers=new Map;register($){pv($.id,$.models);let Z=$.defaultModel??$.models[0];if(!Z)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(Z))throw Error(`Default model "${Z}" is not included in configured models for "${$.id}".`);let Q=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Q?.models??[],...$.models]),defaultModel:Z,defaults:{...Q?.defaults??{},...sD($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:dv($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...sD($.settings)}})}registerModel($,Z){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([Z]),defaultModel:Z,defaults:{}});return}Q.models.add(Z)}createHandlerConfig($){let Z=this.require($.providerId),Q=$.modelId??Z.defaultModel;if(!Z.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...Z.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,Z){return this.providers.get($)?.models.has(Z)??!1}require($){let Z=this.providers.get($);if(!Z)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return Z}}class YX{configuredProviders=new jX;constructor($){this.applyConfig($)}createHandler($){return lv(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return iv(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(Z_($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)av($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)nv($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let Z=$.exposeModels??Object.keys($.models),Q=$.defaultModel??Z[0];if(!Q)throw Error(`Provider "${$.id}" must define a default model.`);Z_({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Q,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:Z,defaultModel:Q,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){ov($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...eD]}async getBuiltInProviders(){return(await Promise.all(eD.map((Z)=>rv(Z)))).filter((Z)=>Z!==void 0).map((Z)=>tD({collection:Z}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,Z){return this.configuredProviders.hasModel($,Z)}applyConfig($){for(let Z of $.providers)this.configuredProviders.registerSelectionConfig(Z);for(let Z of $.models??[])this.registerModel(Z);for(let Z of $.customProviders??[])this.registerProvider(Z);for(let Z of this.configuredProviders.list()){let Q=$_(Z.id),J=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,W=typeof J==="string"&&$_(J);if(!Q&&!W)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function sv($){return new YX($)}QW();async function h60(){return Promise.resolve().then(() => (BZ(),sU))}export{PJ as writeModelsFileSync,SH as writeHubDiscovery,m0 as writeGlobalSettings,bH as withHubStartupLock,D$ as verifyHubConnection,C1 as updateMcpSettingsFileSync,g5 as updateMcpSettingsFile,x7 as updateMcpServerOAuthStateAsync,B6 as updateMcpServerOAuthState,mD as updateLocalProvider,dW as uninstallPlugin,DD as uninstallMarketplaceSkill,_D as uninstallMarketplacePlugin,FD as uninstallMarketplaceMcpServerFromSettings,Qg as uninstallMarketplaceEntry,YW as truncateNotificationBody,u8 as truncateCommandOutput,gJ as trimMessagesBeforeUserRun,TQ as toggleDisabledTool,L9 as toTeamProgressLifecycleEvent,N1 as toProviderConfig,WE as toHubStatusUrl,yH as toHubHealthUrl,TJ as toHookConfigFileName,_b as syncStoredProviderRegistration,kW as syncPluginMcpServersToSettings,f9 as summarizeUsageFromMessages,T40 as stripUtf8Bom,GC as stopLocalHubServerGracefully,T1 as startLocalOAuthServer,CW as startHubWebSocketServer,s20 as startHubServer,m_ as startClineDeviceAuth,l7 as splitCoreSessionConfig,W9 as spawnDetachedHubServerWithRetry,dE as spawnDetachedHubServer,gA as setToolAutoApproveGlobally,CA as setTelemetryOptOutGlobally,B_ as setSdkLogger,IA as setPlanActModeGlobally,Y6 as setMcpServerDisabled,_j as setDisabledTools,cA as setDisabledPlugin,bA as setCompactionStrategyGlobally,kA as setCompactionModeGlobally,PA as setAutoUpdateEnabledGlobally,C10 as sendHubCommand,s as sdkDebug,b8 as saveProviderOAuthCredentials,Yv as saveLocalProviderSettings,Kv as saveLocalProviderOAuthCredentials,E6 as sanitizeSessionToken,Yj as safeParseSettings,WA as safeCreateProviderConfig,U2 as runSubprocessEvent,a9 as runHook,hV as reviveTeamStateDates,oH as restartLocalHubIfIdleAfterStartupTimeout,br as resolveWorkspaceHubOwnerContext,Z7 as resolveWorkflowsConfigSearchPaths,eQ as resolveSkillsConfigSearchPaths,S1 as resolveSharedHubOwnerContext,ny as resolveSessionBackend,$7 as resolveRulesConfigSearchPaths,_Q as resolveProviderConfig,TL as resolveProviderApiKeyFromSettings,U$ as resolveProductionHubOwnerContext,v$ as resolvePluginSkillDirectoriesFromPaths,mQ as resolvePluginConfigSearchPaths,f$ as resolveModelsRegistryPath,Jw as resolveMessageDisplayRole,G1 as resolveMcpServerRegistrations,iW as resolveMarketplaceMcpServerName,Fv as resolveLocalClineAuthToken,sk as resolveHubUrl,J2 as resolveHubOwnerContext,F$ as resolveHubEndpointOptions,PH as resolveHubBuildId,qJ as resolveHooksConfigSearchPaths,f1 as resolveDisabledToolNames,d4 as resolveDisabledPluginPaths,j0 as resolveDefaultMcpSettingsPath,Q9 as resolveDefaultHubPort,DE as resolveDefaultHubPathname,UE as resolveDefaultHubHost,vV as resolveCoreSelectedToolIds,t0 as resolveCoreDistinctId,m6 as resolveCoreDeviceId,b3 as resolveCompatibleLocalHubUrl,Tr as resolveClineDir,k6 as resolveClineDataDir,s4 as resolveAndLoadAgentPlugins,g$ as resolveAgentPluginPaths,E3 as requestHubShutdown,pI as requestDesktopToolApproval,hW as removePluginMcpServersFromSettings,oI as removePersistedConnectorConnection,Y8 as rememberRecoverableLocalHubUrl,$D as registerRemoteConfigSessionBlobUpload,H6 as registerMcpServersFromSettingsFile,q40 as registerDisposable,Vv as refreshProviderModelsFromSource,PX as refreshOpenAICodexToken,gX as refreshOcaToken,CX as refreshClineToken,sI as reconnectPersistedConnectors,xA as readToolAutoApproveGlobally,Q4 as readSessionCheckpointHistory,kI as readRemoteConfigSessionBlobUploadMetadata,hA as readPlanActModeGlobally,k9 as readModelsFileSync,R0 as readHubDiscovery,X0 as readGlobalSettings,SA as readCompactionStrategyGlobally,yA as readCompactionModeGlobally,iU as readBearerToken,B8 as projectSessionCompactionState,W2 as probeHubServer,E10 as probeHubConnection,IY as prewarmFileIndex,mH as prewarmDetachedHubServer,xI as prepareRemoteConfigCoreIntegration,rI as persistConnectorConnection,tQ as parseWorkflowConfigFromMarkdown,O40 as parseUserCommandEnvelope,oQ as parseSkillConfigFromMarkdown,jj as parseSettings,y1 as parseSessionCompactionState,sQ as parseRuleConfigFromMarkdown,CD as parsePluginSource,PW as parseMcpInstallArgs,n9 as parseHookEventPayload,u3 as parseConfiguredAgentConfig,V$ as normalizeWorkspacePath,A40 as normalizeUserInput,L40 as normalizeSdkError,h0 as normalizeRuntimeCapabilities,g4 as normalizeProviderId,Bv as normalizeOAuthProvider,V8 as normalizeHubWebSocketUrl,_40 as noopBasicLogger,kJ as migrateLegacyProviderSettings,W5 as mergeRulesForSystemPrompt,t6 as mergeAgentHooks,$g as marketplaceEntryKey,Wv as markLocalProviderEnabled,G3 as makeTeamTaskSubSessionId,s5 as makeSubSessionId,$Q as loginOpenAICodex,jQ as loginOcaOAuth,Hv as loginLocalProvider,sZ as loginClineOAuth,BQ as loginAndSaveProviderOAuthCredentials,Gv as loginAndSaveLocalProviderOAuthCredentials,h60 as loadOpenTelemetryAdapter,j6 as loadMcpSettingsFile,cv as loadLlmsConfigFromFile,F9 as loadConfiguredAgentConfigs,x8 as loadAgentPluginsFromPathsWithDiagnostics,Sj as loadAgentPluginsFromPaths,bQ as loadAgentPluginFromPath,dM as listSessionHistoryFromBackend,wB as listPluginToolsWithDiagnostics,d7 as listPluginTools,g7 as listMcpServerOAuthStatuses,Xv as listLocalProviders,D8 as listHookConfigFiles,FW as listActiveConnectors,Ww as isUserRunMessage,vA as isToolDisabledGlobally,zQ as isTelemetryOptedOutGlobally,t$ as isSessionNotFoundError,tj as isRuleEnabled,mA as isPluginDisabledGlobally,ED as isOfficialPluginSlug,w2 as isOAuthProvider,UD as isMarketplaceSkillInstalled,EI as isLocalHubOrigin,rU as isLocalHubHostName,XC as isHubReconnectableTransportError,nH as isHubCommandTimeoutError,Rr as isDiscoveryFilePresent,Q40 as isClinePassLimitMessage,Z40 as isClinePassLimitError,$40 as isClineOrgIndividualInferenceSubscriptionMessage,e60 as isClineOrgIndividualInferenceSubscriptionError,t60 as isClineNotSubscribedMessage,s60 as isClineNotSubscribedError,o60 as isClineModelNotFoundMessage,a60 as isClineFreeModelLimitMessage,n60 as isClineFreeModelLimitError,GX as isClineAccountActionRequest,ZA as isBuiltInProviderId,wA as isAutoUpdateEnabledGlobally,ug as installPlugin,Wx as installMcpServer,s1 as identifyAccount,y0 as hashSecret,a$ as hasMcpSettingsFile,ZQ as getValidOpenAICodexCredentials,YQ as getValidOcaCredentials,tZ as getValidClineCredentials,q$ as getUserRunSpan,HQ as getProviderOAuthCredentialsFromSettings,qv as getProviderConfigFields,aX as getProviderConfig,zL as getProviderAuthStorageId,z0 as getProviderAuthHandler,w4 as getPersistedProviderApiKey,aI as getPersistedConnectorConnection,V6 as getMcpServerOAuthState,rW as getMarketplaceSkillCandidates,jv as getLocalProviderModels,x4 as getLiveModelsCatalog,nW as getGlobalMarketplaceSkillPaths,p$ as getFileIndex,JS as getCurrentContextSize,w7 as getCoreHeadlessToolNames,gV as getCoreDefaultEnabledToolIds,Q6 as getCoreBuiltinToolCatalog,mV as getCoreAcpToolNames,r60 as getClinePassSubscriptionUrl,i60 as getClineOrgIndividualInferenceSubscriptionMessage,l60 as getClineNotSubscribedMessage,W40 as getClineDefaultSystemPrompt,s7 as generateWorkspaceInfoWithDiagnostics,r5 as generateWorkspaceInfo,J5 as formatRulesForSystemPrompt,NL as formatProviderOAuthApiKey,D40 as formatDisplayUserInput,aW as findInstalledGlobalMarketplaceSkillName,v9 as findCheckpointForRun,fQ as filterExtensionToolRegistrations,e1 as filterDisabledTools,NQ as filterDisabledPluginPaths,xv as fetchClineRecommendedModels,p60 as extractClinePassLimitMessage,d60 as extractClineFreeModelLimitResetTime,FX as executeClineAccountAction,nU as ensureHubWebSocketServer,t20 as ensureHubServer,dr as ensureDetachedHubServer,SJ as ensureCustomProvidersLoadedSync,tG as ensureCustomProvidersLoaded,I6 as ensureCompatibleLocalHubUrl,T5 as enrichPromptWithMentions,G40 as emptyWorkspaceManifest,_8 as emptyStoredProviderSettings,cQ as discoverPluginModulePaths,Fx as disablePluginMcpServersInSettings,nI as disableConnectorAutostart,F3 as deriveSubsessionStatus,cD as deleteLocalProvider,mv as defineLlmsConfig,W7 as createWorkflowsConfigDefinition,s2 as createUserInstructionConfigService,cY as createToolPoliciesWithPreset,K40 as createTool,DF as createTeamName,xF as createSubprocessHooks,o2 as createSpawnAgentTool,Q7 as createSkillsConfigDefinition,V7 as createShellTool,d8 as createShellExecutor,i9 as createSessionHost,V9 as createSessionCompactionState,i9 as createRuntimeHost,J7 as createRulesConfigDefinition,xJ as createRestoredCheckpointMetadata,II as createRemoteConfigSessionMessagesArtifactUploader,JA as createProviderConfig,$Z as createOpenTelemetryTelemetryService,A4 as createOAuthClientCallbacks,p5 as createMcpTools,m10 as createLocalHubScheduleRuntimeHandlers,sv as createLlmsSdk,P0 as createInitialAccumulatedUsage,fr as createInMemoryHubOwnerContext,P1 as createHubServerUrl,wH as createHubAuthToken,MJ as createHookConfigFileHooks,w9 as createHookConfigFileExtension,C9 as createHookAuditHooks,i8 as createEditorExecutor,u7 as createDisabledMcpToolPolicy,MB as createDisabledMcpToolPolicies,n2 as createDelegatedAgentConfigProvider,a2 as createDelegatedAgent,uY as createDefaultToolsWithPreset,d2 as createDefaultTools,F7 as createDefaultShellExecutor,u5 as createDefaultMcpServerClientFactory,M5 as createDefaultExecutors,_6 as createCoreSettingsService,_$ as createCoreSessionSnapshot,H40 as createContributionRegistry,_J as createContextCompactionPrepareTurn,O2 as createConfiguredTelemetryService,ZZ as createConfiguredTelemetryHandle,D9 as createConfiguredAgentTools,LJ as createCompactionStateAwarePrepareTurn,B40 as createClineTelemetryServiceMetadata,V40 as createClineTelemetryServiceConfig,SF as createCheckpointComparePlan,J6 as createBuiltinTools,l8 as createApplyPatchExecutor,Z6 as createAgentTeamsTools,x50 as createAgentRuntime,R9 as createAgentHooksExtension,K8 as countUserRunMessages,pF as connectToHub,A5 as computePatchChanges,c_ as completeClineDeviceAuth,eJ as compareCheckpointToWorkspace,bD as collectPluginMcpOAuthCandidates,sL as clearPrivateModelsCatalogCache,oL as clearLiveModelsCatalogCache,j1 as clearHubDiscovery,T_ as captureWorkspacePathResolved,CZ as captureWorkspaceInitialized,wZ as captureWorkspaceInitError,w8 as captureToolUsage,yZ as captureTokenUsage,bZ as captureTaskRestarted,SZ as captureTaskCreated,q4 as captureTaskCompleted,T4 as captureSubagentExecution,hZ as captureSkillUsed,Y40 as captureSdkError,N_ as captureProviderConfigured,z4 as captureProviderApiError,kZ as captureModeSwitch,xZ as captureMistakeLimitReached,gZ as captureMentionUsed,mZ as captureMentionSearchResults,vZ as captureMentionFailed,uZ as captureHookDiscovery,z_ as captureExtensionActivated,IZ as captureDiffEditFailure,C8 as captureConversationTurnEvent,pZ as captureCompactionSkipped,dZ as captureCompactionExecuted,a1 as captureAuthSucceeded,n1 as captureAuthStarted,y$ as captureAuthLoggedOut,o1 as captureAuthFailed,K_ as captureAgentUnexpectedReasoningTokens,cZ as captureAgentTeamCreated,k$ as captureAgentCreated,t7 as buildWorkspaceMetadata,_9 as buildTeamProgressSummary,X40 as buildSdkErrorProperties,tU as buildRemoteConfigSessionBlobUploadMetadata,JD as buildMcpInstallTransport,e8 as buildDelegatedAgentConfig,KT as buildConnectionUpdate,p3 as buildConfiguredAgentToolName,l3 as buildConfiguredAgentToolDescriptors,bF as buildCheckpointWorkspaceDiff,k5 as bootstrapAgentTeams,GB as authorizeMcpServerOAuth,o$ as augmentMcpTimeoutError,Jv as addLocalProvider,M0 as accumulateUsageTotals,iQ as WORKFLOWS_CONFIG_DIRECTORY_NAME,k8 as UnifiedConfigFileWatcher,K1 as ToolPresets,G4 as TelemetryService,e9 as TelemetryLoggerSink,y5 as TEAM_TOOL_NAMES,l4 as SubprocessSandbox,c8 as StructuredCommandInputSchema,P9 as StoredProviderSettingsSchema,kG as StoredProviderSettingsEntrySchema,J4 as SqliteTeamStore,O$ as SqliteSessionStore,O8 as SessionVersioningService,e0 as SessionVersioningError,T0 as SessionSource,s$ as SessionNotFoundError,Jj as SapSettingsSchema,lQ as SKILLS_CONFIG_DIRECTORY_NAME,OQ as SESSION_STATUSES,L6 as SESSION_NOT_FOUND_ERROR_CODE,z40 as SDK_ERROR_TELEMETRY_EVENT,p9 as RuntimeOAuthTokenManager,EZ as RpcClineAccountService,B9 as RemoteRuntimeHost,eX as ReasoningSettingsSchema,lj as RULES_CONFIG_DIRECTORY_NAME,eU as REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY,P2 as ProviderSettingsSchema,R$ as ProviderSettingsManager,oX as ProviderProtocolSchema,AQ as ProviderIdSchema,sX as ProviderClientSchema,p8 as PatchActionType,d as PATCH_MARKERS,F4 as OpenTelemetryProvider,Wj as OcaSettingsSchema,DQ as OPENAI_COMPATIBLE_PROVIDERS,W4 as OAuthReauthRequiredError,b1 as NodeHubClient,B4 as NoOpFeatureFlagsProvider,NW as NativeHubTransportAdapter,Xj as ModelCatalogSettingsSchema,I5 as McpSettingsUpdateSkippedError,t2 as McpSettingsMutatorPurityError,e2 as McpSettingsLockTimeoutError,u$ as MAX_COMMAND_OUTPUT_CHARS,E$ as LocalRuntimeHost,x60 as Llms,S9 as InMemoryWorkspaceManager,G6 as InMemoryMcpManager,Qh as HubUIClient,s0 as HubTransportError,Zh as HubSessionClient,VZ as HubServerTransport,t9 as HubScheduleService,o9 as HubScheduleCommandService,B2 as HubRuntimeHost,X9 as HubCommandError,hF as HookEventPayloadSchema,kF as HookEventNameSchema,M9 as HookConfigFileName,zJ as HOOK_CONFIG_FILE_EVENT_MAP,EG as HOOKS_CONFIG_DIRECTORY_NAME,u4 as GlobalSettingsSchema,Zj as GcpSettingsSchema,dD as FileTeamPersistenceStore,V4 as FeatureFlagsService,U40 as FeatureFlagDefaultValue,F40 as FEATURE_FLAGS,oD as FALLBACK_CLINE_RECOMMENDED_MODELS,N0 as DefaultToolNames,d9 as DefaultRuntimeBuilder,YX as DefaultLlmsSdk,iX as DEFAULT_MODELS_CATALOG_URL,GE as DEFAULT_HUB_PORT,FE as DEFAULT_HUB_PATHNAME,KE as DEFAULT_HUB_HOST,W8 as CoreSettingsService,z$ as CoreSessionService,j40 as ContributionRegistry,d$ as CommandExitError,u60 as ClinePassLimitError,c60 as ClineOrgIndividualInferenceSubscriptionError,m60 as ClineNotSubscribedError,v60 as ClineFreeModelLimitError,$W as ClineCore,MZ as ClineAccountService,wv as ChatViewStateSchema,aD as ChatSummarySchema,lD as ChatSessionStatusSchema,pD as ChatSessionConfigSchema,nD as ChatMessageSchema,iD as ChatMessageRoleSchema,rD as ChatMessageImageSchema,x as CORE_TELEMETRY_EVENTS,Pv as CORE_BUILD_VERSION,TW as BrowserWebSocketHubAdapter,$A as BUILT_IN_PROVIDER_IDS,LQ as BUILT_IN_PROVIDER,Qj as AzureSettingsSchema,$j as AwsSettingsSchema,tX as AuthSettingsSchema,d6 as AgentTeamsRuntime,r3 as AgentTeam,I50 as Agent,x2 as ALL_DEFAULT_TOOL_NAMES};
|
|
796
|
+
${V}`:""}`);let B=Qg($);if(DD($))throw Error(`Skill uninstall completed, but ${$.name??$.id} is still present in Cline's global skills directories.`);return{id:$.id,type:"skill",status:"uninstalled",message:`Uninstalled ${$.name??$.id}.`,output:[V,...B.map((H)=>`Removed: ${H}`)].filter(Boolean).join(`
|
|
797
|
+
`)||void 0}}async function LD($,Z={}){let[Q]=lW($),J=Q?.trim()||$.id;if(!J)throw Error("Plugin marketplace uninstalls require a plugin name.");let W=await dW({name:J,workspaceRoot:Z.workspaceRoot});return{id:$.id,type:"plugin",status:"uninstalled",message:`Uninstalled ${$.name??W.name??$.id}.`,output:[`Path: ${W.installPath}`,...W.removedPaths.map((X)=>`Removed: ${X}`)].join(`
|
|
798
|
+
`)}}async function Jg($,Z={}){if($.type==="mcp"){let Q=iW($);if(Z.deleteMcpServer)await Z.deleteMcpServer(Q);else UD($,Z);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Q??$.id}.`}}if($.type==="skill")return _D($,Z);if($.type==="plugin")return LD($,Z);throw Error(`Unsupported marketplace entry type: ${$.type}`)}import{spawn as Wg}from"node:child_process";import{createHash as Xg}from"node:crypto";import{existsSync as O1,mkdirSync as tW,readdirSync as jg,readFileSync as Yg,renameSync as UZ,rmSync as LZ,statSync as eW}from"node:fs";import{cp as sW,mkdir as RD,writeFile as AZ}from"node:fs/promises";import{homedir as AD}from"node:os";import{basename as u1,dirname as OD,extname as Vg,join as a,relative as MD,resolve as P$,sep as Bg}from"node:path";import{isPluginModulePath as _Z,resolveClineDir as Hg,resolvePluginModuleEntries as Kg}from"@cline/shared/storage";var E8="_installed",OZ="package",Gg="https://github.com/cline/plugins.git",qD=30000,DZ=10485760,zD="@cline/",Fg=["dependencies","devDependencies","optionalDependencies","peerDependencies"],Ug={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function qZ($){if($==="~")return AD();if($.startsWith("~/"))return a(AD(),$.slice(2));return $}function ED($){return $.split(Bg).join("/")}function N2($){return Xg("sha256").update($).digest("hex").slice(0,12)}function Dg($){let Z=0;while(Z<$.length&&$[Z]==="-")Z++;let Q=$.length;while(Q>Z&&$[Q-1]==="-")Q--;return $.slice(Z,Q)}function c1($){let Z="",Q=!1,J=$.startsWith("@")?$.slice(1):$;for(let X of J.slice(0,256)){if(X>="a"&&X<="z"||X>="A"&&X<="Z"||X>="0"&&X<="9"||X==="."||X==="_"||X==="-")Z+=X,Q=X==="-";else if(!Q)Z+="-",Q=!0;if(Z.length>=80)break}return Dg(Z)||"plugin"}function CD($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function _g($){return $?.trim()||Gg}function TD($){let Q=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Q?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Q[1]}}function Lg($){if($.startsWith(".")||$.startsWith("/")||$==="~"||$.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test($))return!1;let[Z,...Q]=$.split("/");return!!Z&&Q.length>=2&&Z.includes(".")&&!Z.startsWith(".")&&!Z.endsWith(".")}function Ag($){let Z=$.match(/^git@([^:]+):(.+)$/);if(Z){let j=Z[2]??"",Y=j.indexOf("@");if(Y<0)return{repo:$};return{repo:`git@${Z[1]}:${j.slice(0,Y)}`,ref:j.slice(Y+1)||void 0}}if($.includes("://"))try{let j=new URL($),Y=j.pathname.replace(/^\/+/,""),V=Y.indexOf("@");if(V<0)return{repo:$};return j.pathname=`/${Y.slice(0,V)}`,{repo:j.toString().replace(/\/$/,""),ref:Y.slice(V+1)||void 0}}catch{return{repo:$}}let Q=$.indexOf("/");if(Q<0)return{repo:$};let J=$.slice(0,Q),W=$.slice(Q+1),X=W.indexOf("@");if(X<0)return{repo:$};return{repo:`${J}/${W.slice(0,X)}`,ref:W.slice(X+1)||void 0}}function Og($){try{return decodeURIComponent($)}catch{return $}}function qg($){return u1(Og($))||"plugin"}function zg($){let Z=$.split("/").filter(Boolean);return Z.length>=5&&(Z[2]==="blob"||Z[2]==="raw")}function ND($){if(!/^https?:\/\//i.test($))return null;let Z;try{Z=new URL($)}catch{return null}let Q=Z.hostname.toLowerCase(),J=qg(Z.pathname),W=_Z(J),X=(Q==="github.com"||Q==="www.github.com")&&zg(Z.pathname);if(Z.protocol!=="https:"){if(X||Q==="raw.githubusercontent.com"||W)throw Error(`Remote plugin file URLs must use https: ${$}`);return null}if(Q==="github.com"||Q==="www.github.com"){let j=Z.pathname.split("/").filter(Boolean);if(!X)return null;if(!W)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:`https://raw.githubusercontent.com/${[j[0],j[1],...j.slice(3)].join("/")}`,filename:J}}if(Q==="raw.githubusercontent.com"){if(!W)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:Z.toString(),filename:J}}if(!W)return null;return{type:"remote",url:Z.toString(),filename:J}}function fD($,Z={}){let Q=$.trim(),J=Q.startsWith("git:")&&!Q.startsWith("git://"),W=J?Q.slice(4).trim():Q;if(!Z.force&&!J&&!/^(https?|ssh|git):\/\//i.test(W))return null;let{repo:X,ref:j}=Ag(W),Y="",V="";if(X.startsWith("git@")){let K=X.match(/^git@([^:]+):(.+)$/);Y=K?.[1]??"",V=K?.[2]??""}else if(/^(https?|ssh|git):\/\//i.test(X)){let K=new URL(X);Y=K.hostname,V=K.pathname.replace(/^\/+/,"")}else{let K=X.indexOf("/");if(K<0)return null;Y=X.slice(0,K),V=X.slice(K+1)}let B=V.replace(/\.git$/,"").replace(/^\/+/,"");if(!Y||!B||B.split("/").length<2)return null;return{type:"git",repo:X.startsWith("git@")||/^(https?|ssh|git):\/\//i.test(X)?X:`https://${X}`,ref:j,host:Y,path:B}}function wD($,Z){let Q=$.trim();if(!Q)throw Error("plugin install requires a source");if(Z==="npm"){let j=Q.startsWith("npm:")?Q.slice(4).trim():Q,{name:Y}=TD(j);return{type:"npm",spec:j,name:Y}}if(Z==="git"){let j=fD(Q,{force:!0});if(!j)throw Error(`Invalid git plugin source: ${$}`);return j}if(Z==="local")return{type:"local",path:$};if(Z==="remote"){let j=ND(Q);if(!j)throw Error(`Invalid remote plugin source: ${$}`);return j}if(Q.startsWith("npm:")){let j=Q.slice(4).trim(),{name:Y}=TD(j);return{type:"npm",spec:j,name:Y}}if(Q.startsWith(".")||Q.startsWith("/")||Q==="~"||Q.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test(Q))return{type:"local",path:$};let W=ND(Q);if(W)return W;let X=fD(Q);if(X)return X;if(CD(Q))return{type:"official",slug:Q};if(Lg(Q))throw Error(`Unrecognized plugin source "${$}". Use --git for hostname-style repositories or pass an explicit local path such as ./github.com/owner/repo.`);return{type:"local",path:$}}function Tg($){return $?a($,".cline","plugins"):a(Hg(),"plugins")}function Ng($,Z,Q){if(Z.type==="npm")return a($,E8,"npm",`${c1(Z.name)}-${N2(Q)}`);if(Z.type==="git")return a($,E8,"git",c1(Z.host),`${c1(Z.path)}-${N2(Q)}`);if(Z.type==="remote")return a($,E8,"remote",`${c1(Z.filename)}-${N2(Q)}`);if(Z.type==="official")return a($,E8,"official",`${c1(Z.slug)}-${N2(Q)}`);return a($,E8,"local",`${c1(u1(qZ(Z.path)))}-${N2(Q)}`)}function fg($,Z,Q){if($.type==="npm")return`npm:${$.spec}`;if($.type==="git")return`git:${$.repo}${$.ref?`#${$.ref}`:""}`;if($.type==="remote")return`remote:${$.url}`;if($.type==="official")return`official:${Q}#plugins/${$.slug}`;return`local:${P$(Z,qZ($.path))}`}function Rg($,Z){if($.type==="npm")return $.name;if($.type==="git")return c1(u1($.path));if($.type==="remote")return c1(u1($.filename,Vg($.filename)));if($.type==="official")return $.slug;return c1(u1(P$(Z,qZ($.path))))}async function C8($,Z,Q={}){await new Promise((J,W)=>{let X=Wg($,Z,{cwd:Q.cwd,stdio:["ignore","ignore","pipe"],env:process.env,windowsHide:!0}),j="";X.stderr.on("data",(Y)=>{j+=String(Y)}),X.on("error",W),X.on("close",(Y)=>{if(Y===0){J();return}let V=j.trim();W(Error(`${$} ${Z.join(" ")} failed with exit code ${Y}${V?`: ${V}`:""}`))})})}function PD($){let Z=a($,"package.json");if(!O1(Z))return null;try{return JSON.parse(Yg(Z,"utf8"))}catch{return null}}function Mg($){let Z=$?.cline?.plugins;if(!Array.isArray(Z))return[];return Z.flatMap((Q)=>{if(typeof Q==="string")return[Q];return Q.paths??[]})}async function Eg($){let Z=a($,"package.json"),Q=PD($);if(!Q)return;let J=!1;for(let W of Fg){let X=Q[W];if(!X||typeof X!=="object")continue;for(let j of Object.keys(X)){if(!j.startsWith(zD))continue;delete X[j],delete Q.peerDependenciesMeta?.[j],J=!0}if(Object.keys(X).length===0)delete Q[W]}if(Q.peerDependenciesMeta){for(let W of Object.keys(Q.peerDependenciesMeta)){if(!W.startsWith(zD))continue;delete Q.peerDependenciesMeta[W],J=!0}if(Object.keys(Q.peerDependenciesMeta).length===0)delete Q.peerDependenciesMeta}if(!J)return;await AZ(Z,`${JSON.stringify(Q,null,2)}
|
|
799
|
+
`,"utf8")}function Cg($,Z){let Q=a($,"node_modules","@cline");if(!O1(Q))return;for(let J of bD(Q)){if(`@cline/${J.name}`===Z)continue;LZ(a(Q,J.name),{recursive:!0,force:!0})}}function SD($){let Z=Mg(PD($)).map((X)=>P$($,X)).filter((X)=>O1(X)&&eW(X).isFile()&&_Z(X));if(Z.length>0)return Z;let Q=Kg($);if(Q?.length)return Q;let J=[],W=[$];while(W.length>0){let X=W.pop();if(!X)continue;for(let j of bD(X)){let Y=a(X,j.name);if(j.name==="node_modules"||j.name===".git")continue;if(j.isDirectory()){W.push(Y);continue}if(j.isFile()&&!j.name.startsWith(".")&&_Z(Y))J.push(Y)}}return J.sort((X,j)=>X.localeCompare(j))}function bD($){try{return jg($,{withFileTypes:!0})}catch{return[]}}function wg($,Z){let Q=SD(Z);if(Q.length===0)throw Error(`No plugin entry files found in ${Z}`);return Q.map((J)=>`./${ED(MD($,J))}`)}async function Pg($,Z,Q){let J=wg($,Z);return await AZ(a($,"package.json"),JSON.stringify({...Ug,name:Q,cline:{plugins:[{paths:J}]}},null,2),"utf8"),J}async function Sg($,Z,Q){let J=a(Z,OZ);return await RD(J,{recursive:!0}),await AZ(a(J,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await C8(Q,["install",$.spec,"--prefix",J,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),Cg(J,$.name),a(J,"node_modules",$.name)}async function $X($,Z){if(!O1(a($,"package.json")))return;await Eg($),await C8(Z,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function bg($,Z,Q){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let J=a(Z,OZ),W=["clone","--filter=blob:none"];if($.ref)W.push("--branch",$.ref);W.push("--",$.repo,J);try{await C8("git",W)}catch(X){if(!$.ref)throw X;await C8("git",["clone","--filter=blob:none","--",$.repo,J]),await C8("git",["checkout","--detach",$.ref],{cwd:J})}return await $X(J,Q),J}async function yg($,Z,Q,J){let W=a(Z,"repo");await C8("git",["clone","--filter=blob:none","--depth","1","--",J,W]);let X=a(W,"plugins",$.slug);if(!O1(X)||!eW(X).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${J}`);let j=a(Z,OZ);return await sW(X,j,{recursive:!0,filter:(Y)=>{let V=u1(Y);return V!==".git"&&V!=="node_modules"}}),LZ(W,{recursive:!0,force:!0}),await $X(j,Q),j}function oW($){return Error(`Remote plugin file from ${$} exceeds the ${DZ} byte limit`)}function kg($){let Z=$.headers.get("content-length");if(!Z)return;let Q=Number(Z);if(!Number.isFinite(Q)||Q<0)return;return Q}async function hg($,Z){let Q=kg($);if(Q!==void 0&&Q>DZ)throw oW(Z);if(!$.body){let j=Buffer.from(await $.text(),"utf8");if(j.byteLength>DZ)throw oW(Z);return j}let J=$.body.getReader(),W=[],X=0;try{while(!0){let{done:j,value:Y}=await J.read();if(j)break;let V=Buffer.from(Y);if(X+=V.byteLength,X>DZ)throw await J.cancel().catch(()=>{return}),oW(Z);W.push(V)}return Buffer.concat(W,X)}finally{J.releaseLock()}}async function Ig($,Z){let Q=new AbortController,J=setTimeout(()=>{Q.abort()},qD);try{let W=await fetch($.url,{signal:Q.signal});if(!W.ok){let j=W.statusText?` ${W.statusText}`:"";throw Error(`Failed to download plugin file from ${$.url}: ${W.status}${j}`)}let X=await hg(W,$.url);return tW(Z,{recursive:!0}),await AZ(a(Z,$.filename),X),Z}catch(W){if(W instanceof Error&&W.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${qD}ms`);throw W}finally{clearTimeout(J)}}async function xg($,Z,Q,J){let W=P$(Q,qZ($.path));if(!O1(W))throw Error(`Plugin source path does not exist: ${W}`);let X=eW(W);if(X.isFile()){if(!_Z(W))throw Error(`Plugin file must be .js or .ts: ${W}`);tW(Z,{recursive:!0});let Y=a(Z,u1(W));return await sW(W,Y),Z}if(!X.isDirectory())throw Error(`Plugin source must be a file or directory: ${W}`);let j=a(Z,OZ);return await sW(W,j,{recursive:!0,filter:(Y)=>{let V=u1(Y);return V!==".git"&&V!=="node_modules"}}),await $X(j,J),j}function gg($,Z){if(O1($)&&!Z)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function vg($,Z,Q){if(tW(OD(Z),{recursive:!0}),!O1(Z)){UZ($,Z);return}if(!Q)throw Error(`Plugin is already installed at ${Z}. Use --force to replace it.`);let J=a(OD(Z),`.replace-${u1(Z)}-${Date.now()}-${process.pid}-${N2(`${Z}:${Math.random()}`)}`);UZ(Z,J);try{UZ($,Z)}catch(W){if(!O1(Z)&&O1(J))UZ(J,Z);throw W}try{LZ(J,{recursive:!0,force:!0})}catch{}}function mg($){let Z=$.transport;if(Z.type==="stdio")return!1;return Z.headers!==void 0&&Object.keys(Z.headers).length>0}function cg($){let Z=$.oauth?.tokens?.access_token;return typeof Z==="string"&&Z.trim().length>0}function ug($){let Z=$.metadata;if(!Z||Z.source!=="plugin"||typeof Z.pluginName!=="string"||typeof Z.pluginPath!=="string")return;return{pluginName:Z.pluginName,pluginPath:Z.pluginPath}}function yD($){let Z=new Set($.pluginPaths.map((W)=>P$(W)));if(Z.size===0)return[];let Q;try{Q=G1({filePath:$.settingsPath??j0()})}catch{return[]}let J=[];for(let W of Q){let X=ug(W);if(!X||!Z.has(P$(X.pluginPath)))continue;let j=W.transport.type;if(j==="stdio")continue;if(mg(W)||cg(W))continue;J.push({name:W.name,pluginName:X.pluginName,pluginPath:X.pluginPath,transportType:j,lastError:W.oauth?.lastError})}return J.sort((W,X)=>W.name.localeCompare(X.name))}async function dg($){let Z=$.source.trim(),Q=wD(Z,$.sourceType),J=$.cwd?.trim(),W=J?P$(J):process.cwd(),X=Tg(J?W:void 0),j=_g($.officialPluginsRepo),Y=fg(Q,W,j),V=Ng(X,Q,Y),B=Rg(Q,W),H=a(X,E8,".tmp"),K=a(H,`${Date.now()}-${process.pid}-${N2(`${Z}:${Math.random()}`)}`),G=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;gg(V,F),await RD(H,{recursive:!0});let U;try{if(Q.type==="npm")U=await Sg(Q,K,G);else if(Q.type==="git")U=await bg(Q,K,G);else if(Q.type==="official")U=await yg(Q,K,G,j);else if(Q.type==="remote")U=await Ig(Q,K);else U=await xg(Q,K,W,G);let _=(Q.type==="local"||Q.type==="remote")&&U===K?SD(K).map((D)=>`./${ED(MD(K,D))}`):await Pg(K,U,B);if(_.length===0)throw Error(`No plugin entry files found for ${Z}`);vg(K,V,F);let L={source:Z,installPath:V,entryPaths:_.map((D)=>P$(V,D)),mcpSyncFailures:[],mcpOAuthCandidates:[]},O=await kW({pluginPaths:L.entryPaths,cwd:W,workspacePath:W});return L.mcpSyncFailures=O.failures,L.mcpOAuthCandidates=yD({pluginPaths:L.entryPaths}),L}catch(_){throw LZ(K,{recursive:!0,force:!0}),_}}import*as x0 from"@cline/llms";var hD="cline-pass";function pg($){return $.apiKey??$.auth?.apiKey}function lg($){return($.auth?.accessToken?.trim()??"").length>0}function ID($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function ig($){let Z=$.split(/\s+/).filter(Boolean);if(Z.length===0)return"?";if(Z.length===1)return Z[0].slice(0,2).toUpperCase();return`${Z[0][0]}${Z[1][0]}`.toUpperCase()}function rg($){let Z=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let J of $)Q=Q*31+J.charCodeAt(0)>>>0;return Z[Q%Z.length]}function xD($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>rG(Z,Q))}async function ng($,Z){let Q=await x0.getModelsForProvider($),J=$===hD;if(!Z&&!J)return Q;let W=await _Q($,{loadLatestOnInit:J,loadPrivateOnAuth:!0,failOnError:!1},Z);if($==="litellm"&&W?.knownModels)return W.knownModels;if(J&&W?.knownModels)return W.knownModels;return W?.knownModels?{...Q,...W.knownModels}:Q}function ZX($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function ag($){if(!$?.length)return;return[...new Set($)]}function og($,Z){return ag([...$??[],...Z??[]])}function sg($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function tg($){if(!$||typeof $!=="object")return!1;let Z=$;return typeof Z.path==="string"&&Z.path.trim().length>0&&typeof Z.label==="string"&&Z.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(Z.type))}function eg($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(tg)}var zZ={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},kD={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function $v($){if(!$)return[zZ];if($.source!=="system")return $.baseUrl?[zZ,kD]:[zZ];let Z=[];if($.env?.length)Z.push(zZ);if($.baseUrl)Z.push(kD);return Z}function Zv($,Z){return Z.split(".").reduce((Q,J)=>{if(!Q||typeof Q!=="object")return;return Q[J]},$)}function Qv($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function Jv($,Z,Q){if(!$?.length)return;let J={};for(let W of $){let j=Qv(W.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:Zv(Z,W.path))??W.defaultValue;if(j!==void 0)J[W.path]=j}return J}function gD($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function QX($,Z){let Q=Z?.includes("vision")??!1,J=Z?.includes("reasoning")??!1;return Object.fromEntries($.map((W)=>[W,{id:W,name:W,supportsVision:Q,supportsAttachments:Q,supportsReasoning:J}]))}async function vD($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await S4($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function mD($,Z){let Q=$.read(),J=!1;if(Q.providers[Z])delete Q.providers[Z],J=!0;if(Q.lastUsedProvider===Z)delete Q.lastUsedProvider,J=!0;if(J)$.write(Q);x0.unregisterProvider(Z)}async function Wv($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let J=Z.baseUrl.trim(),W=Z.apiKey?.trim()??"";if(!J&&!W){let U=f$($);if((await A8(U)).providers[Q]){let L=await uD($,{providerId:Q});return{providerId:Q,settingsPath:L.settingsPath,modelsPath:L.modelsPath,modelsCount:0}}return mD($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:U,modelsCount:0}}if(x0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let X=Z.name.trim();if(!X)throw Error("name is required");if(!J)throw Error("baseUrl is required");let j=ZX(Z.models),Y=Z.modelsSourceUrl?.trim(),V=await vD({providerId:Q,explicitModels:j,modelsSourceUrl:Y,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let B=Z.defaultModelId?.trim()&&V.includes(Z.defaultModelId.trim())?Z.defaultModelId.trim():V[0],H=Z.capabilities?.length?[...new Set(Z.capabilities)]:void 0,K=gD(Z.headers);$.saveProviderSettings({provider:Q,apiKey:W||void 0,baseUrl:J,headers:K,timeout:Z.timeoutMs,model:B,protocol:Z.protocol,client:Z.client},{setLastUsed:!1});let G=f$($),F=await A8(G);return F.providers[Q]={provider:{name:X,baseUrl:J,defaultModelId:B,protocol:Z.protocol,client:Z.client,capabilities:H,modelsSourceUrl:Y},models:QX(V,H)},await h9(G,F),O8(Q,F.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:G,modelsCount:V.length}}async function cD($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let J=f$($),W=await A8(J),X=W.providers[Q];if(!X){let T=$.getProviderSettings(Q);if(!T)throw Error(`provider "${Q}" does not exist`);let z=Z.modelsSourceUrl?.trim(),A=ZX(Z.models)[0]??T.model?.trim();if(!A&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);X={provider:{name:Z.name?.trim()||ID(Q),baseUrl:Z.baseUrl?.trim()??T.baseUrl?.trim()??"",defaultModelId:A,protocol:T.protocol,client:T.client,capabilities:T.capabilities},models:A?QX([A],T.capabilities):{}}}if(!X.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let j=Z.name?.trim()??X.provider.name.trim();if(!j)throw Error("name is required");let Y=Z.baseUrl?.trim()??X.provider.baseUrl.trim();if(!Y)throw Error("baseUrl is required");let V=Z.capabilities===void 0?X.provider.capabilities:Z.capabilities===null?void 0:[...new Set(Z.capabilities)],B=Z.protocol===void 0?X.provider.protocol:Z.protocol??void 0,H=Z.client===void 0?X.provider.client:Z.client??void 0,K=ZX(Z.models),G=Z.modelsSourceUrl===void 0?X.provider.modelsSourceUrl:Z.modelsSourceUrl?.trim()||void 0,F=Z.models!==void 0||Z.modelsSourceUrl!==void 0&&!!G,U=Object.keys(X.models??{}).map((T)=>T.trim()).filter(Boolean),_=await vD({providerId:Q,explicitModels:K,modelsSourceUrl:G,fallbackModelIds:U,shouldRecompute:F});if(_.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let L=Z.defaultModelId===void 0?X.provider.defaultModelId?.trim():Z.defaultModelId?.trim(),O=L&&_.includes(L)?L:_[0],q={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:Y,model:O};if(B)q.protocol=B;else delete q.protocol;if(H)q.client=H;else delete q.client;if(Z.apiKey!==void 0){let T=Z.apiKey?.trim()??"";if(T)q.apiKey=T;else delete q.apiKey}if(Z.headers!==void 0){let T=gD(Z.headers);if(T)q.headers=T;else delete q.headers}if(Z.timeoutMs!==void 0)if(typeof Z.timeoutMs==="number")q.timeout=Z.timeoutMs;else delete q.timeout;return $.saveProviderSettings(q,{setLastUsed:!1}),W.providers[Q]={provider:{name:j,baseUrl:Y,defaultModelId:O,protocol:B,client:H,capabilities:V,modelsSourceUrl:G},models:QX(_,V)},await h9(J,W),O8(Q,W.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:J,modelsCount:_.length}}async function uD($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let J=f$($),W=await A8(J);if(!W.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete W.providers[Q],await h9(J,W),x0.unregisterProvider(Q),mD($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:J}}function Xv($,Z,Q={}){let J=Z.trim();if(!J)throw Error("providerId is required");let W=$.read().providers[J]?.settings;return $.saveProviderSettings({...W??{},provider:J},{setLastUsed:!1,tokenSource:Q.tokenSource}),{providerId:J,enabled:!0,settingsPath:$.getFilePath()}}async function jv($,Z={}){let Q=$.read(),J=x0.getProviderIds(),W=await Promise.all(J.map(async(j)=>{let[Y,V]=await Promise.all([x0.getProvider(j),x0.getModelsForProvider(j)]),B=xD(V),H=Q.providers[j]?.settings,K=$.getProviderSettings(j),G=Y?.name??ID(j),F=og(Y?.capabilities,K?.capabilities),U=eg(Y?.metadata)??$v(Y);return{provider:{id:j,name:G,models:B.length,color:rg(j),letter:ig(G),enabled:Boolean(H),apiKey:K?pg(K):void 0,oauthAccessTokenPresent:K?lg(K):void 0,baseUrl:K?.baseUrl??Y?.baseUrl,defaultModelId:Y?.defaultModelId,protocol:K?.protocol??Y?.protocol,client:K?.client??Y?.client,capabilities:F,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:U,configValues:Jv(U,K,Y),modelList:B},rank:sg(Y?.metadata)}}));W.sort((j,Y)=>{if(j.rank!==Y.rank)return j.rank-Y.rank;return j.provider.name.localeCompare(Y.provider.name)||j.provider.id.localeCompare(Y.provider.id)});let X=W.map((j)=>j.provider);if(Z.isClinePassEnabled!==!0)X=X.filter((j)=>j.id!==hD);return{providers:X,settingsPath:$.getFilePath()}}async function Yv($,Z){let Q=$.trim(),J=await ng(Q,Z),W=xD(J);return{providerId:Q,models:W}}function TZ($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function dD($,Z){if(!TZ(Z))return TZ($)?{...$}:void 0;let Q=TZ($)?{...$}:{};for(let[J,W]of Object.entries(Z)){if(W==null||W===""){delete Q[J];continue}if(TZ(W)){let X=dD(Q[J],W);if(X&&Object.keys(X).length>0)Q[J]=X;else delete Q[J];continue}Q[J]=W}return Object.keys(Q).length>0?Q:void 0}function Vv($,Z){let Q=Z.providerId.trim();if(Z.enabled===!1){let X=$.read();if(delete X.providers[Q],X.lastUsedProvider===Q)delete X.lastUsedProvider;return $.write(X),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let W={...$.getProviderSettings(Q)??{},provider:Q};for(let X of["apiKey","baseUrl","model","region"])if(Object.hasOwn(Z,X)&&typeof Z[X]==="string")if(Z[X].trim().length===0)delete W[X];else W[X]=Z[X];for(let X of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(Z,X))W[X]=Z[X];for(let X of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(Z,X)&&Z[X]!=null){let j=dD(W[X],Z[X]);if(j)W[X]=j;else delete W[X]}return $.saveProviderSettings(W,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function Bv($,Z){let Q=Z.trim(),J=$.getProviderSettings(Q),X=x0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,j=J?.baseUrl?.trim()||X?.baseUrl?.trim(),Y=b4(j,X?.baseUrl,X?.modelsSourceUrl);if(!J||!X||!j||!Y)return{providerId:Q,refreshed:!1};let V=await cD($,{providerId:Q,name:X.name,baseUrl:j,apiKey:J.apiKey,headers:J.headers??null,timeoutMs:J.timeout??null,modelsSourceUrl:Y,protocol:J.protocol??X.protocol??null,client:J.client??X.client??null,capabilities:J.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:V.modelsCount}}function Hv($){let Z=$.trim().toLowerCase(),Q=z0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function Kv($,Z,Q,J){let W=z0($);if(!W)throw Error(`provider "${$}" does not support OAuth login`);let X=O4({onPrompt:async(j)=>j.defaultValue??"",openUrl:Q,onOpenUrlError:({error:j})=>{throw j instanceof Error?j:Error(String(j))}});return W.login({settings:Z,callbacks:X,telemetry:J})}function Gv($,Z,Q,J,W){return y8({manager:$,providerId:Z,settings:Q,credentials:J,setLastUsed:W?.setLastUsed})}async function Fv($,Z,Q,J){let W=O4({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return BQ($,Z,{callbacks:W,telemetry:J})}function Uv($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}import*as NZ from"@cline/llms";var Dv=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],_v={"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 Lv($,Z){let Q={};for(let J of Dv){let W=$[J],X=Z[J];if(W||X)Q[J]={...W,...X}}return Q}function Av($){let Z=_v[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:Lv($.fields,Z.fields)}}var Ov=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function qv($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return Ov.has($)}function zv($){let Z=NZ.normalizeProviderId($);if(w2(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=NZ.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:Z,authMethod:"local",fields:{}};let J=Q?.provider.baseUrl,W={apiKey:{}};if(qv(Z,Q))W.baseUrl={defaultValue:J};return Av({providerId:Z,authMethod:"api-key",fields:W})}BZ();q0();QZ();import{appendFileSync as Tv,existsSync as JX,mkdirSync as Nv,readFileSync as fv,renameSync as Rv,unlinkSync as Mv,writeFileSync as Ev}from"node:fs";import{join as WX}from"node:path";import{resolveTeamDataDir as Cv}from"@cline/shared/storage";function wv($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class pD{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=wv($.teamName),Q=$.baseDir?.trim()||Cv();this.dirPath=WX(Q,Z),this.statePath=WX(this.dirPath,"state.json"),this.taskHistoryPath=WX(this.dirPath,"task-history.jsonl")}loadState(){if(!JX(this.statePath))return;try{let $=fv(this.statePath,"utf8"),Z=JSON.parse($);if(Z.version!==1||!Z.teamState)return;for(let Q of Z.teammates??[])this.teammateSpecs.set(Q.agentId,Q);return rK(Z.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec($){this.teammateSpecs.set($.agentId,$)}removeTeammateSpec($){this.teammateSpecs.delete($)}persist($){if(!this.hasPersistableState($)){this.clearPersistedState();return}this.ensureDir();let Z={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Q=`${this.statePath}.tmp`;Ev(Q,`${JSON.stringify(Z,null,2)}
|
|
800
|
+
`,"utf8"),Rv(Q,this.statePath)}appendTaskHistory($){let Z={};switch($.type){case"team_task_updated":Z=$.task;break;case"team_message":Z={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":Z={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":Z={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":Z={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":Z={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),Tv(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:Z})}
|
|
801
|
+
`,"utf8")}ensureDir(){if(!JX(this.dirPath))Nv(this.dirPath,{recursive:!0})}hasPersistableState($){let Z=$.exportState();if(this.teammateSpecs.size>0)return!0;if(Z.members.some((Q)=>Q.role==="teammate"))return!0;return Z.tasks.length>0||Z.mailbox.length>0||Z.missionLog.length>0}clearPersistedState(){if(JX(this.statePath))Mv(this.statePath)}}import{z as b}from"zod";var lD=b.object({workspaceRoot:b.string().min(1),cwd:b.string().optional(),provider:b.string().min(1),model:b.string().min(1),mode:b.enum(["act","plan"]).default("act"),apiKey:b.string(),systemPrompt:b.string().optional(),rules:b.string().optional(),maxIterations:b.number().int().positive().optional(),enableTools:b.boolean(),enableSpawn:b.boolean().optional(),enableTeams:b.boolean().optional(),autoApproveTools:b.boolean().optional(),missionStepInterval:b.number().int().positive().optional(),missionTimeIntervalMs:b.number().int().positive().optional()}),iD=b.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),rD=b.enum(["user","assistant","tool","system","status","error"]),nD=b.object({id:b.string().min(1),mediaType:b.enum(["image/png","image/jpeg","image/gif","image/webp"]),data:b.string().min(1)}),aD=b.object({id:b.string().min(1),sessionId:b.string().nullable(),role:rD,content:b.string(),images:b.array(nD).optional(),createdAt:b.number().int().nonnegative(),meta:b.object({stream:b.enum(["stdout","stderr"]).optional(),toolName:b.string().optional(),iteration:b.number().int().nonnegative().optional(),agentId:b.string().optional(),conversationId:b.string().optional(),hookEventName:b.string().optional(),inputTokens:b.number().int().nonnegative().optional(),outputTokens:b.number().int().nonnegative().optional(),checkpoint:b.object({ref:b.string(),createdAt:b.number().int().nonnegative(),runCount:b.number().int().positive(),kind:b.enum(["stash","commit"]).optional()}).optional()}).optional()}),oD=b.object({toolCalls:b.number().int().nonnegative(),tokensIn:b.number().int().nonnegative(),tokensOut:b.number().int().nonnegative()}),Pv=b.object({sessionId:b.string().nullable(),status:iD,config:lD,messages:b.array(aD),rawTranscript:b.string(),error:b.string().nullable(),summary:oD});var Sv=Y8;import{Agent as p50,createAgentRuntime as l50}from"@cline/agents";import{VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES as bv}from"@cline/llms";import{getClineEnvironmentConfig as yv}from"@cline/shared";var kv=5000,sD={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}],clinePass:[]};function hv($){return{recommended:$.recommended.map((Z)=>({...Z,tags:[...Z.tags]})),free:$.free.map((Z)=>({...Z,tags:[...Z.tags]})),clinePass:$.clinePass.map((Z)=>({...Z,tags:[...Z.tags]}))}}function XX($){if(!$||typeof $!=="object")return null;let Z=$;if(typeof Z.id!=="string"||Z.id.length===0)return null;return{id:Z.id,name:typeof Z.name==="string"&&Z.name.length>0?Z.name:Z.id,description:typeof Z.description==="string"?Z.description:"",tags:Array.isArray(Z.tags)?Z.tags.filter((Q)=>typeof Q==="string"):[]}}function Iv($){if(!$||typeof $!=="object")return null;let Z=$,Q=Array.isArray(Z.recommended)?Z.recommended:[],J=Array.isArray(Z.free)?Z.free:[],W=Array.isArray(Z.clinePass)?Z.clinePass:[],X=Q.map(XX).filter((V)=>V!==null),j=J.map(XX).filter((V)=>V!==null),Y=W.map(XX).filter((V)=>V!==null);if(X.length===0&&j.length===0&&Y.length===0)return null;return{recommended:X,free:j,clinePass:Y}}function xv($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=yv().apiBaseUrl;try{return($.providerSettingsManager??new R$).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function gv($,Z,Q){let J=new AbortController,W=setTimeout(()=>J.abort(),Q);try{return await $(Z,{signal:J.signal})}finally{clearTimeout(W)}}function jX($){return $.replace(/\s*\(free\)\s*$/i,"").replace(/:free$/i,"").trim()}function vv($){let Z=[$];for(let Q of bv)if($.startsWith(Q.canonicalPrefix))Z.push(`${Q.aliasPrefix}${$.slice(Q.canonicalPrefix.length)}`);else if($.startsWith(Q.aliasPrefix))Z.push(`${Q.canonicalPrefix}${$.slice(Q.aliasPrefix.length)}`);return Z}function mv($,Z){for(let W of Z)for(let X of vv($.id)){let j=W?.[X]?.name?.trim();if(j)return jX(j)}let Q=$.name?.trim();if(Q&&Q!==$.id)return jX(Q);let J=$.id.split("/").at(-1)??$.id;return jX(J)}async function cv($,Z){let Q;try{return await Promise.race([$(),new Promise((J)=>{Q=setTimeout(()=>J(void 0),Z)})])}catch{return}finally{clearTimeout(Q)}}async function uv($,Z,Q){let J=await cv(Z,Q),W=(X,j)=>X.map((Y)=>({...Y,name:mv(Y,j)}));return{recommended:W($.recommended,[J?.openrouter]),free:W($.free,[J?.cline,J?.openrouter]),clinePass:W($.clinePass,[J?.["cline-pass"]])}}async function dv($={}){let Z=$.timeoutMs??kv,Q=Date.now()+Z;try{let J=xv($),W=$.fetchImpl??fetch,X=await gv(W,`${J}/api/v1/ai/cline/recommended-models`,Z);if(!X.ok)throw Error(`HTTP ${X.status}`);let j=await X.json(),Y=Iv(j);if(Y)return await uv(Y,$.catalogLoader??P2,Math.max(0,Q-Date.now()))}catch{}return hv(sD)}import{readFile as pv}from"node:fs/promises";import lv from"node:path";function iv($){return $}async function rv($){let Z=lv.resolve($),Q=await pv(Z,"utf8"),J;try{J=JSON.parse(Q)}catch(W){let X=W instanceof Error?W.message:String(W);throw Error(`Failed to parse JSON config at "${Z}": ${X}`)}return nv(J,Z)}function nv($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let J=$.providers;if(!Array.isArray(J))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!J.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}import{BUILT_IN_PROVIDER_IDS as $_,createHandler as sv,createHandlerAsync as tv,getProviderCollection as ev,hasProvider as Z_,registerAsyncHandler as $m,registerHandler as Zm,registerModel as Qm,registerProvider as Q_}from"@cline/llms";function tD($){return $?{...$}:{}}function av($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function ov($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function eD($){let Z=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:Z,defaultModel:$.collection.provider.defaultModelId,modelCount:Z.length}}class YX{providers=new Map;register($){ov($.id,$.models);let Z=$.defaultModel??$.models[0];if(!Z)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(Z))throw Error(`Default model "${Z}" is not included in configured models for "${$.id}".`);let Q=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Q?.models??[],...$.models]),defaultModel:Z,defaults:{...Q?.defaults??{},...tD($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:av($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...tD($.settings)}})}registerModel($,Z){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([Z]),defaultModel:Z,defaults:{}});return}Q.models.add(Z)}createHandlerConfig($){let Z=this.require($.providerId),Q=$.modelId??Z.defaultModel;if(!Z.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...Z.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,Z){return this.providers.get($)?.models.has(Z)??!1}require($){let Z=this.providers.get($);if(!Z)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return Z}}class VX{configuredProviders=new YX;constructor($){this.applyConfig($)}createHandler($){return sv(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return tv(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(Q_($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)Zm($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)$m($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let Z=$.exposeModels??Object.keys($.models),Q=$.defaultModel??Z[0];if(!Q)throw Error(`Provider "${$.id}" must define a default model.`);Q_({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Q,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:Z,defaultModel:Q,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){Qm($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...$_]}async getBuiltInProviders(){return(await Promise.all($_.map((Z)=>ev(Z)))).filter((Z)=>Z!==void 0).map((Z)=>eD({collection:Z}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,Z){return this.configuredProviders.hasModel($,Z)}applyConfig($){for(let Z of $.providers)this.configuredProviders.registerSelectionConfig(Z);for(let Z of $.models??[])this.registerModel(Z);for(let Z of $.customProviders??[])this.registerProvider(Z);for(let Z of this.configuredProviders.list()){let Q=Z_(Z.id),J=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,W=typeof J==="string"&&Z_(J);if(!Q&&!W)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function Jm($){return new VX($)}QW();async function d60(){return Promise.resolve().then(() => (BZ(),tU))}export{PJ as writeModelsFileSync,bH as writeHubDiscovery,m0 as writeGlobalSettings,yH as withHubStartupLock,D$ as verifyHubConnection,C1 as updateMcpSettingsFileSync,g5 as updateMcpSettingsFile,x7 as updateMcpServerOAuthStateAsync,H6 as updateMcpServerOAuthState,cD as updateLocalProvider,dW as uninstallPlugin,_D as uninstallMarketplaceSkill,LD as uninstallMarketplacePlugin,UD as uninstallMarketplaceMcpServerFromSettings,Jg as uninstallMarketplaceEntry,YW as truncateNotificationBody,d8 as truncateCommandOutput,gJ as trimMessagesBeforeUserRun,TQ as toggleDisabledTool,L9 as toTeamProgressLifecycleEvent,N1 as toProviderConfig,XE as toHubStatusUrl,kH as toHubHealthUrl,TJ as toHookConfigFileName,Lb as syncStoredProviderRegistration,kW as syncPluginMcpServersToSettings,f9 as summarizeUsageFromMessages,P40 as stripUtf8Bom,FC as stopLocalHubServerGracefully,T1 as startLocalOAuthServer,CW as startHubWebSocketServer,J80 as startHubServer,c_ as startClineDeviceAuth,l7 as splitCoreSessionConfig,W9 as spawnDetachedHubServerWithRetry,pE as spawnDetachedHubServer,vA as setToolAutoApproveGlobally,wA as setTelemetryOptOutGlobally,H_ as setSdkLogger,xA as setPlanActModeGlobally,V6 as setMcpServerDisabled,Lj as setDisabledTools,uA as setDisabledPlugin,yA as setCompactionStrategyGlobally,hA as setCompactionModeGlobally,SA as setAutoUpdateEnabledGlobally,k10 as sendHubCommand,s as sdkDebug,y8 as saveProviderOAuthCredentials,Vv as saveLocalProviderSettings,Gv as saveLocalProviderOAuthCredentials,C6 as sanitizeSessionToken,Vj as safeParseSettings,XA as safeCreateProviderConfig,U2 as runSubprocessEvent,a9 as runHook,IV as reviveTeamStateDates,sH as restartLocalHubIfIdleAfterStartupTimeout,gr as resolveWorkspaceHubOwnerContext,Z7 as resolveWorkflowsConfigSearchPaths,eQ as resolveSkillsConfigSearchPaths,S1 as resolveSharedHubOwnerContext,ay as resolveSessionBackend,$7 as resolveRulesConfigSearchPaths,_Q as resolveProviderConfig,NL as resolveProviderApiKeyFromSettings,U$ as resolveProductionHubOwnerContext,v$ as resolvePluginSkillDirectoriesFromPaths,mQ as resolvePluginConfigSearchPaths,f$ as resolveModelsRegistryPath,Ww as resolveMessageDisplayRole,G1 as resolveMcpServerRegistrations,iW as resolveMarketplaceMcpServerName,Uv as resolveLocalClineAuthToken,tk as resolveHubUrl,J2 as resolveHubOwnerContext,F$ as resolveHubEndpointOptions,SH as resolveHubBuildId,qJ as resolveHooksConfigSearchPaths,f1 as resolveDisabledToolNames,d4 as resolveDisabledPluginPaths,j0 as resolveDefaultMcpSettingsPath,Q9 as resolveDefaultHubPort,_E as resolveDefaultHubPathname,DE as resolveDefaultHubHost,mV as resolveCoreSelectedToolIds,t0 as resolveCoreDistinctId,c6 as resolveCoreDeviceId,b3 as resolveCompatibleLocalHubUrl,Cr as resolveClineDir,h6 as resolveClineDataDir,s4 as resolveAndLoadAgentPlugins,g$ as resolveAgentPluginPaths,E3 as requestHubShutdown,lI as requestDesktopToolApproval,hW as removePluginMcpServersFromSettings,sI as removePersistedConnectorConnection,V8 as rememberRecoverableLocalHubUrl,ZD as registerRemoteConfigSessionBlobUpload,K6 as registerMcpServersFromSettingsFile,C40 as registerDisposable,Bv as refreshProviderModelsFromSource,SX as refreshOpenAICodexToken,vX as refreshOcaToken,wX as refreshClineToken,tI as reconnectPersistedConnectors,gA as readToolAutoApproveGlobally,J4 as readSessionCheckpointHistory,hI as readRemoteConfigSessionBlobUploadMetadata,IA as readPlanActModeGlobally,k9 as readModelsFileSync,R0 as readHubDiscovery,X0 as readGlobalSettings,bA as readCompactionStrategyGlobally,kA as readCompactionModeGlobally,rU as readBearerToken,H8 as projectSessionCompactionState,W2 as probeHubServer,y10 as probeHubConnection,xY as prewarmFileIndex,cH as prewarmDetachedHubServer,gI as prepareRemoteConfigCoreIntegration,nI as persistConnectorConnection,tQ as parseWorkflowConfigFromMarkdown,E40 as parseUserCommandEnvelope,oQ as parseSkillConfigFromMarkdown,Yj as parseSettings,y1 as parseSessionCompactionState,sQ as parseRuleConfigFromMarkdown,wD as parsePluginSource,PW as parseMcpInstallArgs,n9 as parseHookEventPayload,u3 as parseConfiguredAgentConfig,V$ as normalizeWorkspacePath,M40 as normalizeUserInput,R40 as normalizeSdkError,h0 as normalizeRuntimeCapabilities,g4 as normalizeProviderId,Hv as normalizeOAuthProvider,B8 as normalizeHubWebSocketUrl,f40 as noopBasicLogger,kJ as migrateLegacyProviderSettings,W5 as mergeRulesForSystemPrompt,e6 as mergeAgentHooks,Zg as marketplaceEntryKey,Xv as markLocalProviderEnabled,G3 as makeTeamTaskSubSessionId,s5 as makeSubSessionId,$Q as loginOpenAICodex,jQ as loginOcaOAuth,Kv as loginLocalProvider,sZ as loginClineOAuth,BQ as loginAndSaveProviderOAuthCredentials,Fv as loginAndSaveLocalProviderOAuthCredentials,d60 as loadOpenTelemetryAdapter,Y6 as loadMcpSettingsFile,rv as loadLlmsConfigFromFile,F9 as loadConfiguredAgentConfigs,g8 as loadAgentPluginsFromPathsWithDiagnostics,bj as loadAgentPluginsFromPaths,bQ as loadAgentPluginFromPath,pM as listSessionHistoryFromBackend,PB as listPluginToolsWithDiagnostics,d7 as listPluginTools,g7 as listMcpServerOAuthStatuses,jv as listLocalProviders,_8 as listHookConfigFiles,FW as listActiveConnectors,Xw as isUserRunMessage,mA as isToolDisabledGlobally,zQ as isTelemetryOptedOutGlobally,t$ as isSessionNotFoundError,ej as isRuleEnabled,cA as isPluginDisabledGlobally,CD as isOfficialPluginSlug,w2 as isOAuthProvider,DD as isMarketplaceSkillInstalled,CI as isLocalHubOrigin,nU as isLocalHubHostName,jC as isHubReconnectableTransportError,aH as isHubCommandTimeoutError,Sr as isDiscoveryFilePresent,H40 as isClinePassLimitMessage,B40 as isClinePassLimitError,V40 as isClineOrgIndividualInferenceSubscriptionMessage,Y40 as isClineOrgIndividualInferenceSubscriptionError,j40 as isClineNotSubscribedMessage,X40 as isClineNotSubscribedError,W40 as isClineModelNotFoundMessage,J40 as isClineFreeModelLimitMessage,Q40 as isClineFreeModelLimitError,FX as isClineAccountActionRequest,QA as isBuiltInProviderId,PA as isAutoUpdateEnabledGlobally,dg as installPlugin,Xx as installMcpServer,s1 as identifyAccount,y0 as hashSecret,a$ as hasMcpSettingsFile,ZQ as getValidOpenAICodexCredentials,YQ as getValidOcaCredentials,tZ as getValidClineCredentials,q$ as getUserRunSpan,HQ as getProviderOAuthCredentialsFromSettings,zv as getProviderConfigFields,oX as getProviderConfig,TL as getProviderAuthStorageId,z0 as getProviderAuthHandler,P4 as getPersistedProviderApiKey,oI as getPersistedConnectorConnection,B6 as getMcpServerOAuthState,rW as getMarketplaceSkillCandidates,Yv as getLocalProviderModels,P2 as getLiveModelsCatalog,nW as getGlobalMarketplaceSkillPaths,p$ as getFileIndex,WS as getCurrentContextSize,w7 as getCoreHeadlessToolNames,vV as getCoreDefaultEnabledToolIds,J6 as getCoreBuiltinToolCatalog,cV as getCoreAcpToolNames,Z40 as getClinePassSubscriptionUrl,$40 as getClineOrgIndividualInferenceSubscriptionMessage,e60 as getClineNotSubscribedMessage,G40 as getClineDefaultSystemPrompt,s7 as generateWorkspaceInfoWithDiagnostics,r5 as generateWorkspaceInfo,J5 as formatRulesForSystemPrompt,fL as formatProviderOAuthApiKey,N40 as formatDisplayUserInput,aW as findInstalledGlobalMarketplaceSkillName,v9 as findCheckpointForRun,fQ as filterExtensionToolRegistrations,e1 as filterDisabledTools,NQ as filterDisabledPluginPaths,dv as fetchClineRecommendedModels,t60 as extractClinePassLimitMessage,s60 as extractClineFreeModelLimitResetTime,UX as executeClineAccountAction,aU as ensureHubWebSocketServer,W80 as ensureHubServer,ar as ensureDetachedHubServer,SJ as ensureCustomProvidersLoadedSync,eG as ensureCustomProvidersLoaded,x6 as ensureCompatibleLocalHubUrl,T5 as enrichPromptWithMentions,q40 as emptyWorkspaceManifest,L8 as emptyStoredProviderSettings,cQ as discoverPluginModulePaths,Ux as disablePluginMcpServersInSettings,aI as disableConnectorAutostart,F3 as deriveSubsessionStatus,uD as deleteLocalProvider,iv as defineLlmsConfig,W7 as createWorkflowsConfigDefinition,t2 as createUserInstructionConfigService,uY as createToolPoliciesWithPreset,O40 as createTool,_F as createTeamName,gF as createSubprocessHooks,s2 as createSpawnAgentTool,Q7 as createSkillsConfigDefinition,V7 as createShellTool,p8 as createShellExecutor,i9 as createSessionHost,V9 as createSessionCompactionState,i9 as createRuntimeHost,J7 as createRulesConfigDefinition,xJ as createRestoredCheckpointMetadata,xI as createRemoteConfigSessionMessagesArtifactUploader,WA as createProviderConfig,$Z as createOpenTelemetryTelemetryService,O4 as createOAuthClientCallbacks,p5 as createMcpTools,i10 as createLocalHubScheduleRuntimeHandlers,Jm as createLlmsSdk,P0 as createInitialAccumulatedUsage,Pr as createInMemoryHubOwnerContext,P1 as createHubServerUrl,PH as createHubAuthToken,MJ as createHookConfigFileHooks,w9 as createHookConfigFileExtension,C9 as createHookAuditHooks,r8 as createEditorExecutor,u7 as createDisabledMcpToolPolicy,EB as createDisabledMcpToolPolicies,a2 as createDelegatedAgentConfigProvider,o2 as createDelegatedAgent,dY as createDefaultToolsWithPreset,p2 as createDefaultTools,F7 as createDefaultShellExecutor,u5 as createDefaultMcpServerClientFactory,M5 as createDefaultExecutors,L6 as createCoreSettingsService,_$ as createCoreSessionSnapshot,A40 as createContributionRegistry,_J as createContextCompactionPrepareTurn,O2 as createConfiguredTelemetryService,ZZ as createConfiguredTelemetryHandle,D9 as createConfiguredAgentTools,LJ as createCompactionStateAwarePrepareTurn,L40 as createClineTelemetryServiceMetadata,_40 as createClineTelemetryServiceConfig,bF as createCheckpointComparePlan,W6 as createBuiltinTools,i8 as createApplyPatchExecutor,Q6 as createAgentTeamsTools,l50 as createAgentRuntime,R9 as createAgentHooksExtension,G8 as countUserRunMessages,lF as connectToHub,A5 as computePatchChanges,u_ as completeClineDeviceAuth,eJ as compareCheckpointToWorkspace,yD as collectPluginMcpOAuthCandidates,tL as clearPrivateModelsCatalogCache,sL as clearLiveModelsCatalogCache,j1 as clearHubDiscovery,N_ as captureWorkspacePathResolved,CZ as captureWorkspaceInitialized,wZ as captureWorkspaceInitError,P8 as captureToolUsage,yZ as captureTokenUsage,bZ as captureTaskRestarted,SZ as captureTaskCreated,z4 as captureTaskCompleted,N4 as captureSubagentExecution,hZ as captureSkillUsed,D40 as captureSdkError,f_ as captureProviderConfigured,T4 as captureProviderApiError,kZ as captureModeSwitch,xZ as captureMistakeLimitReached,gZ as captureMentionUsed,mZ as captureMentionSearchResults,vZ as captureMentionFailed,uZ as captureHookDiscovery,T_ as captureExtensionActivated,IZ as captureDiffEditFailure,w8 as captureConversationTurnEvent,pZ as captureCompactionSkipped,dZ as captureCompactionExecuted,a1 as captureAuthSucceeded,n1 as captureAuthStarted,y$ as captureAuthLoggedOut,o1 as captureAuthFailed,G_ as captureAgentUnexpectedReasoningTokens,cZ as captureAgentTeamCreated,k$ as captureAgentCreated,t7 as buildWorkspaceMetadata,_9 as buildTeamProgressSummary,F40 as buildSdkErrorProperties,eU as buildRemoteConfigSessionBlobUploadMetadata,WD as buildMcpInstallTransport,$6 as buildDelegatedAgentConfig,GT as buildConnectionUpdate,p3 as buildConfiguredAgentToolName,l3 as buildConfiguredAgentToolDescriptors,yF as buildCheckpointWorkspaceDiff,k5 as bootstrapAgentTeams,FB as authorizeMcpServerOAuth,o$ as augmentMcpTimeoutError,Wv as addLocalProvider,M0 as accumulateUsageTotals,iQ as WORKFLOWS_CONFIG_DIRECTORY_NAME,h8 as UnifiedConfigFileWatcher,K1 as ToolPresets,F4 as TelemetryService,e9 as TelemetryLoggerSink,y5 as TEAM_TOOL_NAMES,l4 as SubprocessSandbox,u8 as StructuredCommandInputSchema,P9 as StoredProviderSettingsSchema,hG as StoredProviderSettingsEntrySchema,W4 as SqliteTeamStore,O$ as SqliteSessionStore,q8 as SessionVersioningService,e0 as SessionVersioningError,T0 as SessionSource,s$ as SessionNotFoundError,Wj as SapSettingsSchema,lQ as SKILLS_CONFIG_DIRECTORY_NAME,OQ as SESSION_STATUSES,A6 as SESSION_NOT_FOUND_ERROR_CODE,w40 as SDK_ERROR_TELEMETRY_EVENT,p9 as RuntimeOAuthTokenManager,EZ as RpcClineAccountService,B9 as RemoteRuntimeHost,$j as ReasoningSettingsSchema,ij as RULES_CONFIG_DIRECTORY_NAME,$D as REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY,S2 as ProviderSettingsSchema,R$ as ProviderSettingsManager,sX as ProviderProtocolSchema,AQ as ProviderIdSchema,tX as ProviderClientSchema,l8 as PatchActionType,d as PATCH_MARKERS,U4 as OpenTelemetryProvider,Xj as OcaSettingsSchema,DQ as OPENAI_COMPATIBLE_PROVIDERS,X4 as OAuthReauthRequiredError,b1 as NodeHubClient,H4 as NoOpFeatureFlagsProvider,NW as NativeHubTransportAdapter,jj as ModelCatalogSettingsSchema,I5 as McpSettingsUpdateSkippedError,e2 as McpSettingsMutatorPurityError,$8 as McpSettingsLockTimeoutError,u$ as MAX_COMMAND_OUTPUT_CHARS,E$ as LocalRuntimeHost,l60 as Llms,S9 as InMemoryWorkspaceManager,F6 as InMemoryMcpManager,Jh as HubUIClient,s0 as HubTransportError,Qh as HubSessionClient,VZ as HubServerTransport,t9 as HubScheduleService,o9 as HubScheduleCommandService,B2 as HubRuntimeHost,X9 as HubCommandError,IF as HookEventPayloadSchema,hF as HookEventNameSchema,M9 as HookConfigFileName,zJ as HOOK_CONFIG_FILE_EVENT_MAP,CG as HOOKS_CONFIG_DIRECTORY_NAME,u4 as GlobalSettingsSchema,Qj as GcpSettingsSchema,pD as FileTeamPersistenceStore,B4 as FeatureFlagsService,T40 as FeatureFlagDefaultValue,z40 as FEATURE_FLAGS,sD as FALLBACK_CLINE_RECOMMENDED_MODELS,N0 as DefaultToolNames,d9 as DefaultRuntimeBuilder,VX as DefaultLlmsSdk,rX as DEFAULT_MODELS_CATALOG_URL,FE as DEFAULT_HUB_PORT,UE as DEFAULT_HUB_PATHNAME,GE as DEFAULT_HUB_HOST,X8 as CoreSettingsService,z$ as CoreSessionService,U40 as ContributionRegistry,d$ as CommandExitError,o60 as ClinePassLimitError,a60 as ClineOrgIndividualInferenceSubscriptionError,n60 as ClineNotSubscribedError,r60 as ClineFreeModelLimitError,$W as ClineCore,MZ as ClineAccountService,Pv as ChatViewStateSchema,oD as ChatSummarySchema,iD as ChatSessionStatusSchema,lD as ChatSessionConfigSchema,aD as ChatMessageSchema,rD as ChatMessageRoleSchema,nD as ChatMessageImageSchema,x as CORE_TELEMETRY_EVENTS,Sv as CORE_BUILD_VERSION,TW as BrowserWebSocketHubAdapter,ZA as BUILT_IN_PROVIDER_IDS,LQ as BUILT_IN_PROVIDER,Jj as AzureSettingsSchema,Zj as AwsSettingsSchema,eX as AuthSettingsSchema,p6 as AgentTeamsRuntime,r3 as AgentTeam,p50 as Agent,g2 as ALL_DEFAULT_TOOL_NAMES};
|