@cline/core 0.0.54-nightly.1782962319 → 0.0.55
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/extensions/tools/schemas.d.ts +3 -11
- package/dist/hub/daemon/entry.js +132 -132
- package/dist/hub/index.js +127 -127
- package/dist/index.d.ts +2 -1
- package/dist/index.js +109 -109
- package/dist/services/global-settings.d.ts +14 -0
- package/dist/services/telemetry/index.js +1 -1
- package/dist/types.d.ts +2 -1
- package/package.json +4 -4
package/dist/hub/daemon/entry.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{createRequire as
|
|
2
|
-
`,"utf8"),
|
|
3
|
-
`)}function
|
|
4
|
-
`),J}finally{GQ.delete($.lockDir),NR($)}}function j1($,Z,Q={}){let W=wR($,Q);return nG(W,$,Z)}async function l8($,Z,Q={}){let W=await CR($,Q);return nG(W,$,Z)}function PR($){let Z=yR($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function SR($,Z){let Q=JSON.stringify($),W=JSON.parse(Q),J=Z(W),X=JSON.stringify(W),Y=Z($);if(JSON.stringify($)!==X)throw new C$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(Y)!==JSON.stringify(J))throw new C$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return Y}function bR($){let Z=xG($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(W){let J=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${$}": ${J}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function yR($){try{return bR($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function aG($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function hR($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function L2($={}){let Z=$.filePath??$0(),Q=xG(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(X){let Y=X instanceof Error?X.message:String(X);throw Error(`Failed to parse MCP settings JSON at "${Z}": ${Y}`)}let J=OR.safeParse(W);if(!J.success){let X=J.error.issues.map((Y)=>{let j=Y.path.join(".");return j?`${j}: ${Y.message}`:Y.message}).join("; ");throw Error(`Invalid MCP settings at "${Z}": ${X}`)}return J.data}function p8($){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 kR($){if($===void 0)return;let Z=a3.safeParse($);if(!Z.success)return;return p8(Z.data)}function p1($={}){let Z=$.filePath??$0();return IG(Z)}function p0($={}){let Z=L2($);return Object.entries(Z.mcpServers).map(([Q,W])=>({name:Q,transport:W.transport,disabled:W.disabled,metadata:W.metadata,oauth:W.oauth}))}function _2($){let Z=$.filePath??$0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");j1(Z,(W)=>{let J=W.mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let X={...J},Y=aG(X,Q);if(!Y)throw Error(`Unknown MCP server: ${Q}`);let j={...Y};if($.disabled)j.disabled=!0;else delete j.disabled;hR(X,Q,j),W.mcpServers=X})}function z2($,Z={}){let Q=L2(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return p8(Q.mcpServers[$]?.oauth)}function sG($,Z){return(Q)=>{let W=Q.mcpServers,J=aG(W,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let X=kR(J.oauth)??{},Y=p8(Z(X));if(Y)J.oauth=Y;else delete J.oauth;return Y??{}}}function T2($,Z,Q={}){let W=Q.filePath??$0();return j1(W,sG($,Z))}async function H5($,Z,Q={}){let W=Q.filePath??$0();return l8(W,sG($,Z))}function B5($={}){return p0($).map((Q)=>{let W=Q.transport.type!=="stdio",J=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:W,oauthConfigured:W&&typeof J==="string"&&J.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,W)=>Q.serverName.localeCompare(W.serverName))}async function O2($,Z={}){let Q=p0(Z);for(let W of Q)await $.registerServer(W);return Q}var V5,cG,a3,FR,AR,fR,UR,DR,LR,uG,_R,zR,TR,OR,d8,P$,C$,s3=1e4,dG=25,MR,GQ;var KQ=p$(()=>{V5=S.record(S.string(),S.string()),cG=S.record(S.string(),S.unknown()),a3=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(),FR=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:V5.optional()}),AR=S.object({type:S.literal("sse"),url:S.string().url(),headers:V5.optional()}),fR=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:V5.optional()}),UR=S.discriminatedUnion("type",[FR,AR,fR]),DR=S.object({transport:UR,disabled:S.boolean().optional(),metadata:cG.optional(),oauth:a3.optional()}),LR=S.enum(["stdio","sse","http","streamableHttp"]).optional(),uG=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:LR,disabled:S.boolean().optional(),metadata:cG.optional(),oauth:a3.optional()});_R=uG.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:V5.optional()}).superRefine(($,Z)=>{let Q=$.type??i3($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth})),zR=uG.extend({url:S.string().url(),headers:V5.optional()}).superRefine(($,Z)=>{let Q=$.type??i3($.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??i3($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth}}),TR=S.union([DR,_R,zR]),OR=S.object({mcpServers:S.record(S.string(),TR)}).passthrough();d8=class d8 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};P$=class P$ extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};C$=class C$ extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};MR=new Int32Array(new SharedArrayBuffer(4)),GQ=new Set});import{existsSync as nC,mkdirSync as aC,readFileSync as sC,writeFileSync as oC}from"node:fs";import{resolve as tC}from"node:path";import{resolveSessionDataDir as eC}from"@cline/shared/storage";import{nanoid as $P}from"nanoid";import*as ZP from"node-machine-id";function h0($){let Z=$?.trim();if(Z)return Z;let Q=JP();if(Q)return Q;return XP()}function WP(){let $=ZP;return $.machineIdSync??$.default?.machineIdSync}function JP(){try{let $=WP();if(!$)return;return $().trim()||void 0}catch{return}}function XP(){let $=eC(),Z=tC($,QP);try{if(nC(Z)){let W=sC(Z,"utf8").trim();if(W.length>0)return W}}catch{}let Q=`cl-${$P()}`;try{aC($,{recursive:!0}),oC(Z,Q,"utf8")}catch{}return Q}var QP="machine-id";var Z4=()=>{};class d5{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,Z){if(!this.isEnabled())return;this.emitLog($,Z,!1)}emitRequired($,Z){this.emitLog($,Z,!0)}recordCounter($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.counters.get($);if(!X)X=this.meter.createCounter($,W?{description:W}:void 0),this.counters.set($,X);X.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.histograms.get($);if(!X)X=this.meter.createHistogram($,W?{description:W}:void 0),this.histograms.set($,X);X.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.buildAttributes(Q),Y=JSON.stringify(X),j=this.gaugeValues.get($);if(Z===null){if(j){if(j.delete(Y),j.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=j;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let H=this.meter.createObservableGauge($,W?{description:W}:void 0);H.addCallback((B)=>{for(let G of this.snapshotGaugeSeries($))B.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set($,H)}V.set(Y,{value:Z,attributes:X})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,Z,Q){if(!this.logger)return;let W=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:W})}buildAttributes($,Z=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...Z?{_required:!0}:{}}}snapshotGaugeSeries($){let Z=this.gaugeValues.get($);if(!Z)return[];return Array.from(Z.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,Z="",Q=new WeakSet,W=0){if(!$)return{};let J={},X=100,Y=10;for(let[j,V]of Object.entries($)){if(j==="__proto__"||j==="constructor"||j==="prototype")continue;let H=Z?`${Z}.${j}`:j;if(V===null||V===void 0){J[H]=String(V);continue}if(Array.isArray(V)){let B=V.length>X?V.slice(0,X):V;try{J[H]=JSON.stringify(B)}catch{J[H]="[UnserializableArray]"}if(V.length>X)J[`${H}_truncated`]=!0,J[`${H}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){J[H]=V.toISOString();continue}if(V instanceof Error){J[H]=V.message;continue}if(Q.has(V)){J[H]="[Circular]";continue}if(W>=Y){J[H]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(J,this.flattenProperties(V,H,Q,W+1));continue}if(PS(V)){J[H]=V;continue}try{J[H]=JSON.stringify(V)}catch{J[H]=String(V)}}return J}}function PS($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class l5{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,Z){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:Z})}emitRequired($,Z){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:Z})}recordCounter($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordHistogram($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordGauge($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:W,required:J===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class D4{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new l5({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let Z=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,Z)}captureRequired($,Z){let Q=this.buildAttributes(Z);for(let W of this.adapters)W.emitRequired($,Q)}recordCounter($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordCounter($,Z,X,W,J)}recordHistogram($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordHistogram($,Z,X,W,J)}recordGauge($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordGauge($,Z,X,W,J)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var KX=()=>{};import{metrics as SS,trace as bS}from"@opentelemetry/api";import{logs as yS}from"@opentelemetry/api-logs";import{OTLPLogExporter as hS}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as kS}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as IS}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as xS}from"@opentelemetry/resources";import{BatchLogRecordProcessor as gS,ConsoleLogRecordExporter as mS,LoggerProvider as vS}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as cS,MeterProvider as uS,PeriodicExportingMetricReader as wA}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as dS,ConsoleSpanExporter as lS,SimpleSpanProcessor as pS}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as rS}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as iS,ATTR_SERVICE_VERSION as nS}from"@opentelemetry/semantic-conventions";class CA{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 L4{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=xS({[iS]:$.serviceName??"cline",...$.serviceVersion?{[nS]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)SS.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)yS.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return bS.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new d5({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new D4({...$,adapters:[Z],distinctId:h0($.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=FX(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),W=Math.min(30000,Math.floor(Q*0.8)),J=Z.map((X)=>oS(X,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:W})).filter((X)=>X!==null);if(J.length===0)return null;return new uS({resource:$,readers:J})}createTracerProvider($){let Z=FX(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,W=this.options.otlpTracesHeaders??this.options.otlpHeaders,J=[];for(let X of Z){let Y=sS(X,{endpoint:Q,headers:W,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(Y)J.push(Y)}if(J.length===0)return null;return new rS({resource:$,spanProcessors:J})}createLoggerProvider($){let Z=FX(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((W)=>{let J=aS(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new gS(J,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((W)=>W!==null);if(Q.length===0)return null;return new vS({resource:$,processors:Q})}}function p5($){let Z=new L4($),Q=Z.createTelemetryService($);return Q.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion}),{provider:Z,telemetry:Q}}function $$($){if(QZ())return{telemetry:new CA($)};if($.enabled!==!0)return{telemetry:new D4({...$,distinctId:h0($.distinctId)})};return p5($)}function _4($){let{telemetry:Z,provider:Q}=$$($);return{telemetry:Z,provider:Q,flush:async()=>{let X=Q;if(X&&typeof X.forceFlush==="function")try{await X.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])}}}function FX($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function aS($,Z){if($==="console")return new mS;if(!Z.endpoint)return null;let Q=AX(Z.endpoint,"/v1/logs");return new hS({url:Q,headers:Z.headers})}function sS($,Z){if($==="console")return new pS(new lS);if(!Z.endpoint)return null;let Q=AX(Z.endpoint,"/v1/traces");return new dS(new IS({url:Q,headers:Z.headers}))}function oS($,Z){if($==="console")return new wA({exporter:new cS,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=AX(Z.endpoint,"/v1/metrics");return new wA({exporter:new kS({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function AX($,Z){let Q=new URL($),W=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=W.endsWith(Z)?W:`${W}${Z}`,Q.toString()}var sQ=p$(()=>{Y1();Z4();KX()});var gf={};N(gf,{resolveCoreDistinctId:()=>h0,createOpenTelemetryTelemetryService:()=>p5,createConfiguredTelemetryService:()=>$$,createConfiguredTelemetryHandle:()=>_4,OpenTelemetryProvider:()=>L4,OpenTelemetryAdapter:()=>d5});var V7=p$(()=>{Z4();sQ()});import{AgentRuntimeAbortError as Ng}from"@cline/agents";import{initVcr as wg,resolveClineBuildEnv as Cg}from"@cline/shared";import{normalizeProviderId as Mg}from"@cline/llms";var VD={};N(VD,{LocalRuntimeHost:()=>z1});import{readdirSync as fg}from"node:fs";import{homedir as Ug}from"node:os";import{isAbsolute as Dg,join as $j,resolve as Zj}from"node:path";import{captureSdkError as i2,createSessionId as Lg,isLikelyAuthError as _g,normalizeUserInput as zg}from"@cline/shared";import{setHomeDirIfUnset as Tg}from"@cline/shared/storage";var uj={};N(uj,{saveProviderOAuthCredentials:()=>n$,resolveProviderApiKeyFromSettings:()=>AW,loginAndSaveProviderOAuthCredentials:()=>c4,isOAuthProvider:()=>i$,getProviderOAuthCredentialsFromSettings:()=>u4,getProviderAuthStorageId:()=>FW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>J8,formatProviderOAuthApiKey:()=>fW});import{getClineEnvironmentConfig as vj}from"@cline/shared";L0();var qj={};N(qj,{startClineDeviceAuth:()=>VW,refreshClineToken:()=>h9,loginClineOAuth:()=>h4,getValidClineCredentials:()=>k4,completeClineDeviceAuth:()=>HW});import{getClineEnvironmentConfig as WW}from"@cline/shared";var Aj={};N(Aj,{startLocalOAuthServer:()=>W1});function CD(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function W1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",W=$.timeoutMs??300000,J=$.successHtml??PD,X=CD(),Y=!1,j=null,V=null,H=null,B=(F)=>{if(Y)return;Y=!0,X.resolve(F)},G=()=>{if(j)clearTimeout(j),j=null;let F=H;if(H=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:F})).catch(()=>{})},K=async()=>{return j=setTimeout(()=>{G(),B(null)},W),X.promise};for(let F of $.ports){let A=Z.createServer((f,D)=>{try{let U=new URL(f.url||"",`http://${Q}:${F}`);if(U.pathname!==$.callbackPath){D.statusCode=404,D.end("Not found");return}let T={url:U,code:U.searchParams.get("code")??void 0,state:U.searchParams.get("state")??void 0,provider:U.searchParams.get("provider")??void 0,error:U.searchParams.get("error")??void 0};if(T.error){D.statusCode=400,D.end(`Authentication failed: ${T.error}`),G(),B(T);return}if(!T.code){D.statusCode=400,D.end("Missing authorization code");return}if($.expectedState&&T.state!==$.expectedState){D.statusCode=400,D.end("State mismatch");return}D.statusCode=200,D.setHeader("Content-Type","text/html; charset=utf-8"),D.end(J),G(),B(T)}catch{D.statusCode=500,D.end("Internal error")}}),L=await new Promise((f)=>{let D=(U)=>{A.off("error",D),f({bound:!1,error:U})};A.once("error",D),A.listen(F,Q,()=>{A.off("error",D),V=A,f({bound:!0})})});if(L.error){if(L.error.code==="EADDRINUSE")continue;throw G(),L.error}if(L.bound){H=F;let f=`http://${Q}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:F,callbackUrl:f})).catch(()=>{});return{callbackUrl:f,waitForCallback:K,cancelWait:()=>{G(),B(null)},close:()=>{G(),B(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var PD=`<!DOCTYPE html>
|
|
1
|
+
import{createRequire as MD}from"node:module";var{defineProperty:WW,getOwnPropertyNames:TD}=Object;var Jj=Object.prototype.hasOwnProperty;function Xj($){return this[$]}var R=($,Z,Q)=>{var W=TD(Z);for(let J of W)if(!Jj.call($,J)&&J!=="default")WW($,J,{get:Xj.bind(Z,J),enumerable:!0});if(Q){for(let J of W)if(!Jj.call(Q,J)&&J!=="default")WW(Q,J,{get:Xj.bind(Z,J),enumerable:!0});return Q}};var OD=($)=>$;function qD($,Z){this[$]=OD.bind(null,Z)}var N=($,Z)=>{for(var Q in Z)WW($,Q,{get:Z[Q],enumerable:!0,configurable:!0,set:qD.bind(Z,Q)})};var p$=($,Z)=>()=>($&&(Z=$($=0)),Z);var Yj=MD(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as RD,captureAgentUnexpectedReasoningTokens as Vj,SDK_ERROR_TELEMETRY_EVENT as ED}from"@cline/shared";function i($,Z,Q){$?.capture({event:Z,properties:Q})}function f9($){if(!$)return;return $.substring(0,ND)}function CD($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function wD($){return typeof $==="string"?$:$.message}function jj($,Z){return $.some((Q)=>Z.has(Q.trim().toLowerCase()))}function Hj($){i($,g.CLIENT.EXTENSION_ACTIVATED)}function U9($,Z){let Q=[...Z.vcs_types],W={root_count:Z.root_count,vcs_types:Q,is_multi_root:Z.root_count>1,has_git:jj(Q,new Set(["git"])),has_mercurial:jj(Q,new Set(["mercurial","hg"]))};if(Z.init_duration_ms!==void 0)W.init_duration_ms=Z.init_duration_ms;if(Z.feature_flag_enabled!==void 0)W.feature_flag_enabled=Z.feature_flag_enabled;if(Z.is_remote_workspace!==void 0)W.is_remote_workspace=Z.is_remote_workspace;i($,g.WORKSPACE.INITIALIZED,W)}function D9($,Z,Q){i($,g.WORKSPACE.INIT_ERROR,{error_type:CD(Z),error_message:f9(wD(Z)),fallback_to_single_root:Q.fallback_to_single_root,workspace_count:Q.workspace_count??0})}function Bj($,Z){i($,g.WORKSPACE.PATH_RESOLVED,{...Z})}function C1($,Z){i($,g.USER.AUTH_STARTED,{provider:Z})}function w1($,Z){i($,g.USER.AUTH_SUCCEEDED,{provider:Z})}function P1($,Z,Q){i($,g.USER.AUTH_FAILED,{provider:Z,errorMessage:f9(Q)})}function X$($,Z,Q){i($,g.USER.AUTH_LOGGED_OUT,{provider:Z,reason:Q})}function Gj($,Z){i($,g.USER.PROVIDER_CONFIGURED,{provider:Z})}function Kj($,Z){$?.captureRequired(g.USER.TELEMETRY_OPT_OUT,Z)}function S1($,Z){let Q=Z.id?.trim();if(Q)$?.setDistinctId(Q);$?.updateCommonProperties({account_id:Z.id,account_email:Z.email,provider:Z.provider,organization_id:Z.organizationId,organization_name:Z.organizationName,member_id:Z.memberId})}function L9($,Z){i($,g.TASK.CREATED,Z)}function _9($,Z){i($,g.TASK.RESTARTED,Z)}function S4($,Z){i($,g.TASK.COMPLETED,Z)}function t2($,Z){i($,g.TASK.CONVERSATION_TURN,{...Z,timestamp:new Date().toISOString()})}function z9($,Z){i($,g.TASK.TOKEN_USAGE,Z)}function T9($,Z,Q){i($,g.TASK.MODE_SWITCH,{ulid:Z,mode:Q})}function e2($,Z){i($,g.TASK.TOOL_USED,Z)}function O9($,Z){i($,g.TASK.SKILL_USED,Z)}function q9($,Z){i($,g.TASK.DIFF_EDIT_FAILED,Z)}function b4($,Z){i($,g.TASK.PROVIDER_API_ERROR,{...Z,errorMessage:f9(Z.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function Fj($,Z){i($,g.SDK.TOOL_TIMEOUT,PD(Z))}function PD($){let Z={};for(let[Q,W]of Object.entries($))if(W!==void 0)Z[Q]=W;return Z}function M9($,Z,Q){i($,g.TASK.MENTION_USED,{mentionType:Z,contentLength:Q,timestamp:new Date().toISOString()})}function R9($,Z,Q,W){i($,g.TASK.MENTION_FAILED,{mentionType:Z,errorType:Q,errorMessage:f9(W),timestamp:new Date().toISOString()})}function E9($,Z,Q,W,J){i($,g.TASK.MENTION_SEARCH_RESULTS,{queryLength:Z.length,resultCount:Q,searchType:W,isEmpty:J,timestamp:new Date().toISOString()})}function Y$($,Z){i($,g.TASK.AGENT_CREATED,{...Z,timestamp:new Date().toISOString()})}function N9($,Z){i($,g.TASK.AGENT_TEAM_CREATED,{...Z,timestamp:new Date().toISOString()})}function y4($,Z){i($,Z.event==="ended"?g.TASK.SUBAGENT_COMPLETED:g.TASK.SUBAGENT_STARTED,{...Z,timestamp:new Date().toISOString()})}function C9($,Z,Q,W){i($,g.HOOKS.DISCOVERY_COMPLETED,{hookName:Z,globalCount:Q,workspaceCount:W,totalCount:Q+W,timestamp:new Date().toISOString()})}function w9($,Z){i($,g.TASK.COMPACTION_EXECUTED,{...Z,timestamp:new Date().toISOString()})}function P9($,Z){i($,g.TASK.COMPACTION_SKIPPED,{...Z,timestamp:new Date().toISOString()})}var ND=500,g;var L0=p$(()=>{g={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:RD},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",PROVIDER_CONFIGURED:"user.provider_configured",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed",COMPACTION_EXECUTED:"task.compaction_executed",COMPACTION_SKIPPED:"task.compaction_skipped"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:ED,TOOL_TIMEOUT:"sdk.tool_timeout"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as Zz,readFileSync as Qz,statSync as Wz,writeFileSync as Jz}from"node:fs";import{dirname as Xz}from"node:path";import{resolveGlobalSettingsPath as nV}from"@cline/shared/storage";import{z as Q2}from"zod";function ZZ(){return F6.parse({})}function jz(){QZ=void 0}function Vz($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function Hz($){let Z;try{Z=Qz($,"utf8")}catch{return ZZ()}try{let Q=F6.safeParse(JSON.parse(Z));return Q.success?Q.data:ZZ()}catch{return ZZ()}}function Bz(){let $=nV(),Z=Wz($,{throwIfNoEntry:!1}),Q=Z?.mtimeMs??0,W=Z?.size??0,J=QZ;if(J&&J.path===$&&J.mtimeMs===Q&&J.size===W)return J;let X=Vz(Z?Hz($):ZZ());return QZ={path:$,mtimeMs:Q,size:W,value:X},QZ}function _0(){return Bz().value}function K1($,Z={}){let Q=nV(),W=_0();Zz(Xz(Q),{recursive:!0});let J=F6.parse($);if(!W.telemetryOptOut&&J.telemetryOptOut)Kj(Z.telemetry);Jz(Q,`${JSON.stringify(J,null,2)}
|
|
2
|
+
`,"utf8"),jz()}function WZ(){return _0().telemetryOptOut}function aV($,Z={}){K1({..._0(),telemetryOptOut:$},Z)}function sV(){return _0().autoUpdateEnabled}function oV($,Z={}){K1({..._0(),autoUpdateEnabled:$},Z)}function tV(){return _0().compactionStrategy??"basic"}function eV($){K1({..._0(),compactionStrategy:$})}function F1($){return new Set($??_0().disabledTools??[])}function A6($){return new Set($??_0().disabledPlugins??[])}function $H($){return F1().has($)}function JZ($){let Z=_0(),Q=new Set(Z.disabledTools??[]),W=Q.has($);if(W)Q.delete($);else Q.add($);return K1({...Z,disabledTools:[...Q]}),!W}function kW($,Z){let Q=[...new Set($.map((X)=>X.trim()).filter(Boolean))];if(Q.length===0)return;let W=_0(),J=F1(W.disabledTools);for(let X of Q)if(Z)J.add(X);else J.delete(X);K1({...W,disabledTools:[...J]})}function ZH($,Z){return kW([$],Z),Z}function QH($){return A6().has($)}function WH($,Z){let Q=$.trim();if(!Q)return;let W=_0(),J=A6(W.disabledPlugins);if(Z)J.add(Q);else J.delete(Q);K1({...W,disabledPlugins:[...J]})}function XZ($,Z){let Q=A6(Z);if(Q.size===0)return[...$];return $.filter((W)=>!Q.has(W))}function g1($,Z){let Q=F1(Z);if(Q.size===0)return[...$];return $.filter((W)=>!Q.has(W.name))}function YZ($,Z){if(!$||$.length===0)return $;let Q=F1(Z);if(Q.size===0)return $;return $.map((W)=>{if(!W.setup)return W;return{...W,setup:(J,X)=>W.setup?.({...J,registerTool:(Y)=>{if(!Q.has(Y.name))J.registerTool(Y)}},X)}})}var iV,Yz,F6,QZ;var Y1=p$(()=>{L0();iV=Q2.preprocess(($)=>Array.isArray($)?$.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter(Boolean):void 0,Q2.array(Q2.string()).optional()).transform(($)=>{if(!$)return;let Z=[...new Set($)].sort((Q,W)=>Q.localeCompare(W));return Z.length>0?Z:void 0}),Yz=Q2.enum(["basic","agentic"]).catch("basic"),F6=Q2.object({telemetryOptOut:Q2.boolean().default(!1).catch(!1),autoUpdateEnabled:Q2.boolean().default(!0).catch(!0),compactionStrategy:Yz.optional(),disabledTools:iV.optional(),disabledPlugins:iV.optional()}).strip().transform(($)=>{let Z={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.compactionStrategy)Z.compactionStrategy=$.compactionStrategy;if($.disabledTools?.length)Z.disabledTools=$.disabledTools;if($.disabledPlugins?.length)Z.disabledPlugins=$.disabledPlugins;return Z})});var OH={};N(OH,{normalizeUserMessage:()=>HT,buildInitialUserContent:()=>VT});async function VT($,Z,Q,W){let J=BT(Z),X=await KT(Q,W);if(J.length===0&&!X)return $;let Y=[{type:"text",text:$},...J];if(X)Y.push(...X);return Y}function HT($){if($==null)return"";if(typeof $==="string")return $;let Z=$.content;if(typeof Z==="string")return Z;if(!Array.isArray(Z))return"";let Q=[];for(let W of Z)if(W&&typeof W==="object"&&W.type==="text"){let J=W.text;if(typeof J==="string")Q.push(J)}return Q.join(`
|
|
3
|
+
`)}function BT($){if(!$||$.length===0)return[];let Z=[];for(let Q of $){let W=GT(Q);if(W)Z.push(W)}return Z}function GT($){let Z=$.trim();if(!Z)return;let Q=Z.match(/^data:([^;,]+);base64,(.+)$/);if(Q){let W=Q[1],J=Q[2];if(!W||!J)return;return{type:"image",mediaType:W,data:J}}return{type:"image",mediaType:"image/png",data:Z}}async function KT($,Z){if(!$||$.length===0)return;let Q=Z??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),W=await Promise.all($.map(async(J)=>{let X=J.replace(/\\/g,"/");try{let Y=await Q(J);return{type:"file",path:X,content:Y}}catch(Y){let j=Y instanceof Error?Y.message:String(Y);return{type:"file",path:X,content:`Error fetching content: ${j}`}}}));if(W.length===0)return;return W}var eG={};N(eG,{updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>l8,updateMcpServerOAuthStateAsync:()=>H5,updateMcpServerOAuthState:()=>O2,setMcpServerDisabled:()=>z2,resolveMcpServerRegistrations:()=>p0,resolveDefaultMcpSettingsPath:()=>$0,registerMcpServersFromSettingsFile:()=>q2,normalizeMcpServerOAuthState:()=>p8,loadMcpSettingsFile:()=>_2,listMcpServerOAuthStatuses:()=>B5,hasMcpSettingsFile:()=>p1,getMcpServerOAuthState:()=>T2,McpSettingsUpdateSkippedError:()=>d8,McpSettingsMutatorPurityError:()=>w$,McpSettingsLockTimeoutError:()=>P$});import{existsSync as gG,mkdirSync as p3,readFileSync as mG,renameSync as n3,rmdirSync as KR,rmSync as r3,statSync as FR,unlinkSync as vG,writeFileSync as cG}from"node:fs";import{randomUUID as AR}from"node:crypto";import{dirname as uG,join as xG}from"node:path";import{setTimeout as fR}from"node:timers/promises";import{resolveMcpSettingsPath as UR}from"@cline/shared/storage";import{z as S}from"zod";function i3($){if(!$)return;if($==="http")return"streamableHttp";return $}function $0(){return UR()}function NR($,Z){p3(uG($),{recursive:!0});let Q=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{cG(Q,Z,{encoding:"utf8",flag:"wx"}),n3(Q,$)}catch(W){try{vG(Q)}catch{}throw W}}function wR($){Atomics.wait(CR,0,0,$)}function PR($){return`${$}.lock`}function rG(){return`${process.pid}.${Date.now()}.${AR()}`}function iG($,Z){p3(uG($),{recursive:!0});let Q=`${$}.tmp.${Z}`;r3(Q,{recursive:!0,force:!0}),p3(Q,{recursive:!0}),cG(xG(Q,`owner.${Z}`),Z,{encoding:"utf8",flag:"wx"});try{return n3(Q,$),{lockDir:$,ownerFile:xG($,`owner.${Z}`)}}catch(W){if(r3(Q,{recursive:!0,force:!0}),gG($))return;throw W}}function nG($,Z){let Q;try{Q=Date.now()-FR($).mtimeMs}catch(J){if(J.code==="ENOENT")return;throw J}if(Q<s3)return;Z.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Q}ms); reclaiming.`,{severity:"warn"});let W=`${$}.stale.${rG()}`;try{n3($,W)}catch(J){if(J.code==="ENOENT")return;throw J}r3(W,{recursive:!0,force:!0})}function SR($){try{vG($.ownerFile)}catch(Z){if(Z.code!=="ENOENT")throw Z}try{KR($.lockDir)}catch(Z){let Q=Z.code;if(Q!=="ENOENT"&&Q!=="ENOTEMPTY"&&Q!=="EEXIST")throw Z}}function aG($){let Z=PR($);if(KQ.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:rG()}}function bR($,Z){let{lockDir:Q,token:W}=aG($),J=Z.timeoutMs??s3,X=Date.now();while(!0){let Y=iG(Q,W);if(Y)return KQ.add(Q),Y;if(Date.now()-X>J)throw new P$(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);nG(Q,Z),wR(pG)}}async function yR($,Z){let{lockDir:Q,token:W}=aG($),J=Z.timeoutMs??s3,X=Date.now();while(!0){let Y=iG(Q,W);if(Y)return KQ.add(Q),Y;if(Date.now()-X>J)throw new P$(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);nG(Q,Z),await fR(pG)}}function sG($,Z,Q){try{let W=hR(Z),J=kR(W,Q);return NR(Z,`${JSON.stringify(W,null,2)}
|
|
4
|
+
`),J}finally{KQ.delete($.lockDir),SR($)}}function j1($,Z,Q={}){let W=bR($,Q);return sG(W,$,Z)}async function l8($,Z,Q={}){let W=await yR($,Q);return sG(W,$,Z)}function hR($){let Z=xR($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function kR($,Z){let Q=JSON.stringify($),W=JSON.parse(Q),J=Z(W),X=JSON.stringify(W),Y=Z($);if(JSON.stringify($)!==X)throw new w$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(Y)!==JSON.stringify(J))throw new w$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return Y}function IR($){let Z=mG($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(W){let J=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${$}": ${J}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function xR($){try{return IR($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function oG($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function gR($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function _2($={}){let Z=$.filePath??$0(),Q=mG(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(X){let Y=X instanceof Error?X.message:String(X);throw Error(`Failed to parse MCP settings JSON at "${Z}": ${Y}`)}let J=ER.safeParse(W);if(!J.success){let X=J.error.issues.map((Y)=>{let j=Y.path.join(".");return j?`${j}: ${Y.message}`:Y.message}).join("; ");throw Error(`Invalid MCP settings at "${Z}": ${X}`)}return J.data}function p8($){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 mR($){if($===void 0)return;let Z=a3.safeParse($);if(!Z.success)return;return p8(Z.data)}function p1($={}){let Z=$.filePath??$0();return gG(Z)}function p0($={}){let Z=_2($);return Object.entries(Z.mcpServers).map(([Q,W])=>({name:Q,transport:W.transport,disabled:W.disabled,metadata:W.metadata,oauth:W.oauth}))}function z2($){let Z=$.filePath??$0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");j1(Z,(W)=>{let J=W.mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let X={...J},Y=oG(X,Q);if(!Y)throw Error(`Unknown MCP server: ${Q}`);let j={...Y};if($.disabled)j.disabled=!0;else delete j.disabled;gR(X,Q,j),W.mcpServers=X})}function T2($,Z={}){let Q=_2(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return p8(Q.mcpServers[$]?.oauth)}function tG($,Z){return(Q)=>{let W=Q.mcpServers,J=oG(W,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let X=mR(J.oauth)??{},Y=p8(Z(X));if(Y)J.oauth=Y;else delete J.oauth;return Y??{}}}function O2($,Z,Q={}){let W=Q.filePath??$0();return j1(W,tG($,Z))}async function H5($,Z,Q={}){let W=Q.filePath??$0();return l8(W,tG($,Z))}function B5($={}){return p0($).map((Q)=>{let W=Q.transport.type!=="stdio",J=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:W,oauthConfigured:W&&typeof J==="string"&&J.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,W)=>Q.serverName.localeCompare(W.serverName))}async function q2($,Z={}){let Q=p0(Z);for(let W of Q)await $.registerServer(W);return Q}var V5,dG,a3,DR,LR,_R,zR,TR,OR,lG,qR,MR,RR,ER,d8,P$,w$,s3=1e4,pG=25,CR,KQ;var FQ=p$(()=>{V5=S.record(S.string(),S.string()),dG=S.record(S.string(),S.unknown()),a3=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(),DR=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:V5.optional()}),LR=S.object({type:S.literal("sse"),url:S.string().url(),headers:V5.optional()}),_R=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:V5.optional()}),zR=S.discriminatedUnion("type",[DR,LR,_R]),TR=S.object({transport:zR,disabled:S.boolean().optional(),metadata:dG.optional(),oauth:a3.optional()}),OR=S.enum(["stdio","sse","http","streamableHttp"]).optional(),lG=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:OR,disabled:S.boolean().optional(),metadata:dG.optional(),oauth:a3.optional()});qR=lG.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:V5.optional()}).superRefine(($,Z)=>{let Q=$.type??i3($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth})),MR=lG.extend({url:S.string().url(),headers:V5.optional()}).superRefine(($,Z)=>{let Q=$.type??i3($.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??i3($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth}}),RR=S.union([TR,qR,MR]),ER=S.object({mcpServers:S.record(S.string(),RR)}).passthrough();d8=class d8 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};P$=class P$ extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};w$=class w$ extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};CR=new Int32Array(new SharedArrayBuffer(4)),KQ=new Set});import{existsSync as tw,mkdirSync as ew,readFileSync as $P,writeFileSync as ZP}from"node:fs";import{resolve as QP}from"node:path";import{resolveSessionDataDir as WP}from"@cline/shared/storage";import{nanoid as JP}from"nanoid";import*as XP from"node-machine-id";function h0($){let Z=$?.trim();if(Z)return Z;let Q=VP();if(Q)return Q;return HP()}function jP(){let $=XP;return $.machineIdSync??$.default?.machineIdSync}function VP(){try{let $=jP();if(!$)return;return $().trim()||void 0}catch{return}}function HP(){let $=WP(),Z=QP($,YP);try{if(tw(Z)){let W=$P(Z,"utf8").trim();if(W.length>0)return W}}catch{}let Q=`cl-${JP()}`;try{ew($,{recursive:!0}),ZP(Z,Q,"utf8")}catch{}return Q}var YP="machine-id";var Z4=()=>{};class d5{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,Z){if(!this.isEnabled())return;this.emitLog($,Z,!1)}emitRequired($,Z){this.emitLog($,Z,!0)}recordCounter($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.counters.get($);if(!X)X=this.meter.createCounter($,W?{description:W}:void 0),this.counters.set($,X);X.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.histograms.get($);if(!X)X=this.meter.createHistogram($,W?{description:W}:void 0),this.histograms.set($,X);X.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.buildAttributes(Q),Y=JSON.stringify(X),j=this.gaugeValues.get($);if(Z===null){if(j){if(j.delete(Y),j.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=j;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let H=this.meter.createObservableGauge($,W?{description:W}:void 0);H.addCallback((B)=>{for(let G of this.snapshotGaugeSeries($))B.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set($,H)}V.set(Y,{value:Z,attributes:X})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,Z,Q){if(!this.logger)return;let W=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:W})}buildAttributes($,Z=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...Z?{_required:!0}:{}}}snapshotGaugeSeries($){let Z=this.gaugeValues.get($);if(!Z)return[];return Array.from(Z.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,Z="",Q=new WeakSet,W=0){if(!$)return{};let J={},X=100,Y=10;for(let[j,V]of Object.entries($)){if(j==="__proto__"||j==="constructor"||j==="prototype")continue;let H=Z?`${Z}.${j}`:j;if(V===null||V===void 0){J[H]=String(V);continue}if(Array.isArray(V)){let B=V.length>X?V.slice(0,X):V;try{J[H]=JSON.stringify(B)}catch{J[H]="[UnserializableArray]"}if(V.length>X)J[`${H}_truncated`]=!0,J[`${H}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){J[H]=V.toISOString();continue}if(V instanceof Error){J[H]=V.message;continue}if(Q.has(V)){J[H]="[Circular]";continue}if(W>=Y){J[H]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(J,this.flattenProperties(V,H,Q,W+1));continue}if(hS(V)){J[H]=V;continue}try{J[H]=JSON.stringify(V)}catch{J[H]=String(V)}}return J}}function hS($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class l5{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,Z){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:Z})}emitRequired($,Z){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:Z})}recordCounter($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordHistogram($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordGauge($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:W,required:J===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class D4{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new l5({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let Z=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,Z)}captureRequired($,Z){let Q=this.buildAttributes(Z);for(let W of this.adapters)W.emitRequired($,Q)}recordCounter($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordCounter($,Z,X,W,J)}recordHistogram($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordHistogram($,Z,X,W,J)}recordGauge($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordGauge($,Z,X,W,J)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var KX=()=>{};import{metrics as kS,trace as IS}from"@opentelemetry/api";import{logs as xS}from"@opentelemetry/api-logs";import{OTLPLogExporter as gS}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as mS}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as vS}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as cS}from"@opentelemetry/resources";import{BatchLogRecordProcessor as uS,ConsoleLogRecordExporter as dS,LoggerProvider as lS}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as pS,MeterProvider as rS,PeriodicExportingMetricReader as PA}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as iS,ConsoleSpanExporter as nS,SimpleSpanProcessor as aS}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as sS}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as oS,ATTR_SERVICE_VERSION as tS}from"@opentelemetry/semantic-conventions";class SA{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 L4{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=cS({[oS]:$.serviceName??"cline",...$.serviceVersion?{[tS]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)kS.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)xS.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return IS.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new d5({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new D4({...$,adapters:[Z],distinctId:h0($.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=FX(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),W=Math.min(30000,Math.floor(Q*0.8)),J=Z.map((X)=>Zb(X,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:W})).filter((X)=>X!==null);if(J.length===0)return null;return new rS({resource:$,readers:J})}createTracerProvider($){let Z=FX(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,W=this.options.otlpTracesHeaders??this.options.otlpHeaders,J=[];for(let X of Z){let Y=$b(X,{endpoint:Q,headers:W,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(Y)J.push(Y)}if(J.length===0)return null;return new sS({resource:$,spanProcessors:J})}createLoggerProvider($){let Z=FX(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((W)=>{let J=eS(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new uS(J,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((W)=>W!==null);if(Q.length===0)return null;return new lS({resource:$,processors:Q})}}function p5($){let Z=new L4($),Q=Z.createTelemetryService($);return Q.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion}),{provider:Z,telemetry:Q}}function $$($){if(WZ())return{telemetry:new SA($)};if($.enabled!==!0)return{telemetry:new D4({...$,distinctId:h0($.distinctId)})};return p5($)}function _4($){let{telemetry:Z,provider:Q}=$$($);return{telemetry:Z,provider:Q,flush:async()=>{let X=Q;if(X&&typeof X.forceFlush==="function")try{await X.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])}}}function FX($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function eS($,Z){if($==="console")return new dS;if(!Z.endpoint)return null;let Q=AX(Z.endpoint,"/v1/logs");return new gS({url:Q,headers:Z.headers})}function $b($,Z){if($==="console")return new aS(new nS);if(!Z.endpoint)return null;let Q=AX(Z.endpoint,"/v1/traces");return new iS(new vS({url:Q,headers:Z.headers}))}function Zb($,Z){if($==="console")return new PA({exporter:new pS,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=AX(Z.endpoint,"/v1/metrics");return new PA({exporter:new mS({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function AX($,Z){let Q=new URL($),W=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=W.endsWith(Z)?W:`${W}${Z}`,Q.toString()}var oQ=p$(()=>{Y1();Z4();KX()});var vf={};N(vf,{resolveCoreDistinctId:()=>h0,createOpenTelemetryTelemetryService:()=>p5,createConfiguredTelemetryService:()=>$$,createConfiguredTelemetryHandle:()=>_4,OpenTelemetryProvider:()=>L4,OpenTelemetryAdapter:()=>d5});var H7=p$(()=>{Z4();oQ()});import{AgentRuntimeAbortError as Sg}from"@cline/agents";import{initVcr as bg,resolveClineBuildEnv as yg}from"@cline/shared";import{normalizeProviderId as Cg}from"@cline/llms";var BD={};N(BD,{LocalRuntimeHost:()=>T1});import{readdirSync as _g}from"node:fs";import{homedir as zg}from"node:os";import{isAbsolute as Tg,join as $j,resolve as Zj}from"node:path";import{captureSdkError as n2,createSessionId as Og,isLikelyAuthError as qg,normalizeUserInput as Mg}from"@cline/shared";import{setHomeDirIfUnset as Rg}from"@cline/shared/storage";var uj={};N(uj,{saveProviderOAuthCredentials:()=>n$,resolveProviderApiKeyFromSettings:()=>fW,loginAndSaveProviderOAuthCredentials:()=>c4,isOAuthProvider:()=>i$,getProviderOAuthCredentialsFromSettings:()=>u4,getProviderAuthStorageId:()=>AW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>X8,formatProviderOAuthApiKey:()=>UW});import{getClineEnvironmentConfig as vj}from"@cline/shared";L0();var qj={};N(qj,{startClineDeviceAuth:()=>HW,refreshClineToken:()=>h9,loginClineOAuth:()=>h4,getValidClineCredentials:()=>k4,completeClineDeviceAuth:()=>BW});import{getClineEnvironmentConfig as JW}from"@cline/shared";var Aj={};N(Aj,{startLocalOAuthServer:()=>W1});function SD(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function W1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",W=$.timeoutMs??300000,J=$.successHtml??bD,X=SD(),Y=!1,j=null,V=null,H=null,B=(F)=>{if(Y)return;Y=!0,X.resolve(F)},G=()=>{if(j)clearTimeout(j),j=null;let F=H;if(H=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:F})).catch(()=>{})},K=async()=>{return j=setTimeout(()=>{G(),B(null)},W),X.promise};for(let F of $.ports){let A=Z.createServer((f,D)=>{try{let U=new URL(f.url||"",`http://${Q}:${F}`);if(U.pathname!==$.callbackPath){D.statusCode=404,D.end("Not found");return}let T={url:U,code:U.searchParams.get("code")??void 0,state:U.searchParams.get("state")??void 0,provider:U.searchParams.get("provider")??void 0,error:U.searchParams.get("error")??void 0};if(T.error){D.statusCode=400,D.end(`Authentication failed: ${T.error}`),G(),B(T);return}if(!T.code){D.statusCode=400,D.end("Missing authorization code");return}if($.expectedState&&T.state!==$.expectedState){D.statusCode=400,D.end("State mismatch");return}D.statusCode=200,D.setHeader("Content-Type","text/html; charset=utf-8"),D.end(J),G(),B(T)}catch{D.statusCode=500,D.end("Internal error")}}),L=await new Promise((f)=>{let D=(U)=>{A.off("error",D),f({bound:!1,error:U})};A.once("error",D),A.listen(F,Q,()=>{A.off("error",D),V=A,f({bound:!0})})});if(L.error){if(L.error.code==="EADDRINUSE")continue;throw G(),L.error}if(L.bound){H=F;let f=`http://${Q}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:F,callbackUrl:f})).catch(()=>{});return{callbackUrl:f,waitForCallback:K,cancelWait:()=>{G(),B(null)},close:()=>{G(),B(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var bD=`<!DOCTYPE html>
|
|
5
5
|
<html lang="en">
|
|
6
6
|
<head>
|
|
7
7
|
<meta charset="utf-8">
|
|
@@ -42,14 +42,14 @@ import{createRequire as OD}from"node:module";var{defineProperty:QW,getOwnPropert
|
|
|
42
42
|
</div>
|
|
43
43
|
<script>setTimeout(() => window.close(), 3000);</script>
|
|
44
44
|
</body>
|
|
45
|
-
</html>`;function fj($){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 SD($){let Q=new TextEncoder().encode($),W=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(W)}function bD($=32){let Z=new Uint8Array($);return crypto.getRandomValues(Z),fj(Z)}async function S9(){let $=bD(),Z=fj(await SD($));return{verifier:$,challenge:Z}}function b9($){return $.endsWith("/")?$.slice(0,-1):$}function r$($,Z){return new URL(Z,`${b9($)}/`).toString()}function e2($,Z={}){let Q=$.trim();if(!Q)return{};try{let W=new URL(Q);return{code:W.searchParams.get("code")??void 0,state:W.searchParams.get("state")??void 0,provider:Z.includeProvider?W.searchParams.get("provider")??void 0:void 0}}catch{}if(Z.allowHashCodeState&&Q.includes("#")){let[W,J]=Q.split("#",2);return{code:W||void 0,state:J||void 0}}if(Q.includes("code=")){let W=new URLSearchParams(Q);return{code:W.get("code")??void 0,state:W.get("state")??void 0,provider:Z.includeProvider?W.get("provider")??void 0:void 0}}return{code:Q}}function yD($){if(typeof atob==="function")try{return atob($)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from($,"base64").toString("utf8")}catch{return null}return null}function M0($){if(!$)return null;try{let Z=$.split(".");if(Z.length!==3)return null;let Q=Z[1];if(!Q)return null;let W=Q.replace(/-/g,"+").replace(/_/g,"/"),J=W.padEnd(W.length+(4-W.length%4)%4,"="),X=yD(J);if(!X)return null;return JSON.parse(X)}catch{return null}}function $8($){try{let Z=JSON.parse($),Q=Z.error,W=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,J=typeof Z.error_description==="string"?Z.error_description:typeof Z.message==="string"?Z.message:Q&&typeof Q==="object"&&typeof Q.message==="string"?Q.message:void 0;return{code:W,message:J}}catch{return{}}}function Z8($,Z){return Date.now()>=$.expires-Z}async function Q8($){if(!$.onManualCodeInput){let X=await $.waitForCallback();return{code:X?.code,state:X?.state,provider:X?.provider,error:X?.error}}let Z,Q,W=$.onManualCodeInput().then((X)=>{Z=X,$.cancelWait()}).catch((X)=>{Q=X instanceof Error?X:Error(String(X)),$.cancelWait()}),J=await $.waitForCallback();if(Q)throw Q;if(J?.code||J?.error)return{code:J.code,state:J.state,provider:J.provider,error:J.error};if(Z)return e2(Z,$.parseOptions);if(await W,Q)throw Q;if(Z)return e2(Z,$.parseOptions);return{}}var y9={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},_j={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},JW="https://api.workos.com",hD="/auth",Uj=Array.from({length:11},($,Z)=>48801+Z),kD=300000,ID=30000,W8=30000,xD=300,gD=5;class j$ extends Error{status;errorCode;constructor($,Z){super($);this.name="ClineOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function mD($){let Z=Date.parse($);if(Number.isNaN(Z))throw Error(`Invalid expiresAt value: ${$}`);return Z}function XW($,Z,Q={}){let W=$.userInfo.clineUserId??Q.accountId,J=$.refreshToken??Q.refresh;if(!J)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:J,expires:mD($.expiresAt),accountId:W??void 0,email:$.userInfo.email||Q.email,metadata:{provider:Z,tokenType:$.tokenType,userInfo:$.userInfo}}}async function YW($){if(!$)return{};return typeof $==="function"?await $():$}function Dj($,Z){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return Z;return Math.floor($)}async function Lj($){await new Promise((Z)=>setTimeout(Z,$))}function jW($,Z){if(!$.success||!$.data?.accessToken)throw Error(Z);return $.data}async function zj($,Z){let Q=await fetch(r$(JW,_j.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(Z?.requestTimeoutMs??W8)}),W=await Q.json().catch(()=>({}));if(!Q.ok)throw new j$(`Device authorization failed: ${Q.status}${W.error_description?` - ${W.error_description}`:""}`,{status:Q.status,errorCode:W.error});if(!W.device_code||!W.user_code||!W.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:W.device_code,userCode:W.user_code,verificationUri:W.verification_uri,verificationUriComplete:W.verification_uri_complete,expiresInSeconds:Dj(W.expires_in,xD),pollIntervalSeconds:Dj(W.interval,gD)}}async function Tj($){let Z=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=Z){let W=await fetch(r$($.workosApiBaseUrl,_j.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),J=await W.json().catch(()=>({}));if(W.ok){if(!J.access_token||!J.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:J.access_token,refreshToken:J.refresh_token,tokenType:J.token_type??"Bearer"}}switch(J.error){case"authorization_pending":{await Lj(Q*1000);break}case"slow_down":{Q+=1,await Lj(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new j$(J.error_description||"WorkOS authorization failed",{status:W.status,errorCode:J.error});default:throw new j$(`WorkOS token polling failed: ${W.status}${J.error_description?` - ${J.error_description}`:""}`,{status:W.status,errorCode:J.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function Oj($,Z,Q){let W={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(r$(Z.apiBaseUrl,y9.register),{method:"POST",headers:{"Content-Type":"application/json",...await YW(Z.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Z.requestTimeoutMs??W8)});if(!J.ok){let Y=await J.text().catch(()=>""),j=$8(Y);throw new j$(`Token registration failed: ${J.status}${j.message?` - ${j.message}`:""}`,{status:J.status,errorCode:j.code})}let X=await J.json();return XW(jW(X,"Invalid token exchange response"),Q??Z.provider)}async function vD($,Z,Q,W){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:Z,provider:W??Q.provider},X=await fetch(r$(Q.apiBaseUrl,y9.token),{method:"POST",headers:{"Content-Type":"application/json",...await YW(Q.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Q.requestTimeoutMs??W8)});if(!X.ok){let j=await X.text().catch(()=>""),V=$8(j);throw new j$(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let Y=await X.json();return XW(jW(Y,"Invalid token exchange response"),W??Q.provider)}async function h4($){N1($.telemetry,$.provider??"cline");let Z=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:Uj,W=$.callbackPath??hD,J=Z?null:await W1({ports:Q,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=J?.callbackUrl||`http://127.0.0.1:${Q[0]??Uj[0]}${W}`;try{let Y;if(Z){let j=WW().workOsClientId,V=await zj(j,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let H=await Tj({clientId:j,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??W8,workosApiBaseUrl:JW,onProgress:$.callbacks.onProgress});Y=await Oj(H,$,$.provider)}else{let j=new URL(r$($.apiBaseUrl,y9.authorize));j.searchParams.set("client_type","extension"),j.searchParams.set("callback_url",X),j.searchParams.set("redirect_uri",X),$.callbacks.onAuth({url:j.toString(),instructions:"Continue the authentication process in your browser."});let V,H=$.provider,B=await Q8({waitForCallback:J?.waitForCallback??(async()=>null),cancelWait:J?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(B.error)throw Error(`OAuth error: ${B.error}`);if(V=B.code,H=B.provider??H,!V){let G=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=e2(G,{includeProvider:!0});V=K.code,H=K.provider??H}if(!V)throw Error("Missing authorization code");Y=await vD(V,X,$,H)}return w1($.telemetry,$.provider??"cline"),P1($.telemetry,{id:Y.accountId,email:Y.email,provider:$.provider??"cline"}),Y}catch(Y){throw C1($.telemetry,$.provider??"cline",Y instanceof Error?Y.message:String(Y)),Y}finally{J?.close()}}async function VW($){return await zj(WW().workOsClientId,$)}async function HW($){let Z=$.provider??"cline";N1($.telemetry,Z);try{let Q=await Tj({clientId:WW().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??W8,workosApiBaseUrl:JW}),W=await Oj(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return w1($.telemetry,Z),P1($.telemetry,{id:W.accountId,email:W.email,provider:Z}),W}catch(Q){throw C1($.telemetry,Z,Q instanceof Error?Q.message:String(Q)),Q}}async function h9($,Z){let Q=await fetch(r$(Z.apiBaseUrl,y9.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await YW(Z.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(Z.requestTimeoutMs??W8)});if(!Q.ok){let X=await Q.text().catch(()=>""),Y=$8(X);throw new j$(`Token refresh failed: ${Q.status}${Y.message?` - ${Y.message}`:""}`,{status:Q.status,errorCode:Y.code})}let W=await Q.json(),J=$.metadata?.provider??Z.provider;return XW(jW(W,"Invalid token refresh response"),J,$)}async function k4($,Z,Q){if(!$)return null;let W=Q?.refreshBufferMs??kD,J=Q?.retryableTokenGraceMs??ID;if(Q?.forceRefresh!==!0&&!Z8($,W))return $;try{return await h9($,Z)}catch(Y){if(Y instanceof j$&&Y.isLikelyInvalidGrant())return X$(Z.telemetry,Z.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}L0();var Rj={};N(Rj,{refreshOpenAICodexToken:()=>I9,loginOpenAICodex:()=>I4,getValidOpenAICodexCredentials:()=>x4,OPENAI_CODEX_OAUTH_CONFIG:()=>X0});import{nanoid as cD}from"nanoid";var X0={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class k9 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 uD($,Z,Q=X0.redirectUri){let W=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:X0.clientId,code:$,code_verifier:Z,redirect_uri:Q}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!W.ok)return{type:"failed"};let J=await W.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}async function dD($){try{let Z=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:X0.clientId}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!Z.ok){let W=await Z.text().catch(()=>""),J=$8(W);throw new k9(`Token refresh failed: ${Z.status}${J.message?` - ${J.message}`:""}`,{status:Z.status,errorCode:J.code})}let Q=await Z.json();if(!Q.access_token||!Q.refresh_token||typeof Q.expires_in!=="number")return{type:"failed"};return{type:"success",access:Q.access_token,refresh:Q.refresh_token,expires:Date.now()+Q.expires_in*1000,email:Q.email,idToken:Q.id_token}}catch(Z){if(Z instanceof k9)throw Z;return{type:"failed"}}}async function lD($="pi"){let{verifier:Z,challenge:Q}=await S9(),W=cD(32),J=new URL(X0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",X0.clientId),J.searchParams.set("redirect_uri",X0.redirectUri),J.searchParams.set("scope",X0.scopes),J.searchParams.set("code_challenge",Q),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("state",W),J.searchParams.set("id_token_add_organizations","true"),J.searchParams.set("codex_cli_simplified_flow","true"),J.searchParams.set("originator",$),{verifier:Z,state:W,url:J.toString()}}function pD(){try{let $=new URL(X0.redirectUri),Z=$.port.length>0?Number.parseInt($.port,10):X0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(Z)?Z:X0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:X0.callbackPort,callbackPath:"/auth/callback",redirectUri:X0.redirectUri}}}function rD($,Z){let Q=Z?M0(Z):M0($),W=Q?Q:M0($),X=W?.[X0.jwtClaimPath]?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;let Y=W?.organizations;if(Array.isArray(Y)&&Y.length>0){let V=Y[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let j=W?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return null}function Mj($,Z){let Q=rD($.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 I4($){N1($.telemetry,"openai-codex");let Z=pD(),{verifier:Q,state:W,url:J}=await lD($.originator),X=await W1({host:Z.host,ports:[Z.port],callbackPath:Z.callbackPath,expectedState:W});$.onAuth({url:J,instructions:"Continue the authentication process in your browser."});let Y;try{let j=await Q8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(j.state&&j.state!==W)throw Error("State mismatch");if(Y=j.code,!Y){let B=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=e2(B,{allowHashCodeState:!0});if(G.state&&G.state!==W)throw Error("State mismatch");Y=G.code}if(!Y)throw Error("Missing authorization code");let V=await uD(Y,Q,Z.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let H=Mj(V);return w1($.telemetry,"openai-codex"),P1($.telemetry,{id:H.accountId,email:H.email,provider:"openai-codex"}),H}catch(j){throw C1($.telemetry,"openai-codex",j instanceof Error?j.message:String(j)),j}finally{X.close()}}async function I9($,Z){let Q=await dD($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let W=Mj(Q,Z);if(!W.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return W}async function x4($,Z){if(!$)return null;let Q=Z?.refreshBufferMs??X0.refreshBufferMs,W=Z?.retryableTokenGraceMs??X0.retryableTokenGraceMs;if(Z?.forceRefresh!==!0&&!Z8($,Q))return $;try{return await I9($.refresh,$)}catch(X){if(X instanceof k9&&X.isLikelyInvalidGrant())return X$(Z?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}L0();var mj={};N(mj,{refreshOcaToken:()=>v9,loginOcaOAuth:()=>m4,getValidOcaCredentials:()=>v4,OCI_HEADER_OPC_REQUEST_ID:()=>iD,DEFAULT_INTERNAL_OCA_BASE_URL:()=>x9,DEFAULT_INTERNAL_IDCS_URL:()=>wj,DEFAULT_INTERNAL_IDCS_SCOPES:()=>Cj,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>Nj,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>g9,DEFAULT_EXTERNAL_IDCS_URL:()=>Sj,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>bj,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>Pj});import{nanoid as Ej}from"nanoid";class BW{ttlMs;maxEntries;entries=new Map;constructor($,Z){this.ttlMs=$;this.maxEntries=Z}get($,Z=Date.now()){this.pruneExpired(Z);let Q=this.entries.get($);if(!Q)return;return this.entries.delete($),this.entries.set($,Q),Q.value}set($,Z,Q=Date.now(),W=this.ttlMs){this.pruneExpired(Q),this.entries.delete($);while(this.entries.size>=this.maxEntries){let J=this.entries.keys().next().value;if(J===void 0)break;this.entries.delete(J)}this.entries.set($,{value:Z,expiresAt:Q+W})}pruneExpired($){for(let[Z,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(Z)}}var Nj="a8331954c0cf48ba99b5dd223a14c6ea",wj="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",Cj="openid offline_access",x9="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",Pj="c1aba3deed5740659981a752714eba33",Sj="https://login-ext.identity.oraclecloud.com",bj="openid offline_access",g9="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",iD="opc-request-id",nD="/auth/oca",aD=Array.from({length:11},($,Z)=>48801+Z),sD=300000,oD=30000,yj=30000,tD=600000;class m9 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 V$={internal:{clientId:Nj,idcsUrl:wj,scopes:Cj,baseUrl:x9},external:{clientId:Pj,idcsUrl:Sj,scopes:bj,baseUrl:g9}},g4=new Map,eD=86400000,$L=300000,ZL=32,GW=new BW(eD,ZL);function hj($){if(typeof $==="function")return $();return $??"internal"}function kj($){return{internal:{clientId:$?.internal?.clientId??V$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??V$.internal.idcsUrl,scopes:$?.internal?.scopes??V$.internal.scopes,baseUrl:$?.internal?.baseUrl??V$.internal.baseUrl},external:{clientId:$?.external?.clientId??V$.external.clientId,idcsUrl:$?.external?.idcsUrl??V$.external.idcsUrl,scopes:$?.external?.scopes??V$.external.scopes,baseUrl:$?.external?.baseUrl??V$.external.baseUrl}}}function QL($=Date.now()){let Z=$-tD;for(let[Q,W]of g4.entries())if(W.createdAt<Z)g4.delete(Q)}function WL($,Z,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=M0(Z)?.exp;if(typeof J==="number"&&J>0)return J*1000;let Y=M0(Q)?.exp;if(typeof Y==="number"&&Y>0)return Y*1000;return Date.now()+3600000}function Ij($,Z,Q){let W=$.access_token;if(!W)throw Error("Token response did not include an access token");let J=$.refresh_token??Q?.refresh;if(!J)throw Error("Token response did not include a refresh token");let X=M0($.id_token),Y=M0(W),j=X?.sub??Y?.sub,V=X?.email??Y?.email;return{access:W,refresh:J,expires:WL($,W,$.id_token),accountId:j??Q?.accountId,email:V??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:Z,subject:j,idToken:$.id_token}}}async function xj($,Z){let Q=b9($),W=GW.get(Q);if(W)return W;let J=`${Q}/.well-known/openid-configuration`,X=await fetch(J,{method:"GET",signal:AbortSignal.timeout(Z)});if(!X.ok){let V=`${Q}/oauth2/v1/token`;return GW.set(Q,V,Date.now(),$L),V}let j=(await X.json()).token_endpoint||`${Q}/oauth2/v1/token`;return GW.set(Q,j),j}function gj($){return{code:$.error,message:$.error_description}}async function JL($){let Z=g4.get($.state);if(!Z)throw Error("No PKCE verifier found for this state");g4.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,W=await xj(Q.idcsUrl,$.requestTimeoutMs),J=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:Z.redirectUri,client_id:Q.clientId,code_verifier:Z.verifier}),X=await fetch(W,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:J,signal:AbortSignal.timeout($.requestTimeoutMs)}),Y=await X.json();if(!X.ok){let V=gj(Y);throw new m9(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let j=M0(Y.id_token);if(!Y.id_token||!j)throw Error("No ID token received from OCA");if(j.nonce!==Z.nonce)throw Error("OIDC nonce verification failed");return Ij(Y,$.mode)}function XL($){let Z=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${b9(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 m4($){N1($.telemetry,"oca");let Z=kj($.config),Q=hj($.mode),W=$.callbackPorts?.length?$.callbackPorts:aD,J=$.callbackPath??nD,X=$.requestTimeoutMs??yj,Y=await W1({ports:W,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=Y.callbackUrl;if(!j)throw Error("Unable to bind local OAuth callback server");let V=Ej(16),H=Ej(16),{verifier:B,challenge:G}=await S9();QL(),g4.set(V,{verifier:B,nonce:H,mode:Q,redirectUri:j,createdAt:Date.now()});let K=XL({callbackUrl:j,mode:Q,state:V,nonce:H,challenge:G,config:Z});$.callbacks.onAuth({url:K,instructions:"Continue the authentication process in your browser."});try{let F=await Q8({waitForCallback:Y.waitForCallback,cancelWait:Y.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),A=F.code,L=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!A){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!L||L!==V)throw Error("State mismatch");let f=await JL({code:A,state:L,mode:Q,config:Z,requestTimeoutMs:X});return w1($.telemetry,"oca"),P1($.telemetry,{id:f.accountId,email:f.email,provider:"oca"}),f}catch(F){throw C1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{Y.close()}}async function v9($,Z={}){let Q=kj(Z.config),W=Z.requestTimeoutMs??yj,J=$.metadata?.mode,X=J==="internal"||J==="external"?J:hj(Z.mode),Y=X==="external"?Q.external:Q.internal,j=await xj(Y.idcsUrl,W),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:Y.clientId}),H=await fetch(j,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(W)}),B=await H.json();if(!H.ok){let G=gj(B);throw new m9(`Token refresh failed: ${H.status}${G.message?` - ${G.message}`:""}`,{status:H.status,errorCode:G.code})}return Ij(B,X,$)}async function v4($,Z,Q){if(!$)return null;let W=Z?.refreshBufferMs??Q?.refreshBufferMs??sD,J=Z?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??oD;if(Z?.forceRefresh!==!0&&!Z8($,W))return $;try{return await v9($,Q)}catch(Y){if(Y instanceof m9&&Y.isLikelyInvalidGrant())return X$(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}var c9="workos:";function YL($){let Z=$.trim();return Z.toLowerCase().startsWith(c9)?Z:`${c9}${Z}`}function jL($){let Z=$.trim();return Z.toLowerCase().startsWith(c9)?Z.slice(c9.length):Z}function VL($){let Q=M0($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function HL($,Z){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let W=VL(Z);if(W)return W;return Date.now()-1}function BL($,Z){let Q=$.auth?.accessToken?.trim(),W=$.auth?.refreshToken?.trim();if(!Q||!W)return null;let J=Z?.normalizeAccessToken?.(Q)??Q;if(!J)return null;return{access:J,refresh:W,expires:HL($,J),accountId:$.auth?.accountId}}function GL($){let Z=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:Z,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},W={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(W,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return W}function KW($){let Z=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:Z,getApiKey(Q){let W=Q?.auth?.accessToken?.trim();if(W)return $.formatAccessToken?.(W)??W;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return GL({...Q,storageProviderId:Z,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function cj($){return KW({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:YL,normalizeStoredAccessToken:jL,login:({settings:Z,callbacks:Q,telemetry:W})=>h4({apiBaseUrl:Z?.baseUrl?.trim()||vj().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:W}),refresh:({settings:Z,credentials:Q,forceRefresh:W,telemetry:J})=>k4(Q,{apiBaseUrl:Z.baseUrl?.trim()||vj().apiBaseUrl,telemetry:J},{forceRefresh:W})})}var KL=[cj({providerId:"cline"}),cj({providerId:"cline-pass",storageProviderId:"cline"}),KW({providerId:"oca",login:({settings:$,callbacks:Z,telemetry:Q})=>m4({mode:$?.oca?.mode,callbacks:Z,telemetry:Q}),refresh:({settings:$,credentials:Z,forceRefresh:Q,telemetry:W})=>v4(Z,{forceRefresh:Q,telemetry:W},{mode:$.oca?.mode,telemetry:W})}),KW({providerId:"openai-codex",login:({callbacks:$,telemetry:Z})=>I4({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:Z}),refresh:({credentials:$,forceRefresh:Z,telemetry:Q})=>x4($,{forceRefresh:Z,telemetry:Q})})],FL=new Map(KL.map(($)=>[$.providerId,$]));function j0($){return FL.get($.trim().toLowerCase())}function i$($){return j0($)!==void 0}function FW($){return j0($)?.storageProviderId}function AW($,Z){let Q=j0(Z),W=Q?.storageProviderId??Z,J=$.getProviderSettings(W);return Q?.getApiKey(J)??J8(Z,J)}async function c4($,Z,Q){let W=j0(Z);if(!W)throw Error(`Provider "${Z}" does not support OAuth login`);let J=$.getProviderSettings(W.storageProviderId),X=await W.login({settings:J,callbacks:Q.callbacks,telemetry:Q.telemetry});return W.saveCredentials({manager:$,settings:J,credentials:X})}function u4($,Z){let Q=j0($);if(!Q)return null;return BL(Z,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function n$($){let Z=j0($.providerId);if(!Z)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return Z.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function J8($,Z){let Q=j0($);if(Q)return Q.getApiKey(Z);return Z?.auth?.accessToken?.trim()||Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0}function fW($,Z){let Q=j0($);if(!Q)return Z.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:Z.access}})??Z.access}L0();var fV={};N(fV,{createContextCompactionPrepareTurn:()=>a4});import{createHandlerAsync as LL}from"@cline/llms";import{CHARS_PER_TOKEN as Wm,estimateTokens as UW}from"@cline/shared";var pj=200000,rj=0.9,u9=0.7,ij=16384,DW=20000,dj=1024,lj=2000,nj=2000,aj=8;function p4($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
|
|
46
|
-
...[truncated ${$.length-Z} chars]`}function
|
|
45
|
+
</html>`;function fj($){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 yD($){let Q=new TextEncoder().encode($),W=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(W)}function hD($=32){let Z=new Uint8Array($);return crypto.getRandomValues(Z),fj(Z)}async function S9(){let $=hD(),Z=fj(await yD($));return{verifier:$,challenge:Z}}function b9($){return $.endsWith("/")?$.slice(0,-1):$}function r$($,Z){return new URL(Z,`${b9($)}/`).toString()}function $8($,Z={}){let Q=$.trim();if(!Q)return{};try{let W=new URL(Q);return{code:W.searchParams.get("code")??void 0,state:W.searchParams.get("state")??void 0,provider:Z.includeProvider?W.searchParams.get("provider")??void 0:void 0}}catch{}if(Z.allowHashCodeState&&Q.includes("#")){let[W,J]=Q.split("#",2);return{code:W||void 0,state:J||void 0}}if(Q.includes("code=")){let W=new URLSearchParams(Q);return{code:W.get("code")??void 0,state:W.get("state")??void 0,provider:Z.includeProvider?W.get("provider")??void 0:void 0}}return{code:Q}}function kD($){if(typeof atob==="function")try{return atob($)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from($,"base64").toString("utf8")}catch{return null}return null}function R0($){if(!$)return null;try{let Z=$.split(".");if(Z.length!==3)return null;let Q=Z[1];if(!Q)return null;let W=Q.replace(/-/g,"+").replace(/_/g,"/"),J=W.padEnd(W.length+(4-W.length%4)%4,"="),X=kD(J);if(!X)return null;return JSON.parse(X)}catch{return null}}function Z8($){try{let Z=JSON.parse($),Q=Z.error,W=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,J=typeof Z.error_description==="string"?Z.error_description:typeof Z.message==="string"?Z.message:Q&&typeof Q==="object"&&typeof Q.message==="string"?Q.message:void 0;return{code:W,message:J}}catch{return{}}}function Q8($,Z){return Date.now()>=$.expires-Z}async function W8($){if(!$.onManualCodeInput){let X=await $.waitForCallback();return{code:X?.code,state:X?.state,provider:X?.provider,error:X?.error}}let Z,Q,W=$.onManualCodeInput().then((X)=>{Z=X,$.cancelWait()}).catch((X)=>{Q=X instanceof Error?X:Error(String(X)),$.cancelWait()}),J=await $.waitForCallback();if(Q)throw Q;if(J?.code||J?.error)return{code:J.code,state:J.state,provider:J.provider,error:J.error};if(Z)return $8(Z,$.parseOptions);if(await W,Q)throw Q;if(Z)return $8(Z,$.parseOptions);return{}}var y9={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},_j={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},XW="https://api.workos.com",ID="/auth",Uj=Array.from({length:11},($,Z)=>48801+Z),xD=300000,gD=30000,J8=30000,mD=300,vD=5;class j$ extends Error{status;errorCode;constructor($,Z){super($);this.name="ClineOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function cD($){let Z=Date.parse($);if(Number.isNaN(Z))throw Error(`Invalid expiresAt value: ${$}`);return Z}function YW($,Z,Q={}){let W=$.userInfo.clineUserId??Q.accountId,J=$.refreshToken??Q.refresh;if(!J)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:J,expires:cD($.expiresAt),accountId:W??void 0,email:$.userInfo.email||Q.email,metadata:{provider:Z,tokenType:$.tokenType,userInfo:$.userInfo}}}async function jW($){if(!$)return{};return typeof $==="function"?await $():$}function Dj($,Z){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return Z;return Math.floor($)}async function Lj($){await new Promise((Z)=>setTimeout(Z,$))}function VW($,Z){if(!$.success||!$.data?.accessToken)throw Error(Z);return $.data}async function zj($,Z){let Q=await fetch(r$(XW,_j.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(Z?.requestTimeoutMs??J8)}),W=await Q.json().catch(()=>({}));if(!Q.ok)throw new j$(`Device authorization failed: ${Q.status}${W.error_description?` - ${W.error_description}`:""}`,{status:Q.status,errorCode:W.error});if(!W.device_code||!W.user_code||!W.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:W.device_code,userCode:W.user_code,verificationUri:W.verification_uri,verificationUriComplete:W.verification_uri_complete,expiresInSeconds:Dj(W.expires_in,mD),pollIntervalSeconds:Dj(W.interval,vD)}}async function Tj($){let Z=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=Z){let W=await fetch(r$($.workosApiBaseUrl,_j.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),J=await W.json().catch(()=>({}));if(W.ok){if(!J.access_token||!J.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:J.access_token,refreshToken:J.refresh_token,tokenType:J.token_type??"Bearer"}}switch(J.error){case"authorization_pending":{await Lj(Q*1000);break}case"slow_down":{Q+=1,await Lj(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new j$(J.error_description||"WorkOS authorization failed",{status:W.status,errorCode:J.error});default:throw new j$(`WorkOS token polling failed: ${W.status}${J.error_description?` - ${J.error_description}`:""}`,{status:W.status,errorCode:J.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function Oj($,Z,Q){let W={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(r$(Z.apiBaseUrl,y9.register),{method:"POST",headers:{"Content-Type":"application/json",...await jW(Z.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Z.requestTimeoutMs??J8)});if(!J.ok){let Y=await J.text().catch(()=>""),j=Z8(Y);throw new j$(`Token registration failed: ${J.status}${j.message?` - ${j.message}`:""}`,{status:J.status,errorCode:j.code})}let X=await J.json();return YW(VW(X,"Invalid token exchange response"),Q??Z.provider)}async function uD($,Z,Q,W){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:Z,provider:W??Q.provider},X=await fetch(r$(Q.apiBaseUrl,y9.token),{method:"POST",headers:{"Content-Type":"application/json",...await jW(Q.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Q.requestTimeoutMs??J8)});if(!X.ok){let j=await X.text().catch(()=>""),V=Z8(j);throw new j$(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let Y=await X.json();return YW(VW(Y,"Invalid token exchange response"),W??Q.provider)}async function h4($){C1($.telemetry,$.provider??"cline");let Z=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:Uj,W=$.callbackPath??ID,J=Z?null:await W1({ports:Q,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=J?.callbackUrl||`http://127.0.0.1:${Q[0]??Uj[0]}${W}`;try{let Y;if(Z){let j=JW().workOsClientId,V=await zj(j,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let H=await Tj({clientId:j,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??J8,workosApiBaseUrl:XW,onProgress:$.callbacks.onProgress});Y=await Oj(H,$,$.provider)}else{let j=new URL(r$($.apiBaseUrl,y9.authorize));j.searchParams.set("client_type","extension"),j.searchParams.set("callback_url",X),j.searchParams.set("redirect_uri",X),$.callbacks.onAuth({url:j.toString(),instructions:"Continue the authentication process in your browser."});let V,H=$.provider,B=await W8({waitForCallback:J?.waitForCallback??(async()=>null),cancelWait:J?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(B.error)throw Error(`OAuth error: ${B.error}`);if(V=B.code,H=B.provider??H,!V){let G=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=$8(G,{includeProvider:!0});V=K.code,H=K.provider??H}if(!V)throw Error("Missing authorization code");Y=await uD(V,X,$,H)}return w1($.telemetry,$.provider??"cline"),S1($.telemetry,{id:Y.accountId,email:Y.email,provider:$.provider??"cline"}),Y}catch(Y){throw P1($.telemetry,$.provider??"cline",Y instanceof Error?Y.message:String(Y)),Y}finally{J?.close()}}async function HW($){return await zj(JW().workOsClientId,$)}async function BW($){let Z=$.provider??"cline";C1($.telemetry,Z);try{let Q=await Tj({clientId:JW().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??J8,workosApiBaseUrl:XW}),W=await Oj(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return w1($.telemetry,Z),S1($.telemetry,{id:W.accountId,email:W.email,provider:Z}),W}catch(Q){throw P1($.telemetry,Z,Q instanceof Error?Q.message:String(Q)),Q}}async function h9($,Z){let Q=await fetch(r$(Z.apiBaseUrl,y9.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await jW(Z.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(Z.requestTimeoutMs??J8)});if(!Q.ok){let X=await Q.text().catch(()=>""),Y=Z8(X);throw new j$(`Token refresh failed: ${Q.status}${Y.message?` - ${Y.message}`:""}`,{status:Q.status,errorCode:Y.code})}let W=await Q.json(),J=$.metadata?.provider??Z.provider;return YW(VW(W,"Invalid token refresh response"),J,$)}async function k4($,Z,Q){if(!$)return null;let W=Q?.refreshBufferMs??xD,J=Q?.retryableTokenGraceMs??gD;if(Q?.forceRefresh!==!0&&!Q8($,W))return $;try{return await h9($,Z)}catch(Y){if(Y instanceof j$&&Y.isLikelyInvalidGrant())return X$(Z.telemetry,Z.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}L0();var Rj={};N(Rj,{refreshOpenAICodexToken:()=>I9,loginOpenAICodex:()=>I4,getValidOpenAICodexCredentials:()=>x4,OPENAI_CODEX_OAUTH_CONFIG:()=>X0});import{nanoid as dD}from"nanoid";var X0={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class k9 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 lD($,Z,Q=X0.redirectUri){let W=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:X0.clientId,code:$,code_verifier:Z,redirect_uri:Q}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!W.ok)return{type:"failed"};let J=await W.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}async function pD($){try{let Z=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:X0.clientId}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!Z.ok){let W=await Z.text().catch(()=>""),J=Z8(W);throw new k9(`Token refresh failed: ${Z.status}${J.message?` - ${J.message}`:""}`,{status:Z.status,errorCode:J.code})}let Q=await Z.json();if(!Q.access_token||!Q.refresh_token||typeof Q.expires_in!=="number")return{type:"failed"};return{type:"success",access:Q.access_token,refresh:Q.refresh_token,expires:Date.now()+Q.expires_in*1000,email:Q.email,idToken:Q.id_token}}catch(Z){if(Z instanceof k9)throw Z;return{type:"failed"}}}async function rD($="pi"){let{verifier:Z,challenge:Q}=await S9(),W=dD(32),J=new URL(X0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",X0.clientId),J.searchParams.set("redirect_uri",X0.redirectUri),J.searchParams.set("scope",X0.scopes),J.searchParams.set("code_challenge",Q),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("state",W),J.searchParams.set("id_token_add_organizations","true"),J.searchParams.set("codex_cli_simplified_flow","true"),J.searchParams.set("originator",$),{verifier:Z,state:W,url:J.toString()}}function iD(){try{let $=new URL(X0.redirectUri),Z=$.port.length>0?Number.parseInt($.port,10):X0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(Z)?Z:X0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:X0.callbackPort,callbackPath:"/auth/callback",redirectUri:X0.redirectUri}}}function nD($,Z){let Q=Z?R0(Z):R0($),W=Q?Q:R0($),X=W?.[X0.jwtClaimPath]?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;let Y=W?.organizations;if(Array.isArray(Y)&&Y.length>0){let V=Y[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let j=W?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return null}function Mj($,Z){let Q=nD($.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 I4($){C1($.telemetry,"openai-codex");let Z=iD(),{verifier:Q,state:W,url:J}=await rD($.originator),X=await W1({host:Z.host,ports:[Z.port],callbackPath:Z.callbackPath,expectedState:W});$.onAuth({url:J,instructions:"Continue the authentication process in your browser."});let Y;try{let j=await W8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(j.state&&j.state!==W)throw Error("State mismatch");if(Y=j.code,!Y){let B=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=$8(B,{allowHashCodeState:!0});if(G.state&&G.state!==W)throw Error("State mismatch");Y=G.code}if(!Y)throw Error("Missing authorization code");let V=await lD(Y,Q,Z.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let H=Mj(V);return w1($.telemetry,"openai-codex"),S1($.telemetry,{id:H.accountId,email:H.email,provider:"openai-codex"}),H}catch(j){throw P1($.telemetry,"openai-codex",j instanceof Error?j.message:String(j)),j}finally{X.close()}}async function I9($,Z){let Q=await pD($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let W=Mj(Q,Z);if(!W.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return W}async function x4($,Z){if(!$)return null;let Q=Z?.refreshBufferMs??X0.refreshBufferMs,W=Z?.retryableTokenGraceMs??X0.retryableTokenGraceMs;if(Z?.forceRefresh!==!0&&!Q8($,Q))return $;try{return await I9($.refresh,$)}catch(X){if(X instanceof k9&&X.isLikelyInvalidGrant())return X$(Z?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}L0();var mj={};N(mj,{refreshOcaToken:()=>v9,loginOcaOAuth:()=>m4,getValidOcaCredentials:()=>v4,OCI_HEADER_OPC_REQUEST_ID:()=>aD,DEFAULT_INTERNAL_OCA_BASE_URL:()=>x9,DEFAULT_INTERNAL_IDCS_URL:()=>Cj,DEFAULT_INTERNAL_IDCS_SCOPES:()=>wj,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>Nj,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>g9,DEFAULT_EXTERNAL_IDCS_URL:()=>Sj,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>bj,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>Pj});import{nanoid as Ej}from"nanoid";class GW{ttlMs;maxEntries;entries=new Map;constructor($,Z){this.ttlMs=$;this.maxEntries=Z}get($,Z=Date.now()){this.pruneExpired(Z);let Q=this.entries.get($);if(!Q)return;return this.entries.delete($),this.entries.set($,Q),Q.value}set($,Z,Q=Date.now(),W=this.ttlMs){this.pruneExpired(Q),this.entries.delete($);while(this.entries.size>=this.maxEntries){let J=this.entries.keys().next().value;if(J===void 0)break;this.entries.delete(J)}this.entries.set($,{value:Z,expiresAt:Q+W})}pruneExpired($){for(let[Z,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(Z)}}var Nj="a8331954c0cf48ba99b5dd223a14c6ea",Cj="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",wj="openid offline_access",x9="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",Pj="c1aba3deed5740659981a752714eba33",Sj="https://login-ext.identity.oraclecloud.com",bj="openid offline_access",g9="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",aD="opc-request-id",sD="/auth/oca",oD=Array.from({length:11},($,Z)=>48801+Z),tD=300000,eD=30000,yj=30000,$L=600000;class m9 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 V$={internal:{clientId:Nj,idcsUrl:Cj,scopes:wj,baseUrl:x9},external:{clientId:Pj,idcsUrl:Sj,scopes:bj,baseUrl:g9}},g4=new Map,ZL=86400000,QL=300000,WL=32,KW=new GW(ZL,WL);function hj($){if(typeof $==="function")return $();return $??"internal"}function kj($){return{internal:{clientId:$?.internal?.clientId??V$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??V$.internal.idcsUrl,scopes:$?.internal?.scopes??V$.internal.scopes,baseUrl:$?.internal?.baseUrl??V$.internal.baseUrl},external:{clientId:$?.external?.clientId??V$.external.clientId,idcsUrl:$?.external?.idcsUrl??V$.external.idcsUrl,scopes:$?.external?.scopes??V$.external.scopes,baseUrl:$?.external?.baseUrl??V$.external.baseUrl}}}function JL($=Date.now()){let Z=$-$L;for(let[Q,W]of g4.entries())if(W.createdAt<Z)g4.delete(Q)}function XL($,Z,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=R0(Z)?.exp;if(typeof J==="number"&&J>0)return J*1000;let Y=R0(Q)?.exp;if(typeof Y==="number"&&Y>0)return Y*1000;return Date.now()+3600000}function Ij($,Z,Q){let W=$.access_token;if(!W)throw Error("Token response did not include an access token");let J=$.refresh_token??Q?.refresh;if(!J)throw Error("Token response did not include a refresh token");let X=R0($.id_token),Y=R0(W),j=X?.sub??Y?.sub,V=X?.email??Y?.email;return{access:W,refresh:J,expires:XL($,W,$.id_token),accountId:j??Q?.accountId,email:V??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:Z,subject:j,idToken:$.id_token}}}async function xj($,Z){let Q=b9($),W=KW.get(Q);if(W)return W;let J=`${Q}/.well-known/openid-configuration`,X=await fetch(J,{method:"GET",signal:AbortSignal.timeout(Z)});if(!X.ok){let V=`${Q}/oauth2/v1/token`;return KW.set(Q,V,Date.now(),QL),V}let j=(await X.json()).token_endpoint||`${Q}/oauth2/v1/token`;return KW.set(Q,j),j}function gj($){return{code:$.error,message:$.error_description}}async function YL($){let Z=g4.get($.state);if(!Z)throw Error("No PKCE verifier found for this state");g4.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,W=await xj(Q.idcsUrl,$.requestTimeoutMs),J=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:Z.redirectUri,client_id:Q.clientId,code_verifier:Z.verifier}),X=await fetch(W,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:J,signal:AbortSignal.timeout($.requestTimeoutMs)}),Y=await X.json();if(!X.ok){let V=gj(Y);throw new m9(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let j=R0(Y.id_token);if(!Y.id_token||!j)throw Error("No ID token received from OCA");if(j.nonce!==Z.nonce)throw Error("OIDC nonce verification failed");return Ij(Y,$.mode)}function jL($){let Z=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${b9(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 m4($){C1($.telemetry,"oca");let Z=kj($.config),Q=hj($.mode),W=$.callbackPorts?.length?$.callbackPorts:oD,J=$.callbackPath??sD,X=$.requestTimeoutMs??yj,Y=await W1({ports:W,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=Y.callbackUrl;if(!j)throw Error("Unable to bind local OAuth callback server");let V=Ej(16),H=Ej(16),{verifier:B,challenge:G}=await S9();JL(),g4.set(V,{verifier:B,nonce:H,mode:Q,redirectUri:j,createdAt:Date.now()});let K=jL({callbackUrl:j,mode:Q,state:V,nonce:H,challenge:G,config:Z});$.callbacks.onAuth({url:K,instructions:"Continue the authentication process in your browser."});try{let F=await W8({waitForCallback:Y.waitForCallback,cancelWait:Y.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),A=F.code,L=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!A){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!L||L!==V)throw Error("State mismatch");let f=await YL({code:A,state:L,mode:Q,config:Z,requestTimeoutMs:X});return w1($.telemetry,"oca"),S1($.telemetry,{id:f.accountId,email:f.email,provider:"oca"}),f}catch(F){throw P1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{Y.close()}}async function v9($,Z={}){let Q=kj(Z.config),W=Z.requestTimeoutMs??yj,J=$.metadata?.mode,X=J==="internal"||J==="external"?J:hj(Z.mode),Y=X==="external"?Q.external:Q.internal,j=await xj(Y.idcsUrl,W),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:Y.clientId}),H=await fetch(j,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(W)}),B=await H.json();if(!H.ok){let G=gj(B);throw new m9(`Token refresh failed: ${H.status}${G.message?` - ${G.message}`:""}`,{status:H.status,errorCode:G.code})}return Ij(B,X,$)}async function v4($,Z,Q){if(!$)return null;let W=Z?.refreshBufferMs??Q?.refreshBufferMs??tD,J=Z?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??eD;if(Z?.forceRefresh!==!0&&!Q8($,W))return $;try{return await v9($,Q)}catch(Y){if(Y instanceof m9&&Y.isLikelyInvalidGrant())return X$(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}var c9="workos:";function VL($){let Z=$.trim();return Z.toLowerCase().startsWith(c9)?Z:`${c9}${Z}`}function HL($){let Z=$.trim();return Z.toLowerCase().startsWith(c9)?Z.slice(c9.length):Z}function BL($){let Q=R0($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function GL($,Z){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let W=BL(Z);if(W)return W;return Date.now()-1}function KL($,Z){let Q=$.auth?.accessToken?.trim(),W=$.auth?.refreshToken?.trim();if(!Q||!W)return null;let J=Z?.normalizeAccessToken?.(Q)??Q;if(!J)return null;return{access:J,refresh:W,expires:GL($,J),accountId:$.auth?.accountId}}function FL($){let Z=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:Z,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},W={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(W,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return W}function FW($){let Z=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:Z,getApiKey(Q){let W=Q?.auth?.accessToken?.trim();if(W)return $.formatAccessToken?.(W)??W;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return FL({...Q,storageProviderId:Z,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function cj($){return FW({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:VL,normalizeStoredAccessToken:HL,login:({settings:Z,callbacks:Q,telemetry:W})=>h4({apiBaseUrl:Z?.baseUrl?.trim()||vj().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:W}),refresh:({settings:Z,credentials:Q,forceRefresh:W,telemetry:J})=>k4(Q,{apiBaseUrl:Z.baseUrl?.trim()||vj().apiBaseUrl,telemetry:J},{forceRefresh:W})})}var AL=[cj({providerId:"cline"}),cj({providerId:"cline-pass",storageProviderId:"cline"}),FW({providerId:"oca",login:({settings:$,callbacks:Z,telemetry:Q})=>m4({mode:$?.oca?.mode,callbacks:Z,telemetry:Q}),refresh:({settings:$,credentials:Z,forceRefresh:Q,telemetry:W})=>v4(Z,{forceRefresh:Q,telemetry:W},{mode:$.oca?.mode,telemetry:W})}),FW({providerId:"openai-codex",login:({callbacks:$,telemetry:Z})=>I4({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:Z}),refresh:({credentials:$,forceRefresh:Z,telemetry:Q})=>x4($,{forceRefresh:Z,telemetry:Q})})],fL=new Map(AL.map(($)=>[$.providerId,$]));function j0($){return fL.get($.trim().toLowerCase())}function i$($){return j0($)!==void 0}function AW($){return j0($)?.storageProviderId}function fW($,Z){let Q=j0(Z),W=Q?.storageProviderId??Z,J=$.getProviderSettings(W);return Q?.getApiKey(J)??X8(Z,J)}async function c4($,Z,Q){let W=j0(Z);if(!W)throw Error(`Provider "${Z}" does not support OAuth login`);let J=$.getProviderSettings(W.storageProviderId),X=await W.login({settings:J,callbacks:Q.callbacks,telemetry:Q.telemetry});return W.saveCredentials({manager:$,settings:J,credentials:X})}function u4($,Z){let Q=j0($);if(!Q)return null;return KL(Z,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function n$($){let Z=j0($.providerId);if(!Z)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return Z.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function X8($,Z){let Q=j0($);if(Q)return Q.getApiKey(Z);return Z?.auth?.accessToken?.trim()||Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0}function UW($,Z){let Q=j0($);if(!Q)return Z.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:Z.access}})??Z.access}L0();var fV={};N(fV,{createContextCompactionPrepareTurn:()=>a4});import{createHandlerAsync as zL}from"@cline/llms";import{CHARS_PER_TOKEN as jm,estimateTokens as DW}from"@cline/shared";var pj=200000,rj=0.9,u9=0.7,ij=16384,LW=20000,dj=1024,lj=2000,nj=2000,aj=8;function p4($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
|
|
46
|
+
...[truncated ${$.length-Z} chars]`}function UL($){let Z=_W($);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}">
|
|
47
47
|
${Q.content}
|
|
48
48
|
</file>`;case"image":return`[image:${Q.mediaType}]`;default:return""}}).join(`
|
|
49
|
-
`)}function
|
|
49
|
+
`)}function _W($){if(typeof $==="string")return p4($,lj);return $.map((Z)=>{switch(Z.type){case"text":return{...Z,text:p4(Z.text,lj)};case"file":return{...Z,content:p4(Z.content,nj)};case"image":return Z;default:return Z}})}function DL($){return Object.entries($).map(([Z,Q])=>`${Z}=${JSON.stringify(Q)}`).join(", ")}function sj($){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]: ${p4(Q.thinking,2000)}`);break;case"redacted_thinking":Z.push("[Bot thinking]: [redacted]");break;case"tool_use":Z.push(`[Bot tool calls]: ${Q.name}(${DL(Q.input)})`);break;case"tool_result":Z.push(`[Tool result]: ${UL(Q.content)}`);break;case"file":Z.push(`[${$.role==="user"?"User":"Bot"} file ${Q.path}]: ${p4(Q.content,nj)}`);break;case"image":Z.push(`[${$.role==="user"?"User":"Bot"} image]: ${Q.mediaType}`);break}return Z.join(`
|
|
50
50
|
`)}function oj($){return $.map(sj).join(`
|
|
51
51
|
|
|
52
|
-
`).trim()}function tj(){let $=new WeakMap;return(Z)=>{let Q=Z,W=$.get(Q);if(typeof W==="number")return W;let J;try{J=JSON.stringify(Z)}catch{J=sj(Z)}let X=
|
|
52
|
+
`).trim()}function tj(){let $=new WeakMap;return(Z)=>{let Q=Z,W=$.get(Q);if(typeof W==="number")return W;let J;try{J=JSON.stringify(Z)}catch{J=sj(Z)}let X=DW(J.length);return $.set(Q,X),X}}function r4($){return $.metadata?.kind==="compaction_summary"}function zW($){if(!r4($))return;let Z=$.metadata;if(!Z)return;let Q=Z.details;return{kind:"compaction_summary",summary:String(Z.summary??""),details:{readFiles:Array.isArray(Q?.readFiles)?Q.readFiles.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter((W)=>W.length>0):[],modifiedFiles:Array.isArray(Q?.modifiedFiles)?Q.modifiedFiles.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter((W)=>W.length>0):[]},tokensBefore:Number(Z.tokensBefore??0),generatedAt:Number(Z.generatedAt??0)}}function LL($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}function i4($){return $.role==="user"&&!LL($)&&!r4($)}function ej($){for(let Z=0;Z<$.length;Z+=1)if(i4($[Z]))return Z;return-1}function d9($){for(let Z=$.length-1;Z>=0;Z-=1)if(i4($[Z]))return Z;return 0}function $V($){for(let Z=$.length-1;Z>=0;Z-=1)if($[Z].role==="assistant")return Z;return-1}function ZV($){for(let Z=$.length-1;Z>=0;Z-=1)if(r4($[Z]))return Z;return-1}function QV($,Z,Q){let W=d9($);if(W<=0)return 0;let J=0,X=$.length;for(let j=$.length-1;j>=0;j-=1)if(J+=Q($[j]),X=j,J>=Z)break;if(X<=0)return 0;let Y=Math.min(X,W);while(Y>0&&!i4($[Y]))Y-=1;return Y}function l4($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((Z)=>l4(Z));if($&&typeof $==="object"){let Z=$,Q=[];for(let W of["path","file_path","target_file","new_file_path","old_file_path"])Q.push(...l4(Z[W]));if(Array.isArray(Z.files)){for(let W of Z.files)if(W&&typeof W==="object")Q.push(...l4(W.path))}if(Array.isArray(Z.file_paths))Q.push(...l4(Z.file_paths));return Q}return[]}function d4($,Z){let Q=new Set($);for(let W of Z){let J=W.trim();if(!J)continue;Q.add(J)}return[...Q].sort((W,J)=>W.localeCompare(J))}function WV($){let Z=[],Q=[];for(let W of $){let J=zW(W);if(J){Z=d4(Z,J.details.readFiles),Q=d4(Q,J.details.modifiedFiles);continue}if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type==="file"){Z=d4(Z,[X.path]);continue}if(X.type!=="tool_use")continue;let Y=l4(X.input);if(X.name==="read_files"){Z=d4(Z,Y);continue}if(X.name==="editor"||X.name==="apply_patch")Q=d4(Q,Y)}}return{readFiles:Z,modifiedFiles:Q}}function _L($){let Z=$.readFiles.length>0?$.readFiles.map((W)=>`- ${W}`).join(`
|
|
53
53
|
`):"- none",Q=$.modifiedFiles.length>0?$.modifiedFiles.map((W)=>`- ${W}`).join(`
|
|
54
54
|
`):"- none";return`## Files
|
|
55
55
|
Read:
|
|
@@ -57,7 +57,7 @@ ${Z}
|
|
|
57
57
|
Modified:
|
|
58
58
|
${Q}`}function JV($,Z){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
|
|
59
59
|
|
|
60
|
-
${
|
|
60
|
+
${_L(Z)}`.trim()}function XV($){let Z=[`Summarize this session for continuation. Be concise and factual.
|
|
61
61
|
|
|
62
62
|
## Goal
|
|
63
63
|
One sentence: what is being built or fixed.
|
|
@@ -81,18 +81,18 @@ ${$.conversationText||"(empty)"}`),Z.join(`
|
|
|
81
81
|
|
|
82
82
|
`)}function YV($){let Z=$.summarizer,Q=(J)=>{if(J.providerId==="openai-codex"){let{maxOutputTokens:X,...Y}=J;return{...Y,thinking:!1}}return{...J,maxOutputTokens:J.maxOutputTokens??dj,thinking:!1}};if(!Z)return Q($.activeProviderConfig);let W=Z.providerConfig?.providerId===Z.providerId?Z.providerConfig:void 0;return Q({...W??{},providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey??W?.apiKey,baseUrl:Z.baseUrl??W?.baseUrl,headers:Z.headers??W?.headers,knownModels:Z.knownModels??W?.knownModels,maxOutputTokens:Z.maxOutputTokens??dj})}function jV($){return{role:"user",content:`Context summary:
|
|
83
83
|
|
|
84
|
-
${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}async function
|
|
85
|
-
...`,W=Math.max(1,Z-Q.length);return`${$.slice(0,W)}${Q}`}function BV($,Z){let Q=Number.isFinite(Z)?Math.max(1,Z):1,W=Math.max(16,Q*TL);if(typeof $.content==="string"){let Y=HV($.content,W).trim();return{...$,content:Y||"..."}}let J=W,X=$.content.map((Y)=>{if(Y.type!=="text"||J<=0)return Y;let j=HV(Y.text,J).trim();return J-=j.length,{...Y,text:j||"..."}});return{...$,content:X}}function ML($,Z){let Q=ej($),W=d9($),J=$V($),X=[],Y=0;for(let j=0;j<$.length;j+=1){let V=OL($[j]);if(!V)continue;let H=Z(V);Y+=H,X.push({index:j,message:V,estimatedTokens:H,toolPairIds:KV(V),isFirstUser:j===Q,isLastUser:j===W,isLastAssistant:j===J})}return{candidates:X,totalTokens:Y}}function GV($,Z,Q,W){let J=$[Z],X=J.estimatedTokens;return J.message=Q,J.estimatedTokens=W(Q),J.toolPairIds=KV(Q),J.estimatedTokens-X}function KV($){if(!Array.isArray($.content))return[];let Z=[];for(let Q of $.content)if(Q.type==="tool_use")Z.push(Q.id);else if(Q.type==="tool_result")Z.push(Q.tool_use_id);return Z}function RL($){let Z=new Map;for(let Q of $)for(let W of Q.toolPairIds){let J=Z.get(W);if(J)J.add(Q);else Z.set(W,new Set([Q]))}return Z}function EL($,Z,Q){let W=new Set,J=[Q],X=0;while(X<J.length){let Y=J[X];if(X+=1,Y===void 0||!$.has(Y)||W.has(Y))continue;W.add(Y);for(let j of Y.toolPairIds)for(let V of Z.get(j)??[])if(!W.has(V))J.push(V)}return W}function NL($,Z){let Q=0;for(let W of $){if(Z.has(W))continue;$[Q]=W,Q+=1}$.length=Q}function l9($,Z,Q,W){let J=new Set($),X=RL($);for(let Y=0;Y<$.length&&W>Q;){if(!Z($[Y])){Y+=1;continue}let j=EL(J,X,$[Y]);if(j.size===0){Y+=1;continue}let V=0;for(let H of j)V+=H.estimatedTokens,J.delete(H);W-=V,NL($,j)}return W}function wL($,Z,Q,W,J){if(Q<=Z)return Q;for(let Y=$.length-1;Y>=0&&Q>Z;Y-=1){let j=$[Y];if(j.isFirstUser)continue;let V=Math.max(aj,j.estimatedTokens-(Q-Z));if(V>=j.estimatedTokens)continue;Q+=GV($,Y,BV(j.message,V),J)}if(Q<=Z)return Q;let X=$.findIndex((Y)=>Y.isFirstUser);if(X>=0){if($[X].estimatedTokens<=W)return Q;while(Q>Z){let j=$[X],V=Math.max(1,j.estimatedTokens-(Q-Z));if(V>=j.estimatedTokens)break;let H=j.estimatedTokens;if(Q+=GV($,X,BV(j.message,V),J),j.estimatedTokens>=H)break}}return Q}function CL($,Z){return JSON.stringify($)!==JSON.stringify(Z)}function PL($){let Z=d9($);if(Z<0||Z===0&&!i4($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,Z),protectedTail:$.slice(Z)}}function FV($){let Z=Math.max(1,Math.min($.context.targetTokens??Math.floor($.context.triggerTokens*u9),$.context.maxInputTokens)),{compactable:Q,protectedTail:W}=PL($.context.messages);if(Q.length===0)return;let J=qL(W,$.estimateMessageTokens),X=Math.max(1,Z-J),Y=ML(Q,$.estimateMessageTokens),{candidates:j}=Y;if(j.length===0)return;let V=Y.totalTokens,H=V;H=l9(j,(F)=>F.message.role==="assistant"&&!F.isLastAssistant,X,H),H=l9(j,(F)=>F.message.role==="user"&&!F.isFirstUser&&!F.isLastUser,X,H),H=l9(j,(F)=>F.message.role==="assistant"&&F.isLastAssistant,X,H),H=l9(j,(F)=>F.message.role==="user"&&F.isLastUser&&!F.isFirstUser,X,H),H=wL(j,X,H,$.context.triggerTokens,$.estimateMessageTokens);let B=[...j.map((F)=>F.message),...W];if(!CL($.context.messages,B))return;let G=V+J,K=H+J;return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:B.length,messagesRemoved:$.context.messages.length-B.length,tokensBefore:G,tokensAfter:K,targetTokens:Z,maxInputTokens:$.context.maxInputTokens}),{messages:B}}var SL=0.5,bL=0.5;function AV($){try{return JSON.stringify($).length}catch{return String($).length}}function n4($){return typeof $==="number"&&Number.isFinite($)&&$>0}function yL($){let Z=[];if(n4($.configMaxInputTokens))Z.push($.configMaxInputTokens);if(n4($.modelMaxInputTokens))Z.push($.modelMaxInputTokens);if(n4($.contextWindow)){Z.push($.contextWindow);let Q=n4($.modelMaxTokens)?$.contextWindow-$.modelMaxTokens:void 0;if(n4(Q)&&Q>=$.contextWindow*SL)Z.push(Q)}return Z.length>0?Math.min(...Z):pj}function hL($){let Z=0,Q=0,W=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type!=="tool_result")continue;let Y=AV(X.content);Z+=1,Q+=Y,W=Math.max(W,Y)}}return{toolResultCount:Z,toolResultSerializedChars:Q,maxToolResultSerializedChars:W}}var kL={basic:({context:$,estimateMessageTokens:Z,logger:Q})=>FV({context:$,estimateMessageTokens:Z,logger:Q}),agentic:({context:$,providerConfig:Z,compaction:Q,mode:W,estimateMessageTokens:J,logger:X})=>VV({context:$,providerConfig:Z,summarizer:Q?.summarizer,preserveRecentTokens:W==="manual"?Math.min(Q?.preserveRecentTokens??DW,$.triggerTokens):Q?.preserveRecentTokens??DW,estimateMessageTokens:J,logger:X})};function IL($){if(typeof $.config.reserveTokens==="number"){let Q=Math.max(0,$.config.reserveTokens),W=Math.max(0,$.maxInputTokens-Q);return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio==="number"){let Q=$.config.thresholdRatio,W=$.maxInputTokens*Q;return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:Q}}let Z=Math.max(0,Math.min($.maxInputTokens-ij,$.maxInputTokens*rj));return{shouldCompact:$.inputTokens>Z,triggerTokens:Z,thresholdRatio:$.maxInputTokens>0?Z/$.maxInputTokens:0}}function xL($){let Z=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,Z)),W=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*Q)));return{triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}function gL($){let Z=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*bL):Math.floor($.triggerTokens*u9),Q=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(Z,$.maxInputTokens,Q))}function mL($){let Z=0,Q=!1;for(let W of $)if(W.role==="user")Q=!0;else if(W.role==="assistant"&&Q)Z+=1,Q=!1;return Z}function a4($,Z={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let W=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=tj(),X=Q?.strategy??"basic",Y=kL[X],j=Z.mode??"auto",V=Q?.compact?"custom":X;return async(H)=>{let B=H.apiMessages.reduce((E,C)=>E+J(C),0),G=yL({configMaxInputTokens:Q?.maxInputTokens,modelMaxInputTokens:H.model.info?.maxInputTokens,contextWindow:H.model.info?.contextWindow,modelMaxTokens:H.model.info?.maxTokens}),K=IL({inputTokens:B,maxInputTokens:G,config:{maxInputTokens:Q?.maxInputTokens,reserveTokens:Q?.reserveTokens,thresholdRatio:Q?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:j,strategy:X,iteration:H.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:B,maxInputTokens:G,triggerTokens:K.triggerTokens,thresholdRatio:K.thresholdRatio,shouldCompact:K.shouldCompact,messageCount:H.messages.length,apiMessageCount:H.apiMessages.length,apiMessagesJsonChars:AV(H.apiMessages),...hL(H.apiMessages)}),j==="auto"&&!K.shouldCompact)return;let F=j==="manual"?xL({inputTokens:B,maxInputTokens:G,autoTriggerTokens:K.triggerTokens,manualTargetRatio:Z.manualTargetRatio}):K,A=j==="auto"?gL({maxInputTokens:G,modelMaxTokens:H.model.info?.maxTokens,triggerTokens:F.triggerTokens,messagePairCount:mL(H.messages)}):void 0,L={agentId:H.agentId,conversationId:H.conversationId,parentAgentId:H.parentAgentId,iteration:H.iteration,messages:H.messages,model:H.model,maxInputTokens:G,triggerTokens:F.triggerTokens,targetTokens:A,thresholdRatio:F.thresholdRatio,utilizationRatio:G>0?B/G:0},f=j==="manual"?"manual_compaction":"auto_compaction";H.emitStatusNotice?.(j==="manual"?"compacting":"auto-compacting",{kind:f,reason:f,iteration:H.iteration,triggerTokens:F.triggerTokens,maxInputTokens:G});let D=H.messages.length,U=Date.now(),T=Q?.compact?await Q.compact(L):await Y({context:L,providerConfig:{...W,abortSignal:H.abortSignal},compaction:Q,mode:j,estimateMessageTokens:J,logger:$.logger}),O=Date.now()-U,z=$.sessionId??H.conversationId,_={agentId:H.agentId,conversationId:H.conversationId,parentAgentId:H.parentAgentId??void 0};if(T?.messages){let E=T.messages.reduce((C,y)=>C+J(y),0);$.logger?.log("Context compaction completed",{severity:"info",strategy:X,maxInputTokens:G,inputTokens:B,afterTokens:E,tokensSaved:B-E,utilizationBefore:`${(B/G*100).toFixed(1)}%`,utilizationAfter:`${(E/G*100).toFixed(1)}%`,thresholdTrigger:`${(F.thresholdRatio*100).toFixed(1)}%`,messagesBefore:D,messagesAfter:T.messages.length,messagesRemoved:D-T.messages.length}),C9($.telemetry,{ulid:z,strategy:V,mode:j,messagesBefore:D,messagesAfter:T.messages.length,messagesRemoved:D-T.messages.length,tokensBefore:B,tokensAfter:E,tokensSaved:B-E,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:O,provider:$.providerId,modelId:$.modelId,..._})}else P9($.telemetry,{ulid:z,strategy:V,mode:j,reason:"no_result",tokensBefore:B,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:O,provider:$.providerId,modelId:$.modelId,..._});return T}}var oH={};N(oH,{zodToJsonSchema:()=>pT,validateWithZod:()=>lT,truncateCommandOutput:()=>o$,resolveToolRoutingConfig:()=>K8,resolveToolPresetName:()=>I1,resolveCoreSelectedToolIds:()=>AZ,getCoreHeadlessToolNames:()=>z6,getCoreDefaultEnabledToolIds:()=>FZ,getCoreBuiltinToolCatalog:()=>Y2,getCoreAcpToolNames:()=>fZ,createWebFetchTool:()=>EW,createWebFetchExecutor:()=>G6,createToolPoliciesWithPreset:()=>t9,createSubmitAndExitTool:()=>PW,createSkillsTool:()=>e$,createShellTool:()=>Y6,createShellExecutor:()=>t$,createSearchTool:()=>RW,createSearchExecutor:()=>B6,createReadFilesTool:()=>MW,createFileReadExecutor:()=>H6,createEditorTool:()=>wW,createEditorExecutor:()=>V6,createDefaultToolsWithPreset:()=>e9,createDefaultTools:()=>F$,createDefaultShellExecutor:()=>K6,createDefaultExecutors:()=>B8,createBuiltinTools:()=>j2,createAskQuestionTool:()=>CW,createApplyPatchTool:()=>NW,createApplyPatchExecutor:()=>j6,WebFetchRequestSchema:()=>TW,ToolPresets:()=>u0,TEAM_TOOL_NAMES:()=>U8,SubmitInputSchema:()=>X6,StructuredCommandInputSchema:()=>a$,SkillsInputSchema:()=>W6,SearchCodebaseInputSchema:()=>t4,RunCommandsInputSchema:()=>e4,ReadFilesInputSchema:()=>o4,ReadFileRequestSchema:()=>S1,MAX_COMMAND_OUTPUT_CHARS:()=>y1,FetchWebContentInputSchema:()=>$6,EditFileInputSchema:()=>Z6,DefaultToolNames:()=>U0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>G8,AskQuestionInputSchema:()=>J6,ApplyPatchInputSchema:()=>Q6,ALL_DEFAULT_TOOL_NAMES:()=>H$});import{validateWithZod as lT,zodToJsonSchema as pT}from"@cline/shared";var U0={READ_FILES:"read_files",SEARCH_CODEBASE:"search_codebase",RUN_COMMANDS:"run_commands",FETCH_WEB_CONTENT:"fetch_web_content",APPLY_PATCH:"apply_patch",EDITOR:"editor",SKILLS:"skills",ASK:"ask_question",SUBMIT_AND_EXIT:"submit_and_exit"},H$=[U0.READ_FILES,U0.SEARCH_CODEBASE,U0.RUN_COMMANDS,U0.FETCH_WEB_CONTENT,U0.APPLY_PATCH,U0.EDITOR,U0.SKILLS,U0.ASK,U0.SUBMIT_AND_EXIT];L0();import{createTool as G$,validateWithZod as K$,zodToJsonSchema as h1}from"@cline/shared";var UV="__clineInternalTelemetry";function DV($){let Z=$?.__clineInternalTelemetry;return Z&&typeof Z==="object"&&"capture"in Z&&typeof Z.capture==="function"?Z:void 0}import{spawn as wV}from"node:child_process";import{StringDecoder as uL}from"node:string_decoder";import{getDefaultShell as dL,getShellArgs as lL}from"@cline/shared";import{validateWithZod as vL}from"@cline/shared";import{z as q}from"zod";var B$=6000,s4=q.string().describe("The absolute file path of a text file to read content from"),LV=q.object({start_line:q.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:q.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"),S1=q.object({path:s4,start_line:LV.shape.start_line,end_line:LV.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),o4=q.object({files:q.array(S1).describe("Array of file read requests. Omit start_line/end_line or set them to null to read from the start; provide integers to return only that inclusive one-based line range. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),_V=q.union([o4,S1,q.array(S1),q.array(q.string()),q.string(),q.object({files:q.array(q.union([s4,S1]))}),q.object({files:S1}),q.object({files:s4}),q.object({file_paths:q.array(s4)}),q.object({file_paths:q.string()}),q.object({paths:q.array(q.union([s4,S1]))}),q.object({paths:S1}),q.object({paths:q.string()})]),t4=q.object({queries:q.array(q.string()).describe("Array of regex search queries to execute")}),zV=q.union([t4,q.array(q.string()),q.string(),q.object({queries:q.string()})]),zW=q.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${B$*2} characters) to avoid timeouts.`),a$=q.object({command:q.string().min(1).describe("The executable to run directly without shell parsing."),args:q.array(q.string()).optional().describe("Optional argv list passed directly to the executable.")}),TV=q.union([zW,a$]),e4=q.object({commands:q.array(TV).describe("Array of commands to execute. Prefer structured { command, args } entries for portability; plain strings are still supported and are interpreted by the active shell.")}),OV=q.union([e4,q.object({commands:TV}),q.array(a$),a$,q.object({command:zW}),q.object({cmd:zW}),q.array(q.string()),q.string()]),TW=q.object({url:q.string().describe("The URL to fetch"),prompt:q.string().min(2).describe("Analysis prompt for the fetched content")}),$6=q.object({requests:q.array(TW).describe("Array of the URLs for the web fetch requests")}),Z6=q.object({path:q.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:q.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 ${B$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:q.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 ${B$} 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:q.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."),Q6=q.object({input:q.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."),qV=q.union([Q6,q.string()]),W6=q.object({skill:q.string().min(1).describe("Name of the skill to execute."),args:q.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),J6=q.object({question:q.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:q.array(q.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),X6=q.object({summary:q.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:q.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.
|
|
84
|
+
${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}async function TL($){let Z=await zL($.providerConfig),Q="";for await(let W of Z.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(W.type==="text"){Q+=W.text;continue}if(W.type==="done"&&!W.success&&W.error)throw Error(W.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Q.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Q.trim()}function OL($){try{return JSON.stringify($).length}catch{return String($).length}}async function VV($){let Z=$.context.messages;if(Z.length<2)return;let Q=QV(Z,$.preserveRecentTokens,$.estimateMessageTokens);if(Q<=0||Q>=Z.length)return;let W=Z.slice(0,Q),J=ZV(W),X=J>=0?zW(W[J])?.summary:void 0,Y=J>=0?W.slice(J+1):W;if(Y.length===0)return;let j=WV(W),V=oj(Y),H=XV({previousSummary:X,conversationText:V,fileOps:j});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:W.length,newMessagesToFold:Y.length,preservedMessages:Z.length-Q,previousSummaryChars:X?.length??0,conversationTextChars:V.length,summaryRequestChars:H.length,summaryRequestEstimatedTokens:DW(H.length),newMessagesJsonChars:OL(Y),maxInputTokens:$.context.maxInputTokens,triggerTokens:$.context.triggerTokens});let B=await TL({providerConfig:YV({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),request:H,logger:$.logger});if(!B.trim())return;let G=JV(B,j),K=Z.reduce((L,f)=>L+$.estimateMessageTokens(f),0),F=[jV({summary:G,fileOps:j,tokensBefore:K}),...Z.slice(Q)],A=F.reduce((L,f)=>L+$.estimateMessageTokens(f),0);return $.logger?.debug("Performed agentic compaction",{messagesBefore:Z.length,messagesAfter:F.length,messagesSummarized:Q,messagesPreserved:Z.length-Q,tokensBefore:K,tokensAfter:A,maxInputTokens:$.context.maxInputTokens}),{messages:F}}import{CHARS_PER_TOKEN as qL}from"@cline/shared";function ML($){if(r4($))return;if(typeof $.content==="string"){let Q=$.content.trim();return Q?{...$,content:Q}:void 0}let Z=$.content.filter((Q)=>Q.type!=="text"||Q.text.trim());if(Z.length===0)return;return{...$,content:Z.map((Q)=>Q.type==="text"?{...Q,text:Q.text.trim()}:Q.type==="tool_result"?{...Q,content:_W(Q.content)}:Q)}}function RL($,Z){return $.reduce((Q,W)=>Q+Z(W),0)}function HV($,Z){if($.length<=Z)return $;let Q=`
|
|
85
|
+
...`,W=Math.max(1,Z-Q.length);return`${$.slice(0,W)}${Q}`}function BV($,Z){let Q=Number.isFinite(Z)?Math.max(1,Z):1,W=Math.max(16,Q*qL);if(typeof $.content==="string"){let Y=HV($.content,W).trim();return{...$,content:Y||"..."}}let J=W,X=$.content.map((Y)=>{if(Y.type!=="text"||J<=0)return Y;let j=HV(Y.text,J).trim();return J-=j.length,{...Y,text:j||"..."}});return{...$,content:X}}function EL($,Z){let Q=ej($),W=d9($),J=$V($),X=[],Y=0;for(let j=0;j<$.length;j+=1){let V=ML($[j]);if(!V)continue;let H=Z(V);Y+=H,X.push({index:j,message:V,estimatedTokens:H,toolPairIds:KV(V),isFirstUser:j===Q,isLastUser:j===W,isLastAssistant:j===J})}return{candidates:X,totalTokens:Y}}function GV($,Z,Q,W){let J=$[Z],X=J.estimatedTokens;return J.message=Q,J.estimatedTokens=W(Q),J.toolPairIds=KV(Q),J.estimatedTokens-X}function KV($){if(!Array.isArray($.content))return[];let Z=[];for(let Q of $.content)if(Q.type==="tool_use")Z.push(Q.id);else if(Q.type==="tool_result")Z.push(Q.tool_use_id);return Z}function NL($){let Z=new Map;for(let Q of $)for(let W of Q.toolPairIds){let J=Z.get(W);if(J)J.add(Q);else Z.set(W,new Set([Q]))}return Z}function CL($,Z,Q){let W=new Set,J=[Q],X=0;while(X<J.length){let Y=J[X];if(X+=1,Y===void 0||!$.has(Y)||W.has(Y))continue;W.add(Y);for(let j of Y.toolPairIds)for(let V of Z.get(j)??[])if(!W.has(V))J.push(V)}return W}function wL($,Z){let Q=0;for(let W of $){if(Z.has(W))continue;$[Q]=W,Q+=1}$.length=Q}function l9($,Z,Q,W){let J=new Set($),X=NL($);for(let Y=0;Y<$.length&&W>Q;){if(!Z($[Y])){Y+=1;continue}let j=CL(J,X,$[Y]);if(j.size===0){Y+=1;continue}let V=0;for(let H of j)V+=H.estimatedTokens,J.delete(H);W-=V,wL($,j)}return W}function PL($,Z,Q,W,J){if(Q<=Z)return Q;for(let Y=$.length-1;Y>=0&&Q>Z;Y-=1){let j=$[Y];if(j.isFirstUser)continue;let V=Math.max(aj,j.estimatedTokens-(Q-Z));if(V>=j.estimatedTokens)continue;Q+=GV($,Y,BV(j.message,V),J)}if(Q<=Z)return Q;let X=$.findIndex((Y)=>Y.isFirstUser);if(X>=0){if($[X].estimatedTokens<=W)return Q;while(Q>Z){let j=$[X],V=Math.max(1,j.estimatedTokens-(Q-Z));if(V>=j.estimatedTokens)break;let H=j.estimatedTokens;if(Q+=GV($,X,BV(j.message,V),J),j.estimatedTokens>=H)break}}return Q}function SL($,Z){return JSON.stringify($)!==JSON.stringify(Z)}function bL($){let Z=d9($);if(Z<0||Z===0&&!i4($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,Z),protectedTail:$.slice(Z)}}function FV($){let Z=Math.max(1,Math.min($.context.targetTokens??Math.floor($.context.triggerTokens*u9),$.context.maxInputTokens)),{compactable:Q,protectedTail:W}=bL($.context.messages);if(Q.length===0)return;let J=RL(W,$.estimateMessageTokens),X=Math.max(1,Z-J),Y=EL(Q,$.estimateMessageTokens),{candidates:j}=Y;if(j.length===0)return;let V=Y.totalTokens,H=V;H=l9(j,(F)=>F.message.role==="assistant"&&!F.isLastAssistant,X,H),H=l9(j,(F)=>F.message.role==="user"&&!F.isFirstUser&&!F.isLastUser,X,H),H=l9(j,(F)=>F.message.role==="assistant"&&F.isLastAssistant,X,H),H=l9(j,(F)=>F.message.role==="user"&&F.isLastUser&&!F.isFirstUser,X,H),H=PL(j,X,H,$.context.triggerTokens,$.estimateMessageTokens);let B=[...j.map((F)=>F.message),...W];if(!SL($.context.messages,B))return;let G=V+J,K=H+J;return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:B.length,messagesRemoved:$.context.messages.length-B.length,tokensBefore:G,tokensAfter:K,targetTokens:Z,maxInputTokens:$.context.maxInputTokens}),{messages:B}}var yL=0.5,hL=0.5;function AV($){try{return JSON.stringify($).length}catch{return String($).length}}function n4($){return typeof $==="number"&&Number.isFinite($)&&$>0}function kL($){let Z=[];if(n4($.configMaxInputTokens))Z.push($.configMaxInputTokens);if(n4($.modelMaxInputTokens))Z.push($.modelMaxInputTokens);if(n4($.contextWindow)){Z.push($.contextWindow);let Q=n4($.modelMaxTokens)?$.contextWindow-$.modelMaxTokens:void 0;if(n4(Q)&&Q>=$.contextWindow*yL)Z.push(Q)}return Z.length>0?Math.min(...Z):pj}function IL($){let Z=0,Q=0,W=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type!=="tool_result")continue;let Y=AV(X.content);Z+=1,Q+=Y,W=Math.max(W,Y)}}return{toolResultCount:Z,toolResultSerializedChars:Q,maxToolResultSerializedChars:W}}var xL={basic:({context:$,estimateMessageTokens:Z,logger:Q})=>FV({context:$,estimateMessageTokens:Z,logger:Q}),agentic:({context:$,providerConfig:Z,compaction:Q,mode:W,estimateMessageTokens:J,logger:X})=>VV({context:$,providerConfig:Z,summarizer:Q?.summarizer,preserveRecentTokens:W==="manual"?Math.min(Q?.preserveRecentTokens??LW,$.triggerTokens):Q?.preserveRecentTokens??LW,estimateMessageTokens:J,logger:X})};function gL($){if(typeof $.config.reserveTokens==="number"){let Q=Math.max(0,$.config.reserveTokens),W=Math.max(0,$.maxInputTokens-Q);return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio==="number"){let Q=$.config.thresholdRatio,W=$.maxInputTokens*Q;return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:Q}}let Z=Math.max(0,Math.min($.maxInputTokens-ij,$.maxInputTokens*rj));return{shouldCompact:$.inputTokens>Z,triggerTokens:Z,thresholdRatio:$.maxInputTokens>0?Z/$.maxInputTokens:0}}function mL($){let Z=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,Z)),W=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*Q)));return{triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}function vL($){let Z=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*hL):Math.floor($.triggerTokens*u9),Q=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(Z,$.maxInputTokens,Q))}function cL($){let Z=0,Q=!1;for(let W of $)if(W.role==="user")Q=!0;else if(W.role==="assistant"&&Q)Z+=1,Q=!1;return Z}function a4($,Z={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let W=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=tj(),X=Q?.strategy??"basic",Y=xL[X],j=Z.mode??"auto",V=Q?.compact?"custom":X;return async(H)=>{let B=H.apiMessages.reduce((E,w)=>E+J(w),0),G=kL({configMaxInputTokens:Q?.maxInputTokens,modelMaxInputTokens:H.model.info?.maxInputTokens,contextWindow:H.model.info?.contextWindow,modelMaxTokens:H.model.info?.maxTokens}),K=gL({inputTokens:B,maxInputTokens:G,config:{maxInputTokens:Q?.maxInputTokens,reserveTokens:Q?.reserveTokens,thresholdRatio:Q?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:j,strategy:X,iteration:H.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:B,maxInputTokens:G,triggerTokens:K.triggerTokens,thresholdRatio:K.thresholdRatio,shouldCompact:K.shouldCompact,messageCount:H.messages.length,apiMessageCount:H.apiMessages.length,apiMessagesJsonChars:AV(H.apiMessages),...IL(H.apiMessages)}),j==="auto"&&!K.shouldCompact)return;let F=j==="manual"?mL({inputTokens:B,maxInputTokens:G,autoTriggerTokens:K.triggerTokens,manualTargetRatio:Z.manualTargetRatio}):K,A=j==="auto"?vL({maxInputTokens:G,modelMaxTokens:H.model.info?.maxTokens,triggerTokens:F.triggerTokens,messagePairCount:cL(H.messages)}):void 0,L={agentId:H.agentId,conversationId:H.conversationId,parentAgentId:H.parentAgentId,iteration:H.iteration,messages:H.messages,model:H.model,maxInputTokens:G,triggerTokens:F.triggerTokens,targetTokens:A,thresholdRatio:F.thresholdRatio,utilizationRatio:G>0?B/G:0},f=j==="manual"?"manual_compaction":"auto_compaction";H.emitStatusNotice?.(j==="manual"?"compacting":"auto-compacting",{kind:f,reason:f,iteration:H.iteration,triggerTokens:F.triggerTokens,maxInputTokens:G});let D=H.messages.length,U=Date.now(),T=Q?.compact?await Q.compact(L):await Y({context:L,providerConfig:{...W,abortSignal:H.abortSignal},compaction:Q,mode:j,estimateMessageTokens:J,logger:$.logger}),q=Date.now()-U,z=$.sessionId??H.conversationId,_={agentId:H.agentId,conversationId:H.conversationId,parentAgentId:H.parentAgentId??void 0};if(T?.messages){let E=T.messages.reduce((w,y)=>w+J(y),0);$.logger?.log("Context compaction completed",{severity:"info",strategy:X,maxInputTokens:G,inputTokens:B,afterTokens:E,tokensSaved:B-E,utilizationBefore:`${(B/G*100).toFixed(1)}%`,utilizationAfter:`${(E/G*100).toFixed(1)}%`,thresholdTrigger:`${(F.thresholdRatio*100).toFixed(1)}%`,messagesBefore:D,messagesAfter:T.messages.length,messagesRemoved:D-T.messages.length}),w9($.telemetry,{ulid:z,strategy:V,mode:j,messagesBefore:D,messagesAfter:T.messages.length,messagesRemoved:D-T.messages.length,tokensBefore:B,tokensAfter:E,tokensSaved:B-E,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:q,provider:$.providerId,modelId:$.modelId,..._})}else P9($.telemetry,{ulid:z,strategy:V,mode:j,reason:"no_result",tokensBefore:B,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:q,provider:$.providerId,modelId:$.modelId,..._});return T}}var eH={};N(eH,{zodToJsonSchema:()=>aT,validateWithZod:()=>nT,truncateCommandOutput:()=>o$,resolveToolRoutingConfig:()=>F8,resolveToolPresetName:()=>x1,resolveCoreSelectedToolIds:()=>fZ,getCoreHeadlessToolNames:()=>z6,getCoreDefaultEnabledToolIds:()=>AZ,getCoreBuiltinToolCatalog:()=>j2,getCoreAcpToolNames:()=>UZ,createWebFetchTool:()=>EW,createWebFetchExecutor:()=>G6,createToolPoliciesWithPreset:()=>e9,createSubmitAndExitTool:()=>PW,createSkillsTool:()=>e$,createShellTool:()=>Y6,createShellExecutor:()=>t$,createSearchTool:()=>RW,createSearchExecutor:()=>B6,createReadFilesTool:()=>MW,createFileReadExecutor:()=>H6,createEditorTool:()=>CW,createEditorExecutor:()=>V6,createDefaultToolsWithPreset:()=>$Z,createDefaultTools:()=>F$,createDefaultShellExecutor:()=>K6,createDefaultExecutors:()=>G8,createBuiltinTools:()=>V2,createAskQuestionTool:()=>wW,createApplyPatchTool:()=>NW,createApplyPatchExecutor:()=>j6,WebFetchRequestSchema:()=>TW,ToolPresets:()=>u0,TEAM_TOOL_NAMES:()=>U8,SubmitInputSchema:()=>X6,StructuredCommandInputSchema:()=>a$,SkillsInputSchema:()=>W6,SearchCodebaseInputSchema:()=>t4,RunCommandsInputSchema:()=>e4,ReadFilesInputSchema:()=>o4,ReadFileRequestSchema:()=>b1,MAX_COMMAND_OUTPUT_CHARS:()=>h1,FetchWebContentInputSchema:()=>$6,EditFileInputSchema:()=>Z6,DefaultToolNames:()=>U0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>K8,AskQuestionInputSchema:()=>J6,ApplyPatchInputSchema:()=>Q6,ALL_DEFAULT_TOOL_NAMES:()=>H$});import{validateWithZod as nT,zodToJsonSchema as aT}from"@cline/shared";var U0={READ_FILES:"read_files",SEARCH_CODEBASE:"search_codebase",RUN_COMMANDS:"run_commands",FETCH_WEB_CONTENT:"fetch_web_content",APPLY_PATCH:"apply_patch",EDITOR:"editor",SKILLS:"skills",ASK:"ask_question",SUBMIT_AND_EXIT:"submit_and_exit"},H$=[U0.READ_FILES,U0.SEARCH_CODEBASE,U0.RUN_COMMANDS,U0.FETCH_WEB_CONTENT,U0.APPLY_PATCH,U0.EDITOR,U0.SKILLS,U0.ASK,U0.SUBMIT_AND_EXIT];L0();import{createTool as G$,validateWithZod as K$,zodToJsonSchema as k1}from"@cline/shared";var UV="__clineInternalTelemetry";function DV($){let Z=$?.__clineInternalTelemetry;return Z&&typeof Z==="object"&&"capture"in Z&&typeof Z.capture==="function"?Z:void 0}import{spawn as CV}from"node:child_process";import{StringDecoder as pL}from"node:string_decoder";import{getDefaultShell as rL,getShellArgs as iL}from"@cline/shared";import{validateWithZod as dL}from"@cline/shared";import{z as O}from"zod";var B$=6000,s4=O.string().describe("The absolute file path of a text file to read content from"),LV=O.object({start_line:O.number().int().positive().nullable().optional().describe("Optional one-based starting line number to read from; use null or omit for the start of the file"),end_line:O.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit to read to the end of the file or the read cap, whichever comes first")}).describe("Optional inclusive one-based file line range"),b1=O.object({path:s4,start_line:LV.shape.start_line,end_line:LV.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),o4=O.object({files:O.array(b1).describe("Array of file read requests. Omit start_line/end_line or set them to null to read from the start; provide integers to return only that inclusive one-based line range. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),_V=O.union([o4,b1,O.array(b1),O.array(O.string()),O.string(),O.object({files:O.array(O.union([s4,b1]))}),O.object({files:b1}),O.object({files:s4}),O.object({file_paths:O.array(s4)}),O.object({file_paths:O.string()}),O.object({paths:O.array(O.union([s4,b1]))}),O.object({paths:b1}),O.object({paths:O.string()})]),t4=O.object({queries:O.array(O.string()).describe("Array of regex search queries to execute")}),zV=O.union([t4,O.array(O.string()),O.string(),O.object({queries:O.string()})]),p9=O.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${B$*2} characters) to avoid timeouts.`),a$=O.object({command:O.string().min(1).describe("The executable to run directly without shell parsing."),args:O.array(O.string()).optional().describe("Optional argv list passed directly to the executable.")}),TV=O.union([p9,a$]),e4=O.object({commands:O.array(p9).describe("Array of complete shell command strings to execute.")}),uL=O.object({commands:O.array(TV)}),OV=O.union([e4,uL,O.object({commands:TV}),O.array(a$),a$,O.object({command:p9}),O.object({cmd:p9}),O.array(O.string()),O.string()]),TW=O.object({url:O.string().describe("The URL to fetch"),prompt:O.string().min(2).describe("Analysis prompt for the fetched content")}),$6=O.object({requests:O.array(TW).describe("Array of the URLs for the web fetch requests")}),Z6=O.object({path:O.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:O.string().nullable().optional().describe(`Exact text to replace (must match exactly once). Omit this when creating a missing file or inserting via insert_line. Keep this at or below ${B$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:O.string().describe(`The new content to write when creating a missing file, the replacement text for edits, or the inserted text when insert_line is provided. Keep this at or below ${B$} characters when possible; for large edits, use multiple calls with small chunks of old_text and new_text to iteratively edit the file.`),insert_line:O.number().int().nullable().optional().describe("Optional positive one-based boundary line. When provided, the tool inserts new_text before that line instead of performing a replacement edit; use line_count + 1 to append at EOF.")}).describe("Edit a text file by replacing old_text with new_text, create the file with new_text if it does not exist, or insert new_text at insert_line when insert_line is provided. Prefer using this tool for file edits over shell commands. IMPORTANT: large edits can time out, so use small chunks and multiple calls when possible."),Q6=O.object({input:O.string().min(1).describe("The freeform apply_patch payload in the canonical patch grammar (e.g *** Begin Patch, *** Update File:, @@, and *** End Patch).")}).describe("Modify or create a text file by applying patches using the canonical apply_patch diff grammar. Prefer sending the patch body directly rather than wrapping it in shell syntax. IMPORTANT: large patches can time out, so use small chunks and multiple calls when possible."),qV=O.union([Q6,O.string()]),W6=O.object({skill:O.string().min(1).describe("Name of the skill to execute."),args:O.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),J6=O.object({question:O.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:O.array(O.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),X6=O.object({summary:O.string().min(10).describe("Summarization of the investigation, steps taken, and resolution status to submit at the end of the session. Before submitting, read the problem again along with any provided test's assertions carefully and confirm your fix produces the expected output."),verified:O.boolean().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and taken all necessary steps to resolve the issue.
|
|
86
86
|
'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
|
|
87
|
-
IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function s$($){if($ instanceof Error)return $.message;return String($)}function MV($){if(typeof $.old_text==="string"&&$.old_text.length>B$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${B$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>B$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${B$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class
|
|
87
|
+
IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function s$($){if($ instanceof Error)return $.message;return String($)}function MV($){if(typeof $.old_text==="string"&&$.old_text.length>B$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${B$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>B$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${B$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class Y8 extends Error{timeoutMs;constructor($,Z){super($);this.name="TimeoutError",this.timeoutMs=Z}}function y1($,Z,Q){return Promise.race([$,new Promise((W,J)=>{setTimeout(()=>J(new Y8(Q,Z)),Z)})])}function r9($){let{path:Z,start_line:Q,end_line:W}=$;if(Q==null&&W==null)return Z;return`${Z}:${Q??1}-${W??"EOF"}`}function RV($){let{start_line:Z,end_line:Q}=$;if(Z==null||Q==null||Z<=Q)return null;return`start_line must be less than or equal to end_line (received start_line: ${Z}, end_line: ${Q})`}function EV($){let Z=dL(OV,$);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 lL($){if(typeof $==="string")return $;let Z=$.args??[];if(Z.length===0)return $.command;let Q=Z.map((W)=>/[\s"]/u.test(W)?JSON.stringify(W):W);return`${$.command} ${Q.join(" ")}`}var OW=200;function NV($){let Z=lL($);if(Z.length<=OW)return Z;let Q=Z.length-OW;return`${Z.slice(0,OW)} ... [command truncated: ${Q} more chars; full command is in the tool call input]`}var h1=48000;function o$($,Z={}){let Q=Z.maxChars??48000,W=Z.totalChars??$.length;if($.length<=Q&&W<=Q)return $;let J=Math.ceil(Q/2),X=Math.max(1,Q-J);return`${$.slice(0,J)}
|
|
88
88
|
[... output truncated: ${W} chars total. Refine the command (grep, head, tail) to view the elided middle ...]
|
|
89
|
-
`+$.slice(-X)}var
|
|
89
|
+
`+$.slice(-X)}var j8=2000,qW=2000,i9=48000,V8=48000;class n9 extends Error{exitCode;output;constructor($,Z){super(`Command exited with code ${$}`);this.exitCode=$;this.output=Z;this.name="CommandExitError"}}function wV($){let Z=Math.ceil($/2),Q=Math.max(1,$-Z),W=new pL("utf8"),J="",X="",Y=0,j=(V)=>{if(!V)return;Y+=V.length;let H=Z-J.length;if(H>0){J+=V.slice(0,H),X=(X+V.slice(H)).slice(-Q);return}X=(X+V).slice(-Q)};return{append(V){j(W.write(V))},snapshot(){return j(W.end()),{text:J+X,totalChars:Y,dropped:Y>J.length+X.length}}}}function nL($,Z,Q,W,J){return new Promise((X,Y)=>{let j=process.platform==="win32",V=CV($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!j,windowsHide:!0}),H=V.pid,B=wV(W),G=wV(W),K=!1,F=!1,A=(q)=>{if(F)return;F=!0,q()},L=()=>{if(!H)return;if(j){CV("taskkill",["/pid",String(H),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-H,"SIGKILL")}catch{V.kill("SIGKILL")}},f=(q)=>{K=!0,L(),A(()=>Y(q))},D=setTimeout(()=>f(new Y8(`Command timed out after ${Q}ms`,Q)),Q),U=()=>f(Error("Command was aborted"));if(Z.signal)Z.signal.addEventListener("abort",U);let T=()=>{clearTimeout(D),Z.signal?.removeEventListener("abort",U)};V.stdout?.on("data",(q)=>{B.append(q)}),V.stderr?.on("data",(q)=>{G.append(q)}),V.on("close",(q)=>{if(T(),K)return;let z=B.snapshot(),_=G.snapshot();if(q!==0){let E=q??1,w=J?z.text+(_.text?`
|
|
90
90
|
[stderr]
|
|
91
|
-
${_.text}`:""):z.text,y=z.dropped||J&&_.dropped,l=J?z.totalChars+_.totalChars:z.totalChars;if(y||
|
|
92
|
-
${
|
|
91
|
+
${_.text}`:""):z.text,y=z.dropped||J&&_.dropped,l=J?z.totalChars+_.totalChars:z.totalChars;if(y||w.length>W)w=o$(w,{maxChars:W,totalChars:l});let o=w.length>0?`[Command exited with code ${E}]
|
|
92
|
+
${w}`:`[Command exited with code ${E}]`;A(()=>Y(new n9(E,o)))}else{let E=J?z.text+(_.text?`
|
|
93
93
|
[stderr]
|
|
94
|
-
${_.text}`:""):z.text;if(z.dropped||J&&_.dropped||E.length>W){let y=J?z.totalChars+_.totalChars:z.totalChars;E=o$(E,{maxChars:W,totalChars:y})}A(()=>X(E))}}),V.on("error",(
|
|
95
|
-
`))}return Z}function
|
|
94
|
+
${_.text}`:""):z.text;if(z.dropped||J&&_.dropped||E.length>W){let y=J?z.totalChars+_.totalChars:z.totalChars;E=o$(E,{maxChars:W,totalChars:y})}A(()=>X(E))}}),V.on("error",(q)=>{T(),A(()=>Y(Error(`Failed to execute command: ${q.message}`)))})})}function t$($={}){let{shell:Z=rL(process.platform),timeoutMs:Q=30000,env:W={},combineOutput:J=!0}=$,X=$.maxOutputChars??$.maxOutputBytes??h1;return(Y,j,V)=>{let H=typeof Y!=="string";return nL({executable:H?Y.command:Z,args:H?Y.args??[]:iL(Z,Y),cwd:j,env:W},V,Q,X,J)}}function PV($,Z){let Q=$.metadata?.[Z];return typeof Q==="string"?Q:void 0}function aL($,Z){Fj(DV($.metadata),{tool_name:"run_commands",effective_timeout_ms:Z.effectiveTimeoutMs,timeout_source:Z.timeoutSource,command_count:Z.commandCount,duration_ms:Z.durationMs,ulid:$.sessionId,mode:PV($,"mode"),source:PV($,"source"),session_id:$.sessionId,agent_id:$.agentId,conversation_id:$.conversationId,run_id:$.runId,iteration:$.iteration,tool_call_id:$.toolCallId})}function sL($){let Z=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return Z?.[1]??Z?.[2]??Z?.[3]}function oL($){let Z=[];for(let Q=0;Q<$.length;Q+=1){let W=$[Q],J=sL(W);if(!J){Z.push(W);continue}let X=$.findIndex((j,V)=>V>Q&&j.trim()===J);if(X===-1){Z.push(W);continue}let Y=[W];while(Q<X){Q+=1;let j=$[Q];Y.push(j)}Z.push(Y.join(`
|
|
95
|
+
`))}return Z}function tL($){let Z=[],Q=[],W=()=>{if(Q.length>0)Z.push(...oL(Q)),Q=[]};for(let J of $){if(typeof J==="string"){Q.push(J);continue}W(),Z.push(J)}return W(),Z}async function eL($,Z){let{executor:Q,cwd:W,context:J,timeoutMs:X,timeoutSource:Y}=Z;return Promise.all($.map(async(j)=>{let V=Date.now(),H=NV(j);try{let B=await y1(Q(j,W,J),X,`Command timed out after ${X}ms`);return{query:H,result:B,success:!0}}catch(B){if(B instanceof Y8)aL(J,{effectiveTimeoutMs:B.timeoutMs,timeoutSource:Y,commandCount:$.length,durationMs:Date.now()-V});if(B instanceof n9)return{query:H,result:B.output,error:B.message,success:!1};let G=s$(B);return{query:H,result:"",error:`Command failed: ${G}`,success:!1}}}))}function MW($,Z={}){let Q=Z.fileReadTimeoutMs??1e4;return G$({name:"read_files",description:`Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. When you already know multiple files you need, read them together in one call, and call this tool in the same response as other independent tool calls. Each read returns at most ${j8} lines / ~${Math.round(i9/1024)}k characters; longer files report their total line count, page through them with start_line/end_line. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. `,inputSchema:k1(o4),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(W,J)=>{let X=K$(_V,W),Y;if(typeof X==="string")Y=[{path:X}];else if(Array.isArray(X))Y=X.map((j)=>typeof j==="string"?{path:j}:j);else if("files"in X)Y=(Array.isArray(X.files)?X.files:[X.files]).map((V)=>typeof V==="string"?{path:V}:V);else if("file_paths"in X)Y=(Array.isArray(X.file_paths)?X.file_paths:[X.file_paths]).map((V)=>({path:V}));else if("paths"in X)Y=(Array.isArray(X.paths)?X.paths:[X.paths]).map((V)=>typeof V==="string"?{path:V}:V);else Y=[X];return Promise.all(Y.map(async(j)=>{let V=RV(j);if(V)return{query:r9(j),result:"",error:`Invalid file range: ${V}`,success:!1};try{let H=await y1($(j,J),Q,`File read timed out after ${Q}ms`);return{query:r9(j),result:H,success:!0}}catch(H){let B=s$(H);return{query:r9(j),result:"",error:`Error reading file: ${B}`,success:!1}}}))}})}function RW($,Z={}){let Q=Z.searchTimeoutMs??30000,W=Z.cwd??process.cwd();return G$({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(V8/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:k1(t4),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(J,X)=>{let Y=K$(zV,J),j=Array.isArray(Y)?Y:typeof Y==="object"?Array.isArray(Y.queries)?Y.queries:[Y.queries]:[Y];return Promise.all(j.map(async(V)=>{try{let H=await y1($(V,W,X),Q,`Search timed out after ${Q}ms`);return{query:V,result:H,success:!0}}catch(H){let B=s$(H);return{query:V,result:"",error:`Search failed: ${B}`,success:!1}}}))}})}var SV="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 Y6($,Z={}){let Q=Z.bashTimeoutMs??30000,W=Z.bashTimeoutMs===void 0?"default_setting":"configured_setting",J=Z.cwd??process.cwd(),X=process.platform==="win32";return G$({name:"run_commands",description:X?"Run non-interactive shell commands from the root of the workspace in Windows environment. "+SV+`Output beyond ~${Math.round(h1/1000)}k characters is middle-truncated (start and end preserved); filter output when you need specific sections. Commands run through PowerShell; quote paths and arguments for PowerShell and use ';' to sequence commands. Include multiple commands in the same call when they are independent and safe to run concurrently. When independent reads, searches, or edits are also needed, call those tools in the same response.`:"Run non-interactive shell commands from the root of the workspace. "+SV+`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(h1/1000)}k characters is middle-truncated (start and end preserved); pipe through grep/head/tail when you need specific sections of large output. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.`,inputSchema:k1(e4),timeoutMs:Q*2,retryable:!1,maxRetries:0,execute:async(Y,j)=>{let V=tL(EV(Y));return eL(V,{executor:$,cwd:J,context:j,timeoutMs:Q,timeoutSource:W})}})}function EW($,Z={}){let Q=Z.webFetchTimeoutMs??30000;return G$({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:k1($6),timeoutMs:Q*2,retryable:!0,maxRetries:2,execute:async(W,J)=>{let X=K$($6,W);return Promise.all(X.requests.map(async(Y)=>{try{let j=await y1($(Y.url,Y.prompt,J),Q,`Web fetch timed out after ${Q}ms`);return{query:Y.url,result:j,success:!0}}catch(j){let V=s$(j);return{query:Y.url,result:"",error:`Error fetching web content: ${V}`,success:!1}}}))}})}var $_=`Use \`apply_patch\` to edit files with the canonical freeform patch grammar. Pass the patch text directly as the \`input\` string. Prefer the exact format below:
|
|
96
96
|
|
|
97
97
|
*** Begin Patch
|
|
98
98
|
*** Update File: path/to/file.ts
|
|
@@ -128,48 +128,48 @@ Example:
|
|
|
128
128
|
</div>
|
|
129
129
|
);
|
|
130
130
|
}
|
|
131
|
-
*** End Patch`;function NW($,Z={}){let Q=Z.applyPatchTimeoutMs??30000,W=Z.cwd??process.cwd();return G$({name:"apply_patch",description
|
|
131
|
+
*** End Patch`;function NW($,Z={}){let Q=Z.applyPatchTimeoutMs??30000,W=Z.cwd??process.cwd();return G$({name:"apply_patch",description:$_,inputSchema:k1(Q6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(J,X)=>{let Y=K$(qV,J),j=typeof Y==="string"?Y:Y.input;try{return{query:"apply_patch",result:await y1($({input:j},W,X),Q,`apply_patch timed out after ${Q}ms`),success:!0}}catch(V){return{query:"apply_patch",result:"",error:`apply_patch failed: ${s$(V)}`,success:!1}}}})}function CW($,Z={}){let Q=Z.editorTimeoutMs??30000,W=Z.cwd??process.cwd();return G$({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:k1(Z6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(J,X)=>{let Y=K$(Z6,J),j=Y.insert_line==null?"edit":"insert",V=MV(Y);if(V)return{query:`${j}:${Y.path}`,result:"",error:V,success:!1};try{let H=await y1($(Y,W,X),Q,`Editor operation timed out after ${Q}ms`);return{query:`${j}:${Y.path}`,result:H,success:!0}}catch(H){let B=s$(H);return{query:`${j}:${Y.path}`,result:"",error:`Editor operation failed: ${B}`,success:!1}}}})}function e$($,Z={}){let Q=Z.skillsTimeoutMs??15000,W='Execute a skill within the main conversation. When users ask you to perform tasks, check if any available skills match. When users reference a slash command, invoke it with this tool. Input: `skill` (required) and optional `args`. Example: `skill: "pdf"`, `skill: "commit", args: "-m \\"Fix bug\\""`, `skill: "review-pr", args: "123"`, `skill: "ms-office-suite:pdf"`. When a skill matches the user\'s request, invoking this tool is a blocking requirement before any other response. Never mention a skill without invoking this tool.',J=G$({name:"skills",description:W,inputSchema:k1(W6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(X,Y)=>{let j=K$(W6,X);return y1($(j.skill,j.args||void 0,Y),Q,`Skills operation timed out after ${Q}ms`)}});return Object.defineProperty(J,"description",{get(){let X=$.configuredSkills?.filter((Y)=>!Y.disabled).map((Y)=>Y.name);if(X&&X.length>0)return`${W} Available skills: ${X.join(", ")}.`;return W},enumerable:!0,configurable:!0}),J}function wW($){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:k1(J6),retryable:!1,maxRetries:0,execute:async(Z,Q)=>{let W=K$(J6,Z);return $(W.question,W.options,Q)}}}function PW($,Z={}){let Q=Z.submitTimeoutMs??15000;return G$({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:k1(X6),lifecycle:{completesRun:!0},timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(W,J)=>{let X=K$(X6,W);return y1($(X.summary,X.verified,J),Q,`submit_and_exit timed out after ${Q}ms`)}})}function F$($){let{executors:Z,enableReadFiles:Q=!0,enableSearch:W=!0,enableBash:J=!0,enableWebFetch:X=!0,enableApplyPatch:Y=!1,enableEditor:j=!0,enableSkills:V=!0,enableAskQuestion:H=!0,enableSubmitAndExit:B=!1,...G}=$,K=[];if(Q&&Z.readFile)K.push(MW(Z.readFile,G));if(W&&Z.search)K.push(RW(Z.search,G));if(J&&Z.bash)K.push(Y6(Z.bash,G));if(X&&Z.webFetch)K.push(EW(Z.webFetch,G));if(j&&Z.editor)K.push(CW(Z.editor,G));else if(Y&&Z.applyPatch)K.push(NW(Z.applyPatch,G));if(V&&Z.skills)K.push(e$(Z.skills,G));let F=B?Z.submit:void 0;if(H&&Z.askQuestion&&!F)K.push(wW(Z.askQuestion));if(F)K.push(PW(F,G));return K}import*as v0 from"node:fs/promises";import*as c0 from"node:path";var d={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},yV=["%%bash","apply_patch","EOF","```"];class V0 extends Error{constructor($){super($);this.name="DiffError"}}function m0($){let Z={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(Q)=>Z[Q]??Q).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class SW{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor($,Z){this.lines=$;this.currentFiles=Z}parse(){this.skipBeginSentinel();while(this.hasMoreLines()&&!this.isEndMarker())this.parseNextAction();if(this.patch.warnings?.length===0)delete this.patch.warnings;return{patch:this.patch,fuzz:this.fuzz}}addWarning($){if(!this.patch.warnings)this.patch.warnings=[];this.patch.warnings.push($)}skipBeginSentinel(){if(this.lines[this.index]?.startsWith(d.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(d.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(d.UPDATE)){this.parseUpdate($.substring(d.UPDATE.length).trim());return}if($?.startsWith(d.DELETE)){this.parseDelete($.substring(d.DELETE.length).trim());return}if($?.startsWith(d.ADD)){this.parseAdd($.substring(d.ADD.length).trim());return}throw new V0(`Unknown line while parsing: ${$}`)}checkDuplicate($,Z){if($ in this.patch.actions)throw new V0(`Duplicate ${Z} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let Z=this.lines[this.index]?.startsWith(d.MOVE)?(this.lines[this.index++]??"").substring(d.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new V0(`Update File Error: Missing File: ${$}`);let Q=this.currentFiles[$]??"",W=this.parseUpdateFile(Q,$);W.movePath=Z,this.patch.actions[$]=W,this.currentPath=void 0}parseUpdateFile($,Z){let Q={type:"update",chunks:[]},W=$.split(`
|
|
132
132
|
`),J=0,X=[d.END,d.UPDATE,d.DELETE,d.ADD,d.END_FILE];while(!X.some((Y)=>this.lines[this.index]?.startsWith(Y.trim()))){let Y=this.lines[this.index],j=Y?.startsWith("@@ ")?Y.substring(3):void 0;if(j!==void 0||(Y==="@@"?Y:void 0)!==void 0)this.index++;else if(J!==0)throw new V0(`Invalid Line:
|
|
133
|
-
${this.lines[this.index]}`);if(j?.trim()){let f=m0(j.trim());for(let D=J;D<W.length;D++){let U=W[D];if(U&&(m0(U)===f||m0(U.trim())===f)){if(J=D+1,m0(U.trim())===f&&m0(U)!==f)this.fuzz++;break}}}let[H,B,G,K]
|
|
133
|
+
${this.lines[this.index]}`);if(j?.trim()){let f=m0(j.trim());for(let D=J;D<W.length;D++){let U=W[D];if(U&&(m0(U)===f||m0(U.trim())===f)){if(J=D+1,m0(U.trim())===f&&m0(U)!==f)this.fuzz++;break}}}let[H,B,G,K]=W_(this.lines,this.index),[F,A,L]=Q_(W,H,J,K);if(F===-1){let f=H.join(`
|
|
134
134
|
`);this.addWarning({path:this.currentPath||Z,chunkIndex:Q.chunks.length,message:`Could not find matching context (similarity: ${L.toFixed(2)}). Chunk skipped.`,context:f.length>200?`${f.substring(0,200)}...`:f}),this.index=G}else{this.fuzz+=A;for(let f of B)f.origIndex+=F,Q.chunks.push(f);J=F+H.length,this.index=G}}return Q}parseDelete($){if(this.checkDuplicate($,"delete"),!($ in this.currentFiles))throw new V0(`Delete File Error: Missing File: ${$}`);this.patch.actions[$]={type:"delete",chunks:[]},this.index++}parseAdd($){if(this.checkDuplicate($,"add"),$ in this.currentFiles)throw new V0(`Add File Error: File already exists: ${$}`);this.index++;let Z=[],Q=[d.END,d.UPDATE,d.DELETE,d.ADD];while(this.hasMoreLines()&&!Q.some((W)=>this.lines[this.index]?.startsWith(W.trim()))){let W=this.lines[this.index++];if(W===void 0)break;if(!W.startsWith("+"))throw new V0(`Invalid Add File line (missing '+'): ${W}`);Z.push(W.substring(1))}this.patch.actions[$]={type:"add",newFile:Z.join(`
|
|
135
|
-
`),chunks:[]}}}function bV($,Z){let Q=$.length>Z.length?$:Z,W=$.length>Z.length?Z:$;if(Q.length===0)return 1;let J=
|
|
135
|
+
`),chunks:[]}}}function bV($,Z){let Q=$.length>Z.length?$:Z,W=$.length>Z.length?Z:$;if(Q.length===0)return 1;let J=Z_(W,Q);return(Q.length-J)/Q.length}function Z_($,Z){let Q=Z.length+1,W=$.length+1,J=Array(Q*W).fill(0),X=(j,V)=>J[j*W+V]??0,Y=(j,V,H)=>{J[j*W+V]=H};for(let j=0;j<=Z.length;j++)Y(j,0,j);for(let j=0;j<=$.length;j++)Y(0,j,j);for(let j=1;j<=Z.length;j++)for(let V=1;V<=$.length;V++)if(Z[j-1]===$[V-1])Y(j,V,X(j-1,V-1));else Y(j,V,1+Math.min(X(j-1,V-1),X(j,V-1),X(j-1,V)));return X(Z.length,$.length)}function Q_($,Z,Q,W){if(Z.length===0)return[Q,0,1];let J=0,X=(Y)=>{let j=m0(Z.join(`
|
|
136
136
|
`));for(let H=Y;H<$.length;H++){let B=m0($.slice(H,H+Z.length).join(`
|
|
137
137
|
`));if(B===j)return[H,0,1];let G=bV(B,j);if(G>J)J=G}for(let H=Y;H<$.length;H++){let B=m0($.slice(H,H+Z.length).map((K)=>K.trimEnd()).join(`
|
|
138
138
|
`)),G=m0(Z.map((K)=>K.trimEnd()).join(`
|
|
139
139
|
`));if(B===G)return[H,1,1]}for(let H=Y;H<$.length;H++){let B=m0($.slice(H,H+Z.length).map((K)=>K.trim()).join(`
|
|
140
140
|
`)),G=m0(Z.map((K)=>K.trim()).join(`
|
|
141
141
|
`));if(B===G)return[H,100,1]}let V=0.66;for(let H=Y;H<$.length;H++){let B=m0($.slice(H,H+Z.length).join(`
|
|
142
|
-
`)),G=bV(B,j);if(G>=V)return[H,1000,G];if(G>J)J=G}return[-1,0,J]};if(W){let[Y,j,V]=X($.length-Z.length);if(Y!==-1)return[Y,j,V];return[Y,j,V]=X(Q),[Y,j+1e4,V]}return X(Q)}function
|
|
143
|
-
`).map((Z)=>Z.replace(/\r$/,""))}function hV($){if($.trim()==="")return!1;return yV.some((Z)=>$.startsWith(Z))}function
|
|
142
|
+
`)),G=bV(B,j);if(G>=V)return[H,1000,G];if(G>J)J=G}return[-1,0,J]};if(W){let[Y,j,V]=X($.length-Z.length);if(Y!==-1)return[Y,j,V];return[Y,j,V]=X(Q),[Y,j+1e4,V]}return X(Q)}function W_($,Z){let Q=Z,W=[],J=[],X=[],Y=[],j="keep",V=["@@",d.END,d.UPDATE,d.DELETE,d.ADD,d.END_FILE];while(Q<$.length){let H=$[Q];if(!H||V.some((K)=>H.startsWith(K.trim())))break;if(H==="***")break;if(H.startsWith("***"))throw new V0(`Invalid line: ${H}`);Q++;let B=j,G=H;if(G[0]==="+")j="add";else if(G[0]==="-")j="delete";else if(G[0]===" ")j="keep";else j="keep",G=` ${G}`;if(G=G.slice(1),j==="keep"&&B!==j){if(X.length||J.length)Y.push({origIndex:W.length-J.length,delLines:J,insLines:X});J=[],X=[]}if(j==="delete")J.push(G),W.push(G);else if(j==="add")X.push(G);else W.push(G)}if(X.length||J.length)Y.push({origIndex:W.length-J.length,delLines:J,insLines:X});if(Q<$.length&&$[Q]===d.END_FILE)return Q++,[W,Y,Q,!0];return[W,Y,Q,!1]}function bW($,Z,Q){let W=c0.isAbsolute(Z),J=W?c0.normalize(Z):c0.resolve($,Z);if(!Q||W)return J;let X=c0.relative($,J);if(X.startsWith("..")||c0.isAbsolute(X))throw new V0(`Path must stay within cwd: ${Z}`);return J}function J_($){return $.split(`
|
|
143
|
+
`).map((Z)=>Z.replace(/\r$/,""))}function hV($){if($.trim()==="")return!1;return yV.some((Z)=>$.startsWith(Z))}function X_($){let Z=0,Q=$.length;while(Z<Q&&hV($[Z]??""))Z++;while(Q>Z&&hV($[Q-1]??""))Q--;return $.slice(Z,Q)}function Y_($){let Z=J_($),Q=Z.findIndex((Y)=>Y.startsWith(d.BEGIN)),W=-1;for(let Y=Z.length-1;Y>=0;Y--)if(Z[Y]?.startsWith(d.END)){W=Y;break}if(Q!==-1||W!==-1){if(Q===-1||W===-1||W<Q)throw new V0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:Z.slice(Q,W+1)}}let J=X_(Z);while(J.length>0&&J[0]==="")J.shift();while(J.length>0&&J[J.length-1]==="")J.pop();return{lines:[d.BEGIN,...J,d.END]}}function j_($,Z){let Q=new Set;for(let W of $)for(let J of Z)if(W.startsWith(J)){Q.add(W.substring(J.length).trim());break}return[...Q]}function V_($,Z,Q){if(Z.length===0)return $;let W=$.split(`
|
|
144
144
|
`),J=[],X=0;for(let Y of Z){if(Y.origIndex>W.length)throw new V0(`${Q}: chunk.origIndex ${Y.origIndex} > lines.length ${W.length}`);if(X>Y.origIndex)throw new V0(`${Q}: currentIndex ${X} > chunk.origIndex ${Y.origIndex}`);J.push(...W.slice(X,Y.origIndex)),J.push(...Y.insLines),X=Y.origIndex+Y.delLines.length}return J.push(...W.slice(X)),J.join(`
|
|
145
|
-
`)}async function
|
|
146
|
-
`)}return X}function
|
|
145
|
+
`)}async function H_($,Z,Q,W){let J=j_($,[d.UPDATE,d.DELETE]),X={};for(let Y of J){let j=bW(Z,Y,W),V;try{V=await v0.readFile(j,Q)}catch{throw new V0(`File not found: ${Y}`)}X[Y]=V.replace(/\r\n/g,`
|
|
146
|
+
`)}return X}function B_($,Z){let Q={};for(let[W,J]of Object.entries($.actions))switch(J.type){case"delete":Q[W]={type:"delete",oldContent:Z[W]};break;case"add":if(J.newFile===void 0)throw new V0("ADD action without file content");Q[W]={type:"add",newContent:J.newFile};break;case"update":Q[W]={type:"update",oldContent:Z[W],newContent:V_(Z[W]??"",J.chunks,W),movePath:J.movePath};break}return Q}function G_($){let Z=[`Patch could not be applied because ${$.length} hunk${$.length===1?"":"s"} did not match the current file content.`];for(let Q of $){let W=Q.chunkIndex===void 0?"unknown":String(Q.chunkIndex+1);if(Z.push(`${Q.path}: hunk ${W}: ${Q.message}`),Q.context)Z.push(`Context:
|
|
147
147
|
${Q.context}`)}return Z.join(`
|
|
148
|
-
`)}async function
|
|
149
|
-
`)}}import*as X1 from"node:fs/promises";import*as J1 from"node:path";function
|
|
148
|
+
`)}async function K_($,Z,Q,W){let J=[];for(let[X,Y]of Object.entries($)){let j=bW(Z,X,W);switch(Y.type){case"delete":await v0.rm(j,{force:!0}),J.push(`${X}: [deleted]`);break;case"add":if(Y.newContent===void 0)throw new V0(`Cannot create ${X} with no content`);await v0.mkdir(c0.dirname(j),{recursive:!0}),await v0.writeFile(j,Y.newContent,{encoding:Q}),J.push(X);break;case"update":{if(Y.newContent===void 0)throw new V0(`UPDATE change for ${X} has no new content`);if(Y.movePath){let V=bW(Z,Y.movePath,W);await v0.mkdir(c0.dirname(V),{recursive:!0}),await v0.writeFile(V,Y.newContent,{encoding:Q}),await v0.rm(j,{force:!0}),J.push(`${X} -> ${Y.movePath}`)}else await v0.writeFile(j,Y.newContent,{encoding:Q}),J.push(X);break}}}return J}function j6($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0}=$;return async(W,J,X)=>{let Y=Y_(W.input),j=await H_(Y.lines,J,Z,Q),V=new SW(Y.lines,j),{patch:H,fuzz:B}=V.parse();if(H.warnings&&H.warnings.length>0)throw new V0(G_(H.warnings));let G=B_(H,j),K=await K_(G,J,Z,Q),F=["Successfully applied patch to the following files:"];for(let A of K)F.push(A);if(B>0)F.push(`Note: Patch applied with fuzz factor ${B}`);return F.join(`
|
|
149
|
+
`)}}import*as X1 from"node:fs/promises";import*as J1 from"node:path";function F_($,Z,Q){let W=J1.isAbsolute(Z),J=W?J1.normalize(Z):J1.resolve($,Z);if(!Q)return J;if(W)return J;let X=J1.relative($,J);if(X.startsWith("..")||J1.isAbsolute(X))throw Error(`Path must stay within cwd: ${Z}`);return J}function A_($,Z){if(Z.length===0)return 0;return $.split(Z).length-1}function f_($,Z,Q){let W=$.split(`
|
|
150
150
|
`),J=Z.split(`
|
|
151
151
|
`),X=Math.max(W.length,J.length),Y=["```diff"],j=0;for(let V=0;V<X;V++){if(j>=Q){Y.push("... diff truncated ...");break}let H=W[V],B=J[V];if(H===B)continue;let G=V+1;if(H!==void 0)Y.push(`-${G}: ${H}`),j++;if(B!==void 0&&j<Q)Y.push(`+${G}: ${B}`),j++}return Y.push("```"),Y.join(`
|
|
152
|
-
`)}async function
|
|
153
|
-
${V}`}async function
|
|
152
|
+
`)}async function U_($,Z,Q){return await X1.mkdir(J1.dirname($),{recursive:!0}),await X1.writeFile($,Z,{encoding:Q}),`File created successfully at: ${$}`}async function D_($){try{return await X1.access($),!0}catch{return!1}}async function L_($,Z,Q,W,J){let X=await X1.readFile($,W),Y=A_(X,Z);if(Y===0)throw Error(`No replacement performed: text not found in ${$}.`);if(Y>1)throw Error(`No replacement performed: multiple occurrences of text found in ${$}.`);let j=X.replace(Z,Q??"");await X1.writeFile($,j,{encoding:W});let V=f_(X,j,J);return`Edited ${$}
|
|
153
|
+
${V}`}async function __($,Z,Q,W){let X=(await X1.readFile($,W)).split(`
|
|
154
154
|
`),Y=X.length+1;if(Z<1||Z>Y)throw Error(`Invalid insert_line: ${Z}. insert_line must be a positive one-based boundary line in the range 1-${Y}. Use ${Y} to append at EOF.`);let j=Z-1;return X.splice(j,0,...Q.split(`
|
|
155
155
|
`)),await X1.writeFile($,X.join(`
|
|
156
|
-
`),{encoding:W}),`Inserted content at line ${Z} in ${$}.`}function V6($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0,maxDiffLines:W=200}=$;return async(J,X,Y)=>{let j=
|
|
157
|
-
`),_=B[B.length-1]?.lineNumber;if(_===void 0)return z;let E=Math.min(j,K);if(_>=E)return z;let
|
|
156
|
+
`),{encoding:W}),`Inserted content at line ${Z} in ${$}.`}function V6($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0,maxDiffLines:W=200}=$;return async(J,X,Y)=>{let j=F_(X,J.path,Q);if(J.insert_line!=null)return __(j,J.insert_line,J.new_text,Z);if(!await D_(j))return U_(j,J.new_text,Z);if(J.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return L_(j,J.old_text,J.new_text,Z,W)}}import{createReadStream as z_}from"node:fs";import*as a9 from"node:fs/promises";import*as A$ from"node:path";import{createInterface as T_}from"node:readline";import{resolveExistingFilePath as O_}from"@cline/shared/storage";var q_=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),M_={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},kV=1e8,R_=50000;function IV($){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 E_($,Z,Q,W,J,X){if(X?.aborted)throw IV(X);let Y=Math.max(W??1,1),j=J??Number.POSITIVE_INFINITY,V=Number.isFinite(j),H=V?j:Y+R_-1,B=[],G=0,K=0,F=!1,A=!1,L=Number.isFinite(j)?Math.min(j,Y+j8-1):Y+j8-1,f=Q?String(L).length+3:0,D=z_($,{encoding:Z}),U=T_({input:D,crlfDelay:Number.POSITIVE_INFINITY}),T=X?()=>D.destroy(IV(X)):void 0;if(X&&T)X.addEventListener("abort",T,{once:!0});try{for await(let y of U){if(K+=1,K>j){K=j;break}if(!V&&F&&K>=H){A=!0;break}if(K<Y||F)continue;if(B.length>=j8){F=!0;continue}let l=y;if(l.length>qW)l=`${l.slice(0,qW)} [line truncated]`;let o=G+l.length+f+1;if(o>i9&&B.length>0){F=!0;continue}B.push({lineNumber:K,text:l}),G=o}}finally{if(X&&T)X.removeEventListener("abort",T);U.close(),D.destroy()}let q=String(B[B.length-1]?.lineNumber??K).length,z=B.map(({lineNumber:y,text:l})=>Q?`${String(y).padStart(q," ")} | ${l}`:l).join(`
|
|
157
|
+
`),_=B[B.length-1]?.lineNumber;if(_===void 0)return z;let E=Math.min(j,K);if(_>=E)return z;let w=A?`${K}+ lines`:E;return`${z}
|
|
158
158
|
|
|
159
|
-
[Showing lines ${Y}-${_} of ${
|
|
160
|
-
`).filter((f)=>f.trim());for(let f of L){if(A.length>=Q)break;let D=JSON.parse(f);if(D.type==="match"){let U=D.data,T=[];if(D.data.submatches&&D.data.submatches.length>0){let
|
|
161
|
-
`))}let F;try{F=new RegExp(V,"gim")}catch(U){throw Error(`Invalid regex pattern: ${V}. ${U instanceof Error?U.message:""}`)}let A=[],L=0,f=await
|
|
162
|
-
`);for(let _=0;_<z.length;_++){let E=z[_];F.lastIndex=0;let
|
|
159
|
+
[Showing lines ${Y}-${_} of ${w}. Use start_line/end_line to read other sections.]`}function H6($={}){let{maxFileSizeBytes:Z,encoding:Q,includeLineNumbers:W}={...M_,...$};return async(J,X)=>{let{path:Y,start_line:j,end_line:V}=J,H=A$.isAbsolute(Y)?A$.normalize(Y):A$.resolve(process.cwd(),Y),B=O_(H)??H,G=A$.extname(B).toLowerCase(),K=q_.get(G),F=await a9.stat(B);if(!F.isFile())throw Error(`Path is not a file: ${B}`);if(K){if(F.size>Z)throw Error(`Image file too large: ${F.size} bytes (max: ${Z} bytes).`);if(X.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let A=await a9.readFile(B);return[{type:"text",text:"Successfully read image"},{type:"image",data:A.toString("base64"),mediaType:K}]}if(F.size>kV)throw Error(`Text file too large to stream safely: ${F.size} bytes (max: ${kV} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return E_(B,Q,W,j,V,X.signal)}}import{spawn as lV}from"node:child_process";import*as pV from"node:fs/promises";import*as t9 from"node:path";var uV={};N(uV,{prewarmFileIndex:()=>o9,getFileIndex:()=>I1,enrichPromptWithMentions:()=>B8});import{spawn as N_}from"node:child_process";import{readdir as C_}from"node:fs/promises";import hW from"node:path";import{isMainThread as mV,parentPort as xV,Worker as w_}from"node:worker_threads";var P_=15000,S_=600000,b_=1000,y_=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function gV($){let Z=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return Z==="EACCES"||Z==="EPERM"||Z==="ENOENT"}var H8=new Map;function h_(){if(!mV)return!1;return!0}function k_($){if(H8.size<=1)return;for(let[Z,Q]of H8.entries()){if(Q.pending)continue;if($-Q.lastAccessedAt>S_)H8.delete(Z)}}function I_($,Z){return hW.relative($,Z).split(hW.sep).join("/")}async function x_($){let Q=(await new Promise((W,J)=>{let X=N_("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"],windowsHide:!0}),Y="",j="";X.stdout.on("data",(V)=>{Y+=V.toString()}),X.stderr.on("data",(V)=>{j+=V.toString()}),X.on("error",J),X.on("close",(V)=>{if(V===0){W(Y);return}J(Error(j||`rg exited with code ${V}`))})})).split(/\r?\n/).map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>W.replace(/\\/g,"/"));return new Set(Q)}async function vV($,Z,Q){let W;try{W=await C_(Z,{withFileTypes:!0})}catch(J){if(gV(J))return;throw J}for(let J of W){let X=hW.join(Z,J.name);if(J.isDirectory()){if(y_.has(J.name))continue;try{await vV($,X,Q)}catch(Y){if(gV(Y))continue;throw Y}continue}if(J.isFile())Q.add(I_($,X))}}async function g_($){let Z=new Set;return await vV($,$,Z),Z}async function s9($){try{return await x_($)}catch{return g_($)}}function m_(){if(mV||!xV)return;let $=xV;$.on("message",(Z)=>{if(Z.type!=="index")return;s9(Z.cwd).then((Q)=>{let W={type:"indexResult",requestId:Z.requestId,files:Array.from(Q)};$.postMessage(W)}).catch((Q)=>{let W={type:"indexResult",requestId:Z.requestId,error:Q instanceof Error?Q.message:"Failed to build file index"};$.postMessage(W)})})}class cV{worker=new w_(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",($)=>{if($.type!=="indexResult")return;let Z=this.pending.get($.requestId);if(!Z)return;if(this.pending.delete($.requestId),$.error){Z.reject(Error($.error));return}Z.resolve($.files??[])}),this.worker.on("error",($)=>{this.flushPending($)}),this.worker.on("exit",($)=>{if($!==0)this.flushPending(Error(`File index worker exited with code ${$}`))})}requestIndex($){let Z=++this.nextRequestId,Q=new Promise((J,X)=>{let Y=setTimeout(()=>{this.pending.delete(Z),J(null)},b_);Y.unref(),this.pending.set(Z,{resolve:(j)=>{clearTimeout(Y),J(j)},reject:(j)=>{clearTimeout(Y),X(j)}})}),W={type:"index",requestId:Z,cwd:$};return this.worker.postMessage(W),Q}flushPending($){for(let[Z,Q]of this.pending.entries())Q.reject($),this.pending.delete(Z)}}m_();var yW;function v_(){if(!h_())return null;if(yW===void 0)yW=new cV;return yW}async function c_($){let Z=v_();if(!Z)return s9($);try{let Q=await Z.requestIndex($);if(Q===null)return s9($);return new Set(Q)}catch{return s9($)}}async function I1($,Z={}){let Q=Z.ttlMs??P_,W=Date.now();k_(W);let J=H8.get($);if(J&&Q>0&&W-J.lastBuiltAt<=Q&&J.files.size>0)return J.lastAccessedAt=W,J.files;if(J?.pending)return J.lastAccessedAt=W,J.pending;let X=c_($).then((Y)=>{return H8.set($,{files:Y,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),Y});return H8.set($,{files:J?.files??new Set,lastBuiltAt:J?.lastBuiltAt??0,lastAccessedAt:W,pending:X}),X}async function o9($,Z={}){await I1($,{...Z,ttlMs:0})}import{stat as u_}from"node:fs/promises";import $2 from"node:path";var d_=/[),.:;!?`'"]+$/,l_=/^[(`'"]+/;function p_($){let Z=$.matchAll(/(^|[\s])@([^\s]+)/g),Q=[];for(let W of Z){let J=(W[2]??"").trim();if(J.length===0)continue;let X=J.replace(l_,"").replace(d_,"");if(X.length===0||X.includes("@"))continue;Q.push(X)}return Array.from(new Set(Q))}function r_($,Z){let Q=$.replace(/\\/g,"/"),W=$2.isAbsolute(Q)?$2.resolve(Q):$2.resolve(Z,Q),J=$2.relative(Z,W);if(J.startsWith("..")||$2.isAbsolute(J))return;return J.split($2.sep).join("/")}async function B8($,Z,Q={}){let W=p_($);if(W.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:J,maxFileBytes:X,maxTotalBytes:Y}=Q,j=await I1(Z,{ttlMs:Q.ttlMs}),V=[],H=[],B=[],G=0;for(let K of W){if(J&&B.length>=J){H.push(K);continue}let F=r_(K,Z);if(!F||!j.has(F)){H.push(K);continue}if(!X||!Y){V.push(F);continue}let A=$2.join(Z,F);try{if(!(await u_(A)).isFile()){H.push(K);continue}let f=G+X;if(f>Y){H.push(K);continue}G=f,V.push(F)}catch{H.push(K)}}return{prompt:$,mentions:W,matchedFiles:V,ignoredMentions:H}}var i_=["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"],n_=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],Z2=null;function a_(){if(Z2!==null)return Promise.resolve(Z2);return new Promise(($)=>{let Z=lV("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});Z.on("close",(Q)=>{Z2=Q===0,$(Z2)}),Z.on("error",()=>{Z2=!1,$(!1)}),setTimeout(()=>{if(!Z.killed)Z.kill("SIGTERM");if(Z2===null)Z2=!1,$(!1)},1000)})}function s_($,Z,Q,W,J=5000,X){return new Promise((Y)=>{let j=lV("rg",["--json",`--context=${W}`,"--max-count=1","-i",$],{cwd:Z,stdio:["ignore","pipe","pipe"],windowsHide:!0}),V="",H=!1,B=()=>{if(!j.killed)j.kill("SIGTERM")},G=setTimeout(()=>{if(!H)H=!0,B(),Y(null)},J),K=(F)=>{if(!H)H=!0,clearTimeout(G),B(),Y(F)};if(X?.aborted){B(),Y(null);return}X?.addEventListener("abort",()=>{K(null)}),j.stdout.on("data",(F)=>{V+=F.toString()}),j.stderr.on("data",()=>{}),j.on("close",(F)=>{if(F===0||F===1){try{let A=[],L=V.split(`
|
|
160
|
+
`).filter((f)=>f.trim());for(let f of L){if(A.length>=Q)break;let D=JSON.parse(f);if(D.type==="match"){let U=D.data,T=[];if(D.data.submatches&&D.data.submatches.length>0){let q=D.data.submatches[0];A.push({file:U.path.text,line:U.line_number,column:(q?.start??0)+1,match:q?.match?.text??"",context:T})}}else if(D.type==="context"&&A.length>0){let U=A[A.length-1],T=D.data.line_number===U.line?">":" ";U.context.push(`${T} ${D.data.line_number}: ${D.data.lines?.text??D.data.line?.text??""}`)}}K(A.length>0?A:null)}catch{K(null)}return}K(null)}),j.on("error",()=>{K(null)})})}function o_($,Z,Q,W){let J=$.split("/"),X=J[J.length-1]??"";if(J.length-1>W)return!1;for(let V=0;V<J.length-1;V++)if(Z.has(J[V]??""))return!1;let j=t9.posix.extname(X).slice(1).toLowerCase();return Q.has(j)||!j&&!X.startsWith(".")}function B6($={}){let{includeExtensions:Z=i_,excludeDirs:Q=n_,maxResults:W=100,contextLines:J=2,maxDepth:X=20}=$,Y=new Set(Q),j=new Set(Z.map((V)=>V.toLowerCase()));return async(V,H,B)=>{if(B.signal?.aborted)throw Error("Search operation aborted");let G=await a_(),K=null;if(G)K=await s_(V,H,W,J,5000,B.signal);if(K){let U=[`Found ${K.length} result${K.length===1?"":"s"} for pattern: ${V}`,""];for(let T of K)U.push(`${T.file}:${T.line}:${T.column}`),U.push(...T.context),U.push("");if(K.length>=W)U.push(`(Showing first ${W} results. Refine your search for more specific results.)`);return dV(U.join(`
|
|
161
|
+
`))}let F;try{F=new RegExp(V,"gim")}catch(U){throw Error(`Invalid regex pattern: ${V}. ${U instanceof Error?U.message:""}`)}let A=[],L=0,f=await I1(H);for(let U of f){if(B.signal?.aborted)throw Error("Search operation aborted");if(!o_(U,Y,j,X))continue;if(A.length>=W)break;L++;let T=t9.join(H,U);try{let z=(await pV.readFile(T,"utf-8")).split(`
|
|
162
|
+
`);for(let _=0;_<z.length;_++){let E=z[_];F.lastIndex=0;let w=F.exec(E);while(w!==null){if(A.length>=W)break;let y=Math.max(0,_-J),l=Math.min(z.length-1,_+J),o=[];for(let t=y;t<=l;t++){let Q0=t===_?">":" ";o.push(`${Q0} ${t+1}: ${z[t]}`)}if(A.push({file:U,line:_+1,column:w.index+1,match:w[0],context:o}),w.index===F.lastIndex)F.lastIndex++;w=F.exec(E)}}}catch{}}if(A.length===0)return`No results found for pattern: ${V}
|
|
163
163
|
Searched ${L} files.`;let D=[`Found ${A.length} result${A.length===1?"":"s"} for pattern: ${V}`,`Searched ${L} files.`,""];for(let U of A)D.push(`${U.file}:${U.line}:${U.column}`),D.push(...U.context),D.push("");if(A.length>=W)D.push(`(Showing first ${W} results. Refine your search for more specific results.)`);return dV(D.join(`
|
|
164
|
-
`))}}function dV($){if($.length<=
|
|
164
|
+
`))}}function dV($){if($.length<=V8)return $;let Z=Math.ceil(V8/2),Q=Math.max(1,V8-Z);return`${$.slice(0,Z)}
|
|
165
165
|
[... search output truncated: ${$.length} chars total. Narrow the pattern or scope to view the elided matches ...]
|
|
166
|
-
`+$.slice(-Q)}function
|
|
166
|
+
`+$.slice(-Q)}function t_($){return $.replace(/<script[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style[^>]*>[\s\S]*?<\/style>/gi,"").replace(/<!--[\s\S]*?-->/g,"").replace(/<(p|div|br|hr|h[1-6]|li|tr)[^>]*>/gi,`
|
|
167
167
|
`).replace(/<[^>]+>/g," ").replace(/ /g," ").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/&#(\d+);/g,(Z,Q)=>String.fromCharCode(parseInt(Q,10))).replace(/\s+/g," ").replace(/\n\s+/g,`
|
|
168
168
|
`).replace(/\n{3,}/g,`
|
|
169
169
|
|
|
170
|
-
`).trim()}function G6($={}){let{timeoutMs:Z=30000,maxResponseBytes:Q=5000000,userAgent:W="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:J={},followRedirects:X=!0}=$;return async(Y,j,V)=>{let H;try{H=new URL(Y)}catch{throw Error(`Invalid URL: ${Y}`)}if(!["http:","https:"].includes(H.protocol))throw Error(`Invalid protocol: ${H.protocol}. Only http and https are supported.`);let B=new AbortController,G=setTimeout(()=>B.abort(),Z),K;if(V.signal)K=()=>B.abort(),V.signal.addEventListener("abort",K);try{let F=await fetch(Y,{method:"GET",headers:{"User-Agent":W,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...J},redirect:X?"follow":"manual",signal:B.signal});if(clearTimeout(G),!X&&F.status>=300&&F.status<400)return`Redirect to: ${F.headers.get("location")}`;if(!F.ok)throw Error(`HTTP ${F.status}: ${F.statusText}`);let A=F.headers.get("content-type")||"",L=F.body?.getReader();if(!L)throw Error("Failed to read response body");let f=[],D=0;while(!0){let{done:E,value:
|
|
170
|
+
`).trim()}function G6($={}){let{timeoutMs:Z=30000,maxResponseBytes:Q=5000000,userAgent:W="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:J={},followRedirects:X=!0}=$;return async(Y,j,V)=>{let H;try{H=new URL(Y)}catch{throw Error(`Invalid URL: ${Y}`)}if(!["http:","https:"].includes(H.protocol))throw Error(`Invalid protocol: ${H.protocol}. Only http and https are supported.`);let B=new AbortController,G=setTimeout(()=>B.abort(),Z),K;if(V.signal)K=()=>B.abort(),V.signal.addEventListener("abort",K);try{let F=await fetch(Y,{method:"GET",headers:{"User-Agent":W,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...J},redirect:X?"follow":"manual",signal:B.signal});if(clearTimeout(G),!X&&F.status>=300&&F.status<400)return`Redirect to: ${F.headers.get("location")}`;if(!F.ok)throw Error(`HTTP ${F.status}: ${F.statusText}`);let A=F.headers.get("content-type")||"",L=F.body?.getReader();if(!L)throw Error("Failed to read response body");let f=[],D=0;while(!0){let{done:E,value:w}=await L.read();if(E)break;if(D+=w.length,D>Q)throw L.cancel(),Error(`Response too large: exceeded ${Q} bytes`);f.push(w)}let U=new Uint8Array(D),T=0;for(let E of f)U.set(E,T),T+=E.length;let q=new TextDecoder("utf-8").decode(U),z;if(A.includes("text/html")||A.includes("application/xhtml"))z=t_(q);else if(A.includes("application/json"))try{let E=JSON.parse(q);z=JSON.stringify(E,null,2)}catch{z=q}else z=q;let _=[`URL: ${Y}`,`Content-Type: ${A}`,`Size: ${D} bytes`,"","--- Content ---",z.slice(0,50000)];if(z.length>50000)_.push(`
|
|
171
171
|
[Content truncated: showing first 50000 of ${z.length} characters]`);return _.push("","--- Analysis Request ---",`Prompt: ${j}`),_.join(`
|
|
172
|
-
`)}catch(F){if(clearTimeout(G),F instanceof Error){if(F.name==="AbortError")throw Error(`Request timed out after ${Z}ms`);throw F}throw Error(`Fetch failed: ${String(F)}`)}finally{if(V.signal&&K)V.signal.removeEventListener("abort",K)}}}function K6($={}){return t$($)}function B8($={}){return{readFile:H6($.fileRead),search:B6($.search),bash:K6($.bash),webFetch:G6($.webFetch),applyPatch:j6($.applyPatch),editor:V6($.editor)}}var s_={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"},G8=[{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 rV($,Z){if(!Z||Z.length===0)return!0;let Q=$.toLowerCase();return Z.some((W)=>Q.includes(W.toLowerCase()))}function o_($,Z,Q,W){if($.mode&&$.mode!=="any"&&$.mode!==W)return!1;return rV(Z,$.providerIdIncludes)&&rV(Q,$.modelIdIncludes)}function K8($,Z,Q,W){if(!W||W.length===0)return{};let J=new Map;for(let Y of W){if(!o_(Y,$,Z,Q))continue;for(let j of Y.disableTools??[])J.set(j,!1);for(let j of Y.enableTools??[])J.set(j,!0)}let X={};for(let[Y,j]of J.entries())X[s_[Y]]=j;return X}var u0={act:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!0,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},plan:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!1,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},search:{enableReadFiles:!0,enableSearch:!0,enableBash:!1,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},minimal:{enableReadFiles:!1,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!1},yolo:{enableReadFiles:!0,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!0,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!0,enableSpawnAgent:!1,enableAgentTeams:!1}};function I1($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function t9($){if($!=="yolo")return{};let Z={enabled:!0,autoApprove:!0},Q={"*":Z};for(let W of H$)Q[W]=Z;return Q}function e9($,Z){let Q=u0[$],{enableSpawnAgent:W,enableAgentTeams:J,...X}=Q;return F$({...X,...Z})}import{createTool as TT,zodToJsonSchema as OT}from"@cline/shared";import{z as iW}from"zod";Y1();import{createAgentRuntime as HT}from"@cline/agents";import{createContributionRegistry as BT,mergeModelOptions as TH}from"@cline/shared";import{createGateway as Uz,createHandlerAsync as Dz,hasRegisteredHandler as Lz,MODEL_COLLECTIONS_BY_PROVIDER_ID as _z,normalizeProviderId as zz}from"@cline/llms";import{EMPTY_CONTENT_TEXT as jz}from"@cline/shared";function Vz($){let Z=Bz($.content),Q=[],W=$.id??Fz(),J=0,X=[],Y=()=>{if(X.length===0)return;let j=J===0?W:`${W}_part_${J}`;J+=1,Q.push({id:j,role:$.role,content:X.map(Gz),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:QH($.metrics)}),X=[]};if(Z.length===0)return Q.push({id:W,role:$.role,content:[{type:"text",text:jz}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:QH($.metrics)}),Q;for(let j of Z){if(j.type!=="tool_result"){X.push(j);continue}Y(),Q.push({id:`${W}_tool_${j.tool_use_id}`,role:"tool",content:[JH(j)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return Y(),Q}function YZ($){return $.flatMap(Vz)}function Hz($){let Z=$.content.map(XH).filter((Q)=>Q!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:Z,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:Kz($.metrics)}}function A8($){return $.map(Hz)}function jZ($){let Z=[];for(let Q of $){let W=Q.content.map(XH).filter((Y)=>Y!==void 0),J=Q.role==="tool"?"user":Q.role,X=Z[Z.length-1];if(J==="user"&&W.length>0&&W.every((Y)=>Y.type==="tool_result")&&X?.role==="user"&&Array.isArray(X.content)&&X.content.every((Y)=>Y.type==="tool_result")){X.content.push(...W);continue}Z.push({role:J,content:W})}return Z}function Bz($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function Gz($){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 JH($)}}function JH($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function XH($){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 QH($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function Kz($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var WH=0;function Fz(){return WH+=1,`msg_${Date.now().toString(36)}_${WH.toString(36)}`}function Az($){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:fz($),error:$.error}];default:return[]}}function fz($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function YH($){return{async*stream(Z){let Q=!1,W=!1;try{let J=typeof $==="function"?await $():$;J.setAbortSignal?.(Z.signal);let X=jZ(Z.messages),Y=Z.tools.map((j)=>({name:j.name,description:j.description,inputSchema:j.inputSchema}));for await(let j of J.createMessage(Z.systemPrompt??"",X,Y))for(let V of Az(j)){if(V.type==="finish")Q=!0;else if(V.type==="tool-call-delta")W=!0;yield V}if(!Q)yield{type:"finish",reason:W?"tool-calls":"stop"}}catch(J){if(!Q)yield{type:"finish",reason:Z.signal?.aborted?"aborted":"error",error:J instanceof Error?J.message:String(J)}}}}}function Tz($){let Z=Object.fromEntries(Object.entries($).filter(([,Q])=>Q!==void 0));return Object.keys(Z).length>0?Z:void 0}function Oz($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function qz($){let Z={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(Oz($))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 Tz(Z)}function IW($){let Z=$.providerConfig;if(Z?.knownModels)return Z.knownModels;if($.knownModels)return $.knownModels;return _z[$.providerId]?.models??void 0}function Mz($){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 Rz($,Z){return{id:$,name:Z.name??$,description:Z.description,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxOutputTokens:Z.maxTokens,capabilities:Mz(Z.capabilities),metadata:{family:Z.family,pricing:Z.pricing,status:Z.status,releaseDate:Z.releaseDate}}}function jH($,Z,Q){let W=$.providerConfig,J=W?.providerId===$.providerId?W:void 0,X={...J??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??J?.apiKey,baseUrl:$.baseUrl??J?.baseUrl,headers:$.headers??J?.headers,knownModels:IW($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:Z,extensionContext:$.extensionContext};if(Lz(zz(X.providerId)))return YH(()=>Dz(X));return Uz({fetch:X.fetch,providerConfigs:[{providerId:X.providerId,apiKey:X.apiKey,baseUrl:X.baseUrl,headers:X.headers,fetch:X.fetch,options:qz(X),models:X.knownModels?Object.entries(X.knownModels).map(([Y,j])=>Rz(Y,j)):void 0}],logger:Z,telemetry:Q??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:X.providerId,modelId:X.modelId},{maxTokens:X.maxOutputTokens})}import{createMediaBudgetState as Ez,IMAGE_OMITTED_PLACEHOLDER as VH,normalizeUserInput as HH,resolveMediaBudget as Nz,validateAndReserveImageMedia as wz}from"@cline/shared";var Cz=8000,Pz=50000,Sz=6000000,bz=200000,yz=12000,hz=65536,U6=2000,BH=40000,kz=8,xW={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},Iz=new Set(["read","read_files"]),Q2="[outdated - see the latest file content]",GH="Tool execution was interrupted before a result was produced.",KH=($)=>`
|
|
172
|
+
`)}catch(F){if(clearTimeout(G),F instanceof Error){if(F.name==="AbortError")throw Error(`Request timed out after ${Z}ms`);throw F}throw Error(`Fetch failed: ${String(F)}`)}finally{if(V.signal&&K)V.signal.removeEventListener("abort",K)}}}function K6($={}){return t$($)}function G8($={}){return{readFile:H6($.fileRead),search:B6($.search),bash:K6($.bash),webFetch:G6($.webFetch),applyPatch:j6($.applyPatch),editor:V6($.editor)}}var e_={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"},K8=[{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 rV($,Z){if(!Z||Z.length===0)return!0;let Q=$.toLowerCase();return Z.some((W)=>Q.includes(W.toLowerCase()))}function $z($,Z,Q,W){if($.mode&&$.mode!=="any"&&$.mode!==W)return!1;return rV(Z,$.providerIdIncludes)&&rV(Q,$.modelIdIncludes)}function F8($,Z,Q,W){if(!W||W.length===0)return{};let J=new Map;for(let Y of W){if(!$z(Y,$,Z,Q))continue;for(let j of Y.disableTools??[])J.set(j,!1);for(let j of Y.enableTools??[])J.set(j,!0)}let X={};for(let[Y,j]of J.entries())X[e_[Y]]=j;return X}var u0={act:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!0,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},plan:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!1,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},search:{enableReadFiles:!0,enableSearch:!0,enableBash:!1,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},minimal:{enableReadFiles:!1,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!1},yolo:{enableReadFiles:!0,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!0,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!0,enableSpawnAgent:!1,enableAgentTeams:!1}};function x1($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function e9($){if($!=="yolo")return{};let Z={enabled:!0,autoApprove:!0},Q={"*":Z};for(let W of H$)Q[W]=Z;return Q}function $Z($,Z){let Q=u0[$],{enableSpawnAgent:W,enableAgentTeams:J,...X}=Q;return F$({...X,...Z})}import{createTool as RT,zodToJsonSchema as ET}from"@cline/shared";import{z as iW}from"zod";Y1();import{createAgentRuntime as FT}from"@cline/agents";import{createContributionRegistry as AT,mergeModelOptions as qH}from"@cline/shared";import{createGateway as zz,createHandlerAsync as Tz,hasRegisteredHandler as Oz,MODEL_COLLECTIONS_BY_PROVIDER_ID as qz,normalizeProviderId as Mz}from"@cline/llms";import{EMPTY_CONTENT_TEXT as Gz}from"@cline/shared";function Kz($){let Z=Az($.content),Q=[],W=$.id??Dz(),J=0,X=[],Y=()=>{if(X.length===0)return;let j=J===0?W:`${W}_part_${J}`;J+=1,Q.push({id:j,role:$.role,content:X.map(fz),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:JH($.metrics)}),X=[]};if(Z.length===0)return Q.push({id:W,role:$.role,content:[{type:"text",text:Gz}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:JH($.metrics)}),Q;for(let j of Z){if(j.type!=="tool_result"){X.push(j);continue}Y(),Q.push({id:`${W}_tool_${j.tool_use_id}`,role:"tool",content:[YH(j)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return Y(),Q}function jZ($){return $.flatMap(Kz)}function Fz($){let Z=$.content.map(jH).filter((Q)=>Q!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:Z,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:Uz($.metrics)}}function A8($){return $.map(Fz)}function VZ($){let Z=[];for(let Q of $){let W=Q.content.map(jH).filter((Y)=>Y!==void 0),J=Q.role==="tool"?"user":Q.role,X=Z[Z.length-1];if(J==="user"&&W.length>0&&W.every((Y)=>Y.type==="tool_result")&&X?.role==="user"&&Array.isArray(X.content)&&X.content.every((Y)=>Y.type==="tool_result")){X.content.push(...W);continue}Z.push({role:J,content:W})}return Z}function Az($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function fz($){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 YH($)}}function YH($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function jH($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let Z=$.metadata;return{type:"thinking",thinking:$.text,signature:Z?.signature,details:Z?.details}}case"image":return typeof $.image==="string"?{type:"image",data:$.image,mediaType:$.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:$.path,content:$.content};case"tool-call":{let Z=$.metadata;return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:Z?.thoughtSignature??Z?.signature}}case"tool-result":{let Z=$.output,Q=typeof Z==="string"?Z:Array.isArray(Z)?Z:JSON.stringify(Z);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:Q,is_error:$.isError}}}}function JH($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function Uz($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var XH=0;function Dz(){return XH+=1,`msg_${Date.now().toString(36)}_${XH.toString(36)}`}function Lz($){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:_z($),error:$.error}];default:return[]}}function _z($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function VH($){return{async*stream(Z){let Q=!1,W=!1;try{let J=typeof $==="function"?await $():$;J.setAbortSignal?.(Z.signal);let X=VZ(Z.messages),Y=Z.tools.map((j)=>({name:j.name,description:j.description,inputSchema:j.inputSchema}));for await(let j of J.createMessage(Z.systemPrompt??"",X,Y))for(let V of Lz(j)){if(V.type==="finish")Q=!0;else if(V.type==="tool-call-delta")W=!0;yield V}if(!Q)yield{type:"finish",reason:W?"tool-calls":"stop"}}catch(J){if(!Q)yield{type:"finish",reason:Z.signal?.aborted?"aborted":"error",error:J instanceof Error?J.message:String(J)}}}}}function Rz($){let Z=Object.fromEntries(Object.entries($).filter(([,Q])=>Q!==void 0));return Object.keys(Z).length>0?Z:void 0}function Ez($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function Nz($){let Z={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(Ez($))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 Rz(Z)}function IW($){let Z=$.providerConfig;if(Z?.knownModels)return Z.knownModels;if($.knownModels)return $.knownModels;return qz[$.providerId]?.models??void 0}function Cz($){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 wz($,Z){return{id:$,name:Z.name??$,description:Z.description,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxOutputTokens:Z.maxTokens,capabilities:Cz(Z.capabilities),metadata:{family:Z.family,pricing:Z.pricing,status:Z.status,releaseDate:Z.releaseDate}}}function HH($,Z,Q){let W=$.providerConfig,J=W?.providerId===$.providerId?W:void 0,X={...J??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??J?.apiKey,baseUrl:$.baseUrl??J?.baseUrl,headers:$.headers??J?.headers,knownModels:IW($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:Z,extensionContext:$.extensionContext};if(Oz(Mz(X.providerId)))return VH(()=>Tz(X));return zz({fetch:X.fetch,providerConfigs:[{providerId:X.providerId,apiKey:X.apiKey,baseUrl:X.baseUrl,headers:X.headers,fetch:X.fetch,options:Nz(X),models:X.knownModels?Object.entries(X.knownModels).map(([Y,j])=>wz(Y,j)):void 0}],logger:Z,telemetry:Q??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:X.providerId,modelId:X.modelId},{maxTokens:X.maxOutputTokens})}import{createMediaBudgetState as Pz,IMAGE_OMITTED_PLACEHOLDER as BH,normalizeUserInput as GH,resolveMediaBudget as Sz,validateAndReserveImageMedia as bz}from"@cline/shared";var yz=8000,hz=50000,kz=6000000,Iz=200000,xz=12000,gz=65536,U6=2000,KH=40000,mz=8,xW={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},vz=new Set(["read","read_files"]),W2="[outdated - see the latest file content]",FH="Tool execution was interrupted before a result was produced.",AH=($)=>`
|
|
173
173
|
|
|
174
174
|
...[truncated ${$} chars]...
|
|
175
175
|
|
|
@@ -177,31 +177,31 @@ Searched ${L} files.`;let D=[`Found ${A.length} result${A.length===1?"":"s"} for
|
|
|
177
177
|
|
|
178
178
|
...[truncated ${$} chars to fit provider request budget]...
|
|
179
179
|
|
|
180
|
-
`,
|
|
180
|
+
`,cz=($)=>`
|
|
181
181
|
|
|
182
182
|
...[assistant text truncated: omitted ${$} chars]...
|
|
183
183
|
|
|
184
|
-
`,
|
|
184
|
+
`,fH=($)=>`
|
|
185
185
|
|
|
186
186
|
...[assistant text truncated: omitted ${$} chars to fit provider request budget]...
|
|
187
187
|
|
|
188
|
-
`,
|
|
188
|
+
`,uz=($)=>`
|
|
189
189
|
|
|
190
190
|
...[assistant text truncated: omitted ${$} chars due to repeated tool-call markup]...
|
|
191
191
|
|
|
192
|
-
`;function UH($=process.env){return{maxToolResultChars:fH($[xW.maxToolResultChars]),maxTotalTextBytes:fH($[xW.maxTotalTextBytes]),minOutdatedRewriteBytes:vz($[xW.minOutdatedRewriteBytes])}}class mW{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=f6($.maxToolResultChars,Cz),this.maxFileContentChars=f6($.maxFileContentChars,Pz),this.maxTotalTextBytes=f6($.maxTotalTextBytes,Sz),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=f6($.maxAssistantTextChars,bz),this.maxAssistantToolMarkupChars=f6($.maxAssistantToolMarkupChars,yz),this.minOutdatedRewriteBytes=cz($.minOutdatedRewriteBytes,hz)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Q=this.addMissingToolResults($).map((J)=>{if(!Array.isArray(J.content)){if(J.role==="user"&&typeof J.content==="string"){let j=HH(J.content);if(j!==J.content)return{...J,content:j}}if(J.role==="assistant"&&typeof J.content==="string"){let j=this.truncateAssistantText(J.content);if(j!==J.content)return{...J,content:j}}return J}let X=!1,Y=J.content.map((j)=>{let V=this.transformBlock(j,J.role);if(V!==j)X=!0;return V});return X?{...J,content:Y}:J}),W=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(W)}transformBlock($,Z){if(Z==="user"&&$.type==="text"&&typeof $.text==="string"){let J=HH($.text);if(J!==$.text)return{...$,text:J};return $}if(Z==="assistant"&&$.type==="text"&&typeof $.text==="string"){let J=this.truncateAssistantText($.text);return J===$.text?$:{...$,text:J}}if($.type==="file"){let J=f8($.content,this.maxFileContentChars,KH);return J===$.content?$:{...$,content:J}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),W=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let J=this.committedOutdatedRewrites.get($.tool_use_id);if(J&&J.size>0){let Y=this.getReadLocators($).filter((j)=>J.has(this.toReadLocatorKey(j))&&this.isOutdatedReadLocator(j,$.tool_use_id));if(Y.length>0)W=this.replaceOutdatedReadContent(W,Y)}}return W=this.truncateToolResultContent(W),W===$.content?$:{...$,content:W}}reindex($){let Z=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!Z)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let W=$[Q];if(!Array.isArray(W.content))continue;for(let J=0;J<W.content.length;J++){let X=W.content[J];if(X.type==="file")this.latestFullContentOwnerByPathCache.set(X.path,`file:${Q}:${J}`);else if(X.type==="tool_use"){let Y=X.name.toLowerCase();if(this.toolNameByIdCache.set(X.id,Y),this.isReadTool(Y)){let j=this.extractLocatorsFromReadToolInput(X.input);if(j.length>0)this.readLocatorsByToolUseIdCache.set(X.id,j)}}else if(X.type==="tool_result"){let Y=this.resolveToolName(X);if(!this.isReadTool(Y)||X.is_error===!0)continue;let j=this.getReadLocators(X);for(let V of j)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),X.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,X.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let Z=new Map,Q=new Set,W=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type!=="tool_result"||X.is_error===!0)continue;let Y=this.resolveToolName(X);if(!this.isReadTool(Y))continue;Q.add(X.tool_use_id);let j=this.committedOutdatedRewrites.get(X.tool_use_id),V=new Set,H=new Set;for(let G of this.getReadLocators(X)){let K=this.toReadLocatorKey(G);if(!this.isOutdatedReadLocator(G,X.tool_use_id))continue;if(H.add(K),!j?.has(K))V.add(K)}if(j){for(let G of j)if(!H.has(G))j.delete(G);if(j.size===0)this.committedOutdatedRewrites.delete(X.tool_use_id)}if(V.size===0)continue;let B=Z.get(X.tool_use_id);if(!B)B=new Set,Z.set(X.tool_use_id,B);for(let G of V)B.add(G);W+=this.estimateOutdatedReclaimBytes(X.content,V)}}for(let J of this.committedOutdatedRewrites.keys())if(!Q.has(J))this.committedOutdatedRewrites.delete(J);if(Z.size===0||W<this.minOutdatedRewriteBytes)return;for(let[J,X]of Z){let Y=this.committedOutdatedRewrites.get(J);if(!Y)Y=new Set,this.committedOutdatedRewrites.set(J,Y);for(let j of X)Y.add(j)}}estimateOutdatedReclaimBytes($,Z){let Q=this.extractReadLocatorsFromToolResultContent($),W=Q.length>0&&Q.every((V)=>Z.has(this.toReadLocatorKey(V))),J=(V)=>{let H;try{H=JSON.parse(V)}catch{return W||Q.length===0?W0(this.truncateMiddle(V)):0}let B=Array.isArray(H)?H:[H],G=0;for(let K of B){let F=this.extractLocatorFromResultEntry(K);if(F&&Z.has(this.toReadLocatorKey(F)))G+=this.providerBoundEntryBytes(K)}return G};if(typeof $==="string")return J($);let X=new Set(Z),Y=0;for(let V of $)if(V.type==="text")Y+=this.countOutdatedImageEntries(V.text,X);let j=0;for(let V of $)if(V.type==="text")j+=J(V.text);else if(V.type==="image"){if(Y>0)Y-=1,j+=W0(V.data)}else if(f$(V)){let H=this.extractLocatorFromResultEntry(V);if(H&&Z.has(this.toReadLocatorKey(H)))j+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(Z.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))j+=W0(this.truncateMiddle(V.content))}return j}providerBoundEntryBytes($){let Z=this.truncateNestedStrings($);return W0(JSON.stringify(Z))}addMissingToolResults($){let Z=this.collectToolResultIds($),Q=[],W=new Map,J=!1,X=()=>{if(W.size===0)return;Y(this.createMissingToolResultMessage(W)),W.clear(),J=!0},Y=(j)=>{let V=Q.at(-1);if(this.shouldMergeUserAfterToolResults(V,j)){Q[Q.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(j.content)]},J=!0;return}Q.push(j)};for(let j of $){if(this.isToolResultOnlyMessage(j)){if(Y(this.appendMissingToolResults(j,W)),W.size>0)W.clear(),J=!0;continue}if(Array.isArray(j.content)){let V=j.content.filter((B)=>B.type==="tool_result"),H=j.content.filter((B)=>B.type!=="tool_result");if(V.length>0){let B=this.appendMissingToolResults({...j,role:"user",content:V},W);if(Y(B),W.size>0)W.clear();J=!0}if(H.length>0||V.length===0){if(V.length===0)X();let B=V.length>0?{...j,content:H}:j;if(Y(B),B.role==="assistant")this.trackMissingToolCalls(B,Z,W)}continue}X(),Y(j)}return X(),J?Q:$}appendMissingToolResults($,Z){if(Z.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(Z)]}}shouldMergeUserAfterToolResults($,Z){return $?.role==="user"&&Z.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(Z.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let W of Q.content)if(W.type==="tool_result")Z.add(W.tool_use_id)}return Z}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}trackMissingToolCalls($,Z,Q){if(!Array.isArray($.content))return;for(let W of $.content){if(W.type!=="tool_use"||Z.has(W.id))continue;Q.set(W.id,W.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([Z,Q])=>({type:"tool_result",tool_use_id:Z,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${GH} Tool: ${$}.`:GH}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let Z=$,Q=this.readResultLocatorCache.get(Z);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(Z,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let Z=$,Q=[],W=this.extractLocatorFromReadRequest(Z);if(W)Q.push(W);if(Array.isArray(Z.files))for(let J of Z.files){let X=this.extractLocatorFromReadRequest(J);if(X)Q.push(X)}if(Array.isArray(Z.file_paths)){for(let J of Z.file_paths)if(typeof J==="string"&&J.length>0)Q.push({path:J,startLine:null,endLine:null})}return this.dedupeReadLocators(Q)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);let Z=[];for(let Q of $){if(Q.type==="text"){Z.push(...this.tryParseReadLocators(Q.text));continue}if(f$(Q)){let W=this.extractLocatorFromResultEntry(Q);if(W)Z.push(W)}}return this.dedupeReadLocators(Z)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let W of $){let J=this.extractLocatorFromResultEntry(W);if(J)Q.push(J)}return this.dedupeReadLocators(Q)}let Z=this.extractLocatorFromResultEntry($);return Z?[Z]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(Q)return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)};if(typeof Z.query==="string"&&Z.query.length>0)return this.parseReadQuery(Z.query);return}extractPath($){let Z=[$.path,$.file_path,$.filePath];for(let Q of Z)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let Z=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!Z)return{path:$,startLine:null,endLine:null};return{path:Z[1],startLine:Number(Z[2]),endLine:Z[3]==="EOF"?null:Number(Z[3])}}dedupeReadLocators($){let Z=new Map;for(let Q of $)Z.set(this.toReadLocatorKey(Q),Q);return Array.from(Z.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,Z){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==Z)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==Z}replaceOutdatedReadContent($,Z){let Q=new Set(Z.map((X)=>this.toReadLocatorKey(X))),W=new Set(Z.map((X)=>X.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??Q2;let J=0;for(let X of $)if(X.type==="text")J+=this.countOutdatedImageEntries(X.text,Q);return $.map((X)=>{if(X.type==="file"){if(!W.has(X.path))return X;return{...X,content:Q2}}if(X.type==="image"){if(J===0)return X;return J-=1,{type:"text",text:Q2}}if(f$(X))return this.replaceOutdatedReadEntry(X,Q);if(X.type!=="text")return X;let Y=this.replaceOutdatedInString(X.text,Q);if(Y===null)return{...X,text:Q2};return Y===X.text?X:{...X,text:Y}})}countOutdatedImageEntries($,Z){let Q;try{Q=JSON.parse($)}catch{return 0}let W=Array.isArray(Q)?Q:[Q],J=0;for(let X of W){if(!X||typeof X!=="object")continue;let Y=X,j=this.extractLocatorFromResultEntry(Y);if(!j)continue;if(!Z.has(this.toReadLocatorKey(j)))continue;if(Y.result==="Successfully read image"||Y.content==="Successfully read image")J+=1}return J}replaceOutdatedInString($,Z){let Q;try{Q=JSON.parse($)}catch{return null}let W=Array.isArray(Q)?Q.map((J)=>this.replaceOutdatedReadEntry(J,Z)):this.replaceOutdatedReadEntry(Q,Z);return JSON.stringify(W)}replaceOutdatedReadEntry($,Z){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!Z.has(this.toReadLocatorKey(Q)))return $;let W={...$};if(typeof W.result==="string")W.result=Q2;else if(typeof W.content==="string")W.content=Q2;else W.result=Q2;return W}isReadTool($){return!!$&&Iz.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(f$(Z))return this.truncateNestedStrings(Z);return Z})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let Z=!1,Q=$.map((W)=>{let J=this.truncateNestedStrings(W);if(J!==W)Z=!0;return J});return Z?Q:$}if($!==null&&typeof $==="object"){if(vW($))return $;let Z=!1,Q={};for(let[W,J]of Object.entries($)){let X=this.truncateNestedStrings(J);if(X!==J)Z=!0;Q[W]=X}return Z?Q:$}return $}truncateMiddle($){return f8($,this.maxToolResultChars,KH)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return f8($,this.maxAssistantToolMarkupChars,gz);return f8($,this.maxAssistantTextChars,xz)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let Z=0;for(let Q of $.matchAll(mz))if(Z+=1,Z>=kz)return!0;return!1}truncateToTotalTextBudget($){let Z=this.countMessageTextBytes($);if(Z<=this.maxTotalTextBytes)return $;let Q=$.map((J)=>{if(!Array.isArray(J.content))return{...J};return{...J,content:J.content.map((X)=>dz(X))}}),W=this.collectTruncationCandidates(Q);for(let J of W){if(Z<=this.maxTotalTextBytes)break;let X=J.byteLength;if(X<=J.minBytes)continue;let Y=Z-this.maxTotalTextBytes,j=Math.max(J.minBytes,X-Y),V=uz(J.get(),j,J.makeMarker);J.set(V),Z-=X-W0(V)}return Q}countMessageTextBytes($){let Z=0;for(let Q of $){if(typeof Q.content==="string"){Z+=W0(Q.content);continue}for(let W of Q.content)if(W.type==="text")Z+=W0(W.text);else if(W.type==="thinking")Z+=W0(W.thinking);else if(W.type==="file")Z+=W0(W.content);else if(W.type==="tool_use")Z+=VZ(W.input);else if(W.type==="tool_result"){if(typeof W.content==="string")Z+=W0(W.content);else for(let J of W.content)if(J.type==="text")Z+=W0(J.text);else if(J.type==="file")Z+=W0(J.content);else if(f$(J))Z+=VZ(J)}}return Z}collectTruncationCandidates($){let Z=[],Q=[];for(let W of $){if(W.role==="assistant"&&typeof W.content==="string"){Z.push({byteLength:W0(W.content),minBytes:BH,makeMarker:FH,get:()=>W.content,set:(J)=>{W.content=J}});continue}if(!Array.isArray(W.content))continue;for(let J of W.content){if(J.type==="tool_use"){HZ(J.input,Q);continue}if(W.role==="assistant"&&J.type==="text"){Z.push({byteLength:W0(J.text),minBytes:BH,makeMarker:FH,get:()=>J.text,set:(X)=>{J.text=X}});continue}if(J.type!=="tool_result")continue;if(typeof J.content==="string"){Z.push({byteLength:W0(J.content),minBytes:U6,makeMarker:D6,get:()=>J.content,set:(X)=>{J.content=X}});continue}for(let X of J.content)if(X.type==="text")Z.push({byteLength:W0(X.text),minBytes:U6,makeMarker:D6,get:()=>X.text,set:(Y)=>{X.text=Y}});else if(X.type==="file")Z.push({byteLength:W0(X.content),minBytes:U6,makeMarker:D6,get:()=>X.content,set:(Y)=>{X.content=Y}});else if(f$(X))HZ(X,Z)}}return Z.sort((W,J)=>J.byteLength-W.byteLength),Q.sort((W,J)=>J.byteLength-W.byteLength),[...Z,...Q]}applyMediaBudget($){let Z=this.resolveMediaBudget();if(Z.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&Z.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&Z.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=Ez(),W=!1,J=$.map((X)=>{if(!Array.isArray(X.content))return X;let Y=!1,j=X.content.map((V)=>{let H=this.applyMediaBudgetToBlock(V,Z,Q);if(H!==V)Y=!0;return H});if(!Y)return X;return W=!0,{...X,content:j}});return W?J:$}resolveMediaBudget(){return Nz(this.mediaBudget)}applyMediaBudgetToBlock($,Z,Q){if(gW($))return this.limitImageContent($,Z,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let W=!1,J=$.content.map((X)=>{let Y=this.applyMediaBudgetToToolResultEntry(X,Z,Q);if(Y!==X)W=!0;return Y});return W?{...$,content:J}:$}applyMediaBudgetToToolResultEntry($,Z,Q){if(gW($))return this.limitImageContent($,Z,Q);if(f$($))return this.limitNestedMedia($,Z,Q);return $}limitNestedMedia($,Z,Q){if(gW($)){let W=this.limitImageContent($,Z,Q);return W.type==="text"?W.text:W}if(Array.isArray($)){let W=!1,J=$.map((X)=>{let Y=this.limitNestedMedia(X,Z,Q);if(Y!==X)W=!0;return Y});return W?J:$}if($!==null&&typeof $==="object"){let W=!1,J={};for(let[X,Y]of Object.entries($)){let j=this.limitNestedMedia(Y,Z,Q);if(j!==Y)W=!0;J[X]=j}return W?J:$}return $}limitImageContent($,Z,Q){if(!DH($))return{type:"text",text:VH};let W=wz($.mediaType,$.data,{maxImageEncodedBytes:Z.maxImageEncodedBytes,maxImageDecodedBytes:Z.maxImageDecodedBytes,maxTotalMediaBytes:Z.maxTotalMediaBytes},Q);if(!W.ok)return{type:"text",text:VH};return{...$,data:W.base64,mediaType:W.mediaType}}}var AH=String.raw`[\|\uFF5C]`,mz=new RegExp(String.raw`<\s*(?:${AH}\s*)?DSML\s*(?:${AH}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function W0($){return Buffer.byteLength($,"utf8")}function fH($){if($===void 0)return;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>0?Z:void 0}function vz($){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 f6($,Z){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):Z}function cz($,Z){if(typeof $!=="number"||Number.isNaN($)||$<0)return Z;return Number.isFinite($)?Math.floor($):$}function f8($,Z,Q){if($.length<=Z)return $;let W=Q($.length-Z),J=Math.max(0,Math.floor((Z-W.length)/2)),X=Math.max(0,$.length-J*2),Y=Q(X),j=Math.max(0,Math.floor((Z-Y.length)/2)),V=$.slice(0,j),H=j>0?$.slice(-j):"";return`${V}${Y}${H}`}function uz($,Z,Q){if(W0($)<=Z)return $;let W=0,J=$.length,X=f8($,0,Q);while(W<=J){let Y=W+J>>>1,j=f8($,Y,Q);if(W0(j)<=Z)X=j,W=Y+1;else J=Y-1}return X}function dz($){if($.type==="tool_use")return{...$,input:BZ($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((Z)=>f$(Z)?BZ(Z):{...Z})}}function f$($){if($===null||typeof $!=="object")return!1;let Z=$.type;return Z!=="text"&&Z!=="image"&&Z!=="file"}function gW($){return $!==null&&typeof $==="object"&&$.type==="image"}function DH($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function vW($){return DH($)}function VZ($){if(typeof $==="string")return W0($);if(Array.isArray($)){let Z=0;for(let Q of $)Z+=VZ(Q);return Z}if($!==null&&typeof $==="object"){if(vW($))return 0;let Z=0;for(let Q of Object.values($))Z+=VZ(Q);return Z}return 0}function HZ($,Z){if(Array.isArray($)){$.forEach((Q,W)=>{if(typeof Q==="string")Z.push({byteLength:W0(Q),minBytes:U6,makeMarker:D6,get:()=>$[W],set:(J)=>{$[W]=J}});else HZ(Q,Z)});return}if($!==null&&typeof $==="object"){if(vW($))return;let Q=$;for(let W of Object.keys(Q)){let J=Q[W];if(typeof J==="string")Z.push({byteLength:W0(J),minBytes:U6,makeMarker:D6,get:()=>Q[W],set:(X)=>{Q[W]=X}});else HZ(J,Z)}}}function BZ($){if(Array.isArray($))return $.map(BZ);if($!==null&&typeof $==="object"){let Z={};for(let[Q,W]of Object.entries($))Z[Q]=BZ(W);return Z}return $}function cW(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class uW{messages=[];conversationId=cW();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=cW(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=cW(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function LH($){let{agentConfig:Z}=$,Q=lz(Z),W=pz(Z),J=$.hooks,X=rz(Z.maxParallelToolCalls);return{sessionId:$.sessionId??Z.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??Z.systemPrompt,messageModelInfo:W,model:$.model,modelOptions:Q,tools:$.tools,hooks:J,prepareTurn:$.prepareTurn,consumePendingUserMessage:Z.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??Z.logger,telemetry:$.telemetry??Z.telemetry,initialMessages:$.initialMessages,completionPolicy:Z.completionPolicy,maxIterations:Z.maxIterations,toolExecution:X,toolPolicies:Z.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:Z.requestToolApproval}}function lz($){let Z={};if($.thinking!==void 0)Z.thinking=$.thinking;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)Z.maxTokensPerTurn=$.maxTokensPerTurn;if($.apiTimeoutMs!==void 0)Z.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(Z).length>0?Z:void 0}function pz($){let Z=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:Z}}function rz($){if($===void 0)return;return $>=2?"parallel":"sequential"}function iz(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function nz($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function dW($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(dW);let Z={};for(let Q of Object.keys($).sort())Z[Q]=dW($[Q]);return Z}function az($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(dW($))}catch{return String($)}}function sz($,Z,Q,W){if(Z===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=Z,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===W.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=W.hardThreshold}}var _H={softThreshold:3,hardThreshold:5};class lW{config;state=iz();constructor($){this.config={softThreshold:$?.softThreshold??_H.softThreshold,hardThreshold:$?.hardThreshold??_H.hardThreshold}}inspect($){let Z=az($.input),Q=sz(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(){nz(this.state)}}class pW{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let Z=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&Z?Z:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let W=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(W),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Q,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!Z||Q<Z)return{action:"continue"};let J=await tz({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details},this.options.onLimitReached);if(J.action==="continue"){let X=J.guidance?.trim();if(X)this.options.appendRecoveryNotice(X,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:X}}return{action:"stop",reason:J.reason?.trim()||void 0,message:oz({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details,stopReason:J.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function oz($){let Z=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)Z.push(`Error: ${Q}`);let W=$.stopReason?.trim();if(W)Z.push(`Decision: ${W}`);return Z.push("Session state was preserved. Send a new prompt to resume from the latest state."),Z.join(" ")}async function tz($,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 ez($){let Z=$.content.filter((Q)=>Q.type==="text");if(Z.length===0)return;return Z.map((Q)=>Q.text).join("")}function $T($){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 QT($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function WT($){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 rW{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:$.metadata?.reason==="auto_compaction"?"auto_compaction":void 0,metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let Z=[],Q=ez($);if(Q!==void 0)Z.push({type:"content_end",contentType:"text",text:Q});let W=$T($);if(W!==void 0)Z.push({type:"content_end",contentType:"reasoning",reasoning:W.reasoning});return Z}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input}]}translateToolFinished($){let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=Z===void 0?void 0:Date.now()-Z;this.toolStartedAt.delete($.toolCall.toolCallId);let W=ZT($.message),J=W?.output,X=WT(W);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:J,error:X,durationMs:Q}]}translateUsage($){let Z=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,W=$.cacheReadTokens-this.lastUsage.cacheReadTokens,J=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,X=this.lastUsage.totalCost??0,j=($.totalCost??0)-X;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,Z),outputTokens:Math.max(0,Q),cacheReadTokens:W===0?void 0:Math.max(0,W),cacheWriteTokens:J===0?void 0:Math.max(0,J),cost:j===0?void 0:j,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let Z={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:QT($.status),text:$.outputText,iterations:$.iterations,usage:Z}]}}function GT($){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 FT($,Z){let Q=$.trim(),W=Z.map((J)=>J.trim()).filter(Boolean).join(`
|
|
192
|
+
`;function LH($=process.env){return{maxToolResultChars:DH($[xW.maxToolResultChars]),maxTotalTextBytes:DH($[xW.maxTotalTextBytes]),minOutdatedRewriteBytes:lz($[xW.minOutdatedRewriteBytes])}}class mW{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=f6($.maxToolResultChars,yz),this.maxFileContentChars=f6($.maxFileContentChars,hz),this.maxTotalTextBytes=f6($.maxTotalTextBytes,kz),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=f6($.maxAssistantTextChars,Iz),this.maxAssistantToolMarkupChars=f6($.maxAssistantToolMarkupChars,xz),this.minOutdatedRewriteBytes=pz($.minOutdatedRewriteBytes,gz)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Q=this.addMissingToolResults($).map((J)=>{if(!Array.isArray(J.content)){if(J.role==="user"&&typeof J.content==="string"){let j=GH(J.content);if(j!==J.content)return{...J,content:j}}if(J.role==="assistant"&&typeof J.content==="string"){let j=this.truncateAssistantText(J.content);if(j!==J.content)return{...J,content:j}}return J}let X=!1,Y=J.content.map((j)=>{let V=this.transformBlock(j,J.role);if(V!==j)X=!0;return V});return X?{...J,content:Y}:J}),W=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(W)}transformBlock($,Z){if(Z==="user"&&$.type==="text"&&typeof $.text==="string"){let J=GH($.text);if(J!==$.text)return{...$,text:J};return $}if(Z==="assistant"&&$.type==="text"&&typeof $.text==="string"){let J=this.truncateAssistantText($.text);return J===$.text?$:{...$,text:J}}if($.type==="file"){let J=f8($.content,this.maxFileContentChars,AH);return J===$.content?$:{...$,content:J}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),W=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let J=this.committedOutdatedRewrites.get($.tool_use_id);if(J&&J.size>0){let Y=this.getReadLocators($).filter((j)=>J.has(this.toReadLocatorKey(j))&&this.isOutdatedReadLocator(j,$.tool_use_id));if(Y.length>0)W=this.replaceOutdatedReadContent(W,Y)}}return W=this.truncateToolResultContent(W),W===$.content?$:{...$,content:W}}reindex($){let Z=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!Z)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let W=$[Q];if(!Array.isArray(W.content))continue;for(let J=0;J<W.content.length;J++){let X=W.content[J];if(X.type==="file")this.latestFullContentOwnerByPathCache.set(X.path,`file:${Q}:${J}`);else if(X.type==="tool_use"){let Y=X.name.toLowerCase();if(this.toolNameByIdCache.set(X.id,Y),this.isReadTool(Y)){let j=this.extractLocatorsFromReadToolInput(X.input);if(j.length>0)this.readLocatorsByToolUseIdCache.set(X.id,j)}}else if(X.type==="tool_result"){let Y=this.resolveToolName(X);if(!this.isReadTool(Y)||X.is_error===!0)continue;let j=this.getReadLocators(X);for(let V of j)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),X.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,X.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let Z=new Map,Q=new Set,W=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type!=="tool_result"||X.is_error===!0)continue;let Y=this.resolveToolName(X);if(!this.isReadTool(Y))continue;Q.add(X.tool_use_id);let j=this.committedOutdatedRewrites.get(X.tool_use_id),V=new Set,H=new Set;for(let G of this.getReadLocators(X)){let K=this.toReadLocatorKey(G);if(!this.isOutdatedReadLocator(G,X.tool_use_id))continue;if(H.add(K),!j?.has(K))V.add(K)}if(j){for(let G of j)if(!H.has(G))j.delete(G);if(j.size===0)this.committedOutdatedRewrites.delete(X.tool_use_id)}if(V.size===0)continue;let B=Z.get(X.tool_use_id);if(!B)B=new Set,Z.set(X.tool_use_id,B);for(let G of V)B.add(G);W+=this.estimateOutdatedReclaimBytes(X.content,V)}}for(let J of this.committedOutdatedRewrites.keys())if(!Q.has(J))this.committedOutdatedRewrites.delete(J);if(Z.size===0||W<this.minOutdatedRewriteBytes)return;for(let[J,X]of Z){let Y=this.committedOutdatedRewrites.get(J);if(!Y)Y=new Set,this.committedOutdatedRewrites.set(J,Y);for(let j of X)Y.add(j)}}estimateOutdatedReclaimBytes($,Z){let Q=this.extractReadLocatorsFromToolResultContent($),W=Q.length>0&&Q.every((V)=>Z.has(this.toReadLocatorKey(V))),J=(V)=>{let H;try{H=JSON.parse(V)}catch{return W||Q.length===0?W0(this.truncateMiddle(V)):0}let B=Array.isArray(H)?H:[H],G=0;for(let K of B){let F=this.extractLocatorFromResultEntry(K);if(F&&Z.has(this.toReadLocatorKey(F)))G+=this.providerBoundEntryBytes(K)}return G};if(typeof $==="string")return J($);let X=new Set(Z),Y=0;for(let V of $)if(V.type==="text")Y+=this.countOutdatedImageEntries(V.text,X);let j=0;for(let V of $)if(V.type==="text")j+=J(V.text);else if(V.type==="image"){if(Y>0)Y-=1,j+=W0(V.data)}else if(f$(V)){let H=this.extractLocatorFromResultEntry(V);if(H&&Z.has(this.toReadLocatorKey(H)))j+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(Z.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))j+=W0(this.truncateMiddle(V.content))}return j}providerBoundEntryBytes($){let Z=this.truncateNestedStrings($);return W0(JSON.stringify(Z))}addMissingToolResults($){let Z=this.collectToolResultIds($),Q=[],W=new Map,J=!1,X=()=>{if(W.size===0)return;Y(this.createMissingToolResultMessage(W)),W.clear(),J=!0},Y=(j)=>{let V=Q.at(-1);if(this.shouldMergeUserAfterToolResults(V,j)){Q[Q.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(j.content)]},J=!0;return}Q.push(j)};for(let j of $){if(this.isToolResultOnlyMessage(j)){if(Y(this.appendMissingToolResults(j,W)),W.size>0)W.clear(),J=!0;continue}if(Array.isArray(j.content)){let V=j.content.filter((B)=>B.type==="tool_result"),H=j.content.filter((B)=>B.type!=="tool_result");if(V.length>0){let B=this.appendMissingToolResults({...j,role:"user",content:V},W);if(Y(B),W.size>0)W.clear();J=!0}if(H.length>0||V.length===0){if(V.length===0)X();let B=V.length>0?{...j,content:H}:j;if(Y(B),B.role==="assistant")this.trackMissingToolCalls(B,Z,W)}continue}X(),Y(j)}return X(),J?Q:$}appendMissingToolResults($,Z){if(Z.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(Z)]}}shouldMergeUserAfterToolResults($,Z){return $?.role==="user"&&Z.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(Z.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let W of Q.content)if(W.type==="tool_result")Z.add(W.tool_use_id)}return Z}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}trackMissingToolCalls($,Z,Q){if(!Array.isArray($.content))return;for(let W of $.content){if(W.type!=="tool_use"||Z.has(W.id))continue;Q.set(W.id,W.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([Z,Q])=>({type:"tool_result",tool_use_id:Z,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${FH} Tool: ${$}.`:FH}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let Z=$,Q=this.readResultLocatorCache.get(Z);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(Z,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let Z=$,Q=[],W=this.extractLocatorFromReadRequest(Z);if(W)Q.push(W);if(Array.isArray(Z.files))for(let J of Z.files){let X=this.extractLocatorFromReadRequest(J);if(X)Q.push(X)}if(Array.isArray(Z.file_paths)){for(let J of Z.file_paths)if(typeof J==="string"&&J.length>0)Q.push({path:J,startLine:null,endLine:null})}return this.dedupeReadLocators(Q)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);let Z=[];for(let Q of $){if(Q.type==="text"){Z.push(...this.tryParseReadLocators(Q.text));continue}if(f$(Q)){let W=this.extractLocatorFromResultEntry(Q);if(W)Z.push(W)}}return this.dedupeReadLocators(Z)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let W of $){let J=this.extractLocatorFromResultEntry(W);if(J)Q.push(J)}return this.dedupeReadLocators(Q)}let Z=this.extractLocatorFromResultEntry($);return Z?[Z]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(Q)return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)};if(typeof Z.query==="string"&&Z.query.length>0)return this.parseReadQuery(Z.query);return}extractPath($){let Z=[$.path,$.file_path,$.filePath];for(let Q of Z)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let Z=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!Z)return{path:$,startLine:null,endLine:null};return{path:Z[1],startLine:Number(Z[2]),endLine:Z[3]==="EOF"?null:Number(Z[3])}}dedupeReadLocators($){let Z=new Map;for(let Q of $)Z.set(this.toReadLocatorKey(Q),Q);return Array.from(Z.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,Z){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==Z)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==Z}replaceOutdatedReadContent($,Z){let Q=new Set(Z.map((X)=>this.toReadLocatorKey(X))),W=new Set(Z.map((X)=>X.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??W2;let J=0;for(let X of $)if(X.type==="text")J+=this.countOutdatedImageEntries(X.text,Q);return $.map((X)=>{if(X.type==="file"){if(!W.has(X.path))return X;return{...X,content:W2}}if(X.type==="image"){if(J===0)return X;return J-=1,{type:"text",text:W2}}if(f$(X))return this.replaceOutdatedReadEntry(X,Q);if(X.type!=="text")return X;let Y=this.replaceOutdatedInString(X.text,Q);if(Y===null)return{...X,text:W2};return Y===X.text?X:{...X,text:Y}})}countOutdatedImageEntries($,Z){let Q;try{Q=JSON.parse($)}catch{return 0}let W=Array.isArray(Q)?Q:[Q],J=0;for(let X of W){if(!X||typeof X!=="object")continue;let Y=X,j=this.extractLocatorFromResultEntry(Y);if(!j)continue;if(!Z.has(this.toReadLocatorKey(j)))continue;if(Y.result==="Successfully read image"||Y.content==="Successfully read image")J+=1}return J}replaceOutdatedInString($,Z){let Q;try{Q=JSON.parse($)}catch{return null}let W=Array.isArray(Q)?Q.map((J)=>this.replaceOutdatedReadEntry(J,Z)):this.replaceOutdatedReadEntry(Q,Z);return JSON.stringify(W)}replaceOutdatedReadEntry($,Z){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!Z.has(this.toReadLocatorKey(Q)))return $;let W={...$};if(typeof W.result==="string")W.result=W2;else if(typeof W.content==="string")W.content=W2;else W.result=W2;return W}isReadTool($){return!!$&&vz.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(f$(Z))return this.truncateNestedStrings(Z);return Z})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let Z=!1,Q=$.map((W)=>{let J=this.truncateNestedStrings(W);if(J!==W)Z=!0;return J});return Z?Q:$}if($!==null&&typeof $==="object"){if(vW($))return $;let Z=!1,Q={};for(let[W,J]of Object.entries($)){let X=this.truncateNestedStrings(J);if(X!==J)Z=!0;Q[W]=X}return Z?Q:$}return $}truncateMiddle($){return f8($,this.maxToolResultChars,AH)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return f8($,this.maxAssistantToolMarkupChars,uz);return f8($,this.maxAssistantTextChars,cz)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let Z=0;for(let Q of $.matchAll(dz))if(Z+=1,Z>=mz)return!0;return!1}truncateToTotalTextBudget($){let Z=this.countMessageTextBytes($);if(Z<=this.maxTotalTextBytes)return $;let Q=$.map((J)=>{if(!Array.isArray(J.content))return{...J};return{...J,content:J.content.map((X)=>iz(X))}}),W=this.collectTruncationCandidates(Q);for(let J of W){if(Z<=this.maxTotalTextBytes)break;let X=J.byteLength;if(X<=J.minBytes)continue;let Y=Z-this.maxTotalTextBytes,j=Math.max(J.minBytes,X-Y),V=rz(J.get(),j,J.makeMarker);J.set(V),Z-=X-W0(V)}return Q}countMessageTextBytes($){let Z=0;for(let Q of $){if(typeof Q.content==="string"){Z+=W0(Q.content);continue}for(let W of Q.content)if(W.type==="text")Z+=W0(W.text);else if(W.type==="thinking")Z+=W0(W.thinking);else if(W.type==="file")Z+=W0(W.content);else if(W.type==="tool_use")Z+=HZ(W.input);else if(W.type==="tool_result"){if(typeof W.content==="string")Z+=W0(W.content);else for(let J of W.content)if(J.type==="text")Z+=W0(J.text);else if(J.type==="file")Z+=W0(J.content);else if(f$(J))Z+=HZ(J)}}return Z}collectTruncationCandidates($){let Z=[],Q=[];for(let W of $){if(W.role==="assistant"&&typeof W.content==="string"){Z.push({byteLength:W0(W.content),minBytes:KH,makeMarker:fH,get:()=>W.content,set:(J)=>{W.content=J}});continue}if(!Array.isArray(W.content))continue;for(let J of W.content){if(J.type==="tool_use"){BZ(J.input,Q);continue}if(W.role==="assistant"&&J.type==="text"){Z.push({byteLength:W0(J.text),minBytes:KH,makeMarker:fH,get:()=>J.text,set:(X)=>{J.text=X}});continue}if(J.type!=="tool_result")continue;if(typeof J.content==="string"){Z.push({byteLength:W0(J.content),minBytes:U6,makeMarker:D6,get:()=>J.content,set:(X)=>{J.content=X}});continue}for(let X of J.content)if(X.type==="text")Z.push({byteLength:W0(X.text),minBytes:U6,makeMarker:D6,get:()=>X.text,set:(Y)=>{X.text=Y}});else if(X.type==="file")Z.push({byteLength:W0(X.content),minBytes:U6,makeMarker:D6,get:()=>X.content,set:(Y)=>{X.content=Y}});else if(f$(X))BZ(X,Z)}}return Z.sort((W,J)=>J.byteLength-W.byteLength),Q.sort((W,J)=>J.byteLength-W.byteLength),[...Z,...Q]}applyMediaBudget($){let Z=this.resolveMediaBudget();if(Z.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&Z.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&Z.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=Pz(),W=!1,J=$.map((X)=>{if(!Array.isArray(X.content))return X;let Y=!1,j=X.content.map((V)=>{let H=this.applyMediaBudgetToBlock(V,Z,Q);if(H!==V)Y=!0;return H});if(!Y)return X;return W=!0,{...X,content:j}});return W?J:$}resolveMediaBudget(){return Sz(this.mediaBudget)}applyMediaBudgetToBlock($,Z,Q){if(gW($))return this.limitImageContent($,Z,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let W=!1,J=$.content.map((X)=>{let Y=this.applyMediaBudgetToToolResultEntry(X,Z,Q);if(Y!==X)W=!0;return Y});return W?{...$,content:J}:$}applyMediaBudgetToToolResultEntry($,Z,Q){if(gW($))return this.limitImageContent($,Z,Q);if(f$($))return this.limitNestedMedia($,Z,Q);return $}limitNestedMedia($,Z,Q){if(gW($)){let W=this.limitImageContent($,Z,Q);return W.type==="text"?W.text:W}if(Array.isArray($)){let W=!1,J=$.map((X)=>{let Y=this.limitNestedMedia(X,Z,Q);if(Y!==X)W=!0;return Y});return W?J:$}if($!==null&&typeof $==="object"){let W=!1,J={};for(let[X,Y]of Object.entries($)){let j=this.limitNestedMedia(Y,Z,Q);if(j!==Y)W=!0;J[X]=j}return W?J:$}return $}limitImageContent($,Z,Q){if(!_H($))return{type:"text",text:BH};let W=bz($.mediaType,$.data,{maxImageEncodedBytes:Z.maxImageEncodedBytes,maxImageDecodedBytes:Z.maxImageDecodedBytes,maxTotalMediaBytes:Z.maxTotalMediaBytes},Q);if(!W.ok)return{type:"text",text:BH};return{...$,data:W.base64,mediaType:W.mediaType}}}var UH=String.raw`[\|\uFF5C]`,dz=new RegExp(String.raw`<\s*(?:${UH}\s*)?DSML\s*(?:${UH}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function W0($){return Buffer.byteLength($,"utf8")}function DH($){if($===void 0)return;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>0?Z:void 0}function lz($){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 f6($,Z){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):Z}function pz($,Z){if(typeof $!=="number"||Number.isNaN($)||$<0)return Z;return Number.isFinite($)?Math.floor($):$}function f8($,Z,Q){if($.length<=Z)return $;let W=Q($.length-Z),J=Math.max(0,Math.floor((Z-W.length)/2)),X=Math.max(0,$.length-J*2),Y=Q(X),j=Math.max(0,Math.floor((Z-Y.length)/2)),V=$.slice(0,j),H=j>0?$.slice(-j):"";return`${V}${Y}${H}`}function rz($,Z,Q){if(W0($)<=Z)return $;let W=0,J=$.length,X=f8($,0,Q);while(W<=J){let Y=W+J>>>1,j=f8($,Y,Q);if(W0(j)<=Z)X=j,W=Y+1;else J=Y-1}return X}function iz($){if($.type==="tool_use")return{...$,input:GZ($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((Z)=>f$(Z)?GZ(Z):{...Z})}}function f$($){if($===null||typeof $!=="object")return!1;let Z=$.type;return Z!=="text"&&Z!=="image"&&Z!=="file"}function gW($){return $!==null&&typeof $==="object"&&$.type==="image"}function _H($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function vW($){return _H($)}function HZ($){if(typeof $==="string")return W0($);if(Array.isArray($)){let Z=0;for(let Q of $)Z+=HZ(Q);return Z}if($!==null&&typeof $==="object"){if(vW($))return 0;let Z=0;for(let Q of Object.values($))Z+=HZ(Q);return Z}return 0}function BZ($,Z){if(Array.isArray($)){$.forEach((Q,W)=>{if(typeof Q==="string")Z.push({byteLength:W0(Q),minBytes:U6,makeMarker:D6,get:()=>$[W],set:(J)=>{$[W]=J}});else BZ(Q,Z)});return}if($!==null&&typeof $==="object"){if(vW($))return;let Q=$;for(let W of Object.keys(Q)){let J=Q[W];if(typeof J==="string")Z.push({byteLength:W0(J),minBytes:U6,makeMarker:D6,get:()=>Q[W],set:(X)=>{Q[W]=X}});else BZ(J,Z)}}}function GZ($){if(Array.isArray($))return $.map(GZ);if($!==null&&typeof $==="object"){let Z={};for(let[Q,W]of Object.entries($))Z[Q]=GZ(W);return Z}return $}function cW(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class uW{messages=[];conversationId=cW();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=cW(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=cW(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function zH($){let{agentConfig:Z}=$,Q=nz(Z),W=az(Z),J=$.hooks,X=sz(Z.maxParallelToolCalls);return{sessionId:$.sessionId??Z.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??Z.systemPrompt,messageModelInfo:W,model:$.model,modelOptions:Q,tools:$.tools,hooks:J,prepareTurn:$.prepareTurn,consumePendingUserMessage:Z.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??Z.logger,telemetry:$.telemetry??Z.telemetry,initialMessages:$.initialMessages,completionPolicy:Z.completionPolicy,maxIterations:Z.maxIterations,toolExecution:X,toolPolicies:Z.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:Z.requestToolApproval}}function nz($){let Z={};if($.thinking!==void 0)Z.thinking=$.thinking;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)Z.maxTokensPerTurn=$.maxTokensPerTurn;if($.apiTimeoutMs!==void 0)Z.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(Z).length>0?Z:void 0}function az($){let Z=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:Z}}function sz($){if($===void 0)return;return $>=2?"parallel":"sequential"}function oz(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function tz($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function dW($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(dW);let Z={};for(let Q of Object.keys($).sort())Z[Q]=dW($[Q]);return Z}function ez($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(dW($))}catch{return String($)}}function $T($,Z,Q,W){if(Z===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=Z,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===W.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=W.hardThreshold}}var TH={softThreshold:3,hardThreshold:5};class lW{config;state=oz();constructor($){this.config={softThreshold:$?.softThreshold??TH.softThreshold,hardThreshold:$?.hardThreshold??TH.hardThreshold}}inspect($){let Z=ez($.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(){tz(this.state)}}class pW{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let Z=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&Z?Z:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let W=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(W),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Q,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!Z||Q<Z)return{action:"continue"};let J=await QT({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details},this.options.onLimitReached);if(J.action==="continue"){let X=J.guidance?.trim();if(X)this.options.appendRecoveryNotice(X,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:X}}return{action:"stop",reason:J.reason?.trim()||void 0,message:ZT({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details,stopReason:J.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function ZT($){let Z=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)Z.push(`Error: ${Q}`);let W=$.stopReason?.trim();if(W)Z.push(`Decision: ${W}`);return Z.push("Session state was preserved. Send a new prompt to resume from the latest state."),Z.join(" ")}async function QT($,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 WT($){let Z=$.content.filter((Q)=>Q.type==="text");if(Z.length===0)return;return Z.map((Q)=>Q.text).join("")}function JT($){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 XT($){return $.content.find((Z)=>Z.type==="tool-result")}function YT($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function jT($){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 rW{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:$.metadata?.reason==="auto_compaction"?"auto_compaction":void 0,metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let Z=[],Q=WT($);if(Q!==void 0)Z.push({type:"content_end",contentType:"text",text:Q});let W=JT($);if(W!==void 0)Z.push({type:"content_end",contentType:"reasoning",reasoning:W.reasoning});return Z}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input}]}translateToolFinished($){let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=Z===void 0?void 0:Date.now()-Z;this.toolStartedAt.delete($.toolCall.toolCallId);let W=XT($.message),J=W?.output,X=jT(W);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:J,error:X,durationMs:Q}]}translateUsage($){let Z=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,W=$.cacheReadTokens-this.lastUsage.cacheReadTokens,J=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,X=this.lastUsage.totalCost??0,j=($.totalCost??0)-X;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,Z),outputTokens:Math.max(0,Q),cacheReadTokens:W===0?void 0:Math.max(0,W),cacheWriteTokens:J===0?void 0:Math.max(0,J),cost:j===0?void 0:j,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let Z={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:YT($.status),text:$.outputText,iterations:$.iterations,usage:Z}]}}function fT($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function UT($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function DT($,Z){let Q=$.trim(),W=Z.map((J)=>J.trim()).filter(Boolean).join(`
|
|
193
193
|
|
|
194
194
|
`);if(Q&&W)return`${Q}
|
|
195
195
|
|
|
196
|
-
${W}`;return Q||W}function AT($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function fT($,Z){return $.filter((Q)=>AT(Q.name,Z))}function UT($,Z){return g1(fT($,Z))}function DT($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return{};return{beforeRun:async(Q)=>{for(let W of Z){let J=await W.beforeRun?.(Q);if(J?.stop)return J}return},afterRun:async(Q)=>{for(let W of Z)await W.afterRun?.(Q)},beforeModel:async(Q)=>{let W=Q.request,J;for(let X of Z){let Y=await X.beforeModel?.({...Q,request:W});if(!Y)continue;if(Y.stop)return Y;J={...J,...Y,options:TH(J?.options,Y.options)},W={...W,...Y.messages?{messages:Y.messages}:{},...Y.tools?{tools:Y.tools}:{},...Y.options?{options:TH(W.options,Y.options)}:{}}}return J},afterModel:async(Q)=>{for(let W of Z){let J=await W.afterModel?.(Q);if(J?.stop)return J}return},beforeTool:async(Q)=>{let W=Q.input,J;for(let X of Z){let Y=await X.beforeTool?.({...Q,input:W});if(!Y)continue;if(Y.stop||Y.skip)return Y;if(J={...J,...Y},Object.hasOwn(Y,"input"))W=Y.input}return J},afterTool:async(Q)=>{let W=Q.result,J;for(let X of Z){let Y=await X.afterTool?.({...Q,result:W});if(!Y)continue;if(Y.stop)return Y;if(J={...J,...Y},Y.result)W=Y.result}return J},onEvent:async(Q)=>{for(let W of Z)await W.onEvent?.(Q)}}}class U${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 rW;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??HT,this.conversation=new uW($.initialMessages),this.messageBuilder=new mW(UH()),this.contributionRegistry=BT({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 pW({maxConsecutiveMistakes:Q,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(X)=>this.emitLegacyEvent(X),log:(X,Y,j)=>LT(this.logger,X,Y,j),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(X,Y)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:X}]})}});let W=$.execution?.loopDetection;this.loopDetectionDisabled=W===!1;let J=W===!1||W===void 0?void 0:W;this.loopTracker=new lW(J)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools($){if($.length===0)return;let Z=new Set(this.config.tools.map((W)=>W.name)),Q=[...this.config.tools];for(let W of $)if(!Z.has(W.name))Q.push(W),Z.add(W.name);this.config={...this.config,tools:Q}}updateConnection($){let Z={...this.config};if($.providerId!==void 0)Z.providerId=$.providerId;if($.modelId!==void 0)Z.modelId=$.modelId;if($.apiKey!==void 0)Z.apiKey=$.apiKey;if($.baseUrl!==void 0)Z.baseUrl=$.baseUrl;if($.headers!==void 0)Z.headers=$.headers;if($.providerConfig!==void 0)Z.providerConfig=$.providerConfig;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinking!==void 0)Z.thinking=$.thinking;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;this.config=Z}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.messageBuilder.resetConversationState(),this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let Z=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=Z,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(Z)}async shutdown($,Z){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run($,Z,Q){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!1})}continue($,Z,Q){return this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let Z of this.contributionRegistry.getRegisteredRules()){let Q=await KT(Z);if(Q)$.push(Q)}return FT(this.config.systemPrompt,$)}executeRun($){let Z;return Z=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===Z)this.activeRunPromise=null}),this.activeRunPromise=Z,Z}async executeRunInternal($){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let Z=new Date,Q=$.userMessage;if(Q!==void 0){let U=await zT(Q,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:U})}let W=await this.composeSystemPrompt(),J=jH(this.config,this.logger,this.telemetry),X=new Map;for(let U of this.contributionRegistry.getRegisteredTools())X.set(U.name,U);let Y=UT([...X.values()],this.config.toolPolicies),j=new Map;for(let U of Y)j.set(U.name,U);for(let U of this.config.tools)j.set(U.name,U);let V=this.conversation.getConversationId(),H=OH(this.config),B=Array.from(j.values()),G=YZ(this.conversation.getMessages()),K=LH({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:J,logger:this.logger,telemetry:this.telemetry,tools:B,toolContextMetadata:{modelSupportsImages:H?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[UV]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(H,B),initialMessages:G,systemPrompt:W}),F=this.createAgentRuntimeImpl(K);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let A=F.subscribe((U)=>{this.handleRuntimeEvent(U)}),L,f;try{if($.isContinue)L=await F.continue(void 0);else L=await F.run("")}catch(U){f=U instanceof Error?U:Error(String(U))}finally{A();try{await this.activeTrackerWork}catch(U){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:U})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(L&&L.messages.length>0){let U=A8(L.messages);this.conversation.replaceMessages(U)}let D=new Date;try{return this.buildLegacyResult({runResult:L,thrownError:f,startedAt:Z,endedAt:D})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize({tolerateSetupErrors:this.config.hookErrorMode!=="throw"})}catch($){if(this.config.hookErrorMode==="throw")throw $;this.emitLegacyEvent({type:"error",error:$ instanceof Error?$:Error(String($)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let $=DT([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((Z)=>Z.hooks)]);return{...$,beforeModel:async(Z)=>{let Q=await $.beforeModel?.(Z);if(Q?.stop)return Q;let W=Q?.messages??Z.request.messages,J=await this.prepareMessagesForModelRequest(W);return{...Q,messages:J}}}}createRuntimePrepareTurn($,Z){let Q=this.config.prepareTurn;if(!Q)return;return async(W)=>{let J=A8(W.messages),X=await this.prepareProviderMessagesForApi(J),Y=await Q({agentId:W.agentId,conversationId:W.conversationId??this.conversation.getConversationId(),parentAgentId:W.parentAgentId??null,iteration:W.iteration,messages:J,apiMessages:X,abortSignal:W.signal??new AbortController().signal,systemPrompt:W.systemPrompt??"",tools:Z,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:W.emitStatusNotice});if(!Y)return;return{...Y.messages?{messages:YZ(Y.messages)}:{},...Y.systemPrompt!==void 0?{systemPrompt:Y.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let Z=await this.prepareProviderMessagesForApi(jZ($));return YZ(Z)}async prepareProviderMessagesForApi($){let Z=$,Q=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let W of Q)Z=await W.build(Z);return this.messageBuilder.buildForApi(Z)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=new Date,W=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let J=$.message.content.find((V)=>V.type==="tool-result"),X=J?.type==="tool-result"&&J.isError===!0,Y=X?GT(J?.type==="tool-result"?J.output:void 0):void 0,j={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:W,output:J?.type==="tool-result"?J.output:void 0,error:Y,durationMs:Z===void 0?0:Q.getTime()-Z.getTime(),startedAt:Z??Q,endedAt:Q};if(this.currentRunToolCalls.push(j),X){if(this.currentTurnFailedTools+=1,Y)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${Y}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let Z=this.currentTurnFailedTools,Q=this.currentTurnSuccessfulTools;if(Z>0&&Q===0){let W=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${Z} tool call(s) failed${W?`: ${W}`:""}`})}else if(Q>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let Z of this.eventAdapter.translate($))this.emitLegacyEvent(Z)}syncConversationFromRuntimeMessage($,Z){if($.length>0){this.conversation.replaceMessages(A8($));return}if(Z.length===0)return;let Q=new Set(this.conversation.getMessages().map((J)=>J.id).filter((J)=>typeof J==="string")),W=A8(Z).filter((J)=>!J.id||!Q.has(J.id));if(W.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...W])}emitLegacyEvent($){for(let Z of this.listeners)try{Z($)}catch(Q){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Q})}}inspectLoopForToolCall($,Z,Q){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let W=this.loopTracker.inspect({name:$,input:Z});if(W.kind==="ok")return;if(W.kind==="soft"){if(W.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:W.message}]});return}this.enqueueMistakeRecord({iteration:Q,reason:"tool_execution_failed",forceAtLimit:!0,details:W.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let Z=await this.mistakeTracker.record($);if(Z.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:Z.message}]}),this.activeRuntime?.abort(Z.reason??Z.message)})}buildLegacyResult($){let{runResult:Z,thrownError:Q,startedAt:W,endedAt:J}=$,X=J.getTime()-W.getTime(),Y=Q?"error":_T(Z),j=(Z?.status==="failed"?Z.error?.message:void 0)||Z?.outputText||"",V=Z?{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens>0?Z.usage.cacheReadTokens:void 0,cacheWriteTokens:Z.usage.cacheWriteTokens>0?Z.usage.cacheWriteTokens:void 0,totalCost:Z.usage.totalCost}:this.currentRunUsage,H=Z?A8(Z.messages):this.conversation.getMessages(),B=OH(this.config);if(Q)throw Q;return{text:j,usage:V,messages:H,toolCalls:this.currentRunToolCalls,iterations:Z?.iterations??0,finishReason:Y,model:{id:this.config.modelId,provider:this.config.providerId,info:B},startedAt:W,endedAt:J,durationMs:X}}}function LT($,Z,Q,W){if(!$)return;if(Z==="debug"){$.debug(Q,W);return}if(Z==="error"&&$.error){$.error(Q,W);return}let J=Z==="warn"?"warn":Z==="error"?"error":"info";$.log(Q,{...W,severity:J})}function _T($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function zT($,Z,Q,W){let{buildInitialUserContent:J}=await Promise.resolve().then(() => zH);return J($,Z,Q,W)}function OH($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let Z=IW($);if(Z?.[$.modelId])return Z[$.modelId];return}import{buildClineSystemPrompt as qH}from"@cline/shared";function MH($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return qH({ide:Z.clineIdeName?.trim()||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,rules:`# Team Teammate Role
|
|
197
|
-
${Q}`,platform:Z.clinePlatform,metadata:Z.workspaceMetadata})}function RH($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return qH({ide:Z.clineIdeName||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,overridePrompt:Q,metadata:Z.workspaceMetadata,platform:Z.clinePlatform})}function D$($){let Z={...$};return{getRuntimeConfig:()=>Z,getConnectionConfig:()=>({providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxTokensPerTurn:Z.maxTokensPerTurn}),updateConnectionDefaults:(Q)=>{Z={...Z,...Q}}}}function W2($){let Z=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?MH($.prompt,Z):RH($.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 L$($){let Z=W2($),Q=new U$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);return Q}var qT=iW.object({systemPrompt:iW.string().describe("System prompt defining the sub-agent's behavior"),task:iW.string().describe("Task for the sub-agent to complete")});function _$($){return TT({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:OT(qT),execute:async(Z,Q)=>{let W=$.createSubAgentTools?await $.createSubAgentTools(Z,Q):$.subAgentTools??[],J=L$({kind:"subagent",prompt:Z.systemPrompt,configProvider:$.configProvider,tools:W,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),X=J.getAgentId(),Y=J.getConversationId(),j=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z})}catch{}try{let V=await J.run(Z.task),H={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,result:H,agentResult:V})}catch{}return H}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as K0,TEAM_AWAIT_TIMEOUT_MS as MT,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as RT,TEAM_RUN_TEXT_PREVIEW_LIMIT as ET,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as NT,TeamAttachOutcomeFragmentInputSchema as EH,TeamAwaitRunsInputSchema as NH,TeamBroadcastInputSchema as wH,TeamBroadcastToolResultSchema as wT,TeamCancelRunInputSchema as CH,TeamCancelRunToolResultSchema as CT,TeamCleanupInputSchema as PH,TeamCleanupToolResultSchema as PT,TeamCreateOutcomeInputSchema as SH,TeamCreateOutcomeToolResultSchema as ST,TeamFinalizeOutcomeInputSchema as bH,TeamFinalizeOutcomeToolResultSchema as bT,TeamListOutcomesInputSchema as yH,TeamListRunsInputSchema as hH,TeamMailboxMessageToolResultSchema as yT,TeamMissionLogInputSchema as kH,TeamMissionLogToolResultSchema as hT,TeamOutcomeFragmentToolResultSchema as IH,TeamOutcomeToolResultSchema as kT,TeamReadMailboxInputSchema as xH,TeamReviewOutcomeFragmentInputSchema as gH,TeamRunTaskInputSchema as mH,TeamRunTaskToolResultSchema as nW,TeamRunToolSummarySchema as aW,TeamSendMessageInputSchema as vH,TeamSendMessageToolResultSchema as IT,TeamShutdownTeammateInputSchema as cH,TeamSimpleAgentStatusToolResultSchema as uH,TeamSpawnTeammateInputSchema as dH,TeamStatusInputSchema as lH,TeamStatusToolResultSchema as xT,TeamTaskInputSchema as pH,TeamTaskToolResultSchema as _6,validateWithZod as k,zodToJsonSchema as F0}from"@cline/shared";function rH($,Z){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=Z)return Q;return`${Q.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function J2($,Z){if($===void 0)throw Error(`Missing required field: ${Z}`);return $}function gT($){let Z=$.result;if(!Z)return;return{textPreview:rH(Z.text,ET),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 GZ($){return $?.toISOString()}function sW($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:rH($.message,RT),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:GZ($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:GZ($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:GZ($.heartbeatAt),lastProgressAt:GZ($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:gT($)}}function mT($){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 U8=["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 iH($){let Z=[];if($.createBaseTools)Z.push(...$.createBaseTools());Z.push(...X2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:W2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:Z,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function D8($){let Z=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,W=X2({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),J=[];for(let X of $.restoredTeammates??[]){if($.runtime.isTeammateActive(X.agentId))continue;iH({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:X}),J.push(X.agentId)}return{tools:W,restoredFromPersistence:Q,restoredTeammates:J}}function X2($){let Z=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,W=$.includeManagementTools??!0,J=[];if(Q)J.push(K0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:F0(dH),execute:async(Y)=>{let j=k(dH,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!Z)throw Error("Spawning teammates is disabled in this context.");let V={agentId:j.agentId,rolePrompt:j.rolePrompt};if(iH({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!W)$.onLeadToolsUnlocked?.(X2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return k(uH,{agentId:j.agentId,status:"spawned"})}}));if(!W)return J;J.push(K0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:F0(cH),execute:async(Y)=>{let j=k(cH,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(j.agentId,j.reason),k(uH,{agentId:j.agentId,status:"stopped"})}})),J.push(K0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:F0(lH),execute:async(Y)=>{return k(lH,Y),k(xT,$.runtime.getSnapshot())}})),J.push(K0({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:F0(pH),execute:async(Y)=>{let j=k(pH,Y);switch(j.action){case"create":{let V=new Set(NT.create??[]),H=Object.entries(Y).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),B=$.runtime.createTask({title:J2(j.title,"title"),description:J2(j.description,"description"),dependsOn:j.dependsOn,assignee:j.assignee,createdBy:$.requesterId});return k(_6,{action:"create",taskId:B.id,status:B.status,...H.length>0?{ignoredFields:H,note:`Ignored fields for action=create: ${H.join(", ")}`}:{}})}case"list":return k(_6,{action:"list",tasks:$.runtime.listTaskItems({status:j.status,assignee:j.assignee})});case"claim":{let V=$.runtime.claimTask(J2(j.taskId,"taskId"),$.requesterId);return k(_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(J2(j.taskId,"taskId"),$.requesterId,J2(j.summary,"summary"));return k(_6,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(J2(j.taskId,"taskId"),$.requesterId,J2(j.reason,"reason"));return k(_6,{action:"block",taskId:V.id,status:V.status})}}}}));let X=new Map;return J.push(K0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:F0(mH),execute:async(Y)=>{let j=k(mH,Y);if(j.runMode==="async"){let B=$.runtime.startTeammateRun(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0});return k(nW,{agentId:j.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${j.agentId} and queued as ${B.id}.`,runId:B.id})}let V=X.get(j.agentId);if(V){let B=await V;return k(nW,{...B,status:"joined",deduped:!0,message:`Task for ${j.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let H=$.runtime.routeToTeammate(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0}).then((B)=>k(nW,{agentId:j.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${j.agentId} and completed in sync mode.`,text:B.text,iterations:B.iterations})).finally(()=>{X.delete(j.agentId)});return X.set(j.agentId,H),await H}})),J.push(K0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:F0(CH),execute:async(Y)=>{let j=k(CH,Y),V=$.runtime.cancelRun(j.runId,j.reason);return k(CT,{runId:V.id,status:V.status})}})),J.push(K0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:F0(hH),execute:async(Y)=>k(aW.array(),$.runtime.listRuns(k(hH,Y)).map(sW))})),J.push(K0({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:F0(NH),timeoutMs:MT,execute:async(Y)=>{let j=k(NH,Y);if(j.runId){let B=await $.runtime.awaitRun(j.runId);return mT(B),k(aW,sW(B))}let V=await $.runtime.awaitAllRuns(),H=V.filter((B)=>["failed","cancelled","interrupted"].includes(B.status));if(H.length>0){let B=H.map((G)=>`${G.id}:${G.status}${G.error?`(${G.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${B}`)}return k(aW.array(),V.map(sW))}})),J.push(K0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:F0(vH),execute:async(Y)=>{let j=k(vH,Y),V=$.runtime.sendMessage($.requesterId,j.toAgentId,j.subject,j.body,j.taskId??void 0);return k(IT,{id:V.id,toAgentId:V.toAgentId})}})),J.push(K0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:F0(wH),execute:async(Y)=>{let j=k(wH,Y),V=$.runtime.broadcast($.requesterId,j.subject,j.body,{taskId:j.taskId??void 0});return k(wT,{delivered:V.length})}})),J.push(K0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:F0(xH),execute:async(Y)=>{let j=k(xH,Y);return k(yT.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:j.unreadOnly,markRead:!0}))}})),J.push(K0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:F0(kH),execute:async(Y)=>{let j=k(kH,Y),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:j.taskId||void 0,kind:j.kind,summary:j.summary,evidence:j.evidence?.length?j.evidence:void 0,nextAction:j.nextAction||void 0});return k(hT,{id:V.id})}})),J.push(K0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:F0(PH),execute:async(Y)=>{if(k(PH,Y),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),k(PT,{status:"cleaned"})}})),J.push(K0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:F0(SH),execute:async(Y)=>{let j=k(SH,Y),V=$.runtime.createOutcome({title:j.title,requiredSections:j.requiredSections,createdBy:$.requesterId});return k(ST,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),J.push(K0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:F0(EH),execute:async(Y)=>{let j=k(EH,Y),V=$.runtime.attachOutcomeFragment({outcomeId:j.outcomeId,section:j.section,sourceAgentId:$.requesterId,sourceRunId:j.sourceRunId||void 0,content:j.content});return k(IH,{fragmentId:V.id,status:V.status})}})),J.push(K0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:F0(gH),execute:async(Y)=>{let j=k(gH,Y),V=$.runtime.reviewOutcomeFragment({fragmentId:j.fragmentId,reviewedBy:$.requesterId,approved:j.approved});return k(IH,{fragmentId:V.id,status:V.status})}})),J.push(K0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:F0(bH),execute:async(Y)=>{let j=k(bH,Y),V=$.runtime.finalizeOutcome(j.outcomeId);return k(bT,{outcomeId:V.id,status:V.status})}})),J.push(K0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:F0(yH),execute:async(Y)=>{return k(yH,Y),k(kT.array(),$.runtime.listOutcomes())}})),J}function KZ($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}function nH($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var vT=[{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:_$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...U8]}],cT={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function uT($){return $==="plan"||$==="yolo"?$:"act"}function sH($){let Z=uT($.mode),Q=u0[I1({mode:Z})],W=K8($.providerId??"",$.modelId??"",Z,G8);return{mode:Z,flags:{...Q,...W,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function aH($,Z){if(Z.disabledToolIds?.has($))return!1;let{flags:Q}=sH(Z);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let W=cT[$];return W?Q[W]===!0:!1}function dT($,Z){if($.id==="editor"){let{flags:Q}=sH(Z),W=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:aH($.id,Z),headlessToolNames:[W?"apply_patch":"editor"]}}return{...$,defaultEnabled:aH($.id,Z)}}function Y2($={}){return vT.map((Z)=>dT(Z,$))}function FZ($={}){return Y2($).filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id)}function AZ($){if(!$.enabled)return new Set;let Z=Y2($.availabilityContext),Q=new Set(Z.map((W)=>W.id));if(!$.allowlist||$.allowlist.length===0)return new Set(Z.filter((W)=>W.defaultEnabled).map((W)=>W.id));for(let W of $.allowlist)if(!Q.has(W))throw Error(`Unknown tool "${W}". Available tools: ${Z.map((J)=>J.id).join(", ")}`);return new Set($.allowlist)}function z6($,Z={}){return Y2(Z).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function fZ($,Z={}){return z6($,Z)}function j2($={}){let{executorOptions:Z={},executors:Q,...W}=$,J={...B8(Z),...Q??{}};return F$({...W,executors:J})}import{mkdirSync as aT,writeFileSync as sT}from"node:fs";import{dirname as oT}from"node:path";import{normalizeUserInput as tT}from"@cline/shared";import{nanoid as eT}from"nanoid";var tH={};N(tH,{sanitizeSessionToken:()=>V2,parseTeamTaskSubSessionId:()=>_8,parseSubSessionId:()=>O6,makeTeamTaskSubSessionId:()=>T6,makeSubSessionId:()=>L8,deriveSubsessionStatus:()=>q6});import{nanoid as rT}from"nanoid";function V2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function L8($,Z){let Q=V2($),W=V2(Z),J=`${Q}__${W}`;return J.length>180?J.slice(0,180):J}function T6($,Z){let Q=V2($),W=V2(Z);return`${Q}__teamtask__${W}__${rT(6)}`}function _8($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+12),X=J.lastIndexOf("__");if(X<=0)return null;let Y=J.slice(0,X),j=J.slice(X+2);if(!W||!Y||!j)return null;return{rootSessionId:W,agentId:Y,teamTaskId:j}}function O6($){if(_8($))return null;let Z="__",Q=$.indexOf(Z);if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+Z.length);if(!W||!J)return null;return{rootSessionId:W,agentId:J}}function q6($){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 ZB={};N(ZB,{isTerminalSessionStatus:()=>$B,isNonTerminalSessionStatus:()=>H0,SessionSource:()=>_0,SESSION_STATUSES:()=>M6,NON_TERMINAL_SESSION_STATUSES:()=>eH});import{SESSION_STATUS_VALUES as iT}from"@cline/shared";var M6=iT,eH=["idle","running","pending"];function $B($){return!eH.includes($)}function H0($){return!$B($)}var _0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var nT=e.enum(M6),P0=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:nT,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()});function QB($){if(!$)return!1;return Object.values($).some((Z)=>typeof Z==="function")}function tW($,Z){let Q=[...$??[],...Z??[]];if(Q.length===0)return;let W=[],J=new Set;for(let X of Q){if(J.has(X.name))continue;J.add(X.name),W.push(X)}return W}function WB($){return JSON.stringify($,(Z,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function m1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function oW($,Z){let Q={...$};Q.id=m1(Q.id)??eT();let W=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,J={id:m1(W?.id)??m1(Q.modelId)??m1(Z?.id),provider:m1(W?.provider)??m1(Q.providerId)??m1(Z?.provider),family:m1(W?.family)??m1(Z?.family)};if(delete Q.providerId,delete Q.modelId,J.id&&J.provider)Q.modelInfo={id:J.id,provider:J.provider,...J.family?{family:J.family}:{}};else delete Q.modelInfo;return Q}function UZ($){return $.map((Z)=>oW(Z))}function DZ($,Z,Q=[]){let W=$.map((V,H)=>{let B=Q[H],K=B?.role===V.role&&JSON.stringify(B.content)===JSON.stringify(V.content)?{...B,...V}:{...V};return oW(K)}),J=Q.length,X=[];for(let V=J;V<W.length;V+=1)if(W[V]?.role==="assistant")X.push(V);if(X.length===0){let V=[...W].reverse().findIndex((H)=>H.role==="assistant");if(V===-1)return W;X.push(W.length-1-V)}let Y=X[X.length-1],j=X.some((V)=>W[V]?.metrics);for(let V of X){let H=W[V],B=H.metrics;if(!B&&V===Y&&!j){let G=Z.usage;B={inputTokens:G.inputTokens,outputTokens:G.outputTokens,cacheReadTokens:G.cacheReadTokens??0,cacheWriteTokens:G.cacheWriteTokens??0,cost:G.totalCost}}W[V]={...oW(H,{id:Z.model.id,provider:Z.model.provider,family:Z.model.info?.family}),...B?{metrics:B}:{},ts:H.ts??Z.endedAt.getTime()}}return W}function R6($){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 $O=120;function H2($){let Z=$?.trim();return Z?Z.slice(0,$O):void 0}function eW($){let Z=tT($??"").trim();if(!Z)return;return H2(Z.split(`
|
|
198
|
-
`)[0]?.trim())}function z$($){if(!$)return;let Z={...$},Q=
|
|
199
|
-
`,"utf8")}function XB($,Z){return P0.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 YB($,Z,Q){let W=0;while(!0){let J=await $();if(J===void 0)return{updated:!1};let X=await Z(J);if(typeof X==="object"&&X!==null&&"updated"in X&&X.updated===!1){if(W+=1,W>=Q)return X;continue}return X}}L0();var jB={};N(jB,{summarizeUsageFromMessages:()=>T8,sumUsageTotals:()=>N6,getCurrentContextSize:()=>Q3,createInitialAccumulatedUsage:()=>D0,accumulateUsageTotals:()=>A0});function D0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function A0($,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 N6($){let Z=D0();for(let Q of $)Z=A0(Z,Q);return Z}function z8($){return typeof $==="number"&&Number.isFinite($)?$:0}function T8($){let Z=D0();for(let Q of $){let W=Q.metrics;if(!W)continue;Z=A0(Z,{inputTokens:z8(W.inputTokens),outputTokens:z8(W.outputTokens),cacheReadTokens:z8(W.cacheReadTokens),cacheWriteTokens:z8(W.cacheWriteTokens),totalCost:z8(W.cost)})}return Z}function Q3($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let W=z8(Q.metrics?.inputTokens);return W>0?W:void 0}return}function ZO($){if(!$||typeof $!=="object")return;let Z=$,Q=Z.skill??Z.skill_name??Z.skillName;if(typeof Q!=="string")return;let W=Q.trim();return W.length>0?W:void 0}function W3($){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 v1($){let Z=$.agentId?.trim();if(!Z)return;let Q=$.parentAgentId?.trim()||void 0,W=$.teamRole,J="root";if(W==="teammate")J="team_teammate";else if(W==="lead")J="team_lead";else if(Q)J="subagent";return{agentId:Z,agentKind:J,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Q,createdByAgentId:$.createdByAgentId?.trim()||Q||void 0,isSubagent:Boolean(Q),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:W,teamAgentId:$.teamAgentId?.trim()||void 0}}function QO($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function WO($){let Z=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of Z){let W=Q?.trim();if(W)return W}return $.isPrimaryAgentEvent?"root":"unknown"}function J3($,Z,Q){let{sessionId:W,config:J,liveSession:X,emit:Y}=$,j=J.telemetry,V=X?.runtime.teamRuntime,H=Q?.isPrimaryAgentEvent??!0,B=W3(Z),G=v1({agentId:Q?.agentId??B.agentId,conversationId:Q?.conversationId??B.conversationId,parentAgentId:Q?.parentAgentId??B.parentAgentId,createdByAgentId:Q?.createdByAgentId,teamId:Q?.teamId??V?.getTeamId(),teamName:Q?.teamName??V?.getTeamName(),teamRole:Q?.teamRole,teamAgentId:Q?.teamAgentId});if(Z.type==="content_start"&&Z.contentType==="tool"&&Z.toolName==="skills"){let K=ZO(Z.input);if(K)O9(j,{ulid:W,skillName:K,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:J.providerId,modelId:J.modelId,...G})}if(Z.type==="content_end"&&Z.contentType==="tool"){let K=Z.toolName??"unknown",F=!Z.error;if(t2(j,{ulid:W,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))q9(j,{ulid:W,modelId:J.modelId,provider:J.providerId,errorType:Z.error,...G})}if(Z.type==="notice"&&Z.reason==="api_error")b4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.message,...G});if(Z.type==="error")b4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.error?.message??"unknown error",...G});if(Z.type==="usage"&&X?.turnUsageBaseline){let K=QO(Z);if(H){X.turnPrimaryUsage=A0(X.turnPrimaryUsage??D0(),K);let A=A0(X.turnUsageBaseline,X.turnPrimaryUsage);$.usageBySession.set(W,A),o2(j,{ulid:W,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),z9(j,{ulid:W,tokensIn:Z.inputTokens,tokensOut:Z.outputTokens,cacheWriteTokens:Z.cacheWriteTokens,cacheReadTokens:Z.cacheReadTokens,totalCost:Z.cost,model:J.modelId,...G})}else{let A=WO({isPrimaryAgentEvent:H,overrides:Q,eventMetadata:B}),L=X.turnUsageByAgent??new Map;X.turnUsageByAgent=L,L.set(A,A0(L.get(A)??D0(),K))}let F=A0(X.turnPrimaryUsage??D0(),N6(X.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(W,A0(X.turnAggregateUsageBaseline??X.turnUsageBaseline,F))}if(Z.type==="iteration_end"&&H)$.persistMessages(W,X?.agent.getMessages()??[],X?.config.systemPrompt);Y({type:"agent_event",payload:{sessionId:W,event:Z,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(H?"lead":void 0):void 0}}),Y({type:"chunk",payload:{sessionId:W,stream:"agent",chunk:WB(Z),ts:Date.now()}})}function T$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as AM}from"@cline/shared";Y1();import{existsSync as qZ,readFileSync as lO,statSync as pO}from"node:fs";import{basename as rO,dirname as TZ,join as MZ,resolve as OZ}from"node:path";import{discoverPluginModulePaths as iO,resolveConfiguredPluginModulePaths as wB,resolvePluginConfigSearchPaths as nO,SKILLS_CONFIG_DIRECTORY_NAME as aO}from"@cline/shared/storage";import{resolve as qO}from"node:path";import{normalizePluginManifest as MO}from"@cline/shared";import{existsSync as z0,readFileSync as q8}from"node:fs";import{builtinModules as JO,createRequire as V3}from"node:module";import{dirname as O$,extname as C6,isAbsolute as XO,resolve as p}from"node:path";import{fileURLToPath as HB}from"node:url";import{PLUGIN_FILE_EXTENSIONS as YO}from"@cline/shared";var BB=O$(HB(import.meta.url)),jO=V3(import.meta.url),VO=p(BB,"..","..","..","..",".."),X3=GO(VO),HO=["@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"],H3=new Set(JO.flatMap(($)=>[$,$.replace(/^node:/,"")])),w6=new Set(YO),BO=["development","node","import","require","default"];function GO($){let Z={},Q={"@cline/sdk":p($,"packages/sdk/src/index.ts"),"@cline/agents":p($,"packages/agents/src/index.ts"),"@cline/core":p($,"packages/core/src/index.ts"),"@cline/llms":p($,"packages/llms/src/index.ts"),"@cline/shared":p($,"packages/shared/src/index.ts"),"@cline/shared/storage":p($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":p($,"packages/shared/src/db/index.ts")};for(let[W,J]of Object.entries(Q))if(z0(J))Z[W]=J;for(let W of["agents","core","llms","shared"]){let J=p($,"packages",W),X=p(J,"package.json");if(!z0(X))continue;try{let Y=JSON.parse(q8(X,"utf8"));if(typeof Y.name!=="string"||!Y.exports)continue;if(typeof Y.exports==="string"){let j=p(J,Y.exports);if(z0(j))Z[Y.name]=j;continue}if(typeof Y.exports!=="object")continue;for(let[j,V]of Object.entries(Y.exports)){let H=KO(J,V);if(!H)continue;let B=j==="."?Y.name:`${Y.name}/${j.replace(/^\.\//,"")}`;Z[B]=H}}catch{}}return Z}function KO($,Z){let Q=B3(Z);if(!Q)return null;let W=GB($,Q);for(let J of W)if(z0(J))return J;return null}function B3($,Z=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(Z.has($))return null;Z.add($);let Q=$;for(let W of BO){let J=B3(Q[W],Z);if(J)return J}return null}function GB($,Z){let Q=Z.replace(/^\.\//,""),W=[p($,Z)];if(Q.startsWith("dist/")){let J=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[p($,`${J}.ts`),p($,`${J}.tsx`),p($,`${J}.mts`),p($,`${J}.cts`),...W]}return W}function FO($){return Object.fromEntries(Object.entries($).sort(([Z],[Q])=>Q.length-Z.length))}function LZ($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function O8($){if($.startsWith("@")){let[Z,Q]=$.split("/",3);return Q?`${Z}/${Q}`:$}return $.split("/",1)[0]??$}function AO($){let Z=O8($);if($===Z)return".";return`.${$.slice(Z.length)}`}function KB($){return O8($).startsWith("@cline/")}function Y3($,Z){let Q=O8(Z),W=O$($);while(!0){let J=p(W,"node_modules",Q);if(z0(J)||z0(p(J,"package.json")))return!0;let X=p(W,"..");if(X===W)return!1;W=X}}function VB($){return j3($)!==null}function j3($){try{return jO.resolve($)}catch{}return fO($)}function fO($){let Z=O8($),Q=FB(Z);if(!Q)return null;let W=p(Q,"package.json");try{let J=JSON.parse(q8(W,"utf8")),X=AO($),Y=X==="."&&typeof J.exports==="string"?J.exports:J.exports&&typeof J.exports==="object"&&Object.hasOwn(J.exports,X)?J.exports[X]:void 0,j=B3(Y)??(X==="."&&typeof J.main==="string"?J.main:null);if(!j)return null;let V=p(Q,j),H=[V,...GB(Q,j).filter((B)=>B!==V)];for(let B of H)if(z0(B))return B;return null}catch{return null}}function UO(){let $=[BB],Z=process.env.CLINE_WRAPPER_PATH?.trim();if(Z)$.push(O$(O$(Z)));let Q=process.execPath?.trim();if(Q)$.push(O$(Q));return[...new Set($.map((W)=>p(W)))]}function DO($,Z){let Q=$;while(!0){let W=p(Q,"package.json");if(z0(W))try{if(JSON.parse(q8(W,"utf8")).name===Z)return Q}catch{}let J=p(Q,"node_modules",Z,"package.json");if(z0(J))return O$(J);let X=p(Q,"..");if(X===Q)return null;Q=X}}function FB($){for(let Z of UO()){let Q=DO(Z,$);if(Q)return Q}return null}function LO($){let Q=O$($);for(let W=0;W<4;W++){let J=p(Q,"package.json");if(z0(J))try{let Y=JSON.parse(q8(J,"utf8"));return Y!=null&&typeof Y==="object"&&"cline"in Y}catch{return!1}let X=p(Q,"..");if(X===Q)return!1;Q=X}return!1}function AB($,Z){let Q=Z.startsWith("file:")?HB(Z):XO(Z)?Z:p(O$($),Z);if(z0(Q)&&w6.has(C6(Q)))return Q;for(let W of w6){let J=`${Q}${W}`;if(z0(J))return J}for(let W of w6){let J=p(Q,`index${W}`);if(z0(J))return J}return null}function fB($){let Z=new Set,Q=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let W of Q)for(let J of $.matchAll(W)){let X=J[1];if(X)Z.add(X)}return[...Z]}function _O($){return C6($)!==".ts"}function UB($,Z,Q=new Set){if(Q.has($)||!z0($))return;if(Q.add($),!w6.has(C6($)))return;let W=q8($,"utf8"),J=_O($);for(let X of fB(W)){if(X.startsWith("node:")||H3.has(X))continue;if(LZ(X)){if(!J)continue;if(Object.hasOwn(X3,X)||Object.hasOwn(X3,O8(X))||Y3($,X)||KB(X)&&VB(X)||Z&&VB(X))continue;throw Error(`Cannot find module '${O8(X)}'`)}let Y=AB($,X);if(Y)UB(Y,Z,Q)}}function DB($,Z=new Set,Q=new Set){if(Z.has($)||!z0($))return Q;if(Z.add($),!w6.has(C6($)))return Q;let W=q8($,"utf8");for(let J of fB(W)){if(Q.add(J),LZ(J))continue;let X=AB($,J);if(X)DB(X,Z,Q)}return Q}function zO($,Z){let Q=V3($),W={},J=DB($),X=new Set(HO);for(let[Y,j]of Object.entries(X3)){try{Q.resolve(Y);continue}catch{}W[Y]=j}for(let Y of J)if(LZ(Y)&&(KB(Y)||Z))X.add(Y);for(let Y of X){if(Object.hasOwn(W,Y)||Y3($,Y))continue;let j=j3(Y);if(j)W[Y]=j}if(!Z)return W;for(let Y of J){if(!LZ(Y)||Object.hasOwn(W,Y)||Y3($,Y)||Y.startsWith("node:")||H3.has(Y))continue;let j=j3(Y);if(j)W[Y]=j}return W}function TO($){let Z=C6($);return Z===".ts"||Z===".tsx"||Z===".mts"||Z===".cts"}var B2;function OO(){if(B2!==void 0)return B2;let $=FB("jiti");if(!$)return B2=null,null;let Z=p($,"dist","babel.cjs");if(!z0(Z))return B2=null,null;try{let W=V3(Z)(Z);B2=typeof W==="function"?W:null}catch{B2=null}return B2}async function LB($,Z={}){let Q=!LO($);UB($,Q);let W=zO($,Q),J=FO(W),X=await import("jiti"),Y=typeof X==="function"?X:typeof X.default==="function"?X.default:void 0;if(!Y)throw Error("Unable to load jiti");let j=Object.entries(J).filter(([,G])=>TO(G)).map(([G])=>G),V=OO(),H=V?(G)=>V({...G,interopDefault:!0}):void 0;return await Y($,{alias:J,cache:Z.useCache,requireCache:Z.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...H3],transformModules:j,tryNative:!1,...H?{transform:H}:{}}).import($,{})}function _B($,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 zB($){return typeof $==="object"&&$!==null}function G3($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function RO($,Z){if(!zB($.manifest))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);if(!G3($.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")&&!G3($.manifest.providerIds))throw Error(`Invalid plugin module at ${Z}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!G3($.manifest.modelIds))throw Error(`Invalid plugin module at ${Z}: manifest.modelIds must be a string array when provided`)}function EO($,Z){if(!zB($))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"`);RO($,Z)}async function P6($,Z={}){let Q=qO(Z.cwd??process.cwd(),$),W=await LB(Q,{useCache:Z.useCache}),J=Z.exportName??"plugin",X=W.default??W[J];EO(X,Q);let Y=X,j=Y.setup,V=j?(H,B)=>{let G={...Z.session,...B.session},K={...B,session:Object.keys(G).length>0?G:void 0,client:Z.client??B.client,user:Z.user??B.user,workspaceInfo:Z.workspaceInfo??B.workspaceInfo,automation:Z.automation??B.automation,logger:Z.logger??B.logger,telemetry:Z.telemetry??B.telemetry};return j(H,K)}:void 0;return{...Y,manifest:MO(Y.manifest),setup:V}}async function _Z($,Z={}){return(await G2($,Z)).plugins}async function G2($,Z={}){let Q=[],W=[],J=new Map,X=0;for(let j of $)try{let V=await P6(j,Z);if(!_B(V.manifest,Z))continue;let H=J.get(V.name);if(H)W.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:j,overriddenPluginPath:H.pluginPath,message:`Plugin "${V.name}" from ${j} overrides ${H.pluginPath}`});J.set(V.name,{plugin:V,pluginPath:j,order:X++})}catch(V){let H=V instanceof Error?V.message:String(V);Q.push({pluginPath:j,phase:"load",message:H,stack:V instanceof Error?V.stack:void 0})}let Y=[...J.values()].sort((j,V)=>j.order-V.order);return{plugins:Y.map((j)=>j.plugin),pluginPaths:Y.map((j)=>j.pluginPath),failures:Q,warnings:W}}import{existsSync as f3}from"node:fs";import{createRequire as NB}from"node:module";import{dirname as zZ,join as R8}from"node:path";import{fileURLToPath as SO}from"node:url";var RB={};N(RB,{resolveSubprocessRuntimeExecutable:()=>K3,buildSubprocessSandboxCommand:()=>MB,SubprocessSandbox:()=>M8,CLINE_JS_RUNTIME_PATH_ENV:()=>qB});import{spawn as NO}from"node:child_process";import{basename as wO}from"node:path";import{augmentNodeCommandForDebug as CO,withResolvedClineBuildEnv as PO}from"@cline/shared";function TB($){if($ instanceof Error)return $;return Error(String($))}var qB="CLINE_JS_RUNTIME_PATH";function OB($){let Z=$?.trim();if(!Z)return!1;let Q=wO(Z).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function K3($={}){let Z=$.env??process.env,Q=$.runtimeExecutable?.trim()||Z[qB]?.trim();if(Q)return Q;let W=$.execPath?.trim()||process.execPath;if(OB(W))return W;for(let J of[Z.BUN_EXEC_PATH,Z.npm_node_execpath,Z.NODE]){let X=J?.trim();if(X&&OB(X))return X}return"node"}function MB($,Z={}){let Q=K3({env:Z.env,execPath:Z.execPath,runtimeExecutable:Z.runtimeExecutable});return CO([Q,...$],{env:Z.env,execArgv:Z.execArgv,debugRole:Z.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class M8{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=MB($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=NO(Z[0]??K3(this.options),Z.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:PO(process.env),windowsHide:!0});this.process=Q;let W="",J=(X)=>{let Y=W+X;W=Y.length>4000?Y.slice(-4000):Y};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(X)=>{J(X)}),Q.on("message",(X)=>{this.onMessage(X)}),Q.on("error",(X)=>{this.failPending(Error(`${this.processLabel} process error: ${TB(X).message}`))}),Q.on("exit",(X,Y)=>{this.process=null;let j=W.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(X)}, signal=${String(Y)})${j?`: ${j}`:""}`))})}async call($,Z,Q={}){this.start();let W=this.process;if(!W||W.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let J=`req_${++this.requestCounter}`,X={type:"call",id:J,method:$,args:Z};return await new Promise((Y,j)=>{let V={resolve:(H)=>Y(H),reject:j};if((Q.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(J),this.shutdown().catch(()=>{}),j(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(J,V),W.send(X,(H)=>{if(!H)return;let B=this.clearPendingRequest(J);if(!B)return;B.reject(Error(`${this.processLabel} failed to send call "${$}": ${TB(H).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((Z)=>{let Q=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}Z()},300);$.once("exit",()=>{clearTimeout(Q),Z()});try{$.kill("SIGTERM")}catch{clearTimeout(Q),Z()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let Z=this.clearPendingRequest($.id);if(!Z)return;if($.ok){Z.resolve($.result);return}Z.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[Z,Q]of this.pending.entries()){if(this.pending.delete(Z),Q.timeout)clearTimeout(Q.timeout);Q.reject($)}}}function bO($){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 S6($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function yO(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function hO(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=NB($).resolve(`${yO()}/package.json`),W=R8(zZ(Q),"extensions","plugin-sandbox-bootstrap.js");return f3(W)?W:void 0}catch{return}}function kO(){let $=process.execPath?.trim();if(!$)return;let Z=R8(zZ(zZ($)),"extensions","plugin-sandbox-bootstrap.js");return f3(Z)?Z:void 0}function IO(){let $=zZ(SO(import.meta.url)),Z=NB(import.meta.url),Q=[R8($,"plugin-sandbox-bootstrap.js"),R8($,"extensions","plugin-sandbox-bootstrap.js"),R8($,"agents","plugin-sandbox-bootstrap.js"),hO(),kO()];for(let X of Q.filter((Y)=>typeof Y==="string"))if(f3(X))return{file:X};let W=R8($,"plugin-sandbox-bootstrap.ts"),J="jiti";try{J=Z.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(J)});`,`const jiti = createJiti(${JSON.stringify(W)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(W)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
|
|
200
|
-
`)}}var F3=
|
|
201
|
-
`).filter(Boolean);await Promise.allSettled(J.map((X)=>
|
|
202
|
-
`),W=[...$.appendMessages??[],...Z.appendMessages??[]];return{cancel:$.cancel===!0||Z.cancel===!0?!0:void 0,review:$.review===!0||Z.review===!0?!0:void 0,context:Q||void 0,overrideInput:Z.overrideInput!==void 0?Z.overrideInput:$.overrideInput,systemPrompt:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,appendMessages:W.length>0?W:void 0}}function
|
|
203
|
-
`).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse hook stdout JSON"}}}async function
|
|
204
|
-
`,Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??_q(kB(),"hooks.jsonl");kB(Y),Dq(Y,J,"utf8")};return{beforeRun:async(W)=>{let J=O3(W,"");Q({...T0(J,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(W)=>{let J=vB(W);Q({...T0(J,Z),hookName:"tool_call",iteration:J.iteration,tool_call:{id:J.call.id,name:J.call.name,input:J.call.input},preToolUse:{toolName:J.call.name,parameters:NZ(J.call.input)}});return},afterTool:async(W)=>{let J=cB(W);Q({...T0(J,Z),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:NZ(J.record.input),result:typeof J.record.output==="string"?J.record.output:JSON.stringify(J.record.output),success:!J.record.error,executionTimeMs:J.record.durationMs}});return},afterRun:async({snapshot:W,result:J})=>{let X=M$(W);if(J.status==="completed"){Q({...T0(X,Z),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||T3(J.error?.message)){Q({...T0(X,Z),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Q({...T0(X,Z),hookName:"agent_error",iteration:J.iterations,error:{name:J.error.name,message:J.error.message,stack:J.error.stack}})},onEvent:async(W)=>{if(W.type!=="message-added"||W.message.role!=="user")return;let J=O3({snapshot:W.snapshot},uB(W.message.content));Q({...T0(J,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function x6($){let Z=wq($.workspacePath);if(!Object.values(Z).some((G)=>G.length>0))return;let W=async(G,K)=>{let F=Z[K]??[];if(F.length===0)return;F2({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...T0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...T0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=Z.prompt_submit??[];if(K.length>0)F2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...T0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},X=async(G)=>{let K=Z.tool_call??[];if(K.length===0)return;return Cq({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...T0(G,$),hookName:"tool_call",iteration:G.iteration,tool_call:{id:G.call.id,name:G.call.name,input:G.call.input},preToolUse:{toolName:G.call.name,parameters:NZ(G.call.input)}}})},Y=async(G)=>{let K=Z.tool_result??[];if(K.length===0)return;F2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...T0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:NZ(G.record.input),result:typeof G.record.output==="string"?G.record.output:JSON.stringify(G.record.output),success:!G.record.error,executionTimeMs:G.record.durationMs}}})},j=async(G)=>{let K=Z.agent_end??[];if(K.length===0)return;F2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...T0(G,$),hookName:"agent_end",iteration:G.iteration,turn:G.turn,taskComplete:{taskMetadata:{}}}})},V=async(G)=>{let K=Z.agent_error??[];if(K.length===0)return;F2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...T0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},H=async(G)=>{if(T3(G.reason)){let F=Z.agent_abort??[];if(F.length>0)F2({commands:F,cwd:$.cwd,logger:$.logger,payload:{...T0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=Z.session_shutdown??[];if(K.length===0)return;F2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...T0(G,$),hookName:"session_shutdown",reason:G.reason}})},B={};if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0||(Z.prompt_submit?.length??0)>0){if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0)B.beforeRun=async(G)=>{let K=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await W(M$(G.snapshot),K);return};if((Z.prompt_submit?.length??0)>0)B.onEvent=async(G)=>{if(G.type!=="message-added"||G.message.role!=="user")return;await J(O3({snapshot:G.snapshot},uB(G.message.content)))}}if((Z.tool_call?.length??0)>0)B.beforeTool=async(G)=>{let K=await X(vB(G));return Pq(K)};if((Z.tool_result?.length??0)>0)B.afterTool=async(G)=>{await Y(cB(G));return};if((Z.agent_end?.length??0)>0)B.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await j({...M$(G),iteration:K.iterations,turn:{outputText:K.outputText,status:K.status}})};if((Z.agent_error?.length??0)>0||(Z.agent_abort?.length??0)>0||(Z.session_shutdown?.length??0)>0){let G=B.afterRun;B.afterRun=async(K)=>{await G?.(K);let{snapshot:F,result:A}=K;if(A.status==="aborted"||T3(A.error?.message)){await H({...M$(F),reason:A.error?.message});return}if(A.error)await V({...M$(F),iteration:A.iterations,error:A.error})}}return B}function S8($){return w8("core.hook_config_files",x6($))}function A2($,Z){let Q=$.map((W)=>W[Z]).filter((W)=>typeof W==="function");if(Q.length===0)return;return async(W)=>{let J;for(let X of Q){let Y=await X(W);if(!Y||typeof Y!=="object")continue;let j=Y;J={...J??{},...j,stop:J?.stop===!0||j.stop===!0?!0:j.stop,options:J?.options||j.options?{...J?.options??{},...j.options??{}}:void 0}}return J}}function f2($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:A2(Z,"beforeRun"),afterRun:A2(Z,"afterRun"),beforeModel:A2(Z,"beforeModel"),afterModel:A2(Z,"afterModel"),beforeTool:A2(Z,"beforeTool"),afterTool:A2(Z,"afterTool"),onEvent:A2(Z,"onEvent")}}var dB={};N(dB,{normalizeRuntimeCapabilities:()=>O0});function O0(...$){let Z,Q;for(let J of $){if(!J)continue;if(J.toolExecutors)Z={...Z??{},...J.toolExecutors};if(J.requestToolApproval)Q=J.requestToolApproval}let W=Z&&Object.keys(Z).length>0;if(!W&&!Q)return;return{...W?{toolExecutors:Z}:{},...Q?{requestToolApproval:Q}:{}}}var tB={};N(tB,{toProviderConfig:()=>l0,emptyStoredProviderSettings:()=>N$,StoredProviderSettingsSchema:()=>k8,StoredProviderSettingsEntrySchema:()=>sZ,ProviderSettingsSchemaTyped:()=>h8});import{z as E$}from"zod";var oB={};N(oB,{toProviderConfig:()=>l0,safeParseSettings:()=>aZ,safeCreateProviderConfig:()=>y3,parseSettings:()=>nZ,normalizeProviderId:()=>y8,isBuiltInProviderId:()=>S3,createProviderConfig:()=>b3,SapSettingsSchema:()=>pZ,ReasoningSettingsSchema:()=>cZ,ProviderSettingsSchema:()=>R$,ProviderProtocolSchema:()=>gZ,ProviderIdSchema:()=>u6,ProviderClientSchema:()=>mZ,OcaSettingsSchema:()=>rZ,ModelCatalogSettingsSchema:()=>iZ,GcpSettingsSchema:()=>dZ,BUILT_IN_PROVIDER_IDS:()=>P3,BUILT_IN_PROVIDER:()=>c6,AzureSettingsSchema:()=>lZ,AwsSettingsSchema:()=>uZ,AuthSettingsSchema:()=>vZ});import*as d0 from"@cline/llms";import{z as w}from"zod";var sB={};N(sB,{resolveProviderConfig:()=>v6,getProviderConfig:()=>xZ,getLiveModelsCatalog:()=>b8,clearPublicModelsCatalogCache:()=>eq,clearPrivateModelsCatalogCache:()=>C3,clearLiveModelsCatalogCache:()=>w3,OPENAI_COMPATIBLE_PROVIDERS:()=>m6,DEFAULT_MODELS_CATALOG_URL:()=>yZ});import*as s from"@cline/llms";function M3($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let W of[Q.id,Q.name,Q.model])if(typeof W==="string"&&W.trim())return W.trim()}return""}).filter((Z)=>Z.length>0)}function Sq($,Z){let Q=M3($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let W=$,J=M3(W.data??W.models);if(J.length>0)return J;if(W.models&&typeof W.models==="object"&&!Array.isArray(W.models)){let Y=Object.keys(W.models).filter((j)=>j.trim().length>0);if(Y.length>0)return Y}let X=W.providers?.[Z];if(X&&typeof X==="object"){let j=M3(X.models??X);if(j.length>0)return j}return[]}async function wZ($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return Sq(await Q.json(),Z)}function lB($){return $.replace(/\/+$/,"")}function CZ($,Z,Q){let W=Q?.trim();if(!W)return;let J=$?.trim();if(!J||!Z?.trim())return W;try{let X=new URL(W),Y=new URL(Z),j=new URL(J);if(X.origin!==Y.origin)return W;let V=lB(Y.pathname),H=lB(j.pathname);if(V&&X.pathname.startsWith(`${V}/`)){let B=X.pathname.slice(V.length);j.pathname=`${H}${B}`}else j.pathname=X.pathname;return j.search=X.search,j.hash=X.hash,j.toString()}catch{return W}}function bq($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function yq($){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 hq=Object.values(s.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:bq($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),rB=Object.fromEntries(hq.map(($)=>[$.id,$]));function kq($){return rB[$]}function Iq(){return Object.fromEntries(Object.entries(rB).filter(([,$])=>yq($)))}function iB($=[]){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 yZ="https://models.dev/api.json",xq=600000,nB=300000,gq=5000,bZ=new Map,g6=new Map,R3=new Map,PZ=new Map;async function mq(){return s.getGeneratedProviderModels()}async function vq($,Z={},Q={},W={},J={},X={}){if($==="litellm")return s.sortModelsByReleaseDate(W);let Y=await mq(),j=s.resolveProviderModelCatalogKeys($),V=Object.assign({},...j.map((K)=>Y[K]??{})),H=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),B=Object.keys(J).length>0;if(H&&B)return s.sortModelsByReleaseDate({...J,...X});if($==="openai-codex")return s.sortModelsByReleaseDate({...Z,...s.filterOpenAICodexModels(Q),...J,...X});if($==="cline-pass"&&Object.keys(Q).length>0)return s.sortModelsByReleaseDate({...Q,...X});let G=s.sortModelsByReleaseDate({...V,...Z,...Q,...W,...J});if($==="cline")return s.sortModelsByReleaseDate({...s.preferCanonicalModelIds(G,s.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...X});return s.sortModelsByReleaseDate({...G,...X})}function cq($,Z){let Q=s.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((W)=>Z[W]??{}))}function hZ($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function N3($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function uq($){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 dq($,Z){return`${$}:${hZ(Z.baseUrl)}:${uq(N3(Z)??"")}`}async function kZ($,Z,Q=gq){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await fetch($,{...Z,signal:W.signal})}finally{clearTimeout(J)}}function U2($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function IZ($,Z){let Q=["streaming","tools"];return U2(Q,"images",Boolean(Z.supportsImages)),U2(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),U2(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 lq($,Z){let Q=await kZ("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;if(j.includes("whisper")||j.includes("tts")||j.includes("embedding"))continue;let V=Y.supported_features??[];X[j]=IZ(j,{name:j,contextWindow:Y.context_length,maxInputTokens:Y.context_length,maxTokens:Y.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return X}function pB($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function pq($,Z){let Q=await kZ("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":Z}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;X[j]=IZ(j,{name:j,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return X}async function rq($,Z){let W=`${(hZ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await kZ(W,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!J.ok)throw Error(`Poolside model refresh failed: HTTP ${J.status}`);let Y=(await J.json())?.data??[],j={};for(let V of Y){let H=V.id?.trim();if(!H)continue;let B=V.supported_features??[],G=V.supported_sampling_parameters??[],K=V.input_modalities??[],F=["streaming"];U2(F,"tools",B.includes("tools")),U2(F,"reasoning",B.includes("reasoning")),U2(F,"temperature",G.includes("temperature")),U2(F,"images",K.includes("image"));let A={input:pB(V.pricing?.prompt),output:pB(V.pricing?.completion)};j[H]={id:H,name:V.name??H,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:A.input!==void 0||A.output!==void 0?A:void 0,status:"active"}}return j}function iq($){let Z=hZ($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function nq($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function aq($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,W=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${W}`}async function sq($,Z){let Q=iq($.baseUrl),W=[],J=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let X of nq(Q))for(let[Y,j]of J)try{let V=await kZ(X,{method:"GET",headers:{accept:"application/json",...j}});if(V.ok){let B=(await V.json())?.data??[],G={};for(let K of B){let F=K.model_name?.trim(),L=K.litellm_params?.model?.trim()||F;if(!L)continue;let f=K.model_info,D=IZ(L,{name:F??L,maxTokens:f?.max_output_tokens??f?.max_tokens,maxInputTokens:f?.max_input_tokens??f?.max_tokens,supportsImages:f?.supports_vision,supportsPromptCache:f?.supports_prompt_caching,supportsReasoning:f?.supports_reasoning});if(G[L]=D,F)G[F]={...D,id:F,name:F}}return G}W.push(`${new URL(X).pathname} (${Y}): ${await aq(V)}`)}catch(V){let H=V instanceof Error?V.message:String(V);W.push(`${new URL(X).pathname} (${Y}): ${H}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${W.join("; ")}`)}var aB={baseten:lq,hicap:pq,litellm:sq,poolside:rq},E3=new Map,SZ=new Map;function oq($,Z){return`${$}:${hZ(Z.baseUrl)}`}async function tq($,Z,Q){let W=s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=CZ(Q.baseUrl,W?.provider.baseUrl,W?.provider.modelsSourceUrl);if(!J)return{};let X=Z?.cacheTtlMs??nB,Y=oq($,Q),j=Date.now(),V=E3.get(Y);if(V&&V.expiresAt>j)return V.data;let H=SZ.get(Y);if(H)return H;let B=wZ(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,IZ(F,{name:F})]));return E3.set(Y,{data:K,expiresAt:j+X}),K}).finally(()=>{SZ.delete(Y)});return SZ.set(Y,B),B}function eq(){E3.clear(),SZ.clear()}async function $M($,Z){let Q=N3(Z);if(!Q)return{};let W=aB[$];if(!W)return{};return W(Z,Q)}function ZM($,Z,Q){if(!Q)return!1;if(!aB[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(N3(Q))}async function QM($,Z,Q){let W=Z?.cacheTtlMs??nB,J=dq($,Q),X=Date.now(),Y=R3.get(J);if(Y&&Y.expiresAt>X)return Y.data;let j=PZ.get(J);if(j)return j;let V=$M($,Q).then((H)=>{return R3.set(J,{data:H,expiresAt:X+W}),H}).finally(()=>{PZ.delete(J)});return PZ.set(J,V),V}async function WM($){return s.fetchLiveProviderModels($,globalThis.fetch)}async function b8($={}){let Z=$.url??yZ,Q=$.cacheTtlMs??xq,W=Date.now(),J=bZ.get(Z);if(J&&J.expiresAt>W)return J.data;let X=g6.get(Z);if(X)return X;let Y=WM(Z).then((j)=>{return bZ.set(Z,{data:j,expiresAt:W+Q}),j}).finally(()=>{g6.delete(Z)});return g6.set(Z,Y),Y}function w3($){if($){bZ.delete($),g6.delete($);return}bZ.clear(),g6.clear()}function C3(){R3.clear(),PZ.clear()}function JM($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:iB(Q.capabilities)}]))}var m6=JM(Iq());function xZ($){let Z=kq($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:iB(Z.capabilities)}}async function v6($,Z,Q){let W=xZ($);if(!W)return;try{let J=Z?.loadLatestOnInit?await b8(Z):void 0,X=J?cq($,J):{},Y=Q&&ZM($,Z,Q)?await QM($,Z,Q):{},V=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:W.modelId,baseUrl:W.baseUrl}:Q,H=V?await tq($,Z,V).catch(()=>({})):{},B=await vq($,W.knownModels,X,Y,H,Q?.knownModels);return{...W,knownModels:B}}catch(J){if(Z?.failOnError)throw J;if($==="litellm")return{...W,knownModels:{}};return W}}var c6=d0.BUILT_IN_PROVIDER,P3=d0.BUILT_IN_PROVIDER_IDS,S3=d0.isBuiltInProviderId,y8=d0.normalizeProviderId,u6=w.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),gZ=w.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),mZ=w.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),vZ=w.object({apiKey:w.string().optional(),accessToken:w.string().optional(),refreshToken:w.string().optional(),expiresAt:w.number().int().positive().optional(),accountId:w.string().optional()}),XM=w.enum(["none","low","medium","high","xhigh"]),cZ=w.object({enabled:w.boolean().optional(),effort:XM.optional(),budgetTokens:w.number().int().positive().optional()}),uZ=w.object({accessKey:w.string().optional(),secretKey:w.string().optional(),sessionToken:w.string().optional(),region:w.string().optional(),profile:w.string().optional(),authentication:w.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:w.boolean().optional(),useCrossRegionInference:w.boolean().optional(),useGlobalInference:w.boolean().optional(),endpoint:w.string().url().optional(),customModelBaseId:w.string().optional()}),dZ=w.object({projectId:w.string().optional(),region:w.string().optional()}),lZ=w.object({apiVersion:w.string().optional(),useIdentity:w.boolean().optional()}),pZ=w.object({clientId:w.string().optional(),clientSecret:w.string().optional(),tokenUrl:w.string().url().optional(),resourceGroup:w.string().optional(),deploymentId:w.string().optional(),useOrchestrationMode:w.boolean().optional(),api:w.enum(["orchestration","foundation-models"]).optional(),defaultSettings:w.record(w.string(),w.unknown()).optional()}),rZ=w.object({mode:w.enum(["internal","external"]).optional(),usePromptCache:w.boolean().optional()}),iZ=w.object({loadLatestOnInit:w.boolean().optional(),loadPrivateOnAuth:w.boolean().optional(),url:w.string().url().optional(),cacheTtlMs:w.number().int().positive().optional(),failOnError:w.boolean().optional()}),R$=w.object({provider:u6,apiKey:w.string().optional(),auth:vZ.optional(),model:w.string().optional(),protocol:gZ.optional(),client:mZ.optional(),routingProviderId:u6.optional(),maxTokens:w.number().int().positive().optional(),contextWindow:w.number().int().positive().optional(),baseUrl:w.string().url().optional(),headers:w.record(w.string(),w.string()).optional(),timeout:w.number().int().positive().optional(),reasoning:cZ.optional(),aws:uZ.optional(),gcp:dZ.optional(),azure:lZ.optional(),sap:pZ.optional(),oca:rZ.optional(),region:w.string().optional(),apiLine:w.enum(["china","international"]).optional(),capabilities:w.array(w.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:iZ.optional()});function nZ($){return R$.parse($)}function aZ($){return R$.safeParse($)}function YM($){return $.protocol==="openai-responses"||$.client==="openai"}function l0($,Z={}){let Q=$.provider,W=y8(Q),J=Z.includeKnownModels!==!1,X=$.reasoning?.effort||"none",Y=X==="none"?void 0:X,j=m6[W],V=Object.assign({},...d0.resolveProviderModelCatalogKeys(W).map((L)=>d0.getGeneratedModelsForProvider(L))),H=Object.keys(V)[0],B=J8(W,$),G=$.baseUrl??(W==="oca"?$.oca?.mode==="internal"?x9:g9:j?.baseUrl),K=$.routingProviderId??(YM($)&&W!==c6.OPENAI_NATIVE?c6.OPENAI_NATIVE:void 0),F=J?j?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,A={providerId:Q,clientType:$.client,routingProviderId:K,modelId:$.model??j?.modelId??H??"default",...J?{knownModels:F}:{},apiKey:B,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:Y,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??j?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(A).filter(([L,f])=>f!==void 0))}function b3($){let Z=nZ($);return l0(Z)}function y3($){let Z=aZ($);if(Z.success)return{success:!0,config:l0(Z.data)};return{success:!1,error:Z.error}}var h8=R$;var sZ=E$.object({settings:R$,updatedAt:E$.string().datetime(),tokenSource:E$.enum(["manual","oauth","migration"]).default("manual")}),k8=E$.object({version:E$.literal(1),lastUsedProvider:E$.string().min(1).optional(),providers:E$.record(E$.string(),sZ)});function N$(){return{version:1,providers:{}}}Y1();var QG={};N(QG,{InMemoryWorkspaceManager:()=>x8});import{upsertWorkspaceInfo as BM,WorkspaceManifestSchema as k3}from"@cline/shared";var ZG={};N(ZG,{normalizeWorkspacePath:()=>d1,generateWorkspaceInfoWithDiagnostics:()=>d6,generateWorkspaceInfo:()=>I8,buildWorkspaceMetadataWithInfo:()=>h3,buildWorkspaceMetadata:()=>l6});import{basename as jM,resolve as VM}from"node:path";import{performance as eB}from"node:perf_hooks";import{processWorkspaceInfo as $G}from"@cline/shared";import HM from"simple-git";function d1($){return VM($)}async function I8($){return(await d6($)).info}function oZ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function d6($){let Z=d1($),Q={rootPath:Z,hint:jM(Z)},W;try{let J=HM({baseDir:Z});if(!await J.checkIsRepo())return{info:Q,vcsType:"none"};try{let Y=await J.getRemotes(!0);if(Y.length>0){let j=Y.map((V)=>{let H=V.refs.fetch||V.refs.push;return`${V.name}: ${H}`});Q.associatedRemoteUrls=j}}catch(Y){W??=oZ(Y)}try{let Y=(await J.revparse(["HEAD"])).trim();if(Y.length>0)Q.latestGitCommitHash=Y}catch(Y){W??=oZ(Y)}try{let Y=(await J.branch()).current.trim();if(Y.length>0)Q.latestGitBranchName=Y}catch(Y){W??=oZ(Y)}return{info:Q,vcsType:"git",error:W}}catch(J){return{info:Q,vcsType:"none",error:oZ(J)}}}async function l6($){let Z=await I8($);return $G(Z)}async function h3($){let Z=eB.now(),Q=await d6($),W=eB.now()-Z,J=Q.info;return{workspaceInfo:J,workspaceMetadata:$G(J),durationMs:W,vcsType:Q.vcsType,initError:Q.error}}class x8{manifest;listeners=new Set;constructor($){this.manifest=k3.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await I8($);return this.manifest=BM(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=d1($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=k3.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let W=await this.addWorkspacePath(Z);return this.manifest=k3.parse({...this.manifest,currentWorkspacePath:W.rootPath}),this.emit({type:"workspace_switched",workspace:W}),W}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=d1($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}L0();import{createHash as GM}from"node:crypto";var WG=new Set,JG=new Set;function KM($){return GM("sha256").update($).digest("hex")}function FM($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function XG($){if(!$.telemetry)return;let Z=KM($.rootPath),Q=$.rootCount??1;if(!WG.has(Z))WG.add(Z),U9($.telemetry,{root_count:Q,vcs_types:FM($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!JG.has(Z)){JG.add(Z);let W=Error($.initError.message);W.name=$.initError.errorType||"Error",D9($.telemetry,W,{fallback_to_single_root:!0,workspace_count:Q})}}function fM($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function UM($,Z,Q){if(Z.length>0)for(let X of Z)Q?.log(X.message,{severity:"warn"});if($.length===0)return;let W=$.slice(0,3).map(fM).join("; "),J=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${W}${J}. Use --verbose for more details.`,{severity:"warn"});for(let X of $)Q?.log(`Plugin initialization failed (${X.phase}) for ${X.pluginPath}`,{severity:"warn",stack:X.stack,pluginPath:X.pluginPath,pluginName:X.pluginName})}function DM($,Z){let Q=typeof $.thinking==="boolean",W=typeof $.reasoningEffort==="string";if(!Q&&!W)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...W?{effort:$.reasoningEffort}:{}}}function YG($,Z){return AM($,Z)}function LM($){let Z=0;for(let Q of $??[]){if(Q.role!=="user")continue;if(("metadata"in Q&&Q.metadata&&typeof Q.metadata==="object"&&!Array.isArray(Q.metadata)?Q.metadata:void 0)?.kind==="recovery_notice")continue;Z+=1}return Z}function _M($){let Z={...$.storedHeaders??{},...$.configHeaders??{}},Q=$.accountId?.trim()||zM($.accessToken);if(Z.originator="cline",Z.session_id=$.sessionId,Z["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,Q)Z["ChatGPT-Account-Id"]=Q;return Z}function zM($){let Z=$?.trim();if(!Z)return;let Q=M0(Z),W=Q?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let J=Q?.organizations?.[0]?.id;if(typeof J==="string"&&J.length>0)return J;let X=Q?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;return}function TM($,Z,Q,W,J){let X=Q.getProviderSettings($.providerId),Y=W||X?.modelCatalog?{...W??{},...X?.modelCatalog??{}}:void 0,j=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,V={...X??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??X?.apiKey,baseUrl:$.baseUrl??X?.baseUrl,headers:$.providerId==="openai-codex"?_M({sessionId:Z,configHeaders:$.headers,storedHeaders:X?.headers,accountId:X?.auth?.accountId,accessToken:$.apiKey??X?.auth?.accessToken??X?.apiKey}):$.headers??X?.headers,reasoning:DM($,X?.reasoning),modelCatalog:Y},H={...l0(V),...j??{}};if($.knownModels)H.knownModels=$.knownModels;if($.extensionContext)H.extensionContext=$.extensionContext;let G=$.fetch??H.fetch??J;if(G)H.fetch=G;return H}async function jG($){let{input:Z,sessionId:Q,providerSettingsManager:W,defaultTelemetry:J,defaultCapabilities:X,defaultToolPolicies:Y,defaultFetch:j,onPluginEvent:V,onTeamEvent:H,createSubAgentLifecycleCallbacks:B,createSpawnTool:G,localRuntime:K,readSessionMetadata:F,writeSessionMetadata:A}=$,L=T$(Z.config),{modelCatalogDefaults:f,userInstructionService:D,configExtensions:U,onTeamRestored:T,...O}=K??{},z=Object.keys(O).length>0?O:void 0,{workspaceInfo:_,workspaceMetadata:E,durationMs:C,vcsType:y,initError:l}=await h3(L),o=z?.extensionContext,t={...o??{},workspace:{..._,...o?.workspace??{}},session:{...o?.session??{},sessionId:Q},logger:o?.logger??z?.logger,telemetry:o?.telemetry??z?.telemetry??J};XG({telemetry:t.telemetry,rootPath:_.rootPath,workspaceInfo:_,rootCount:1,vcsType:y,durationMs:C,initError:l,featureFlagEnabled:!0});let Q0=S8({cwd:Z.config.cwd,workspacePath:L,rootSessionId:Q,logger:z?.logger,workspaceInfo:_}),Q1=QB(z?.hooks)?void 0:P8({rootSessionId:Q,workspacePath:L,workspaceInfo:_}),l$=f2([z?.hooks,Q1]),r;if(YG(U,"plugins"))try{r=await N8({pluginPaths:z?.pluginPaths,workspacePath:L,cwd:Z.config.cwd,onEvent:V,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:_,session:t.session,client:t.client,user:t.user,logger:t.logger,telemetry:t.telemetry,automation:t.automation}),UM(r.failures,r.warnings,z?.logger)}catch(s2){let $W=s2 instanceof Error?s2.message:String(s2);z?.logger?.log?.(`plugin loading failed; continuing without plugins (${$W})`)}let P=tW(Q0?[Q0]:void 0,tW(z?.extensions,XZ(r?.extensions))),B0=YG(U,"plugins")?u1(r?.pluginPaths??[]):void 0,G0={...Z.config,...z??{},sessionId:Q,hooks:l$,extensions:P,extensionContext:t,telemetry:t.telemetry},C0=TM(G0,Q,W,f,j),n2=f2([G0.hooks,G0.checkpoint?.enabled===!0?hB({cwd:G0.cwd,sessionId:Q,logger:G0.logger,createCheckpoint:G0.checkpoint?.createCheckpoint,initialRunCount:LM(Z.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),M1={...G0,providerConfig:C0,workspaceMetadata:E,hooks:n2},G1=Z.toolPolicies??G0.toolPolicies??Y,P4=O0(X,Z.capabilities),a2=P4?.requestToolApproval,K9=P4?.toolExecutors,R1=B?.(M1),F9=new x8({currentWorkspacePath:_.rootPath,workspaces:{[_.rootPath]:_}});return{effectiveInput:Z,config:M1,providerConfig:C0,workspaceMetadata:E,workspaceInfo:_,extensions:P,hooks:n2,toolPolicies:G1,requestToolApproval:a2,pluginSandboxShutdown:r?.shutdown,runtimeBuilderInput:{config:M1,hooks:n2,extensions:P,onTeamEvent:H,createSpawnTool:G,onTeamRestored:T,onSubAgentEvent:R1?.onSubAgentEvent,onSubAgentStart:R1?.onSubAgentStart,onSubAgentEnd:R1?.onSubAgentEnd,userInstructionService:D,pluginSkillDirectories:B0,configExtensions:U,toolExecutors:K9,toolPolicies:G1,workspaceManager:F9,logger:M1.logger,telemetry:M1.telemetry,requestToolApproval:a2}}}import{existsSync as eZ,mkdirSync as OM,readdirSync as qM,rmdirSync as MM,rmSync as RM,unlinkSync as EM}from"node:fs";import{dirname as VG,join as tZ}from"node:path";function J0(){return new Date().toISOString()}function p6($){if(!$||!eZ($))return;try{EM($)}catch{}}function NM($){let Z=_8($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=O6($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class I3{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return tZ(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!eZ(Z))OM(Z,{recursive:!0});return Z}sessionMessagesPath($){return tZ(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return tZ(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!eZ(Z)){Z=VG(Z);continue}try{if(qM(Z).length>0)break;MM(Z)}catch{break}Z=VG(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!eZ($))return;try{RM($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:W,fileStem:J}=NM($),X=this.sessionArtifactsDir(W);return{messagesPath:tZ(X,`${J}.messages.json`)}}}import{resolveDocumentsExtensionPath as wM}from"@cline/shared/storage";L0();function HG($,Z,Q,W,J){if(Q)_9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});else L9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});CM($.telemetry,{workspacePath:W})}function CM($,Z){let Q=wM("Hooks"),W=q$(Z.workspacePath),J=new Map;for(let X of W){let Y=X.hookEventName??"unknown",j=J.get(Y)??{global:0,workspace:0};if(X.path===Q||X.path.startsWith(`${Q}/`))j.global+=1;else j.workspace+=1;J.set(Y,j)}for(let[X,Y]of J.entries())w9($,X,Y.global,Y.workspace)}function BG($,Z){for(let Q of Z.mentions)E9($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)M9($,"file",Q.length);for(let Q of Z.ignoredMentions)R9($,"file","not_found",Q)}var jD={};N(jD,{ProviderSettingsManager:()=>O1});import{chmodSync as HD,existsSync as lY,mkdirSync as $g,readFileSync as Zg,writeFileSync as Qg}from"node:fs";import{basename as BD,dirname as pY}from"node:path";import{resolveProviderSettingsPath as Wg}from"@cline/shared/storage";var M={};N(M,{writeHubDiscovery:()=>wQ,writeGlobalSettings:()=>x1,withHubStartupLock:()=>CQ,verifyHubConnection:()=>A1,updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>l8,updateMcpServerOAuthStateAsync:()=>H5,updateMcpServerOAuthState:()=>T2,updateLocalProvider:()=>c7,uninstallPlugin:()=>Q9,uninstallMarketplaceSkill:()=>O7,uninstallMarketplacePlugin:()=>q7,uninstallMarketplaceMcpServerFromSettings:()=>z7,uninstallMarketplaceEntry:()=>HY,truncateNotificationBody:()=>r5,truncateCommandOutput:()=>o$,toggleDisabledTool:()=>WZ,toTeamProgressLifecycleEvent:()=>X4,toProviderConfig:()=>l0,toHubStatusUrl:()=>NJ,toHubHealthUrl:()=>PQ,toHookConfigFileName:()=>I6,syncPluginMcpServersToSettings:()=>$9,summarizeUsageFromMessages:()=>T8,stopLocalHubServerGracefully:()=>mJ,startLocalOAuthServer:()=>W1,startHubWebSocketServer:()=>u2,startHubServer:()=>kf,startClineDeviceAuth:()=>VW,splitCoreSessionConfig:()=>U5,spawnDetachedHubServerWithRetry:()=>o8,spawnDetachedHubServer:()=>yJ,setTelemetryOptOutGlobally:()=>aV,setMcpServerDisabled:()=>_2,setDisabledTools:()=>kW,setDisabledPlugin:()=>ZH,setAutoUpdateEnabledGlobally:()=>oV,sendHubCommand:()=>bA,saveProviderOAuthCredentials:()=>n$,saveLocalProviderSettings:()=>qY,saveLocalProviderOAuthCredentials:()=>NY,sanitizeSessionToken:()=>V2,safeParseSettings:()=>aZ,safeCreateProviderConfig:()=>y3,runSubprocessEvent:()=>K4,runHook:()=>A4,reviveTeamStateDates:()=>KZ,restartLocalHubIfIdleAfterStartupTimeout:()=>kQ,resolveWorkspaceHubOwnerContext:()=>BF,resolveWorkflowsConfigSearchPaths:()=>Q5,resolveSkillsConfigSearchPaths:()=>$5,resolveSharedHubOwnerContext:()=>y0,resolveSessionBackend:()=>XX,resolveRulesConfigSearchPaths:()=>Z5,resolveProviderConfig:()=>v6,resolveProviderApiKeyFromSettings:()=>AW,resolveProductionHubOwnerContext:()=>s0,resolvePluginSkillDirectoriesFromPaths:()=>u1,resolvePluginConfigSearchPaths:()=>b6,resolveMcpServerRegistrations:()=>p0,resolveMarketplaceMcpServerName:()=>J9,resolveLocalClineAuthToken:()=>CY,resolveHubUrl:()=>fX,resolveHubOwnerContext:()=>n1,resolveHubEndpointOptions:()=>a0,resolveHubBuildId:()=>NQ,resolveHooksConfigSearchPaths:()=>h6,resolveDisabledToolNames:()=>K1,resolveDisabledPluginPaths:()=>A6,resolveDefaultMcpSettingsPath:()=>$0,resolveDefaultHubPort:()=>s8,resolveDefaultHubPathname:()=>bJ,resolveDefaultHubHost:()=>SJ,resolveCoreSelectedToolIds:()=>AZ,resolveCoreDistinctId:()=>h0,resolveCompatibleLocalHubUrl:()=>P5,resolveClineDir:()=>YF,resolveClineDataDir:()=>C2,resolveAndLoadAgentPlugins:()=>N8,resolveAgentPluginPaths:()=>c1,requestHubShutdown:()=>C5,requestDesktopToolApproval:()=>iX,removePluginMcpServersFromSettings:()=>Z9,rememberRecoverableLocalHubUrl:()=>k$,registerRemoteConfigSessionBlobUpload:()=>G7,registerMcpServersFromSettingsFile:()=>O2,registerDisposable:()=>sx,refreshProviderModelsFromSource:()=>MY,refreshOpenAICodexToken:()=>I9,refreshOcaToken:()=>v9,refreshClineToken:()=>h9,readSessionCheckpointHistory:()=>k2,readRemoteConfigSessionBlobUploadMetadata:()=>gX,readHubDiscovery:()=>f0,readGlobalSettings:()=>R0,readBearerToken:()=>J7,probeHubServer:()=>a1,probeHubConnection:()=>SA,prewarmFileIndex:()=>s9,prewarmDetachedHubServer:()=>bQ,prepareRemoteConfigCoreIntegration:()=>vX,parseWorkflowConfigFromMarkdown:()=>e6,parseUserCommandEnvelope:()=>ax,parseSkillConfigFromMarkdown:()=>o6,parseSettings:()=>nZ,parseRuleConfigFromMarkdown:()=>t6,parsePluginSource:()=>b7,parseMcpInstallArgs:()=>e5,parseHookEventPayload:()=>F4,parseConfiguredAgentConfig:()=>h5,normalizeWorkspacePath:()=>d1,normalizeUserInput:()=>nx,normalizeSdkError:()=>ix,normalizeRuntimeCapabilities:()=>O0,normalizeProviderId:()=>y8,normalizeOAuthProvider:()=>RY,normalizeHubWebSocketUrl:()=>I$,noopBasicLogger:()=>rx,migrateLegacyProviderSettings:()=>H9,mergeRulesForSystemPrompt:()=>u8,mergeAgentHooks:()=>f2,marketplaceEntryKey:()=>VY,makeTeamTaskSubSessionId:()=>T6,makeSubSessionId:()=>L8,loginOpenAICodex:()=>I4,loginOcaOAuth:()=>m4,loginLocalProvider:()=>EY,loginClineOAuth:()=>h4,loginAndSaveProviderOAuthCredentials:()=>c4,loginAndSaveLocalProviderOAuthCredentials:()=>wY,loadOpenTelemetryAdapter:()=>qx,loadMcpSettingsFile:()=>L2,loadLlmsConfigFromFile:()=>cY,loadConfiguredAgentConfigs:()=>Q4,loadAgentPluginsFromPathsWithDiagnostics:()=>G2,loadAgentPluginsFromPaths:()=>_Z,loadAgentPluginFromPath:()=>P6,listSessionHistoryFromBackend:()=>qJ,listPluginToolsWithDiagnostics:()=>zQ,listPluginTools:()=>K5,listMcpServerOAuthStatuses:()=>B5,listLocalProviders:()=>TY,listHookConfigFiles:()=>q$,isToolDisabledGlobally:()=>tV,isTelemetryOptedOutGlobally:()=>QZ,isSessionNotFoundError:()=>i1,isRuleEnabled:()=>HQ,isPluginDisabledGlobally:()=>$H,isOfficialPluginSlug:()=>S7,isOAuthProvider:()=>i$,isMarketplaceSkillInstalled:()=>T7,isLocalHubOrigin:()=>xX,isLocalHubHostName:()=>X7,isHubReconnectableTransportError:()=>xJ,isHubCommandTimeoutError:()=>hQ,isDiscoveryFilePresent:()=>VF,isClineOrgIndividualInferenceSubscriptionMessage:()=>yx,isClineOrgIndividualInferenceSubscriptionError:()=>bx,isClineNotSubscribedMessage:()=>Sx,isClineNotSubscribedError:()=>Px,isClineAccountActionRequest:()=>$Q,isBuiltInProviderId:()=>S3,isAutoUpdateEnabledGlobally:()=>sV,installPlugin:()=>fY,installMcpServer:()=>nX,identifyAccount:()=>P1,hasMcpSettingsFile:()=>p1,getValidOpenAICodexCredentials:()=>x4,getValidOcaCredentials:()=>v4,getValidClineCredentials:()=>k4,getProviderOAuthCredentialsFromSettings:()=>u4,getProviderConfigFields:()=>PY,getProviderConfig:()=>xZ,getProviderAuthStorageId:()=>FW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>J8,getMcpServerOAuthState:()=>z2,getMarketplaceSkillCandidates:()=>X9,getLocalProviderModels:()=>OY,getLiveModelsCatalog:()=>b8,getGlobalMarketplaceSkillPaths:()=>Y9,getFileIndex:()=>k1,getCurrentContextSize:()=>Q3,getCoreHeadlessToolNames:()=>z6,getCoreDefaultEnabledToolIds:()=>FZ,getCoreBuiltinToolCatalog:()=>Y2,getCoreAcpToolNames:()=>fZ,getClinePassSubscriptionUrl:()=>Cx,getClineOrgIndividualInferenceSubscriptionMessage:()=>Nx,getClineNotSubscribedMessage:()=>wx,getClineDefaultSystemPrompt:()=>hx,generateWorkspaceInfoWithDiagnostics:()=>d6,generateWorkspaceInfo:()=>I8,formatRulesForSystemPrompt:()=>c8,formatProviderOAuthApiKey:()=>fW,formatDisplayUserInput:()=>px,findInstalledGlobalMarketplaceSkillName:()=>j9,findCheckpointForRun:()=>B4,filterExtensionToolRegistrations:()=>XZ,filterDisabledTools:()=>g1,filterDisabledPluginPaths:()=>JZ,fetchClineRecommendedModels:()=>mY,executeClineAccountAction:()=>ZQ,ensureHubWebSocketServer:()=>Y7,ensureHubServer:()=>If,ensureDetachedHubServer:()=>UF,ensureCustomProvidersLoaded:()=>g7,ensureCompatibleLocalHubUrl:()=>b2,enrichPromptWithMentions:()=>H8,emptyWorkspaceManifest:()=>ux,emptyStoredProviderSettings:()=>N$,discoverPluginModulePaths:()=>y6,disablePluginMcpServersInSettings:()=>tX,deriveSubsessionStatus:()=>q6,deleteLocalProvider:()=>u7,defineLlmsConfig:()=>vY,createWorkflowsConfigDefinition:()=>X5,createUserInstructionConfigService:()=>w$,createToolPoliciesWithPreset:()=>t9,createTool:()=>cx,createTeamName:()=>A7,createSubprocessHooks:()=>iQ,createSpawnAgentTool:()=>_$,createSkillsConfigDefinition:()=>W5,createShellTool:()=>Y6,createShellExecutor:()=>t$,createSessionHost:()=>V4,createRuntimeHost:()=>V4,createRulesConfigDefinition:()=>J5,createRemoteConfigSessionMessagesArtifactUploader:()=>mX,createProviderConfig:()=>b3,createOpenTelemetryTelemetryService:()=>p5,createOAuthClientCallbacks:()=>g8,createMcpTools:()=>n8,createLocalHubScheduleRuntimeHandlers:()=>j7,createLlmsSdk:()=>dY,createInitialAccumulatedUsage:()=>D0,createInMemoryHubOwnerContext:()=>jF,createHubServerUrl:()=>V1,createHubAuthToken:()=>EQ,createHookConfigFileHooks:()=>x6,createHookConfigFileExtension:()=>S8,createHookAuditHooks:()=>P8,createDisabledMcpToolPolicy:()=>G5,createDisabledMcpToolPolicies:()=>_Q,createDelegatedAgentConfigProvider:()=>D$,createDelegatedAgent:()=>L$,createDefaultToolsWithPreset:()=>e9,createDefaultTools:()=>F$,createDefaultShellExecutor:()=>K6,createDefaultMcpServerClientFactory:()=>r8,createDefaultExecutors:()=>B8,createCoreSettingsService:()=>M2,createCoreSessionSnapshot:()=>f1,createContributionRegistry:()=>vx,createContextCompactionPrepareTurn:()=>a4,createConfiguredTelemetryService:()=>$$,createConfiguredTelemetryHandle:()=>_4,createConfiguredAgentTools:()=>W4,createClineTelemetryServiceMetadata:()=>mx,createClineTelemetryServiceConfig:()=>gx,createCheckpointComparePlan:()=>dQ,createBuiltinTools:()=>j2,createAgentTeamsTools:()=>X2,createAgentRuntime:()=>ex,createAgentHooksExtension:()=>w8,connectToHub:()=>oQ,completeClineDeviceAuth:()=>HW,compareCheckpointToWorkspace:()=>c5,collectPluginMcpOAuthCandidates:()=>y7,clearPrivateModelsCatalogCache:()=>C3,clearLiveModelsCatalogCache:()=>w3,clearHubDiscovery:()=>b0,captureWorkspacePathResolved:()=>Bj,captureWorkspaceInitialized:()=>U9,captureWorkspaceInitError:()=>D9,captureToolUsage:()=>t2,captureTokenUsage:()=>z9,captureTaskRestarted:()=>_9,captureTaskCreated:()=>L9,captureTaskCompleted:()=>S4,captureSubagentExecution:()=>y4,captureSkillUsed:()=>O9,captureSdkError:()=>xx,captureProviderConfigured:()=>Gj,captureProviderApiError:()=>b4,captureModeSwitch:()=>T9,captureMentionUsed:()=>M9,captureMentionSearchResults:()=>E9,captureMentionFailed:()=>R9,captureHookDiscovery:()=>w9,captureExtensionActivated:()=>Hj,captureDiffEditFailure:()=>q9,captureConversationTurnEvent:()=>o2,captureCompactionSkipped:()=>P9,captureCompactionExecuted:()=>C9,captureAuthSucceeded:()=>w1,captureAuthStarted:()=>N1,captureAuthLoggedOut:()=>X$,captureAuthFailed:()=>C1,captureAgentUnexpectedReasoningTokens:()=>Vj,captureAgentTeamCreated:()=>N9,captureAgentCreated:()=>Y$,buildWorkspaceMetadata:()=>l6,buildTeamProgressSummary:()=>J4,buildSdkErrorProperties:()=>kx,buildRemoteConfigSessionBlobUploadMetadata:()=>H7,buildMcpInstallTransport:()=>f7,buildDelegatedAgentConfig:()=>W2,buildConfiguredAgentToolName:()=>k5,buildConfiguredAgentToolDescriptors:()=>I5,buildCheckpointWorkspaceDiff:()=>lQ,bootstrapAgentTeams:()=>D8,authorizeMcpServerOAuth:()=>fQ,addLocalProvider:()=>zY,accumulateUsageTotals:()=>A0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>s6,UnifiedConfigFileWatcher:()=>D2,ToolPresets:()=>u0,TelemetryService:()=>D4,TelemetryLoggerSink:()=>l5,TEAM_TOOL_NAMES:()=>U8,SubprocessSandbox:()=>M8,StructuredCommandInputSchema:()=>a$,StoredProviderSettingsSchema:()=>k8,StoredProviderSettingsEntrySchema:()=>sZ,SqliteTeamStore:()=>d2,SqliteSessionStore:()=>D1,SessionVersioningService:()=>c$,SessionVersioningError:()=>I0,SessionSource:()=>_0,SessionNotFoundError:()=>r1,SapSettingsSchema:()=>pZ,SKILLS_CONFIG_DIRECTORY_NAME:()=>a6,SESSION_STATUSES:()=>M6,SESSION_NOT_FOUND_ERROR_CODE:()=>R2,SDK_ERROR_TELEMETRY_EVENT:()=>ox,RpcClineAccountService:()=>i6,RemoteRuntimeHost:()=>$4,ReasoningSettingsSchema:()=>cZ,RULES_CONFIG_DIRECTORY_NAME:()=>VQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>B7,ProviderSettingsSchema:()=>R$,ProviderSettingsManager:()=>O1,ProviderProtocolSchema:()=>gZ,ProviderIdSchema:()=>u6,ProviderClientSchema:()=>mZ,OpenTelemetryProvider:()=>L4,OcaSettingsSchema:()=>rZ,OPENAI_COMPATIBLE_PROVIDERS:()=>m6,NodeHubClient:()=>H1,NoOpFeatureFlagsProvider:()=>x2,NativeHubTransportAdapter:()=>o5,ModelCatalogSettingsSchema:()=>iZ,McpSettingsUpdateSkippedError:()=>d8,McpSettingsMutatorPurityError:()=>C$,McpSettingsLockTimeoutError:()=>P$,MAX_COMMAND_OUTPUT_CHARS:()=>y1,LocalRuntimeHost:()=>z1,Llms:()=>Mx,InMemoryWorkspaceManager:()=>x8,InMemoryMcpManager:()=>q2,HubUIClient:()=>LX,HubTransportError:()=>E0,HubSessionClient:()=>DX,HubServerTransport:()=>z4,HubScheduleService:()=>U4,HubScheduleCommandService:()=>f4,HubRuntimeHost:()=>s1,HubCommandError:()=>t8,HookEventPayloadSchema:()=>rQ,HookEventNameSchema:()=>pQ,HookConfigFileName:()=>C8,HOOK_CONFIG_FILE_EVENT_MAP:()=>k6,HOOKS_CONFIG_DIRECTORY_NAME:()=>RZ,GlobalSettingsSchema:()=>F6,GcpSettingsSchema:()=>dZ,FileTeamPersistenceStore:()=>p7,FeatureFlagsService:()=>I2,FeatureFlagDefaultValue:()=>lx,FEATURE_FLAGS:()=>dx,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>o7,DefaultToolNames:()=>U0,DefaultRuntimeBuilder:()=>q4,DefaultLlmsSdk:()=>B9,DEFAULT_MODELS_CATALOG_URL:()=>yZ,DEFAULT_HUB_PORT:()=>CJ,DEFAULT_HUB_PATHNAME:()=>PJ,DEFAULT_HUB_HOST:()=>wJ,CoreSettingsService:()=>S$,CoreSessionService:()=>_1,ContributionRegistry:()=>Ix,ClineOrgIndividualInferenceSubscriptionError:()=>Ex,ClineNotSubscribedError:()=>Rx,ClineCore:()=>u5,ClineAccountService:()=>r6,ChatViewStateSchema:()=>IY,ChatSummarySchema:()=>s7,ChatSessionStatusSchema:()=>i7,ChatSessionConfigSchema:()=>r7,ChatMessageSchema:()=>a7,ChatMessageRoleSchema:()=>n7,CORE_TELEMETRY_EVENTS:()=>g,CORE_BUILD_VERSION:()=>xY,BrowserWebSocketHubAdapter:()=>s5,BUILT_IN_PROVIDER_IDS:()=>P3,BUILT_IN_PROVIDER:()=>c6,AzureSettingsSchema:()=>lZ,AwsSettingsSchema:()=>uZ,AuthSettingsSchema:()=>vZ,AgentTeamsRuntime:()=>h2,AgentTeam:()=>j4,Agent:()=>tx,ALL_DEFAULT_TOOL_NAMES:()=>H$});R(M,F00);import*as Mx from"@cline/llms";import{ClineNotSubscribedError as Rx,ClineOrgIndividualInferenceSubscriptionError as Ex,getClineOrgIndividualInferenceSubscriptionMessage as Nx,getClineNotSubscribedMessage as wx,getClinePassSubscriptionUrl as Cx,isClineNotSubscribedError as Px,isClineNotSubscribedMessage as Sx,isClineOrgIndividualInferenceSubscriptionError as bx,isClineOrgIndividualInferenceSubscriptionMessage as yx}from"@cline/llms";import{buildClineSystemPrompt as hx,buildSdkErrorProperties as kx,ContributionRegistry as Ix,captureSdkError as xx,createClineTelemetryServiceConfig as gx,createClineTelemetryServiceMetadata as mx,createContributionRegistry as vx,createTool as cx,emptyWorkspaceManifest as ux,FEATURE_FLAGS as dx,FeatureFlagDefaultValue as lx,formatDisplayUserInput as px,noopBasicLogger as rx,normalizeSdkError as ix,normalizeUserInput as nx,parseUserCommandEnvelope as ax,registerDisposable as sx,SDK_ERROR_TELEMETRY_EVENT as ox}from"@cline/shared";import"@cline/shared/storage";var KG={};N(KG,{isClineAccountActionRequest:()=>$Q,executeClineAccountAction:()=>ZQ,RpcClineAccountService:()=>i6,ClineAccountService:()=>r6});function PM($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function GG($,Z,Q){let W=PM(Q);if(W)return W;let J=Z.trim();if(J){let X=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${X}`}return`Cline account request failed with status ${$}`}class r6{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let Z=$.apiBaseUrl.trim();if(!Z)throw Error("apiBaseUrl is required");this.apiBaseUrl=Z,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let Z=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(Z)}/balance`)}async fetchUsageTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/usages`)).items??[]}async fetchPaymentTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let Z=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)Z.searchParams.set("type",$.type);return this.request(`${Z.pathname}${Z.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}`)}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/balance`)}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(Z,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let Z=$?.trim();if(Z)return Z;let W=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(W)return W;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let Y=(await this.fetchUserOrganizations()).find((j)=>j.organizationId===$)?.memberId;if(!Y?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return Y}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let W=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,X=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let Y=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...W??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:J.signal});if(Y.status===204||Z?.expectNoContent){if(!Y.ok)throw Error(`Cline account request failed with status ${Y.status}`);return}let j=await Y.text(),V;if(j.trim())try{V=JSON.parse(j)}catch{if(!Y.ok)throw Error(GG(Y.status,j,void 0));throw Error("Cline account response was not valid JSON")}if(!Y.ok)throw Error(GG(Y.status,j,V));if(typeof V==="object"&&V!==null){let H=V;if(typeof H.success==="boolean"){if(!H.success)throw Error(H.error||"Cline account request failed");return H.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(X)}}}function $Q($){return $.action==="clineAccount"}async function ZQ($,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 i6{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:Z})}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:Z,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var FG={};N(FG,{createOAuthClientCallbacks:()=>g8});function g8($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((W)=>{$.onOpenUrlError?.({url:Z,error:W})})}catch(W){$.onOpenUrlError?.({url:Z,error:W})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var OA={};N(OA,{ClineCore:()=>u5});function AG($){if($===!0)return{};if(!$)return;return $}function fG($){if($==="user")return"global";return $}class x3{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 UG($){let{host:Z}=$;return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||_0.CLI,interactive:!1,config:{providerId:y8(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:yM(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Q.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Q,W){let J=await Z.runTurn({sessionId:Q,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((X)=>X.content),delivery:W.delivery});if(!J)throw Error("ClineCore automation runtime returned no result");return{result:bM(J)}},async abortSession(Q){return await Z.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}function QQ($){let Z=SM($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),W=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),J=$.context?.logger??$.logger,X=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!W&&!J&&!X)return $.context;return{...$.context??{},...Q?{client:Q}:{},...W?{user:W}:{},...J?{logger:J}:{},...X?{telemetry:X}:{},...Z?{automation:Z}:{}}}function SM($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function bM($){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 yM($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var zK={};N(zK,{createCoreSettingsService:()=>M2,CoreSettingsService:()=>S$});import{existsSync as A5,readFileSync as LE}from"node:fs";import{basename as $J,dirname as FK,extname as _E,isAbsolute as UK,join as zE,relative as DK,resolve as AK}from"node:path";var SG={};N(SG,{resolveWorkflowsConfigSearchPaths:()=>Q5,resolveSkillsConfigSearchPaths:()=>$5,resolveRulesConfigSearchPaths:()=>Z5,parseWorkflowConfigFromMarkdown:()=>e6,parseSkillConfigFromMarkdown:()=>o6,parseRuleConfigFromMarkdown:()=>t6,createWorkflowsConfigDefinition:()=>X5,createUserInstructionConfigService:()=>w$,createSkillsConfigDefinition:()=>W5,createRulesConfigDefinition:()=>J5,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>s6,UnifiedConfigFileWatcher:()=>D2,SKILLS_CONFIG_DIRECTORY_NAME:()=>a6,RULES_CONFIG_DIRECTORY_NAME:()=>VQ});import{createHash as hM}from"node:crypto";import{watch as kM}from"node:fs";import{readdir as IM,readFile as xM}from"node:fs/promises";import{join as gM}from"node:path";function mM($){return hM("sha1").update($).digest("hex")}function _G($){return Boolean($&&typeof $==="object"&&"code"in $)}function DG($){return _G($)&&$.code==="ENOENT"}function LG($){return _G($)&&($.code==="EACCES"||$.code==="EPERM")}class D2{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,Z){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=Z?.debounceMs??75,this.emitParseErrors=Z?.emitParseErrors??!1;for(let Q of $){if(this.definitionsByType.has(Q.type))throw Error(`Duplicate unified config definition type '${Q.type}'.`);this.definitionsByType.set(Q.type,Q),this.recordsByType.set(Q.type,new Map),this.discoveredDirectoriesByType.set(Q.type,new Set);for(let W of Q.directories){let J=this.baseTypesByDirectory.get(W);if(J)J.add(Q.type);else this.baseTypesByDirectory.set(W,new Set([Q.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let Z=this.definitionsByType.get($);if(!Z)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(Z)})}getSnapshot($){let Z=this.recordsByType.get($);return new Map([...Z?.entries()??[]].map(([Q,W])=>[Q,{...W}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([W,J])=>[W,{...J}])));return $}emit($){for(let Z of this.listeners)Z($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[Z,Q]of this.watchersByDirectory.entries()){if($.has(Z))continue;Q.close(),this.watchersByDirectory.delete(Z)}this.watchedTypesByDirectory=$;for(let Z of $.keys()){if(this.watchersByDirectory.has(Z))continue;try{let Q=kM(Z,()=>{let W=this.watchedTypesByDirectory.get(Z);if(!W)return;for(let J of W)this.pendingTypes.add(J);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(W)=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let X of J)this.emit({kind:"error",type:X,error:W,filePath:Z})})}catch(Q){if(!DG(Q)&&!LG(Q)){let W=$.get(Z);if(!W)continue;for(let J of W)this.emit({kind:"error",type:J,error:Q,filePath:Z})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let Z of $){let Q=this.definitionsByType.get(Z);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:Z,discoveredDirectories:Q}=await this.loadDefinition($),W=this.recordsByType.get($.type)??new Map;for(let[J,X]of W.entries()){if(Z.has(J))continue;this.emit({kind:"remove",type:$.type,id:J,filePath:X.filePath})}for(let[J,X]of Z.entries()){let Y=W.get(J);if(Y&&Y.filePath===X.filePath&&Y.fingerprint===X.fingerprint)continue;this.emit({kind:"upsert",record:{type:X.type,id:J,item:X.item,filePath:X.filePath}})}if(this.recordsByType.set($.type,Z),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let Z=new Map,Q=new Set;for(let W of $.directories){Q.add(W);let J=$.discoverFiles?await $.discoverFiles(W):await this.readDirectoryFileCandidates(W);for(let X of J){let{fileName:Y,filePath:j}=X;if(Q.add(X.directoryPath),$.includeFile&&!$.includeFile(Y,j))continue;try{let V=await xM(j,"utf8"),H={type:$.type,directoryPath:X.directoryPath,fileName:Y,filePath:j,content:V},B=$.parseFile(H),G=$.resolveId(B,H).trim();if(!G)continue;Z.set(G,{type:$.type,id:G,item:B,filePath:j,fingerprint:mM(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:j})}}}return{records:Z,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[Z,Q]of this.baseTypesByDirectory.entries())$.set(Z,new Set(Q));for(let[Z,Q]of this.discoveredDirectoriesByType.entries())for(let W of Q){let J=$.get(W);if(J)J.add(Z);else $.set(W,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await IM($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:gM($,Q.name)})).sort((Q,W)=>Q.fileName.localeCompare(W.fileName))}catch(Z){if(DG(Z)||LG(Z))return[];throw Z}}}import{readdir as m3,readFile as vM,stat as g3}from"node:fs/promises";import{basename as l1,dirname as cM,extname as JQ,join as S0,resolve as n6}from"node:path";import{AGENTS_RULES_FILE_NAME as zG,RULES_CONFIG_DIRECTORY_NAME as VQ,resolveGlobalAgentsRulesPath as uM,resolveRulesConfigSearchPaths as dM,resolveSkillsConfigSearchPaths as lM,resolveWorkflowsConfigSearchPaths as pM,SKILLS_CONFIG_DIRECTORY_NAME as a6,WORKFLOWS_CONFIG_DIRECTORY_NAME as s6}from"@cline/shared/storage";import rM from"yaml";var WQ="SKILL.md",iM="managed.json",nM=new Set([".md",".markdown",".txt"]);function v3($){return $.trim().toLowerCase()}function m8($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function XQ($){return nM.has(JQ($).toLowerCase())}function TG($){let Z=[],Q=new Set;for(let W of $){let J=n6(W);if(Q.has(J))continue;Q.add(J),Z.push(W)}return Z}function aM($){let Z=[...$?.directories??$5($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...bB({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return TG(Z)}async function c3($){try{let Z=await m3($,{withFileTypes:!0}),Q=[];for(let W of Z){if(!W.isDirectory())continue;let J=S0($,W.name),X=S0(J,iM);try{let Y=await vM(X,"utf8"),j=JSON.parse(Y);if(j&&typeof j==="object")Q.push(J)}catch(Y){if(m8(Y))continue;if(Y?.name==="SyntaxError")continue;throw Y}}return Q.sort((W,J)=>W.localeCompare(J))}catch(Z){if(m8(Z))return[];throw Z}}function u3($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,W,J]=Q;try{let X=rM.parse(W);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:J,hadFrontmatter:!0}}catch(X){let Y=X instanceof Error?X.message:String(X);return{data:{},body:$,hadFrontmatter:!0,parseError:Y}}}function YQ($,Z,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${Z}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${Z}' must be a string.`);let W=$.trim();if(!W&&Q)throw Error(`Frontmatter field '${Z}' cannot be empty.`);return W||void 0}function v8($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function sM($,Z){if(l1($.filePath).toLowerCase()!==zG.toLowerCase())return l1($.filePath,JQ($.filePath));if(Z&&n6($.filePath)===n6(Z,zG))return"Workspace AGENTS.md";if(n6($.filePath)===n6(uM()))return"Global AGENTS.md";return l1($.filePath,JQ($.filePath))}function o6($,Z){let{data:Q,body:W,parseError:J}=u3($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in skill file.");let j=YQ(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing skill name.");return{name:j,description:YQ(Q.description,"description",!1),disabled:v8(Q.disabled,"disabled")??(v8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function t6($,Z){let{data:Q,body:W,parseError:J}=u3($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in rule file.");let Y=YQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing rule name.");return{name:Y,disabled:v8(Q.disabled,"disabled")??(v8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function e6($,Z){let{data:Q,body:W,parseError:J}=u3($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in workflow file.");let Y=YQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing workflow name.");return{name:Y,disabled:v8(Q.disabled,"disabled")??(v8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function $5($){return lM($)}function Z5($){return dM($)}function Q5($){return pM($)}async function OG($){if(l1($)===".cline"){let Z=await c3($);return(await Promise.all(Z.map((W)=>OG(S0(W,a6))))).flat()}try{let Z=await m3($,{withFileTypes:!0}),Q=[];for(let W of Z){if(W.isFile()&&W.name===WQ){Q.push({directoryPath:$,fileName:W.name,filePath:S0($,W.name)});continue}let J=S0($,W.name);if(W.isDirectory()||W.isSymbolicLink()&&await g3(J).then((Y)=>Y.isDirectory()).catch((Y)=>{if(m8(Y))return!1;throw Y}))Q.push({directoryPath:J,fileName:WQ,filePath:S0(J,WQ)})}return Q}catch(Z){if(m8(Z))return[];throw Z}}async function jQ($){if(l1($)===".cline"){let Z=await c3($);return(await Promise.all(Z.map((W)=>jQ(S0(W,"rules.md"))))).flat()}try{if((await g3($)).isFile())return[{directoryPath:cM($),fileName:l1($),filePath:$}]}catch(Z){if(!m8(Z))throw Z}try{let Q=(await m3($,{withFileTypes:!0})).filter((J)=>J.isFile()&&XQ(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:S0($,J.name)})),W=S0($,"AGENTS.md");try{if((await g3(W)).isFile()){if(!Q.some((Y)=>Y.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:W})}}catch{}return Q}catch(Z){if(m8(Z))return[];throw Z}}async function oM($){if(l1($)===".cline"){let Z=await c3($);return(await Promise.all(Z.map((W)=>jQ(S0(W,s6))))).flat()}return jQ($)}function W5($){let Z=aM($),Q=$?.workspacePath?S0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?TG([...Z,Q]):Z,discoverFiles:OG,includeFile:(W)=>W===WQ,parseFile:(W)=>o6(W.content,l1(W.directoryPath)),resolveId:(W)=>v3(W.name)}}function J5($){let Z=$?.directories??Z5($?.workspacePath),Q=$?.workspacePath?S0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:jQ,includeFile:(W,J)=>W===".clinerules"||XQ(W)||XQ(J),parseFile:(W)=>t6(W.content,sM(W,$?.workspacePath)),resolveId:(W)=>v3(W.name)}}function X5($){let Z=$?.directories??Q5($?.workspacePath),Q=$?.workspacePath?S0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:oM,includeFile:(W)=>XQ(W),parseFile:(W)=>e6(W.content,l1(W.filePath,JQ(W.filePath))),resolveId:(W)=>v3(W.name)}}function qG($){let Z=[W5($?.skills),J5($?.rules),X5($?.workflows)];return new D2(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as MG}from"@cline/shared";function tM($,Z){if($.description?.trim())return MG($.description,".");if(Z==="workflow")return;return MG($.instructions,".")}function eM($){return $.disabled!==!0}function RG($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,W])=>({id:Q,record:W})).filter(({record:Q})=>eM(Q.item)).map(({id:Q,record:W})=>({id:Q,name:W.item.name,instructions:W.item.instructions,description:tM(W.item,Z),kind:Z})).sort((Q,W)=>Q.name.localeCompare(W.name))}function Y5($){let Z=new Map;for(let Q of[...RG($,"workflow"),...RG($,"skill")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,W)=>Q.name.localeCompare(W.name))}function EG($,Z){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let W=Q[1];if(!W)return $;let J=W.length+1,X=$.slice(J),Y=Y5(Z).find((j)=>j.name===W);return Y?`${Y.instructions}${X}`:$}var wG={};N(wG,{mergeRulesForSystemPrompt:()=>u8,loadRulesForSystemPromptFromWatcher:()=>d3,listEnabledRulesFromWatcher:()=>NG,isRuleEnabled:()=>HQ,formatRulesForSystemPrompt:()=>c8});function HQ($){return $.disabled!==!0}function c8($){if($.length===0)return"";return`
|
|
196
|
+
${W}`;return Q||W}function LT($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function _T($,Z){return $.filter((Q)=>LT(Q.name,Z))}function zT($,Z){return g1(_T($,Z))}function TT($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return{};return{beforeRun:async(Q)=>{for(let W of Z){let J=await W.beforeRun?.(Q);if(J?.stop)return J}return},afterRun:async(Q)=>{for(let W of Z)await W.afterRun?.(Q)},beforeModel:async(Q)=>{let W=Q.request,J;for(let X of Z){let Y=await X.beforeModel?.({...Q,request:W});if(!Y)continue;if(Y.stop)return Y;J={...J,...Y,options:qH(J?.options,Y.options)},W={...W,...Y.messages?{messages:Y.messages}:{},...Y.tools?{tools:Y.tools}:{},...Y.options?{options:qH(W.options,Y.options)}:{}}}return J},afterModel:async(Q)=>{for(let W of Z){let J=await W.afterModel?.(Q);if(J?.stop)return J}return},beforeTool:async(Q)=>{let W=Q.input,J;for(let X of Z){let Y=await X.beforeTool?.({...Q,input:W});if(!Y)continue;if(Y.stop||Y.skip)return Y;if(J={...J,...Y},Object.hasOwn(Y,"input"))W=Y.input}return J},afterTool:async(Q)=>{let W=Q.result,J;for(let X of Z){let Y=await X.afterTool?.({...Q,result:W});if(!Y)continue;if(Y.stop)return Y;if(J={...J,...Y},Y.result)W=Y.result}return J},onEvent:async(Q)=>{for(let W of Z)await W.onEvent?.(Q)}}}class U${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 rW;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??FT,this.conversation=new uW($.initialMessages),this.messageBuilder=new mW(LH()),this.contributionRegistry=AT({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 pW({maxConsecutiveMistakes:Q,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(X)=>this.emitLegacyEvent(X),log:(X,Y,j)=>OT(this.logger,X,Y,j),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(X,Y)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:X}]})}});let W=$.execution?.loopDetection;this.loopDetectionDisabled=W===!1;let J=W===!1||W===void 0?void 0:W;this.loopTracker=new lW(J)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools($){if($.length===0)return;let Z=new Set(this.config.tools.map((W)=>W.name)),Q=[...this.config.tools];for(let W of $)if(!Z.has(W.name))Q.push(W),Z.add(W.name);this.config={...this.config,tools:Q}}updateConnection($){let Z={...this.config};if($.providerId!==void 0)Z.providerId=$.providerId;if($.modelId!==void 0)Z.modelId=$.modelId;if($.apiKey!==void 0)Z.apiKey=$.apiKey;if($.baseUrl!==void 0)Z.baseUrl=$.baseUrl;if($.headers!==void 0)Z.headers=$.headers;if($.providerConfig!==void 0)Z.providerConfig=$.providerConfig;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinking!==void 0)Z.thinking=$.thinking;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;this.config=Z}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.messageBuilder.resetConversationState(),this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let Z=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=Z,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(Z)}async shutdown($,Z){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run($,Z,Q){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!1})}continue($,Z,Q){return this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let Z of this.contributionRegistry.getRegisteredRules()){let Q=await UT(Z);if(Q)$.push(Q)}return DT(this.config.systemPrompt,$)}executeRun($){let Z;return Z=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===Z)this.activeRunPromise=null}),this.activeRunPromise=Z,Z}async executeRunInternal($){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let Z=new Date,Q=$.userMessage;if(Q!==void 0){let U=await MT(Q,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:U})}let W=await this.composeSystemPrompt(),J=HH(this.config,this.logger,this.telemetry),X=new Map;for(let U of this.contributionRegistry.getRegisteredTools())X.set(U.name,U);let Y=zT([...X.values()],this.config.toolPolicies),j=new Map;for(let U of Y)j.set(U.name,U);for(let U of this.config.tools)j.set(U.name,U);let V=this.conversation.getConversationId(),H=MH(this.config),B=Array.from(j.values()),G=jZ(this.conversation.getMessages()),K=zH({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:J,logger:this.logger,telemetry:this.telemetry,tools:B,toolContextMetadata:{modelSupportsImages:H?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[UV]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(H,B),initialMessages:G,systemPrompt:W}),F=this.createAgentRuntimeImpl(K);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let A=F.subscribe((U)=>{this.handleRuntimeEvent(U)}),L,f;try{if($.isContinue)L=await F.continue(void 0);else L=await F.run("")}catch(U){f=U instanceof Error?U:Error(String(U))}finally{A();try{await this.activeTrackerWork}catch(U){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:U})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(L&&L.messages.length>0){let U=A8(L.messages);this.conversation.replaceMessages(U)}let D=new Date;try{return this.buildLegacyResult({runResult:L,thrownError:f,startedAt:Z,endedAt:D})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize({tolerateSetupErrors:this.config.hookErrorMode!=="throw"})}catch($){if(this.config.hookErrorMode==="throw")throw $;this.emitLegacyEvent({type:"error",error:$ instanceof Error?$:Error(String($)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let $=TT([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((Z)=>Z.hooks)]);return{...$,beforeModel:async(Z)=>{let Q=await $.beforeModel?.(Z);if(Q?.stop)return Q;let W=Q?.messages??Z.request.messages,J=await this.prepareMessagesForModelRequest(W);return{...Q,messages:J}}}}createRuntimePrepareTurn($,Z){let Q=this.config.prepareTurn;if(!Q)return;return async(W)=>{let J=A8(W.messages),X=await this.prepareProviderMessagesForApi(J),Y=await Q({agentId:W.agentId,conversationId:W.conversationId??this.conversation.getConversationId(),parentAgentId:W.parentAgentId??null,iteration:W.iteration,messages:J,apiMessages:X,abortSignal:W.signal??new AbortController().signal,systemPrompt:W.systemPrompt??"",tools:Z,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:W.emitStatusNotice});if(!Y)return;return{...Y.messages?{messages:jZ(Y.messages)}:{},...Y.systemPrompt!==void 0?{systemPrompt:Y.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let Z=await this.prepareProviderMessagesForApi(VZ($));return jZ(Z)}async prepareProviderMessagesForApi($){let Z=$,Q=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let W of Q)Z=await W.build(Z);return this.messageBuilder.buildForApi(Z)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=new Date,W=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let J=$.message.content.find((V)=>V.type==="tool-result"),X=J?.type==="tool-result"&&J.isError===!0,Y=X?fT(J?.type==="tool-result"?J.output:void 0):void 0,j={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:W,output:J?.type==="tool-result"?J.output:void 0,error:Y,durationMs:Z===void 0?0:Q.getTime()-Z.getTime(),startedAt:Z??Q,endedAt:Q};if(this.currentRunToolCalls.push(j),X){if(this.currentTurnFailedTools+=1,Y)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${Y}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let Z=this.currentTurnFailedTools,Q=this.currentTurnSuccessfulTools;if(Z>0&&Q===0){let W=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${Z} tool call(s) failed${W?`: ${W}`:""}`})}else if(Q>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let Z of this.eventAdapter.translate($))this.emitLegacyEvent(Z)}syncConversationFromRuntimeMessage($,Z){if($.length>0){this.conversation.replaceMessages(A8($));return}if(Z.length===0)return;let Q=new Set(this.conversation.getMessages().map((J)=>J.id).filter((J)=>typeof J==="string")),W=A8(Z).filter((J)=>!J.id||!Q.has(J.id));if(W.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...W])}emitLegacyEvent($){for(let Z of this.listeners)try{Z($)}catch(Q){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Q})}}inspectLoopForToolCall($,Z,Q){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let W=this.loopTracker.inspect({name:$,input:Z});if(W.kind==="ok")return;if(W.kind==="soft"){if(W.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:W.message}]});return}this.enqueueMistakeRecord({iteration:Q,reason:"tool_execution_failed",forceAtLimit:!0,details:W.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let Z=await this.mistakeTracker.record($);if(Z.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:Z.message}]}),this.activeRuntime?.abort(Z.reason??Z.message)})}buildLegacyResult($){let{runResult:Z,thrownError:Q,startedAt:W,endedAt:J}=$,X=J.getTime()-W.getTime(),Y=Q?"error":qT(Z),j=(Z?.status==="failed"?Z.error?.message:void 0)||Z?.outputText||"",V=Z?{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens>0?Z.usage.cacheReadTokens:void 0,cacheWriteTokens:Z.usage.cacheWriteTokens>0?Z.usage.cacheWriteTokens:void 0,totalCost:Z.usage.totalCost}:this.currentRunUsage,H=Z?A8(Z.messages):this.conversation.getMessages(),B=MH(this.config);if(Q)throw Q;return{text:j,usage:V,messages:H,toolCalls:this.currentRunToolCalls,iterations:Z?.iterations??0,finishReason:Y,model:{id:this.config.modelId,provider:this.config.providerId,info:B},startedAt:W,endedAt:J,durationMs:X}}}function OT($,Z,Q,W){if(!$)return;if(Z==="debug"){$.debug(Q,W);return}if(Z==="error"&&$.error){$.error(Q,W);return}let J=Z==="warn"?"warn":Z==="error"?"error":"info";$.log(Q,{...W,severity:J})}function qT($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function MT($,Z,Q,W){let{buildInitialUserContent:J}=await Promise.resolve().then(() => OH);return J($,Z,Q,W)}function MH($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let Z=IW($);if(Z?.[$.modelId])return Z[$.modelId];return}import{buildClineSystemPrompt as RH}from"@cline/shared";function EH($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return RH({ide:Z.clineIdeName?.trim()||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,rules:`# Team Teammate Role
|
|
197
|
+
${Q}`,platform:Z.clinePlatform,metadata:Z.workspaceMetadata})}function NH($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return RH({ide:Z.clineIdeName||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,overridePrompt:Q,metadata:Z.workspaceMetadata,platform:Z.clinePlatform})}function D$($){let Z={...$};return{getRuntimeConfig:()=>Z,getConnectionConfig:()=>({providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxTokensPerTurn:Z.maxTokensPerTurn}),updateConnectionDefaults:(Q)=>{Z={...Z,...Q}}}}function J2($){let Z=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?EH($.prompt,Z):NH($.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 L$($){let Z=J2($),Q=new U$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);return Q}var NT=iW.object({systemPrompt:iW.string().describe("System prompt defining the sub-agent's behavior"),task:iW.string().describe("Task for the sub-agent to complete")});function _$($){return RT({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:ET(NT),execute:async(Z,Q)=>{let W=$.createSubAgentTools?await $.createSubAgentTools(Z,Q):$.subAgentTools??[],J=L$({kind:"subagent",prompt:Z.systemPrompt,configProvider:$.configProvider,tools:W,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),X=J.getAgentId(),Y=J.getConversationId(),j=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z})}catch{}try{let V=await J.run(Z.task),H={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,result:H,agentResult:V})}catch{}return H}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as K0,TEAM_AWAIT_TIMEOUT_MS as CT,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as wT,TEAM_RUN_TEXT_PREVIEW_LIMIT as PT,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as ST,TeamAttachOutcomeFragmentInputSchema as CH,TeamAwaitRunsInputSchema as wH,TeamBroadcastInputSchema as PH,TeamBroadcastToolResultSchema as bT,TeamCancelRunInputSchema as SH,TeamCancelRunToolResultSchema as yT,TeamCleanupInputSchema as bH,TeamCleanupToolResultSchema as hT,TeamCreateOutcomeInputSchema as yH,TeamCreateOutcomeToolResultSchema as kT,TeamFinalizeOutcomeInputSchema as hH,TeamFinalizeOutcomeToolResultSchema as IT,TeamListOutcomesInputSchema as kH,TeamListRunsInputSchema as IH,TeamMailboxMessageToolResultSchema as xT,TeamMissionLogInputSchema as xH,TeamMissionLogToolResultSchema as gT,TeamOutcomeFragmentToolResultSchema as gH,TeamOutcomeToolResultSchema as mT,TeamReadMailboxInputSchema as mH,TeamReviewOutcomeFragmentInputSchema as vH,TeamRunTaskInputSchema as cH,TeamRunTaskToolResultSchema as nW,TeamRunToolSummarySchema as aW,TeamSendMessageInputSchema as uH,TeamSendMessageToolResultSchema as vT,TeamShutdownTeammateInputSchema as dH,TeamSimpleAgentStatusToolResultSchema as lH,TeamSpawnTeammateInputSchema as pH,TeamStatusInputSchema as rH,TeamStatusToolResultSchema as cT,TeamTaskInputSchema as iH,TeamTaskToolResultSchema as _6,validateWithZod as k,zodToJsonSchema as F0}from"@cline/shared";function nH($,Z){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=Z)return Q;return`${Q.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function X2($,Z){if($===void 0)throw Error(`Missing required field: ${Z}`);return $}function uT($){let Z=$.result;if(!Z)return;return{textPreview:nH(Z.text,PT),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 KZ($){return $?.toISOString()}function sW($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:nH($.message,wT),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:KZ($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:KZ($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:KZ($.heartbeatAt),lastProgressAt:KZ($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:uT($)}}function dT($){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 U8=["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 aH($){let Z=[];if($.createBaseTools)Z.push(...$.createBaseTools());Z.push(...Y2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:J2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:Z,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function D8($){let Z=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,W=Y2({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),J=[];for(let X of $.restoredTeammates??[]){if($.runtime.isTeammateActive(X.agentId))continue;aH({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:X}),J.push(X.agentId)}return{tools:W,restoredFromPersistence:Q,restoredTeammates:J}}function Y2($){let Z=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,W=$.includeManagementTools??!0,J=[];if(Q)J.push(K0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:F0(pH),execute:async(Y)=>{let j=k(pH,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!Z)throw Error("Spawning teammates is disabled in this context.");let V={agentId:j.agentId,rolePrompt:j.rolePrompt};if(aH({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!W)$.onLeadToolsUnlocked?.(Y2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return k(lH,{agentId:j.agentId,status:"spawned"})}}));if(!W)return J;J.push(K0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:F0(dH),execute:async(Y)=>{let j=k(dH,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(j.agentId,j.reason),k(lH,{agentId:j.agentId,status:"stopped"})}})),J.push(K0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:F0(rH),execute:async(Y)=>{return k(rH,Y),k(cT,$.runtime.getSnapshot())}})),J.push(K0({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:F0(iH),execute:async(Y)=>{let j=k(iH,Y);switch(j.action){case"create":{let V=new Set(ST.create??[]),H=Object.entries(Y).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),B=$.runtime.createTask({title:X2(j.title,"title"),description:X2(j.description,"description"),dependsOn:j.dependsOn,assignee:j.assignee,createdBy:$.requesterId});return k(_6,{action:"create",taskId:B.id,status:B.status,...H.length>0?{ignoredFields:H,note:`Ignored fields for action=create: ${H.join(", ")}`}:{}})}case"list":return k(_6,{action:"list",tasks:$.runtime.listTaskItems({status:j.status,assignee:j.assignee})});case"claim":{let V=$.runtime.claimTask(X2(j.taskId,"taskId"),$.requesterId);return k(_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(X2(j.taskId,"taskId"),$.requesterId,X2(j.summary,"summary"));return k(_6,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(X2(j.taskId,"taskId"),$.requesterId,X2(j.reason,"reason"));return k(_6,{action:"block",taskId:V.id,status:V.status})}}}}));let X=new Map;return J.push(K0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:F0(cH),execute:async(Y)=>{let j=k(cH,Y);if(j.runMode==="async"){let B=$.runtime.startTeammateRun(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0});return k(nW,{agentId:j.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${j.agentId} and queued as ${B.id}.`,runId:B.id})}let V=X.get(j.agentId);if(V){let B=await V;return k(nW,{...B,status:"joined",deduped:!0,message:`Task for ${j.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let H=$.runtime.routeToTeammate(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0}).then((B)=>k(nW,{agentId:j.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${j.agentId} and completed in sync mode.`,text:B.text,iterations:B.iterations})).finally(()=>{X.delete(j.agentId)});return X.set(j.agentId,H),await H}})),J.push(K0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:F0(SH),execute:async(Y)=>{let j=k(SH,Y),V=$.runtime.cancelRun(j.runId,j.reason);return k(yT,{runId:V.id,status:V.status})}})),J.push(K0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:F0(IH),execute:async(Y)=>k(aW.array(),$.runtime.listRuns(k(IH,Y)).map(sW))})),J.push(K0({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:F0(wH),timeoutMs:CT,execute:async(Y)=>{let j=k(wH,Y);if(j.runId){let B=await $.runtime.awaitRun(j.runId);return dT(B),k(aW,sW(B))}let V=await $.runtime.awaitAllRuns(),H=V.filter((B)=>["failed","cancelled","interrupted"].includes(B.status));if(H.length>0){let B=H.map((G)=>`${G.id}:${G.status}${G.error?`(${G.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${B}`)}return k(aW.array(),V.map(sW))}})),J.push(K0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:F0(uH),execute:async(Y)=>{let j=k(uH,Y),V=$.runtime.sendMessage($.requesterId,j.toAgentId,j.subject,j.body,j.taskId??void 0);return k(vT,{id:V.id,toAgentId:V.toAgentId})}})),J.push(K0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:F0(PH),execute:async(Y)=>{let j=k(PH,Y),V=$.runtime.broadcast($.requesterId,j.subject,j.body,{taskId:j.taskId??void 0});return k(bT,{delivered:V.length})}})),J.push(K0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:F0(mH),execute:async(Y)=>{let j=k(mH,Y);return k(xT.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:j.unreadOnly,markRead:!0}))}})),J.push(K0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:F0(xH),execute:async(Y)=>{let j=k(xH,Y),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:j.taskId||void 0,kind:j.kind,summary:j.summary,evidence:j.evidence?.length?j.evidence:void 0,nextAction:j.nextAction||void 0});return k(gT,{id:V.id})}})),J.push(K0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:F0(bH),execute:async(Y)=>{if(k(bH,Y),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),k(hT,{status:"cleaned"})}})),J.push(K0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:F0(yH),execute:async(Y)=>{let j=k(yH,Y),V=$.runtime.createOutcome({title:j.title,requiredSections:j.requiredSections,createdBy:$.requesterId});return k(kT,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),J.push(K0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:F0(CH),execute:async(Y)=>{let j=k(CH,Y),V=$.runtime.attachOutcomeFragment({outcomeId:j.outcomeId,section:j.section,sourceAgentId:$.requesterId,sourceRunId:j.sourceRunId||void 0,content:j.content});return k(gH,{fragmentId:V.id,status:V.status})}})),J.push(K0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:F0(vH),execute:async(Y)=>{let j=k(vH,Y),V=$.runtime.reviewOutcomeFragment({fragmentId:j.fragmentId,reviewedBy:$.requesterId,approved:j.approved});return k(gH,{fragmentId:V.id,status:V.status})}})),J.push(K0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:F0(hH),execute:async(Y)=>{let j=k(hH,Y),V=$.runtime.finalizeOutcome(j.outcomeId);return k(IT,{outcomeId:V.id,status:V.status})}})),J.push(K0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:F0(kH),execute:async(Y)=>{return k(kH,Y),k(mT.array(),$.runtime.listOutcomes())}})),J}function FZ($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}function sH($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var lT=[{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:_$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...U8]}],pT={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function rT($){return $==="plan"||$==="yolo"?$:"act"}function tH($){let Z=rT($.mode),Q=u0[x1({mode:Z})],W=F8($.providerId??"",$.modelId??"",Z,K8);return{mode:Z,flags:{...Q,...W,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function oH($,Z){if(Z.disabledToolIds?.has($))return!1;let{flags:Q}=tH(Z);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let W=pT[$];return W?Q[W]===!0:!1}function iT($,Z){if($.id==="editor"){let{flags:Q}=tH(Z),W=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:oH($.id,Z),headlessToolNames:[W?"apply_patch":"editor"]}}return{...$,defaultEnabled:oH($.id,Z)}}function j2($={}){return lT.map((Z)=>iT(Z,$))}function AZ($={}){return j2($).filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id)}function fZ($){if(!$.enabled)return new Set;let Z=j2($.availabilityContext),Q=new Set(Z.map((W)=>W.id));if(!$.allowlist||$.allowlist.length===0)return new Set(Z.filter((W)=>W.defaultEnabled).map((W)=>W.id));for(let W of $.allowlist)if(!Q.has(W))throw Error(`Unknown tool "${W}". Available tools: ${Z.map((J)=>J.id).join(", ")}`);return new Set($.allowlist)}function z6($,Z={}){return j2(Z).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function UZ($,Z={}){return z6($,Z)}function V2($={}){let{executorOptions:Z={},executors:Q,...W}=$,J={...G8(Z),...Q??{}};return F$({...W,executors:J})}import{mkdirSync as eT,writeFileSync as $O}from"node:fs";import{dirname as ZO}from"node:path";import{normalizeUserInput as QO}from"@cline/shared";import{nanoid as WO}from"nanoid";var $B={};N($B,{sanitizeSessionToken:()=>H2,parseTeamTaskSubSessionId:()=>_8,parseSubSessionId:()=>O6,makeTeamTaskSubSessionId:()=>T6,makeSubSessionId:()=>L8,deriveSubsessionStatus:()=>q6});import{nanoid as sT}from"nanoid";function H2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function L8($,Z){let Q=H2($),W=H2(Z),J=`${Q}__${W}`;return J.length>180?J.slice(0,180):J}function T6($,Z){let Q=H2($),W=H2(Z);return`${Q}__teamtask__${W}__${sT(6)}`}function _8($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+12),X=J.lastIndexOf("__");if(X<=0)return null;let Y=J.slice(0,X),j=J.slice(X+2);if(!W||!Y||!j)return null;return{rootSessionId:W,agentId:Y,teamTaskId:j}}function O6($){if(_8($))return null;let Z="__",Q=$.indexOf(Z);if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+Z.length);if(!W||!J)return null;return{rootSessionId:W,agentId:J}}function q6($){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 WB={};N(WB,{isTerminalSessionStatus:()=>QB,isNonTerminalSessionStatus:()=>H0,SessionSource:()=>z0,SESSION_STATUSES:()=>M6,NON_TERMINAL_SESSION_STATUSES:()=>ZB});import{SESSION_STATUS_VALUES as oT}from"@cline/shared";var M6=oT,ZB=["idle","running","pending"];function QB($){return!ZB.includes($)}function H0($){return!QB($)}var z0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var tT=e.enum(M6),P0=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:tT,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()});function JB($){if(!$)return!1;return Object.values($).some((Z)=>typeof Z==="function")}function tW($,Z){let Q=[...$??[],...Z??[]];if(Q.length===0)return;let W=[],J=new Set;for(let X of Q){if(J.has(X.name))continue;J.add(X.name),W.push(X)}return W}function XB($){return JSON.stringify($,(Z,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function m1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function oW($,Z){let Q={...$};Q.id=m1(Q.id)??WO();let W=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,J={id:m1(W?.id)??m1(Q.modelId)??m1(Z?.id),provider:m1(W?.provider)??m1(Q.providerId)??m1(Z?.provider),family:m1(W?.family)??m1(Z?.family)};if(delete Q.providerId,delete Q.modelId,J.id&&J.provider)Q.modelInfo={id:J.id,provider:J.provider,...J.family?{family:J.family}:{}};else delete Q.modelInfo;return Q}function DZ($){return $.map((Z)=>oW(Z))}function LZ($,Z,Q=[]){let W=$.map((V,H)=>{let B=Q[H],K=B?.role===V.role&&JSON.stringify(B.content)===JSON.stringify(V.content)?{...B,...V}:{...V};return oW(K)}),J=Q.length,X=[];for(let V=J;V<W.length;V+=1)if(W[V]?.role==="assistant")X.push(V);if(X.length===0){let V=[...W].reverse().findIndex((H)=>H.role==="assistant");if(V===-1)return W;X.push(W.length-1-V)}let Y=X[X.length-1],j=X.some((V)=>W[V]?.metrics);for(let V of X){let H=W[V],B=H.metrics;if(!B&&V===Y&&!j){let G=Z.usage;B={inputTokens:G.inputTokens,outputTokens:G.outputTokens,cacheReadTokens:G.cacheReadTokens??0,cacheWriteTokens:G.cacheWriteTokens??0,cost:G.totalCost}}W[V]={...oW(H,{id:Z.model.id,provider:Z.model.provider,family:Z.model.info?.family}),...B?{metrics:B}:{},ts:H.ts??Z.endedAt.getTime()}}return W}function R6($){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 JO=120;function B2($){let Z=$?.trim();return Z?Z.slice(0,JO):void 0}function eW($){let Z=QO($??"").trim();if(!Z)return;return B2(Z.split(`
|
|
198
|
+
`)[0]?.trim())}function z$($){if(!$)return;let Z={...$},Q=B2(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 E6($){let Z=z$($.metadata)??{},Q=$.title!==void 0?B2($.title):eW($.prompt);if(Q)Z.title=Q;return Object.keys(Z).length>0?Z:void 0}function $3($){let Z=_8($);if(Z)return{agent:"teammate",sessionId:Z.rootSessionId,taskType:"team"};let Q=O6($);if(Q)return{agent:"subagent",sessionId:Q.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function Z3($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:DZ($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function YB($,Z,Q){eT(ZO($),{recursive:!0}),$O($,`${JSON.stringify(Z3({updatedAt:Z,context:Q,messages:[]}),null,2)}
|
|
199
|
+
`,"utf8")}function jB($,Z){return P0.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 VB($,Z,Q){let W=0;while(!0){let J=await $();if(J===void 0)return{updated:!1};let X=await Z(J);if(typeof X==="object"&&X!==null&&"updated"in X&&X.updated===!1){if(W+=1,W>=Q)return X;continue}return X}}L0();var HB={};N(HB,{summarizeUsageFromMessages:()=>T8,sumUsageTotals:()=>N6,getCurrentContextSize:()=>Q3,createInitialAccumulatedUsage:()=>D0,accumulateUsageTotals:()=>A0});function D0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function A0($,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 N6($){let Z=D0();for(let Q of $)Z=A0(Z,Q);return Z}function z8($){return typeof $==="number"&&Number.isFinite($)?$:0}function T8($){let Z=D0();for(let Q of $){let W=Q.metrics;if(!W)continue;Z=A0(Z,{inputTokens:z8(W.inputTokens),outputTokens:z8(W.outputTokens),cacheReadTokens:z8(W.cacheReadTokens),cacheWriteTokens:z8(W.cacheWriteTokens),totalCost:z8(W.cost)})}return Z}function Q3($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let W=z8(Q.metrics?.inputTokens);return W>0?W:void 0}return}function XO($){if(!$||typeof $!=="object")return;let Z=$,Q=Z.skill??Z.skill_name??Z.skillName;if(typeof Q!=="string")return;let W=Q.trim();return W.length>0?W:void 0}function W3($){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 v1($){let Z=$.agentId?.trim();if(!Z)return;let Q=$.parentAgentId?.trim()||void 0,W=$.teamRole,J="root";if(W==="teammate")J="team_teammate";else if(W==="lead")J="team_lead";else if(Q)J="subagent";return{agentId:Z,agentKind:J,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Q,createdByAgentId:$.createdByAgentId?.trim()||Q||void 0,isSubagent:Boolean(Q),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:W,teamAgentId:$.teamAgentId?.trim()||void 0}}function YO($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function jO($){let Z=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of Z){let W=Q?.trim();if(W)return W}return $.isPrimaryAgentEvent?"root":"unknown"}function J3($,Z,Q){let{sessionId:W,config:J,liveSession:X,emit:Y}=$,j=J.telemetry,V=X?.runtime.teamRuntime,H=Q?.isPrimaryAgentEvent??!0,B=W3(Z),G=v1({agentId:Q?.agentId??B.agentId,conversationId:Q?.conversationId??B.conversationId,parentAgentId:Q?.parentAgentId??B.parentAgentId,createdByAgentId:Q?.createdByAgentId,teamId:Q?.teamId??V?.getTeamId(),teamName:Q?.teamName??V?.getTeamName(),teamRole:Q?.teamRole,teamAgentId:Q?.teamAgentId});if(Z.type==="content_start"&&Z.contentType==="tool"&&Z.toolName==="skills"){let K=XO(Z.input);if(K)O9(j,{ulid:W,skillName:K,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:J.providerId,modelId:J.modelId,...G})}if(Z.type==="content_end"&&Z.contentType==="tool"){let K=Z.toolName??"unknown",F=!Z.error;if(e2(j,{ulid:W,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))q9(j,{ulid:W,modelId:J.modelId,provider:J.providerId,errorType:Z.error,...G})}if(Z.type==="notice"&&Z.reason==="api_error")b4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.message,...G});if(Z.type==="error")b4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.error?.message??"unknown error",...G});if(Z.type==="usage"&&X?.turnUsageBaseline){let K=YO(Z);if(H){X.turnPrimaryUsage=A0(X.turnPrimaryUsage??D0(),K);let A=A0(X.turnUsageBaseline,X.turnPrimaryUsage);$.usageBySession.set(W,A),t2(j,{ulid:W,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),z9(j,{ulid:W,tokensIn:Z.inputTokens,tokensOut:Z.outputTokens,cacheWriteTokens:Z.cacheWriteTokens,cacheReadTokens:Z.cacheReadTokens,totalCost:Z.cost,model:J.modelId,...G})}else{let A=jO({isPrimaryAgentEvent:H,overrides:Q,eventMetadata:B}),L=X.turnUsageByAgent??new Map;X.turnUsageByAgent=L,L.set(A,A0(L.get(A)??D0(),K))}let F=A0(X.turnPrimaryUsage??D0(),N6(X.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(W,A0(X.turnAggregateUsageBaseline??X.turnUsageBaseline,F))}if(Z.type==="iteration_end"&&H)$.persistMessages(W,X?.agent.getMessages()??[],X?.config.systemPrompt);Y({type:"agent_event",payload:{sessionId:W,event:Z,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(H?"lead":void 0):void 0}}),Y({type:"chunk",payload:{sessionId:W,stream:"agent",chunk:XB(Z),ts:Date.now()}})}function T$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as LM}from"@cline/shared";Y1();import{existsSync as MZ,readFileSync as nO,statSync as aO}from"node:fs";import{basename as sO,dirname as OZ,join as RZ,resolve as qZ}from"node:path";import{discoverPluginModulePaths as oO,resolveConfiguredPluginModulePaths as PB,resolvePluginConfigSearchPaths as tO,SKILLS_CONFIG_DIRECTORY_NAME as eO}from"@cline/shared/storage";import{resolve as NO}from"node:path";import{normalizePluginManifest as CO}from"@cline/shared";import{existsSync as T0,readFileSync as q8}from"node:fs";import{builtinModules as VO,createRequire as V3}from"node:module";import{dirname as O$,extname as w6,isAbsolute as HO,resolve as p}from"node:path";import{fileURLToPath as GB}from"node:url";import{PLUGIN_FILE_EXTENSIONS as BO}from"@cline/shared";var KB=O$(GB(import.meta.url)),GO=V3(import.meta.url),KO=p(KB,"..","..","..","..",".."),X3=fO(KO),FO=["@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"],H3=new Set(VO.flatMap(($)=>[$,$.replace(/^node:/,"")])),C6=new Set(BO),AO=["development","node","import","require","default"];function fO($){let Z={},Q={"@cline/sdk":p($,"packages/sdk/src/index.ts"),"@cline/agents":p($,"packages/agents/src/index.ts"),"@cline/core":p($,"packages/core/src/index.ts"),"@cline/llms":p($,"packages/llms/src/index.ts"),"@cline/shared":p($,"packages/shared/src/index.ts"),"@cline/shared/storage":p($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":p($,"packages/shared/src/db/index.ts")};for(let[W,J]of Object.entries(Q))if(T0(J))Z[W]=J;for(let W of["agents","core","llms","shared"]){let J=p($,"packages",W),X=p(J,"package.json");if(!T0(X))continue;try{let Y=JSON.parse(q8(X,"utf8"));if(typeof Y.name!=="string"||!Y.exports)continue;if(typeof Y.exports==="string"){let j=p(J,Y.exports);if(T0(j))Z[Y.name]=j;continue}if(typeof Y.exports!=="object")continue;for(let[j,V]of Object.entries(Y.exports)){let H=UO(J,V);if(!H)continue;let B=j==="."?Y.name:`${Y.name}/${j.replace(/^\.\//,"")}`;Z[B]=H}}catch{}}return Z}function UO($,Z){let Q=B3(Z);if(!Q)return null;let W=FB($,Q);for(let J of W)if(T0(J))return J;return null}function B3($,Z=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(Z.has($))return null;Z.add($);let Q=$;for(let W of AO){let J=B3(Q[W],Z);if(J)return J}return null}function FB($,Z){let Q=Z.replace(/^\.\//,""),W=[p($,Z)];if(Q.startsWith("dist/")){let J=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[p($,`${J}.ts`),p($,`${J}.tsx`),p($,`${J}.mts`),p($,`${J}.cts`),...W]}return W}function DO($){return Object.fromEntries(Object.entries($).sort(([Z],[Q])=>Q.length-Z.length))}function _Z($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function O8($){if($.startsWith("@")){let[Z,Q]=$.split("/",3);return Q?`${Z}/${Q}`:$}return $.split("/",1)[0]??$}function LO($){let Z=O8($);if($===Z)return".";return`.${$.slice(Z.length)}`}function AB($){return O8($).startsWith("@cline/")}function Y3($,Z){let Q=O8(Z),W=O$($);while(!0){let J=p(W,"node_modules",Q);if(T0(J)||T0(p(J,"package.json")))return!0;let X=p(W,"..");if(X===W)return!1;W=X}}function BB($){return j3($)!==null}function j3($){try{return GO.resolve($)}catch{}return _O($)}function _O($){let Z=O8($),Q=fB(Z);if(!Q)return null;let W=p(Q,"package.json");try{let J=JSON.parse(q8(W,"utf8")),X=LO($),Y=X==="."&&typeof J.exports==="string"?J.exports:J.exports&&typeof J.exports==="object"&&Object.hasOwn(J.exports,X)?J.exports[X]:void 0,j=B3(Y)??(X==="."&&typeof J.main==="string"?J.main:null);if(!j)return null;let V=p(Q,j),H=[V,...FB(Q,j).filter((B)=>B!==V)];for(let B of H)if(T0(B))return B;return null}catch{return null}}function zO(){let $=[KB],Z=process.env.CLINE_WRAPPER_PATH?.trim();if(Z)$.push(O$(O$(Z)));let Q=process.execPath?.trim();if(Q)$.push(O$(Q));return[...new Set($.map((W)=>p(W)))]}function TO($,Z){let Q=$;while(!0){let W=p(Q,"package.json");if(T0(W))try{if(JSON.parse(q8(W,"utf8")).name===Z)return Q}catch{}let J=p(Q,"node_modules",Z,"package.json");if(T0(J))return O$(J);let X=p(Q,"..");if(X===Q)return null;Q=X}}function fB($){for(let Z of zO()){let Q=TO(Z,$);if(Q)return Q}return null}function OO($){let Q=O$($);for(let W=0;W<4;W++){let J=p(Q,"package.json");if(T0(J))try{let Y=JSON.parse(q8(J,"utf8"));return Y!=null&&typeof Y==="object"&&"cline"in Y}catch{return!1}let X=p(Q,"..");if(X===Q)return!1;Q=X}return!1}function UB($,Z){let Q=Z.startsWith("file:")?GB(Z):HO(Z)?Z:p(O$($),Z);if(T0(Q)&&C6.has(w6(Q)))return Q;for(let W of C6){let J=`${Q}${W}`;if(T0(J))return J}for(let W of C6){let J=p(Q,`index${W}`);if(T0(J))return J}return null}function DB($){let Z=new Set,Q=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let W of Q)for(let J of $.matchAll(W)){let X=J[1];if(X)Z.add(X)}return[...Z]}function qO($){return w6($)!==".ts"}function LB($,Z,Q=new Set){if(Q.has($)||!T0($))return;if(Q.add($),!C6.has(w6($)))return;let W=q8($,"utf8"),J=qO($);for(let X of DB(W)){if(X.startsWith("node:")||H3.has(X))continue;if(_Z(X)){if(!J)continue;if(Object.hasOwn(X3,X)||Object.hasOwn(X3,O8(X))||Y3($,X)||AB(X)&&BB(X)||Z&&BB(X))continue;throw Error(`Cannot find module '${O8(X)}'`)}let Y=UB($,X);if(Y)LB(Y,Z,Q)}}function _B($,Z=new Set,Q=new Set){if(Z.has($)||!T0($))return Q;if(Z.add($),!C6.has(w6($)))return Q;let W=q8($,"utf8");for(let J of DB(W)){if(Q.add(J),_Z(J))continue;let X=UB($,J);if(X)_B(X,Z,Q)}return Q}function MO($,Z){let Q=V3($),W={},J=_B($),X=new Set(FO);for(let[Y,j]of Object.entries(X3)){try{Q.resolve(Y);continue}catch{}W[Y]=j}for(let Y of J)if(_Z(Y)&&(AB(Y)||Z))X.add(Y);for(let Y of X){if(Object.hasOwn(W,Y)||Y3($,Y))continue;let j=j3(Y);if(j)W[Y]=j}if(!Z)return W;for(let Y of J){if(!_Z(Y)||Object.hasOwn(W,Y)||Y3($,Y)||Y.startsWith("node:")||H3.has(Y))continue;let j=j3(Y);if(j)W[Y]=j}return W}function RO($){let Z=w6($);return Z===".ts"||Z===".tsx"||Z===".mts"||Z===".cts"}var G2;function EO(){if(G2!==void 0)return G2;let $=fB("jiti");if(!$)return G2=null,null;let Z=p($,"dist","babel.cjs");if(!T0(Z))return G2=null,null;try{let W=V3(Z)(Z);G2=typeof W==="function"?W:null}catch{G2=null}return G2}async function zB($,Z={}){let Q=!OO($);LB($,Q);let W=MO($,Q),J=DO(W),X=await import("jiti"),Y=typeof X==="function"?X:typeof X.default==="function"?X.default:void 0;if(!Y)throw Error("Unable to load jiti");let j=Object.entries(J).filter(([,G])=>RO(G)).map(([G])=>G),V=EO(),H=V?(G)=>V({...G,interopDefault:!0}):void 0;return await Y($,{alias:J,cache:Z.useCache,requireCache:Z.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...H3],transformModules:j,tryNative:!1,...H?{transform:H}:{}}).import($,{})}function TB($,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 OB($){return typeof $==="object"&&$!==null}function G3($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function wO($,Z){if(!OB($.manifest))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);if(!G3($.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")&&!G3($.manifest.providerIds))throw Error(`Invalid plugin module at ${Z}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!G3($.manifest.modelIds))throw Error(`Invalid plugin module at ${Z}: manifest.modelIds must be a string array when provided`)}function PO($,Z){if(!OB($))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"`);wO($,Z)}async function P6($,Z={}){let Q=NO(Z.cwd??process.cwd(),$),W=await zB(Q,{useCache:Z.useCache}),J=Z.exportName??"plugin",X=W.default??W[J];PO(X,Q);let Y=X,j=Y.setup,V=j?(H,B)=>{let G={...Z.session,...B.session},K={...B,session:Object.keys(G).length>0?G:void 0,client:Z.client??B.client,user:Z.user??B.user,workspaceInfo:Z.workspaceInfo??B.workspaceInfo,automation:Z.automation??B.automation,logger:Z.logger??B.logger,telemetry:Z.telemetry??B.telemetry};return j(H,K)}:void 0;return{...Y,manifest:CO(Y.manifest),setup:V}}async function zZ($,Z={}){return(await K2($,Z)).plugins}async function K2($,Z={}){let Q=[],W=[],J=new Map,X=0;for(let j of $)try{let V=await P6(j,Z);if(!TB(V.manifest,Z))continue;let H=J.get(V.name);if(H)W.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:j,overriddenPluginPath:H.pluginPath,message:`Plugin "${V.name}" from ${j} overrides ${H.pluginPath}`});J.set(V.name,{plugin:V,pluginPath:j,order:X++})}catch(V){let H=V instanceof Error?V.message:String(V);Q.push({pluginPath:j,phase:"load",message:H,stack:V instanceof Error?V.stack:void 0})}let Y=[...J.values()].sort((j,V)=>j.order-V.order);return{plugins:Y.map((j)=>j.plugin),pluginPaths:Y.map((j)=>j.pluginPath),failures:Q,warnings:W}}import{existsSync as f3}from"node:fs";import{createRequire as wB}from"node:module";import{dirname as TZ,join as R8}from"node:path";import{fileURLToPath as kO}from"node:url";var NB={};N(NB,{resolveSubprocessRuntimeExecutable:()=>K3,buildSubprocessSandboxCommand:()=>EB,SubprocessSandbox:()=>M8,CLINE_JS_RUNTIME_PATH_ENV:()=>RB});import{spawn as SO}from"node:child_process";import{basename as bO}from"node:path";import{augmentNodeCommandForDebug as yO,withResolvedClineBuildEnv as hO}from"@cline/shared";function qB($){if($ instanceof Error)return $;return Error(String($))}var RB="CLINE_JS_RUNTIME_PATH";function MB($){let Z=$?.trim();if(!Z)return!1;let Q=bO(Z).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function K3($={}){let Z=$.env??process.env,Q=$.runtimeExecutable?.trim()||Z[RB]?.trim();if(Q)return Q;let W=$.execPath?.trim()||process.execPath;if(MB(W))return W;for(let J of[Z.BUN_EXEC_PATH,Z.npm_node_execpath,Z.NODE]){let X=J?.trim();if(X&&MB(X))return X}return"node"}function EB($,Z={}){let Q=K3({env:Z.env,execPath:Z.execPath,runtimeExecutable:Z.runtimeExecutable});return yO([Q,...$],{env:Z.env,execArgv:Z.execArgv,debugRole:Z.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class M8{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=EB($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=SO(Z[0]??K3(this.options),Z.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:hO(process.env),windowsHide:!0});this.process=Q;let W="",J=(X)=>{let Y=W+X;W=Y.length>4000?Y.slice(-4000):Y};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(X)=>{J(X)}),Q.on("message",(X)=>{this.onMessage(X)}),Q.on("error",(X)=>{this.failPending(Error(`${this.processLabel} process error: ${qB(X).message}`))}),Q.on("exit",(X,Y)=>{this.process=null;let j=W.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(X)}, signal=${String(Y)})${j?`: ${j}`:""}`))})}async call($,Z,Q={}){this.start();let W=this.process;if(!W||W.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let J=`req_${++this.requestCounter}`,X={type:"call",id:J,method:$,args:Z};return await new Promise((Y,j)=>{let V={resolve:(H)=>Y(H),reject:j};if((Q.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(J),this.shutdown().catch(()=>{}),j(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(J,V),W.send(X,(H)=>{if(!H)return;let B=this.clearPendingRequest(J);if(!B)return;B.reject(Error(`${this.processLabel} failed to send call "${$}": ${qB(H).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((Z)=>{let Q=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}Z()},300);$.once("exit",()=>{clearTimeout(Q),Z()});try{$.kill("SIGTERM")}catch{clearTimeout(Q),Z()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let Z=this.clearPendingRequest($.id);if(!Z)return;if($.ok){Z.resolve($.result);return}Z.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[Z,Q]of this.pending.entries()){if(this.pending.delete(Z),Q.timeout)clearTimeout(Q.timeout);Q.reject($)}}}function IO($){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 S6($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function xO(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function gO(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=wB($).resolve(`${xO()}/package.json`),W=R8(TZ(Q),"extensions","plugin-sandbox-bootstrap.js");return f3(W)?W:void 0}catch{return}}function mO(){let $=process.execPath?.trim();if(!$)return;let Z=R8(TZ(TZ($)),"extensions","plugin-sandbox-bootstrap.js");return f3(Z)?Z:void 0}function vO(){let $=TZ(kO(import.meta.url)),Z=wB(import.meta.url),Q=[R8($,"plugin-sandbox-bootstrap.js"),R8($,"extensions","plugin-sandbox-bootstrap.js"),R8($,"agents","plugin-sandbox-bootstrap.js"),gO(),mO()];for(let X of Q.filter((Y)=>typeof Y==="string"))if(f3(X))return{file:X};let W=R8($,"plugin-sandbox-bootstrap.ts"),J="jiti";try{J=Z.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(J)});`,`const jiti = createJiti(${JSON.stringify(W)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(W)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
|
|
200
|
+
`)}}var F3=vO();function A3($,Z,Q){if(typeof $==="number"&&$>0)return $;if(Q){let W=process.env[Q];if(W){let J=Number(W);if(Number.isInteger(J)&&J>0)return J}}return Z}async function E8($){let Z=new M8({name:"plugin-sandbox",..."file"in F3?{bootstrapFile:F3.file}:{bootstrapScript:F3.script},onEvent:$.onEvent}),Q=A3($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),W=A3($.hookTimeoutMs,3000),J=A3($.contributionTimeoutMs,60000),X={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},Y,j=()=>{return Y??=Z.call("initialize",X,{timeoutMs:Q}).finally(()=>{Y=void 0}),Y},V;try{V=await Z.call("initialize",X,{timeoutMs:Q})}catch(G){throw await Z.shutdown().catch(()=>{}),G}let H=V.plugins.map(IO);return{extensions:H.map((G)=>{let K={name:G.name,__clinePluginPath:G.pluginPath,manifest:G.manifest,setup:(F)=>{cO(F,Z,G,J,j),uO(F,Z,G,J,j),dO(F,Z,G,J,j),pO(F,Z,G,J,j),lO(F,G)}};return K.hooks=iO(Z,G,W,j),K}),failures:V.failures,pluginPaths:H.map((G)=>G.pluginPath),shutdown:async()=>{await Z.shutdown()},warnings:V.warnings}}function cO($,Z,Q,W,J){for(let X of Q.contributions?.tools??[]){let Y={name:X.name,description:X.description??"",inputSchema:X.inputSchema??{type:"object",properties:{}},timeoutMs:X.timeoutMs,retryable:X.retryable,execute:async(j,V)=>{try{return await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:j,context:V},{timeoutMs:W})}catch(H){if(!S6(H))throw H;return await J(),await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:j,context:V},{timeoutMs:W})}}};$.registerTool(Y)}}function uO($,Z,Q,W,J){for(let X of Q.contributions?.commands??[])$.registerCommand({name:X.name,description:X.description,handler:async(Y)=>{try{return await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:Y},{timeoutMs:W})}catch(j){if(!S6(j))throw j;return await J(),await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:Y},{timeoutMs:W})}}})}function dO($,Z,Q,W,J){for(let X of Q.contributions?.rules??[])$.registerRule({id:X.ruleId,source:X.source,content:X.hasContentHandler===!0?async()=>{try{return await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:W})}catch(Y){if(!S6(Y))throw Y;return await J(),await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:W})}}:X.content??""})}function lO($,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 pO($,Z,Q,W,J){for(let X of Q.contributions?.messageBuilders??[])$.registerMessageBuilder({name:X.name,async build(Y){try{let j=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:Y},{timeoutMs:W});return CB(j)?j:Y}catch(j){if(!S6(j))throw j;await J();let V=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:Y},{timeoutMs:W});return CB(V)?V:Y}}})}function CB($){return Array.isArray($)&&$.every((Z)=>typeof Z==="object"&&Z!==null&&("role"in Z)&&("content"in Z))}function rO($,Z,Q,W,J){return async(X)=>{try{return await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:X},{timeoutMs:W})}catch(Y){if(!S6(Y))throw Y;return await J(),await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:X},{timeoutMs:W})}}}function iO($,Z,Q,W){let J={};for(let X of Z.hooks??[])J[X]=rO($,Z.pluginId,X,Q,W);return Object.keys(J).length>0?J:void 0}var D3="package.json",$q="package";function b6($){return tO($)}function y6($){return oO($)}function Zq($){try{return MZ($)&&aO($).isDirectory()}catch{return!1}}function L3($){let Z=[],Q=new Set;for(let W of $){let J=qZ(W);if(Q.has(J))continue;Q.add(J),Z.push(J)}return Z}function SB($){let Z=L3($);return XZ(Z)}function bB($){return b6($).flatMap((Z)=>y6(Z)).filter((Z)=>MZ(Z))}function Qq($,Z){let Q=[];for(let W of $)try{Q.push(...PB([W],Z))}catch{}return Q}function U3($){return typeof $==="object"&&$!==null}function Wq($){try{let Z=JSON.parse(nO(RZ($,D3),"utf8"));if(!U3(Z)||!U3(Z.cline))return[];let Q=Z.cline.plugins;if(!Array.isArray(Q))return[];let W=[];for(let J of Q){if(typeof J==="string"){W.push(J);continue}if(!U3(J)||!Array.isArray(J.paths))continue;for(let X of J.paths)if(typeof X==="string")W.push(X)}return W}catch{return[]}}function yB($,Z){let Q=qZ(Z);return Wq($).some((W)=>qZ($,W)===Q)}function Jq($,Z){return sO($)===$q&&MZ(RZ(OZ($),D3))&&yB(OZ($),Z)}function Xq($){let Z=qZ($),Q=[],W=OZ(Z);while(!0){if(Jq(W,Z)){Q.push(W);break}if(MZ(RZ(W,D3))){if(yB(W,Z))Q.push(W);break}let J=OZ(W);if(J===W)break;W=J}return L3(Q)}function c1($={}){let Z=$.cwd??process.cwd(),Q=bB($.workspacePath),W=PB($.pluginPaths??[],Z);return SB([...W,...Q])}function Yq($={}){let Z=$.cwd??process.cwd(),Q=bB($.workspacePath),W=Qq($.pluginPaths??[],Z);return SB([...W,...Q])}function u1($){let Z=[];for(let Q of $)for(let W of Xq(Q)){let J=RZ(W,eO);if(Zq(J))Z.push(J)}return L3(Z)}function hB($={}){return u1(Yq($))}async function N8($={}){let Z=c1($);if(Z.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let W=await K2(Z,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:W.plugins,failures:W.failures,pluginPaths:W.pluginPaths,warnings:W.warnings}}let Q=await E8({pluginPaths:Z,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:Q.extensions??[],shutdown:Q.shutdown,failures:Q.failures,pluginPaths:Q.pluginPaths,warnings:Q.warnings}}import{execFile as jq}from"node:child_process";import{promisify as Vq}from"node:util";var Hq=Vq(jq);function _3($,Z){$?.log(Z,{severity:"warn"})}function Bq($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))return;let Q=Z;if(!Q.latest||!Array.isArray(Q.history))return;let W=Q.latest,J=Q.history.filter((X)=>!!X&&typeof X==="object"&&typeof X.ref==="string"&&typeof X.createdAt==="number"&&typeof X.runCount==="number");if(typeof W.ref!=="string"||typeof W.createdAt!=="number"||typeof W.runCount!=="number")return;return{latest:W,history:J}}async function F2($,Z){let Q=await Hq("git",["-C",$,...Z],{windowsHide:!0});return{stdout:Q.stdout.trim(),stderr:Q.stderr.trim()}}async function z3($,Z){if(!$)return;let Q=`refs/cline/checkpoints/${Z}/`;try{let{stdout:W}=await F2($,["for-each-ref","--format=%(refname)",Q]),J=W.trim().split(`
|
|
201
|
+
`).filter(Boolean);await Promise.allSettled(J.map((X)=>F2($,["update-ref","-d",X])))}catch{}}async function kB($,Z,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((W)=>F2($,["update-ref",`refs/cline/checkpoints/${Z}/${W.runCount}`,W.ref])))}function Gq($,Z){let Q=$.findIndex((W)=>W.runCount===Z.runCount);if(Q<0)return[...$,Z];return $.map((W,J)=>J===Q?Z:W)}function IB($){let Z=$.initialRunCount??0,Q,W=async()=>{if(Q!==void 0)return Q;try{Q=(await F2($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Q=!1}return Q},J=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:Z});if(!await W())return;let X=async(H)=>{try{let G=(await F2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:Z,kind:"commit"}}catch(B){_3($.logger,`${H}: ${B instanceof Error?B.message:String(B)}`);return}},Y=`cline checkpoint session=${$.sessionId} run=${Z}`,j="";try{j=(await F2($.cwd,["stash","create",Y])).stdout.trim()}catch(H){return _3($.logger,`Checkpoint snapshot failed: ${H instanceof Error?H.message:String(H)}`),X("Checkpoint HEAD fallback failed")}if(!j)return X("Checkpoint HEAD fallback failed");let V=`refs/cline/checkpoints/${$.sessionId}/${Z}`;try{await F2($.cwd,["update-ref",V,j])}catch(H){_3($.logger,`Checkpoint store failed: ${H instanceof Error?H.message:String(H)}`);return}return{ref:j,createdAt:Date.now(),runCount:Z,kind:"stash"}};return{beforeRun:async({snapshot:X})=>{if(X.parentAgentId!=null)return;Z+=1;return},beforeModel:async({snapshot:X})=>{if(X.parentAgentId!=null||X.iteration!==1||Z<1)return;let Y=await J();if(!Y)return;let j=await $.readSessionMetadata(),V=Bq(j);if(V?.latest.ref===Y.ref)return;let H=Gq(V?.history??[],Y);await $.writeSessionMetadata({...j??{},checkpoint:{latest:Y,history:H}});return}}}import{spawn as zq}from"node:child_process";import{appendFileSync as Tq,readFileSync as Oq}from"node:fs";import{join as qq}from"node:path";import{augmentNodeCommandForDebug as mB,withResolvedClineBuildEnv as q3}from"@cline/shared";import{ensureHookLogDir as xB}from"@cline/shared/storage";function C8($,Z){if(!Z)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:Z}}import{existsSync as Kq,readdirSync as Fq}from"node:fs";import{basename as Aq,extname as fq,join as Uq}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as EZ,resolveHooksConfigSearchPaths as Dq}from"@cline/shared/storage";function h6($){return Dq($)}var w8;((B)=>{B.TaskStart="TaskStart";B.TaskResume="TaskResume";B.TaskCancel="TaskCancel";B.TaskComplete="TaskComplete";B.TaskError="TaskError";B.PreToolUse="PreToolUse";B.PostToolUse="PostToolUse";B.UserPromptSubmit="UserPromptSubmit";B.PreCompact="PreCompact";B.SessionShutdown="SessionShutdown"})(w8||={});var k6={["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"},Lq=new Map(Object.values(w8).map(($)=>[$.toLowerCase(),$])),_q=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function I6($){let Z=fq($).toLowerCase();if(!_q.has(Z))return;let Q=Aq($,Z).trim().toLowerCase();return Lq.get(Q)}function q$($){let Z=[],Q=new Set,W=h6($).filter((J)=>Kq(J));for(let J of W)try{for(let X of Fq(J,{withFileTypes:!0})){if(!X.isFile())continue;let Y=I6(X.name);if(!Y)continue;let j=Uq(J,X.name);if(Q.has(j))continue;Q.add(j),Z.push({fileName:Y,hookEventName:k6[Y],path:j})}}catch{}return Z.sort((J,X)=>J.path.localeCompare(X.path))}function CZ($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))Z[Q]=typeof W==="string"?W:JSON.stringify(W);return Z}function NZ($,Z,Q){let W=Q instanceof Error?`: ${Q.message}`:"",J=`${Z}${W}`;if($){try{$.log(J,{severity:"warn",...Q!==void 0?{error:Q}:{}})}catch{}return}console.warn(J)}function Mq($,Z){if(!Z)return $;if(!$)return{...Z};let Q=[$.context,Z.context].filter((J)=>typeof J==="string"&&J.length>0).join(`
|
|
202
|
+
`),W=[...$.appendMessages??[],...Z.appendMessages??[]];return{cancel:$.cancel===!0||Z.cancel===!0?!0:void 0,review:$.review===!0||Z.review===!0?!0:void 0,context:Q||void 0,overrideInput:Z.overrideInput!==void 0?Z.overrideInput:$.overrideInput,systemPrompt:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,appendMessages:W.length>0?W:void 0}}function Rq($){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 T3($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function O0($,Z){let Q=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",W={rootSessionId:Z.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:W,workspaceRoots:Z.workspacePath?[Z.workspacePath]:[],workspaceInfo:Z.workspaceInfo,userId:Q,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function Eq($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
|
|
203
|
+
`).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse hook stdout JSON"}}}async function Nq($,Z){let Q=$.stdin;if(!Q)throw Error("hook command failed to create stdin");await new Promise((W,J)=>{let X=!1,Y=()=>{Q.off("error",V),Q.off("finish",H),$.off("close",B)},j=(G)=>{if(X)return;if(X=!0,Y(),G){let K=G.code;if(K==="EPIPE"||K==="ERR_STREAM_DESTROYED"){W();return}J(G);return}W()},V=(G)=>j(G),H=()=>j(),B=()=>j();Q.on("error",V),Q.once("finish",H),$.once("close",B);try{Q.end(Z)}catch(G){j(G)}})}async function vB($,Z){if(Z.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await gB($,Z)}catch(Q){let W=Pq(Z.command,process.platform,Q);if(!W)throw Q;return await gB($,{...Z,command:W})}}async function gB($,Z){let Q=mB(Z.command,{env:Z.env,debugRole:"hook"}),W=zq(Q[0],Q.slice(1),{cwd:Z.cwd,env:q3(Z.env),stdio:Z.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Z.detached,windowsHide:!0}),J=new Promise((K)=>{W.once("spawn",()=>K())}),X=new Promise((K,F)=>{W.once("error",(A)=>F(A))}),Y=JSON.stringify($);if(await Promise.race([J,X]),await Nq(W,Y),Z.detached){W.unref();return}if(!W.stdout||!W.stderr)throw Error("hook command failed to create stdout/stderr");let j="",V="",H=!1,B;W.stdout.on("data",(K)=>{j+=K.toString()}),W.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((Z.timeoutMs??0)>0)B=setTimeout(()=>{H=!0,W.kill("SIGKILL")},Z.timeoutMs);W.once("close",(F)=>{if(B)clearTimeout(B);let{parsedJson:A,parseError:L}=Eq(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:H})})});return await Promise.race([G,X])}function Cq($){try{let Q=Oq($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Q?.startsWith("#!"))return;let W=Q.slice(2).trim();if(!W)return;let J=W.split(/\s+/).filter(Boolean);return J.length>0?J:void 0}catch{return}}function wq($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function Pq($,Z=process.platform,Q){if(Z!=="win32"||!wq(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function cB($){if($.length===0)return;let[Z,...Q]=$,W=Z.replace(/\\/g,"/").toLowerCase(),J=W.split("/").at(-1)??W;if(J==="env")return cB(Q);if(J==="bash"||J==="sh"||J==="zsh")return[J,...Q];if(J==="python3"||J==="python")return process.platform==="win32"?["py","-3",...Q]:[J,...Q];return $}function Sq($){let Z=Cq($);if(Z&&Z.length>0)return[...cB(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 mB(["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 bq($){let Z={};for(let Q of q$($)){if(!Q.hookEventName)continue;let W=Q.hookEventName,J=Z[W]??[];J.push(Sq(Q.path)),Z[W]=J}return Z}async function yq($){let Z;for(let Q of $.commands){let W=Q.join(" ");try{let J=await vB($.payload,{command:Q,cwd:$.cwd,env:q3(process.env),detached:!1,timeoutMs:$.timeoutMs});if(J?.timedOut){NZ($.logger,`hook command timed out: ${W}`);continue}if(J?.parseError){NZ($.logger,`hook command returned invalid JSON control output: ${W} (${J.parseError})`);continue}Z=Mq(Z,Rq(J?.parsedJson))}catch(J){NZ($.logger,`hook command failed: ${W}`,J)}}return Z}function A2($){for(let Z of $.commands){let Q=Z.join(" ");vB($.payload,{command:Z,cwd:$.cwd,env:q3(process.env),detached:!0}).catch((W)=>{NZ($.logger,`hook command failed: ${Q}`,W)})}}function M$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function O3($,Z){return{...M$($.snapshot),userMessage:Z}}function uB($){return{...M$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function dB($){return{...M$($.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 lB($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function hq($){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 P8($){let Z={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(W)=>{let J=`${JSON.stringify({ts:new Date().toISOString(),...W})}
|
|
204
|
+
`,Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??qq(xB(),"hooks.jsonl");xB(Y),Tq(Y,J,"utf8")};return{beforeRun:async(W)=>{let J=O3(W,"");Q({...O0(J,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(W)=>{let J=uB(W);Q({...O0(J,Z),hookName:"tool_call",iteration:J.iteration,tool_call:{id:J.call.id,name:J.call.name,input:J.call.input},preToolUse:{toolName:J.call.name,parameters:CZ(J.call.input)}});return},afterTool:async(W)=>{let J=dB(W);Q({...O0(J,Z),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:CZ(J.record.input),result:typeof J.record.output==="string"?J.record.output:JSON.stringify(J.record.output),success:!J.record.error,executionTimeMs:J.record.durationMs}});return},afterRun:async({snapshot:W,result:J})=>{let X=M$(W);if(J.status==="completed"){Q({...O0(X,Z),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||T3(J.error?.message)){Q({...O0(X,Z),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Q({...O0(X,Z),hookName:"agent_error",iteration:J.iterations,error:{name:J.error.name,message:J.error.message,stack:J.error.stack}})},onEvent:async(W)=>{if(W.type!=="message-added"||W.message.role!=="user")return;let J=O3({snapshot:W.snapshot},lB(W.message.content));Q({...O0(J,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function x6($){let Z=bq($.workspacePath);if(!Object.values(Z).some((G)=>G.length>0))return;let W=async(G,K)=>{let F=Z[K]??[];if(F.length===0)return;A2({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...O0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...O0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=Z.prompt_submit??[];if(K.length>0)A2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},X=async(G)=>{let K=Z.tool_call??[];if(K.length===0)return;return yq({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...O0(G,$),hookName:"tool_call",iteration:G.iteration,tool_call:{id:G.call.id,name:G.call.name,input:G.call.input},preToolUse:{toolName:G.call.name,parameters:CZ(G.call.input)}}})},Y=async(G)=>{let K=Z.tool_result??[];if(K.length===0)return;A2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:CZ(G.record.input),result:typeof G.record.output==="string"?G.record.output:JSON.stringify(G.record.output),success:!G.record.error,executionTimeMs:G.record.durationMs}}})},j=async(G)=>{let K=Z.agent_end??[];if(K.length===0)return;A2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"agent_end",iteration:G.iteration,turn:G.turn,taskComplete:{taskMetadata:{}}}})},V=async(G)=>{let K=Z.agent_error??[];if(K.length===0)return;A2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},H=async(G)=>{if(T3(G.reason)){let F=Z.agent_abort??[];if(F.length>0)A2({commands:F,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=Z.session_shutdown??[];if(K.length===0)return;A2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"session_shutdown",reason:G.reason}})},B={};if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0||(Z.prompt_submit?.length??0)>0){if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0)B.beforeRun=async(G)=>{let K=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await W(M$(G.snapshot),K);return};if((Z.prompt_submit?.length??0)>0)B.onEvent=async(G)=>{if(G.type!=="message-added"||G.message.role!=="user")return;await J(O3({snapshot:G.snapshot},lB(G.message.content)))}}if((Z.tool_call?.length??0)>0)B.beforeTool=async(G)=>{let K=await X(uB(G));return hq(K)};if((Z.tool_result?.length??0)>0)B.afterTool=async(G)=>{await Y(dB(G));return};if((Z.agent_end?.length??0)>0)B.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await j({...M$(G),iteration:K.iterations,turn:{outputText:K.outputText,status:K.status}})};if((Z.agent_error?.length??0)>0||(Z.agent_abort?.length??0)>0||(Z.session_shutdown?.length??0)>0){let G=B.afterRun;B.afterRun=async(K)=>{await G?.(K);let{snapshot:F,result:A}=K;if(A.status==="aborted"||T3(A.error?.message)){await H({...M$(F),reason:A.error?.message});return}if(A.error)await V({...M$(F),iteration:A.iterations,error:A.error})}}return B}function S8($){return C8("core.hook_config_files",x6($))}function f2($,Z){let Q=$.map((W)=>W[Z]).filter((W)=>typeof W==="function");if(Q.length===0)return;return async(W)=>{let J;for(let X of Q){let Y=await X(W);if(!Y||typeof Y!=="object")continue;let j=Y;J={...J??{},...j,stop:J?.stop===!0||j.stop===!0?!0:j.stop,options:J?.options||j.options?{...J?.options??{},...j.options??{}}:void 0}}return J}}function U2($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:f2(Z,"beforeRun"),afterRun:f2(Z,"afterRun"),beforeModel:f2(Z,"beforeModel"),afterModel:f2(Z,"afterModel"),beforeTool:f2(Z,"beforeTool"),afterTool:f2(Z,"afterTool"),onEvent:f2(Z,"onEvent")}}var pB={};N(pB,{normalizeRuntimeCapabilities:()=>q0});function q0(...$){let Z,Q;for(let J of $){if(!J)continue;if(J.toolExecutors)Z={...Z??{},...J.toolExecutors};if(J.requestToolApproval)Q=J.requestToolApproval}let W=Z&&Object.keys(Z).length>0;if(!W&&!Q)return;return{...W?{toolExecutors:Z}:{},...Q?{requestToolApproval:Q}:{}}}var $G={};N($G,{toProviderConfig:()=>l0,emptyStoredProviderSettings:()=>N$,StoredProviderSettingsSchema:()=>k8,StoredProviderSettingsEntrySchema:()=>oZ,ProviderSettingsSchemaTyped:()=>h8});import{z as E$}from"zod";var eB={};N(eB,{toProviderConfig:()=>l0,safeParseSettings:()=>sZ,safeCreateProviderConfig:()=>y3,parseSettings:()=>aZ,normalizeProviderId:()=>y8,isBuiltInProviderId:()=>S3,createProviderConfig:()=>b3,SapSettingsSchema:()=>rZ,ReasoningSettingsSchema:()=>uZ,ProviderSettingsSchema:()=>R$,ProviderProtocolSchema:()=>mZ,ProviderIdSchema:()=>u6,ProviderClientSchema:()=>vZ,OcaSettingsSchema:()=>iZ,ModelCatalogSettingsSchema:()=>nZ,GcpSettingsSchema:()=>lZ,BUILT_IN_PROVIDER_IDS:()=>P3,BUILT_IN_PROVIDER:()=>c6,AzureSettingsSchema:()=>pZ,AwsSettingsSchema:()=>dZ,AuthSettingsSchema:()=>cZ});import*as d0 from"@cline/llms";import{z as C}from"zod";var tB={};N(tB,{resolveProviderConfig:()=>v6,getProviderConfig:()=>gZ,getLiveModelsCatalog:()=>b8,clearPublicModelsCatalogCache:()=>WM,clearPrivateModelsCatalogCache:()=>w3,clearLiveModelsCatalogCache:()=>C3,OPENAI_COMPATIBLE_PROVIDERS:()=>m6,DEFAULT_MODELS_CATALOG_URL:()=>hZ});import*as s from"@cline/llms";function M3($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let W of[Q.id,Q.name,Q.model])if(typeof W==="string"&&W.trim())return W.trim()}return""}).filter((Z)=>Z.length>0)}function kq($,Z){let Q=M3($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let W=$,J=M3(W.data??W.models);if(J.length>0)return J;if(W.models&&typeof W.models==="object"&&!Array.isArray(W.models)){let Y=Object.keys(W.models).filter((j)=>j.trim().length>0);if(Y.length>0)return Y}let X=W.providers?.[Z];if(X&&typeof X==="object"){let j=M3(X.models??X);if(j.length>0)return j}return[]}async function wZ($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return kq(await Q.json(),Z)}function rB($){return $.replace(/\/+$/,"")}function PZ($,Z,Q){let W=Q?.trim();if(!W)return;let J=$?.trim();if(!J||!Z?.trim())return W;try{let X=new URL(W),Y=new URL(Z),j=new URL(J);if(X.origin!==Y.origin)return W;let V=rB(Y.pathname),H=rB(j.pathname);if(V&&X.pathname.startsWith(`${V}/`)){let B=X.pathname.slice(V.length);j.pathname=`${H}${B}`}else j.pathname=X.pathname;return j.search=X.search,j.hash=X.hash,j.toString()}catch{return W}}function Iq($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function xq($){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 gq=Object.values(s.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:Iq($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),nB=Object.fromEntries(gq.map(($)=>[$.id,$]));function mq($){return nB[$]}function vq(){return Object.fromEntries(Object.entries(nB).filter(([,$])=>xq($)))}function aB($=[]){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 hZ="https://models.dev/api.json",cq=600000,sB=300000,uq=5000,yZ=new Map,g6=new Map,R3=new Map,SZ=new Map;async function dq(){return s.getGeneratedProviderModels()}async function lq($,Z={},Q={},W={},J={},X={}){if($==="litellm")return s.sortModelsByReleaseDate(W);let Y=await dq(),j=s.resolveProviderModelCatalogKeys($),V=Object.assign({},...j.map((K)=>Y[K]??{})),H=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),B=Object.keys(J).length>0;if(H&&B)return s.sortModelsByReleaseDate({...J,...X});if($==="openai-codex")return s.sortModelsByReleaseDate({...Z,...s.filterOpenAICodexModels(Q),...J,...X});if($==="cline-pass"&&Object.keys(Q).length>0)return s.sortModelsByReleaseDate({...Q,...X});let G=s.sortModelsByReleaseDate({...V,...Z,...Q,...W,...J});if($==="cline")return s.sortModelsByReleaseDate({...s.preferCanonicalModelIds(G,s.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...X});return s.sortModelsByReleaseDate({...G,...X})}function pq($,Z){let Q=s.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((W)=>Z[W]??{}))}function kZ($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function N3($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function rq($){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 iq($,Z){return`${$}:${kZ(Z.baseUrl)}:${rq(N3(Z)??"")}`}async function IZ($,Z,Q=uq){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await fetch($,{...Z,signal:W.signal})}finally{clearTimeout(J)}}function D2($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function xZ($,Z){let Q=["streaming","tools"];return D2(Q,"images",Boolean(Z.supportsImages)),D2(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),D2(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 nq($,Z){let Q=await IZ("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;if(j.includes("whisper")||j.includes("tts")||j.includes("embedding"))continue;let V=Y.supported_features??[];X[j]=xZ(j,{name:j,contextWindow:Y.context_length,maxInputTokens:Y.context_length,maxTokens:Y.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return X}function iB($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function aq($,Z){let Q=await IZ("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":Z}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;X[j]=xZ(j,{name:j,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return X}async function sq($,Z){let W=`${(kZ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await IZ(W,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!J.ok)throw Error(`Poolside model refresh failed: HTTP ${J.status}`);let Y=(await J.json())?.data??[],j={};for(let V of Y){let H=V.id?.trim();if(!H)continue;let B=V.supported_features??[],G=V.supported_sampling_parameters??[],K=V.input_modalities??[],F=["streaming"];D2(F,"tools",B.includes("tools")),D2(F,"reasoning",B.includes("reasoning")),D2(F,"temperature",G.includes("temperature")),D2(F,"images",K.includes("image"));let A={input:iB(V.pricing?.prompt),output:iB(V.pricing?.completion)};j[H]={id:H,name:V.name??H,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:A.input!==void 0||A.output!==void 0?A:void 0,status:"active"}}return j}function oq($){let Z=kZ($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function tq($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function eq($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,W=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${W}`}async function $M($,Z){let Q=oq($.baseUrl),W=[],J=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let X of tq(Q))for(let[Y,j]of J)try{let V=await IZ(X,{method:"GET",headers:{accept:"application/json",...j}});if(V.ok){let B=(await V.json())?.data??[],G={};for(let K of B){let F=K.model_name?.trim(),L=K.litellm_params?.model?.trim()||F;if(!L)continue;let f=K.model_info,D=xZ(L,{name:F??L,maxTokens:f?.max_output_tokens??f?.max_tokens,maxInputTokens:f?.max_input_tokens??f?.max_tokens,supportsImages:f?.supports_vision,supportsPromptCache:f?.supports_prompt_caching,supportsReasoning:f?.supports_reasoning});if(G[L]=D,F)G[F]={...D,id:F,name:F}}return G}W.push(`${new URL(X).pathname} (${Y}): ${await eq(V)}`)}catch(V){let H=V instanceof Error?V.message:String(V);W.push(`${new URL(X).pathname} (${Y}): ${H}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${W.join("; ")}`)}var oB={baseten:nq,hicap:aq,litellm:$M,poolside:sq},E3=new Map,bZ=new Map;function ZM($,Z){return`${$}:${kZ(Z.baseUrl)}`}async function QM($,Z,Q){let W=s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=PZ(Q.baseUrl,W?.provider.baseUrl,W?.provider.modelsSourceUrl);if(!J)return{};let X=Z?.cacheTtlMs??sB,Y=ZM($,Q),j=Date.now(),V=E3.get(Y);if(V&&V.expiresAt>j)return V.data;let H=bZ.get(Y);if(H)return H;let B=wZ(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,xZ(F,{name:F})]));return E3.set(Y,{data:K,expiresAt:j+X}),K}).finally(()=>{bZ.delete(Y)});return bZ.set(Y,B),B}function WM(){E3.clear(),bZ.clear()}async function JM($,Z){let Q=N3(Z);if(!Q)return{};let W=oB[$];if(!W)return{};return W(Z,Q)}function XM($,Z,Q){if(!Q)return!1;if(!oB[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(N3(Q))}async function YM($,Z,Q){let W=Z?.cacheTtlMs??sB,J=iq($,Q),X=Date.now(),Y=R3.get(J);if(Y&&Y.expiresAt>X)return Y.data;let j=SZ.get(J);if(j)return j;let V=JM($,Q).then((H)=>{return R3.set(J,{data:H,expiresAt:X+W}),H}).finally(()=>{SZ.delete(J)});return SZ.set(J,V),V}async function jM($){return s.fetchLiveProviderModels($,globalThis.fetch)}async function b8($={}){let Z=$.url??hZ,Q=$.cacheTtlMs??cq,W=Date.now(),J=yZ.get(Z);if(J&&J.expiresAt>W)return J.data;let X=g6.get(Z);if(X)return X;let Y=jM(Z).then((j)=>{return yZ.set(Z,{data:j,expiresAt:W+Q}),j}).finally(()=>{g6.delete(Z)});return g6.set(Z,Y),Y}function C3($){if($){yZ.delete($),g6.delete($);return}yZ.clear(),g6.clear()}function w3(){R3.clear(),SZ.clear()}function VM($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:aB(Q.capabilities)}]))}var m6=VM(vq());function gZ($){let Z=mq($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:aB(Z.capabilities)}}async function v6($,Z,Q){let W=gZ($);if(!W)return;try{let J=Z?.loadLatestOnInit?await b8(Z):void 0,X=J?pq($,J):{},Y=Q&&XM($,Z,Q)?await YM($,Z,Q):{},V=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:W.modelId,baseUrl:W.baseUrl}:Q,H=V?await QM($,Z,V).catch(()=>({})):{},B=await lq($,W.knownModels,X,Y,H,Q?.knownModels);return{...W,knownModels:B}}catch(J){if(Z?.failOnError)throw J;if($==="litellm")return{...W,knownModels:{}};return W}}var c6=d0.BUILT_IN_PROVIDER,P3=d0.BUILT_IN_PROVIDER_IDS,S3=d0.isBuiltInProviderId,y8=d0.normalizeProviderId,u6=C.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),mZ=C.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),vZ=C.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),cZ=C.object({apiKey:C.string().optional(),accessToken:C.string().optional(),refreshToken:C.string().optional(),expiresAt:C.number().int().positive().optional(),accountId:C.string().optional()}),HM=C.enum(["none","low","medium","high","xhigh"]),uZ=C.object({enabled:C.boolean().optional(),effort:HM.optional(),budgetTokens:C.number().int().positive().optional()}),dZ=C.object({accessKey:C.string().optional(),secretKey:C.string().optional(),sessionToken:C.string().optional(),region:C.string().optional(),profile:C.string().optional(),authentication:C.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:C.boolean().optional(),useCrossRegionInference:C.boolean().optional(),useGlobalInference:C.boolean().optional(),endpoint:C.string().url().optional(),customModelBaseId:C.string().optional()}),lZ=C.object({projectId:C.string().optional(),region:C.string().optional()}),pZ=C.object({apiVersion:C.string().optional(),useIdentity:C.boolean().optional()}),rZ=C.object({clientId:C.string().optional(),clientSecret:C.string().optional(),tokenUrl:C.string().url().optional(),resourceGroup:C.string().optional(),deploymentId:C.string().optional(),useOrchestrationMode:C.boolean().optional(),api:C.enum(["orchestration","foundation-models"]).optional(),defaultSettings:C.record(C.string(),C.unknown()).optional()}),iZ=C.object({mode:C.enum(["internal","external"]).optional(),usePromptCache:C.boolean().optional()}),nZ=C.object({loadLatestOnInit:C.boolean().optional(),loadPrivateOnAuth:C.boolean().optional(),url:C.string().url().optional(),cacheTtlMs:C.number().int().positive().optional(),failOnError:C.boolean().optional()}),R$=C.object({provider:u6,apiKey:C.string().optional(),auth:cZ.optional(),model:C.string().optional(),protocol:mZ.optional(),client:vZ.optional(),routingProviderId:u6.optional(),maxTokens:C.number().int().positive().optional(),contextWindow:C.number().int().positive().optional(),baseUrl:C.string().url().optional(),headers:C.record(C.string(),C.string()).optional(),timeout:C.number().int().positive().optional(),reasoning:uZ.optional(),aws:dZ.optional(),gcp:lZ.optional(),azure:pZ.optional(),sap:rZ.optional(),oca:iZ.optional(),region:C.string().optional(),apiLine:C.enum(["china","international"]).optional(),capabilities:C.array(C.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:nZ.optional()});function aZ($){return R$.parse($)}function sZ($){return R$.safeParse($)}function BM($){return $.protocol==="openai-responses"||$.client==="openai"}function l0($,Z={}){let Q=$.provider,W=y8(Q),J=Z.includeKnownModels!==!1,X=$.reasoning?.effort||"none",Y=X==="none"?void 0:X,j=m6[W],V=Object.assign({},...d0.resolveProviderModelCatalogKeys(W).map((L)=>d0.getGeneratedModelsForProvider(L))),H=Object.keys(V)[0],B=X8(W,$),G=$.baseUrl??(W==="oca"?$.oca?.mode==="internal"?x9:g9:j?.baseUrl),K=$.routingProviderId??(BM($)&&W!==c6.OPENAI_NATIVE?c6.OPENAI_NATIVE:void 0),F=J?j?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,A={providerId:Q,clientType:$.client,routingProviderId:K,modelId:$.model??j?.modelId??H??"default",...J?{knownModels:F}:{},apiKey:B,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:Y,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??j?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(A).filter(([L,f])=>f!==void 0))}function b3($){let Z=aZ($);return l0(Z)}function y3($){let Z=sZ($);if(Z.success)return{success:!0,config:l0(Z.data)};return{success:!1,error:Z.error}}var h8=R$;var oZ=E$.object({settings:R$,updatedAt:E$.string().datetime(),tokenSource:E$.enum(["manual","oauth","migration"]).default("manual")}),k8=E$.object({version:E$.literal(1),lastUsedProvider:E$.string().min(1).optional(),providers:E$.record(E$.string(),oZ)});function N$(){return{version:1,providers:{}}}Y1();var JG={};N(JG,{InMemoryWorkspaceManager:()=>x8});import{upsertWorkspaceInfo as AM,WorkspaceManifestSchema as k3}from"@cline/shared";var WG={};N(WG,{normalizeWorkspacePath:()=>d1,generateWorkspaceInfoWithDiagnostics:()=>d6,generateWorkspaceInfo:()=>I8,buildWorkspaceMetadataWithInfo:()=>h3,buildWorkspaceMetadata:()=>l6});import{basename as GM,resolve as KM}from"node:path";import{performance as ZG}from"node:perf_hooks";import{processWorkspaceInfo as QG}from"@cline/shared";import FM from"simple-git";function d1($){return KM($)}async function I8($){return(await d6($)).info}function tZ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function d6($){let Z=d1($),Q={rootPath:Z,hint:GM(Z)},W;try{let J=FM({baseDir:Z});if(!await J.checkIsRepo())return{info:Q,vcsType:"none"};try{let Y=await J.getRemotes(!0);if(Y.length>0){let j=Y.map((V)=>{let H=V.refs.fetch||V.refs.push;return`${V.name}: ${H}`});Q.associatedRemoteUrls=j}}catch(Y){W??=tZ(Y)}try{let Y=(await J.revparse(["HEAD"])).trim();if(Y.length>0)Q.latestGitCommitHash=Y}catch(Y){W??=tZ(Y)}try{let Y=(await J.branch()).current.trim();if(Y.length>0)Q.latestGitBranchName=Y}catch(Y){W??=tZ(Y)}return{info:Q,vcsType:"git",error:W}}catch(J){return{info:Q,vcsType:"none",error:tZ(J)}}}async function l6($){let Z=await I8($);return QG(Z)}async function h3($){let Z=ZG.now(),Q=await d6($),W=ZG.now()-Z,J=Q.info;return{workspaceInfo:J,workspaceMetadata:QG(J),durationMs:W,vcsType:Q.vcsType,initError:Q.error}}class x8{manifest;listeners=new Set;constructor($){this.manifest=k3.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await I8($);return this.manifest=AM(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=d1($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=k3.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let W=await this.addWorkspacePath(Z);return this.manifest=k3.parse({...this.manifest,currentWorkspacePath:W.rootPath}),this.emit({type:"workspace_switched",workspace:W}),W}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=d1($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}L0();import{createHash as fM}from"node:crypto";var XG=new Set,YG=new Set;function UM($){return fM("sha256").update($).digest("hex")}function DM($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function jG($){if(!$.telemetry)return;let Z=UM($.rootPath),Q=$.rootCount??1;if(!XG.has(Z))XG.add(Z),U9($.telemetry,{root_count:Q,vcs_types:DM($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!YG.has(Z)){YG.add(Z);let W=Error($.initError.message);W.name=$.initError.errorType||"Error",D9($.telemetry,W,{fallback_to_single_root:!0,workspace_count:Q})}}function _M($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function zM($,Z,Q){if(Z.length>0)for(let X of Z)Q?.log(X.message,{severity:"warn"});if($.length===0)return;let W=$.slice(0,3).map(_M).join("; "),J=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${W}${J}. Use --verbose for more details.`,{severity:"warn"});for(let X of $)Q?.log(`Plugin initialization failed (${X.phase}) for ${X.pluginPath}`,{severity:"warn",stack:X.stack,pluginPath:X.pluginPath,pluginName:X.pluginName})}function TM($,Z){let Q=typeof $.thinking==="boolean",W=typeof $.reasoningEffort==="string";if(!Q&&!W)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...W?{effort:$.reasoningEffort}:{}}}function VG($,Z){return LM($,Z)}function OM($){let Z=0;for(let Q of $??[]){if(Q.role!=="user")continue;if(("metadata"in Q&&Q.metadata&&typeof Q.metadata==="object"&&!Array.isArray(Q.metadata)?Q.metadata:void 0)?.kind==="recovery_notice")continue;Z+=1}return Z}function qM($){let Z={...$.storedHeaders??{},...$.configHeaders??{}},Q=$.accountId?.trim()||MM($.accessToken);if(Z.originator="cline",Z.session_id=$.sessionId,Z["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,Q)Z["ChatGPT-Account-Id"]=Q;return Z}function MM($){let Z=$?.trim();if(!Z)return;let Q=R0(Z),W=Q?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let J=Q?.organizations?.[0]?.id;if(typeof J==="string"&&J.length>0)return J;let X=Q?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;return}function RM($,Z,Q,W,J){let X=Q.getProviderSettings($.providerId),Y=W||X?.modelCatalog?{...W??{},...X?.modelCatalog??{}}:void 0,j=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,V={...X??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??X?.apiKey,baseUrl:$.baseUrl??X?.baseUrl,headers:$.providerId==="openai-codex"?qM({sessionId:Z,configHeaders:$.headers,storedHeaders:X?.headers,accountId:X?.auth?.accountId,accessToken:$.apiKey??X?.auth?.accessToken??X?.apiKey}):$.headers??X?.headers,reasoning:TM($,X?.reasoning),modelCatalog:Y},H={...l0(V),...j??{}};if($.knownModels)H.knownModels=$.knownModels;if($.extensionContext)H.extensionContext=$.extensionContext;let G=$.fetch??H.fetch??J;if(G)H.fetch=G;return H}async function HG($){let{input:Z,sessionId:Q,providerSettingsManager:W,defaultTelemetry:J,defaultCapabilities:X,defaultToolPolicies:Y,defaultFetch:j,onPluginEvent:V,onTeamEvent:H,createSubAgentLifecycleCallbacks:B,createSpawnTool:G,localRuntime:K,readSessionMetadata:F,writeSessionMetadata:A}=$,L=T$(Z.config),{modelCatalogDefaults:f,userInstructionService:D,configExtensions:U,onTeamRestored:T,...q}=K??{},z=Object.keys(q).length>0?q:void 0,{workspaceInfo:_,workspaceMetadata:E,durationMs:w,vcsType:y,initError:l}=await h3(L),o=z?.extensionContext,t={...o??{},workspace:{..._,...o?.workspace??{}},session:{...o?.session??{},sessionId:Q},logger:o?.logger??z?.logger,telemetry:o?.telemetry??z?.telemetry??J};jG({telemetry:t.telemetry,rootPath:_.rootPath,workspaceInfo:_,rootCount:1,vcsType:y,durationMs:w,initError:l,featureFlagEnabled:!0});let Q0=S8({cwd:Z.config.cwd,workspacePath:L,rootSessionId:Q,logger:z?.logger,workspaceInfo:_}),Q1=JB(z?.hooks)?void 0:P8({rootSessionId:Q,workspacePath:L,workspaceInfo:_}),l$=U2([z?.hooks,Q1]),r;if(VG(U,"plugins"))try{r=await N8({pluginPaths:z?.pluginPaths,workspacePath:L,cwd:Z.config.cwd,onEvent:V,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:_,session:t.session,client:t.client,user:t.user,logger:t.logger,telemetry:t.telemetry,automation:t.automation}),zM(r.failures,r.warnings,z?.logger)}catch(o2){let ZW=o2 instanceof Error?o2.message:String(o2);z?.logger?.log?.(`plugin loading failed; continuing without plugins (${ZW})`)}let P=tW(Q0?[Q0]:void 0,tW(z?.extensions,YZ(r?.extensions))),B0=VG(U,"plugins")?u1(r?.pluginPaths??[]):void 0,G0={...Z.config,...z??{},sessionId:Q,hooks:l$,extensions:P,extensionContext:t,telemetry:t.telemetry},w0=RM(G0,Q,W,f,j),a2=U2([G0.hooks,G0.checkpoint?.enabled===!0?IB({cwd:G0.cwd,sessionId:Q,logger:G0.logger,createCheckpoint:G0.checkpoint?.createCheckpoint,initialRunCount:OM(Z.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),R1={...G0,providerConfig:w0,workspaceMetadata:E,hooks:a2},G1=Z.toolPolicies??G0.toolPolicies??Y,P4=q0(X,Z.capabilities),s2=P4?.requestToolApproval,K9=P4?.toolExecutors,E1=B?.(R1),F9=new x8({currentWorkspacePath:_.rootPath,workspaces:{[_.rootPath]:_}});return{effectiveInput:Z,config:R1,providerConfig:w0,workspaceMetadata:E,workspaceInfo:_,extensions:P,hooks:a2,toolPolicies:G1,requestToolApproval:s2,pluginSandboxShutdown:r?.shutdown,runtimeBuilderInput:{config:R1,hooks:a2,extensions:P,onTeamEvent:H,createSpawnTool:G,onTeamRestored:T,onSubAgentEvent:E1?.onSubAgentEvent,onSubAgentStart:E1?.onSubAgentStart,onSubAgentEnd:E1?.onSubAgentEnd,userInstructionService:D,pluginSkillDirectories:B0,configExtensions:U,toolExecutors:K9,toolPolicies:G1,workspaceManager:F9,logger:R1.logger,telemetry:R1.telemetry,requestToolApproval:s2}}}import{existsSync as $Q,mkdirSync as EM,readdirSync as NM,rmdirSync as CM,rmSync as wM,unlinkSync as PM}from"node:fs";import{dirname as BG,join as eZ}from"node:path";function J0(){return new Date().toISOString()}function p6($){if(!$||!$Q($))return;try{PM($)}catch{}}function SM($){let Z=_8($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=O6($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class I3{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return eZ(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!$Q(Z))EM(Z,{recursive:!0});return Z}sessionMessagesPath($){return eZ(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return eZ(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!$Q(Z)){Z=BG(Z);continue}try{if(NM(Z).length>0)break;CM(Z)}catch{break}Z=BG(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!$Q($))return;try{wM($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:W,fileStem:J}=SM($),X=this.sessionArtifactsDir(W);return{messagesPath:eZ(X,`${J}.messages.json`)}}}import{resolveDocumentsExtensionPath as bM}from"@cline/shared/storage";L0();function GG($,Z,Q,W,J){if(Q)_9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});else L9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});yM($.telemetry,{workspacePath:W})}function yM($,Z){let Q=bM("Hooks"),W=q$(Z.workspacePath),J=new Map;for(let X of W){let Y=X.hookEventName??"unknown",j=J.get(Y)??{global:0,workspace:0};if(X.path===Q||X.path.startsWith(`${Q}/`))j.global+=1;else j.workspace+=1;J.set(Y,j)}for(let[X,Y]of J.entries())C9($,X,Y.global,Y.workspace)}function KG($,Z){for(let Q of Z.mentions)E9($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)M9($,"file",Q.length);for(let Q of Z.ignoredMentions)R9($,"file","not_found",Q)}var HD={};N(HD,{ProviderSettingsManager:()=>q1});import{chmodSync as GD,existsSync as lY,mkdirSync as Jg,readFileSync as Xg,writeFileSync as Yg}from"node:fs";import{basename as KD,dirname as pY}from"node:path";import{resolveProviderSettingsPath as jg}from"@cline/shared/storage";var M={};N(M,{writeHubDiscovery:()=>wQ,writeGlobalSettings:()=>K1,withHubStartupLock:()=>PQ,verifyHubConnection:()=>f1,updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>l8,updateMcpServerOAuthStateAsync:()=>H5,updateMcpServerOAuthState:()=>O2,updateLocalProvider:()=>u7,uninstallPlugin:()=>Q9,uninstallMarketplaceSkill:()=>q7,uninstallMarketplacePlugin:()=>M7,uninstallMarketplaceMcpServerFromSettings:()=>T7,uninstallMarketplaceEntry:()=>HY,truncateNotificationBody:()=>r5,truncateCommandOutput:()=>o$,toggleDisabledTool:()=>JZ,toTeamProgressLifecycleEvent:()=>X4,toProviderConfig:()=>l0,toHubStatusUrl:()=>NJ,toHubHealthUrl:()=>SQ,toHookConfigFileName:()=>I6,syncPluginMcpServersToSettings:()=>$9,summarizeUsageFromMessages:()=>T8,stopLocalHubServerGracefully:()=>mJ,startLocalOAuthServer:()=>W1,startHubWebSocketServer:()=>d2,startHubServer:()=>xf,startClineDeviceAuth:()=>HW,splitCoreSessionConfig:()=>U5,spawnDetachedHubServerWithRetry:()=>o8,spawnDetachedHubServer:()=>yJ,setTelemetryOptOutGlobally:()=>aV,setMcpServerDisabled:()=>z2,setDisabledTools:()=>kW,setDisabledPlugin:()=>WH,setCompactionStrategyGlobally:()=>eV,setAutoUpdateEnabledGlobally:()=>oV,sendHubCommand:()=>hA,saveProviderOAuthCredentials:()=>n$,saveLocalProviderSettings:()=>qY,saveLocalProviderOAuthCredentials:()=>NY,sanitizeSessionToken:()=>H2,safeParseSettings:()=>sZ,safeCreateProviderConfig:()=>y3,runSubprocessEvent:()=>K4,runHook:()=>A4,reviveTeamStateDates:()=>FZ,restartLocalHubIfIdleAfterStartupTimeout:()=>IQ,resolveWorkspaceHubOwnerContext:()=>KF,resolveWorkflowsConfigSearchPaths:()=>Q5,resolveSkillsConfigSearchPaths:()=>$5,resolveSharedHubOwnerContext:()=>y0,resolveSessionBackend:()=>XX,resolveRulesConfigSearchPaths:()=>Z5,resolveProviderConfig:()=>v6,resolveProviderApiKeyFromSettings:()=>fW,resolveProductionHubOwnerContext:()=>s0,resolvePluginSkillDirectoriesFromPaths:()=>u1,resolvePluginConfigSearchPaths:()=>b6,resolveMcpServerRegistrations:()=>p0,resolveMarketplaceMcpServerName:()=>J9,resolveLocalClineAuthToken:()=>wY,resolveHubUrl:()=>fX,resolveHubOwnerContext:()=>n1,resolveHubEndpointOptions:()=>a0,resolveHubBuildId:()=>CQ,resolveHooksConfigSearchPaths:()=>h6,resolveDisabledToolNames:()=>F1,resolveDisabledPluginPaths:()=>A6,resolveDefaultMcpSettingsPath:()=>$0,resolveDefaultHubPort:()=>s8,resolveDefaultHubPathname:()=>bJ,resolveDefaultHubHost:()=>SJ,resolveCoreSelectedToolIds:()=>fZ,resolveCoreDistinctId:()=>h0,resolveCompatibleLocalHubUrl:()=>P5,resolveClineDir:()=>VF,resolveClineDataDir:()=>P2,resolveAndLoadAgentPlugins:()=>N8,resolveAgentPluginPaths:()=>c1,requestHubShutdown:()=>w5,requestDesktopToolApproval:()=>iX,removePluginMcpServersFromSettings:()=>Z9,rememberRecoverableLocalHubUrl:()=>k$,registerRemoteConfigSessionBlobUpload:()=>K7,registerMcpServersFromSettingsFile:()=>q2,registerDisposable:()=>$g,refreshProviderModelsFromSource:()=>MY,refreshOpenAICodexToken:()=>I9,refreshOcaToken:()=>v9,refreshClineToken:()=>h9,readSessionCheckpointHistory:()=>I2,readRemoteConfigSessionBlobUploadMetadata:()=>gX,readHubDiscovery:()=>f0,readGlobalSettings:()=>_0,readCompactionStrategyGlobally:()=>tV,readBearerToken:()=>X7,probeHubServer:()=>a1,probeHubConnection:()=>yA,prewarmFileIndex:()=>o9,prewarmDetachedHubServer:()=>yQ,prepareRemoteConfigCoreIntegration:()=>vX,parseWorkflowConfigFromMarkdown:()=>e6,parseUserCommandEnvelope:()=>ex,parseSkillConfigFromMarkdown:()=>o6,parseSettings:()=>aZ,parseRuleConfigFromMarkdown:()=>t6,parsePluginSource:()=>y7,parseMcpInstallArgs:()=>e5,parseHookEventPayload:()=>F4,parseConfiguredAgentConfig:()=>h5,normalizeWorkspacePath:()=>d1,normalizeUserInput:()=>tx,normalizeSdkError:()=>ox,normalizeRuntimeCapabilities:()=>q0,normalizeProviderId:()=>y8,normalizeOAuthProvider:()=>RY,normalizeHubWebSocketUrl:()=>I$,noopBasicLogger:()=>sx,migrateLegacyProviderSettings:()=>H9,mergeRulesForSystemPrompt:()=>u8,mergeAgentHooks:()=>U2,marketplaceEntryKey:()=>VY,makeTeamTaskSubSessionId:()=>T6,makeSubSessionId:()=>L8,loginOpenAICodex:()=>I4,loginOcaOAuth:()=>m4,loginLocalProvider:()=>EY,loginClineOAuth:()=>h4,loginAndSaveProviderOAuthCredentials:()=>c4,loginAndSaveLocalProviderOAuthCredentials:()=>CY,loadOpenTelemetryAdapter:()=>Nx,loadMcpSettingsFile:()=>_2,loadLlmsConfigFromFile:()=>cY,loadConfiguredAgentConfigs:()=>Q4,loadAgentPluginsFromPathsWithDiagnostics:()=>K2,loadAgentPluginsFromPaths:()=>zZ,loadAgentPluginFromPath:()=>P6,listSessionHistoryFromBackend:()=>qJ,listPluginToolsWithDiagnostics:()=>TQ,listPluginTools:()=>K5,listMcpServerOAuthStatuses:()=>B5,listLocalProviders:()=>TY,listHookConfigFiles:()=>q$,isToolDisabledGlobally:()=>$H,isTelemetryOptedOutGlobally:()=>WZ,isSessionNotFoundError:()=>i1,isRuleEnabled:()=>BQ,isPluginDisabledGlobally:()=>QH,isOfficialPluginSlug:()=>b7,isOAuthProvider:()=>i$,isMarketplaceSkillInstalled:()=>O7,isLocalHubOrigin:()=>xX,isLocalHubHostName:()=>Y7,isHubReconnectableTransportError:()=>xJ,isHubCommandTimeoutError:()=>kQ,isDiscoveryFilePresent:()=>BF,isClineOrgIndividualInferenceSubscriptionMessage:()=>xx,isClineOrgIndividualInferenceSubscriptionError:()=>Ix,isClineNotSubscribedMessage:()=>kx,isClineNotSubscribedError:()=>hx,isClineAccountActionRequest:()=>ZQ,isBuiltInProviderId:()=>S3,isAutoUpdateEnabledGlobally:()=>sV,installPlugin:()=>fY,installMcpServer:()=>nX,identifyAccount:()=>S1,hasMcpSettingsFile:()=>p1,getValidOpenAICodexCredentials:()=>x4,getValidOcaCredentials:()=>v4,getValidClineCredentials:()=>k4,getProviderOAuthCredentialsFromSettings:()=>u4,getProviderConfigFields:()=>PY,getProviderConfig:()=>gZ,getProviderAuthStorageId:()=>AW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>X8,getMcpServerOAuthState:()=>T2,getMarketplaceSkillCandidates:()=>X9,getLocalProviderModels:()=>OY,getLiveModelsCatalog:()=>b8,getGlobalMarketplaceSkillPaths:()=>Y9,getFileIndex:()=>I1,getCurrentContextSize:()=>Q3,getCoreHeadlessToolNames:()=>z6,getCoreDefaultEnabledToolIds:()=>AZ,getCoreBuiltinToolCatalog:()=>j2,getCoreAcpToolNames:()=>UZ,getClinePassSubscriptionUrl:()=>yx,getClineOrgIndividualInferenceSubscriptionMessage:()=>Sx,getClineNotSubscribedMessage:()=>bx,getClineDefaultSystemPrompt:()=>gx,generateWorkspaceInfoWithDiagnostics:()=>d6,generateWorkspaceInfo:()=>I8,formatRulesForSystemPrompt:()=>c8,formatProviderOAuthApiKey:()=>UW,formatDisplayUserInput:()=>ax,findInstalledGlobalMarketplaceSkillName:()=>j9,findCheckpointForRun:()=>B4,filterExtensionToolRegistrations:()=>YZ,filterDisabledTools:()=>g1,filterDisabledPluginPaths:()=>XZ,fetchClineRecommendedModels:()=>mY,executeClineAccountAction:()=>QQ,ensureHubWebSocketServer:()=>j7,ensureHubServer:()=>gf,ensureDetachedHubServer:()=>LF,ensureCustomProvidersLoaded:()=>m7,ensureCompatibleLocalHubUrl:()=>y2,enrichPromptWithMentions:()=>B8,emptyWorkspaceManifest:()=>rx,emptyStoredProviderSettings:()=>N$,discoverPluginModulePaths:()=>y6,disablePluginMcpServersInSettings:()=>tX,deriveSubsessionStatus:()=>q6,deleteLocalProvider:()=>d7,defineLlmsConfig:()=>vY,createWorkflowsConfigDefinition:()=>X5,createUserInstructionConfigService:()=>C$,createToolPoliciesWithPreset:()=>e9,createTool:()=>px,createTeamName:()=>f7,createSubprocessHooks:()=>nQ,createSpawnAgentTool:()=>_$,createSkillsConfigDefinition:()=>W5,createShellTool:()=>Y6,createShellExecutor:()=>t$,createSessionHost:()=>V4,createRuntimeHost:()=>V4,createRulesConfigDefinition:()=>J5,createRemoteConfigSessionMessagesArtifactUploader:()=>mX,createProviderConfig:()=>b3,createOpenTelemetryTelemetryService:()=>p5,createOAuthClientCallbacks:()=>g8,createMcpTools:()=>n8,createLocalHubScheduleRuntimeHandlers:()=>V7,createLlmsSdk:()=>dY,createInitialAccumulatedUsage:()=>D0,createInMemoryHubOwnerContext:()=>HF,createHubServerUrl:()=>V1,createHubAuthToken:()=>NQ,createHookConfigFileHooks:()=>x6,createHookConfigFileExtension:()=>S8,createHookAuditHooks:()=>P8,createDisabledMcpToolPolicy:()=>G5,createDisabledMcpToolPolicies:()=>zQ,createDelegatedAgentConfigProvider:()=>D$,createDelegatedAgent:()=>L$,createDefaultToolsWithPreset:()=>$Z,createDefaultTools:()=>F$,createDefaultShellExecutor:()=>K6,createDefaultMcpServerClientFactory:()=>r8,createDefaultExecutors:()=>G8,createCoreSettingsService:()=>R2,createCoreSessionSnapshot:()=>U1,createContributionRegistry:()=>lx,createContextCompactionPrepareTurn:()=>a4,createConfiguredTelemetryService:()=>$$,createConfiguredTelemetryHandle:()=>_4,createConfiguredAgentTools:()=>W4,createClineTelemetryServiceMetadata:()=>dx,createClineTelemetryServiceConfig:()=>ux,createCheckpointComparePlan:()=>lQ,createBuiltinTools:()=>V2,createAgentTeamsTools:()=>Y2,createAgentRuntime:()=>Wg,createAgentHooksExtension:()=>C8,connectToHub:()=>tQ,completeClineDeviceAuth:()=>BW,compareCheckpointToWorkspace:()=>c5,collectPluginMcpOAuthCandidates:()=>h7,clearPrivateModelsCatalogCache:()=>w3,clearLiveModelsCatalogCache:()=>C3,clearHubDiscovery:()=>b0,captureWorkspacePathResolved:()=>Bj,captureWorkspaceInitialized:()=>U9,captureWorkspaceInitError:()=>D9,captureToolUsage:()=>e2,captureTokenUsage:()=>z9,captureTaskRestarted:()=>_9,captureTaskCreated:()=>L9,captureTaskCompleted:()=>S4,captureSubagentExecution:()=>y4,captureSkillUsed:()=>O9,captureSdkError:()=>cx,captureProviderConfigured:()=>Gj,captureProviderApiError:()=>b4,captureModeSwitch:()=>T9,captureMentionUsed:()=>M9,captureMentionSearchResults:()=>E9,captureMentionFailed:()=>R9,captureHookDiscovery:()=>C9,captureExtensionActivated:()=>Hj,captureDiffEditFailure:()=>q9,captureConversationTurnEvent:()=>t2,captureCompactionSkipped:()=>P9,captureCompactionExecuted:()=>w9,captureAuthSucceeded:()=>w1,captureAuthStarted:()=>C1,captureAuthLoggedOut:()=>X$,captureAuthFailed:()=>P1,captureAgentUnexpectedReasoningTokens:()=>Vj,captureAgentTeamCreated:()=>N9,captureAgentCreated:()=>Y$,buildWorkspaceMetadata:()=>l6,buildTeamProgressSummary:()=>J4,buildSdkErrorProperties:()=>mx,buildRemoteConfigSessionBlobUploadMetadata:()=>B7,buildMcpInstallTransport:()=>U7,buildDelegatedAgentConfig:()=>J2,buildConfiguredAgentToolName:()=>k5,buildConfiguredAgentToolDescriptors:()=>I5,buildCheckpointWorkspaceDiff:()=>pQ,bootstrapAgentTeams:()=>D8,authorizeMcpServerOAuth:()=>UQ,addLocalProvider:()=>zY,accumulateUsageTotals:()=>A0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>s6,UnifiedConfigFileWatcher:()=>L2,ToolPresets:()=>u0,TelemetryService:()=>D4,TelemetryLoggerSink:()=>l5,TEAM_TOOL_NAMES:()=>U8,SubprocessSandbox:()=>M8,StructuredCommandInputSchema:()=>a$,StoredProviderSettingsSchema:()=>k8,StoredProviderSettingsEntrySchema:()=>oZ,SqliteTeamStore:()=>l2,SqliteSessionStore:()=>L1,SessionVersioningService:()=>c$,SessionVersioningError:()=>I0,SessionSource:()=>z0,SessionNotFoundError:()=>r1,SapSettingsSchema:()=>rZ,SKILLS_CONFIG_DIRECTORY_NAME:()=>a6,SESSION_STATUSES:()=>M6,SESSION_NOT_FOUND_ERROR_CODE:()=>E2,SDK_ERROR_TELEMETRY_EVENT:()=>Zg,RpcClineAccountService:()=>i6,RemoteRuntimeHost:()=>$4,ReasoningSettingsSchema:()=>uZ,RULES_CONFIG_DIRECTORY_NAME:()=>HQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>G7,ProviderSettingsSchema:()=>R$,ProviderSettingsManager:()=>q1,ProviderProtocolSchema:()=>mZ,ProviderIdSchema:()=>u6,ProviderClientSchema:()=>vZ,OpenTelemetryProvider:()=>L4,OcaSettingsSchema:()=>iZ,OPENAI_COMPATIBLE_PROVIDERS:()=>m6,NodeHubClient:()=>H1,NoOpFeatureFlagsProvider:()=>g2,NativeHubTransportAdapter:()=>o5,ModelCatalogSettingsSchema:()=>nZ,McpSettingsUpdateSkippedError:()=>d8,McpSettingsMutatorPurityError:()=>w$,McpSettingsLockTimeoutError:()=>P$,MAX_COMMAND_OUTPUT_CHARS:()=>h1,LocalRuntimeHost:()=>T1,Llms:()=>Cx,InMemoryWorkspaceManager:()=>x8,InMemoryMcpManager:()=>M2,HubUIClient:()=>LX,HubTransportError:()=>E0,HubSessionClient:()=>DX,HubServerTransport:()=>z4,HubScheduleService:()=>U4,HubScheduleCommandService:()=>f4,HubRuntimeHost:()=>s1,HubCommandError:()=>t8,HookEventPayloadSchema:()=>iQ,HookEventNameSchema:()=>rQ,HookConfigFileName:()=>w8,HOOK_CONFIG_FILE_EVENT_MAP:()=>k6,HOOKS_CONFIG_DIRECTORY_NAME:()=>EZ,GlobalSettingsSchema:()=>F6,GcpSettingsSchema:()=>lZ,FileTeamPersistenceStore:()=>r7,FeatureFlagsService:()=>x2,FeatureFlagDefaultValue:()=>nx,FEATURE_FLAGS:()=>ix,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>t7,DefaultToolNames:()=>U0,DefaultRuntimeBuilder:()=>q4,DefaultLlmsSdk:()=>B9,DEFAULT_MODELS_CATALOG_URL:()=>hZ,DEFAULT_HUB_PORT:()=>wJ,DEFAULT_HUB_PATHNAME:()=>PJ,DEFAULT_HUB_HOST:()=>CJ,CoreSettingsService:()=>S$,CoreSessionService:()=>z1,ContributionRegistry:()=>vx,ClineOrgIndividualInferenceSubscriptionError:()=>Px,ClineNotSubscribedError:()=>wx,ClineCore:()=>u5,ClineAccountService:()=>r6,ChatViewStateSchema:()=>IY,ChatSummarySchema:()=>o7,ChatSessionStatusSchema:()=>n7,ChatSessionConfigSchema:()=>i7,ChatMessageSchema:()=>s7,ChatMessageRoleSchema:()=>a7,CORE_TELEMETRY_EVENTS:()=>g,CORE_BUILD_VERSION:()=>xY,BrowserWebSocketHubAdapter:()=>s5,BUILT_IN_PROVIDER_IDS:()=>P3,BUILT_IN_PROVIDER:()=>c6,AzureSettingsSchema:()=>pZ,AwsSettingsSchema:()=>dZ,AuthSettingsSchema:()=>cZ,AgentTeamsRuntime:()=>k2,AgentTeam:()=>j4,Agent:()=>Qg,ALL_DEFAULT_TOOL_NAMES:()=>H$});R(M,D00);import*as Cx from"@cline/llms";import{ClineNotSubscribedError as wx,ClineOrgIndividualInferenceSubscriptionError as Px,getClineOrgIndividualInferenceSubscriptionMessage as Sx,getClineNotSubscribedMessage as bx,getClinePassSubscriptionUrl as yx,isClineNotSubscribedError as hx,isClineNotSubscribedMessage as kx,isClineOrgIndividualInferenceSubscriptionError as Ix,isClineOrgIndividualInferenceSubscriptionMessage as xx}from"@cline/llms";import{buildClineSystemPrompt as gx,buildSdkErrorProperties as mx,ContributionRegistry as vx,captureSdkError as cx,createClineTelemetryServiceConfig as ux,createClineTelemetryServiceMetadata as dx,createContributionRegistry as lx,createTool as px,emptyWorkspaceManifest as rx,FEATURE_FLAGS as ix,FeatureFlagDefaultValue as nx,formatDisplayUserInput as ax,noopBasicLogger as sx,normalizeSdkError as ox,normalizeUserInput as tx,parseUserCommandEnvelope as ex,registerDisposable as $g,SDK_ERROR_TELEMETRY_EVENT as Zg}from"@cline/shared";import"@cline/shared/storage";var AG={};N(AG,{isClineAccountActionRequest:()=>ZQ,executeClineAccountAction:()=>QQ,RpcClineAccountService:()=>i6,ClineAccountService:()=>r6});function hM($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function FG($,Z,Q){let W=hM(Q);if(W)return W;let J=Z.trim();if(J){let X=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${X}`}return`Cline account request failed with status ${$}`}class r6{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let Z=$.apiBaseUrl.trim();if(!Z)throw Error("apiBaseUrl is required");this.apiBaseUrl=Z,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let Z=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(Z)}/balance`)}async fetchUsageTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/usages`)).items??[]}async fetchPaymentTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let Z=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)Z.searchParams.set("type",$.type);return this.request(`${Z.pathname}${Z.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}`)}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/balance`)}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(Z,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let Z=$?.trim();if(Z)return Z;let W=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(W)return W;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let Y=(await this.fetchUserOrganizations()).find((j)=>j.organizationId===$)?.memberId;if(!Y?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return Y}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let W=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,X=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let Y=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...W??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:J.signal});if(Y.status===204||Z?.expectNoContent){if(!Y.ok)throw Error(`Cline account request failed with status ${Y.status}`);return}let j=await Y.text(),V;if(j.trim())try{V=JSON.parse(j)}catch{if(!Y.ok)throw Error(FG(Y.status,j,void 0));throw Error("Cline account response was not valid JSON")}if(!Y.ok)throw Error(FG(Y.status,j,V));if(typeof V==="object"&&V!==null){let H=V;if(typeof H.success==="boolean"){if(!H.success)throw Error(H.error||"Cline account request failed");return H.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(X)}}}function ZQ($){return $.action==="clineAccount"}async function QQ($,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 i6{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:Z})}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:Z,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var fG={};N(fG,{createOAuthClientCallbacks:()=>g8});function g8($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((W)=>{$.onOpenUrlError?.({url:Z,error:W})})}catch(W){$.onOpenUrlError?.({url:Z,error:W})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var MA={};N(MA,{ClineCore:()=>u5});function UG($){if($===!0)return{};if(!$)return;return $}function DG($){if($==="user")return"global";return $}class x3{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 LG($){let{host:Z}=$;return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||z0.CLI,interactive:!1,config:{providerId:y8(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:xM(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Q.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Q,W){let J=await Z.runTurn({sessionId:Q,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((X)=>X.content),delivery:W.delivery});if(!J)throw Error("ClineCore automation runtime returned no result");return{result:IM(J)}},async abortSession(Q){return await Z.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}function WQ($){let Z=kM($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),W=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),J=$.context?.logger??$.logger,X=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!W&&!J&&!X)return $.context;return{...$.context??{},...Q?{client:Q}:{},...W?{user:W}:{},...J?{logger:J}:{},...X?{telemetry:X}:{},...Z?{automation:Z}:{}}}function kM($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function IM($){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 xM($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var OK={};N(OK,{createCoreSettingsService:()=>R2,CoreSettingsService:()=>S$});import{existsSync as A5,readFileSync as OE}from"node:fs";import{basename as $J,dirname as fK,extname as qE,isAbsolute as LK,join as ME,relative as _K,resolve as UK}from"node:path";var yG={};N(yG,{resolveWorkflowsConfigSearchPaths:()=>Q5,resolveSkillsConfigSearchPaths:()=>$5,resolveRulesConfigSearchPaths:()=>Z5,parseWorkflowConfigFromMarkdown:()=>e6,parseSkillConfigFromMarkdown:()=>o6,parseRuleConfigFromMarkdown:()=>t6,createWorkflowsConfigDefinition:()=>X5,createUserInstructionConfigService:()=>C$,createSkillsConfigDefinition:()=>W5,createRulesConfigDefinition:()=>J5,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>s6,UnifiedConfigFileWatcher:()=>L2,SKILLS_CONFIG_DIRECTORY_NAME:()=>a6,RULES_CONFIG_DIRECTORY_NAME:()=>HQ});import{createHash as gM}from"node:crypto";import{watch as mM}from"node:fs";import{readdir as vM,readFile as cM}from"node:fs/promises";import{join as uM}from"node:path";function dM($){return gM("sha1").update($).digest("hex")}function TG($){return Boolean($&&typeof $==="object"&&"code"in $)}function _G($){return TG($)&&$.code==="ENOENT"}function zG($){return TG($)&&($.code==="EACCES"||$.code==="EPERM")}class L2{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,Z){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=Z?.debounceMs??75,this.emitParseErrors=Z?.emitParseErrors??!1;for(let Q of $){if(this.definitionsByType.has(Q.type))throw Error(`Duplicate unified config definition type '${Q.type}'.`);this.definitionsByType.set(Q.type,Q),this.recordsByType.set(Q.type,new Map),this.discoveredDirectoriesByType.set(Q.type,new Set);for(let W of Q.directories){let J=this.baseTypesByDirectory.get(W);if(J)J.add(Q.type);else this.baseTypesByDirectory.set(W,new Set([Q.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let Z=this.definitionsByType.get($);if(!Z)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(Z)})}getSnapshot($){let Z=this.recordsByType.get($);return new Map([...Z?.entries()??[]].map(([Q,W])=>[Q,{...W}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([W,J])=>[W,{...J}])));return $}emit($){for(let Z of this.listeners)Z($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[Z,Q]of this.watchersByDirectory.entries()){if($.has(Z))continue;Q.close(),this.watchersByDirectory.delete(Z)}this.watchedTypesByDirectory=$;for(let Z of $.keys()){if(this.watchersByDirectory.has(Z))continue;try{let Q=mM(Z,()=>{let W=this.watchedTypesByDirectory.get(Z);if(!W)return;for(let J of W)this.pendingTypes.add(J);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(W)=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let X of J)this.emit({kind:"error",type:X,error:W,filePath:Z})})}catch(Q){if(!_G(Q)&&!zG(Q)){let W=$.get(Z);if(!W)continue;for(let J of W)this.emit({kind:"error",type:J,error:Q,filePath:Z})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let Z of $){let Q=this.definitionsByType.get(Z);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:Z,discoveredDirectories:Q}=await this.loadDefinition($),W=this.recordsByType.get($.type)??new Map;for(let[J,X]of W.entries()){if(Z.has(J))continue;this.emit({kind:"remove",type:$.type,id:J,filePath:X.filePath})}for(let[J,X]of Z.entries()){let Y=W.get(J);if(Y&&Y.filePath===X.filePath&&Y.fingerprint===X.fingerprint)continue;this.emit({kind:"upsert",record:{type:X.type,id:J,item:X.item,filePath:X.filePath}})}if(this.recordsByType.set($.type,Z),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let Z=new Map,Q=new Set;for(let W of $.directories){Q.add(W);let J=$.discoverFiles?await $.discoverFiles(W):await this.readDirectoryFileCandidates(W);for(let X of J){let{fileName:Y,filePath:j}=X;if(Q.add(X.directoryPath),$.includeFile&&!$.includeFile(Y,j))continue;try{let V=await cM(j,"utf8"),H={type:$.type,directoryPath:X.directoryPath,fileName:Y,filePath:j,content:V},B=$.parseFile(H),G=$.resolveId(B,H).trim();if(!G)continue;Z.set(G,{type:$.type,id:G,item:B,filePath:j,fingerprint:dM(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:j})}}}return{records:Z,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[Z,Q]of this.baseTypesByDirectory.entries())$.set(Z,new Set(Q));for(let[Z,Q]of this.discoveredDirectoriesByType.entries())for(let W of Q){let J=$.get(W);if(J)J.add(Z);else $.set(W,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await vM($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:uM($,Q.name)})).sort((Q,W)=>Q.fileName.localeCompare(W.fileName))}catch(Z){if(_G(Z)||zG(Z))return[];throw Z}}}import{readdir as m3,readFile as lM,stat as g3}from"node:fs/promises";import{basename as l1,dirname as pM,extname as XQ,join as S0,resolve as n6}from"node:path";import{AGENTS_RULES_FILE_NAME as OG,RULES_CONFIG_DIRECTORY_NAME as HQ,resolveGlobalAgentsRulesPath as rM,resolveRulesConfigSearchPaths as iM,resolveSkillsConfigSearchPaths as nM,resolveWorkflowsConfigSearchPaths as aM,SKILLS_CONFIG_DIRECTORY_NAME as a6,WORKFLOWS_CONFIG_DIRECTORY_NAME as s6}from"@cline/shared/storage";import sM from"yaml";var JQ="SKILL.md",oM="managed.json",tM=new Set([".md",".markdown",".txt"]);function v3($){return $.trim().toLowerCase()}function m8($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function YQ($){return tM.has(XQ($).toLowerCase())}function qG($){let Z=[],Q=new Set;for(let W of $){let J=n6(W);if(Q.has(J))continue;Q.add(J),Z.push(W)}return Z}function eM($){let Z=[...$?.directories??$5($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...hB({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return qG(Z)}async function c3($){try{let Z=await m3($,{withFileTypes:!0}),Q=[];for(let W of Z){if(!W.isDirectory())continue;let J=S0($,W.name),X=S0(J,oM);try{let Y=await lM(X,"utf8"),j=JSON.parse(Y);if(j&&typeof j==="object")Q.push(J)}catch(Y){if(m8(Y))continue;if(Y?.name==="SyntaxError")continue;throw Y}}return Q.sort((W,J)=>W.localeCompare(J))}catch(Z){if(m8(Z))return[];throw Z}}function u3($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,W,J]=Q;try{let X=sM.parse(W);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:J,hadFrontmatter:!0}}catch(X){let Y=X instanceof Error?X.message:String(X);return{data:{},body:$,hadFrontmatter:!0,parseError:Y}}}function jQ($,Z,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${Z}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${Z}' must be a string.`);let W=$.trim();if(!W&&Q)throw Error(`Frontmatter field '${Z}' cannot be empty.`);return W||void 0}function v8($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function $R($,Z){if(l1($.filePath).toLowerCase()!==OG.toLowerCase())return l1($.filePath,XQ($.filePath));if(Z&&n6($.filePath)===n6(Z,OG))return"Workspace AGENTS.md";if(n6($.filePath)===n6(rM()))return"Global AGENTS.md";return l1($.filePath,XQ($.filePath))}function o6($,Z){let{data:Q,body:W,parseError:J}=u3($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in skill file.");let j=jQ(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing skill name.");return{name:j,description:jQ(Q.description,"description",!1),disabled:v8(Q.disabled,"disabled")??(v8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function t6($,Z){let{data:Q,body:W,parseError:J}=u3($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in rule file.");let Y=jQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing rule name.");return{name:Y,disabled:v8(Q.disabled,"disabled")??(v8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function e6($,Z){let{data:Q,body:W,parseError:J}=u3($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in workflow file.");let Y=jQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing workflow name.");return{name:Y,disabled:v8(Q.disabled,"disabled")??(v8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function $5($){return nM($)}function Z5($){return iM($)}function Q5($){return aM($)}async function MG($){if(l1($)===".cline"){let Z=await c3($);return(await Promise.all(Z.map((W)=>MG(S0(W,a6))))).flat()}try{let Z=await m3($,{withFileTypes:!0}),Q=[];for(let W of Z){if(W.isFile()&&W.name===JQ){Q.push({directoryPath:$,fileName:W.name,filePath:S0($,W.name)});continue}let J=S0($,W.name);if(W.isDirectory()||W.isSymbolicLink()&&await g3(J).then((Y)=>Y.isDirectory()).catch((Y)=>{if(m8(Y))return!1;throw Y}))Q.push({directoryPath:J,fileName:JQ,filePath:S0(J,JQ)})}return Q}catch(Z){if(m8(Z))return[];throw Z}}async function VQ($){if(l1($)===".cline"){let Z=await c3($);return(await Promise.all(Z.map((W)=>VQ(S0(W,"rules.md"))))).flat()}try{if((await g3($)).isFile())return[{directoryPath:pM($),fileName:l1($),filePath:$}]}catch(Z){if(!m8(Z))throw Z}try{let Q=(await m3($,{withFileTypes:!0})).filter((J)=>J.isFile()&&YQ(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:S0($,J.name)})),W=S0($,"AGENTS.md");try{if((await g3(W)).isFile()){if(!Q.some((Y)=>Y.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:W})}}catch{}return Q}catch(Z){if(m8(Z))return[];throw Z}}async function ZR($){if(l1($)===".cline"){let Z=await c3($);return(await Promise.all(Z.map((W)=>VQ(S0(W,s6))))).flat()}return VQ($)}function W5($){let Z=eM($),Q=$?.workspacePath?S0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?qG([...Z,Q]):Z,discoverFiles:MG,includeFile:(W)=>W===JQ,parseFile:(W)=>o6(W.content,l1(W.directoryPath)),resolveId:(W)=>v3(W.name)}}function J5($){let Z=$?.directories??Z5($?.workspacePath),Q=$?.workspacePath?S0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:VQ,includeFile:(W,J)=>W===".clinerules"||YQ(W)||YQ(J),parseFile:(W)=>t6(W.content,$R(W,$?.workspacePath)),resolveId:(W)=>v3(W.name)}}function X5($){let Z=$?.directories??Q5($?.workspacePath),Q=$?.workspacePath?S0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:ZR,includeFile:(W)=>YQ(W),parseFile:(W)=>e6(W.content,l1(W.filePath,XQ(W.filePath))),resolveId:(W)=>v3(W.name)}}function RG($){let Z=[W5($?.skills),J5($?.rules),X5($?.workflows)];return new L2(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as EG}from"@cline/shared";function QR($,Z){if($.description?.trim())return EG($.description,".");if(Z==="workflow")return;return EG($.instructions,".")}function WR($){return $.disabled!==!0}function NG($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,W])=>({id:Q,record:W})).filter(({record:Q})=>WR(Q.item)).map(({id:Q,record:W})=>({id:Q,name:W.item.name,instructions:W.item.instructions,description:QR(W.item,Z),kind:Z})).sort((Q,W)=>Q.name.localeCompare(W.name))}function Y5($){let Z=new Map;for(let Q of[...NG($,"workflow"),...NG($,"skill")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,W)=>Q.name.localeCompare(W.name))}function CG($,Z){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let W=Q[1];if(!W)return $;let J=W.length+1,X=$.slice(J),Y=Y5(Z).find((j)=>j.name===W);return Y?`${Y.instructions}${X}`:$}var PG={};N(PG,{mergeRulesForSystemPrompt:()=>u8,loadRulesForSystemPromptFromWatcher:()=>d3,listEnabledRulesFromWatcher:()=>wG,isRuleEnabled:()=>BQ,formatRulesForSystemPrompt:()=>c8});function BQ($){return $.disabled!==!0}function c8($){if($.length===0)return"";return`
|
|
205
205
|
|
|
206
206
|
# Rules
|
|
207
207
|
${$.map((Q)=>`## ${Q.name}
|
|
@@ -209,28 +209,28 @@ ${Q.instructions}`).join(`
|
|
|
209
209
|
|
|
210
210
|
`)}`}function u8($,Z){let Q=$?.trim(),W=Z?.trim();if(Q&&W)return`${Q}
|
|
211
211
|
|
|
212
|
-
${W}`;return Q||W||void 0}function
|
|
212
|
+
${W}`;return Q||W||void 0}function wG($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(BQ).sort((Q,W)=>Q.name.localeCompare(W.name))}function d3($){return c8(wG($))}function GQ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function JR($){if(!$||$.length===0)return;let Z=$.map(GQ).filter((Q)=>Q.length>0);return Z.length>0?new Set(Z):void 0}function XR($,Z,Q){if(!Q)return!0;let W=GQ($),J=GQ(Z),X=W.includes(":")?W.split(":").at(-1)??W:W,Y=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(W)||Q.has(J)||Q.has(X)||Q.has(Y)}function j5($,Z){let Q=JR(Z);return[...$.getSnapshot("skill").entries()].map(([J,X])=>{let Y=X.item;return{id:J,name:Y.name.trim(),description:Y.description?.trim(),disabled:Y.disabled===!0,skill:Y}}).filter((J)=>XR(J.id,J.name,Q))}function YR($,Z){return j5($,Z).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,W)=>Q.localeCompare(W))}function jR($,Z,Q){let W=GQ(Z);if(!W)return{error:"Missing skill name."};let J=j5($,Q),X=J.find((B)=>B.id===W);if(X){let{skill:B}=X;if(B.disabled===!0)return{error:`Skill "${B.name}" is configured but disabled.`};return{id:X.id,skill:B}}let Y=W.includes(":")?W.split(":").at(-1)??W:W,j=J.filter(({id:B})=>{if(B===Y)return!0;return B.endsWith(`:${Y}`)}),V=j.filter(({skill:B})=>B.disabled!==!0);if(V.length===1){let{id:B,skill:G}=V[0];return{id:B,skill:G}}if(V.length>1)return{error:`Skill "${Z}" is ambiguous. Use one of: ${V.map(({id:B})=>B).join(", ")}`};if(j.length===1){let{skill:B}=j[0];return{error:`Skill "${B.name}" is configured but disabled.`}}if(j.length>1)return{error:`Skill "${Z}" is ambiguous, and all matches are disabled: ${j.map(({id:B})=>B).join(", ")}`};let H=YR($,Q);return{error:H.length>0?`Skill "${Z}" not found. Available skills: ${H.join(", ")}`:"No skills are currently available."}}function l3($,Z=Promise.resolve(),Q){let W=new Set,J=async(X,Y)=>{await Z;let j=jR($,X,Q);if("error"in j)return j.error;let{id:V,skill:H}=j;if(W.has(V))return`Skill "${H.name}" is already running.`;W.add(V);try{let B=Y?.trim(),G=B?`
|
|
213
213
|
<command-args>${B}</command-args>`:"",K=H.description?.trim()?`Description: ${H.description.trim()}
|
|
214
214
|
|
|
215
215
|
`:"";return`<command-name>${H.name}</command-name>${G}
|
|
216
216
|
<command-instructions>
|
|
217
217
|
${K}${H.instructions}
|
|
218
|
-
</command-instructions>`}finally{W.delete(V)}};return Object.defineProperty(J,"configuredSkills",{get:()=>j5($,Q).map(({skill:X,...Y})=>Y),enumerable:!0,configurable:!1}),J}function
|
|
218
|
+
</command-instructions>`}finally{W.delete(V)}};return Object.defineProperty(J,"configuredSkills",{get:()=>j5($,Q).map(({skill:X,...Y})=>Y),enumerable:!0,configurable:!1}),J}function SG($){let Z=$.watcherReady??Promise.resolve();return{name:"cline-user-instructions",manifest:{capabilities:[$.includeRules?"rules":void 0,$.registerSkillsTool?"tools":void 0,$.includeSkills||$.includeWorkflows?"commands":void 0].filter((W)=>Boolean(W))},async setup(W){if(await Z,$.includeRules)W.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>d3($.watcher)});if($.registerSkillsTool)W.registerTool(e$(l3($.watcher,Z,$.allowedSkillNames)));for(let J of Y5($.watcher).filter((X)=>X.kind==="skill"&&$.includeSkills||X.kind==="workflow"&&$.includeWorkflows))W.registerCommand({name:J.name,description:J.description,handler:(X)=>{let Y=X.trim();return Y?`${J.instructions}
|
|
219
219
|
|
|
220
|
-
${Y}`:J.instructions}})}}}class
|
|
221
|
-
${
|
|
220
|
+
${Y}`:J.instructions}})}}}class bG{watcher;ready;stopped=!1;constructor($){this.watcher=RG($)}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 Y5(this.watcher)}resolveRuntimeSlashCommand($){return CG($,this.watcher)}hasConfiguredSkills($){return j5(this.watcher,$).some((Z)=>!Z.disabled)}createSkillsExecutor($){return l3(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return SG({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function C$($){return new bG($)}import{readFile as VR,writeFile as HR}from"node:fs/promises";import kG from"yaml";function BR($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,W,J]=Q,X=kG.parse(W);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:J,hadFrontmatter:!0}}function hG($,Z){return`---
|
|
221
|
+
${kG.stringify($).trimEnd()}
|
|
222
222
|
---
|
|
223
|
-
${Z}`}function
|
|
223
|
+
${Z}`}function GR($,Z){let{data:Q,body:W,hadFrontmatter:J}=BR($);if(!J&&Z)return $;if(Z){if(delete Q.disabled,Q.enabled===!1)delete Q.enabled;if(Object.keys(Q).length===0)return W;return hG(Q,W)}return Q.disabled=!0,hG(Q,W)}async function IG({filePath:$,enabled:Z}){let Q=await VR($,"utf8"),W=GR(Q,Z);return await HR($,W),{filePath:$,enabled:Z,disabled:!Z}}var GK={};N(GK,{updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>l8,updateMcpServerOAuthStateAsync:()=>H5,updateMcpServerOAuthState:()=>O2,setMcpServerDisabled:()=>z2,resolvePluginMcpServerRegistrations:()=>LQ,resolveMcpServerRegistrations:()=>p0,resolveDefaultMcpSettingsPath:()=>$0,registerMcpServersFromSettingsFile:()=>q2,normalizePluginMcpServerRegistration:()=>e3,loadMcpSettingsFile:()=>_2,listMcpServerOAuthStatuses:()=>B5,hasMcpSettingsFile:()=>p1,getMcpServerOAuthState:()=>T2,createMcpTools:()=>n8,createDisabledMcpToolPolicy:()=>G5,createDisabledMcpToolPolicies:()=>zQ,createDefaultMcpServerClientFactory:()=>r8,authorizeMcpServerOAuth:()=>UQ,McpSettingsUpdateSkippedError:()=>d8,McpSettingsMutatorPurityError:()=>w$,McpSettingsLockTimeoutError:()=>P$,InMemoryMcpManager:()=>M2});import{spawn as sR}from"node:child_process";import{StringDecoder as XK}from"node:string_decoder";import{UnauthorizedError as ZK}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as oR}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as vR}from"node:crypto";import{UnauthorizedError as cR}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as uR}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as dR}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as lR}from"@modelcontextprotocol/sdk/client/streamableHttp.js";FQ();var pR="/mcp/oauth/callback",rR=[1456,1457,1458],iR=300000;function nR($){if($ instanceof Error){let Z=$.message.trim();if(Z.length>0)return Z}return String($)}function aR($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function fQ($){let Z={};try{Z=T2($.serverName,{filePath:$.settingsPath})??{}}catch{Z={}}let Q,W,J=async(Y)=>{let j=p8(Y(Z))??{};try{Z=O2($.serverName,()=>j,{filePath:$.settingsPath})}catch{Z=j}};return{provider:{get redirectUrl(){return Z.redirectUrl??$.redirectUrl},get clientMetadata(){return aR(Z.redirectUrl??$.redirectUrl)},state:()=>{return W=vR(),W},clientInformation:()=>Z.clientInformation,saveClientInformation:async(Y)=>{await J((j)=>({...j,clientInformation:Y,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>Z.tokens,saveTokens:async(Y)=>{let j=Date.now();await J((V)=>({...V,tokens:Y,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:j}))},redirectToAuthorization:async(Y)=>{Q=Y.toString(),await $.onAuthorizationUrl?.(Q)},saveCodeVerifier:async(Y)=>{await J((j)=>({...j,codeVerifier:Y,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!Z.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return Z.codeVerifier},invalidateCredentials:async(Y)=>{await J((j)=>{if(Y==="all")return{lastError:j.lastError,redirectUrl:j.redirectUrl};return{...j,...Y==="client"?{clientInformation:void 0}:{},...Y==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...Y==="verifier"?{codeVerifier:void 0}:{},...Y==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(Y)=>{await J((j)=>({...j,discoveryState:Y}))},discoveryState:()=>Z.discoveryState},getLastAuthorizationUrl:()=>Q,getLastOAuthState:()=>W,resetInteractiveState:async()=>{await J((Y)=>({...Y,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(Y)=>{await J((j)=>({...j,lastError:Y}))},clearError:async()=>{await J((Y)=>({...Y,lastError:void 0}))}}}function AQ($){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 dR(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch});return new lR(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch})}function $K($){return new uR({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function UQ($){let Z=$.serverName.trim();if(!Z)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Q}=await Promise.resolve().then(() => (FQ(),eG)),W=Q({filePath:$.filePath}).find((V)=>V.name===Z);if(!W)throw Error(`MCP server "${Z}" is not configured.`);if(W.disabled)throw Error(`MCP server "${Z}" is disabled. Enable it before running OAuth.`);if(W.transport.type==="stdio")throw Error(`MCP server "${Z}" uses stdio transport and does not support OAuth browser flow.`);let J=await W1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:rR,callbackPath:$.callbackPath??pR,timeoutMs:$.timeoutMs??iR,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!J.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let X=fQ({settingsPath:$.filePath,serverName:Z,redirectUrl:J.callbackUrl,onAuthorizationUrl:async(V)=>{await $.openUrl?.(V)}});await X.resetInteractiveState();let Y=$K($),j;try{let V=AQ({registration:W,oauthProvider:X.provider,fetch:$.fetch});try{return await Y.connect(V),await Y.listTools(),await X.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" is already authorized.`}}catch(H){if(!(H instanceof cR))throw H;if(!X.getLastAuthorizationUrl())throw Error(`MCP server "${Z}" did not provide an authorization URL.`);let G=await J.waitForCallback();if(!G)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(G.error)throw Error(`OAuth authorization failed: ${G.error}`);if(!G.code)throw Error("OAuth callback did not include an authorization code.");let K=X.getLastOAuthState();if(!K)throw Error(`MCP server "${Z}" did not start an OAuth stateful authorization flow.`);if(G.state!==K)throw Error("OAuth authorization failed: state mismatch.");await V.finishAuth(G.code),j=$K($);let F=AQ({registration:W,oauthProvider:X.provider,fetch:$.fetch});return await j.connect(F),await j.listTools(),await X.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" OAuth authorization completed.`}}}catch(V){let H=nR(V);throw await X.markError(H),Error(H)}finally{await Y.close().catch(()=>{return}),await j?.close().catch(()=>{return}),J.close()}}var tR="2024-11-05",eR=5000,$E=1500,QK="http://127.0.0.1:1456/mcp/oauth/callback";function DQ($){return $ instanceof Error?$.message:String($)}function WK($){let Z=Buffer.from(JSON.stringify($),"utf8"),Q=Buffer.from(`Content-Length: ${Z.byteLength}\r
|
|
224
224
|
\r
|
|
225
|
-
`,"utf8");return Buffer.concat([Q,Z])}function
|
|
226
|
-
`,"utf8")}class o3{buffer="";decoder=new
|
|
225
|
+
`,"utf8");return Buffer.concat([Q,Z])}function JK($){return Buffer.from(`${JSON.stringify($)}
|
|
226
|
+
`,"utf8")}class o3{buffer="";decoder=new XK("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`\r
|
|
227
227
|
\r
|
|
228
|
-
`);if(Q<0)break;let J=this.buffer.slice(0,Q).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!J)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let X=Number.parseInt(J[1],10),Y=Q+4,j=Y+X;if(this.buffer.length<j)break;Z.push(this.buffer.slice(Y,j)),this.buffer=this.buffer.slice(j)}return Z}}class t3{buffer="";decoder=new
|
|
229
|
-
`);if(Q<0)break;let W=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),W.length>0)Z.push(W)}return Z}}class JK{registration;process;nextRequestId=1;pending=new Map;framedParser=new o3;newlineParser=new t3;stderrBuffer="";connected=!1;protocolMode="newline";constructor($){this.registration=$}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=["newline","framed"],Z;for(let Q of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Q);try{await this.request("initialize",{protocolVersion:nR,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},sR),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Q;return}catch(W){Z=W instanceof Error?W:Error(String(W))}}throw Z??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((Z)=>typeof Z?.name==="string"&&typeof Z.inputSchema==="object"&&Z.inputSchema!==null).map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let Z=this.registration.transport;if(Z.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${Z.type}`);this.framedParser=new o3,this.newlineParser=new t3,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},W=rR(Z.command,Z.args??[],{cwd:Z.cwd,env:{...process.env,...Z.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=W,W.stdout.on("data",(J)=>this.handleStdout(J)),W.stderr.on("data",(J)=>{if(this.process!==W)return;if(this.stderrBuffer+=J.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),W.once("error",(J)=>{if(this.process!==W)return;this.failAllPending(Error(`MCP process error: ${UQ(J)}`))}),W.once("exit",(J,X)=>{if(this.process!==W)return;this.connected=!1,this.process=void 0;let Y=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${J??"null"}, signal=${X??"null"}).${Y}`))})}handleStdout($){try{let Z=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of Z){let W=JSON.parse(Q);if(typeof W.id!=="number")continue;let J=this.pending.get(W.id);if(!J)continue;if(this.pending.delete(W.id),clearTimeout(J.timeout),W.error){let X=W.error.message||`MCP request failed with code ${W.error.code??"unknown"}`;J.reject(Error(X));continue}J.resolve(W.result)}}catch(Z){this.handleProtocolFailure(Z)}}handleProtocolFailure($){let Z=this.process;if(!Z)return;this.connected=!1,this.process=void 0;let Q=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${UQ($)}.${Q}`)),Z.kill()}async request($,Z,Q=aR){let W=this.process;if(!W?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let J=this.nextRequestId++,X={jsonrpc:"2.0",id:J,method:$,...Z?{params:Z}:{}},Y=new Promise((j,V)=>{let H=setTimeout(()=>{this.pending.delete(J),V(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Q);this.pending.set(J,{resolve:j,reject:V,timeout:H})});try{W.stdin.write(this.protocolMode==="framed"?ZK(X):QK(X))}catch(j){let V=this.pending.get(J);if(V)clearTimeout(V.timeout),this.pending.delete(J);throw j}return Y}notify($,Z){let Q=this.process;if(!Q?.stdin.writable)return;let W={jsonrpc:"2.0",method:$,...Z?{params:Z}:{}};Q.stdin.write(this.protocolMode==="framed"?ZK(W):QK(W))}failAllPending($){for(let[Z,Q]of this.pending)clearTimeout(Q.timeout),this.pending.delete(Z),Q.reject($)}}class XK{registration;options;client;authContext;constructor($,Z){this.registration=$;this.options=Z}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=AQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??$K});this.authContext=$;try{let Z=new iR({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Q=FQ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await Z.connect(Q),await $.clearError(),this.client=Z}catch(Z){let Q=Z instanceof eG?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):UQ(Z);throw await $.markError(Q),Error(Q)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((Q)=>({name:Q.name,description:Q.description,inputSchema:Q.inputSchema&&typeof Q.inputSchema==="object"&&!Array.isArray(Q.inputSchema)?Q.inputSchema:{}}))}catch(Z){return await this.handleOperationError(Z)}}async callTool($){let Z=await this.ensureConnectedClient();try{return await Z.callTool({name:$.name,arguments:$.arguments??{}})}catch(Q){return await this.handleOperationError(Q)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let Z=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${Z} Run authorizeMcpServerOAuth for this server.`;return`${Z} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let Z=this.authContext??AQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??$K}),Q=$ instanceof eG?this.formatUnauthorizedMessage(Z.getLastAuthorizationUrl()):UQ($);throw await Z.markError(Q),Error(Q)}}function r8($={}){return(Z)=>Z.transport.type==="stdio"?new JK(Z):new XK(Z,$)}KQ();function r0(){return Date.now()}function oR($){return $.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}class q2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let Z=this.servers.get($.name);if(!Z){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:r0()});return}let Q=JSON.stringify(Z.registration.transport)!==JSON.stringify($.transport);if(Z.registration={...$},Z.updatedAt=r0(),Q)await this.disconnectState(Z),Z.client=void 0,Z.toolCache=void 0,Z.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.connectState(Z)})}async disconnectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z)})}async setServerDisabled($,Z){await this.runExclusive($,async()=>{let Q=this.requireServer($);if(Q.registration={...Q.registration,disabled:Z},Q.updatedAt=r0(),Z)await this.disconnectState(Q)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,Z)=>$.name.localeCompare(Z.name))}async listTools($){let Z=this.requireServer($),Q=Z.toolCacheUpdatedAt??0;if(Z.toolCache&&r0()-Q<=this.toolsCacheTtlMs)return Z.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let Z=this.requireServer($),W=await(await this.ensureConnectedClient(Z)).listTools(),J=oR(W);return Z.toolCache=J,Z.toolCacheUpdatedAt=r0(),Z.updatedAt=r0(),J})}async callTool($){return this.runExclusive($.serverName,async()=>{let Z=this.requireServer($.serverName),Q=await this.ensureConnectedClient(Z);return Z.updatedAt=r0(),Q.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let Z of $)await this.unregisterServer(Z)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=r0();try{let Z=$.client??await this.clientFactory($.registration);await Z.connect(),$.client=Z,$.status="connected",$.lastError=void 0,$.updatedAt=r0()}catch(Z){throw $.status="disconnected",$.lastError=Z instanceof Error?Z.message:String(Z),$.updatedAt=r0(),Z}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=r0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=r0()}}requireServer($){let Z=this.servers.get($);if(!Z)throw Error(`Unknown MCP server: ${$}`);return Z}async runExclusive($,Z){let Q=this.operationLocks.get($)??Promise.resolve(),W,J=new Promise((Y)=>{W=Y}),X=Q.catch(()=>{return}).then(()=>J);this.operationLocks.set($,X),await Q.catch(()=>{return});try{return await Z()}finally{if(W?.(),this.operationLocks.get($)===X)this.operationLocks.delete($)}}}function i8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function YK($){return i8($)&&Object.values($).every((Z)=>typeof Z==="string")}function tR($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function eR($){if(!i8($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function $E($){let Z=$.env?Object.entries($.env):[];if(Z.length===0)return{ok:!0};let Q={};for(let[W,J]of Z){if(typeof J==="string"){Q[W]=J;continue}let X=J.fromEnv?.trim()||W,Y=process.env[X];if(typeof Y==="string"&&Y.length>0){Q[W]=Y;continue}if(typeof J.value==="string"){Q[W]=J.value;continue}if(J.required===!0)return{ok:!1,reason:`required environment variable "${X}" is not set`}}return{ok:!0,env:Object.keys(Q).length>0?Q:void 0}}function e3($){if(!i8($))return{name:"",loadError:"invalid MCP server registration"};let Z=typeof $.name==="string"?$.name.trim():"";if(!Z)return{name:Z,loadError:"empty MCP server name"};let Q=$.env,W=Q===void 0?void 0:Q;if(W!==void 0){if(!i8(W))return{name:Z,loadError:"invalid env"};for(let[V,H]of Object.entries(W))if(typeof H!=="string"&&!eR(H))return{name:Z,loadError:`invalid env "${V}"`}}let J=$.transport;if(!i8(J))return{name:Z,loadError:"invalid MCP transport"};let X=J.type;if(X!=="stdio"&&X!=="sse"&&X!=="streamableHttp")return{name:Z,loadError:"invalid MCP transport type"};if(X!=="stdio"&&W!==void 0)return{name:Z,loadError:"top-level env is only supported for stdio MCP transports"};let Y=i8($.metadata)?$.metadata:void 0;if(X==="stdio"){let V=J.command;if(typeof V!=="string"||!V.trim())return{name:Z,loadError:"stdio MCP transport requires command"};let H=J.args;if(H!==void 0&&!tR(H))return{name:Z,loadError:"stdio MCP transport args must be strings"};let B=J.cwd;if(B!==void 0&&typeof B!=="string")return{name:Z,loadError:"stdio MCP transport cwd must be a string"};let G=J.env;if(G!==void 0&&!YK(G))return{name:Z,loadError:"stdio MCP transport env must be strings"};let K=$E({name:Z,transport:{type:"stdio",command:V,args:H,cwd:B,env:G},env:W,metadata:Y});if(!K.ok)return{name:Z,loadError:K.reason};let F=G||K.env?{...G??{},...K.env??{}}:void 0;return{name:Z,registration:{name:Z,transport:{type:"stdio",command:V,args:H,cwd:B,env:F},metadata:Y}}}if(typeof J.url!=="string"||!J.url.trim())return{name:Z,loadError:`${X} MCP transport requires url`};let j=J.headers;if(j!==void 0&&!YK(j))return{name:Z,loadError:`${X} MCP transport headers must be strings`};return{name:Z,registration:{name:Z,transport:X==="sse"?{type:"sse",url:J.url,headers:j}:{type:"streamableHttp",url:J.url,headers:j},metadata:Y}}}function DQ($){let Z=new Map;return $.map(({server:Q,owner:W,ownerLabel:J})=>{let X=e3(Q);if(!X.registration)return{owner:W,name:X.name,loadError:X.loadError??"invalid MCP server registration"};let Y=Z.get(X.registration.name);if(Z.has(X.registration.name)){let j=Y?` already registered by ${Y}`:"";return{owner:W,name:X.registration.name,loadError:`duplicate MCP server name "${X.registration.name}"${j}`}}return Z.set(X.registration.name,J),{owner:W,name:X.registration.name,registration:X.registration}})}import{createHash as ZE}from"node:crypto";var jK=64,QE=/[^a-zA-Z0-9_-]+/g,VK=8,WE=1,JE="mcp_tool";function XE($){return ZE("sha1").update($).digest("hex").slice(0,VK)}function YE($){return $.replace(QE,"_")}var LQ=({serverName:$,toolName:Z})=>{let Q=`${$}__${Z}`,W=YE(Q);if(W===Q&&Q.length<=jK)return Q;let J=XE(Q),X=jK-WE-VK;return`${W.slice(0,X)||JE}_${J}`};function G5($){return{[($.nameTransform??LQ)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function _Q($){let Z={};for(let Q of $.toolNames)Object.assign(Z,G5({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return Z}import{createTool as jE}from"@cline/shared";function VE($,Z){let Q=Z.description?.trim();if(Q)return Q;return`Execute MCP tool "${Z.name}" from server "${$}".`}async function n8($){let Z=await $.provider.listTools($.serverName),Q=$.nameTransform??LQ;return Z.map((W)=>{let J=Q({serverName:$.serverName,toolName:W.name});return jE({name:J,description:VE($.serverName,W),inputSchema:W.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(X,Y)=>$.provider.callTool({serverName:$.serverName,toolName:W.name,arguments:X&&typeof X==="object"&&!Array.isArray(X)?X:void 0,context:Y})})})}Y1();var KK={};N(KK,{listPluginToolsWithDiagnostics:()=>zQ,listPluginTools:()=>K5});import{stat as HE}from"node:fs/promises";import{isAbsolute as BE,relative as GE,resolve as BK}from"node:path";Y1();function KE($,Z){let Q=GE(BK($),BK(Z));return Q===""||!Q.startsWith("..")&&!BE(Q)}var FE=32,a8=new Map;function AE($,Z){if(!a8.has($)&&a8.size>=FE){let Q=a8.keys().next().value;if(Q)a8.delete(Q)}a8.set($,Z)}async function fE($){let Z=await Promise.all($.pluginPaths.map(async(Q)=>{try{let W=await HE(Q);return`${Q}:${W.mtimeMs}:${W.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:Z})}function GK($,Z){return $.map((Q)=>({...Q,enabled:!Z.has(Q.name)}))}function UE($){return $.sort((Z,Q)=>{let W=Z.name.localeCompare(Q.name);if(W!==0)return W;return Z.path.localeCompare(Q.path)})}async function DE($,Z){if(!$.setup)return{tools:[]};let Q=[],W={registerTool:(J)=>Q.push(J),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(J)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(W,{workspaceInfo:Z}),{tools:Q}}async function zQ($){let Z=c1({workspacePath:$.workspacePath,cwd:$.cwd}),Q=K1($.disabledToolNames);if(Z.length===0)return{tools:[],failures:[],warnings:[]};let W=await fE({pluginPaths:Z,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),J=a8.get(W);if(J)return{tools:GK(J.tools,Q),failures:J.failures,warnings:J.warnings};let X=[],Y=[],j=[],V;try{V=await E8({pluginPaths:Z,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),Y=[...V.failures],j=[...V.warnings];for(let B of V.extensions??[]){let G=B.__clinePluginPath;if(!G)continue;let K=KE($.workspacePath,G)?"workspace-plugin":"global-plugin",F;try{F=await DE(B,{rootPath:$.workspacePath})}catch(A){Y.push({pluginPath:G,pluginName:B.name,phase:"setup",message:A instanceof Error?A.message:String(A),stack:A instanceof Error?A.stack:void 0});continue}for(let A of F.tools)X.push({name:A.name,pluginName:B.name,path:G,source:K,description:A.description?.trim()||void 0})}}catch(B){Y=Z.map((G)=>({pluginPath:G,phase:"load",message:B instanceof Error?B.message:String(B),stack:B instanceof Error?B.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let H=UE(X);return AE(W,{tools:H,failures:Y,warnings:j}),{tools:GK(H,Q),failures:Y,warnings:j}}async function K5($){return(await zQ($)).tools}function f5($,Z){if(!Z)return"global";let Q=DK(Z,$);return!Q.startsWith("..")&&!UK(Q)?"workspace":"global"}function TE($,Z){return f5($,Z)==="workspace"?"workspace-plugin":"global-plugin"}function OE($,Z){let Q=DK(AK($),AK(Z));return Q===""||!Q.startsWith("..")&&!UK(Q)}function qE($){try{let Z=JSON.parse(LE($,"utf8"));return typeof Z.name==="string"&&Z.name.trim()?Z.name.trim():void 0}catch{return}}function ME($){let Z=FK($);while(!0){let Q=zE(Z,"package.json");if(A5(Q)){let J=qE(Q);if(J)return J;break}let W=FK(Z);if(W===Z)break;Z=W}return $J($,_E($))}function RE($){let Z=[];for(let Q of c1({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let W of u1([Q]))Z.push({directory:W,pluginName:ME(Q),pluginPath:Q,source:$.workspaceRoot?TE(Q,$.workspaceRoot):"global-plugin"});return Z.sort((Q,W)=>W.directory.length-Q.directory.length)}function EE($,Z){return Z.find((Q)=>OE(Q.directory,$))}function F5($){return[...$].sort((Z,Q)=>{let W=(J)=>{switch(J){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(Z.source!==Q.source)return W(Z.source)-W(Q.source);return Z.name.localeCompare(Q.name)})}function LK($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function _K($,Z){return $.cwd?.trim()||Z||process.cwd()}async function fK($,Z){if($.userInstructionService)return await Z($.userInstructionService);let Q=LK($),W=_K($,Q),J=w$({skills:{workspacePath:Q||void 0,includePluginSkills:!0,cwd:W},rules:{workspacePath:Q||void 0},workflows:{workspacePath:Q||void 0}});try{return await J.start(),await Z(J)}finally{J.stop()}}function NE($,Z){if(!$)return;let Q=$.listRecords("skill");if(Z.id){let W=Q.find((J)=>J.id===Z.id);if(W)return W}for(let W of Q)if(W.filePath===Z.path||W.item.name===Z.name||W.id===Z.name)return W;return}class S${async list($={}){return await fK($,async(Z)=>{let Q=LK($),W=RE({workspaceRoot:Q,cwd:_K($,Q)}),J=[],X=[],Y=[],j=[],V=[];if(Z){for(let B of Z.listRecords("workflow")){let G=B.item;J.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"workflow",source:f5(B.filePath,Q),description:G.instructions,toggleable:!1})}for(let B of Z.listRecords("rule")){let G=B.item;X.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"rule",source:f5(B.filePath,Q),description:G.instructions,toggleable:!1})}for(let B of Z.listRecords("skill")){let G=B.item,K=EE(B.filePath,W);Y.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"skill",source:K?.source??f5(B.filePath,Q),description:G.description,pluginName:K?.pluginName,pluginPath:K?.pluginPath,toggleable:!0})}}if(Q)try{for(let B of await K5({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))j.push({id:`${B.pluginName}:${B.name}:${B.path}`,name:B.name,path:B.path,enabled:B.enabled,kind:"tool",source:B.source,description:B.description,toggleable:!0})}catch{}let H=$0();if(p1({filePath:H}))try{for(let B of p0({filePath:H}))V.push({id:B.name,name:B.name,path:H,enabled:B.disabled!==!0,kind:"mcp",source:f5(H,Q),description:B.transport.type,toggleable:!0})}catch{}return{workflows:F5(J.filter((B)=>A5(B.path))),rules:F5(X.filter((B)=>A5(B.path))),skills:F5(Y.filter((B)=>A5(B.path))),tools:F5(j),mcp:F5(V.filter((B)=>A5(B.path)))}})}async toggle($){if($.type==="skills")return await fK($,async(Z)=>{let Q=NE(Z,$),W=Q?.filePath;if(!W)throw Error(`Unable to resolve skill setting '${$.id??$.name??$J($.path??"")}'.`);let J=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,X=$.enabled??(J!==void 0?!J:void 0);if(X===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??$J($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await hG({filePath:W,enabled:X}),await Z?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:Z}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)WZ($.name);else eV($.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()||$0(),W=$.enabled;if(W===void 0){let J=p0({filePath:Q}).find((X)=>X.name===Z);if(!J)throw Error(`Unknown MCP server: ${Z}`);W=J.disabled===!0}return _2({filePath:Q,name:Z,disabled:!W}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function M2(){return new S$}function TK($){return{async list(Z){let Q=$;if(Q.listSettings)return await Q.listSettings(Z);return await M2().list(Z)},async toggle(Z){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(Z);return await M2().toggle(Z)}}}function OK($){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)}}}var qK={};N(qK,{splitCoreSessionConfig:()=>U5,isSessionNotFoundError:()=>i1,SessionNotFoundError:()=>r1,SESSION_NOT_FOUND_ERROR_CODE:()=>R2});var R2="session_not_found";class r1 extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function i1($){return $ instanceof r1||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function U5($){let{hooks:Z,logger:Q,telemetry:W,extensionContext:J,extraTools:X,extensions:Y,onTeamEvent:j,onConsecutiveMistakeLimitReached:V,checkpoint:H,compaction:B,...G}=$,K={};if(Z)K.hooks=Z;if(Q)K.logger=Q;if(W)K.telemetry=W;if(J)K.extensionContext=J;if(X)K.extraTools=X;if(Y)K.extensions=Y;if(j)K.onTeamEvent=j;if(V)K.onConsecutiveMistakeLimitReached=V;if(H?.createCheckpoint)K.checkpoint=H;if(B?.compact)K.compaction=B;let F=Object.keys(K).length>0?K:void 0;return{config:{...G,...H?{checkpoint:{enabled:H.enabled}}:{},...B?{compaction:{enabled:B.enabled,strategy:B.strategy,thresholdRatio:B.thresholdRatio,reserveTokens:B.reserveTokens,preserveRecentTokens:B.preserveRecentTokens,maxInputTokens:B.maxInputTokens,summarizer:B.summarizer}}:{}},...F?{localRuntime:F}:{}}}function MK($){let Z=$.config;return"providerId"in Z?{...$,config:{...Z,...wE($.localRuntime)},localRuntime:$.localRuntime}:$}function ZJ($,Z={}){let Q=U5($.config),W=O0(Z.defaultCapabilities,$.capabilities),J=CE(Q.localRuntime,$.localRuntime),X=Z.withExtensionContext?.(J?.extensionContext);if(X)J={...J??{},extensionContext:X};return{...$,...Q,...J?{localRuntime:J}:{},...W?{capabilities:W}:{}}}function wE($){if(!$)return{};let{modelCatalogDefaults:Z,userInstructionService:Q,configExtensions:W,onTeamRestored:J,...X}=$;return X}function CE(...$){let Z={};for(let Q of $)if(Q)Object.assign(Z,Q);return Object.keys(Z).length>0?Z:void 0}L0();function RK($){let Z=$.input.config.telemetry??$.telemetry;if(!Z)return;Z.capture({event:g.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??_0.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 D5($){return!!$&&typeof $==="object"&&!Array.isArray($)}function QJ($){let Z=$?.trim();return Z?Z:void 0}function PE($,Z){let Q=$?.trim();if(!Q)return Z;let W=Date.parse(Q);if(!Number.isFinite(W))return Z;return new Date(W).toISOString()}function EK($,Z){return new Date(new Date($).getTime()+Math.max(0,Math.floor(Z))*1000).toISOString()}function NK($,Z){return new Date(new Date($).getTime()-Math.max(0,Math.floor(Z))*1000).toISOString()}function SE($,Z){if(!$)return Z;return new Date($).getTime()>=new Date(Z).getTime()?$:Z}function bE($,Z){let Q=$.eventId.trim(),W=$.eventType.trim(),J=$.source.trim(),X=QJ($.subject),Y=QJ($.dedupeKey)??`${W}:${J}:${X??Q}`;return{eventId:Q,eventType:W,source:J,subject:X,occurredAt:PE($.occurredAt,Z),workspaceRoot:QJ($.workspaceRoot),payload:D5($.payload)?$.payload:void 0,attributes:D5($.attributes)?$.attributes:void 0,dedupeKey:Y}}function WJ($,Z){if(!Z)return;let Q=Z.split("."),W=$;for(let J of Q){if(!D5(W))return;W=W[J]}return W}function yE($,Z){if($.attributes&&Object.hasOwn($.attributes,Z))return $.attributes[Z];if($.payload&&Object.hasOwn($.payload,Z))return $.payload[Z];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},W=WJ(Q,Z);if(W!==void 0)return W;if($.attributes){let J=WJ($.attributes,Z);if(J!==void 0)return J}if($.payload)return WJ($.payload,Z);return}function TQ($,Z){if(Array.isArray(Z))return Z.some((Q)=>TQ($,Q));if(Array.isArray($))return $.some((Q)=>TQ(Q,Z));if(D5(Z)){if(!D5($))return!1;return Object.entries(Z).every(([Q,W])=>TQ($[Q],W))}return Object.is($,Z)}function hE($,Z){if(!Z||Object.keys(Z).length===0)return!0;return Object.entries(Z).every(([Q,W])=>TQ(yE($,Q),W))}class JJ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let Z=new Date(this.nowFn()).toISOString(),Q=bE($,Z),W=this.store.insertEventLog(Q,{receivedAtIso:Z});if(!W.created)return this.logger?.debug("cron.event.duplicate",{eventId:W.record.eventId,eventType:W.record.eventType,source:W.record.source}),{event:W.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:W.record.dedupeKey}]};try{let J=this.store.listEventSpecsForType(Q.eventType),X=[],Y=[],j=[];for(let B of J){if(!hE(Q,B.filters)){X.push({specId:B.specId,externalId:B.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}Y.push(B);let G=this.materializeForSpec(B,Q,W.record.receivedAt);if(G.run)j.push(G.run);else X.push({specId:B.specId,externalId:B.externalId,reason:G.reason,dedupeKey:Q.dedupeKey})}let V=Y.length===0?"unmatched":j.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(W.record.eventId,{status:V,matchedSpecCount:Y.length,queuedRunCount:j.length,suppressedCount:X.filter((B)=>B.reason!=="filter_mismatch").length});let H=this.store.getEventLog(W.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:W.record.eventId,eventType:W.record.eventType,status:V,matchedSpecCount:Y.length,queuedRunCount:j.length}),{event:H??W.record,duplicate:!1,matchedSpecs:Y,queuedRuns:j,suppressions:X}}catch(J){if(this.store.updateEventLogProcessing(W.record.eventId,{status:"failed",error:J instanceof Error?J.message:String(J)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:W.record.eventId,eventType:W.record.eventType,error:J});throw J}}materializeForSpec($,Z,Q){let W=Z.dedupeKey??Z.eventId,J=$.debounceSeconds??0;if(J>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:W});if(V){let H=SE(V.scheduledFor,EK(Q,J)),B=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:Z.eventId,scheduledFor:H});if(B)return{run:B,reason:"dedupe_window"}}}let X=$.dedupeWindowSeconds??0;if(X>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:W,sinceIso:NK(Q,X)}))return{reason:"dedupe_window"};let Y=$.cooldownSeconds??0;if(Y>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:NK(Q,Y)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:Z.eventId,scheduledFor:J>0?EK(Q,J):Q}),reason:"dedupe_window"}}}class L5{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},Z=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let W of Z)if(this.materializeOneOff(W))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let W of Q)try{if(this.materializeSchedule(W))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as cE}from"node:path";import{buildClineSystemPrompt as uE}from"@cline/shared";import{nowIso as wK}from"@cline/shared/db";import{mkdirSync as kE,writeFileSync as IE}from"node:fs";import{join as xE}from"node:path";import{resolveCronReportsDir as gE}from"@cline/shared/storage";function b$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function E2($,Z){if(Z===void 0||Z===null)return;return`${$}: ${b$(Z)}`}function mE($,Z,Q){let W=[`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)}`],J=[E2("sessionId",$.sessionId),E2("startedAt",$.startedAt),E2("completedAt",$.completedAt),E2("triggerEventId",$.triggerEventId),E2("triggerEventType",Q?.eventType),E2("triggerEventSource",Q?.source),E2("triggerEventSubject",Q?.subject)];for(let X of J)if(X)W.push(X);return`---
|
|
228
|
+
`);if(Q<0)break;let J=this.buffer.slice(0,Q).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!J)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let X=Number.parseInt(J[1],10),Y=Q+4,j=Y+X;if(this.buffer.length<j)break;Z.push(this.buffer.slice(Y,j)),this.buffer=this.buffer.slice(j)}return Z}}class t3{buffer="";decoder=new XK("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`
|
|
229
|
+
`);if(Q<0)break;let W=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),W.length>0)Z.push(W)}return Z}}class YK{registration;process;nextRequestId=1;pending=new Map;framedParser=new o3;newlineParser=new t3;stderrBuffer="";connected=!1;protocolMode="newline";constructor($){this.registration=$}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=["newline","framed"],Z;for(let Q of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Q);try{await this.request("initialize",{protocolVersion:tR,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},$E),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Q;return}catch(W){Z=W instanceof Error?W:Error(String(W))}}throw Z??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((Z)=>typeof Z?.name==="string"&&typeof Z.inputSchema==="object"&&Z.inputSchema!==null).map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let Z=this.registration.transport;if(Z.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${Z.type}`);this.framedParser=new o3,this.newlineParser=new t3,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},W=sR(Z.command,Z.args??[],{cwd:Z.cwd,env:{...process.env,...Z.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=W,W.stdout.on("data",(J)=>this.handleStdout(J)),W.stderr.on("data",(J)=>{if(this.process!==W)return;if(this.stderrBuffer+=J.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),W.once("error",(J)=>{if(this.process!==W)return;this.failAllPending(Error(`MCP process error: ${DQ(J)}`))}),W.once("exit",(J,X)=>{if(this.process!==W)return;this.connected=!1,this.process=void 0;let Y=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${J??"null"}, signal=${X??"null"}).${Y}`))})}handleStdout($){try{let Z=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of Z){let W=JSON.parse(Q);if(typeof W.id!=="number")continue;let J=this.pending.get(W.id);if(!J)continue;if(this.pending.delete(W.id),clearTimeout(J.timeout),W.error){let X=W.error.message||`MCP request failed with code ${W.error.code??"unknown"}`;J.reject(Error(X));continue}J.resolve(W.result)}}catch(Z){this.handleProtocolFailure(Z)}}handleProtocolFailure($){let Z=this.process;if(!Z)return;this.connected=!1,this.process=void 0;let Q=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${DQ($)}.${Q}`)),Z.kill()}async request($,Z,Q=eR){let W=this.process;if(!W?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let J=this.nextRequestId++,X={jsonrpc:"2.0",id:J,method:$,...Z?{params:Z}:{}},Y=new Promise((j,V)=>{let H=setTimeout(()=>{this.pending.delete(J),V(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Q);this.pending.set(J,{resolve:j,reject:V,timeout:H})});try{W.stdin.write(this.protocolMode==="framed"?WK(X):JK(X))}catch(j){let V=this.pending.get(J);if(V)clearTimeout(V.timeout),this.pending.delete(J);throw j}return Y}notify($,Z){let Q=this.process;if(!Q?.stdin.writable)return;let W={jsonrpc:"2.0",method:$,...Z?{params:Z}:{}};Q.stdin.write(this.protocolMode==="framed"?WK(W):JK(W))}failAllPending($){for(let[Z,Q]of this.pending)clearTimeout(Q.timeout),this.pending.delete(Z),Q.reject($)}}class jK{registration;options;client;authContext;constructor($,Z){this.registration=$;this.options=Z}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=fQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??QK});this.authContext=$;try{let Z=new oR({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Q=AQ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await Z.connect(Q),await $.clearError(),this.client=Z}catch(Z){let Q=Z instanceof ZK?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):DQ(Z);throw await $.markError(Q),Error(Q)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((Q)=>({name:Q.name,description:Q.description,inputSchema:Q.inputSchema&&typeof Q.inputSchema==="object"&&!Array.isArray(Q.inputSchema)?Q.inputSchema:{}}))}catch(Z){return await this.handleOperationError(Z)}}async callTool($){let Z=await this.ensureConnectedClient();try{return await Z.callTool({name:$.name,arguments:$.arguments??{}})}catch(Q){return await this.handleOperationError(Q)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let Z=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${Z} Run authorizeMcpServerOAuth for this server.`;return`${Z} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let Z=this.authContext??fQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??QK}),Q=$ instanceof ZK?this.formatUnauthorizedMessage(Z.getLastAuthorizationUrl()):DQ($);throw await Z.markError(Q),Error(Q)}}function r8($={}){return(Z)=>Z.transport.type==="stdio"?new YK(Z):new jK(Z,$)}FQ();function r0(){return Date.now()}function ZE($){return $.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}class M2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let Z=this.servers.get($.name);if(!Z){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:r0()});return}let Q=JSON.stringify(Z.registration.transport)!==JSON.stringify($.transport);if(Z.registration={...$},Z.updatedAt=r0(),Q)await this.disconnectState(Z),Z.client=void 0,Z.toolCache=void 0,Z.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.connectState(Z)})}async disconnectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z)})}async setServerDisabled($,Z){await this.runExclusive($,async()=>{let Q=this.requireServer($);if(Q.registration={...Q.registration,disabled:Z},Q.updatedAt=r0(),Z)await this.disconnectState(Q)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,Z)=>$.name.localeCompare(Z.name))}async listTools($){let Z=this.requireServer($),Q=Z.toolCacheUpdatedAt??0;if(Z.toolCache&&r0()-Q<=this.toolsCacheTtlMs)return Z.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let Z=this.requireServer($),W=await(await this.ensureConnectedClient(Z)).listTools(),J=ZE(W);return Z.toolCache=J,Z.toolCacheUpdatedAt=r0(),Z.updatedAt=r0(),J})}async callTool($){return this.runExclusive($.serverName,async()=>{let Z=this.requireServer($.serverName),Q=await this.ensureConnectedClient(Z);return Z.updatedAt=r0(),Q.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let Z of $)await this.unregisterServer(Z)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=r0();try{let Z=$.client??await this.clientFactory($.registration);await Z.connect(),$.client=Z,$.status="connected",$.lastError=void 0,$.updatedAt=r0()}catch(Z){throw $.status="disconnected",$.lastError=Z instanceof Error?Z.message:String(Z),$.updatedAt=r0(),Z}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=r0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=r0()}}requireServer($){let Z=this.servers.get($);if(!Z)throw Error(`Unknown MCP server: ${$}`);return Z}async runExclusive($,Z){let Q=this.operationLocks.get($)??Promise.resolve(),W,J=new Promise((Y)=>{W=Y}),X=Q.catch(()=>{return}).then(()=>J);this.operationLocks.set($,X),await Q.catch(()=>{return});try{return await Z()}finally{if(W?.(),this.operationLocks.get($)===X)this.operationLocks.delete($)}}}function i8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function VK($){return i8($)&&Object.values($).every((Z)=>typeof Z==="string")}function QE($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function WE($){if(!i8($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function JE($){let Z=$.env?Object.entries($.env):[];if(Z.length===0)return{ok:!0};let Q={};for(let[W,J]of Z){if(typeof J==="string"){Q[W]=J;continue}let X=J.fromEnv?.trim()||W,Y=process.env[X];if(typeof Y==="string"&&Y.length>0){Q[W]=Y;continue}if(typeof J.value==="string"){Q[W]=J.value;continue}if(J.required===!0)return{ok:!1,reason:`required environment variable "${X}" is not set`}}return{ok:!0,env:Object.keys(Q).length>0?Q:void 0}}function e3($){if(!i8($))return{name:"",loadError:"invalid MCP server registration"};let Z=typeof $.name==="string"?$.name.trim():"";if(!Z)return{name:Z,loadError:"empty MCP server name"};let Q=$.env,W=Q===void 0?void 0:Q;if(W!==void 0){if(!i8(W))return{name:Z,loadError:"invalid env"};for(let[V,H]of Object.entries(W))if(typeof H!=="string"&&!WE(H))return{name:Z,loadError:`invalid env "${V}"`}}let J=$.transport;if(!i8(J))return{name:Z,loadError:"invalid MCP transport"};let X=J.type;if(X!=="stdio"&&X!=="sse"&&X!=="streamableHttp")return{name:Z,loadError:"invalid MCP transport type"};if(X!=="stdio"&&W!==void 0)return{name:Z,loadError:"top-level env is only supported for stdio MCP transports"};let Y=i8($.metadata)?$.metadata:void 0;if(X==="stdio"){let V=J.command;if(typeof V!=="string"||!V.trim())return{name:Z,loadError:"stdio MCP transport requires command"};let H=J.args;if(H!==void 0&&!QE(H))return{name:Z,loadError:"stdio MCP transport args must be strings"};let B=J.cwd;if(B!==void 0&&typeof B!=="string")return{name:Z,loadError:"stdio MCP transport cwd must be a string"};let G=J.env;if(G!==void 0&&!VK(G))return{name:Z,loadError:"stdio MCP transport env must be strings"};let K=JE({name:Z,transport:{type:"stdio",command:V,args:H,cwd:B,env:G},env:W,metadata:Y});if(!K.ok)return{name:Z,loadError:K.reason};let F=G||K.env?{...G??{},...K.env??{}}:void 0;return{name:Z,registration:{name:Z,transport:{type:"stdio",command:V,args:H,cwd:B,env:F},metadata:Y}}}if(typeof J.url!=="string"||!J.url.trim())return{name:Z,loadError:`${X} MCP transport requires url`};let j=J.headers;if(j!==void 0&&!VK(j))return{name:Z,loadError:`${X} MCP transport headers must be strings`};return{name:Z,registration:{name:Z,transport:X==="sse"?{type:"sse",url:J.url,headers:j}:{type:"streamableHttp",url:J.url,headers:j},metadata:Y}}}function LQ($){let Z=new Map;return $.map(({server:Q,owner:W,ownerLabel:J})=>{let X=e3(Q);if(!X.registration)return{owner:W,name:X.name,loadError:X.loadError??"invalid MCP server registration"};let Y=Z.get(X.registration.name);if(Z.has(X.registration.name)){let j=Y?` already registered by ${Y}`:"";return{owner:W,name:X.registration.name,loadError:`duplicate MCP server name "${X.registration.name}"${j}`}}return Z.set(X.registration.name,J),{owner:W,name:X.registration.name,registration:X.registration}})}import{createHash as XE}from"node:crypto";var HK=64,YE=/[^a-zA-Z0-9_-]+/g,BK=8,jE=1,VE="mcp_tool";function HE($){return XE("sha1").update($).digest("hex").slice(0,BK)}function BE($){return $.replace(YE,"_")}var _Q=({serverName:$,toolName:Z})=>{let Q=`${$}__${Z}`,W=BE(Q);if(W===Q&&Q.length<=HK)return Q;let J=HE(Q),X=HK-jE-BK;return`${W.slice(0,X)||VE}_${J}`};function G5($){return{[($.nameTransform??_Q)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function zQ($){let Z={};for(let Q of $.toolNames)Object.assign(Z,G5({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return Z}import{createTool as GE}from"@cline/shared";function KE($,Z){let Q=Z.description?.trim();if(Q)return Q;return`Execute MCP tool "${Z.name}" from server "${$}".`}async function n8($){let Z=await $.provider.listTools($.serverName),Q=$.nameTransform??_Q;return Z.map((W)=>{let J=Q({serverName:$.serverName,toolName:W.name});return GE({name:J,description:KE($.serverName,W),inputSchema:W.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(X,Y)=>$.provider.callTool({serverName:$.serverName,toolName:W.name,arguments:X&&typeof X==="object"&&!Array.isArray(X)?X:void 0,context:Y})})})}Y1();var AK={};N(AK,{listPluginToolsWithDiagnostics:()=>TQ,listPluginTools:()=>K5});import{stat as FE}from"node:fs/promises";import{isAbsolute as AE,relative as fE,resolve as KK}from"node:path";Y1();function UE($,Z){let Q=fE(KK($),KK(Z));return Q===""||!Q.startsWith("..")&&!AE(Q)}var DE=32,a8=new Map;function LE($,Z){if(!a8.has($)&&a8.size>=DE){let Q=a8.keys().next().value;if(Q)a8.delete(Q)}a8.set($,Z)}async function _E($){let Z=await Promise.all($.pluginPaths.map(async(Q)=>{try{let W=await FE(Q);return`${Q}:${W.mtimeMs}:${W.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:Z})}function FK($,Z){return $.map((Q)=>({...Q,enabled:!Z.has(Q.name)}))}function zE($){return $.sort((Z,Q)=>{let W=Z.name.localeCompare(Q.name);if(W!==0)return W;return Z.path.localeCompare(Q.path)})}async function TE($,Z){if(!$.setup)return{tools:[]};let Q=[],W={registerTool:(J)=>Q.push(J),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(J)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(W,{workspaceInfo:Z}),{tools:Q}}async function TQ($){let Z=c1({workspacePath:$.workspacePath,cwd:$.cwd}),Q=F1($.disabledToolNames);if(Z.length===0)return{tools:[],failures:[],warnings:[]};let W=await _E({pluginPaths:Z,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),J=a8.get(W);if(J)return{tools:FK(J.tools,Q),failures:J.failures,warnings:J.warnings};let X=[],Y=[],j=[],V;try{V=await E8({pluginPaths:Z,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),Y=[...V.failures],j=[...V.warnings];for(let B of V.extensions??[]){let G=B.__clinePluginPath;if(!G)continue;let K=UE($.workspacePath,G)?"workspace-plugin":"global-plugin",F;try{F=await TE(B,{rootPath:$.workspacePath})}catch(A){Y.push({pluginPath:G,pluginName:B.name,phase:"setup",message:A instanceof Error?A.message:String(A),stack:A instanceof Error?A.stack:void 0});continue}for(let A of F.tools)X.push({name:A.name,pluginName:B.name,path:G,source:K,description:A.description?.trim()||void 0})}}catch(B){Y=Z.map((G)=>({pluginPath:G,phase:"load",message:B instanceof Error?B.message:String(B),stack:B instanceof Error?B.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let H=zE(X);return LE(W,{tools:H,failures:Y,warnings:j}),{tools:FK(H,Q),failures:Y,warnings:j}}async function K5($){return(await TQ($)).tools}function f5($,Z){if(!Z)return"global";let Q=_K(Z,$);return!Q.startsWith("..")&&!LK(Q)?"workspace":"global"}function RE($,Z){return f5($,Z)==="workspace"?"workspace-plugin":"global-plugin"}function EE($,Z){let Q=_K(UK($),UK(Z));return Q===""||!Q.startsWith("..")&&!LK(Q)}function NE($){try{let Z=JSON.parse(OE($,"utf8"));return typeof Z.name==="string"&&Z.name.trim()?Z.name.trim():void 0}catch{return}}function CE($){let Z=fK($);while(!0){let Q=ME(Z,"package.json");if(A5(Q)){let J=NE(Q);if(J)return J;break}let W=fK(Z);if(W===Z)break;Z=W}return $J($,qE($))}function wE($){let Z=[];for(let Q of c1({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let W of u1([Q]))Z.push({directory:W,pluginName:CE(Q),pluginPath:Q,source:$.workspaceRoot?RE(Q,$.workspaceRoot):"global-plugin"});return Z.sort((Q,W)=>W.directory.length-Q.directory.length)}function PE($,Z){return Z.find((Q)=>EE(Q.directory,$))}function F5($){return[...$].sort((Z,Q)=>{let W=(J)=>{switch(J){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(Z.source!==Q.source)return W(Z.source)-W(Q.source);return Z.name.localeCompare(Q.name)})}function zK($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function TK($,Z){return $.cwd?.trim()||Z||process.cwd()}async function DK($,Z){if($.userInstructionService)return await Z($.userInstructionService);let Q=zK($),W=TK($,Q),J=C$({skills:{workspacePath:Q||void 0,includePluginSkills:!0,cwd:W},rules:{workspacePath:Q||void 0},workflows:{workspacePath:Q||void 0}});try{return await J.start(),await Z(J)}finally{J.stop()}}function SE($,Z){if(!$)return;let Q=$.listRecords("skill");if(Z.id){let W=Q.find((J)=>J.id===Z.id);if(W)return W}for(let W of Q)if(W.filePath===Z.path||W.item.name===Z.name||W.id===Z.name)return W;return}class S${async list($={}){return await DK($,async(Z)=>{let Q=zK($),W=wE({workspaceRoot:Q,cwd:TK($,Q)}),J=[],X=[],Y=[],j=[],V=[];if(Z){for(let B of Z.listRecords("workflow")){let G=B.item;J.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"workflow",source:f5(B.filePath,Q),description:G.instructions,toggleable:!1})}for(let B of Z.listRecords("rule")){let G=B.item;X.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"rule",source:f5(B.filePath,Q),description:G.instructions,toggleable:!1})}for(let B of Z.listRecords("skill")){let G=B.item,K=PE(B.filePath,W);Y.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"skill",source:K?.source??f5(B.filePath,Q),description:G.description,pluginName:K?.pluginName,pluginPath:K?.pluginPath,toggleable:!0})}}if(Q)try{for(let B of await K5({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))j.push({id:`${B.pluginName}:${B.name}:${B.path}`,name:B.name,path:B.path,enabled:B.enabled,kind:"tool",source:B.source,description:B.description,toggleable:!0})}catch{}let H=$0();if(p1({filePath:H}))try{for(let B of p0({filePath:H}))V.push({id:B.name,name:B.name,path:H,enabled:B.disabled!==!0,kind:"mcp",source:f5(H,Q),description:B.transport.type,toggleable:!0})}catch{}return{workflows:F5(J.filter((B)=>A5(B.path))),rules:F5(X.filter((B)=>A5(B.path))),skills:F5(Y.filter((B)=>A5(B.path))),tools:F5(j),mcp:F5(V.filter((B)=>A5(B.path)))}})}async toggle($){if($.type==="skills")return await DK($,async(Z)=>{let Q=SE(Z,$),W=Q?.filePath;if(!W)throw Error(`Unable to resolve skill setting '${$.id??$.name??$J($.path??"")}'.`);let J=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,X=$.enabled??(J!==void 0?!J:void 0);if(X===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??$J($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await IG({filePath:W,enabled:X}),await Z?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:Z}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)JZ($.name);else ZH($.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()||$0(),W=$.enabled;if(W===void 0){let J=p0({filePath:Q}).find((X)=>X.name===Z);if(!J)throw Error(`Unknown MCP server: ${Z}`);W=J.disabled===!0}return z2({filePath:Q,name:Z,disabled:!W}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function R2(){return new S$}function qK($){return{async list(Z){let Q=$;if(Q.listSettings)return await Q.listSettings(Z);return await R2().list(Z)},async toggle(Z){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(Z);return await R2().toggle(Z)}}}function MK($){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)}}}var RK={};N(RK,{splitCoreSessionConfig:()=>U5,isSessionNotFoundError:()=>i1,SessionNotFoundError:()=>r1,SESSION_NOT_FOUND_ERROR_CODE:()=>E2});var E2="session_not_found";class r1 extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function i1($){return $ instanceof r1||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function U5($){let{hooks:Z,logger:Q,telemetry:W,extensionContext:J,extraTools:X,extensions:Y,onTeamEvent:j,onConsecutiveMistakeLimitReached:V,checkpoint:H,compaction:B,...G}=$,K={};if(Z)K.hooks=Z;if(Q)K.logger=Q;if(W)K.telemetry=W;if(J)K.extensionContext=J;if(X)K.extraTools=X;if(Y)K.extensions=Y;if(j)K.onTeamEvent=j;if(V)K.onConsecutiveMistakeLimitReached=V;if(H?.createCheckpoint)K.checkpoint=H;if(B?.compact)K.compaction=B;let F=Object.keys(K).length>0?K:void 0;return{config:{...G,...H?{checkpoint:{enabled:H.enabled}}:{},...B?{compaction:{enabled:B.enabled,strategy:B.strategy,thresholdRatio:B.thresholdRatio,reserveTokens:B.reserveTokens,preserveRecentTokens:B.preserveRecentTokens,maxInputTokens:B.maxInputTokens,summarizer:B.summarizer}}:{}},...F?{localRuntime:F}:{}}}function EK($){let Z=$.config;return"providerId"in Z?{...$,config:{...Z,...bE($.localRuntime)},localRuntime:$.localRuntime}:$}function ZJ($,Z={}){let Q=U5($.config),W=q0(Z.defaultCapabilities,$.capabilities),J=yE(Q.localRuntime,$.localRuntime),X=Z.withExtensionContext?.(J?.extensionContext);if(X)J={...J??{},extensionContext:X};return{...$,...Q,...J?{localRuntime:J}:{},...W?{capabilities:W}:{}}}function bE($){if(!$)return{};let{modelCatalogDefaults:Z,userInstructionService:Q,configExtensions:W,onTeamRestored:J,...X}=$;return X}function yE(...$){let Z={};for(let Q of $)if(Q)Object.assign(Z,Q);return Object.keys(Z).length>0?Z:void 0}L0();function NK($){let Z=$.input.config.telemetry??$.telemetry;if(!Z)return;Z.capture({event:g.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??z0.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 D5($){return!!$&&typeof $==="object"&&!Array.isArray($)}function QJ($){let Z=$?.trim();return Z?Z:void 0}function hE($,Z){let Q=$?.trim();if(!Q)return Z;let W=Date.parse(Q);if(!Number.isFinite(W))return Z;return new Date(W).toISOString()}function CK($,Z){return new Date(new Date($).getTime()+Math.max(0,Math.floor(Z))*1000).toISOString()}function wK($,Z){return new Date(new Date($).getTime()-Math.max(0,Math.floor(Z))*1000).toISOString()}function kE($,Z){if(!$)return Z;return new Date($).getTime()>=new Date(Z).getTime()?$:Z}function IE($,Z){let Q=$.eventId.trim(),W=$.eventType.trim(),J=$.source.trim(),X=QJ($.subject),Y=QJ($.dedupeKey)??`${W}:${J}:${X??Q}`;return{eventId:Q,eventType:W,source:J,subject:X,occurredAt:hE($.occurredAt,Z),workspaceRoot:QJ($.workspaceRoot),payload:D5($.payload)?$.payload:void 0,attributes:D5($.attributes)?$.attributes:void 0,dedupeKey:Y}}function WJ($,Z){if(!Z)return;let Q=Z.split("."),W=$;for(let J of Q){if(!D5(W))return;W=W[J]}return W}function xE($,Z){if($.attributes&&Object.hasOwn($.attributes,Z))return $.attributes[Z];if($.payload&&Object.hasOwn($.payload,Z))return $.payload[Z];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},W=WJ(Q,Z);if(W!==void 0)return W;if($.attributes){let J=WJ($.attributes,Z);if(J!==void 0)return J}if($.payload)return WJ($.payload,Z);return}function OQ($,Z){if(Array.isArray(Z))return Z.some((Q)=>OQ($,Q));if(Array.isArray($))return $.some((Q)=>OQ(Q,Z));if(D5(Z)){if(!D5($))return!1;return Object.entries(Z).every(([Q,W])=>OQ($[Q],W))}return Object.is($,Z)}function gE($,Z){if(!Z||Object.keys(Z).length===0)return!0;return Object.entries(Z).every(([Q,W])=>OQ(xE($,Q),W))}class JJ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let Z=new Date(this.nowFn()).toISOString(),Q=IE($,Z),W=this.store.insertEventLog(Q,{receivedAtIso:Z});if(!W.created)return this.logger?.debug("cron.event.duplicate",{eventId:W.record.eventId,eventType:W.record.eventType,source:W.record.source}),{event:W.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:W.record.dedupeKey}]};try{let J=this.store.listEventSpecsForType(Q.eventType),X=[],Y=[],j=[];for(let B of J){if(!gE(Q,B.filters)){X.push({specId:B.specId,externalId:B.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}Y.push(B);let G=this.materializeForSpec(B,Q,W.record.receivedAt);if(G.run)j.push(G.run);else X.push({specId:B.specId,externalId:B.externalId,reason:G.reason,dedupeKey:Q.dedupeKey})}let V=Y.length===0?"unmatched":j.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(W.record.eventId,{status:V,matchedSpecCount:Y.length,queuedRunCount:j.length,suppressedCount:X.filter((B)=>B.reason!=="filter_mismatch").length});let H=this.store.getEventLog(W.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:W.record.eventId,eventType:W.record.eventType,status:V,matchedSpecCount:Y.length,queuedRunCount:j.length}),{event:H??W.record,duplicate:!1,matchedSpecs:Y,queuedRuns:j,suppressions:X}}catch(J){if(this.store.updateEventLogProcessing(W.record.eventId,{status:"failed",error:J instanceof Error?J.message:String(J)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:W.record.eventId,eventType:W.record.eventType,error:J});throw J}}materializeForSpec($,Z,Q){let W=Z.dedupeKey??Z.eventId,J=$.debounceSeconds??0;if(J>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:W});if(V){let H=kE(V.scheduledFor,CK(Q,J)),B=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:Z.eventId,scheduledFor:H});if(B)return{run:B,reason:"dedupe_window"}}}let X=$.dedupeWindowSeconds??0;if(X>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:W,sinceIso:wK(Q,X)}))return{reason:"dedupe_window"};let Y=$.cooldownSeconds??0;if(Y>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:wK(Q,Y)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:Z.eventId,scheduledFor:J>0?CK(Q,J):Q}),reason:"dedupe_window"}}}class L5{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},Z=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let W of Z)if(this.materializeOneOff(W))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let W of Q)try{if(this.materializeSchedule(W))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as pE}from"node:path";import{buildClineSystemPrompt as rE}from"@cline/shared";import{nowIso as PK}from"@cline/shared/db";import{mkdirSync as mE,writeFileSync as vE}from"node:fs";import{join as cE}from"node:path";import{resolveCronReportsDir as uE}from"@cline/shared/storage";function b$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function N2($,Z){if(Z===void 0||Z===null)return;return`${$}: ${b$(Z)}`}function dE($,Z,Q){let W=[`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)}`],J=[N2("sessionId",$.sessionId),N2("startedAt",$.startedAt),N2("completedAt",$.completedAt),N2("triggerEventId",$.triggerEventId),N2("triggerEventType",Q?.eventType),N2("triggerEventSource",Q?.source),N2("triggerEventSubject",Q?.subject)];for(let X of J)if(X)W.push(X);return`---
|
|
230
230
|
${W.join(`
|
|
231
231
|
`)}
|
|
232
232
|
---
|
|
233
|
-
`}function
|
|
233
|
+
`}function lE($){let Z=[];if($.triggerEvent){let Q=$.triggerEvent,W=[`- eventId: ${Q.eventId}`,`- eventType: ${Q.eventType}`,`- source: ${Q.source}`,Q.subject?`- subject: ${Q.subject}`:"",`- occurredAt: ${Q.occurredAt}`,Q.dedupeKey?`- dedupeKey: ${Q.dedupeKey}`:"",Q.attributes?`- attributes: ${JSON.stringify(Q.attributes)}`:""].filter((J)=>J.length>0);Z.push(`## Trigger Event
|
|
234
234
|
|
|
235
235
|
${W.join(`
|
|
236
236
|
`)}
|
|
@@ -249,17 +249,17 @@ ${W.join(`
|
|
|
249
249
|
${Q.join(`
|
|
250
250
|
`)}
|
|
251
251
|
`)}return Z.join(`
|
|
252
|
-
`)}function XJ($){let Z=
|
|
253
|
-
${
|
|
254
|
-
`)}class jJ extends Error{constructor($){super($);this.name="TimeoutError"}}async function
|
|
252
|
+
`)}function XJ($){let Z=uE($.specs);mE(Z,{recursive:!0});let Q=cE(Z,`${$.run.runId}.md`),W=`${dE($.run,$.spec,$.data.triggerEvent)}
|
|
253
|
+
${lE($.data)}`;return vE(Q,W,"utf8"),Q}class YJ{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,Z,Q){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let W=Math.max(1,Math.floor(Q)),J=this.activeExecutions.get($)??new Set;if(J.size>=W)return!1;return J.add(Z),this.activeExecutions.set($,J),!0}release($,Z){let Q=this.activeExecutions.get($);if(!Q)return;if(Q.delete(Z),Q.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let Z of this.activeExecutions.values())$+=Z.size;return $}}var iE=15000,nE=90,SK=["rules","skills","plugins"];function aE($,Z){return new Set($.extensions??SK).has(Z)}function sE($,Z){if($.tools===void 0)return{"*":{autoApprove:!0}};let Q={"*":{enabled:!1,autoApprove:!0}};for(let W of $.tools)Q[W]={enabled:!0,autoApprove:!0};if(Z==="yolo")Q[U0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Q}function oE($){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(`
|
|
254
|
+
`)}class jJ extends Error{constructor($){super($);this.name="TimeoutError"}}async function tE($,Z){if(Z<=0)return $;let Q,W=new Promise((J,X)=>{Q=setTimeout(()=>{X(new jJ("cron run timed out"))},Z)});try{return await Promise.race([$,W])}finally{if(Q)clearTimeout(Q)}}class _5{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 YJ($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??nE)*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??iE);await this.tick(),this.timer=setInterval(()=>void this.tick(),$)}async stop(){let $=this.started;if(this.started=!1,this.stopping=!0,this.timer)clearInterval(this.timer),this.timer=void 0;if(!$)return;let Z=[...this.activeRuns.entries()];await Promise.all(Z.map(async([Q,W])=>{if(W.sessionId)try{await this.options.runtimeHandlers.abortSession(W.sessionId)}catch{}try{this.store.requeueRun({runId:Q,claimToken:W.claimToken,error:"runner stopped before completion"})}catch{}}))}async dispose(){if(this.disposed)return;this.disposed=!0,await this.stop()}async tick(){if(this.ticking)return;this.ticking=!0;try{this.materializer.materializeAll();let $=this.store.claimDueRuns({nowIso:PK(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((Z)=>this.executeClaim(Z)))}catch($){let Z=this.options.logger;if(Z)if(Z.error)Z.error("cron.runner.tick.failed",{error:$});else Z.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,Z])=>{let Q=this.store.getRun($);return Q?[{...Q,...Z}]:[]})}async executeClaim($){let Z=$.run,Q=this.store.getSpec(Z.specId);if(!Q){this.store.completeRun(Z.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!Q.enabled||Q.removed){this.store.completeRun(Z.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let W=Q.maxParallel&&Q.maxParallel>0?Q.maxParallel:1;if(!this.limiter.acquire(Q.specId,Z.runId,W)){this.store.requeueRun({runId:Z.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(Q.specId,Z.runId),this.store.requeueRun({runId:Z.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(Z.runId,{claimToken:$.claimToken});let X=Z.triggerEventId?this.store.getEventLog(Z.triggerEventId):void 0,Y,j,V=Date.now(),H;if(Q.timeoutSeconds&&Q.timeoutSeconds>0)H=V+Q.timeoutSeconds*1000;try{j=this.startClaimLeaseHeartbeat($);let B=await this.buildStartRequest(Q);if(Y=(await this.options.runtimeHandlers.startSession(B)).sessionId.trim(),!Y)throw Error("runtime returned empty sessionId");this.activeRuns.set(Z.runId,{claimToken:$.claimToken,sessionId:Y}),this.store.attachSessionIdToRun(Z.runId,Y);let K={config:B,prompt:this.buildPrompt(Q,X)},F=this.options.runtimeHandlers.sendSession(Y,K),A=H?Math.max(1,H-Date.now()):0,f=(await tE(F,A)).result,D=Date.now(),U=XJ({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:Y,status:"done"},spec:Q,data:{finalText:f.text,usage:f.usage,toolCalls:f.toolCalls,durationMs:D-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"done",sessionId:Y,reportPath:U,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",Q,Z.runId),this.store.updateSpecLastRunAt(Q.specId,PK())}catch(B){let G=B instanceof jJ;if(Y&&G)try{await this.options.runtimeHandlers.abortSession(Y)}catch{}let K=B instanceof Error?B.message:String(B),F=Date.now(),A=XJ({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:Y,status:"failed"},spec:Q,data:{error:K,durationMs:F-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"failed",sessionId:Y,reportPath:A,error:K,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.failed",Q,Z.runId)}finally{if(j?.(),Y)try{await this.options.runtimeHandlers.stopSession(Y)}catch{}this.activeRuns.delete(Z.runId),this.limiter.release(Q.specId,Z.runId)}}publishScheduleExecutionEvent($,Z,Q){if(Z.source!=="hub-schedule"||!this.options.eventPublisher)return;let W=this.store.getRun(Q);if(!W)return;let J=W.status==="done"?"success":W.status==="cancelled"?"aborted":W.status==="running"?"running":W.status==="queued"?"pending":"failed";this.options.eventPublisher($,{scheduleId:Z.externalId,executionId:W.runId,sessionId:W.sessionId,triggeredAt:new Date(W.scheduledFor??W.createdAt).getTime(),startedAt:W.startedAt?new Date(W.startedAt).getTime():void 0,endedAt:W.completedAt?new Date(W.completedAt).getTime():void 0,status:J,errorMessage:W.error})}buildPrompt($,Z){let Q=$.prompt??"";if(!Z)return Q;let W={eventId:Z.eventId,eventType:Z.eventType,source:Z.source,subject:Z.subject,occurredAt:Z.occurredAt,workspaceRoot:Z.workspaceRoot,dedupeKey:Z.dedupeKey,attributes:Z.attributes,payload:Z.payload};return`${Q}
|
|
255
255
|
|
|
256
256
|
Trigger event:
|
|
257
|
-
${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Q=setInterval(()=>{let W=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,W))clearInterval(Q)},Z);return()=>clearInterval(Q)}async buildSystemPrompt($,Z,Q,W){let J=
|
|
257
|
+
${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Q=setInterval(()=>{let W=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,W))clearInterval(Q)},Z);return()=>clearInterval(Q)}async buildSystemPrompt($,Z,Q,W){let J=oE($.notesDirectory),X=u8(void 0,J),Y=await l6(Z),j=rE({ide:"Cline Cron",workspaceRoot:Z,workspaceName:pE(Z),metadata:Y,rules:$.systemPrompt?void 0:X,mode:Q,providerId:W,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?u8(j,X)??j:j}async buildStartRequest($){let Z=($.workspaceRoot??"").trim(),Q=($.providerId??"").trim(),W=($.modelId??"").trim(),J=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,X=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():Z;if(!Z)throw Error("cron spec requires workspaceRoot");let Y=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:Z,cwd:X,provider:Q,model:W,mode:Y,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,Z,Y,Q),maxIterations:$.maxIterations,enableTools:J?.enableTools??!0,enableSpawn:J?.enableSpawn??!0,enableTeams:J?.enableTeams??!0,autoApproveTools:J?.autoApproveTools??!0,toolPolicies:sE($,Y),configExtensions:SK.filter((j)=>aE($,j))}}}import{existsSync as TN,readdirSync as ON,readFileSync as qN,statSync as MN}from"node:fs";import{relative as RN}from"node:path";import{resolveCronSpecsDir as EN}from"@cline/shared/storage";function z5($,Z,Q,W){let J=new Set;function X(Y){let j=Y.toLowerCase();if(W){let H=W.indexOf(j);if(H!==-1)return H+Z}let V=Number(Y);if(!Number.isInteger(V)||V<Z||V>Q)throw Error(`Invalid cron value "${Y}" for range [${Z}-${Q}]`);return V}for(let Y of $.split(",")){if(Y==="*"){for(let H=Z;H<=Q;H+=1)J.add(H);continue}let j=Y.indexOf("/");if(j!==-1){let H=Y.slice(0,j),B=Number(Y.slice(j+1));if(!Number.isInteger(B)||B<1)throw Error(`Invalid step "${Y.slice(j+1)}"`);let G=Z,K=Q;if(H!=="*"){let F=H.indexOf("-");if(F!==-1)G=X(H.slice(0,F)),K=X(H.slice(F+1));else G=X(H)}if(G>K)throw Error(`Invalid cron range "${H}"`);for(let F=G;F<=K;F+=B)J.add(F);continue}let V=Y.indexOf("-");if(V!==-1){let H=X(Y.slice(0,V)),B=X(Y.slice(V+1));if(H>B)throw Error(`Invalid cron range "${Y}"`);for(let G=H;G<=B;G+=1)J.add(G);continue}J.add(X(Y))}return[...J].sort((Y,j)=>Y-j)}var eE=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],yK=["sun","mon","tue","wed","thu","fri","sat"];function T5($,Z,Q){let W=$[Z];if(typeof W!=="string")throw Error(`Invalid cron pattern "${Q}": missing field ${Z+1}`);return W}function VJ($,Z){let Q=$[0];if(typeof Q!=="number")throw Error(`Invalid cron pattern: no values parsed for ${Z}`);return Q}function HJ($){let Z=$.trim().split(/\s+/);if(Z.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${Z.length}`);return{minutes:z5(T5(Z,0,$),0,59),hours:z5(T5(Z,1,$),0,23),daysOfMonth:z5(T5(Z,2,$),1,31),months:z5(T5(Z,3,$),1,12,eE),daysOfWeek:z5(T5(Z,4,$),0,6,yK)}}function BJ($){HJ($)}function hK($,Z,Q=Date.now()){C2($,Q,Z)}var bK=new Map,$N=new Map(yK.map(($,Z)=>[$,Z]));function kK($){let Z=$?.trim();return Z?Z:void 0}function IK($){let Z=bK.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 bK.set($,Q),Q}function ZN($){let Z=kK($);if(!Z)return;IK(Z).format(new Date)}function QN($,Z){let Q=IK(Z).formatToParts(new Date($)),W=new Map(Q.map((Y)=>[Y.type,Y.value])),J=W.get("weekday")?.toLowerCase().slice(0,3)??"",X=$N.get(J);if(X===void 0)throw Error(`Unable to resolve weekday for timezone "${Z}"`);return{month:Number(W.get("month")),dayOfMonth:Number(W.get("day")),dayOfWeek:X,hour:Number(W.get("hour")),minute:Number(W.get("minute"))}}function WN($){let Z=new Date($);return{month:Z.getMonth()+1,dayOfMonth:Z.getDate(),dayOfWeek:Z.getDay(),hour:Z.getHours(),minute:Z.getMinutes()}}function JN($,Z){return $.months.includes(Z.month)&&$.daysOfMonth.includes(Z.dayOfMonth)&&$.daysOfWeek.includes(Z.dayOfWeek)&&$.hours.includes(Z.hour)&&$.minutes.includes(Z.minute)}function XN($,Z,Q){let W=HJ($),J=new Date(Z);J.setSeconds(0,0);let X=J.getTime()+60000,Y=new Date(Z);Y.setFullYear(Y.getFullYear()+4);let j=Y.getTime();while(X<=j){if(JN(W,QN(X,Q)))return X;X+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Q}"`)}function C2($,Z,Q){let W=kK(Q);if(W)return ZN(W),XN($,Z,W);let J=HJ($),X=new Date(Z);X.setSeconds(0,0),X=new Date(X.getTime()+60000);let Y=new Date(Z);Y.setFullYear(Y.getFullYear()+4);while(X<=Y){let{month:j,dayOfMonth:V,dayOfWeek:H,hour:B,minute:G}=WN(X.getTime());if(!J.months.includes(j)){let K=J.months.find((A)=>A>j)??VJ(J.months,"months"),F=K<=j?1:0;X=new Date(X.getFullYear()+F,K-1,1,0,0,0,0);continue}if(!J.daysOfMonth.includes(V)||!J.daysOfWeek.includes(H)){X=new Date(X.getFullYear(),X.getMonth(),V+1,0,0,0,0);continue}if(!J.hours.includes(B)){let K=J.hours.find((A)=>A>B)??VJ(J.hours,"hours"),F=K<=B?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate()+F,K,0,0,0);continue}if(!J.minutes.includes(G)){let K=J.minutes.find((A)=>A>G)??VJ(J.minutes,"minutes"),F=K<=G?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate(),X.getHours()+F,K,0,0);continue}return X.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{createHash as YN}from"node:crypto";import jN from"yaml";function VN($){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 HN($){let Z=$.replace(/\r\n/g,`
|
|
258
258
|
`);if(!Z.startsWith(`---
|
|
259
259
|
`))return{frontmatter:void 0,body:$};let Q=Z.slice(4),W=Q.indexOf(`
|
|
260
260
|
---`);if(W===-1)return{frontmatter:void 0,body:$};let J=Q.slice(0,W),X=Q.slice(W+4);if(X.startsWith(`
|
|
261
|
-
`))X=X.slice(1);return{frontmatter:J,body:X}}function i0($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function
|
|
262
|
-
`),Q.update(Z),Q.digest("hex")}function
|
|
261
|
+
`))X=X.slice(1);return{frontmatter:J,body:X}}function i0($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function BN($){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 FJ($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function GN($){let Z=FJ($);if(!Z)return;let Q=i0(Z.providerId),W=i0(Z.modelId);if(Q===void 0&&W===void 0)return;return{providerId:Q,modelId:W}}function KN($){if(typeof $!=="string")return;let Z=$.trim().toLowerCase();if(Z==="act"||Z==="plan"||Z==="yolo")return Z;return}function gK($,Z={}){let Q=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!Q)return;let W=[...new Set(Q.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0))];if(Array.isArray($)&&Z.preserveEmptyArray)return W;return W.length>0?W:void 0}var FN=new Set(H$);function AN($){let Z=gK($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((W)=>!FN.has(W));if(Q.length>0)throw Error(`unknown tool(s): ${Q.join(", ")}`);return Z}var fN=new Set(["rules","skills","plugins"]);function UN($){let Z=gK($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((W)=>!fN.has(W));if(Q.length>0)throw Error(`unknown extension(s): ${Q.join(", ")}`);return Z}function GJ($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function KJ($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function AJ($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Q)=>AJ(Q)).join(",")}]`;let Z=Object.entries($).filter(([,Q])=>Q!==void 0);return Z.sort(([Q],[W])=>Q<W?-1:Q>W?1:0),`{${Z.map(([Q,W])=>`${JSON.stringify(Q)}:${AJ(W)}`).join(",")}}`}function mK($,Z){let Q=YN("sha256");return Q.update(AJ($)),Q.update(`
|
|
262
|
+
`),Q.update(Z),Q.digest("hex")}function DN($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var LN=["schedule","timezone"],_N=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],zN=["cwd"];function xK($,Z,Q,W,J){return{externalId:$,relativePath:$,triggerKind:Z,body:Q,contentHash:mK(W,Q),error:J}}function A1($,Z,Q,W,J,X){return{externalId:$,relativePath:Z,triggerKind:Q,body:W,contentHash:J,error:X}}function vK($){let Z=$.relativePath.replace(/\\/g,"/"),Q=VN(Z),{frontmatter:W,body:J}=HN($.raw),X={};if(W!==void 0&&W.trim().length>0)try{let U=jN.parse(W);if(U&&typeof U==="object"&&!Array.isArray(U))X=U;else if(U!==null&&U!==void 0)return xK(Z,Q,J,{},"frontmatter must be a YAML mapping")}catch(U){return xK(Z,Q,J,{},U instanceof Error?`failed to parse frontmatter: ${U.message}`:"failed to parse frontmatter")}let Y=mK(X,J),j=i0(X.id),V=j??Z;if(Q!=="schedule"){for(let U of LN)if(X[U]!==void 0)return A1(V,Z,Q,J,Y,`field "${U}" is only allowed on *.cron.md specs`)}for(let U of zN)if(X[U]!==void 0)return A1(V,Z,Q,J,Y,`field "${U}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Q!=="event"){for(let U of _N)if(X[U]!==void 0)return A1(V,Z,Q,J,Y,`field "${U}" is only allowed on .event.md specs`)}let H=i0(X.prompt),B=J.trim(),G=H??(B.length>0?B:void 0);if(!G)return A1(V,Z,Q,J,Y,"prompt is required (frontmatter `prompt` or markdown body)");let K=i0(X.workspaceRoot);if(!K)return A1(V,Z,Q,J,Y,"workspaceRoot is required");let F,A;try{F=AN(X.tools),A=UN(X.extensions)}catch(U){return A1(V,Z,Q,J,Y,U instanceof Error?U.message:String(U))}let L=KN(X.mode);if(X.mode!==void 0&&L===void 0)return A1(V,Z,Q,J,Y,"mode must be one of: act, plan, yolo");let f={id:j,title:i0(X.title)??j??DN(Z),prompt:G,workspaceRoot:K,mode:L??"yolo",systemPrompt:i0(X.systemPrompt),modelSelection:GN(X.modelSelection),maxIterations:GJ(X.maxIterations),timeoutSeconds:GJ(X.timeoutSeconds),tools:F,notesDirectory:i0(X.notesDirectory),extensions:A,source:i0(X.source)??"user",tags:BN(X.tags),enabled:typeof X.enabled==="boolean"?X.enabled:!0,metadata:FJ(X.metadata)},D;if(Q==="schedule"){let U=i0(X.schedule);if(!U)return A1(V,Z,Q,J,Y,"schedule is required for *.cron.md specs");let T=i0(X.timezone);try{hK(U,T)}catch(z){return A1(V,Z,Q,J,Y,z instanceof Error?z.message:String(z))}D={...f,triggerKind:"schedule",schedule:U,timezone:T}}else if(Q==="event"){let U=i0(X.event);if(!U)return A1(V,Z,Q,J,Y,"event is required for .event.md specs");D={...f,triggerKind:"event",event:U,filters:FJ(X.filters),debounceSeconds:KJ(X.debounceSeconds),dedupeWindowSeconds:KJ(X.dedupeWindowSeconds),cooldownSeconds:KJ(X.cooldownSeconds),maxParallel:GJ(X.maxParallel)}}else D={...f,triggerKind:"one_off"};return{externalId:V,relativePath:Z,triggerKind:Q,body:J,contentHash:Y,spec:D}}function NN($,Z){return RN($,Z).replace(/\\/g,"/")}function CN($){if(!TN($))return[];let Z=[],Q=[$];while(Q.length>0){let W=Q.pop();if(!W)continue;let J;try{J=ON(W,{withFileTypes:!0})}catch{continue}for(let X of J){let Y=`${W}/${X.name}`;if(X.isDirectory()){if(X.name==="reports")continue;Q.push(Y);continue}if(!X.isFile())continue;if(!X.name.endsWith(".md"))continue;Z.push(Y)}}return Z}class fJ{store;cronDir;constructor($){this.store=$.store,this.cronDir=EN($.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=CN(this.cronDir),Q=new Set;for(let J of Z){let X=NN(this.cronDir,J);Q.add(X),$.scanned+=1;let Y=await this.reconcileFile(X,J);if(Y){if($.changes.push(Y),$.upserted+=1,Y.parse.error)$.invalidParses+=1}}let W=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let J of W)if(!Q.has(J.sourcePath))this.handleFileDeleted(J),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,Z){let Q=this.store.getSpecBySourcePath($),W,J;try{W=qN(Z,"utf8"),J=MN(Z).mtimeMs}catch{return}let Y=vK({relativePath:$,raw:W}),j=this.store.upsertSpec({externalId:Y.externalId,sourcePath:$,triggerKind:Y.triggerKind,sourceMtimeMs:J,sourceHash:Y.contentHash,parseStatus:Y.error?"invalid":"valid",parseError:Y.error,spec:Y.spec});if(!Y.error&&Y.triggerKind==="schedule"&&j.record.enabled)this.applyScheduleNextRunAt(j.record,{forceReset:!Q||Q.removed||!Q.enabled||Q.scheduleExpr!==j.record.scheduleExpr||Q.timezone!==j.record.timezone});return{relativePath:$,result:j,parse:Y}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Z of $)this.applyScheduleNextRunAt(Z,{forceReset:!1})}applyScheduleNextRunAt($,Z){if(!$.scheduleExpr)return;if(!Z.forceReset&&$.nextRunAt)return;try{let Q=Date.now(),W=$.lastRunAt?Math.max(Q,new Date($.lastRunAt).getTime()):Q,J=C2($.scheduleExpr,W,$.timezone),X=new Date(J).toISOString();if($.nextRunAt!==X)this.store.updateSpecNextRunAt($.specId,X)}catch{}}}import{existsSync as wN,mkdirSync as PN,watch as SN}from"node:fs";import{relative as bN,resolve as yN}from"node:path";var hN=250;class UJ{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??hN),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{PN($,{recursive:!0}),this.watcher=SN($,{recursive:!0},(Z,Q)=>{if(!Q)return;let W=String(Q).replace(/\\/g,"/");if(!W.endsWith(".md"))return;if(W.startsWith("reports/"))return;this.scheduleReconcile(W)}),this.watcher.on("error",this.onError)}catch(Z){this.onError(Z)}}stop(){for(let $ of this.pending.values())clearTimeout($);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile($){let Z=this.pending.get($);if(Z)clearTimeout(Z);let Q=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,Q)}async reconcileNow($){try{let Z=yN(this.reconciler.getCronDir(),$);if(!wN(Z)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Q=bN(this.reconciler.getCronDir(),Z).replace(/\\/g,"/");await this.reconciler.reconcileFile(Q,Z),await this.onReconciled()}catch(Z){this.onError(Z)}}}import{randomUUID as O5}from"node:crypto";import{asOptionalString as m,asString as Z0,loadSqliteDb as IN,nowIso as M0}from"@cline/shared/db";import{resolveCronDbPath as xN}from"@cline/shared/storage";var kN=[`CREATE TABLE IF NOT EXISTS cron_specs (
|
|
263
263
|
spec_id TEXT PRIMARY KEY,
|
|
264
264
|
external_id TEXT NOT NULL,
|
|
265
265
|
source_path TEXT NOT NULL UNIQUE,
|
|
@@ -350,17 +350,17 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
350
350
|
ON cron_specs(trigger_kind, enabled, next_run_at);`,`CREATE INDEX IF NOT EXISTS cron_specs_event_match_idx
|
|
351
351
|
ON cron_specs(trigger_kind, event_type, enabled);`,`CREATE INDEX IF NOT EXISTS cron_specs_parse_status_idx
|
|
352
352
|
ON cron_specs(parse_status, updated_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_source_path_idx
|
|
353
|
-
ON cron_specs(source_path);`];function
|
|
353
|
+
ON cron_specs(source_path);`];function cK($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let Z of kN)$.exec(Z)}function qQ($){if(!$)return;try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function DJ($,Z={}){if(!$)return;try{let Q=JSON.parse($);if(!Array.isArray(Q))return;let W=Q.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0);if(Z.preserveEmpty)return W;return W.length>0?W:void 0}catch{return}}function w2($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function y$($){return{specId:Z0($.spec_id),externalId:Z0($.external_id),sourcePath:Z0($.source_path),triggerKind:Z0($.trigger_kind),sourceMtimeMs:w2($.source_mtime_ms),sourceHash:m($.source_hash),parseStatus:Z0($.parse_status)==="invalid"?"invalid":"valid",parseError:m($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:Z0($.title),prompt:m($.prompt),workspaceRoot:m($.workspace_root),scheduleExpr:m($.schedule_expr),timezone:m($.timezone),eventType:m($.event_type),filters:qQ(m($.filters_json)),debounceSeconds:w2($.debounce_seconds),dedupeWindowSeconds:w2($.dedupe_window_seconds),cooldownSeconds:w2($.cooldown_seconds),mode:m($.mode),systemPrompt:m($.system_prompt),providerId:m($.provider_id),modelId:m($.model_id),maxIterations:w2($.max_iterations),timeoutSeconds:w2($.timeout_seconds),maxParallel:w2($.max_parallel),tools:DJ(m($.tools_json),{preserveEmpty:!0}),notesDirectory:m($.notes_directory),extensions:DJ(m($.extensions_json),{preserveEmpty:!0}),source:m($.source),tags:DJ(m($.tags_json)),metadata:qQ(m($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:m($.last_materialized_run_id),lastRunAt:m($.last_run_at),nextRunAt:m($.next_run_at),createdAt:Z0($.created_at),updatedAt:Z0($.updated_at)}}function LJ($){return{runId:Z0($.run_id),specId:Z0($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:Z0($.trigger_kind),status:Z0($.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:Z0($.created_at),updatedAt:Z0($.updated_at)}}function uK($){return{eventId:Z0($.event_id),eventType:Z0($.event_type),source:Z0($.source),subject:m($.subject),occurredAt:Z0($.occurred_at),receivedAt:Z0($.received_at),workspaceRoot:m($.workspace_root),dedupeKey:m($.dedupe_key),payload:qQ(m($.payload_json)),attributes:qQ(m($.attributes_json)),processingStatus:Z0($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:m($.error),createdAt:Z0($.created_at),updatedAt:Z0($.updated_at)}}function dK($){return $?JSON.stringify($):null}var gN=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function lK($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function mN($,Z,Q,W){for(let J of gN){let X=$[J],Y=Z[J];if(lK(X)!==lK(Y))return!0}if(Q===!1&&W===!0)return!0;return!1}function vN($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function cN($){return`hub/schedules/${$}.cron.md`}function uN($){let Z={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(Z).length>0?Z:void 0}function _J($){return{triggerKind:"schedule",title:$.name.trim(),prompt:$.prompt,workspaceRoot:$.workspaceRoot.trim(),schedule:$.cronPattern.trim(),mode:$.mode??"act",systemPrompt:$.systemPrompt,modelSelection:$.modelSelection?JSON.parse(JSON.stringify($.modelSelection)):void 0,maxIterations:typeof $.maxIterations==="number"?Math.floor($.maxIterations):void 0,timeoutSeconds:typeof $.timeoutSeconds==="number"?Math.floor($.timeoutSeconds):void 0,maxParallel:typeof $.maxParallel==="number"?Math.max(1,Math.floor($.maxParallel)):1,source:"hub-schedule",tags:$.tags?.filter((Z)=>Z.trim().length>0),enabled:$.enabled!==!1,metadata:uN($)}}function pK($){return JSON.stringify(_J($))}function dN($,Z){let Q=$.metadata?{...$.metadata}:{},W=Z.createdBy===null?void 0:Z.createdBy!==void 0?Z.createdBy:typeof Q.__hubScheduleCreatedBy==="string"?Q.__hubScheduleCreatedBy:void 0,J=Z.cwd!==void 0?Z.cwd:typeof Q.__hubScheduleCwd==="string"?Q.__hubScheduleCwd:void 0,X=Z.runtimeOptions!==void 0?Z.runtimeOptions:Q.__hubRuntimeOptions&&typeof Q.__hubRuntimeOptions==="object"&&!Array.isArray(Q.__hubRuntimeOptions)?Q.__hubRuntimeOptions:void 0;return delete Q.__hubScheduleCreatedBy,delete Q.__hubScheduleCwd,delete Q.__hubRuntimeOptions,{name:Z.name??$.title,cronPattern:Z.cronPattern??$.scheduleExpr??"",prompt:Z.prompt??$.prompt??"",workspaceRoot:Z.workspaceRoot??$.workspaceRoot??"",cwd:J,modelSelection:Z.modelSelection!==void 0?Z.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:Z.enabled??$.enabled,mode:Z.mode??($.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"),systemPrompt:Z.systemPrompt===null?void 0:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,maxIterations:Z.maxIterations===null?void 0:Z.maxIterations!==void 0?Z.maxIterations:$.maxIterations,timeoutSeconds:Z.timeoutSeconds===null?void 0:Z.timeoutSeconds!==void 0?Z.timeoutSeconds:$.timeoutSeconds,maxParallel:Z.maxParallel??$.maxParallel??1,createdBy:W,tags:Z.tags??$.tags,runtimeOptions:X,metadata:Z.metadata!==void 0?Z.metadata:Object.keys(Q).length>0?Q:void 0}}class q5{db;constructor($={}){let Z=$.dbPath??xN();this.db=IN(Z),cK(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return Z?y$(Z):void 0}getSpec($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return Z?y$(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?y$(Z):void 0}listSpecs($={}){let Z=[],Q=[];if($.triggerKind)Z.push("trigger_kind = ?"),Q.push($.triggerKind);if(typeof $.enabled==="boolean")Z.push("enabled = ?"),Q.push($.enabled?1:0);if($.parseStatus)Z.push("parse_status = ?"),Q.push($.parseStatus);if(!$.includeRemoved)Z.push("removed = 0");let W=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${W} ORDER BY created_at DESC LIMIT ?`).all(...Q,J).map((Y)=>y$(Y))}createHubSchedule($){let Z=`sched_${O5()}`,Q=this.upsertSpec({externalId:Z,sourcePath:cN(Z),triggerKind:"schedule",sourceHash:pK($),parseStatus:"valid",spec:_J($)});this.initializeScheduleNextRun(Q.record.specId);let W=this.getSpec(Q.record.specId);if(!W)throw Error("failed to create hub schedule");return W}getHubSchedule($){let Z=this.db.prepare(`SELECT * FROM cron_specs
|
|
354
354
|
WHERE external_id = ? AND source = 'hub-schedule' AND removed = 0
|
|
355
355
|
ORDER BY created_at ASC LIMIT 1`).get($);return Z?y$(Z):void 0}listHubSchedules($={}){let Z=["source = 'hub-schedule'","trigger_kind = 'schedule'","removed = 0"],Q=[];if(typeof $.enabled==="boolean")Z.push("enabled = ?"),Q.push($.enabled?1:0);if($.tags&&$.tags.length>0)for(let X of $.tags)Z.push("tags_json LIKE ?"),Q.push(`%"${X.trim()}"%`);let W=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_specs
|
|
356
356
|
WHERE ${Z.join(" AND ")}
|
|
357
|
-
ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((X)=>y$(X))}updateHubSchedule($,Z){let Q=this.getHubSchedule($);if(!Q)return;let W=
|
|
357
|
+
ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((X)=>y$(X))}updateHubSchedule($,Z){let Q=this.getHubSchedule($);if(!Q)return;let W=dN(Q,Z),J=this.upsertSpec({externalId:$,sourcePath:Q.sourcePath,triggerKind:"schedule",sourceHash:pK(W),parseStatus:"valid",spec:_J(W)});if(Z.cronPattern!==void 0||Z.enabled!==void 0)this.initializeScheduleNextRun(J.record.specId);return this.getSpec(J.record.specId)}deleteHubSchedule($){let Z=this.getHubSchedule($);if(!Z)return!1;return this.markSpecRemoved(Z.specId),this.cancelQueuedRunsForSpec(Z.specId),!0}enqueueHubScheduleRun($,Z="manual"){let Q=this.getHubSchedule($);if(!Q||!Q.enabled||Q.removed||Q.parseStatus!=="valid")return;return this.enqueueRun({specId:Q.specId,specRevision:Q.revision,triggerKind:Z,scheduledFor:M0()})}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
|
|
358
358
|
WHERE trigger_kind = 'event'
|
|
359
359
|
AND event_type = ?
|
|
360
360
|
AND enabled = 1
|
|
361
361
|
AND removed = 0
|
|
362
362
|
AND parse_status = 'valid'
|
|
363
|
-
ORDER BY created_at ASC`).all($).map((Q)=>y$(Q))}upsertSpec($){let Z=
|
|
363
|
+
ORDER BY created_at ASC`).all($).map((Q)=>y$(Q))}upsertSpec($){let Z=M0(),Q=this.getSpecBySourcePath($.sourcePath),W=$.spec,J={title:W?.title??Q?.title??vN($.sourcePath),prompt:W?.prompt,workspaceRoot:W?.workspaceRoot,scheduleExpr:W?.triggerKind==="schedule"?W.schedule:void 0,timezone:W?.triggerKind==="schedule"?W.timezone:void 0,eventType:W?.triggerKind==="event"?W.event:void 0,filters:W?.triggerKind==="event"?W.filters:void 0,debounceSeconds:W?.triggerKind==="event"?W.debounceSeconds:void 0,dedupeWindowSeconds:W?.triggerKind==="event"?W.dedupeWindowSeconds:void 0,cooldownSeconds:W?.triggerKind==="event"?W.cooldownSeconds:void 0,mode:W?.mode,systemPrompt:W?.systemPrompt,providerId:W?.modelSelection?.providerId,modelId:W?.modelSelection?.modelId,maxIterations:W?.maxIterations,timeoutSeconds:W?.timeoutSeconds,maxParallel:W&&"maxParallel"in W?W.maxParallel:void 0,tools:W?.tools,notesDirectory:W?.notesDirectory,extensions:W?.extensions,source:W?.source},X=$.parseStatus==="valid"&&(W?.enabled??!0);if(!Q){let B=`cspec_${O5()}`;this.insertSpecRow(B,$,J,X,Z);let G=this.getSpec(B);if(!G)throw Error("failed to insert cron_spec row");return{record:G,created:!0,revisionChanged:!0}}let j=Q.sourceHash!==$.sourceHash&&mN(Q,J,Q.enabled,X),V=j?Q.revision+1:Q.revision;this.updateSpecRow(Q.specId,$,J,X,V,Z);let H=this.getSpec(Q.specId);if(!H)throw Error("failed to reload cron_spec after update");return{record:H,created:!1,revisionChanged:j}}insertSpecRow($,Z,Q,W,J){let X=Z.spec;this.db.prepare(`INSERT INTO cron_specs (
|
|
364
364
|
spec_id, external_id, source_path, trigger_kind,
|
|
365
365
|
source_mtime_ms, source_hash, parse_status, parse_error,
|
|
366
366
|
enabled, removed, title, prompt, workspace_root,
|
|
@@ -383,7 +383,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
383
383
|
tools_json = ?, notes_directory = ?, extensions_json = ?, source = ?,
|
|
384
384
|
tags_json = ?, metadata_json = ?,
|
|
385
385
|
revision = ?, updated_at = ?
|
|
386
|
-
WHERE spec_id = ?`).run(Z.externalId,Z.triggerKind,Z.sourceMtimeMs??null,Z.sourceHash,Z.parseStatus,Z.parseError??null,W?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,Y?.tags?JSON.stringify(Y.tags):null,Y?.metadata?JSON.stringify(Y.metadata):null,J,X,$)}markSpecRemoved($){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(
|
|
386
|
+
WHERE spec_id = ?`).run(Z.externalId,Z.triggerKind,Z.sourceMtimeMs??null,Z.sourceHash,Z.parseStatus,Z.parseError??null,W?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,Y?.tags?JSON.stringify(Y.tags):null,Y?.metadata?JSON.stringify(Y.metadata):null,J,X,$)}markSpecRemoved($){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(M0(),$)}updateSpecNextRunAt($,Z){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(Z??null,M0(),$)}updateSpecLastRunAt($,Z){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(Z,M0(),$)}updateLastMaterializedRunId($,Z){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(Z,M0(),$)}initializeScheduleNextRun($){let Z=this.getSpec($);if(!Z||Z.triggerKind!=="schedule"||!Z.enabled||!Z.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let Q=new Date(C2(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 W=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($.specId);if(!W)return this.db.exec("COMMIT;"),{queued:!1};let J=y$(W);if(J.triggerKind!=="schedule"||!J.enabled||J.removed||J.parseStatus!=="valid"||!J.scheduleExpr)return this.db.exec("COMMIT;"),{queued:!1};let X=J.nextRunAt;if(!X){let V=new Date(C2(J.scheduleExpr,Z,J.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(V,Q,J.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 Y=`crun_${O5()}`,j;try{j=new Date(C2(J.scheduleExpr,Z,J.timezone)).toISOString()}catch{j=void 0}return this.db.prepare(`INSERT INTO cron_runs (
|
|
387
387
|
run_id, spec_id, spec_revision, trigger_kind, status,
|
|
388
388
|
scheduled_for, trigger_event_id, attempt_count,
|
|
389
389
|
created_at, updated_at
|
|
@@ -392,22 +392,22 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
392
392
|
last_run_at = ?,
|
|
393
393
|
next_run_at = ?,
|
|
394
394
|
updated_at = ?
|
|
395
|
-
WHERE spec_id = ?`).run(Y,Q,j??null,Q,J.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(Y),nextRunAt:j}}catch(W){throw this.db.exec("ROLLBACK;"),W}}getRun($){let Z=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get($);return Z?LJ(Z):void 0}insertEventLog($,Z={}){let Q=
|
|
395
|
+
WHERE spec_id = ?`).run(Y,Q,j??null,Q,J.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(Y),nextRunAt:j}}catch(W){throw this.db.exec("ROLLBACK;"),W}}getRun($){let Z=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get($);return Z?LJ(Z):void 0}insertEventLog($,Z={}){let Q=M0(),W=Z.receivedAtIso??Q,J=$.eventId.trim();if(!J)throw Error("automation event requires eventId");let X=$.eventType.trim();if(!X)throw Error("automation event requires eventType");let Y=$.source.trim();if(!Y)throw Error("automation event requires source");let j=$.occurredAt.trim()||W,V=this.db.prepare(`INSERT OR IGNORE INTO cron_event_log (
|
|
396
396
|
event_id, event_type, source, subject,
|
|
397
397
|
occurred_at, received_at, workspace_root, dedupe_key,
|
|
398
398
|
payload_json, attributes_json, processing_status,
|
|
399
399
|
matched_spec_count, queued_run_count, suppressed_count,
|
|
400
400
|
error, created_at, updated_at
|
|
401
|
-
) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(J,X,Y,$.subject?.trim()||null,j,W,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,
|
|
401
|
+
) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(J,X,Y,$.subject?.trim()||null,j,W,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,dK($.payload),dK($.attributes),"received",0,0,0,null,Q,Q).changes??0,H=this.getEventLog(J);if(!H)throw Error("failed to insert cron_event_log row");return{record:H,created:V===1}}getEventLog($){let Z=this.db.prepare("SELECT * FROM cron_event_log WHERE event_id = ?").get($);return Z?uK(Z):void 0}listEventLogs($={}){let Z=[],Q=[];if($.eventType)Z.push("event_type = ?"),Q.push($.eventType);if($.source)Z.push("source = ?"),Q.push($.source);if($.processingStatus)Z.push("processing_status = ?"),Q.push($.processingStatus);let W=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_event_log ${W}
|
|
402
402
|
ORDER BY received_at DESC, created_at DESC
|
|
403
|
-
LIMIT ?`).all(...Q,J).map((Y)=>
|
|
403
|
+
LIMIT ?`).all(...Q,J).map((Y)=>uK(Y))}updateEventLogProcessing($,Z){return(this.db.prepare(`UPDATE cron_event_log SET
|
|
404
404
|
processing_status = ?,
|
|
405
405
|
matched_spec_count = COALESCE(?, matched_spec_count),
|
|
406
406
|
queued_run_count = COALESCE(?, queued_run_count),
|
|
407
407
|
suppressed_count = COALESCE(?, suppressed_count),
|
|
408
408
|
error = ?,
|
|
409
409
|
updated_at = ?
|
|
410
|
-
WHERE event_id = ?`).run(Z.status,Z.matchedSpecCount??null,Z.queuedRunCount??null,Z.suppressedCount??null,Z.error??null,
|
|
410
|
+
WHERE event_id = ?`).run(Z.status,Z.matchedSpecCount??null,Z.queuedRunCount??null,Z.suppressedCount??null,Z.error??null,M0(),$).changes??0)===1}listRuns($={}){let Z=[],Q=[];if($.specId)Z.push("spec_id = ?"),Q.push($.specId);if($.status){let Y=Array.isArray($.status)?$.status:[$.status];if(Y.length>0){let j=Y.map(()=>"?").join(",");Z.push(`status IN (${j})`);for(let V of Y)Q.push(V)}}let W=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${W} ORDER BY created_at DESC LIMIT ?`).all(...Q,J).map((Y)=>LJ(Y))}hasRecentEventRunForDedupe($){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
|
|
411
411
|
INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
|
|
412
412
|
WHERE r.spec_id = ?
|
|
413
413
|
AND r.trigger_kind = 'event'
|
|
@@ -425,7 +425,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
425
425
|
AND r.status = 'queued'
|
|
426
426
|
AND e.dedupe_key = ?
|
|
427
427
|
ORDER BY COALESCE(r.scheduled_for, r.created_at) DESC
|
|
428
|
-
LIMIT 1`).get($.specId,$.dedupeKey);return Z?LJ(Z):void 0}updateQueuedEventRunForDebounce($){let Z=
|
|
428
|
+
LIMIT 1`).get($.specId,$.dedupeKey);return Z?LJ(Z):void 0}updateQueuedEventRunForDebounce($){let Z=M0();if((this.db.prepare(`UPDATE cron_runs SET
|
|
429
429
|
trigger_event_id = ?,
|
|
430
430
|
scheduled_for = ?,
|
|
431
431
|
updated_at = ?
|
|
@@ -434,12 +434,12 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
434
434
|
AND status = 'queued'`).run($.triggerEventId,$.scheduledFor,Z,$.runId).changes??0)!==1)return;return this.getRun($.runId)}hasOneOffRunForRevision($,Z){return!!this.db.prepare(`SELECT run_id FROM cron_runs
|
|
435
435
|
WHERE spec_id = ? AND spec_revision = ?
|
|
436
436
|
AND trigger_kind = 'one_off'
|
|
437
|
-
LIMIT 1`).get($,Z)}enqueueRun($){let Z=`crun_${O5()}`,Q=
|
|
437
|
+
LIMIT 1`).get($,Z)}enqueueRun($){let Z=`crun_${O5()}`,Q=M0();this.db.prepare(`INSERT INTO cron_runs (
|
|
438
438
|
run_id, spec_id, spec_revision, trigger_kind, status,
|
|
439
439
|
scheduled_for, trigger_event_id, attempt_count,
|
|
440
440
|
created_at, updated_at
|
|
441
441
|
) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(Z,$.specId,$.specRevision,$.triggerKind,"queued",$.scheduledFor??null,$.triggerEventId??null,0,Q,Q),this.updateLastMaterializedRunId($.specId,Z);let W=this.getRun(Z);if(!W)throw Error("failed to insert cron_run row");return W}cancelQueuedRunsForSpec($){return this.db.prepare(`UPDATE cron_runs SET status = 'cancelled', updated_at = ?
|
|
442
|
-
WHERE spec_id = ? AND status = 'queued'`).run(
|
|
442
|
+
WHERE spec_id = ? AND status = 'queued'`).run(M0(),$).changes??0}claimDueRuns($){let Z=$.nowIso,Q=Math.max(1000,Math.floor($.leaseMs)),W=new Date(new Date(Z).getTime()+Q).toISOString(),J=Math.max(1,Math.floor($.limit??25)),X=[];this.db.exec("BEGIN IMMEDIATE;");try{let Y=this.db.prepare(`SELECT * FROM cron_runs
|
|
443
443
|
WHERE (
|
|
444
444
|
status = 'queued'
|
|
445
445
|
OR (
|
|
@@ -473,7 +473,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
473
473
|
AND completed_at IS NULL
|
|
474
474
|
)
|
|
475
475
|
)`).run(H,Z,W,Z,Z,V,Z).changes??0)!==1)continue;let G=this.getRun(V);if(!G)continue;X.push({run:G,claimToken:H,claimUntilAt:W})}this.db.exec("COMMIT;")}catch(Y){throw this.db.exec("ROLLBACK;"),Y}return X}renewClaim($,Z,Q){return(this.db.prepare(`UPDATE cron_runs SET claim_until_at = ?, updated_at = ?
|
|
476
|
-
WHERE run_id = ? AND claim_token = ?`).run(Q,
|
|
476
|
+
WHERE run_id = ? AND claim_token = ?`).run(Q,M0(),$,Z).changes??0)===1}completeRun($,Z){let Q=Z.completedAtIso??M0(),W=Z.claimToken?"WHERE run_id = ? AND claim_token = ?":"WHERE run_id = ?";return(this.db.prepare(`UPDATE cron_runs SET
|
|
477
477
|
status = ?,
|
|
478
478
|
session_id = COALESCE(?, session_id),
|
|
479
479
|
report_path = COALESCE(?, report_path),
|
|
@@ -483,7 +483,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
483
483
|
claim_token = NULL,
|
|
484
484
|
claim_until_at = NULL,
|
|
485
485
|
updated_at = ?
|
|
486
|
-
${W}`).run(Z.status,Z.sessionId??null,Z.reportPath??null,Z.error??null,Q,Q,$,...Z.claimToken?[Z.claimToken]:[]).changes??0)>0}requeueRun($){let Z=
|
|
486
|
+
${W}`).run(Z.status,Z.sessionId??null,Z.reportPath??null,Z.error??null,Q,Q,$,...Z.claimToken?[Z.claimToken]:[]).changes??0)>0}requeueRun($){let Z=M0();return(this.db.prepare(`UPDATE cron_runs SET
|
|
487
487
|
status = 'queued',
|
|
488
488
|
claim_started_at = NULL,
|
|
489
489
|
claim_token = NULL,
|
|
@@ -495,40 +495,40 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
|
|
|
495
495
|
error = ?,
|
|
496
496
|
scheduled_for = COALESCE(?, scheduled_for),
|
|
497
497
|
updated_at = ?
|
|
498
|
-
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,
|
|
499
|
-
`).trim()}function
|
|
500
|
-
`)[0]??J);return
|
|
501
|
-
`,{encoding:"utf8",mode:384}),await
|
|
502
|
-
`,"utf8");try{return await Z()}finally{await QF(Q)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let Y=await Ow(Q),j=Y?Date.now()-Date.parse(Y.acquiredAt):ZF+1;if(!Y||!_w(Y.pid)||j>ZF){await QF(Q);continue}if(Date.now()>=W)throw Error(`Timed out waiting for hub startup lock ${Q}`);await zw(Uw)}}async function a1($,Z){try{let Q=await fetch(Z?.authToken?NJ($):PQ($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let W=await Q.json();if(typeof W.protocolVersion!=="string"||typeof W.host!=="string"||typeof W.port!=="number"||typeof W.url!=="string")return;return{protocolVersion:W.protocolVersion,minClientProtocolVersion:typeof W.minClientProtocolVersion==="string"?W.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof W.maxClientProtocolVersion==="string"?W.maxClientProtocolVersion:void 0,capabilities:Array.isArray(W.capabilities)?W.capabilities.filter((J)=>typeof J==="string"):void 0,coreVersion:typeof W.coreVersion==="string"?W.coreVersion:void 0,buildId:typeof W.buildId==="string"?W.buildId:void 0,host:W.host,port:W.port,url:W.url,hubId:typeof W.hubId==="string"?W.hubId:void 0,authToken:typeof W.authToken==="string"?W.authToken:void 0,pid:typeof W.pid==="number"?W.pid:void 0,startedAt:typeof W.startedAt==="string"?W.startedAt:void 0,updatedAt:typeof W.updatedAt==="string"?W.updatedAt:void 0}}catch{return}}function V1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function PQ($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function NJ($){let Z=new URL(PQ($));return Z.pathname="/status",Z.toString()}function VF($){return Gw($)}import{CLINE_HUB_DEV_PORT as qw,CLINE_HUB_PORT as Mw,resolveClineBuildEnv as Rw}from"@cline/shared";var Ew="CLINE_HUB_HOST",Nw="CLINE_HUB_PORT",ww="CLINE_HUB_PATHNAME",wJ="127.0.0.1",CJ=Mw,PJ="/hub";function HF($){return Rw($)==="development"?qw:CJ}function SJ($={}){return($.env??process.env)[Ew]?.trim()||wJ}function s8($={}){let Q=($.env??process.env)[Nw]?.trim();if(!Q)return HF($);let W=Number.parseInt(Q,10);if(!Number.isInteger(W)||W<1||W>65535)return HF($);return W}function bJ($={}){return($.env??process.env)[ww]?.trim()||PJ}function a0($={},Z={}){return{host:$.host??SJ(Z),port:$.port??s8(Z),pathname:$.pathname??bJ(Z)}}import{join as Cw}from"node:path";var Pw="shared:cline",Sw="CLINE_HUB_DISCOVERY_PATH",bw="hub-production";function BF($){let Z=d1($.trim());return n1(`workspace:${Z||$.trim()}`)}function y0($=Pw){return n1($)}function s0(){return{ownerId:bw,discoveryPath:process.env[Sw]?.trim()||Cw(C2(),"locks","hub","production.json")}}var lw=8000,pw=200,rw=3000,iw=100,nw=[100,250,500,1000,2000],aw="--cline-hub-daemon";function sw($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function ow(){try{let $=mw(C2(),"logs","hub-daemon.log");return kw(gw($),{recursive:!0}),{fd:Iw($,"a"),logPath:$}}catch{return}}function AF(){return FF()==="production"?s0():y0()}function P2($){return uw($).compatible}function GF($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function S2($,Z){try{return await a1($,{authToken:Z})}catch{return}}async function tw($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await S2($))?.url)return!0;await new Promise((J)=>setTimeout(J,iw))}return!1}async function SQ($,Z){if(await C5($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await tw($.url,rw);return await b0(Z).catch(()=>{return}),Q}async function w5($,Z){if(P2($))return!0;return SQ($,Z)}async function fF($){if(FF()!=="production")return;let Z=y0();if(Z.discoveryPath===$.discoveryPath)return;let Q=await f0(Z.discoveryPath);if(Q?.url)await SQ(Q,Z.discoveryPath);else await b0(Z.discoveryPath).catch(()=>{return})}function ew(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return vw(new URL(`./entry.${$}`,import.meta.url))}function $C($,Z){let Q=ew(),W=process.execPath?.trim();if(!W)throw Error("unable to resolve runtime executable for hub daemon");let J=xw(W).toLowerCase().includes("bun"),X=Q.startsWith("/$bunfs/"),Y=J&&Q.toLowerCase().endsWith(".ts"),j=X?[aw]:[...Y?["--conditions=development"]:[],Q];return{launcher:W,args:[...j,"--cwd",$,...sw(Z)],cwd:$,env:{...dw(process.env),CLINE_NO_INTERACTIVE:"1",[cw]:"1"}}}function ZC($){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 yJ($,Z={}){if(KF())return;let Q=$C($,Z),W=ow();try{yw(Q.launcher,Q.args,{detached:!0,stdio:W?["ignore",W.fd,W.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(W)hw(W.fd)}}async function o8($,Z={}){for(let Q=0;;Q++)try{yJ($,Z);return}catch(W){let J=nw[Q];if(!ZC(W)||J===void 0)throw W;await new Promise((X)=>setTimeout(X,J))}}function bQ($,Z={}){if(KF())return;let Q=AF(),W=a0(Z),J=V1(W.host,W.port,W.pathname),X=Z.allowPortFallback===!0&&W.port!==0;fF(Q).catch(()=>{return}).then(()=>f0(Q.discoveryPath)).then(async(Y)=>{let j=!1;if(Y?.url)if(!Y.authToken){if(j=!0,!await SQ(Y,Q.discoveryPath)&&!X)return}else{let B=await S2(Y.url,Y.authToken);if(B?.url&&P2(B)&&await A1(B.url,{authToken:Y.authToken}))return;if(B?.url)await w5({...B,authToken:Y.authToken},Q.discoveryPath);else await b0(Q.discoveryPath).catch(()=>{return})}let V=await S2(J);if(V?.url){if(P2(V)){if(!X||!j)return}else if(!await w5({...V,authToken:void 0},Q.discoveryPath)&&!X)return}let H=X?{...W,port:0}:W;await o8($,H)}).catch(()=>{})}async function UF($,Z={}){let Q=AF(),W=Z.host!==void 0||Z.port!==void 0||Z.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=a0(Z),X=V1(J.host,J.port,J.pathname),Y=(F)=>{if(!W)k$(F.url,F.authToken);return F};await fF(Q).catch(()=>{return});let j=await f0(Q.discoveryPath),V=!1;if(j?.url){let F=j.authToken;if(!F)V=!0,await SQ(j,Q.discoveryPath);else{let A=await S2(j.url,F);if(A?.url&&P2(A)&&await A1(A.url,{authToken:F}))return Y({url:A.url,authToken:F});if(A?.url)await w5({...A,authToken:F},Q.discoveryPath);else await b0(Q.discoveryPath).catch(()=>{return})}}let H=await S2(X);if(H?.url){let F=GF(H,j,X);if(P2(H))throw Error(`A compatible Cline Hub is already running at ${X}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${V?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`);if(!await w5(F,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is already running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let G=Z.allowPortFallback===!0&&J.port!==0?{...J,port:0}:J;await o8($,G);let K=Date.now()+lw;while(Date.now()<K){let F=await f0(Q.discoveryPath);if(F?.url&&F.authToken){let L=await S2(F.url,F.authToken);if(L?.url&&P2(L)&&await A1(L.url,{authToken:F.authToken}))return Y({url:L.url,authToken:F.authToken})}let A=await S2(X);if(A?.url&&!P2(A)){let L=GF(A,F,X);if(!await w5(L,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is still running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((L)=>setTimeout(L,pw))}throw Error("Timed out waiting for detached hub startup.")}function yQ(){return JC()==="production"?s0():y0()}function YC(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function TF($){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 TF($.data);return String($)}function jC($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function DF($){let Z=$,Q=jC(Z.reason);return new E0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:hJ,{closeCode:Z.code,closeReason:Q||void 0})}function VC($,Z){if($ instanceof E0)return $;if($ instanceof Error)return new E0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new E0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new E0("hub_connect_failed",Q);let W=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new E0("hub_connect_failed",W?`Failed to connect to hub at ${Z.toString()} (${W} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var HC=8000,BC=200,LF="*",_F=8000,GC="cline-hub-auth.",OF=new Map,qF=new Set,KC=3000,FC=3000,AC=100,hJ="Hub connection closed",fC=250,UC=5000,zF=0.5;class E0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function xJ($){return $ instanceof E0}class t8 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function hQ($,Z){return $ instanceof t8&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function MF($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=gJ($.toString());return Q?OF.get(Q):void 0}function DC($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function gJ($){if(!DC($))return;let Z=new URL(I$($));return Z.search="",Z.hash="",Z.toString()}function kJ($){let Z=gJ($);return!!Z&&qF.has(Z)}function k$($,Z){let Q=gJ($);if(Q){if(qF.add(Q),Z?.trim())OF.set(Q,Z)}return $}class H1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new E0("hub_connection_closed",hJ);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),Z=this.options.authToken?.trim()||MF($);$.hash="";let W=new(YC())($.toString(),Z?[`${GC}${Z}`]:void 0);this.socket=W;let J=!1;this.connectPromise=new Promise((X,Y)=>{let j=!1,V=setTimeout(()=>{if(j)return;j=!0,J=!0,this.lastCloseError=new E0("hub_connect_timeout",`Timed out connecting to hub after ${_F}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{W.close()}catch{}Y(this.lastCloseError)},_F);W.addEventListener("open",()=>{if(j)return;j=!0,clearTimeout(V),X()}),W.addEventListener("error",(H)=>{if(j)return;j=!0,clearTimeout(V),this.lastCloseError=VC(H,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)}),W.addEventListener("close",(H)=>{if(j)return;if(j=!0,clearTimeout(V),!J)this.lastCloseError=DF(H),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)})}),W.addEventListener("message",(X)=>{this.handleFrame(JSON.parse(TF(X)))}),W.addEventListener("close",(X)=>{if(this.socket!==W)return;if(!J)this.lastCloseError=DF(X),this.sawSocketClose=!0;this.registered=!1;for(let Y of this.pendingReplies.values())Y.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let X of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(X));this.reconnectAttempt=0}subscribe($,Z){let Q=Z?.sessionId?.trim()||void 0,W={listener:$,sessionId:Q};return this.listeners.add(W),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(W))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,W){let J=0,X=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,W)}catch(Y){if(!X||J>=1||!await this.recoverLocalHubTransport(Y))throw Y;J+=1}}async commandOnce($,Z,Q,W){await this.connect();let J=QC("hubreq_"),X=XC($,W?.timeoutMs),Y=new Promise((V,H)=>{let B=X===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;H(new t8($,"hub_command_timeout",`Hub command ${$} timed out after ${X}ms (hub=${this.currentUrl}, requestId=${J}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},X);this.pendingReplies.set(J,{resolve:(G)=>{if(B)clearTimeout(B);V(G)},reject:(G)=>{if(B)clearTimeout(B);H(G)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:J,clientId:this.clientId,sessionId:Q,timeoutMs:X,payload:Z}})}catch(V){throw this.pendingReplies.delete(J),V}let j=await Y;if(!j.ok){if(j.error?.code===R2){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new r1(V,j.error.message)}throw new t8($,j.error?.code,j.error?.message??`Hub command ${$} failed`)}return j}async recoverLocalHubTransport($){if(!kJ(this.currentUrl)||!xJ($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await b2({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(fC*2**this.reconnectAttempt,UC),Z=Math.round($*(1-zF)+Math.random()*$*zF);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(!kJ(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await b2({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 E0("hub_connection_closed",hJ),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 E0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,Z){this.sendFrame({kind:$,clientId:this.clientId,...Z?{sessionId:Z}:{}})}adjustSubscriptionCount($,Z){let Q=this.subscriptionKeyForSessionId($),W=(this.subscriptionCounts.get(Q)??0)+Z;if(W<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(Z<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,W),Z>0&&W===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??LF}subscriptionSessionIdFromKey($){return $===LF?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 I$($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function A1($,Z){let Q=new H1({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 IJ($,Z){let Q=I$($),W=await a1(Q,{authToken:Z?.authToken});if(!W)return{status:"unreachable",url:Q};if(!WC(W).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await A1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function LC($){let Z=Date.now()+HC;while(Date.now()<Z){let Q=await f0($.discoveryPath);if(Q?.url){let W=await IJ(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(W.status==="compatible")return k$(W.url,Q.authToken)}await new Promise((W)=>setTimeout(W,BC))}return}async function _C($){let Z=Date.now()+FC;while(Date.now()<Z){if(!(await a1($).catch(()=>{return}))?.url)return!0;await new Promise((W)=>setTimeout(W,AC))}return!1}function zC($,Z){try{return I$($)===I$(Z)}catch{return!1}}function TC($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let W=Q;if(W.status==="running"||W.status==="idle"||W.status==="pending")return!0;return Array.isArray(W.participants)&&W.participants.length>0})}async function OC($,Z,Q){let W=new H1({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let J=await W.command("session.list",{limit:500},void 0,{timeoutMs:KC});return!TC(J.payload)}catch{return!1}finally{await W.dispose().catch(()=>{return})}}async function P5($={}){if($.endpoint?.trim()){let J=await IJ($.endpoint);return J.status==="compatible"?J.url:void 0}let Z=yQ(),Q=await f0(Z.discoveryPath);if(!Q?.url)return;let W=await IJ(Q.url,{authToken:Q.authToken});if(W.status==="compatible")return k$(W.url,Q.authToken);if(W.status==="protocol_mismatch")await b0(Z.discoveryPath).catch(()=>{return});return}async function b2($={}){let Z=await P5($);if(Z&&await A1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;let Q=yQ();return await o8($.workspaceRoot??process.cwd()),await LC(Q)}async function C5($,Z){let Q=new URL($),W=Z?.trim()||MF(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:W?{authorization:`Bearer ${W}`}:void 0})).ok}async function mJ($=yQ()){let Z=await f0($.discoveryPath);if(!Z?.url)return!1;try{if(await C5(Z.url,Z.authToken))return!0}catch{}return!1}async function kQ($){if(!kJ($.url))return;let Z=yQ(),Q=await f0(Z.discoveryPath);if(!Q?.url||!zC(Q.url,$.url))return;if(!await OC(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await mJ())return;if(!await _C(Q.url))return;return await b0(Z.discoveryPath).catch(()=>{return}),await b2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var xF={};N(xF,{HubRuntimeHost:()=>s1});import{captureSdkError as EF,createSessionId as NF,HUB_CHECKPOINT_CAPABILITY as EC,HUB_COMPACTION_CAPABILITY as NC,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as wC,HUB_HOOK_CAPABILITY_PREFIX as CC,HUB_MISTAKE_LIMIT_CAPABILITY as PC,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as SC,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as bC,isHubToolExecutorName as yC}from"@cline/shared";var RF={};N(RF,{createCoreSessionSnapshot:()=>f1,coreSessionSnapshotToRecord:()=>IQ});function qC($){return $?JSON.parse(JSON.stringify($)):void 0}function MC($){return $?JSON.parse(JSON.stringify($)):void 0}function RC($){let Z=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,W=(Array.isArray(Z?.history)?Z.history:[]).filter((Y)=>!!Y&&typeof Y==="object"&&!Array.isArray(Y)).flatMap((Y)=>{let j=typeof Y.ref==="string"?Y.ref.trim():"",V=Number(Y.createdAt),H=Number(Y.runCount);if(!j||!Number.isFinite(V)||!Number.isInteger(H))return[];return[{ref:j,createdAt:V,runCount:H,...Y.kind==="stash"||Y.kind==="commit"?{kind:Y.kind}:{}}]}),J=W.at(-1),X=$?.checkpointEnabled===!0?!0:void 0;if(!X&&W.length===0)return;return{...X?{enabled:X}:{},...J?{latest:J}:{},history:W}}function f1($){let{session:Z}=$,Q=qC(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:MC($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let W=RC(Q);return W?{checkpoint:W}:{}})()}}function IQ($){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 e8($){if(!$)return;return JSON.parse(JSON.stringify($))}var hC=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function wF($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function CF($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function PF($){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 SF($,Z){let Q={manifest:[],handlers:new Map};for(let J of Object.keys(Z.toolExecutors??{}).filter(yC)){let X=Z.toolExecutors?.[J];if(typeof X!=="function")continue;y2(Q,{kind:"toolExecutor",executor:J,capabilityName:`${SC}${J}`},async({payload:Y,abortSignal:j})=>{let V=Array.isArray(Y.args)?[...Y.args]:[],H={...PF(Y.context),signal:j};return{result:await X(...V,H)}})}for(let J of $?.extraTools??[])y2(Q,{kind:"tool",name:J.name,description:J.description,inputSchema:e8(J.inputSchema)??{},...J.lifecycle?{lifecycle:e8(J.lifecycle)}:{},capabilityName:`${wC}${J.name}`},async({payload:X,abortSignal:Y,progress:j})=>{let V={...PF(X.context),signal:Y};return{result:await J.execute(X.input,{...V,emitUpdate:(B)=>{j({update:B})}})}});let W=$?.hooks;if(W)for(let J of hC){let X=W[J];if(typeof X!=="function")continue;y2(Q,{kind:"hook",name:J,capabilityName:`${CC}${J}`},async({payload:Y})=>({control:await X(Y.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;y2(Q,{kind:"compaction",capabilityName:NC,config:wF($.compaction)},async({payload:X})=>({result:await J(X.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;y2(Q,{kind:"checkpoint",capabilityName:EC,config:wF($.checkpoint)},async({payload:X})=>({result:await J(X.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;y2(Q,{kind:"mistakeLimit",capabilityName:PC},async({payload:X})=>({result:await J(X.context)}))}if($?.userInstructionService){let J=$.userInstructionService;y2(Q,{kind:"userInstructionService",capabilityName:bC},async()=>{return await J.start().catch(()=>{}),{snapshot:{records:{skill:J.listRecords("skill"),rule:J.listRecords("rule"),workflow:J.listRecords("workflow")},runtimeCommands:J.listRuntimeCommands()}}})}return Q}function kF($){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 kC($){return kF($)??"Capability request was cancelled."}function IC($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function xC($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function gC($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=typeof Z.inputTokens==="number"?Z.inputTokens:void 0,W=typeof Z.outputTokens==="number"?Z.outputTokens:void 0;if(Q===void 0||W===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:typeof Z.cacheReadTokens==="number"?Z.cacheReadTokens:0,cacheWriteTokens:typeof Z.cacheWriteTokens==="number"?Z.cacheWriteTokens:0,totalCost:typeof Z.totalCost==="number"?Z.totalCost:0}}function bF($){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 vJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function x$($,Z){return vJ($?.[Z])??0}function mC($){let Z=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,W=$?.agent&&typeof $.agent==="object"?$.agent:void 0,J=W?.teamRole==="teammate"||W?.teamRole==="lead"?W.teamRole:void 0;return{event:{type:"usage",agentId:typeof W?.agentId==="string"?W.agentId:void 0,conversationId:typeof W?.conversationId==="string"?W.conversationId:void 0,parentAgentId:typeof W?.parentAgentId==="string"?W.parentAgentId:void 0,inputTokens:x$(Z,"inputTokens"),outputTokens:x$(Z,"outputTokens"),cacheReadTokens:x$(Z,"cacheReadTokens"),cacheWriteTokens:x$(Z,"cacheWriteTokens"),cost:vJ(Z?.totalCost),totalInputTokens:x$(Q,"inputTokens"),totalOutputTokens:x$(Q,"outputTokens"),totalCacheReadTokens:x$(Q,"cacheReadTokens"),totalCacheWriteTokens:x$(Q,"cacheWriteTokens"),totalCost:vJ(Q?.totalCost)},teamAgentId:typeof W?.teamAgentId==="string"?W.teamAgentId:void 0,teamRole:J}}function vC($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,W=xC(Q)?Q:Q==="failed"?"error":"completed",J=gC($?.usage??Z?.usage);return{type:"done",reason:W,text:typeof $?.text==="string"?$.text:typeof Z?.text==="string"?Z.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof Z?.iterations==="number"?Z.iterations:0,usage:J}}function xQ($,Z){return $.error?.message??`hub command failed: ${Z}`}function S5($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function IF($){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:_0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:S5($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:S5($.status)==="completed"?0:S5($.status)==="failed"?1:void 0,status:S5($.status),interactive:Z?.interactive===!0,provider:typeof Z?.provider==="string"?Z.provider:"hub",model:typeof Z?.model==="string"?Z.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof Z?.teamName==="string"?Z.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??Z?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??Z?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??Z?.enableTeams===!0,prompt:typeof Z?.prompt==="string"?Z.prompt:void 0,metadata:Z,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,hookPath:typeof Z?.hookPath==="string"?Z.hookPath:void 0}}function g$($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function cC($){let Z=g$($?.snapshot);if(Z)return IQ(Z);let Q=$?.session;return Q?IF(Q):void 0}function yF($,Z,Q){let W=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot||Z.config.cwd;return P0.parse({version:1,session_id:$,source:Z.source??_0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:S5(Q?.status),interactive:Z.interactive===!0,provider:Z.config.providerId,model:Z.config.modelId,cwd:Q?.cwd?.trim()||Z.config.cwd,workspace_root:W,team_name:Z.config.teamName,enable_tools:Z.config.enableTools,enable_spawn:Z.config.enableSpawnAgent,enable_teams:Z.config.enableAgentTeams,prompt:Z.prompt?.trim()||void 0,metadata:Z.sessionMetadata&&Object.keys(Z.sessionMetadata).length>0?Z.sessionMetadata:void 0})}function hF($,Z){return P0.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 s1{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new R5;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,Z){this.clientContext=Z,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd},this.defaultCapabilities=O0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Q)=>this.requestPendingPromptsList(Q),update:(Q)=>this.requestPendingPromptUpdate(Q),delete:(Q)=>this.requestPendingPromptDelete(Q)},this.client=this.createClient($.url)}createClient($){return new H1({...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(!hQ($,"session.create"))return!1;let Z=await kQ({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=SF($.localRuntime,Z),W=$.config.sessionId?.trim()||NF(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:e8({...$.config,sessionId:W}),metadata:{...$.sessionMetadata??{},source:$.source??_0.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:e8($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(W,Z,Q.handlers);let X;try{X=await J()}catch(H){if(this.cleanupPlannedSession(W),await this.recoverLocalHubStartupDeadlock(H)){this.registerPlannedSession(W,Z,Q.handlers);try{X=await J()}catch(B){throw this.cleanupPlannedSession(W),B}}else throw H}let Y=g$(X.payload?.snapshot),j=X.payload?.session,V=(Y?.sessionId??j?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(W),Error("Hub runtime did not return a session id.");if(V!==W)this.cleanupPlannedSession(W),this.registerPlannedSession(V,Z,Q.handlers);return{sessionId:V,manifest:Y?hF(Y,$):yF(V,$,j),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let W=$.start,J=W?this.resolveCapabilities(W):void 0,X=W?SF(W.localRuntime,J??{}):{manifest:[],handlers:new Map},Y=W?W.config.sessionId?.trim()||NF():void 0;if(Y&&J)this.sessionCapabilities.set(Y,J);if(Y&&X.handlers.size>0)this.sessionClientContributionHandlers.set(Y,X.handlers),this.ensureSessionSubscription(Y);let j;try{j=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.config.workspaceRoot?.trim()||W.config.cwd,cwd:W.config.cwd??$.cwd,sessionConfig:e8({...W.config,sessionId:Y}),metadata:{...W.sessionMetadata??{},source:W.source??_0.CORE,provider:W.config.providerId,model:W.config.modelId,enableTools:W.config.enableTools,enableSpawn:W.config.enableSpawnAgent,enableTeams:W.config.enableAgentTeams,teamName:W.config.teamName,prompt:W.prompt,interactive:W.interactive===!0},runtimeOptions:{...X.manifest.length>0?{clientContributions:X.manifest}:{},...W.localRuntime?.configExtensions?{configExtensions:W.localRuntime.configExtensions}:{}},toolPolicies:e8(W.toolPolicies)}:{}},Z)}catch(F){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw F}if(!j.ok){let F=typeof j.payload?.error==="string"?j.payload.error:"session.restore failed";if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error(F)}let V=g$(j.payload?.snapshot),H=j.payload?.session,B=(V?.sessionId??H?.sessionId)?.trim();if(Q&&!B){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error("Hub checkpoint restore returned no session id")}if(B&&Y&&B!==Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);if(B&&J)this.sessionCapabilities.set(B,J);if(B&&X.handlers.size>0)this.sessionClientContributionHandlers.set(B,X.handlers);if(B)this.ensureSessionSubscription(B);let G=Array.isArray(j.payload?.messages)?j.payload.messages:void 0,K=j.payload?.checkpoint;if(!K)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:B,startResult:B?{sessionId:B,manifest:V?hF(V,W??{}):yF(B,W??{},H),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:G,checkpoint:K}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,updated:Z.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,removed:Z.payload?.removed===!0}}async getAccumulatedUsage($){let Z=await this.client.command("session.get",{includeSnapshot:!0},$),Q=g$(Z.payload?.snapshot);if(Q){let Y=Q.usage?{...Q.usage}:void 0,j=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return Y||j?{usage:Y,aggregateUsage:j}:void 0}let W=Z.payload?.session,J=bF(W?.usage),X=bF(W?.aggregateUsage);return J||X?{usage:J,aggregateUsage:X}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:kF(Z)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,Z]of this.sessionSubscriptions){Z();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(i1(Q))return;throw Q}return cC(Z.payload)}async listSessions($=100){let Z=await this.client.command("session.list",{limit:$}),Q=Array.isArray(Z.payload?.snapshots)?Z.payload.snapshots.flatMap((J)=>{let X=g$(J);return X?[IQ(X)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(IF)}async listSettings($){let Z=await this.client.command("settings.list",CF($));if(!Z.ok)throw Error(xQ(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",CF($));if(!Z.ok)throw Error(xQ(Z,"settings.toggle"));return{snapshot:Z.payload?.snapshot,changedTypes:Array.isArray(Z.payload?.changedTypes)?Z.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,Z){let Q={...Z.metadata??{}};if(typeof Z.prompt==="string")Q.prompt=Z.prompt;if(typeof Z.title==="string")Q.title=Z.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw EF(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(xQ(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(xQ(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,Z){return this.events.subscribe($,Z)}ensureSessionSubscription($){let Z=$.trim();if(!Z||this.sessionSubscriptions.has(Z))return;let Q=this.client.subscribe((W)=>{this.handleHubEvent(W)},{sessionId:Z});this.sessionSubscriptions.set(Z,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let Z=$.trim();if(!Z)return;this.sessionSubscriptions.get(Z)?.(),this.sessionSubscriptions.delete(Z),this.agentDoneEmittedForCurrentRunBySession.delete(Z)}resolveCapabilities($){return O0(this.defaultCapabilities,$.capabilities)??{}}emitToolCallContentStart($){this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:{type:"content_start",contentType:"tool",toolCallId:$.toolCallId,toolName:$.toolName,input:$.toolInput}}})}emitAgentDoneIfNeeded($){if(this.agentDoneEmittedForCurrentRunBySession.has($.sessionId))return;this.agentDoneEmittedForCurrentRunBySession.add($.sessionId),this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:vC($.payload)}})}handleHubEvent($){let Z=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!Z)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(Z);let Q=g$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"assistant.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",W=$.payload?.redacted===!0;if(!Q&&!W)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:W}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:Z,payload:$.payload});return}case"usage.updated":{let Q=mC($.payload);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:Z,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"tool",toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Q=g$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:Z,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:Z,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=g$($.payload?.snapshot),W=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:Z,payload:{...$.payload,reason:W}}),Q?.interactive===!0&&H0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:W,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{EF(this.telemetry,{component:"core",operation:$,error:Z,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let Z=$.sessionId?.trim();if(!Z)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let W=typeof $.payload?.requestId==="string"?$.payload.requestId:"",J=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!W)return;let X=this.sessionClientContributionHandlers.get(Z)?.get(J);if(!X){await this.client.command("capability.respond",{requestId:W,ok:!1,error:`No client contribution handler registered for capability ${J} in session ${Z}.`},Z).catch(()=>{});return}let Y=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},j=new AbortController;this.activeCapabilityAbortControllers.set(W,j);let V=(H)=>{this.client.command("capability.progress",{requestId:W,payload:H},Z).catch((B)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",B,$)})};try{let H=await X({payload:Y,abortSignal:j.signal,progress:V});if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!0,payload:H},Z)}catch(H){if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!1,error:H instanceof Error?H.message:String(H)},Z)}finally{this.activeCapabilityAbortControllers.delete(W)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let Z=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!Z)return;let Q=this.activeCapabilityAbortControllers.get(Z);if(!Q)return;Q.abort(kC($.payload.error))}async handleApprovalRequested($){let Z=$.sessionId?.trim();if(!Z)return;let Q=this.sessionCapabilities.get(Z)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let W=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",X=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!W||!J||!X)return;let Y=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},j=IC($.payload?.inputJson);this.pendingApprovalToolCallIds.add(J),this.emitToolCallContentStart({sessionId:Z,toolCallId:J,toolName:X,toolInput:j});let V=await Promise.resolve(Q({sessionId:Z,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:Z,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:J,toolName:X,input:j,policy:Y})).catch((H)=>({approved:!1,reason:H instanceof Error?H.message:`Tool approval request failed: ${String(H)}`}));await this.client.command("approval.respond",{approvalId:W,approved:V.approved,reason:V.reason},Z).catch(()=>{})}}var gF={};N(gF,{RemoteRuntimeHost:()=>$4});class $4 extends s1{constructor($){super({url:I$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var mF={};N(mF,{SqliteSessionStore:()=>D1});import{existsSync as uC,mkdirSync as dC}from"node:fs";import{join as lC}from"node:path";import{asBool as b5,asOptionalString as U1,asString as o1,ensureSessionSchema as pC,loadSqliteDb as rC,nowIso as gQ,toBoolInt as y5}from"@cline/shared/db";import{resolveDbDataDir as iC}from"@cline/shared/storage";class D1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??iC()}init(){this.getRawDb()}ensureSessionsDir(){if(!uC(this.sessionsDirPath))dC(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return lC(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=rC(this.sessionDbPath());return pC($,{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=gQ();this.run(`INSERT OR REPLACE INTO sessions (
|
|
498
|
+
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,M0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,M0(),$)}}class M5{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new q5({dbPath:$.dbPath});let Z=$.specs;this.reconciler=new fJ({store:this.store,specs:Z}),this.materializer=new L5({store:this.store}),this.eventIngress=new JJ({store:this.store,logger:$.logger}),this.runner=new _5({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:Z,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new UJ({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let W=$.logger;if(W)if(W.error)W.error("cron.watcher.failed",{error:Q});else W.log("cron.watcher.failed",{error:Q})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}var $F={};N($F,{manifestToSessionRecord:()=>RQ,listSessionHistoryFromBackend:()=>qJ,listSessionHistory:()=>EQ,hydrateSessionHistory:()=>eK});import{readdir as iN,readFile as sK}from"node:fs/promises";import{join as oK}from"node:path";import{formatDisplayUserInput as nN,normalizeUserInput as aN}from"@cline/shared";import{resolveSessionDataDir as tK}from"@cline/shared/storage";import{existsSync as lN}from"node:fs";import{readFile as pN}from"node:fs/promises";import{formatDisplayUserInput as rK}from"@cline/shared";class R5{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 h$($){let Z=$?.trim();if(!Z||!lN(Z))return[];try{let Q=(await pN(Z,"utf8")).trim();if(!Q)return[];let W=JSON.parse(Q);if(Array.isArray(W))return iK(W);if(W&&typeof W==="object"&&!Array.isArray(W)){let J=W.messages;if(Array.isArray(J))return iK(J)}return[]}catch{return[]}}function rN($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:rK($.content)};return{...$,content:$.content.map((Z)=>{if(Z.type!=="text"||typeof Z.text!=="string")return Z;return{...Z,text:rK(Z.text)}})}}function iK($){return $.map(rN)}function zJ($){return $?{...$}:void 0}async function nK($,Z){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await Z.queueSpawnRequest($);let W=await Z.upsertSubagentSessionFromHook($);if(!W)return;await Z.appendSubagentHookAudit(W,$),await Z.applySubagentStatus(W,$)}function E5($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function n0($){let Z=E5($);if(!Z)return;return Z.toLowerCase()==="unknown"?void 0:Z}function MQ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function sN($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function OJ($){let Z=$??200;return Number.isFinite(Z)?Math.max(0,Math.floor(Z)):200}function oN($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function tN($){return $.isSubagent!==!0&&!E5($.parentSessionId)}function eN($){let Z=$.match(/\d{13,}/g);if(!Z||Z.length===0)return 0;let Q=0;for(let W of Z){let J=Number.parseInt(W,10);if(Number.isFinite(J)&&J>Q)Q=J}return Q}function RQ($){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 $C($){let Z=OJ($);if(Z===0)return[];let Q=tK(),J=(await iN(Q,{withFileTypes:!0}).catch(()=>[])).filter((Y)=>Y.isDirectory()).map((Y)=>({entry:Y,recency:eN(Y.name.trim())})).sort((Y,j)=>j.recency-Y.recency||j.entry.name.localeCompare(Y.entry.name));return(await Promise.all(J.map(async({entry:Y})=>{let j=Y.name.trim();if(!j)return;let V=oK(Q,j,`${j}.json`),H=await sK(V,"utf8").catch(()=>{return});if(!H)return;let B;try{B=JSON.parse(H)}catch{return}let G=P0.safeParse(B);if(!G.success)return;return RQ(G.data)}))).filter((Y)=>Boolean(Y)).sort((Y,j)=>j.startedAt.localeCompare(Y.startedAt)).slice(0,Z)}async function ZC($,Z,Q){let W=OJ(Z);if(W===0)return await $.listSessions(0),[];let J=Q.includeSubagents?W:oN(W),X=await $.listSessions(J);return(Q.includeSubagents?X:X.filter(tN)).slice(0,W)}function QC($){if(typeof $==="string")return $.trim();let Z=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let W=Q;if(W.type!=="text")continue;let J=W.text?.trim();if(J)Z.push(J)}return Z.join(`
|
|
499
|
+
`).trim()}function aK($){return $.replace(/\s+/g," ").trim()}function WC($,Z){if($.length<=Z)return $;return`${$.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function JC($){for(let Z of["user","assistant"])for(let Q of $){if(Q.role!==Z)continue;let W=aK(QC(Q.content));if(!W)continue;let J=Z==="user"?aK(nN(W)):W,X=aN(J.split(`
|
|
500
|
+
`)[0]??J);return WC(X,50)}return}function XC($){let Z=0;for(let Q of $)Z+=MQ(Q.metrics?.cost)??0;return Z}function YC($){let Z,Q;for(let W=$.length-1;W>=0;W-=1){let J=$[W];if(!Z)Z=n0(J.modelInfo?.provider);if(!Q)Q=n0(J.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function jC($){return n0($?.provider)??n0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function VC($){return n0($?.model)??n0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function TJ($,Z){let Q=sN($.metadata),W=E5(Z?.title)??E5(Q?.title),J=MQ(Z?.totalCost)??MQ(Q?.totalCost),X=Q||W!==void 0||J!==void 0?{...Q??{},...W!==void 0?{title:W}:{},...J!==void 0?{totalCost:J}:{}}:void 0;return{...$,provider:n0(Z?.provider)??n0($.provider)??jC(Q)??"",model:n0(Z?.model)??n0($.model)??VC(Q)??"",metadata:X}}function HC($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function BC($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!HC(Q)}async function GC($,Z){return await Promise.all(Z.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let W=await $.readSessionMessages(Q.sessionId);return BC(Q,W)?{...Q,status:"idle"}:Q}))}async function eK($,Z){return await Promise.all(Z.map(async(Q)=>{let W=TJ(Q),J=Boolean(E5(W.metadata?.title)),X=Boolean(n0(W.provider)),Y=Boolean(n0(W.model)),j=MQ(W.metadata?.totalCost),V=j!==void 0&&j>0;if(J&&X&&Y&&V)return W;let H=await $.readSessionMessages(Q.sessionId);if(H.length===0)return W;let B=YC(H),G=XC(H);return TJ(Q,{title:J?void 0:JC(H),provider:X?void 0:B.provider,model:Y?void 0:B.model,totalCost:V||G<=0?void 0:G})}))}async function EQ($,Z={}){let Q=OJ(Z.limit),W=Z.includeSubagents===!0,J=await ZC($,Q,{includeSubagents:W}),X=Z.includeManifestFallback===!0&&J.length<Q?await $C(Math.min(Math.max(Q*2,100),500)):[],Y=new Map;for(let H of[...J,...X]){if(Y.has(H.sessionId))continue;Y.set(H.sessionId,H)}let j=X.length===0?J:Array.from(Y.values()).sort((H,B)=>B.startedAt.localeCompare(H.startedAt)).slice(0,Q),V=await GC($,j);if(Z.hydrate===!1)return V.map((H)=>TJ(H));return await eK($,V)}async function KC($){let Z=$.trim();if(!Z)return;let Q=oK(tK(),Z,`${Z}.json`),W=await sK(Q,"utf8").catch(()=>{return});if(!W)return;try{let J=P0.safeParse(JSON.parse(W));return J.success?J.data.messages_path:void 0}catch{return}}async function qJ($,Z={}){let Q=new Map;return await EQ({listSessions:async(J)=>{let X=await $.listSessions(J);Q.clear();for(let Y of X)Q.set(Y.sessionId,Y);return X.map(R6)},readSessionMessages:async(J)=>{let X=Q.get(J)?.messagesPath??await KC(J);return await h$(X)}},Z)}var FA={};N(FA,{resolveSessionBackend:()=>XX,createRuntimeHost:()=>V4});import{captureSdkError as GA}from"@cline/shared";import{createSessionId as Yw,isHubProtocolCompatible as jw,resolveClineBuildEnv as Vw,resolveHubCommandTimeoutMs as Hw}from"@cline/shared";import{spawn as xC}from"node:child_process";import{closeSync as gC,mkdirSync as mC,openSync as vC}from"node:fs";import{basename as cC,dirname as uC,join as dC}from"node:path";import{fileURLToPath as lC}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as pC,isHubDaemonProcess as AF,isHubProtocolCompatible as rC,resolveClineBuildEnv as fF,withResolvedClineBuildEnv as iC}from"@cline/shared";import{createHash as FC,randomBytes as AC}from"node:crypto";import{existsSync as fC}from"node:fs";import{chmod as UC,mkdir as MJ,readFile as XF,rm as RJ,writeFile as YF}from"node:fs/promises";import{dirname as jF,join as EJ}from"node:path";import{resolveClineDataDir as P2,resolveClineDir as VF}from"@cline/shared/storage";var QF="0.0.55";var N5={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:QF,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var DC="CLINE_HUB_DISCOVERY_PATH",LC="CLINE_HUB_BUILD_ID",WF=30000,_C=15000,zC=100;function TC($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function OC($){return FC("sha256").update($).digest("hex").slice(0,12)}function qC($){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 NQ(){return AC(32).toString("hex")}function MC($){return new Promise((Z)=>setTimeout(Z,$))}function RC($){return`${$}.lock`}async function EC($){try{let Z=JSON.parse(await XF(EJ($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function JF($){await RJ($,{recursive:!0,force:!0}).catch(()=>{return})}function CQ(){return process.env[LC]?.trim()||String(N5.version)}function n1($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${OC($)}`,Q=process.env[DC]?.trim()||EJ(P2(),"locks","hub","owners",`${TC(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function HF($=`hub-${Date.now().toString(36)}`){return n1($)}async function f0($){try{let Z=JSON.parse(await XF($,"utf8"));if(typeof Z.hubId!=="string"||typeof Z.protocolVersion!=="string"||typeof Z.authToken!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string"||typeof Z.startedAt!=="string"||typeof Z.updatedAt!=="string")return;return{hubId:Z.hubId,protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,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 wQ($,Z){await MJ(jF($),{recursive:!0}),await RJ($,{force:!0}).catch(()=>{return}),await YF($,`${JSON.stringify(Z,null,2)}
|
|
501
|
+
`,{encoding:"utf8",mode:384}),await UC($,384)}async function b0($){await RJ($,{force:!0}).catch(()=>{return})}async function PQ($,Z){let Q=RC($);await MJ(jF(Q),{recursive:!0});let W=Date.now()+_C;while(!0)try{await MJ(Q,{recursive:!1}),await YF(EJ(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
|
|
502
|
+
`,"utf8");try{return await Z()}finally{await JF(Q)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let Y=await EC(Q),j=Y?Date.now()-Date.parse(Y.acquiredAt):WF+1;if(!Y||!qC(Y.pid)||j>WF){await JF(Q);continue}if(Date.now()>=W)throw Error(`Timed out waiting for hub startup lock ${Q}`);await MC(zC)}}async function a1($,Z){try{let Q=await fetch(Z?.authToken?NJ($):SQ($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let W=await Q.json();if(typeof W.protocolVersion!=="string"||typeof W.host!=="string"||typeof W.port!=="number"||typeof W.url!=="string")return;return{protocolVersion:W.protocolVersion,minClientProtocolVersion:typeof W.minClientProtocolVersion==="string"?W.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof W.maxClientProtocolVersion==="string"?W.maxClientProtocolVersion:void 0,capabilities:Array.isArray(W.capabilities)?W.capabilities.filter((J)=>typeof J==="string"):void 0,coreVersion:typeof W.coreVersion==="string"?W.coreVersion:void 0,buildId:typeof W.buildId==="string"?W.buildId:void 0,host:W.host,port:W.port,url:W.url,hubId:typeof W.hubId==="string"?W.hubId:void 0,authToken:typeof W.authToken==="string"?W.authToken:void 0,pid:typeof W.pid==="number"?W.pid:void 0,startedAt:typeof W.startedAt==="string"?W.startedAt:void 0,updatedAt:typeof W.updatedAt==="string"?W.updatedAt:void 0}}catch{return}}function V1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function SQ($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function NJ($){let Z=new URL(SQ($));return Z.pathname="/status",Z.toString()}function BF($){return fC($)}import{CLINE_HUB_DEV_PORT as NC,CLINE_HUB_PORT as CC,resolveClineBuildEnv as wC}from"@cline/shared";var PC="CLINE_HUB_HOST",SC="CLINE_HUB_PORT",bC="CLINE_HUB_PATHNAME",CJ="127.0.0.1",wJ=CC,PJ="/hub";function GF($){return wC($)==="development"?NC:wJ}function SJ($={}){return($.env??process.env)[PC]?.trim()||CJ}function s8($={}){let Q=($.env??process.env)[SC]?.trim();if(!Q)return GF($);let W=Number.parseInt(Q,10);if(!Number.isInteger(W)||W<1||W>65535)return GF($);return W}function bJ($={}){return($.env??process.env)[bC]?.trim()||PJ}function a0($={},Z={}){return{host:$.host??SJ(Z),port:$.port??s8(Z),pathname:$.pathname??bJ(Z)}}import{join as yC}from"node:path";var hC="shared:cline",kC="CLINE_HUB_DISCOVERY_PATH",IC="hub-production";function KF($){let Z=d1($.trim());return n1(`workspace:${Z||$.trim()}`)}function y0($=hC){return n1($)}function s0(){return{ownerId:IC,discoveryPath:process.env[kC]?.trim()||yC(P2(),"locks","hub","production.json")}}var nC=8000,aC=200,sC=3000,oC=100,tC=[100,250,500,1000,2000],eC="--cline-hub-daemon";function $w($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function Zw(){try{let $=dC(P2(),"logs","hub-daemon.log");return mC(uC($),{recursive:!0}),{fd:vC($,"a"),logPath:$}}catch{return}}function UF(){return fF()==="production"?s0():y0()}function S2($){return rC($).compatible}function FF($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function b2($,Z){try{return await a1($,{authToken:Z})}catch{return}}async function Qw($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await b2($))?.url)return!0;await new Promise((J)=>setTimeout(J,oC))}return!1}async function bQ($,Z){if(await w5($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await Qw($.url,sC);return await b0(Z).catch(()=>{return}),Q}async function C5($,Z){if(S2($))return!0;return bQ($,Z)}async function DF($){if(fF()!=="production")return;let Z=y0();if(Z.discoveryPath===$.discoveryPath)return;let Q=await f0(Z.discoveryPath);if(Q?.url)await bQ(Q,Z.discoveryPath);else await b0(Z.discoveryPath).catch(()=>{return})}function Ww(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return lC(new URL(`./entry.${$}`,import.meta.url))}function Jw($,Z){let Q=Ww(),W=process.execPath?.trim();if(!W)throw Error("unable to resolve runtime executable for hub daemon");let J=cC(W).toLowerCase().includes("bun"),X=Q.startsWith("/$bunfs/"),Y=J&&Q.toLowerCase().endsWith(".ts"),j=X?[eC]:[...Y?["--conditions=development"]:[],Q];return{launcher:W,args:[...j,"--cwd",$,...$w(Z)],cwd:$,env:{...iC(process.env),CLINE_NO_INTERACTIVE:"1",[pC]:"1"}}}function Xw($){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 yJ($,Z={}){if(AF())return;let Q=Jw($,Z),W=Zw();try{xC(Q.launcher,Q.args,{detached:!0,stdio:W?["ignore",W.fd,W.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(W)gC(W.fd)}}async function o8($,Z={}){for(let Q=0;;Q++)try{yJ($,Z);return}catch(W){let J=tC[Q];if(!Xw(W)||J===void 0)throw W;await new Promise((X)=>setTimeout(X,J))}}function yQ($,Z={}){if(AF())return;let Q=UF(),W=a0(Z),J=V1(W.host,W.port,W.pathname),X=Z.allowPortFallback===!0&&W.port!==0;DF(Q).catch(()=>{return}).then(()=>f0(Q.discoveryPath)).then(async(Y)=>{let j=!1;if(Y?.url)if(!Y.authToken){if(j=!0,!await bQ(Y,Q.discoveryPath)&&!X)return}else{let B=await b2(Y.url,Y.authToken);if(B?.url&&S2(B)&&await f1(B.url,{authToken:Y.authToken}))return;if(B?.url)await C5({...B,authToken:Y.authToken},Q.discoveryPath);else await b0(Q.discoveryPath).catch(()=>{return})}let V=await b2(J);if(V?.url){if(S2(V)){if(!X||!j)return}else if(!await C5({...V,authToken:void 0},Q.discoveryPath)&&!X)return}let H=X?{...W,port:0}:W;await o8($,H)}).catch(()=>{})}async function LF($,Z={}){let Q=UF(),W=Z.host!==void 0||Z.port!==void 0||Z.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=a0(Z),X=V1(J.host,J.port,J.pathname),Y=(F)=>{if(!W)k$(F.url,F.authToken);return F};await DF(Q).catch(()=>{return});let j=await f0(Q.discoveryPath),V=!1;if(j?.url){let F=j.authToken;if(!F)V=!0,await bQ(j,Q.discoveryPath);else{let A=await b2(j.url,F);if(A?.url&&S2(A)&&await f1(A.url,{authToken:F}))return Y({url:A.url,authToken:F});if(A?.url)await C5({...A,authToken:F},Q.discoveryPath);else await b0(Q.discoveryPath).catch(()=>{return})}}let H=await b2(X);if(H?.url){let F=FF(H,j,X);if(S2(H))throw Error(`A compatible Cline Hub is already running at ${X}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${V?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`);if(!await C5(F,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is already running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let G=Z.allowPortFallback===!0&&J.port!==0?{...J,port:0}:J;await o8($,G);let K=Date.now()+nC;while(Date.now()<K){let F=await f0(Q.discoveryPath);if(F?.url&&F.authToken){let L=await b2(F.url,F.authToken);if(L?.url&&S2(L)&&await f1(L.url,{authToken:F.authToken}))return Y({url:L.url,authToken:F.authToken})}let A=await b2(X);if(A?.url&&!S2(A)){let L=FF(A,F,X);if(!await C5(L,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is still running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((L)=>setTimeout(L,aC))}throw Error("Timed out waiting for detached hub startup.")}function hQ(){return Vw()==="production"?s0():y0()}function Bw(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function qF($){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 qF($.data);return String($)}function Gw($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function _F($){let Z=$,Q=Gw(Z.reason);return new E0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:hJ,{closeCode:Z.code,closeReason:Q||void 0})}function Kw($,Z){if($ instanceof E0)return $;if($ instanceof Error)return new E0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new E0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new E0("hub_connect_failed",Q);let W=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new E0("hub_connect_failed",W?`Failed to connect to hub at ${Z.toString()} (${W} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var Fw=8000,Aw=200,zF="*",TF=8000,fw="cline-hub-auth.",MF=new Map,RF=new Set,Uw=3000,Dw=3000,Lw=100,hJ="Hub connection closed",_w=250,zw=5000,OF=0.5;class E0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function xJ($){return $ instanceof E0}class t8 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function kQ($,Z){return $ instanceof t8&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function EF($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=gJ($.toString());return Q?MF.get(Q):void 0}function Tw($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function gJ($){if(!Tw($))return;let Z=new URL(I$($));return Z.search="",Z.hash="",Z.toString()}function kJ($){let Z=gJ($);return!!Z&&RF.has(Z)}function k$($,Z){let Q=gJ($);if(Q){if(RF.add(Q),Z?.trim())MF.set(Q,Z)}return $}class H1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new E0("hub_connection_closed",hJ);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),Z=this.options.authToken?.trim()||EF($);$.hash="";let W=new(Bw())($.toString(),Z?[`${fw}${Z}`]:void 0);this.socket=W;let J=!1;this.connectPromise=new Promise((X,Y)=>{let j=!1,V=setTimeout(()=>{if(j)return;j=!0,J=!0,this.lastCloseError=new E0("hub_connect_timeout",`Timed out connecting to hub after ${TF}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{W.close()}catch{}Y(this.lastCloseError)},TF);W.addEventListener("open",()=>{if(j)return;j=!0,clearTimeout(V),X()}),W.addEventListener("error",(H)=>{if(j)return;j=!0,clearTimeout(V),this.lastCloseError=Kw(H,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)}),W.addEventListener("close",(H)=>{if(j)return;if(j=!0,clearTimeout(V),!J)this.lastCloseError=_F(H),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)})}),W.addEventListener("message",(X)=>{this.handleFrame(JSON.parse(qF(X)))}),W.addEventListener("close",(X)=>{if(this.socket!==W)return;if(!J)this.lastCloseError=_F(X),this.sawSocketClose=!0;this.registered=!1;for(let Y of this.pendingReplies.values())Y.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let X of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(X));this.reconnectAttempt=0}subscribe($,Z){let Q=Z?.sessionId?.trim()||void 0,W={listener:$,sessionId:Q};return this.listeners.add(W),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(W))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,W){let J=0,X=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,W)}catch(Y){if(!X||J>=1||!await this.recoverLocalHubTransport(Y))throw Y;J+=1}}async commandOnce($,Z,Q,W){await this.connect();let J=Yw("hubreq_"),X=Hw($,W?.timeoutMs),Y=new Promise((V,H)=>{let B=X===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;H(new t8($,"hub_command_timeout",`Hub command ${$} timed out after ${X}ms (hub=${this.currentUrl}, requestId=${J}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},X);this.pendingReplies.set(J,{resolve:(G)=>{if(B)clearTimeout(B);V(G)},reject:(G)=>{if(B)clearTimeout(B);H(G)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:J,clientId:this.clientId,sessionId:Q,timeoutMs:X,payload:Z}})}catch(V){throw this.pendingReplies.delete(J),V}let j=await Y;if(!j.ok){if(j.error?.code===E2){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new r1(V,j.error.message)}throw new t8($,j.error?.code,j.error?.message??`Hub command ${$} failed`)}return j}async recoverLocalHubTransport($){if(!kJ(this.currentUrl)||!xJ($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await y2({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(_w*2**this.reconnectAttempt,zw),Z=Math.round($*(1-OF)+Math.random()*$*OF);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},Z)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!kJ(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await y2({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 E0("hub_connection_closed",hJ),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 E0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,Z){this.sendFrame({kind:$,clientId:this.clientId,...Z?{sessionId:Z}:{}})}adjustSubscriptionCount($,Z){let Q=this.subscriptionKeyForSessionId($),W=(this.subscriptionCounts.get(Q)??0)+Z;if(W<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(Z<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,W),Z>0&&W===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??zF}subscriptionSessionIdFromKey($){return $===zF?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 I$($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function f1($,Z){let Q=new H1({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 IJ($,Z){let Q=I$($),W=await a1(Q,{authToken:Z?.authToken});if(!W)return{status:"unreachable",url:Q};if(!jw(W).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await f1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function Ow($){let Z=Date.now()+Fw;while(Date.now()<Z){let Q=await f0($.discoveryPath);if(Q?.url){let W=await IJ(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(W.status==="compatible")return k$(W.url,Q.authToken)}await new Promise((W)=>setTimeout(W,Aw))}return}async function qw($){let Z=Date.now()+Dw;while(Date.now()<Z){if(!(await a1($).catch(()=>{return}))?.url)return!0;await new Promise((W)=>setTimeout(W,Lw))}return!1}function Mw($,Z){try{return I$($)===I$(Z)}catch{return!1}}function Rw($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let W=Q;if(W.status==="running"||W.status==="idle"||W.status==="pending")return!0;return Array.isArray(W.participants)&&W.participants.length>0})}async function Ew($,Z,Q){let W=new H1({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let J=await W.command("session.list",{limit:500},void 0,{timeoutMs:Uw});return!Rw(J.payload)}catch{return!1}finally{await W.dispose().catch(()=>{return})}}async function P5($={}){if($.endpoint?.trim()){let J=await IJ($.endpoint);return J.status==="compatible"?J.url:void 0}let Z=hQ(),Q=await f0(Z.discoveryPath);if(!Q?.url)return;let W=await IJ(Q.url,{authToken:Q.authToken});if(W.status==="compatible")return k$(W.url,Q.authToken);if(W.status==="protocol_mismatch")await b0(Z.discoveryPath).catch(()=>{return});return}async function y2($={}){let Z=await P5($);if(Z&&await f1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;let Q=hQ();return await o8($.workspaceRoot??process.cwd()),await Ow(Q)}async function w5($,Z){let Q=new URL($),W=Z?.trim()||EF(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:W?{authorization:`Bearer ${W}`}:void 0})).ok}async function mJ($=hQ()){let Z=await f0($.discoveryPath);if(!Z?.url)return!1;try{if(await w5(Z.url,Z.authToken))return!0}catch{}return!1}async function IQ($){if(!kJ($.url))return;let Z=hQ(),Q=await f0(Z.discoveryPath);if(!Q?.url||!Mw(Q.url,$.url))return;if(!await Ew(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await mJ())return;if(!await qw(Q.url))return;return await b0(Z.discoveryPath).catch(()=>{return}),await y2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var mF={};N(mF,{HubRuntimeHost:()=>s1});import{captureSdkError as CF,createSessionId as wF,HUB_CHECKPOINT_CAPABILITY as Pw,HUB_COMPACTION_CAPABILITY as Sw,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as bw,HUB_HOOK_CAPABILITY_PREFIX as yw,HUB_MISTAKE_LIMIT_CAPABILITY as hw,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as kw,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Iw,isHubToolExecutorName as xw}from"@cline/shared";var NF={};N(NF,{createCoreSessionSnapshot:()=>U1,coreSessionSnapshotToRecord:()=>xQ});function Nw($){return $?JSON.parse(JSON.stringify($)):void 0}function Cw($){return $?JSON.parse(JSON.stringify($)):void 0}function ww($){let Z=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,W=(Array.isArray(Z?.history)?Z.history:[]).filter((Y)=>!!Y&&typeof Y==="object"&&!Array.isArray(Y)).flatMap((Y)=>{let j=typeof Y.ref==="string"?Y.ref.trim():"",V=Number(Y.createdAt),H=Number(Y.runCount);if(!j||!Number.isFinite(V)||!Number.isInteger(H))return[];return[{ref:j,createdAt:V,runCount:H,...Y.kind==="stash"||Y.kind==="commit"?{kind:Y.kind}:{}}]}),J=W.at(-1),X=$?.checkpointEnabled===!0?!0:void 0;if(!X&&W.length===0)return;return{...X?{enabled:X}:{},...J?{latest:J}:{},history:W}}function U1($){let{session:Z}=$,Q=Nw(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:Cw($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let W=ww(Q);return W?{checkpoint:W}:{}})()}}function xQ($){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 e8($){if(!$)return;return JSON.parse(JSON.stringify($))}var gw=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function PF($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function SF($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function bF($){let Z=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof Z.agentId==="string"?Z.agentId:"",conversationId:typeof Z.conversationId==="string"?Z.conversationId:"",iteration:typeof Z.iteration==="number"?Z.iteration:0,metadata:Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0}}function h2($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function yF($,Z){let Q={manifest:[],handlers:new Map};for(let J of Object.keys(Z.toolExecutors??{}).filter(xw)){let X=Z.toolExecutors?.[J];if(typeof X!=="function")continue;h2(Q,{kind:"toolExecutor",executor:J,capabilityName:`${kw}${J}`},async({payload:Y,abortSignal:j})=>{let V=Array.isArray(Y.args)?[...Y.args]:[],H={...bF(Y.context),signal:j};return{result:await X(...V,H)}})}for(let J of $?.extraTools??[])h2(Q,{kind:"tool",name:J.name,description:J.description,inputSchema:e8(J.inputSchema)??{},...J.lifecycle?{lifecycle:e8(J.lifecycle)}:{},capabilityName:`${bw}${J.name}`},async({payload:X,abortSignal:Y,progress:j})=>{let V={...bF(X.context),signal:Y};return{result:await J.execute(X.input,{...V,emitUpdate:(B)=>{j({update:B})}})}});let W=$?.hooks;if(W)for(let J of gw){let X=W[J];if(typeof X!=="function")continue;h2(Q,{kind:"hook",name:J,capabilityName:`${yw}${J}`},async({payload:Y})=>({control:await X(Y.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;h2(Q,{kind:"compaction",capabilityName:Sw,config:PF($.compaction)},async({payload:X})=>({result:await J(X.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;h2(Q,{kind:"checkpoint",capabilityName:Pw,config:PF($.checkpoint)},async({payload:X})=>({result:await J(X.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;h2(Q,{kind:"mistakeLimit",capabilityName:hw},async({payload:X})=>({result:await J(X.context)}))}if($?.userInstructionService){let J=$.userInstructionService;h2(Q,{kind:"userInstructionService",capabilityName:Iw},async()=>{return await J.start().catch(()=>{}),{snapshot:{records:{skill:J.listRecords("skill"),rule:J.listRecords("rule"),workflow:J.listRecords("workflow")},runtimeCommands:J.listRuntimeCommands()}}})}return Q}function xF($){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 mw($){return xF($)??"Capability request was cancelled."}function vw($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function cw($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function uw($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=typeof Z.inputTokens==="number"?Z.inputTokens:void 0,W=typeof Z.outputTokens==="number"?Z.outputTokens:void 0;if(Q===void 0||W===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:typeof Z.cacheReadTokens==="number"?Z.cacheReadTokens:0,cacheWriteTokens:typeof Z.cacheWriteTokens==="number"?Z.cacheWriteTokens:0,totalCost:typeof Z.totalCost==="number"?Z.totalCost:0}}function hF($){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 vJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function x$($,Z){return vJ($?.[Z])??0}function dw($){let Z=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,W=$?.agent&&typeof $.agent==="object"?$.agent:void 0,J=W?.teamRole==="teammate"||W?.teamRole==="lead"?W.teamRole:void 0;return{event:{type:"usage",agentId:typeof W?.agentId==="string"?W.agentId:void 0,conversationId:typeof W?.conversationId==="string"?W.conversationId:void 0,parentAgentId:typeof W?.parentAgentId==="string"?W.parentAgentId:void 0,inputTokens:x$(Z,"inputTokens"),outputTokens:x$(Z,"outputTokens"),cacheReadTokens:x$(Z,"cacheReadTokens"),cacheWriteTokens:x$(Z,"cacheWriteTokens"),cost:vJ(Z?.totalCost),totalInputTokens:x$(Q,"inputTokens"),totalOutputTokens:x$(Q,"outputTokens"),totalCacheReadTokens:x$(Q,"cacheReadTokens"),totalCacheWriteTokens:x$(Q,"cacheWriteTokens"),totalCost:vJ(Q?.totalCost)},teamAgentId:typeof W?.teamAgentId==="string"?W.teamAgentId:void 0,teamRole:J}}function lw($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,W=cw(Q)?Q:Q==="failed"?"error":"completed",J=uw($?.usage??Z?.usage);return{type:"done",reason:W,text:typeof $?.text==="string"?$.text:typeof Z?.text==="string"?Z.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof Z?.iterations==="number"?Z.iterations:0,usage:J}}function gQ($,Z){return $.error?.message??`hub command failed: ${Z}`}function S5($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function gF($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof Z?.agentId==="string"?Z.agentId:void 0),parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,isSubagent:typeof Z?.isSubagent==="boolean"?Z.isSubagent:!1,source:typeof Z?.source==="string"?Z.source:z0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:S5($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:S5($.status)==="completed"?0:S5($.status)==="failed"?1:void 0,status:S5($.status),interactive:Z?.interactive===!0,provider:typeof Z?.provider==="string"?Z.provider:"hub",model:typeof Z?.model==="string"?Z.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof Z?.teamName==="string"?Z.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??Z?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??Z?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??Z?.enableTeams===!0,prompt:typeof Z?.prompt==="string"?Z.prompt:void 0,metadata:Z,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,hookPath:typeof Z?.hookPath==="string"?Z.hookPath:void 0}}function g$($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function pw($){let Z=g$($?.snapshot);if(Z)return xQ(Z);let Q=$?.session;return Q?gF(Q):void 0}function kF($,Z,Q){let W=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot||Z.config.cwd;return P0.parse({version:1,session_id:$,source:Z.source??z0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:S5(Q?.status),interactive:Z.interactive===!0,provider:Z.config.providerId,model:Z.config.modelId,cwd:Q?.cwd?.trim()||Z.config.cwd,workspace_root:W,team_name:Z.config.teamName,enable_tools:Z.config.enableTools,enable_spawn:Z.config.enableSpawnAgent,enable_teams:Z.config.enableAgentTeams,prompt:Z.prompt?.trim()||void 0,metadata:Z.sessionMetadata&&Object.keys(Z.sessionMetadata).length>0?Z.sessionMetadata:void 0})}function IF($,Z){return P0.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 s1{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new R5;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=q0($.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 H1({...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(!kQ($,"session.create"))return!1;let Z=await IQ({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=yF($.localRuntime,Z),W=$.config.sessionId?.trim()||wF(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:e8({...$.config,sessionId:W}),metadata:{...$.sessionMetadata??{},source:$.source??z0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:e8($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(W,Z,Q.handlers);let X;try{X=await J()}catch(H){if(this.cleanupPlannedSession(W),await this.recoverLocalHubStartupDeadlock(H)){this.registerPlannedSession(W,Z,Q.handlers);try{X=await J()}catch(B){throw this.cleanupPlannedSession(W),B}}else throw H}let Y=g$(X.payload?.snapshot),j=X.payload?.session,V=(Y?.sessionId??j?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(W),Error("Hub runtime did not return a session id.");if(V!==W)this.cleanupPlannedSession(W),this.registerPlannedSession(V,Z,Q.handlers);return{sessionId:V,manifest:Y?IF(Y,$):kF(V,$,j),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let W=$.start,J=W?this.resolveCapabilities(W):void 0,X=W?yF(W.localRuntime,J??{}):{manifest:[],handlers:new Map},Y=W?W.config.sessionId?.trim()||wF():void 0;if(Y&&J)this.sessionCapabilities.set(Y,J);if(Y&&X.handlers.size>0)this.sessionClientContributionHandlers.set(Y,X.handlers),this.ensureSessionSubscription(Y);let j;try{j=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.config.workspaceRoot?.trim()||W.config.cwd,cwd:W.config.cwd??$.cwd,sessionConfig:e8({...W.config,sessionId:Y}),metadata:{...W.sessionMetadata??{},source:W.source??z0.CORE,provider:W.config.providerId,model:W.config.modelId,enableTools:W.config.enableTools,enableSpawn:W.config.enableSpawnAgent,enableTeams:W.config.enableAgentTeams,teamName:W.config.teamName,prompt:W.prompt,interactive:W.interactive===!0},runtimeOptions:{...X.manifest.length>0?{clientContributions:X.manifest}:{},...W.localRuntime?.configExtensions?{configExtensions:W.localRuntime.configExtensions}:{}},toolPolicies:e8(W.toolPolicies)}:{}},Z)}catch(F){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw F}if(!j.ok){let F=typeof j.payload?.error==="string"?j.payload.error:"session.restore failed";if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error(F)}let V=g$(j.payload?.snapshot),H=j.payload?.session,B=(V?.sessionId??H?.sessionId)?.trim();if(Q&&!B){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error("Hub checkpoint restore returned no session id")}if(B&&Y&&B!==Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);if(B&&J)this.sessionCapabilities.set(B,J);if(B&&X.handlers.size>0)this.sessionClientContributionHandlers.set(B,X.handlers);if(B)this.ensureSessionSubscription(B);let G=Array.isArray(j.payload?.messages)?j.payload.messages:void 0,K=j.payload?.checkpoint;if(!K)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:B,startResult:B?{sessionId:B,manifest:V?IF(V,W??{}):kF(B,W??{},H),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:G,checkpoint:K}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,updated:Z.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,removed:Z.payload?.removed===!0}}async getAccumulatedUsage($){let Z=await this.client.command("session.get",{includeSnapshot:!0},$),Q=g$(Z.payload?.snapshot);if(Q){let Y=Q.usage?{...Q.usage}:void 0,j=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return Y||j?{usage:Y,aggregateUsage:j}:void 0}let W=Z.payload?.session,J=hF(W?.usage),X=hF(W?.aggregateUsage);return J||X?{usage:J,aggregateUsage:X}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:xF(Z)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,Z]of this.sessionSubscriptions){Z();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(i1(Q))return;throw Q}return pw(Z.payload)}async listSessions($=100){let Z=await this.client.command("session.list",{limit:$}),Q=Array.isArray(Z.payload?.snapshots)?Z.payload.snapshots.flatMap((J)=>{let X=g$(J);return X?[xQ(X)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(gF)}async listSettings($){let Z=await this.client.command("settings.list",SF($));if(!Z.ok)throw Error(gQ(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",SF($));if(!Z.ok)throw Error(gQ(Z,"settings.toggle"));return{snapshot:Z.payload?.snapshot,changedTypes:Array.isArray(Z.payload?.changedTypes)?Z.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,Z){let Q={...Z.metadata??{}};if(typeof Z.prompt==="string")Q.prompt=Z.prompt;if(typeof Z.title==="string")Q.title=Z.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw CF(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(gQ(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(gQ(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,Z){return this.events.subscribe($,Z)}ensureSessionSubscription($){let Z=$.trim();if(!Z||this.sessionSubscriptions.has(Z))return;let Q=this.client.subscribe((W)=>{this.handleHubEvent(W)},{sessionId:Z});this.sessionSubscriptions.set(Z,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let Z=$.trim();if(!Z)return;this.sessionSubscriptions.get(Z)?.(),this.sessionSubscriptions.delete(Z),this.agentDoneEmittedForCurrentRunBySession.delete(Z)}resolveCapabilities($){return q0(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:lw($.payload)}})}handleHubEvent($){let Z=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!Z)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(Z);let Q=g$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"assistant.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",W=$.payload?.redacted===!0;if(!Q&&!W)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:W}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:Z,payload:$.payload});return}case"usage.updated":{let Q=dw($.payload);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:Z,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"tool",toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Q=g$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:Z,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:Z,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=g$($.payload?.snapshot),W=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:Z,payload:{...$.payload,reason:W}}),Q?.interactive===!0&&H0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:W,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{CF(this.telemetry,{component:"core",operation:$,error:Z,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let Z=$.sessionId?.trim();if(!Z)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let W=typeof $.payload?.requestId==="string"?$.payload.requestId:"",J=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!W)return;let X=this.sessionClientContributionHandlers.get(Z)?.get(J);if(!X){await this.client.command("capability.respond",{requestId:W,ok:!1,error:`No client contribution handler registered for capability ${J} in session ${Z}.`},Z).catch(()=>{});return}let Y=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},j=new AbortController;this.activeCapabilityAbortControllers.set(W,j);let V=(H)=>{this.client.command("capability.progress",{requestId:W,payload:H},Z).catch((B)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",B,$)})};try{let H=await X({payload:Y,abortSignal:j.signal,progress:V});if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!0,payload:H},Z)}catch(H){if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!1,error:H instanceof Error?H.message:String(H)},Z)}finally{this.activeCapabilityAbortControllers.delete(W)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let Z=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!Z)return;let Q=this.activeCapabilityAbortControllers.get(Z);if(!Q)return;Q.abort(mw($.payload.error))}async handleApprovalRequested($){let Z=$.sessionId?.trim();if(!Z)return;let Q=this.sessionCapabilities.get(Z)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let W=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",X=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!W||!J||!X)return;let Y=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},j=vw($.payload?.inputJson);this.pendingApprovalToolCallIds.add(J),this.emitToolCallContentStart({sessionId:Z,toolCallId:J,toolName:X,toolInput:j});let V=await Promise.resolve(Q({sessionId:Z,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:Z,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:J,toolName:X,input:j,policy:Y})).catch((H)=>({approved:!1,reason:H instanceof Error?H.message:`Tool approval request failed: ${String(H)}`}));await this.client.command("approval.respond",{approvalId:W,approved:V.approved,reason:V.reason},Z).catch(()=>{})}}var vF={};N(vF,{RemoteRuntimeHost:()=>$4});class $4 extends s1{constructor($){super({url:I$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var cF={};N(cF,{SqliteSessionStore:()=>L1});import{existsSync as rw,mkdirSync as iw}from"node:fs";import{join as nw}from"node:path";import{asBool as b5,asOptionalString as D1,asString as o1,ensureSessionSchema as aw,loadSqliteDb as sw,nowIso as mQ,toBoolInt as y5}from"@cline/shared/db";import{resolveDbDataDir as ow}from"@cline/shared/storage";class L1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??ow()}init(){this.getRawDb()}ensureSessionsDir(){if(!rw(this.sessionsDirPath))iw(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return nw(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=sw(this.sessionDbPath());return aw($,{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=mQ();this.run(`INSERT OR REPLACE INTO sessions (
|
|
503
503
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
504
504
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
505
505
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
506
506
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
507
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,y5($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,y5($.enableTools),y5($.enableSpawn),y5($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,y5($.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(
|
|
507
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,y5($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,y5($.enableTools),y5($.enableSpawn),y5($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,y5($.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(mQ()),Q.push($.sessionId),this.run(`UPDATE sessions SET ${Z.join(", ")} WHERE session_id = ?`,Q)}updateStatus($,Z,Q){this.update({sessionId:$,status:Z,endedAt:H0(Z)?null:mQ(),exitCode:H0(Z)?null:Q??(Z==="failed"?1:0)})}get($){let Z=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
|
|
508
508
|
provider, model, cwd, workspace_root, team_name,
|
|
509
509
|
enable_tools, enable_spawn, enable_teams,
|
|
510
510
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
|
|
511
511
|
prompt, metadata_json, hook_path, messages_path, updated_at
|
|
512
|
-
FROM sessions WHERE session_id = ?`,[$]);if(!Z)return;return{sessionId:o1(Z.session_id),source:o1(Z.source),pid:Number(Z.pid??0),startedAt:o1(Z.started_at),endedAt:Z.ended_at??null,exitCode:Z.exit_code??null,status:o1(Z.status),interactive:b5(Z.interactive),provider:o1(Z.provider),model:o1(Z.model),cwd:o1(Z.cwd),workspaceRoot:o1(Z.workspace_root),teamName:
|
|
513
|
-
`,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let Z=this.artifacts.sessionManifestPath($,!1);if(!
|
|
514
|
-
`;if(
|
|
515
|
-
`,"utf8")}}import{appendFileSync as
|
|
516
|
-
`,"utf8")}}import{formatUserInputBlock as
|
|
512
|
+
FROM sessions WHERE session_id = ?`,[$]);if(!Z)return;return{sessionId:o1(Z.session_id),source:o1(Z.source),pid:Number(Z.pid??0),startedAt:o1(Z.started_at),endedAt:Z.ended_at??null,exitCode:Z.exit_code??null,status:o1(Z.status),interactive:b5(Z.interactive),provider:o1(Z.provider),model:o1(Z.model),cwd:o1(Z.cwd),workspaceRoot:o1(Z.workspace_root),teamName:D1(Z.team_name),enableTools:b5(Z.enable_tools),enableSpawn:b5(Z.enable_spawn),enableTeams:b5(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:b5(Z.is_subagent),prompt:D1(Z.prompt),metadata:(()=>{let Q=D1(Z.metadata_json);if(!Q)return;try{let W=JSON.parse(Q);if(W&&typeof W==="object"&&!Array.isArray(W))return W}catch{}return})(),hookPath:D1(Z.hook_path),messagesPath:D1(Z.messages_path),updatedAt:D1(Z.updated_at)??mQ()}}list($=200){let Z=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Q=[];for(let W of Z){let J=this.get(o1(W.session_id));if(J)Q.push(J)}return Q}delete($,Z=!1){let Q=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(Z)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}}Z4();import{existsSync as eJ,mkdirSync as dP,readFileSync as WA,renameSync as lP,writeFileSync as pP}from"node:fs";import{join as JA}from"node:path";import{resolveSessionDataDir as rP}from"@cline/shared/storage";import{dirname as cP}from"node:path";import{nanoid as uP}from"nanoid";import{appendFileSync as BP,existsSync as GP,mkdirSync as uF,readFileSync as KP,writeFileSync as dF}from"node:fs";import{dirname as lF,join as FP}from"node:path";import{ensureHookLogDir as AP}from"@cline/shared/storage";class cJ{adapter;messagesArtifactUploader;logger;artifacts;constructor($,Z,Q){this.adapter=$;this.messagesArtifactUploader=Z;this.logger=Q;this.artifacts=new I3(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,Z,Q){YB(Z,Q,$3($))}writeSessionManifest($,Z){uF(lF($),{recursive:!0}),dF($,`${JSON.stringify(P0.parse(Z),null,2)}
|
|
513
|
+
`,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let Z=this.artifacts.sessionManifestPath($,!1);if(!GP(Z))return{path:Z};try{return{path:Z,manifest:P0.parse(JSON.parse(KP(Z,"utf8")))}}catch{return{path:Z}}}async resolveArtifactPath($,Z,Q){let J=(await this.adapter.getSession($))?.[Z];return typeof J==="string"&&J.trim().length>0?J:Q($)}async persistSessionMessages($,Z,Q){let W=await this.resolveArtifactPath($,"messagesPath",(Y)=>this.artifacts.sessionMessagesPath(Y)),J=Z3({updatedAt:J0(),context:$3($),messages:Z,systemPrompt:Q}),X=`${JSON.stringify(J,null,2)}
|
|
514
|
+
`;if(uF(lF(W),{recursive:!0}),dF(W,X,"utf8"),!this.messagesArtifactUploader)return;try{let Y=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:W,contents:X,row:Y})}catch(Y){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:Y})}}appendStaleSessionHookLog($,Z,Q,W,J){let Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??FP(AP(),"hooks.jsonl");BP(Y,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:W,sessionId:Z,pid:Q,source:J})}
|
|
515
|
+
`,"utf8")}}import{appendFileSync as fP}from"node:fs";import{join as UP}from"node:path";import{resolveRootSessionId as pF}from"@cline/shared";import{ensureHookLogDir as DP}from"@cline/shared/storage";import{z as uJ}from"zod";var LP="subagent",_P=uJ.looseObject({task:uJ.string().optional(),systemPrompt:uJ.string().optional()});class vQ{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,Z,Q,W){this.adapter=$;this.manifestStore=Z;this.toPersistedMessages=Q;this.heartbeatLogIntervalMs=W}teamTaskQueueKey($,Z){return`${$}::${Z}`}activeTeamTaskSessionId($,Z){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,Z))?.at(-1)}buildSubsessionRow($,Z){return{sessionId:Z.sessionId,source:LP,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:E6({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=pF($.sessionContext);if(!Z)return;let Q=_P.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:Z,parentAgentId:$.agent_id,task:Q.success?Q.data.task:void 0,systemPrompt:Q.success?Q.data.systemPrompt:void 0})}async upsertSubagentSession($){let Z=$.rootSessionId;if(!Z)return;let Q=await this.adapter.getSession(Z);if(!Q)return;let W=L8(Z,$.agentId),J=await this.adapter.getSession(W),X=J0(),Y=this.manifestStore.artifacts.subagentArtifactPaths(W,$.agentId,this.activeTeamTaskSessionId(Z,$.parentAgentId)),j=$.prompt??J?.prompt??void 0;if(!j)j=await this.adapter.claimSpawnRequest(Z,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!J)return await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:W,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:j,startedAt:X,...Y})),this.manifestStore.initializeMessagesFile(W,Y.messagesPath,X),W;return await this.adapter.updateSession({sessionId:W,setRunning:!0,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:J.prompt??j??null,metadata:E6({metadata:J.metadata??void 0,prompt:J.prompt??j??null}),expectedStatusLock:J.statusLock}),W}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let Z=pF($.sessionContext);if(!Z)return;if($.hookName==="session_shutdown"){let Q=L8(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($,q6(Z))}async applySubagentStatusBySessionId($,Z){let Q=await this.adapter.getSession($);if(!Q)return;let W=H0(Z)?null:J0(),J=H0(Z)?null:Z==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:Z,endedAt:W,exitCode:J,expectedStatusLock:Q.statusLock})}async applyStatusToRunningChildSessions($,Z){if(!$)return;let Q=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let W of Q)await this.applySubagentStatusBySessionId(W.sessionId,Z)}async onTeamTaskStart($,Z,Q){let W=await this.adapter.getSession($);if(!W)return;let J=T6($,Z),X=J0(),{messagesPath:Y}=this.manifestStore.artifacts.subagentArtifactPaths(J,Z);await this.adapter.upsertSession(this.buildSubsessionRow(W,{sessionId:J,parentSessionId:$,parentAgentId:"lead",agentId:Z,prompt:Q||`Team task for ${Z}`,startedAt:X,messagesPath:Y})),this.manifestStore.initializeMessagesFile(J,Y,X);let j=this.teamTaskQueueKey($,Z),V=this.teamTaskSessionsByAgent.get(j)??[];V.push(J),this.teamTaskSessionsByAgent.set(j,V)}async onTeamTaskEnd($,Z,Q,W,J,X){let Y=this.teamTaskQueueKey($,Z),j=this.teamTaskSessionsByAgent.get(Y);if(!j||j.length===0)return;let V=j.shift();if(j.length===0)this.teamTaskSessionsByAgent.delete(Y);if(!V)return;let H=J?.messages??X,B=this.toPersistedMessages(H,J,X);if(B)await this.manifestStore.persistSessionMessages(V,B);await this.applySubagentStatusBySessionId(V,Q),this.teamTaskLastHeartbeatBySession.delete(V),this.teamTaskLastProgressLineBySession.delete(V)}async onTeamTaskProgress($,Z,Q,W){let J=this.teamTaskQueueKey($,Z),X=this.teamTaskSessionsByAgent.get(J)?.[0];if(!X)return;let Y=Q.trim();if(!Y)return;let j=W?.kind??"progress";if(j==="heartbeat"){let H=Date.now(),B=this.teamTaskLastHeartbeatBySession.get(X)??0;if(H-B<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(X,H)}let V=j==="heartbeat"?"[progress] heartbeat":j==="text"?`[progress] text: ${Y}`:`[progress] ${Y}`;if(this.teamTaskLastProgressLineBySession.get(X)===V)return;this.teamTaskLastProgressLineBySession.set(X,V)}async handleSubAgentStart($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;await this.applySubagentStatusBySessionId(Q,"running")}async handleSubAgentEnd($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;if(Z.error){await this.applySubagentStatusBySessionId(Q,"failed");return}let W=this.toPersistedMessages(Z.agentResult?.messages,Z.agentResult);if(W)await this.manifestStore.persistSessionMessages(Q,W);let J=Z.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Q,J==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Q=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??UP(DP(),"hooks.jsonl");fP(Q,`${JSON.stringify({ts:J0(),...$})}
|
|
516
|
+
`,"utf8")}}import{formatUserInputBlock as vP}from"@cline/shared";var QA={};N(QA,{toTeamProgressLifecycleEvent:()=>X4,sanitizeTeamName:()=>sH,reviveTeamStateDates:()=>FZ,parseConfiguredAgentConfig:()=>h5,loadConfiguredAgentConfigs:()=>Q4,createWorkerReviewerTeam:()=>ZA,createSpawnAgentTool:()=>_$,createDelegatedAgentConfigProvider:()=>D$,createDelegatedAgent:()=>L$,createConfiguredAgentTools:()=>W4,createAgentTeamsTools:()=>Y2,createAgentTeam:()=>pJ,buildTeamProgressSummary:()=>J4,buildDelegatedAgentConfig:()=>J2,buildConfiguredAgentToolName:()=>k5,buildConfiguredAgentToolDescriptors:()=>I5,bootstrapAgentTeams:()=>D8,AgentTeamsRuntime:()=>k2,AgentTeam:()=>j4});import{existsSync as zP,readdirSync as TP,readFileSync as OP}from"node:fs";import{basename as rF,extname as qP,join as MP}from"node:path";import{resolveAgentConfigSearchPaths as RP}from"@cline/shared/storage";import nF from"yaml";import{z as N0}from"zod";var aF=N0.object({name:N0.string().trim().min(1),description:N0.string().trim().min(1),tools:N0.union([N0.string(),N0.array(N0.string())]).optional(),skills:N0.union([N0.string(),N0.array(N0.string())]).optional(),providerId:N0.string().trim().min(1).optional(),modelId:N0.string().trim().min(1).optional(),maxIterations:N0.number().int().positive().optional()});function EP($){let Z=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!Z)throw Error("Missing YAML frontmatter block in agent config file.");let Q=Z[0].length,W=/^---[^\S\r\n]*(?:\r?\n|$)/gm;W.lastIndex=Q;let J,X=Array.from($.matchAll(W)).filter((Y)=>Y.index>=Q);for(let Y of X){let j=Y.index,V=$.slice(Q,j);try{let H=nF.parse(V);if(!H||typeof H!=="object"||Array.isArray(H))continue;aF.parse(H);let B=$.slice(j+Y[0].length);J={frontmatter:V,body:B}}catch{}}if(J)return J;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function iF($){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 NP($){return $.trim().toLowerCase()}function CP($){let Z=qP($).toLowerCase();return Z===".yml"||Z===".yaml"}function h5($,Z={}){let{frontmatter:Q,body:W}=EP($),J=nF.parse(Q);if(!J||typeof J!=="object"||Array.isArray(J))throw Error("Agent config frontmatter must be a YAML mapping.");let X=aF.parse(J),Y=W.trim();if(!Y)throw Error("Missing system prompt body in agent config file.");return{name:X.name,description:X.description,tools:iF(X.tools),skills:iF(X.skills),providerId:X.providerId,modelId:X.modelId,maxIterations:X.maxIterations,systemPrompt:Y,path:Z.path}}function Q4($){let Z=$.searchPaths??RP($.workspaceRoot),Q=new Map,W=[];for(let X of Z.filter(Boolean)){if(!zP(X))continue;let Y;try{Y=TP(X,{withFileTypes:!0})}catch(j){W.push({path:X,error:j instanceof Error?j:Error(String(j))});continue}for(let j of Y){if(!j.isFile()||!CP(j.name))continue;let V=MP(X,j.name);try{let H=OP(V,"utf8"),B=h5(H,{path:V}),G=NP(B.name);if(!Q.has(G))Q.set(G,B)}catch(H){W.push({path:V,error:H instanceof Error?H:Error(String(H))})}}}return{configs:Array.from(Q.values()).sort((X,Y)=>(X.path?rF(X.path):X.name).localeCompare(Y.path?rF(Y.path):Y.name)),errors:W}}import{createTool as wP,zodToJsonSchema as PP}from"@cline/shared";import{z as sF}from"zod";var dJ="subagent_",cQ=64,SP=sF.object({prompt:sF.string().trim().min(1).describe("Task for the subagent to perform")});function bP($){let Z="",Q=!0;for(let W of $.trim().toLowerCase()){let J=W.charCodeAt(0);if(!(J>=97&&J<=122||J>=48&&J<=57||W==="_")||W==="_"){if(!Q)Z+="_",Q=!0;continue}Z+=W,Q=!1}return Q?Z.slice(0,-1):Z}function yP($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z^=$.charCodeAt(Q),Z=Math.imul(Z,16777619);return(Z>>>0).toString(36)}function k5($){let Z=bP($)||"agent",Q=yP($).slice(0,6),W=`${dJ}${Z}`;if(W.length<=cQ)return W;let J=cQ-dJ.length-Q.length-1,X=Z.slice(0,Math.max(1,J));return`${dJ}${X}_${Q}`.slice(0,cQ)}function I5($){let Z=new Set,Q=[];for(let W of[...$].sort((J,X)=>J.name.localeCompare(X.name))){let J=k5(W.name),X=J,Y=2;while(Z.has(X)){let j=`_${Y++}`,V=Math.max(1,cQ-j.length);X=`${J.slice(0,V)}${j}`}Z.add(X),Q.push({toolName:X,config:W})}return Q}function hP($,Z){return{...$,providerId:Z.providerId??$.providerId,modelId:Z.modelId??$.modelId,maxIterations:Z.maxIterations??$.maxIterations}}function W4($){return I5($.agents).map(({toolName:Z,config:Q})=>{return wP({name:Z,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:PP(SP),execute:async(J,X)=>{let Y=$.configProvider.getRuntimeConfig(),j=D$(hP(Y,Q)),V=$.createSubAgentTools?await $.createSubAgentTools(Q,J,X):[],H=L$({kind:"subagent",prompt:Q.systemPrompt,configProvider:j,tools:V,maxIterations:Q.maxIterations,parentAgentId:X.agentId,abortSignal:X.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),B=H.getAgentId(),G=H.getConversationId(),K=X.agentId,F={systemPrompt:Q.systemPrompt,task:J.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:B,conversationId:G,parentAgentId:K,input:F})}catch{}try{let A=await H.run(J.prompt),L={text:A.text,iterations:A.iterations,finishReason:A.finishReason,usage:{inputTokens:A.usage.inputTokens,outputTokens:A.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:B,conversationId:G,parentAgentId:K,input:F,result:L,agentResult:A})}catch{}return L}catch(A){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:B,conversationId:G,parentAgentId:K,input:F,error:A instanceof Error?A:Error(String(A))})}catch{}throw A}},timeoutMs:300000,retryable:!1})})}function _1(){return new Date().toISOString()}function oF($,Z){if(Z<=0)return 0;return Math.round($/Z*100)}function kP($,Z){let Q=new Set;for(let J of Z)if(J.status==="reviewed")Q.add(`${J.outcomeId}:${J.section}`);let W=new Set;for(let J of $){if(J.status==="finalized")continue;for(let X of J.requiredSections)if(!Q.has(`${J.id}:${X}`))W.add(`${J.id}:${X}`)}return[...W].sort((J,X)=>J.localeCompare(X))}function J4($,Z){let Q={idle:0,running:0,stopped:0},W={pending:0,in_progress:0,blocked:0,completed:0},J={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},X={draft:0,in_review:0,finalized:0},Y={draft:0,reviewed:0,rejected:0},j=0,V=0;for(let f of Z.members)if(Q[f.status]+=1,f.role==="lead")j+=1;else V+=1;let H=[],B=[],G=Z.tasks.filter((f)=>f.status==="completed").length,K=new Map(Z.tasks.map((f)=>[f.id,f]));for(let f of Z.tasks){if(W[f.status]+=1,f.status==="blocked"){H.push(f.id);continue}if(f.status!=="pending")continue;if(f.dependsOn.every((U)=>{return K.get(U)?.status==="completed"}))B.push(f.id)}let F=[],A,L=0;for(let f of Z.runs){if(J[f.status]+=1,f.status==="queued"||f.status==="running")F.push(f.id);let D=f.startedAt.getTime();if(D>=L)L=D,A=f.id}for(let f of Z.outcomes)X[f.status]+=1;for(let f of Z.outcomeFragments)Y[f.status]+=1;return{teamName:$,updatedAt:_1(),members:{total:Z.members.length,byStatus:Q,leadCount:j,teammateCount:V},tasks:{total:Z.tasks.length,byStatus:W,blockedTaskIds:H,readyTaskIds:B,completionPct:oF(G,Z.tasks.length)},runs:{total:Z.runs.length,byStatus:J,activeRunIds:F,latestRunId:A},outcomes:{total:Z.outcomes.length,byStatus:X,finalizedPct:oF(X.finalized,Z.outcomes.length),missingRequiredSections:kP(Z.outcomes,Z.outcomeFragments)},fragments:{total:Z.outcomeFragments.length,byStatus:Y}}}function X4($){let{event:Z}=$;switch(Z.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),taskId:Z.task.id,agentId:Z.task.assignee??Z.task.createdBy};case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),outcomeId:Z.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),outcomeId:Z.fragment.outcomeId,fragmentId:Z.fragment.id,agentId:Z.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),taskId:Z.message.taskId,agentId:Z.message.fromAgentId,message:Z.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),taskId:Z.entry.taskId,agentId:Z.entry.agentId,message:Z.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),agentId:Z.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1()}}import{sanitizeFileName as IP,TeamMessageType as I}from"@cline/shared";import{nanoid as xP}from"nanoid";import{TeamMessageType as ai}from"@cline/shared";function lJ($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function tF($,Z){return $?.status==="stopped"&&lJ(Z)}var gP=600000,eF="recovered_queued";function mP($){return`This is an automatic recovery of interrupted team run ${$.id}. The previous process stopped before completion. Continue the task safely, inspect the current workspace state before making changes, and avoid duplicating completed work.
|
|
517
517
|
|
|
518
518
|
${$.message}`}class j4{agents=new Map;configs=new Map;onTeamEvent;constructor($,Z){if(this.onTeamEvent=Z,$)for(let[Q,W]of Object.entries($))this.addAgent(Q,W)}addAgent($,Z){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let Q={...Z,onEvent:(J)=>{Z.onEvent?.(J),this.emitEvent({type:I.AgentEvent,agentId:$,event:J})}},W=new U$(Q);if(Q.onEvent)W.subscribeEvents(Q.onEvent);this.agents.set($,W),this.configs.set($,Z)}removeAgent($){return this.configs.delete($),this.agents.delete($)}getAgent($){return this.agents.get($)}getAgentIds(){return Array.from(this.agents.keys())}get size(){return this.agents.size}async routeTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:I.TaskStart,agentId:$,message:Z});try{let W=await Q.run(Z);return this.emitEvent({type:I.TaskEnd,agentId:$,result:W}),W}catch(W){let J=W instanceof Error?W:Error(String(W));throw this.emitEvent({type:I.TaskEnd,agentId:$,error:J,messages:Q.getMessages()}),W}}async continueTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:I.TaskStart,agentId:$,message:Z});try{let W=await Q.continue(Z);return this.emitEvent({type:I.TaskEnd,agentId:$,result:W}),W}catch(W){let J=W instanceof Error?W:Error(String(W));throw this.emitEvent({type:I.TaskEnd,agentId:$,error:J,messages:Q.getMessages()}),W}}async runParallel($){let Z=$.map(async(Q)=>{let W=this.agents.get(Q.agentId);if(!W)return{agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata};this.emitEvent({type:I.TaskStart,agentId:Q.agentId,message:Q.message});try{let J=await W.run(Q.message);return this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,result:J}),{agentId:Q.agentId,result:J,metadata:Q.metadata}}catch(J){let X=J instanceof Error?J:Error(String(J));return this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,error:X,messages:W.getMessages()}),{agentId:Q.agentId,result:void 0,error:X,metadata:Q.metadata}}});return Promise.all(Z)}async runSequential($){let Z=[];for(let Q of $){let W=this.agents.get(Q.agentId);if(!W){Z.push({agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata});continue}this.emitEvent({type:I.TaskStart,agentId:Q.agentId,message:Q.message});try{let J=await W.run(Q.message);this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,result:J}),Z.push({agentId:Q.agentId,result:J,metadata:Q.metadata})}catch(J){let X=J instanceof Error?J:Error(String(J));this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,error:X,messages:W.getMessages()}),Z.push({agentId:Q.agentId,result:void 0,error:X,metadata:Q.metadata})}}return Z}async runPipeline($,Z,Q){let W=[],J=Z;for(let X of $){let Y=this.agents.get(X);if(!Y){W.push({agentId:X,result:void 0,error:Error(`Agent "${X}" not found in team`)});break}this.emitEvent({type:I.TaskStart,agentId:X,message:J});try{let j=await Y.run(J);this.emitEvent({type:I.TaskEnd,agentId:X,result:j}),W.push({agentId:X,result:j});let V=$.indexOf(X)+1;if(V<$.length){let H=$[V];J=Q?Q(j,H):`Previous agent output:
|
|
519
519
|
${j.text}
|
|
520
520
|
|
|
521
|
-
Please continue from here.`}}catch(j){let V=j instanceof Error?j:Error(String(j));this.emitEvent({type:I.TaskEnd,agentId:X,error:V,messages:Y.getMessages()}),W.push({agentId:X,result:void 0,error:V});break}}return W}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function pJ($,Z){return new j4($,Z)}function
|
|
521
|
+
Please continue from here.`}}catch(j){let V=j instanceof Error?j:Error(String(j));this.emitEvent({type:I.TaskEnd,agentId:X,error:V,messages:Y.getMessages()}),W.push({agentId:X,result:void 0,error:V});break}}return W}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function pJ($,Z){return new j4($,Z)}function ZA($){let Z=pJ({worker:$.worker,reviewer:$.reviewer}),Q=Z;return Q.doAndReview=async(W)=>{let J=await Z.routeTo("worker",W),X=await Z.routeTo("reviewer",`Please review this work:
|
|
522
522
|
|
|
523
|
-
${J.text}`);return{workerResult:J,reviewResult:X}},Q}class
|
|
523
|
+
${J.text}`);return{workerResult:J,reviewResult:X}},Q}class k2{teamId;teamName;onTeamEvent;members=new Map;tasks=new Map;missionLog=[];mailbox=[];missionStepCounter=0;taskCounter=0;messageCounter=0;missionCounter=0;runCounter=0;outcomeCounter=0;outcomeFragmentCounter=0;runs=new Map;runQueue=[];queuedRunDispatchTimer;outcomes=new Map;outcomeFragments=new Map;missionLogIntervalSteps;missionLogIntervalMs;maxConcurrentRuns;constructor($){this.teamName=$.teamName,this.teamId=`t_${IP(xP(10))}`,this.onTeamEvent=$.onTeamEvent,this.missionLogIntervalSteps=Math.max(1,$.missionLogIntervalSteps??3),this.missionLogIntervalMs=Math.max(1000,$.missionLogIntervalMs??120000),this.maxConcurrentRuns=Math.max(1,$.maxConcurrentRuns??2);let Z=$.leadAgentId??"lead";this.members.set(Z,{agentId:Z,role:"lead",status:"idle",runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()})}getTeamId(){return this.teamId}getTeamName(){return this.teamName}getMemberRole($){return this.members.get($)?.role}getMemberIds(){return Array.from(this.members.keys())}getTeammateIds(){return Array.from(this.members.values()).filter(($)=>$.role==="teammate").map(($)=>$.agentId)}getTask($){return this.tasks.get($)}listTasks(){return Array.from(this.tasks.values())}listTaskItems($){return Array.from(this.tasks.values()).map((Z)=>{let Q=this.getUnresolvedDependencies(Z);return{...Z,blockedBy:Q,isReady:Z.status==="pending"&&!Z.assignee&&Q.length===0}}).filter((Z)=>{if($?.status&&Z.status!==$.status)return!1;if($?.assignee&&Z.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,Z){let Q=Z?.unreadOnly??!0,W=Z?.markRead??!0,J=Z?.limit,X=this.mailbox.filter((j)=>j.toAgentId===$&&(!Q||!j.readAt)),Y=typeof J==="number"&&J>0?X.slice(Math.max(0,X.length-J)):X;if(W){let j=new Date;for(let V of Y)if(!V.readAt)V.readAt=j}return Y.map((j)=>({...j}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let Q of this.tasks.values())$[Q.status]++;let Z={draft:0,in_review:0,finalized:0};for(let Q of this.outcomes.values())Z[Q.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((Q)=>({agentId:Q.agentId,role:Q.role,description:Q.description,status:Q.status})),taskCounts:$,unreadMessages:this.mailbox.filter((Q)=>!Q.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").length,outcomeCounts:Z}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map(($)=>({agentId:$.agentId,role:$.role,description:$.description,status:$.status})),tasks:Array.from(this.tasks.values()).map(($)=>({...$})),mailbox:this.mailbox.map(($)=>({...$})),missionLog:this.missionLog.map(($)=>({...$})),runs:Array.from(this.runs.values()).map(($)=>({...$})),outcomes:Array.from(this.outcomes.values()).map(($)=>({...$})),outcomeFragments:Array.from(this.outcomeFragments.values()).map(($)=>({...$}))}}hydrateState($){this.clearQueuedRunDispatchTimer(),this.tasks.clear();for(let Q of $.tasks)this.tasks.set(Q.id,{...Q});this.mailbox.length=0,this.mailbox.push(...$.mailbox.map((Q)=>({...Q}))),this.missionLog.length=0,this.missionLog.push(...$.missionLog.map((Q)=>({...Q}))),this.runs.clear();for(let Q of $.runs??[])this.runs.set(Q.id,{...Q});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").map((Q)=>Q.id)),this.outcomes.clear();for(let Q of $.outcomes??[])this.outcomes.set(Q.id,{...Q});this.outcomeFragments.clear();for(let Q of $.outcomeFragments??[])this.outcomeFragments.set(Q.id,{...Q});let Z=Array.from(this.members.values()).filter((Q)=>Q.role==="lead");this.members.clear();for(let Q of Z)this.members.set(Q.agentId,{...Q,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let Q of $.members){if(Q.role!=="teammate")continue;this.members.set(Q.agentId,{agentId:Q.agentId,role:"teammate",description:Q.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,Y4($.tasks.map((Q)=>Q.id),"task_")),this.messageCounter=Math.max(this.messageCounter,Y4($.mailbox.map((Q)=>Q.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,Y4($.missionLog.map((Q)=>Q.id),"log_")),this.runCounter=Math.max(this.runCounter,Y4(($.runs??[]).map((Q)=>Q.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,Y4(($.outcomes??[]).map((Q)=>Q.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,Y4(($.outcomeFragments??[]).map((Q)=>Q.id),"frag_"))}isTeammateActive($){let Z=this.members.get($);return!!Z&&Z.role==="teammate"&&!!Z.agent}spawnTeammate({agentId:$,config:Z}){let Q=this.members.get($);if(Q&&Q.role!=="teammate")throw Error(`Team member "${$}" already exists and is not a teammate`);if(Q&&Q.runningCount>0)throw Error(`Teammate "${$}" is currently running and cannot be respawned`);let W={...Z,apiTimeoutMs:gP,consumePendingUserMessage:()=>{let Y=this.members.get($);if(!Y||!Y.pendingSteerMessage)return;let j=Y.pendingSteerMessage;return Y.pendingSteerMessage=void 0,j},onEvent:(Y)=>{Z.onEvent?.(Y),this.emitEvent({type:I.AgentEvent,agentId:$,event:Y}),this.trackMeaningfulEvent($,Y)}},J=new U$(W);if(W.onEvent)J.subscribeEvents(W.onEvent);let X={agentId:$,role:"teammate",description:Z.role,status:"idle",agent:J,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,X),this.emitEvent({type:I.TeammateSpawned,agentId:$,role:Z.role,teammate:{rolePrompt:Z.systemPrompt,modelId:Z.modelId,maxIterations:Z.maxIterations,runtimeAgentId:J.getAgentId(),conversationId:J.getConversationId(),parentAgentId:null}}),{agentId:X.agentId,role:X.role,description:X.description,status:X.status}}shutdownTeammate($,Z){let Q=this.members.get($);if(!Q||Q.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{Q.agent?.abort()}catch(W){if(!lJ(W))throw W}Q.status="stopped",this.emitEvent({type:I.TeammateShutdown,agentId:$,reason:Z})}updateTeammateConnections($){for(let Z of this.members.values()){if(Z.role!=="teammate"||!Z.agent)continue;Z.agent.updateConnection($)}}createTask($){let Z=`task_${String(++this.taskCounter).padStart(4,"0")}`,Q=new Date,W={id:Z,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:Q,updatedAt:Q,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(Z,W),this.emitEvent({type:I.TeamTaskUpdated,task:{...W}}),{...W}}claimTask($,Z){let Q=this.requireTask($);return this.assertDependenciesResolved(Q),Q.status="in_progress",Q.assignee=Z,Q.updatedAt=new Date,this.emitEvent({type:I.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"progress",summary:`Claimed task "${Q.title}"`}),{...Q}}blockTask($,Z,Q){let W=this.requireTask($);return W.status="blocked",W.updatedAt=new Date,W.summary=Q,this.emitEvent({type:I.TeamTaskUpdated,task:{...W}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"blocked",summary:Q}),{...W}}completeTask($,Z,Q){let W=this.requireTask($);if(W.status="completed",W.updatedAt=new Date,W.summary=Q,!W.assignee)W.assignee=Z;return this.emitEvent({type:I.TeamTaskUpdated,task:{...W}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"done",summary:Q}),{...W}}async routeToTeammate($,Z,Q){let W=this.members.get($);if(!W||W.role!=="teammate"||!W.agent)throw Error(`Teammate "${$}" was not found`);if(!W.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");W.runningCount++,W.status="running",this.emitEvent({type:I.TaskStart,agentId:$,message:Z});try{let J=this.listMailbox($,{unreadOnly:!0,markRead:!0}),X=J.length>0?`${this.buildMailboxNotification(J)}
|
|
524
524
|
|
|
525
|
-
${Z}`:Z,Y=Q?.continueConversation?await W.agent.continue(X):await W.agent.run(X);return this.emitEvent({type:I.TaskEnd,agentId:$,result:Y}),this.recordProgressStep($,`Completed a delegated run (${Y.iterations} iterations)`,Q?.taskId,!0),Y}catch(J){let X=J instanceof Error?J:Error(String(J));if(this.emitEvent({type:I.TaskEnd,agentId:$,error:X,messages:W.agent.getMessages()}),!sF(W,X))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:X.message});throw X}finally{if(W.runningCount--,W.runningCount<=0&&this.members.get($)?.status!=="stopped")W.status="idle"}}startTeammateRun($,Z,Q){let W=`run_${String(++this.runCounter).padStart(5,"0")}`,J={id:W,agentId:$,taskId:Q?.taskId,status:"queued",message:Z,priority:Q?.priority??0,retryCount:0,maxRetries:Math.max(0,Q?.maxRetries??0),continueConversation:Q?.continueConversation,startedAt:new Date(0),leaseOwner:Q?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(W,J),this.runQueue.push(W),this.emitEvent({type:I.RunQueued,run:{...J}}),this.dispatchQueuedRuns(),{...J}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let Z=this.selectNextDispatchableQueuedRun();$=Z.nextDelayedAttemptAt;let Q=Z.index;if(Q<0){this.scheduleQueuedRunDispatch($);return}let[W]=this.runQueue.splice(Q,1),J=W?this.runs.get(W):void 0;if(!J||J.status!=="queued")continue;this.executeQueuedRun(J)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,Z=Number.NEGATIVE_INFINITY,Q,W=Date.now();for(let J=0;J<this.runQueue.length;J++){let X=this.runs.get(this.runQueue[J]);if(!X||X.status!=="queued")continue;if(X.nextAttemptAt&&X.nextAttemptAt.getTime()>W){if(!Q||X.nextAttemptAt<Q)Q=X.nextAttemptAt;continue}if(X.priority>Z)Z=X.priority,$=J}return{index:$,nextDelayedAttemptAt:Q}}scheduleQueuedRunDispatch($){if(!$)return;let Z=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},Z)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let Z of this.runs.values())if(Z.status==="running")$++;return $}async executeQueuedRun($){let Z=$.currentActivity===oF;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:I.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let W=Z?kP($):$.message,J=await this.routeToTeammate($.agentId,W,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=J,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:I.RunCompleted,run:{...$}})}catch(W){let J=W instanceof Error?W.message:String(W??"Unknown error");$.error=J,$.endedAt=new Date;let X=this.members.get($.agentId);if(sF(X,W))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:I.RunCancelled,run:{...$},reason:J});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:I.RunFailed,run:{...$}})}finally{clearInterval(Q),this.dispatchQueuedRuns()}}listRuns($){let Z=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Q)=>{if(!Z&&!["running","queued"].includes(Q.status))return!1;if($?.status&&Q.status!==$.status)return!1;if($?.agentId&&Q.agentId!==$.agentId)return!1;return!0}).map((Q)=>({...Q}))}getRun($){let Z=this.runs.get($);return Z?{...Z}:void 0}async awaitRun($,Z=250){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);while(Q.status==="queued"||Q.status==="running")await tF(Z);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((Z)=>["queued","running"].includes(Z.status)))await tF($);return this.listRuns()}cancelRun($,Z){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);if(Q.status==="completed"||Q.status==="failed")return{...Q};Q.status="cancelled",Q.error=Z,Q.endedAt=new Date,Q.currentActivity="cancelled";let W=this.runQueue.indexOf($);if(W>=0)this.runQueue.splice(W,1);return this.emitEvent({type:I.RunCancelled,run:{...Q},reason:Z}),{...Q}}recoverActiveRuns($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;let W=this.members.get(Q.agentId);if(!W||W.role!=="teammate"||!W.agent){Q.status="interrupted",Q.error="teammate_unavailable_after_recovery",Q.endedAt=new Date,Q.currentActivity="interrupted",this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:Q.error});continue}let J=new Date;if(Q.status="queued",Q.error=void 0,Q.endedAt=void 0,Q.heartbeatAt=J,Q.lastProgressAt=J,Q.lastProgressMessage=$,Q.currentActivity=oF,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);Z.push({...Q}),this.emitEvent({type:I.RunQueued,run:{...Q}})}return this.dispatchQueuedRuns(),Z}markStaleRunsInterrupted($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;Q.status="interrupted",Q.error=$,Q.endedAt=new Date,Q.currentActivity="interrupted",Z.push({...Q}),this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),Z}sendMessage($,Z,Q,W,J){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let X=this.members.get(Z);if(!X)throw Error(`Unknown recipient "${Z}"`);let Y={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:Z,subject:Q,body:W,taskId:J,sentAt:new Date};if(this.mailbox.push(Y),this.emitEvent({type:I.TeamMessage,message:{...Y}}),X.role==="teammate"&&X.runningCount>0&&X.agent)X.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Q}". Use the team_read_mailbox tool to read it at your convenience.`;return{...Y}}broadcast($,Z,Q,W){let J=[];for(let X of this.members.values()){if(X.agentId===$)continue;if(X.role==="lead")continue;J.push(this.sendMessage($,X.agentId,Z,Q,W?.taskId))}return J}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let Z={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:$.agentId,taskId:$.taskId,kind:$.kind,summary:$.summary,evidence:$.evidence,nextAction:$.nextAction};this.missionLog.push(Z);let Q=this.members.get($.agentId);if(Q)Q.lastMissionAt=Date.now(),Q.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:I.TeamMissionLog,entry:{...Z}}),{...Z}}createOutcome($){let Z={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:$.title,status:"draft",requiredSections:[...new Set($.requiredSections)],createdBy:$.createdBy,createdAt:new Date};return this.outcomes.set(Z.id,Z),this.emitEvent({type:I.OutcomeCreated,outcome:{...Z}}),{...Z}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let Z=this.outcomes.get($.outcomeId);if(!Z)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!Z.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Q={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(Q.id,Q),Z.status==="draft")Z.status="in_review";return this.emitEvent({type:I.OutcomeFragmentAttached,fragment:{...Q}}),{...Q}}reviewOutcomeFragment($){let Z=this.outcomeFragments.get($.fragmentId);if(!Z)throw Error(`Fragment "${$.fragmentId}" was not found`);return Z.status=$.approved?"reviewed":"rejected",Z.reviewedBy=$.reviewedBy,Z.reviewedAt=new Date,this.emitEvent({type:I.OutcomeFragmentReviewed,fragment:{...Z}}),{...Z}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((Z)=>Z.outcomeId===$).map((Z)=>({...Z}))}finalizeOutcome($){let Z=this.outcomes.get($);if(!Z)throw Error(`Outcome "${$}" was not found`);let Q=this.listOutcomeFragments($);for(let W of Z.requiredSections)if(!Q.some((X)=>X.section===W&&X.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${W}" is missing a reviewed fragment.`);return Z.status="finalized",Z.finalizedAt=new Date,this.emitEvent({type:I.OutcomeFinalized,outcome:{...Z}}),{...Z}}cleanup(){for(let $ of this.members.values())if($.role==="teammate"&&$.runningCount>0)throw Error(`Cannot cleanup team while teammate "${$.agentId}" is still running`);if(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let $ of this.members.values())if($.role==="teammate")try{$.agent?.abort()}catch(Z){if(!lJ(Z))throw Z}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[$,Z]of this.members.entries())if(Z.role==="teammate")this.members.delete($)}requireTask($){let Z=this.tasks.get($);if(!Z)throw Error(`Task "${$}" was not found`);return Z}assertDependenciesResolved($){let Z=this.getUnresolvedDependencies($);if(Z.length>0)throw Error(`Task "${$.id}" is blocked by "${Z[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((Z)=>{let Q=this.tasks.get(Z);return!Q||Q.status!=="completed"})}trackMeaningfulEvent($,Z){if(this.recordRunActivityFromAgentEvent($,Z),Z.type==="iteration_end"&&Z.hadToolCalls){this.recordProgressStep($,`Completed iteration ${Z.iteration} with ${Z.toolCallCount} tool call(s)`);return}if(Z.type==="content_end"&&Z.contentType==="tool"&&!Z.error){this.recordProgressStep($,`Finished tool "${Z.toolName??"unknown"}"`);return}if(Z.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${Z.iterations} iterations)`});return}if(Z.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:Z.error.message})}recordRunActivityFromAgentEvent($,Z){let Q;switch(Z.type){case"iteration_start":Q=`iteration_${Z.iteration}_started`;break;case"content_start":if(Z.contentType==="tool")Q=`running_tool_${Z.toolName??"unknown"}`;break;case"content_end":if(Z.contentType==="tool")Q=Z.error?this.formatProgressErrorActivity(`tool_${Z.toolName??"unknown"}_error`,Z.error):`finished_tool_${Z.toolName??"unknown"}`;break;case"done":Q="finalizing_response";break;case"error":Q=this.formatProgressErrorActivity("run_error",Z.error.message);break;default:break}if(!Q)return;for(let W of this.runs.values()){if(W.agentId!==$||W.status!=="running")continue;this.recordRunProgress(W,Q)}}recordRunProgress($,Z){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=Z,$.currentActivity=Z,this.emitEvent({type:I.RunProgress,run:{...$},message:Z})}formatProgressErrorActivity($,Z){let Q=Z.replace(/\s+/g," ").trim();if(Q.length===0)return $;let W=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${W}`}recordProgressStep($,Z,Q,W=!1){this.missionStepCounter++;let J=this.members.get($);if(!J)return;let X=this.missionStepCounter-J.lastMissionStep,Y=Date.now()-J.lastMissionAt;if(!W&&X<this.missionLogIntervalSteps&&Y<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Q,kind:"progress",summary:Z})}buildMailboxNotification($){if($.length===0)return"";let Z=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Q of $)Z.push(`--- Message from ${Q.fromAgentId} | subject: ${Q.subject} ---`),Z.push(Q.body);return Z.push("---"),Z.join(`
|
|
526
|
-
`)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function
|
|
525
|
+
${Z}`:Z,Y=Q?.continueConversation?await W.agent.continue(X):await W.agent.run(X);return this.emitEvent({type:I.TaskEnd,agentId:$,result:Y}),this.recordProgressStep($,`Completed a delegated run (${Y.iterations} iterations)`,Q?.taskId,!0),Y}catch(J){let X=J instanceof Error?J:Error(String(J));if(this.emitEvent({type:I.TaskEnd,agentId:$,error:X,messages:W.agent.getMessages()}),!tF(W,X))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:X.message});throw X}finally{if(W.runningCount--,W.runningCount<=0&&this.members.get($)?.status!=="stopped")W.status="idle"}}startTeammateRun($,Z,Q){let W=`run_${String(++this.runCounter).padStart(5,"0")}`,J={id:W,agentId:$,taskId:Q?.taskId,status:"queued",message:Z,priority:Q?.priority??0,retryCount:0,maxRetries:Math.max(0,Q?.maxRetries??0),continueConversation:Q?.continueConversation,startedAt:new Date(0),leaseOwner:Q?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(W,J),this.runQueue.push(W),this.emitEvent({type:I.RunQueued,run:{...J}}),this.dispatchQueuedRuns(),{...J}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let Z=this.selectNextDispatchableQueuedRun();$=Z.nextDelayedAttemptAt;let Q=Z.index;if(Q<0){this.scheduleQueuedRunDispatch($);return}let[W]=this.runQueue.splice(Q,1),J=W?this.runs.get(W):void 0;if(!J||J.status!=="queued")continue;this.executeQueuedRun(J)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,Z=Number.NEGATIVE_INFINITY,Q,W=Date.now();for(let J=0;J<this.runQueue.length;J++){let X=this.runs.get(this.runQueue[J]);if(!X||X.status!=="queued")continue;if(X.nextAttemptAt&&X.nextAttemptAt.getTime()>W){if(!Q||X.nextAttemptAt<Q)Q=X.nextAttemptAt;continue}if(X.priority>Z)Z=X.priority,$=J}return{index:$,nextDelayedAttemptAt:Q}}scheduleQueuedRunDispatch($){if(!$)return;let Z=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},Z)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let Z of this.runs.values())if(Z.status==="running")$++;return $}async executeQueuedRun($){let Z=$.currentActivity===eF;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:I.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let W=Z?mP($):$.message,J=await this.routeToTeammate($.agentId,W,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=J,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:I.RunCompleted,run:{...$}})}catch(W){let J=W instanceof Error?W.message:String(W??"Unknown error");$.error=J,$.endedAt=new Date;let X=this.members.get($.agentId);if(tF(X,W))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:I.RunCancelled,run:{...$},reason:J});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:I.RunFailed,run:{...$}})}finally{clearInterval(Q),this.dispatchQueuedRuns()}}listRuns($){let Z=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Q)=>{if(!Z&&!["running","queued"].includes(Q.status))return!1;if($?.status&&Q.status!==$.status)return!1;if($?.agentId&&Q.agentId!==$.agentId)return!1;return!0}).map((Q)=>({...Q}))}getRun($){let Z=this.runs.get($);return Z?{...Z}:void 0}async awaitRun($,Z=250){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);while(Q.status==="queued"||Q.status==="running")await $A(Z);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((Z)=>["queued","running"].includes(Z.status)))await $A($);return this.listRuns()}cancelRun($,Z){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);if(Q.status==="completed"||Q.status==="failed")return{...Q};Q.status="cancelled",Q.error=Z,Q.endedAt=new Date,Q.currentActivity="cancelled";let W=this.runQueue.indexOf($);if(W>=0)this.runQueue.splice(W,1);return this.emitEvent({type:I.RunCancelled,run:{...Q},reason:Z}),{...Q}}recoverActiveRuns($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;let W=this.members.get(Q.agentId);if(!W||W.role!=="teammate"||!W.agent){Q.status="interrupted",Q.error="teammate_unavailable_after_recovery",Q.endedAt=new Date,Q.currentActivity="interrupted",this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:Q.error});continue}let J=new Date;if(Q.status="queued",Q.error=void 0,Q.endedAt=void 0,Q.heartbeatAt=J,Q.lastProgressAt=J,Q.lastProgressMessage=$,Q.currentActivity=eF,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);Z.push({...Q}),this.emitEvent({type:I.RunQueued,run:{...Q}})}return this.dispatchQueuedRuns(),Z}markStaleRunsInterrupted($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;Q.status="interrupted",Q.error=$,Q.endedAt=new Date,Q.currentActivity="interrupted",Z.push({...Q}),this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),Z}sendMessage($,Z,Q,W,J){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let X=this.members.get(Z);if(!X)throw Error(`Unknown recipient "${Z}"`);let Y={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:Z,subject:Q,body:W,taskId:J,sentAt:new Date};if(this.mailbox.push(Y),this.emitEvent({type:I.TeamMessage,message:{...Y}}),X.role==="teammate"&&X.runningCount>0&&X.agent)X.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Q}". Use the team_read_mailbox tool to read it at your convenience.`;return{...Y}}broadcast($,Z,Q,W){let J=[];for(let X of this.members.values()){if(X.agentId===$)continue;if(X.role==="lead")continue;J.push(this.sendMessage($,X.agentId,Z,Q,W?.taskId))}return J}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let Z={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:$.agentId,taskId:$.taskId,kind:$.kind,summary:$.summary,evidence:$.evidence,nextAction:$.nextAction};this.missionLog.push(Z);let Q=this.members.get($.agentId);if(Q)Q.lastMissionAt=Date.now(),Q.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:I.TeamMissionLog,entry:{...Z}}),{...Z}}createOutcome($){let Z={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:$.title,status:"draft",requiredSections:[...new Set($.requiredSections)],createdBy:$.createdBy,createdAt:new Date};return this.outcomes.set(Z.id,Z),this.emitEvent({type:I.OutcomeCreated,outcome:{...Z}}),{...Z}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let Z=this.outcomes.get($.outcomeId);if(!Z)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!Z.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Q={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(Q.id,Q),Z.status==="draft")Z.status="in_review";return this.emitEvent({type:I.OutcomeFragmentAttached,fragment:{...Q}}),{...Q}}reviewOutcomeFragment($){let Z=this.outcomeFragments.get($.fragmentId);if(!Z)throw Error(`Fragment "${$.fragmentId}" was not found`);return Z.status=$.approved?"reviewed":"rejected",Z.reviewedBy=$.reviewedBy,Z.reviewedAt=new Date,this.emitEvent({type:I.OutcomeFragmentReviewed,fragment:{...Z}}),{...Z}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((Z)=>Z.outcomeId===$).map((Z)=>({...Z}))}finalizeOutcome($){let Z=this.outcomes.get($);if(!Z)throw Error(`Outcome "${$}" was not found`);let Q=this.listOutcomeFragments($);for(let W of Z.requiredSections)if(!Q.some((X)=>X.section===W&&X.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${W}" is missing a reviewed fragment.`);return Z.status="finalized",Z.finalizedAt=new Date,this.emitEvent({type:I.OutcomeFinalized,outcome:{...Z}}),{...Z}}cleanup(){for(let $ of this.members.values())if($.role==="teammate"&&$.runningCount>0)throw Error(`Cannot cleanup team while teammate "${$.agentId}" is still running`);if(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let $ of this.members.values())if($.role==="teammate")try{$.agent?.abort()}catch(Z){if(!lJ(Z))throw Z}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[$,Z]of this.members.entries())if(Z.role==="teammate")this.members.delete($)}requireTask($){let Z=this.tasks.get($);if(!Z)throw Error(`Task "${$}" was not found`);return Z}assertDependenciesResolved($){let Z=this.getUnresolvedDependencies($);if(Z.length>0)throw Error(`Task "${$.id}" is blocked by "${Z[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((Z)=>{let Q=this.tasks.get(Z);return!Q||Q.status!=="completed"})}trackMeaningfulEvent($,Z){if(this.recordRunActivityFromAgentEvent($,Z),Z.type==="iteration_end"&&Z.hadToolCalls){this.recordProgressStep($,`Completed iteration ${Z.iteration} with ${Z.toolCallCount} tool call(s)`);return}if(Z.type==="content_end"&&Z.contentType==="tool"&&!Z.error){this.recordProgressStep($,`Finished tool "${Z.toolName??"unknown"}"`);return}if(Z.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${Z.iterations} iterations)`});return}if(Z.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:Z.error.message})}recordRunActivityFromAgentEvent($,Z){let Q;switch(Z.type){case"iteration_start":Q=`iteration_${Z.iteration}_started`;break;case"content_start":if(Z.contentType==="tool")Q=`running_tool_${Z.toolName??"unknown"}`;break;case"content_end":if(Z.contentType==="tool")Q=Z.error?this.formatProgressErrorActivity(`tool_${Z.toolName??"unknown"}_error`,Z.error):`finished_tool_${Z.toolName??"unknown"}`;break;case"done":Q="finalizing_response";break;case"error":Q=this.formatProgressErrorActivity("run_error",Z.error.message);break;default:break}if(!Q)return;for(let W of this.runs.values()){if(W.agentId!==$||W.status!=="running")continue;this.recordRunProgress(W,Q)}}recordRunProgress($,Z){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=Z,$.currentActivity=Z,this.emitEvent({type:I.RunProgress,run:{...$},message:Z})}formatProgressErrorActivity($,Z){let Q=Z.replace(/\s+/g," ").trim();if(Q.length===0)return $;let W=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${W}`}recordProgressStep($,Z,Q,W=!1){this.missionStepCounter++;let J=this.members.get($);if(!J)return;let X=this.missionStepCounter-J.lastMissionStep,Y=Date.now()-J.lastMissionAt;if(!W&&X<this.missionLogIntervalSteps&&Y<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Q,kind:"progress",summary:Z})}buildMailboxNotification($){if($.length===0)return"";let Z=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Q of $)Z.push(`--- Message from ${Q.fromAgentId} | subject: ${Q.subject} ---`),Z.push(Q.body);return Z.push("---"),Z.join(`
|
|
526
|
+
`)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function $A($){return new Promise((Z)=>setTimeout(Z,$))}function Y4($,Z){let Q=0;for(let W of $){if(!W.startsWith(Z))continue;let J=Number.parseInt(W.slice(Z.length),10);if(Number.isFinite(J))Q=Math.max(Q,J)}return Q}function rJ($,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}),uQ($);break}default:break}}async function iJ($,Z,Q){switch(Z.type){case"run_progress":await Q("onTeamTaskProgress",$,Z.run.agentId,Z.message,{kind:Z.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(Z.event.type==="content_start"&&Z.event.contentType==="text"&&typeof Z.event.text==="string"){let W=Z.event.text.replace(/\s+/g," ").trim().slice(0,120);if(W)await Q("onTeamTaskProgress",$,Z.agentId,W,{kind:"text"})}break;case"task_start":await Q("onTeamTaskStart",$,Z.agentId,Z.message);break;case"task_end":{if(Z.error)await Q("onTeamTaskEnd",$,Z.agentId,"failed",`[error] ${Z.error.message}`,void 0,Z.messages);else if(Z.result?.finishReason==="aborted")await Q("onTeamTaskEnd",$,Z.agentId,"cancelled","[done] aborted",Z.result,Z.result.messages);else await Q("onTeamTaskEnd",$,Z.agentId,"completed",`[done] ${Z.result?.finishReason??"completed"}`,Z.result,Z.result?.messages);break}default:break}}function nJ($,Z,Q,W){if(!$.runtime.teamRuntime)return;let J=$.runtime.teamRuntime.getTeamName();W({type:"team_progress",payload:{sessionId:Z,teamName:J,lifecycle:X4({teamName:J,sessionId:Z,event:Q}),summary:J4(J,$.runtime.teamRuntime.exportState())}})}function x5($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function aJ($,Z){if($.aborting)return!1;if(!(Z==="completed"||Z==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&x5($)}function uQ($){let Z=$.teamRunWaiters.splice(0);for(let Q of Z)Q()}async function sJ($){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 oJ($,Z){let Q=Z.map((X)=>{let Y=[`- ${X.runId} (${X.agentId}) -> ${X.status}`];if(X.taskId)Y.push(` task=${X.taskId}`);if(typeof X.iterations==="number")Y.push(` iterations=${X.iterations}`);if(X.error)Y.push(` error=${X.error}`);return Y.join("")}),W=$.activeTeamRunIds.size,J=W>0?`There are still ${W} teammate run(s) in progress. Continue coordination and decide whether to wait for more updates.`:"No teammate runs are currently in progress. Continue coordination using these updates.";return g5(`System-delivered teammate async run updates:
|
|
527
527
|
${Q.join(`
|
|
528
528
|
`)}
|
|
529
529
|
|
|
530
|
-
${J}`,$.config.mode)}function g5($,Z){return
|
|
531
|
-
`,"utf8"),
|
|
530
|
+
${J}`,$.config.mode)}function g5($,Z){return vP($,Z==="plan"?"plan":Z==="yolo"?"yolo":"act")}var tJ=4;class t1{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 cJ($,Z.messagesArtifactUploader,Z.logger),this.teamChildren=new vQ($,this.manifestStore,(Q,W,J)=>this.toPersistedMessages(Q,W,J),t1.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,Z,Q){if(!$)return;return Z?LZ(Z.messages,Z,Q):DZ($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,Z){this.manifestStore.writeSessionManifest($,Z)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let Z=$.startedAt??J0(),Q=$.sessionId.trim(),W=Q.length>0?Q:`${Date.now()}_${uP(5)}`,J=this.manifestStore.artifacts.sessionMessagesPath(W),X=this.manifestStore.artifacts.sessionManifestPath(W),Y=E6({metadata:$.metadata,prompt:$.prompt}),j={version:1,session_id:W,source:$.source,pid:$.pid,started_at:Z,status:"running",interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt?.trim()||void 0,metadata:Y,messages_path:J};return await this.adapter.upsertSession({sessionId:W,source:$.source,pid:$.pid,startedAt:Z,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:null,parentAgentId:null,agentId:null,conversationId:null,isSubagent:!1,prompt:j.prompt??null,metadata:z$(j.metadata),hookPath:"",messagesPath:J,updatedAt:J0()}),this.manifestStore.initializeMessagesFile(W,J,Z),this.manifestStore.writeSessionManifest(X,j),{manifestPath:X,messagesPath:J,manifest:j}}async updateSessionStatus($,Z,Q){let W;if((await VB(()=>this.adapter.getSession($),async(X)=>{return W=H0(Z)?void 0:J0(),this.adapter.updateSession({sessionId:$,status:Z,endedAt:W??null,exitCode:H0(Z)?null:typeof Q==="number"?Q:null,expectedStatusLock:X.statusLock})},tJ)).updated){if(Z==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:W}}return{updated:!1}}async updateSession($){for(let Z=0;Z<tJ;Z++){let Q=await this.adapter.getSession($.sessionId);if(!Q)return{updated:!1};let W=Q.metadata??void 0,J=$.metadata!==void 0?z$($.metadata)??{}:z$(W)??{},X=B2(typeof W?.title==="string"?W.title:void 0),Y=$.title!==void 0?B2($.title):X??eW($.prompt);if(Y)J.title=Y;else delete J.title;let j=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:j?Object.keys(J).length>0?J:null:void 0,title:Y,expectedStatusLock:Q.statusLock})).updated)continue;let{path:H,manifest:B}=this.manifestStore.readManifestFile($.sessionId);if(B){if($.prompt!==void 0)B.prompt=$.prompt??void 0;let G=$.metadata!==void 0?z$($.metadata)??{}:z$(B.metadata)??{};if(Y)G.title=Y;B.metadata=Object.keys(G).length>0?G:void 0,this.manifestStore.writeSessionManifest(H,B)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,Z){return this.teamChildren.appendSubagentHookAudit(Z),Promise.resolve()}persistSessionMessages($,Z,Q){let W=DZ(Z);return this.manifestStore.persistSessionMessages($,W,Q)}applySubagentStatus($,Z){return this.teamChildren.applySubagentStatus($,Z)}applySubagentStatusBySessionId($,Z){return this.teamChildren.applySubagentStatusBySessionId($,Z)}applyStatusToRunningChildSessions($,Z){return this.teamChildren.applyStatusToRunningChildSessions($,Z)}onTeamTaskStart($,Z,Q){return this.teamChildren.onTeamTaskStart($,Z,Q)}onTeamTaskEnd($,Z,Q,W,J,X){return this.teamChildren.onTeamTaskEnd($,Z,Q,W,J,X)}onTeamTaskProgress($,Z,Q,W){return this.teamChildren.onTeamTaskProgress($,Z,Q,W)}handleSubAgentStart($,Z){return this.teamChildren.handleSubAgentStart($,Z)}handleSubAgentEnd($,Z){return this.teamChildren.handleSubAgentEnd($,Z)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(Z){return typeof Z==="object"&&Z!==null&&"code"in Z&&Z.code==="EPERM"}}async reconcileDeadRunningSession($){if(H0($.status)===!1||this.isPidAlive($.pid))return $;let Z=J0(),Q=t1.STALE_REASON;for(let W=0;W<tJ;W++){let J=await this.adapter.getSession($.sessionId);if(!J)return;if(H0(J.status)===!1)return J;let X={...J.metadata??{},terminal_marker:Q,terminal_marker_at:Z,terminal_marker_pid:J.pid,terminal_marker_source:t1.STALE_SOURCE},Y=await this.adapter.updateSession({sessionId:J.sessionId,status:"failed",endedAt:Z,exitCode:1,metadata:X,expectedStatusLock:J.statusLock});if(!Y.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(J.sessionId,"failed");let j=jB(J,{status:"failed",endedAt:Z,exitCode:1,metadata:X}),{path:V}=this.manifestStore.readManifestFile(J.sessionId);return this.manifestStore.writeSessionManifest(V,j),this.manifestStore.appendStaleSessionHookLog(Z,J.sessionId,J.pid,Q,t1.STALE_SOURCE),{...J,status:"failed",endedAt:Z,exitCode:1,metadata:X,statusLock:Y.statusLock,updatedAt:Z}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let Z=Math.max(1,Math.floor($)),Q=Math.min(Z*5,2000);return await this.reconcileDeadSessions(Q),(await this.adapter.listSessions({limit:Q})).slice(0,Z).map((J)=>{let X=z$(J.metadata??void 0),Y=this.manifestStore.readSessionManifest(J.sessionId),j=B2(typeof Y?.metadata?.title==="string"?Y.metadata.title:void 0),V=j?{...X??{},title:j}:X;return{...J,metadata:V}})}async reconcileDeadSessions($=2000){let Z=Math.max(1,Math.floor($)),Q=(await Promise.all(["idle","running","pending"].map((J)=>this.adapter.listSessions({limit:Z,status:J})))).flat(),W=0;for(let J of Q){let X=await this.reconcileDeadRunningSession(J);if(X&&X.status!==J.status)W++}return W}async deleteSession($){let Z=$.trim();if(!Z)throw Error("session id is required");let Q=await this.adapter.getSession(Z);if(!Q)return{deleted:!1};if(await this.adapter.deleteSession(Z,!1),!Q.isSubagent){let W=await this.adapter.listSessions({limit:2000,parentSessionId:Z});await this.adapter.deleteSession(Z,!0),await Promise.allSettled(W.map(async(J)=>{await z3(J.cwd,J.sessionId),p6(J.messagesPath),p6(this.manifestStore.artifacts.sessionManifestPath(J.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(J.sessionId)}))}if(await z3(Q.cwd,Z),p6(Q.messagesPath),p6(this.manifestStore.artifacts.sessionManifestPath(Z,!1)),Q.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(Z);else{let W=new Set([this.manifestStore.artifacts.sessionArtifactsDir(Z)]);for(let J of[Q.messagesPath])if(typeof J==="string"&&J.trim().length>0)W.add(cP(J));for(let J of W)this.manifestStore.artifacts.removeDir(J)}return{deleted:!0}}}function $X(){return new Date().toISOString()}function XA($,Z){let Q=`${$}.tmp`;pP(Q,`${JSON.stringify(Z,null,2)}
|
|
531
|
+
`,"utf8"),lP(Q,$)}class YA{sessionsDirPath;constructor($=rP()){this.sessionsDirPath=$}ensureSessionsDir(){if(!eJ(this.sessionsDirPath))dP(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return JA(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return JA(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!eJ($))return{version:1,sessions:{}};try{let Z=JSON.parse(WA($,"utf8"));if(Z?.version===1&&Z.sessions)return Z}catch{}return{version:1,sessions:{}}}writeIndex($){XA(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!eJ($))return{version:1,nextId:1,requests:[]};try{let Z=JSON.parse(WA($,"utf8"));if(Z?.version===1&&typeof Z.nextId==="number"&&Array.isArray(Z.requests))return Z}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){XA(this.spawnQueuePath(),$)}async upsertSession($){let Z=this.readIndex();Z.sessions[$.sessionId]=$,this.writeIndex(Z)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((Z)=>$.parentSessionId!==void 0?Z.parentSessionId===$.parentSessionId:!0).filter((Z)=>$.status!==void 0?Z.status===$.status:!0).sort((Z,Q)=>Q.startedAt.localeCompare(Z.startedAt)).slice(0,$.limit)}async updateSession($){let Z=this.readIndex(),Q=Z.sessions[$.sessionId];if(!Q)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&Q.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:Q.statusLock};let W=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:Q.statusLock,J={...Q,status:$.status??Q.status,endedAt:$.endedAt!==void 0?$.endedAt:Q.endedAt??null,exitCode:$.exitCode!==void 0?$.exitCode:Q.exitCode??null,prompt:$.prompt!==void 0?$.prompt:Q.prompt??null,metadata:$.metadata!==void 0?$.metadata??null:Q.metadata??null,parentSessionId:$.parentSessionId!==void 0?$.parentSessionId??null:Q.parentSessionId??null,parentAgentId:$.parentAgentId!==void 0?$.parentAgentId??null:Q.parentAgentId??null,agentId:$.agentId!==void 0?$.agentId??null:Q.agentId??null,conversationId:$.conversationId!==void 0?$.conversationId??null:Q.conversationId??null,statusLock:W,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:Q.isSubagent,updatedAt:$X()};if($.setRunning)J.status="running",J.endedAt=null,J.exitCode=null;return Z.sessions[$.sessionId]=J,this.writeIndex(Z),{updated:!0,statusLock:J.statusLock}}async deleteSession($,Z){let Q=this.readIndex();if(!Q.sessions[$])return!1;if(delete Q.sessions[$],Z){for(let J of Object.values(Q.sessions))if(J.parentSessionId===$)delete Q.sessions[J.sessionId]}return this.writeIndex(Q),!0}async enqueueSpawnRequest($){let Z=this.readQueue();Z.requests.push({id:Z.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:$X()}),Z.nextId+=1,this.writeQueue(Z)}async claimSpawnRequest($,Z){let Q=this.readQueue(),W=Q.requests.find((J)=>J.rootSessionId===$&&J.parentAgentId===Z&&!J.consumedAt);if(!W)return;return W.consumedAt=$X(),this.writeQueue(Q),W.task}}class ZX extends t1{constructor($,Z={}){super(new YA($),Z)}ensureSessionsDir(){return super.ensureSessionsDir()}}var HA={};N(HA,{CoreSessionService:()=>z1});import{existsSync as iP,mkdirSync as nP}from"node:fs";import{resolveSessionDataDir as aP}from"@cline/shared/storage";var QX=`
|
|
532
532
|
session_id AS sessionId,
|
|
533
533
|
source,
|
|
534
534
|
pid,
|
|
@@ -555,7 +555,7 @@ ${J}`,$.config.mode)}function g5($,Z){return IP($,Z==="plan"?"plan":Z==="yolo"?"
|
|
|
555
555
|
metadata_json AS metadata,
|
|
556
556
|
hook_path AS hookPath,
|
|
557
557
|
messages_path AS messagesPath,
|
|
558
|
-
updated_at AS updatedAt`;function WX($){$.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 JX($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function
|
|
558
|
+
updated_at AS updatedAt`;function WX($){$.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 JX($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function jA($){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 VA{store;sessionsDirPath;constructor($,Z=aP()){this.store=$;this.sessionsDirPath=Z}ensureSessionsDir(){if(!iP(this.sessionsDirPath))nP(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
|
|
559
559
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
560
560
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
561
561
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
@@ -571,36 +571,36 @@ ${J}`,$.config.mode)}function g5($,Z){return IP($,Z==="plan"?"plan":Z==="yolo"?"
|
|
|
571
571
|
WHERE session_id = ? AND status_lock = ?`,[J0(),$.expectedStatusLock+1,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.prompt??null,$.sessionId,$.expectedStatusLock]).changes??0)>0,statusLock:$.expectedStatusLock+1}}let Z=[],Q=[];if($.status!==void 0)Z.push("status = ?"),Q.push($.status);if($.endedAt!==void 0)Z.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)Z.push("exit_code = ?"),Q.push($.exitCode);if($.prompt!==void 0)Z.push("prompt = ?"),Q.push($.prompt??null);if($.metadata!==void 0)Z.push("metadata_json = ?"),Q.push(JX($.metadata));if($.parentSessionId!==void 0)Z.push("parent_session_id = ?"),Q.push($.parentSessionId??null);if($.parentAgentId!==void 0)Z.push("parent_agent_id = ?"),Q.push($.parentAgentId??null);if($.agentId!==void 0)Z.push("agent_id = ?"),Q.push($.agentId??null);if($.conversationId!==void 0)Z.push("conversation_id = ?"),Q.push($.conversationId??null);if(Z.length===0){let Y=await this.getSession($.sessionId);return{updated:!!Y,statusLock:Y?.statusLock??0}}let W=0;if($.expectedStatusLock!==void 0)W=$.expectedStatusLock+1,Z.push("status_lock = ?"),Q.push(W);Z.push("updated_at = ?"),Q.push(J0());let J=`UPDATE sessions SET ${Z.join(", ")} WHERE session_id = ?`;if(Q.push($.sessionId),$.expectedStatusLock!==void 0)J+=" AND status_lock = ?",Q.push($.expectedStatusLock);if((this.store.run(J,Q).changes??0)===0)return{updated:!1,statusLock:0};if($.expectedStatusLock===void 0)W=(await this.getSession($.sessionId))?.statusLock??0;return{updated:!0,statusLock:W}}async deleteSession($,Z){let Q=this.store.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(Z)this.store.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}async enqueueSpawnRequest($){this.store.run(`INSERT INTO subagent_spawn_queue (root_session_id, parent_agent_id, task, system_prompt, created_at, consumed_at)
|
|
572
572
|
VALUES (?, ?, ?, ?, ?, NULL)`,[$.rootSessionId,$.parentAgentId,$.task??null,$.systemPrompt??null,J0()])}async claimSpawnRequest($,Z){let Q=this.store.queryOne(`SELECT id, task FROM subagent_spawn_queue
|
|
573
573
|
WHERE root_session_id = ? AND parent_agent_id = ? AND consumed_at IS NULL
|
|
574
|
-
ORDER BY id ASC LIMIT 1`,[$,Z]);if(!Q||typeof Q.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[J0(),Q.id]),Q.task??void 0}}class
|
|
574
|
+
ORDER BY id ASC LIMIT 1`,[$,Z]);if(!Q||typeof Q.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[J0(),Q.id]),Q.task??void 0}}class z1 extends t1{store;constructor($,Z={}){super(new VA($,Z.sessionArtifactsDir),Z);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
|
|
575
575
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
576
576
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
577
577
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
578
578
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
579
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,J0()])}}function rP($){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 m5,v5;function iP($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;bQ(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function nP($){await $.reconcileDeadSessions?.().catch(()=>{})}function BA($){try{let Z=new D1;return Z.init(),new _1(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),HA($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new ZX(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function VA($,Z,Q){return new z1({sessionService:Q??$.sessionService??BA($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function XX($){if(m5)return m5;if(v5)return await v5;return v5=(async()=>{return m5=BA($),await nP(m5),m5})().finally(()=>{v5=void 0}),await v5}async function V4($){let Z=h0($.distinctId);$.telemetry?.setDistinctId(Z);let Q=rP($);if(iP(Q,$),Q==="remote"){let W=$.remote?.endpoint?.trim();if(!W)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:W}),new $4({endpoint:W,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let W=$.hub?.endpoint?.trim(),J=W||await b2({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!J)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:J,explicitEndpoint:W||void 0}),new s1({url:J,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Q==="auto"){let W=await P5({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(W){$.logger?.log("Using discovered local hub runtime host",{url:W});let J=new s1({url:W,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await J.connect(),J}catch(X){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:X}),HA($.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"}),VA($,Z)}return VA($,Z)}var LA={};N(LA,{createCheckpointComparePlan:()=>dQ,compareCheckpointToWorkspace:()=>c5,buildCheckpointWorkspaceDiff:()=>lQ});import{execFile as oP}from"node:child_process";import*as UA from"node:fs/promises";import*as G4 from"node:path";import{promisify as tP}from"node:util";var AA={};N(AA,{trimMessagesToCheckpoint:()=>FA,trimMessagesBeforeCheckpoint:()=>jX,readSessionCheckpointHistory:()=>k2,findCheckpointForRun:()=>B4,createRestoredCheckpointMetadata:()=>YX,createCheckpointRestorePlan:()=>VX,applyCheckpointToWorktree:()=>HX});import{execFile as aP}from"node:child_process";import{promisify as sP}from"node:util";var H4=sP(aP);function k2($){let Z=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(Z?.history)?Z.history:[]).filter((W)=>!!W&&typeof W==="object"&&!Array.isArray(W)).flatMap((W)=>{let J=String(W.ref??"").trim(),X=Number(W.createdAt??0),Y=Number(W.runCount??0);if(J.length===0||!Number.isFinite(X)||!Number.isInteger(Y)||Y<1)return[];let j=W.kind==="stash"||W.kind==="commit"?W.kind:void 0;return[{ref:J,createdAt:X,runCount:Y,...j?{kind:j}:{}}]})}function YX($,Z){let Q=k2($).filter((J)=>J.runCount<=Z),W=Q.at(-1);return W?{latest:W,history:Q}:void 0}function B4($,Z){return $.reduce((Q,W)=>{if(W.runCount>Z)return Q;if(!Q||W.runCount>Q.runCount)return W;return Q},void 0)}function KA($,Z){let Q=0;for(let W=0;W<$.length;W+=1){let J=$[W];if(J?.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"?J.metadata:void 0)?.kind==="recovery_notice")continue;if(Q+=1,Q===Z)return W}throw Error(`Could not find user message for checkpoint run ${Z}`)}function FA($,Z){let Q=KA($,Z);return $.slice(0,Q+1)}function jX($,Z){let Q=KA($,Z);return $.slice(0,Q)}function VX($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=B4(k2($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:W,...$.restoreMessages!==!1?{messages:FA($.messages??[],Z)}:{}}}async function HX($,Z){if((await H4("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await H4("git",["-C",$,"cat-file","-e",`${Z.ref}^{commit}`],{windowsHide:!0}),await H4("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await H4("git",["-C",$,"clean","-fd"],{windowsHide:!0}),Z.kind==="commit"){await H4("git",["-C",$,"reset","--hard",Z.ref],{windowsHide:!0});return}await H4("git",["-C",$,"stash","apply",Z.ref],{windowsHide:!0})}var eP=tP(oP),$S=52428800;async function uQ($,Z){let{stdout:Q}=await eP("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:$S,encoding:"utf8"});return Q}function fA($){return $.split("\x00").filter(Boolean)}function DA($,Z){let Q=G4.resolve($,Z),W=G4.relative($,Q);if(W.startsWith("..")||G4.isAbsolute(W))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function ZS($,Z,Q){try{return await uQ($,["show",`${Z}:${Q}`])}catch{return""}}async function QS($,Z){try{return await UA.readFile(DA($,Z),"utf8")}catch{return""}}async function WS($,Z){await uQ($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,W]=await Promise.all([uQ($,["diff","--name-only","-z",Z.ref,"--"]),uQ($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...fA(Q),...fA(W)])].sort((X,Y)=>X.localeCompare(Y))}function dQ($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=B4(k2($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Q,cwd:W}}async function lQ($,Z){let Q=await WS($,Z);return(await Promise.all(Q.map(async(J)=>{let[X,Y]=await Promise.all([ZS($,Z.ref,J),QS($,J)]);return{filePath:DA($,J),leftContent:X,rightContent:Y}}))).filter((J)=>J.leftContent!==J.rightContent)}async function c5($){let Z=dQ($),Q=await lQ(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}var TA={};N(TA,{NoOpFeatureFlagsProvider:()=>x2,FeatureFlagsService:()=>I2});import{existsSync as JS,mkdirSync as XS,readFileSync as YS,writeFileSync as jS}from"node:fs";import{dirname as VS}from"node:path";import{FEATURE_FLAGS as _A,FeatureFlagDefaultValue as BX}from"@cline/shared";var HS=3600000,BS=604800000,zA=1;class I2{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??HS,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??BS,this.context={...$.context??{}},this.hydrateFromPersistentCache()}setContext($){this.context={...$}}hydrateCache($){this.cacheInfo={updateTime:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload},this.rebuildCacheFromSnapshot($.flagsPayload)}getCacheSnapshot(){return{updateTime:this.cacheInfo.updateTime,userId:this.cacheInfo.userId,flagsPayload:this.cacheInfo.flagsPayload}}async poll($){let Z=$??this.context.userId??null,Q=Date.now();if(Q-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===Z)return}let W=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:Z||null};try{let J=await this.provider.getAllFlagsAndPayloads({flagKeys:_A.length>0?_A:void 0,context:{...this.context,userId:Z}});if(this.cacheInfo.userId!==Z)return;this.cacheInfo.flagsPayload=J,this.rebuildCacheFromSnapshot(J),this.writePersistentCache()}catch(J){if(this.cacheInfo.userId!==Z)return;throw this.cacheInfo=W.updateTime?W:{updateTime:0,userId:null},this.logger?.error?.("Error polling SDK feature flags",{error:J}),J}}hydrateFromPersistentCache(){let $=this.readPersistentCache();if($)this.hydrateCache($)}isFeatureFlagPayload($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every((Z)=>this.isFeatureFlagPayload(Z));if(typeof $==="object")return Object.values($).every((Z)=>this.isFeatureFlagPayload(Z));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=Object.entries($).filter(([,W])=>this.isFeatureFlagPayload(W));if(Z.length===0)return;let Q={};for(let[W,J]of Z)Q[W]=J;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!JS(this.cacheFilePath))return;let $=JSON.parse(YS(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==zA||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;XS(VS(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:zA,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};jS(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
|
|
580
|
-
`,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let Z=new Map;for(let Q of this.getReturnedFlagKeys($)){let W=this.getFeatureFlag(Q);Z.set(Q,W??!1)}this.cache=Z}getFeatureFlag($){try{let Z=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],W=Z??Q??BX[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==W)this.telemetry?.capture({event:g.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return W}catch(Z){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:Z}),BX[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??BX[$]}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
|
|
581
|
-
`).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse subprocess stdout JSON"}}}function fS($,Z){let Q=$ instanceof Error?$:Error(String($)),W=Q,J=Z.join(" ");if(W.code==="EACCES")return Error(`Failed to execute hook command "${J}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return Error(`Failed to execute hook command "${J}": ${Q.message}`)}async function US($,Z){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((W,J)=>{let X=(Y)=>{Q.off("error",X);let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y)};Q.once("error",X),Q.end(Z,(Y)=>{if(Q.off("error",X),Y){let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y);return}W()})})}async function K4($,Z){let Q=KS(Z.command,{env:Z.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let W=!!Z.detached,J=GS(Q[0],Q.slice(1),{cwd:Z.cwd,env:FS(Z.env),stdio:W?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:W,windowsHide:!0}),X=new Promise((K)=>{J.once("spawn",()=>{try{Z.onSpawn?.({command:Q,pid:J.pid??void 0,detached:W})}catch{}K()})}),Y=new Promise((K,F)=>{J.once("error",(A)=>{F(fS(A,Q))})});if(await US(J,JSON.stringify($)),W){await Promise.race([X,Y]),J.unref();return}if(!J.stdout||!J.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let j="",V="",H=!1,B;J.stdout.on("data",(K)=>{j+=K.toString()}),J.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((Z.timeoutMs??0)>0)B=setTimeout(()=>{H=!0,J.kill("SIGKILL")},Z.timeoutMs);J.once("close",(F)=>{if(B)clearTimeout(B);let{parsedJson:A,parseError:L}=AS(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:H})})});return await Promise.race([G,Y])}var LS=g2.object({contextModification:g2.string().optional(),cancel:g2.boolean().optional(),review:g2.boolean().optional(),errorMessage:g2.string().optional(),context:g2.string().optional(),overrideInput:g2.unknown().optional()}).passthrough();var _S=["agent","hook"];async function A4($,Z={}){let Q=Z.command??_S;return await K4($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function RA($){return $ instanceof Error?$:Error(String($))}function zS($){if(!$||typeof $!=="object")return;let Z=LS.safeParse($);if(!Z.success)return;let Q=Z.data;if(!(("cancel"in Q)||("review"in Q)||("context"in Q)||("contextModification"in Q)||("overrideInput"in Q)||("errorMessage"in Q)))return;let J=typeof Q.context==="string"?Q.context:typeof Q.contextModification==="string"?Q.contextModification:typeof Q.errorMessage==="string"&&Q.errorMessage.length>0?Q.errorMessage:void 0;return{cancel:typeof Q.cancel==="boolean"?Q.cancel:void 0,review:typeof Q.review==="boolean"?Q.review:void 0,context:J,overrideInput:Object.hasOwn(Q,"overrideInput")?Q.overrideInput:void 0}}function MA($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W;else Z[Q]=JSON.stringify(W);return Z}function e1($,Z,Q){let W=Q.env??process.env,J=W.CLINE_USER_ID?.trim()||W.USER?.trim()||"unknown",X=Q.cwd||process.cwd();return{clineVersion:W.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:Z.conversationId,sessionContext:DS(Q.sessionContext,{hookName:$,conversationId:Z.conversationId,agentId:Z.agentId,parentAgentId:Z.parentAgentId}),workspaceRoots:X?[X]:[],workspaceInfo:Q.workspaceInfo,userId:J,agent_id:Z.agentId,parent_agent_id:Z.parentAgentId}}function TS($){return{name:$.name,message:$.message,stack:$.stack}}function OS($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function qS($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function MS($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function RS($){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 ES($){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 m2($,Z){try{let Q=await A4($,{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?.(RA(Q),$)}}function iQ($={}){return{hooks:{beforeRun:async(j)=>{let V=qS(j);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let B={...e1("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await m2(B,$)}else{let B={...e1("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await m2(B,$)}return},beforeTool:async(j)=>{let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...e1("tool_call",V,$),hookName:"tool_call",iteration:j.snapshot.iteration,tool_call:{id:j.toolCall.toolCallId,name:j.toolCall.toolName,input:j.input},preToolUse:{toolName:j.toolCall.toolName,parameters:MA(j.input)}};try{let B=await A4(H,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:H,result:B,detached:!1}),B?.timedOut)throw Error("tool_call hook command timed out");if(B?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${B.parseError}`);return ES(zS(B?.parsedJson))}catch(B){$.onDispatchError?.(RA(B),H);return}},afterTool:async(j)=>{let V=RS(j),H={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},B={...e1("tool_result",H,$),hookName:"tool_result",iteration:j.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:MA(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await m2(B,$);return},afterRun:async({snapshot:j,result:V})=>{let H={agentId:j.agentId,conversationId:j.conversationId??j.runId??j.agentId,parentAgentId:j.parentAgentId??null};if(V.status==="completed"){let K={...e1("agent_end",H,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await m2(K,$);return}let B=V.status==="aborted"||OS(V.error?.message)?"agent_abort":"agent_error",G=B==="agent_error"?{...e1(B,H,$),hookName:B,iteration:V.iterations,error:TS(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...e1(B,H,$),hookName:B,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await m2(G,$)},onEvent:async(j)=>{if(j.type!=="message-added"||j.message.role!=="user")return;let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...e1("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:MS(j.message.content),attachments:[]}};await m2(H,$)}},shutdown:async({agentId:j,conversationId:V,parentAgentId:H,reason:B})=>{let G={...e1("session_shutdown",{agentId:j,conversationId:V,parentAgentId:H},$),hookName:"session_shutdown",reason:B};await m2(G,$)}}}var xf={};N(xf,{writeHubDiscovery:()=>wQ,withHubStartupLock:()=>CQ,verifyHubConnection:()=>A1,truncateNotificationBody:()=>r5,toHubStatusUrl:()=>NJ,toHubHealthUrl:()=>PQ,stopLocalHubServerGracefully:()=>mJ,startHubWebSocketServer:()=>u2,startHubServer:()=>kf,spawnDetachedHubServerWithRetry:()=>o8,spawnDetachedHubServer:()=>yJ,sendHubCommand:()=>bA,restartLocalHubIfIdleAfterStartupTimeout:()=>kQ,resolveWorkspaceHubOwnerContext:()=>BF,resolveSharedHubOwnerContext:()=>y0,resolveProductionHubOwnerContext:()=>s0,resolveHubUrl:()=>fX,resolveHubOwnerContext:()=>n1,resolveHubEndpointOptions:()=>a0,resolveHubBuildId:()=>NQ,resolveDefaultHubPort:()=>s8,resolveDefaultHubPathname:()=>bJ,resolveDefaultHubHost:()=>SJ,resolveCompatibleLocalHubUrl:()=>P5,resolveClineDir:()=>YF,resolveClineDataDir:()=>C2,requestHubShutdown:()=>C5,rememberRecoverableLocalHubUrl:()=>k$,readHubDiscovery:()=>f0,readBearerToken:()=>J7,probeHubServer:()=>a1,probeHubConnection:()=>SA,prewarmDetachedHubServer:()=>bQ,normalizeHubWebSocketUrl:()=>I$,isLocalHubOrigin:()=>xX,isLocalHubHostName:()=>X7,isHubReconnectableTransportError:()=>xJ,isHubCommandTimeoutError:()=>hQ,isDiscoveryFilePresent:()=>VF,ensureHubWebSocketServer:()=>Y7,ensureHubServer:()=>If,ensureDetachedHubServer:()=>UF,ensureCompatibleLocalHubUrl:()=>b2,createLocalHubScheduleRuntimeHandlers:()=>j7,createInMemoryHubOwnerContext:()=>jF,createHubServerUrl:()=>V1,createHubAuthToken:()=>EQ,createConfiguredTelemetryService:()=>$$,createConfiguredTelemetryHandle:()=>_4,connectToHub:()=>oQ,clearHubDiscovery:()=>b0,NodeHubClient:()=>H1,NativeHubTransportAdapter:()=>o5,HubUIClient:()=>LX,HubTransportError:()=>E0,HubSessionClient:()=>DX,HubServerTransport:()=>z4,HubScheduleService:()=>U4,HubScheduleCommandService:()=>f4,HubCommandError:()=>t8,DEFAULT_HUB_PORT:()=>CJ,DEFAULT_HUB_PATHNAME:()=>PJ,DEFAULT_HUB_HOST:()=>wJ,BrowserWebSocketHubAdapter:()=>s5});import{createSessionId as NS}from"@cline/shared";function o0($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function NA($,Z,Q){return{version:$.version,requestId:$.requestId??NS("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class f4{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return o0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return o0($,{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 o0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return o0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return o0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return o0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return o0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return o0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return o0($,{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 o0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return o0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return o0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return NA($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Z){return NA($,"schedule_command_failed",Z instanceof Error?Z.message:String(Z))}}toCreateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:Z}}toUpdateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:Z}}}function aQ($){return $?new Date($).getTime():void 0}function wS($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function nQ($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof Z?.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:aQ($.nextRunAt),lastRunAt:aQ($.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:wS($)}}function CS($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function GX($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:aQ($.startedAt),endedAt:aQ($.completedAt),status:CS($.status),errorMessage:$.error}}class U4{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new q5({dbPath:$.dbPath}),this.materializer=new L5({store:this.store}),this.runner=new _5({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(BJ($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return nQ(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?nQ(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>nQ(Z))}updateSchedule($,Z){if(Z.cronPattern!==void 0)BJ(Z.cronPattern);let Q=this.store.getHubSchedule($);if(!Q)return;let W=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot;if((Z.enabled??Q.enabled)&&!W)throw Error("workspaceRoot is required for enabled schedules");let X=this.store.updateHubSchedule($,{...Z,scheduleId:$});return X?nQ(X):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;await this.runner.tick();let Q=this.store.getRun(Z.runId)??Z;return GX(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),GX(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((J)=>{let X=Z??this.store.getSpec(J.specId);if(!X||X.source!=="hub-schedule")return;return GX(J,X.externalId)}).filter((J)=>{if(!J)return!1;return!$.status||J.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,W=0,J=0,X;for(let Y of Z){if(Y.status==="success"||Y.status==="completed")Q+=1;if(!X&&Y.status!=="success"&&Y.status!=="completed")X=Y;if(Y.startedAt&&Y.endedAt)J+=Y.endedAt-Y.startedAt,W+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:W>0?J/W/1000:0,lastFailure:X}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let Z=this.store.getSpec($.specId);if(!Z||Z.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:Z.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:Z.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+Z.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let Z={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(Z).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,W)=>String(Q.nextRunAt).localeCompare(String(W.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:W})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:W}))}}sQ();import{resolveClineBuildEnv as tS}from"@cline/shared";function eS($,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 $b="cline-hub-auth.";function Zb($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function Qb($,Z){let Q=new URL($),W=new URL(Z);return Q.search="",Q.hash="",W.search="",W.hash="",Q.toString()===W.toString()}function PA(){return tS()==="production"?s0():y0()}async function Wb($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=PA(),W=await f0(Q.discoveryPath);if(W?.url&&Qb($.toString(),W.url))return W.authToken;return}async function fX($={}){let Z=a0($);if(!Zb($)){let Q=PA(),W=await f0(Q.discoveryPath);if(W?.url)return W.url}return V1(Z.host,Z.port,Z.pathname)}async function oQ($){return await new Promise((Z,Q)=>{(async()=>{let W=new URL($),J=await Wb(W);W.hash="";let X=new WebSocket(W.toString(),J?[`${$b}${J}`]:void 0),Y=new Map,j=0;X.addEventListener("open",()=>{Z({send(V){let H=V.requestId??`hub-client-${++j}`;return new Promise((B,G)=>{Y.set(H,{resolve:B,reject:G});let K={kind:"command",envelope:{...V,requestId:H}};X.send(JSON.stringify(K))})},close(){X.close()}})}),X.addEventListener("message",(V)=>{let H=JSON.parse(String(V.data));if(H.kind==="reply"&&H.envelope.requestId){let B=Y.get(H.envelope.requestId);if(B)Y.delete(H.envelope.requestId),B.resolve(H.envelope)}}),X.addEventListener("close",()=>{for(let V of Y.values())V.reject(Error("Hub connection closed"));Y.clear()}),X.addEventListener("error",(V)=>{Q(eS(V,$))})})().catch(Q)})}async function SA($){try{return(await oQ($)).close(),!0}catch{return!1}}async function bA($,Z){let Q=await fX($),W=await oQ(Q);try{return await W.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{W.close()}}function UX($){return $?JSON.parse(JSON.stringify($)):{}}function tQ($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?UX(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 yA($,Z){return $.error?.message??`hub command failed: ${Z}`}function Jb($){let Z=UX($);if(typeof Z.error==="string"&&Z.error.trim())return{...Z,error:Z.error.trim()};let Q=Z.result&&typeof Z.result==="object"?Z.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...Z,error:Q.text.trim()};let W=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof W?.message==="string"&&W.message.trim())return{...Z,error:W.message.trim()};return Z}function hA($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function Xb($){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 Yb($){let Z=UX($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||hA(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||hA(Z)||"",eventType:"schedule.execution.failed",payload:Z};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:Z};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:Z};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:Z};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:Z};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:Z};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:Z};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:Z};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:Z};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:Jb($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class DX{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new H1({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=tQ(Z.payload);if(!Q?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}}}async sendRuntimeSession($,Z,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:Z.prompt,mode:Z.config.mode,attachments:Z.attachments,delivery:Z.delivery,timeoutSeconds:Z.config.timeoutSeconds},$,Q)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(i1(Q))return;throw Q}return tQ(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(yA(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async restore($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let W=$.config,J=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.workspaceRoot,cwd:W.cwd,sessionConfig:{providerId:W.provider,modelId:W.model,apiKey:W.apiKey,cwd:W.cwd??W.workspaceRoot,workspaceRoot:W.workspaceRoot,systemPrompt:W.systemPrompt??"",mode:W.mode??"act",rules:W.rules,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawnAgent:W.enableSpawn!==!1,enableAgentTeams:W.enableTeams!==!1,disableMcpSettingsTools:W.disableMcpSettingsTools,missionLogIntervalSteps:W.missionStepInterval,missionLogIntervalMs:W.missionTimeIntervalMs},metadata:{source:W.source??"cli",provider:W.provider,model:W.model,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,prompt:void 0,interactive:W.interactive!==!1},runtimeOptions:{mode:W.mode,systemPrompt:W.systemPrompt,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,autoApproveTools:W.autoApproveTools,configExtensions:W.configExtensions},modelSelection:{provider:W.provider,model:W.model,apiKey:W.apiKey},toolPolicies:W.toolPolicies}:{}},Z);if(!J.ok)throw Error(yA(J,"session.restore"));let X=tQ(J.payload);if(Q&&!X?.sessionId)throw Error("hub checkpoint restore returned no session id");let Y=Array.isArray(J.payload?.messages)?J.payload.messages:void 0,j=Xb(J.payload);return{sessionId:X?.sessionId,startResult:X?.sessionId?{sessionId:X.sessionId,manifestPath:"",messagesPath:X.messagesPath??""}:void 0,...Y?{messages:Y}:{},checkpoint:j}}async listSessions($){await this.ensureMetadataApplied();let Z=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(Z.payload?.sessions)?Z.payload?.sessions:[]).map((W)=>tQ({session:W})).filter((W)=>Boolean(W?.sessionId))}async deleteSession($,Z=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:Z})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,Z){let Q=new Set(($.sessionIds??[]).map((J)=>J.trim()).filter(Boolean)),W=this.client.subscribe((J)=>{let X=Yb(J);if(!X)return;if(Q.size>0&&!Q.has(X.sessionId))return;Z.onEvent?.(X)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),W}streamTeamProgress($,Z){let Q=this.client.subscribe((W)=>{if(W.event!=="team.progress"||!W.payload)return;Z.onProjection?.(W.payload)});return this.ensureMetadataApplied().catch((W)=>{Z.onError?.(W instanceof Error?W:Error(String(W)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list");return Array.isArray(Z.payload?.schedules)?Z.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,Z){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...Z})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,Z){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:Z});return Array.isArray(Q.payload?.executions)?Q.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(Z.payload?.upcoming)?Z.payload?.upcoming:[]}}class LX{client;constructor($){this.client=new H1({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{resolveClineBuildEnv as yf}from"@cline/shared";function jb($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
|
|
582
|
-
`).trim()||void 0}var kA=120,_X="...";function r5($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=kA)return Z;let Q=kA-Buffer.byteLength(_X,"utf8");if(Q<=0)return _X;let W="";for(let J of Z){if(Buffer.byteLength(W+J,"utf8")>Q)break;W+=J}return`${W}${_X}`}async function IA($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await h$(Q)].reverse().find((V)=>V.role==="assistant"),X=J?jb(J.content):void 0,Y=$?.workspaceRoot?.trim()||"workspace",j=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():Y;return{title:`Task completed (${Z})`,body:r5(X&&X.length>0?X:j.length>0?j:Y),severity:"info"}}import{captureSdkError as W7,createSessionId as Yy}from"@cline/shared";import{createSessionId as Gb}from"@cline/shared";import{createSessionId as Bb}from"@cline/shared";function Vb($){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 Hb($){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 eQ($,Z,Q,W){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:Vb($.status),participants:Z?[...Z.participants.values()]:[],metadata:Hb($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Q?{usage:{...Q}}:{},...W?{aggregateUsage:{...W}}:{}}}function c($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function x($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function $7($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function k0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function v2($,Z,Q){return{version:"v1",event:$,eventId:Bb("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function t0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let W=await $.sessionHost.getAccumulatedUsage?.(Z);return eQ(Q,$.sessionState.get(Z),W?.usage,W?.aggregateUsage)}async function e0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[W,J]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return f1({session:Q,messages:W,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function Z7($,Z,Q,W,J={}){let X=$.sessionState.get(Z);if(X){if(J.interactive!==void 0)X.interactive=J.interactive;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:W});return X}let Y={createdByClientId:Q,interactive:J.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:W}]])};return $.sessionState.set(Z,Y),Y}async function zX($,Z){let Q=Gb("approval_"),W=Z.sessionId;if($.sessionState.get(W)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((X)=>{$.pendingApprovals.set(Q,{sessionId:W,resolve:X}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:Z.sessionId,agentId:Z.agentId,conversationId:Z.conversationId,iteration:Z.iteration,toolCallId:Z.toolCallId,toolName:Z.toolName,inputJson:JSON.stringify(Z.input??null),policy:Z.policy},W))})}function TX($,Z,Q){let W=$.pendingApprovals.get(Z);if(!W)return;return $.pendingApprovals.delete(Z),W.resolve(Q),{sessionId:W.sessionId}}function OX($,Z,Q){let W=0;for(let[J,X]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:J,sessionId:X.sessionId}))continue;$.pendingApprovals.delete(J),X.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:J,approved:!1,cancelled:!0,reason:Q},X.sessionId)),W+=1}return W}async function xA($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return x(Z,"approval_not_found",`Unknown approval: ${Q}`);let J=typeof Z.payload?.reason==="string"?Z.payload.reason:Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)&&typeof Z.payload.payload.reason==="string"?Z.payload.payload.reason:void 0,X=Z.payload?.approved===!0,Y=TX($,Q,{approved:X,reason:J});if(!Y)return x(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:X,reason:J},Y.sessionId)),c(Z,{approvalId:Q,approved:X})}import{createSessionId as Ab}from"@cline/shared";function Kb($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var gA={debug:10,info:20,warn:30,error:40,silent:50};function Fb(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function u($,Z,Q={}){if(gA[$]<gA[Fb()])return;let W=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([J,X])=>[J,Kb(X)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${W}`);return}console.log(`[hub] ${W}`)}function qX($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);u("error",$,{error:Q})}async function mA($,Z,Q,W,J,X){let Y=Ab("capreq_"),j=performance.now();return u("info","capability.request.start",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J}),await new Promise((V,H)=>{$.pendingCapabilityRequests.set(Y,{sessionId:Z,targetClientId:J,capabilityName:Q,onProgress:X,resolve:(B)=>{if(u(B.ok?"info":"warn","capability.request.end",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J,ok:B.ok,error:B.error,durationMs:Math.round(performance.now()-j)}),!B.ok){H(Error(B.error||`Capability ${Q} was rejected by ${J}.`));return}V(B.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:Y,targetClientId:J,capabilityName:Q,payload:W},Z)),u("info","capability.request.published",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J})})}function vA($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);if((Z.clientId?.trim()||"")!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return W.onProgress?.(X),c(Z,{requestId:Q})}function m$($,Z,Q){let W=0;for(let[J,X]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:J,...X}))continue;$.pendingCapabilityRequests.delete(J),u("warn","capability.request.cancelled",{requestId:J,sessionId:X.sessionId,capabilityName:X.capabilityName,targetClientId:X.targetClientId,reason:Q}),X.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:X.capabilityName,targetClientId:X.targetClientId,ok:!1,cancelled:!0,error:Q},X.sessionId)),W+=1}return W}async function cA($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",W=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",J=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!W||!J)return x(Z,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{},Y=await $.requestCapability(Q,W,X,J);return c(Z,Y)}catch(X){return x(Z,"capability_request_failed",X instanceof Error?X.message:String(X))}}function uA($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);let J=Z.clientId?.trim()||"";if(J!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);$.pendingCapabilityRequests.delete(Q);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,Y=typeof Z.payload?.error==="string"?Z.payload.error:void 0,j=Z.payload?.ok===!0;return u(j?"info":"warn","capability.respond",{requestId:Q,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,error:Y}),W.resolve({ok:j,payload:X,error:Y}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,payload:X,error:Y},W.sessionId)),c(Z,{requestId:Q,ok:j})}import{createSessionId as fb}from"@cline/shared";function dA($,Z){let Q=Z.payload,W=Q?.clientId?.trim()||Z.clientId?.trim()||fb("client_");return $.clients.set(W,{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,actorKind:Q?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Q?.transport??"native",capabilities:Q?.capabilities??[],metadata:Q?.metadata,workspaceContext:Q?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),c(Z,{clientId:W})}function lA($,Z){let Q=Z.clientId?.trim(),W=Q?$.clients.get(Q):void 0;if(!Q||!W)return x(Z,"client_not_found","Client is not registered with this hub.");let J=$7(Z.payload?.metadata);if(W.lastSeenAt=Date.now(),J)W.metadata=JSON.parse(JSON.stringify(J));return c(Z)}function pA($,Z,Q){let W=Z.clientId?.trim();if(W)$.clients.delete(W),Q(W),$.publish($.buildEvent("hub.client.disconnected",{clientId:W}));return c(Z)}function rA($,Z){return c(Z,{clients:[...$.clients.values()]})}L0();import{existsSync as aA,mkdirSync as Ub,readdirSync as Db,readFileSync as Lb,rmSync as _b,writeFileSync as zb}from"node:fs";import{dirname as Tb,join as iA}from"node:path";import{CONNECTOR_PLATFORMS as Ob,connectorChannelsFromPlatforms as qb,listConnectorCatalog as sA,shouldIncludeConnectorField as Mb}from"@cline/shared";import{resolveConnectorDataDir as Rb,resolveConnectorSettingsPath as RX}from"@cline/shared/storage";var Eb=1,nA={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},Nb={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 v$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function i5($){return typeof $==="string"?$.trim():void 0}function oA($){if(!aA($))return;try{let Z=JSON.parse(Lb($,"utf8"));return v$(Z)?Z:void 0}catch{return}}function EX(){let $=oA(RX()),Z=v$($?.connectors)?$.connectors:{},Q={};for(let[W,J]of Object.entries(Z)){if(!v$(J))continue;let X=i5(J.type),Y=i5(J.configuredAt),j=i5(J.updatedAt);if(!X||!Y||!j)continue;let V=Q7(J.values),H=v$(J.security)?{enabled:J.security.enabled===!0,values:Q7(J.security.values)}:void 0;Q[W]={type:X,values:V,security:H,configuredAt:Y,updatedAt:j}}return{version:Eb,connectors:Q}}function tA($){let Z=RX();Ub(Tb(Z),{recursive:!0}),zb(Z,`${JSON.stringify($,null,2)}
|
|
583
|
-
`,"utf8")}function Q7($){if(!v$($))return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W.trim();return Z}function wb($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function Cb($){let Z=iA(Rb(),$);if(!aA(Z))return[];return Db(Z).filter((Q)=>Q.endsWith(".json")&&!Q.endsWith(".threads.json")).map((Q)=>iA(Z,Q))}function Pb($,Z,Q){let W=Z.botUsername??Z.userName??Z.applicationId??Z.phoneNumberId??String(Q);return`${$}:${W}`}function Sb($,Z){let Q=oA(Z);if(!Q)return;let W=typeof Q.pid==="number"?Q.pid:void 0,J=typeof Q.hubUrl==="string"?Q.hubUrl:typeof Q.rpcAddress==="string"?Q.rpcAddress:void 0;if(!W||!J||!wb(W))return;let X=Nb[$];if(!X)return;let Y={};for(let j of X.required){let V=nA[j](Q);if(!V||typeof V==="string"&&!V.trim())return;Y[j]=V}for(let j of X.optional){let V=nA[j](Q);if(V!==void 0)Y[j]=V}return{id:Pb($,Y,W),type:$,pid:W,hubUrl:J,...Y}}function bb(){let $=[];for(let{name:Z}of sA())for(let Q of Cb(Z)){let W=Sb(Z,Q);if(W)$.push(W)}return $.sort((Z,Q)=>{if(Z.type!==Q.type)return Z.type.localeCompare(Q.type);let W=Z.botUsername??Z.userName??"",J=Q.botUsername??Q.userName??"";return W.localeCompare(J)})}function yb(){let $=EX();return Object.entries($.connectors).map(([Z,Q])=>({id:Z,type:Q.type,configuredAt:Q.configuredAt,updatedAt:Q.updatedAt})).sort((Z,Q)=>Z.type.localeCompare(Q.type))}function NX(){return{available:qb(),active:bb(),configured:yb()}}function hb($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function kb($,Z){let Q={};for(let J of $.fields)Q[J.flag]=Z[J.flag]??J.initialValue??"";let W={};for(let J of $.fields){if(!Mb(J,Q))continue;hb(J,Q),W[J.flag]=Q[J.flag]}return W}function Ib($){if(!v$($))throw Error("connector.configure payload must be an object.");let Z=i5($.channel);if(!Z)throw Error("channel is required");let Q=Ob.find((K)=>K.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(sA().map((K)=>K.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let J=Q7($.values),X=kb(Q,J),Y=v$($.security)?$.security:{},j=Y.enabled===!0,V=Q7(Y.values);if(j&&Q.security)for(let K of Q.security.fields){let F=V[K.key];if(!F)throw Error(K.requiredMessage);let A=K.validate?.(F);if(A)throw Error(A)}let H=EX(),B=new Date().toISOString(),G=H.connectors[Z];return H.connectors[Z]={type:Z,values:X,security:j?{enabled:!0,values:V}:{enabled:!1,values:{}},configuredAt:G?.configuredAt??B,updatedAt:B},tA(H),NX()}function xb($){if(!v$($))throw Error("connector.delete_config payload must be an object.");let Z=i5($.channel);if(!Z)throw Error("channel is required");let Q=EX();if(delete Q.connectors[Z],Object.keys(Q.connectors).length>0)tA(Q);else _b(RX(),{force:!0});return NX()}function gb($){return $==="connector.configure"||$==="connector.delete_config"}function MX($,Z,Q){if(!gb(Z.command))return;t2($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function eA($,Z){try{if(Z.command==="connector.channels")return c(Z,NX());if(Z.command==="connector.configure"){let Q=Ib(Z.payload);return MX($,Z,!0),c(Z,Q)}if(Z.command==="connector.delete_config"){let Q=xb(Z.payload);return MX($,Z,!0),c(Z,Q)}return x(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return MX($,Z,!1),x(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var mb=30000;function vb($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function cb($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function ub($,Z,Q){let W=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return x($,R2,W)}function db($){return $?$:void 0}function lb($){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 pb($,Z,Q,W){let J=performance.now(),X=!1,Y={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:W},j=setInterval(()=>{if(X)return;let B=Math.round(performance.now()-J);u("warn","run.heartbeat",{...Y,elapsedMs:B}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:B,...W?{timeoutMs:W}:{}},Q.sessionId))},mb),V=$.sessionHost.runTurn(Q);V.then((B)=>{if(!X)return;u("warn","run.late_end",{...Y,elapsedMs:Math.round(performance.now()-J),finishReason:B?.finishReason})},(B)=>{if(!X)return;u("error","run.late_error",{...Y,elapsedMs:Math.round(performance.now()-J),error:B})});let H;try{if(!W)return await V;return await Promise.race([V,new Promise((B,G)=>{H=setTimeout(()=>{let K=`Hub run ${Z.command} timed out after ${W}ms.`;X=!0,clearInterval(j),G(Error(K)),u("error","run.timeout",{...Y,elapsedMs:Math.round(performance.now()-J)}),OX($,(F)=>F.sessionId===Q.sessionId,K),m$($,(F)=>F.sessionId===Q.sessionId,K),$.sessionHost.abort(Q.sessionId,K).catch((F)=>{u("error","run.timeout_abort_failed",{...Y,error:F})})},W)})])}finally{if(X=!0,clearInterval(j),H)clearTimeout(H)}}async function $f($,Z){let Q=k0(Z),W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.prompt==="string"?W.prompt:typeof W.input==="string"?W.input:"";if(!J.trim())return x(Z,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let X=W.attachments&&typeof W.attachments==="object"&&!Array.isArray(W.attachments)?W.attachments:void 0,Y=Array.isArray(X?.userFiles)?X.userFiles.filter((B)=>typeof B==="string"):void 0,j=lb(W);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let V;try{V=await pb($,Z,{sessionId:Q,prompt:J,mode:db(W.mode),delivery:W.delivery==="queue"||W.delivery==="steer"?W.delivery:void 0,userImages:Array.isArray(X?.userImages)?X.userImages:void 0,userFiles:Y,timeoutMs:j},j)}catch(B){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(i1(B))return ub(Z,Q,B);throw $.publish($.buildEvent("run.failed",{reason:"error",error:B instanceof Error?B.message:String(B)},Q)),B}if(V){let B=await e0($,Q),G=cb(V);if($.publish($.buildEvent(vb(V.finishReason),{reason:V.finishReason,...G?{error:G}:{},result:V,...B?{snapshot:B}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let H=await e0($,Q);return c(Z,V||H?{...V?{result:V}:{},...H?{snapshot:H}:{}}:void 0)}async function Zf($,Z){let Q=k0(Z),W=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";OX($,(J)=>J.sessionId===Q,W);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(J){u("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:J})}finally{m$($,(J)=>J.sessionId===Q,W)}return c(Z,{applied:!0})}async function Qf($,Z){let Q=F4(Z.payload?.payload);if(!Q)return x(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),c(Z,{applied:!0})}async function Wf($,Z){switch(Z.type){case"chunk":return;case"agent_event":await rb($,Z);return;case"hook":if(Z.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:Z.payload.toolName},Z.payload.sessionId));else if(Z.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:Z.payload.toolName},Z.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:Z.payload.sessionId,summary:Z.payload.summary,lastEvent:Z.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,Z.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:Z.payload.sessionId,prompts:Z.payload.prompts},Z.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:Z.payload.id,prompt:Z.payload.prompt,delivery:Z.payload.delivery,attachmentCount:Z.payload.attachmentCount,userImages:Z.payload.userImages,userFiles:Z.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:Z.payload.sessionId,prompt:Q},Z.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:Z.payload.sessionId,snapshot:Z.payload.snapshot},Z.payload.sessionId));return;case"status":{let[Q,W]=await Promise.all([t0($,Z.payload.sessionId),e0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...W?{snapshot:W}:{}},Z.payload.sessionId));return}case"ended":await ib($,Z);return;default:return}}async function rb($,Z){let{sessionId:Q,event:W}=Z.payload;if(W.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:W.iteration},Q));return}if(W.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:W.iteration,hadToolCalls:W.hadToolCalls,toolCallCount:W.toolCallCount},Q));return}if(W.type==="content_start"){if(W.contentType==="text"&&typeof W.text==="string"&&W.text.length>0){$.publish($.buildEvent("assistant.delta",{text:W.text},Q));return}if(W.contentType==="reasoning"){if(W.redacted&&!W.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof W.reasoning==="string"&&W.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:W.reasoning,redacted:W.redacted===!0},Q));return}if(W.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:W.toolCallId,toolName:W.toolName,input:W.input},Q));return}}if(W.type==="content_end"){switch(W.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:W.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:W.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:W.toolCallId,toolName:W.toolName,output:W.output,error:W.error},Q));break}return}if(W.type==="usage"){let J;try{J=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{J=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:W.inputTokens,outputTokens:W.outputTokens,cacheReadTokens:W.cacheReadTokens??0,cacheWriteTokens:W.cacheWriteTokens??0,totalCost:W.cost??0},totals:{inputTokens:W.totalInputTokens,outputTokens:W.totalOutputTokens,cacheReadTokens:W.totalCacheReadTokens??0,cacheWriteTokens:W.totalCacheWriteTokens??0,totalCost:W.totalCost??0},usage:J?.usage,aggregateUsage:J?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":W.parentAgentId?"subagent":"lead",agentId:W.agentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(W.type==="done")$.publish($.buildEvent("agent.done",{reason:W.reason,text:W.text,iterations:W.iterations,usage:W.usage},Q))}async function ib($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),W=Q===Z.payload.reason||Q==="run.start.reply";if(W)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[J,X]=await Promise.all([t0($,Z.payload.sessionId),e0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let Y=await IA(J);$.publish($.buildEvent("ui.notify",Y,Z.payload.sessionId))}if(W)return;$.publish($.buildEvent(Z.payload.reason==="aborted"?"run.aborted":Z.payload.reason==="error"||Z.payload.reason==="failed"?"run.failed":"run.completed",{reason:Z.payload.reason,...X?{snapshot:X}:{}},Z.payload.sessionId))}import{createSessionId as jf,parseRuntimeConfigExtensions as Vf}from"@cline/shared";var Jf={};N(Jf,{SessionVersioningService:()=>c$,SessionVersioningError:()=>I0});class I0 extends Error{code;constructor($,Z){super(Z);this.code=$;this.name="SessionVersioningError"}}function nb($){let Z=$.sessionId.trim();if(!Z)throw new I0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new I0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new I0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new I0("invalid_restore","checkpointRunCount must be a positive integer");return Z}class c${async restoreCheckpoint($){let Z=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,W=nb({sessionId:$.sessionId,restoreMessages:Z,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(W);if(!J)throw new I0("session_not_found",`Session ${W} not found`);let X=Z?await $.readMessages(W):void 0;if(Z&&X?.length===0)throw new I0("session_messages_not_found",`No messages found for session ${W}`);let Y=VX({session:J,messages:X,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:Z});if(Q)await($.applyWorkspaceCheckpoint??HX)(Y.cwd,Y.checkpoint);let j=f1({session:J,messages:X});if(!Z)return{checkpoint:Y.checkpoint,sourceSnapshot:j};let V=YX(J,$.checkpointRunCount),H=$.restore?.omitCheckpointMessageFromSession?jX(X??[],$.checkpointRunCount):Y.messages??[],B={sourceSession:J,sourceMessages:X,sourceSnapshot:j,plan:Y,restoredCheckpointMetadata:V,initialMessages:H,restoreMessages:Z,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new I0("invalid_restore","start is required when restore.messages is true");let G=$.buildStartInput?await $.buildStartInput(B,$.start):$.start,K=await $.startSession(G),F=$.getStartedSessionId?.(K);if(F)await($.retainCheckpointRefs??yB)(Y.cwd,F,V?.history??[]);let A=F&&$.readRestoredSession?await $.readRestoredSession(F):void 0;return{sessionId:F,startResult:K,messages:Y.messages,checkpoint:Y.checkpoint,sourceSnapshot:j,...A?{restoredSnapshot:f1({session:A,messages:H})}:{}}}}import{HUB_CHECKPOINT_CAPABILITY as ls,HUB_COMPACTION_CAPABILITY as ps,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as rs,HUB_HOOK_CAPABILITY_PREFIX as is,HUB_MISTAKE_LIMIT_CAPABILITY as ns,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as as,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as ss,isHubToolExecutorName as ab}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as Zo,HUB_COMPACTION_CAPABILITY as Qo,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Wo,HUB_HOOK_CAPABILITY_PREFIX as Jo,HUB_MISTAKE_LIMIT_CAPABILITY as Xo,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Yo,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as jo}from"@cline/shared";var sb=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function c2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function ob($,Z){let Q=typeof $.name==="string"?$.name.trim():"",W=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",X=c2($.inputSchema);if(!Q||!W||!X||!J||Z.has(J))return;return Z.add(J),{kind:"tool",capabilityName:J,name:Q,description:W,inputSchema:X,...c2($.lifecycle)?{lifecycle:c2($.lifecycle)}:{}}}function CX($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let W of $){if(!W||typeof W!=="object"||Array.isArray(W))continue;let J=W,X=J.kind,Y=typeof J.capabilityName==="string"?J.capabilityName.trim():"";if(!Y||Q.has(Y))continue;if(X==="tool"){let j=ob(J,Q);if(j)Z.push(j);continue}if(X==="toolExecutor"){let j=J.executor;if(!ab(j))continue;Q.add(Y),Z.push({kind:"toolExecutor",capabilityName:Y,executor:j});continue}if(X==="hook"){let j=typeof J.name==="string"?J.name.trim():"";if(!j)continue;Q.add(Y),Z.push({kind:"hook",capabilityName:Y,name:j});continue}if(X==="compaction"){Q.add(Y),Z.push({kind:"compaction",capabilityName:Y,...c2(J.config)?{config:c2(J.config)}:{}});continue}if(X==="checkpoint"){Q.add(Y),Z.push({kind:"checkpoint",capabilityName:Y,...c2(J.config)?{config:c2(J.config)}:{}});continue}if(X==="mistakeLimit"){Q.add(Y),Z.push({kind:"mistakeLimit",capabilityName:Y});continue}if(X==="userInstructionService")Q.add(Y),Z.push({kind:"userInstructionService",capabilityName:Y})}return Z}function Yf($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function tb($){return Object.hasOwn($,"update")?$.update:$}function n5($){return $.trim().replace(/^\/+/,"").toLowerCase()}function eb($){let Z=($??[]).map(n5).filter(Boolean);return Z.length>0?new Set(Z):void 0}function $y($,Z,Q){if(!Q)return!0;let W=n5($),J=n5(Z),X=W.includes(":")?W.split(":").at(-1)??W:W,Y=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(W)||Q.has(J)||Q.has(X)||Q.has(Y)}function wX($,Z){let Q=eb(Z);return $.records.skill.map((W)=>({id:W.id,name:W.item.name,description:"description"in W.item&&typeof W.item.description==="string"?W.item.description:void 0,disabled:W.item.disabled===!0,skill:W.item})).filter((W)=>$y(W.id,W.name,Q))}function Xf($,Z){let Q=async(W,J)=>{let X=n5(W),j=wX($,Z).filter((K)=>K.id===X||n5(K.name)===X||K.id.endsWith(`:${X}`)).filter((K)=>!K.disabled);if(j.length!==1)return j.length>1?`Skill "${W}" is ambiguous. Use one of: ${j.map((K)=>K.id).join(", ")}`:`Skill "${W}" not found.`;let V=j[0].skill,H=J?.trim(),B=H?`
|
|
579
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,J0()])}}function sP($){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 m5,v5;function oP($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;yQ(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function tP($){await $.reconcileDeadSessions?.().catch(()=>{})}function KA($){try{let Z=new L1;return Z.init(),new z1(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),GA($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new ZX(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function BA($,Z,Q){return new T1({sessionService:Q??$.sessionService??KA($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function XX($){if(m5)return m5;if(v5)return await v5;return v5=(async()=>{return m5=KA($),await tP(m5),m5})().finally(()=>{v5=void 0}),await v5}async function V4($){let Z=h0($.distinctId);$.telemetry?.setDistinctId(Z);let Q=sP($);if(oP(Q,$),Q==="remote"){let W=$.remote?.endpoint?.trim();if(!W)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:W}),new $4({endpoint:W,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let W=$.hub?.endpoint?.trim(),J=W||await y2({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!J)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:J,explicitEndpoint:W||void 0}),new s1({url:J,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Q==="auto"){let W=await P5({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(W){$.logger?.log("Using discovered local hub runtime host",{url:W});let J=new s1({url:W,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await J.connect(),J}catch(X){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:X}),GA($.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"}),BA($,Z)}return BA($,Z)}var zA={};N(zA,{createCheckpointComparePlan:()=>lQ,compareCheckpointToWorkspace:()=>c5,buildCheckpointWorkspaceDiff:()=>pQ});import{execFile as ZS}from"node:child_process";import*as LA from"node:fs/promises";import*as G4 from"node:path";import{promisify as QS}from"node:util";var UA={};N(UA,{trimMessagesToCheckpoint:()=>fA,trimMessagesBeforeCheckpoint:()=>jX,readSessionCheckpointHistory:()=>I2,findCheckpointForRun:()=>B4,createRestoredCheckpointMetadata:()=>YX,createCheckpointRestorePlan:()=>VX,applyCheckpointToWorktree:()=>HX});import{execFile as eP}from"node:child_process";import{promisify as $S}from"node:util";var H4=$S(eP);function I2($){let Z=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(Z?.history)?Z.history:[]).filter((W)=>!!W&&typeof W==="object"&&!Array.isArray(W)).flatMap((W)=>{let J=String(W.ref??"").trim(),X=Number(W.createdAt??0),Y=Number(W.runCount??0);if(J.length===0||!Number.isFinite(X)||!Number.isInteger(Y)||Y<1)return[];let j=W.kind==="stash"||W.kind==="commit"?W.kind:void 0;return[{ref:J,createdAt:X,runCount:Y,...j?{kind:j}:{}}]})}function YX($,Z){let Q=I2($).filter((J)=>J.runCount<=Z),W=Q.at(-1);return W?{latest:W,history:Q}:void 0}function B4($,Z){return $.reduce((Q,W)=>{if(W.runCount>Z)return Q;if(!Q||W.runCount>Q.runCount)return W;return Q},void 0)}function AA($,Z){let Q=0;for(let W=0;W<$.length;W+=1){let J=$[W];if(J?.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"?J.metadata:void 0)?.kind==="recovery_notice")continue;if(Q+=1,Q===Z)return W}throw Error(`Could not find user message for checkpoint run ${Z}`)}function fA($,Z){let Q=AA($,Z);return $.slice(0,Q+1)}function jX($,Z){let Q=AA($,Z);return $.slice(0,Q)}function VX($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=B4(I2($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:W,...$.restoreMessages!==!1?{messages:fA($.messages??[],Z)}:{}}}async function HX($,Z){if((await H4("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await H4("git",["-C",$,"cat-file","-e",`${Z.ref}^{commit}`],{windowsHide:!0}),await H4("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await H4("git",["-C",$,"clean","-fd"],{windowsHide:!0}),Z.kind==="commit"){await H4("git",["-C",$,"reset","--hard",Z.ref],{windowsHide:!0});return}await H4("git",["-C",$,"stash","apply",Z.ref],{windowsHide:!0})}var WS=QS(ZS),JS=52428800;async function dQ($,Z){let{stdout:Q}=await WS("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:JS,encoding:"utf8"});return Q}function DA($){return $.split("\x00").filter(Boolean)}function _A($,Z){let Q=G4.resolve($,Z),W=G4.relative($,Q);if(W.startsWith("..")||G4.isAbsolute(W))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function XS($,Z,Q){try{return await dQ($,["show",`${Z}:${Q}`])}catch{return""}}async function YS($,Z){try{return await LA.readFile(_A($,Z),"utf8")}catch{return""}}async function jS($,Z){await dQ($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,W]=await Promise.all([dQ($,["diff","--name-only","-z",Z.ref,"--"]),dQ($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...DA(Q),...DA(W)])].sort((X,Y)=>X.localeCompare(Y))}function lQ($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=B4(I2($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Q,cwd:W}}async function pQ($,Z){let Q=await jS($,Z);return(await Promise.all(Q.map(async(J)=>{let[X,Y]=await Promise.all([XS($,Z.ref,J),YS($,J)]);return{filePath:_A($,J),leftContent:X,rightContent:Y}}))).filter((J)=>J.leftContent!==J.rightContent)}async function c5($){let Z=lQ($),Q=await pQ(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}var qA={};N(qA,{NoOpFeatureFlagsProvider:()=>g2,FeatureFlagsService:()=>x2});import{existsSync as VS,mkdirSync as HS,readFileSync as BS,writeFileSync as GS}from"node:fs";import{dirname as KS}from"node:path";import{FEATURE_FLAGS as TA,FeatureFlagDefaultValue as BX}from"@cline/shared";var FS=3600000,AS=604800000,OA=1;class x2{provider;telemetry;logger;cacheTtlMs;cacheFilePath;persistentCacheMaxAgeMs;context;cache=new Map;cacheInfo={updateTime:0,userId:null};constructor($){this.provider=$.provider,this.telemetry=$.telemetry,this.logger=$.logger,this.cacheTtlMs=$.cacheTtlMs??FS,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??AS,this.context={...$.context??{}},this.hydrateFromPersistentCache()}setContext($){this.context={...$}}hydrateCache($){this.cacheInfo={updateTime:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload},this.rebuildCacheFromSnapshot($.flagsPayload)}getCacheSnapshot(){return{updateTime:this.cacheInfo.updateTime,userId:this.cacheInfo.userId,flagsPayload:this.cacheInfo.flagsPayload}}async poll($){let Z=$??this.context.userId??null,Q=Date.now();if(Q-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===Z)return}let W=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:Z||null};try{let J=await this.provider.getAllFlagsAndPayloads({flagKeys:TA.length>0?TA:void 0,context:{...this.context,userId:Z}});if(this.cacheInfo.userId!==Z)return;this.cacheInfo.flagsPayload=J,this.rebuildCacheFromSnapshot(J),this.writePersistentCache()}catch(J){if(this.cacheInfo.userId!==Z)return;throw this.cacheInfo=W.updateTime?W:{updateTime:0,userId:null},this.logger?.error?.("Error polling SDK feature flags",{error:J}),J}}hydrateFromPersistentCache(){let $=this.readPersistentCache();if($)this.hydrateCache($)}isFeatureFlagPayload($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every((Z)=>this.isFeatureFlagPayload(Z));if(typeof $==="object")return Object.values($).every((Z)=>this.isFeatureFlagPayload(Z));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=Object.entries($).filter(([,W])=>this.isFeatureFlagPayload(W));if(Z.length===0)return;let Q={};for(let[W,J]of Z)Q[W]=J;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!VS(this.cacheFilePath))return;let $=JSON.parse(BS(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==OA||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;HS(KS(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:OA,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};GS(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
|
|
580
|
+
`,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let Z=new Map;for(let Q of this.getReturnedFlagKeys($)){let W=this.getFeatureFlag(Q);Z.set(Q,W??!1)}this.cache=Z}getFeatureFlag($){try{let Z=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],W=Z??Q??BX[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==W)this.telemetry?.capture({event:g.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return W}catch(Z){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:Z}),BX[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??BX[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,Z){if(process.env.IS_TEST==="true")this.cache.set($,Z)}async dispose(){await this.provider.dispose()}}class g2{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}Z4();class u5{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,Z,Q,W,J,X,Y,j,V,H){this.clientName=Z,this.runtimeAddress=Q,this.host=$,this.prepare=W,this.capabilities=J,this.logger=X,this.telemetry=Y,this.distinctId=j,this.featureFlags=V,this.settings=qK($),this.pendingPrompts=MK($),this.automation=new x3(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=H?new M5({workspaceRoot:H.workspaceRoot??process.cwd(),specs:{cronSpecsDir:H.cronSpecsDir??H.cronDir,scope:DG(H.cronScope),workspaceRoot:H.workspaceRoot},runtimeHandlers:LG({host:$,getExtensionContext:()=>WQ({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:H.dbPath,logger:H.logger,pollIntervalMs:H.pollIntervalMs,claimLeaseSeconds:H.claimLeaseSeconds,globalMaxConcurrency:H.globalMaxConcurrency,watcherDebounceMs:H.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((B)=>{if(B.type!=="ended")return;this.disposeSessionBootstrap(B.payload.sessionId)})}static async create($={}){let Z=h0($.distinctId),Q=q0($.capabilities),W={...$,capabilities:Q,distinctId:Z},J=await V4(W),X=UG($.automation),Y=$.featureFlags||new x2({provider:new g2,telemetry:$.telemetry,logger:$.logger,context:{distinctId:Z,clientName:$.clientName}}),j=new u5(J,$.clientName,J.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,Z,Y,X?{...X,logger:$.logger}:void 0);if(X&&X.autoStart!==!1)await j.automation.start();return j}async disposeSessionBootstrap($){let Z=this.activeSessionBootstraps.get($);if(!Z)return;this.activeSessionBootstraps.delete($),await Promise.resolve(Z.dispose?.())}async start($){let Z=EK($),Q=await this.prepare?.(Z);try{let W=Q?await Q.applyToStartSessionInput(Z):Z,J=await this.host.startSession(ZJ(W,{defaultCapabilities:this.capabilities,withExtensionContext:(X)=>WQ({automationService:this.automationService,automation:this.automation,context:X,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Q)if(await this.host.getSession(J.sessionId))this.activeSessionBootstraps.set(J.sessionId,Q);else await Promise.resolve(Q.dispose?.());return NK({input:W,sessionId:J.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),J}catch(W){throw await Promise.resolve(Q?.dispose?.()),W}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let Z=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(Z.map((Q)=>this.disposeSessionBootstrap(Q)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await EQ(this.host,$);list=async($=200,Z={})=>await this.listHistory({...Z,limit:$});delete=async($)=>{let Z=await this.host.deleteSession($);if(Z)await this.disposeSessionBootstrap($);return Z};update=(...$)=>this.host.updateSession(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let Z=$.start?ZJ($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>WQ({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 c5({session:Q,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,Z){return this.host.subscribe($,Z)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}var RA={};N(RA,{resolvePluginSkillDirectoriesFromPaths:()=>u1,resolvePluginConfigSearchPaths:()=>b6,resolveAndLoadAgentPlugins:()=>N8,resolveAgentPluginPaths:()=>c1,loadAgentPluginsFromPathsWithDiagnostics:()=>K2,loadAgentPluginsFromPaths:()=>zZ,loadAgentPluginFromPath:()=>P6,discoverPluginModulePaths:()=>y6});var CA={};N(CA,{toHookConfigFileName:()=>I6,runSubprocessEvent:()=>K4,runHook:()=>A4,resolveHooksConfigSearchPaths:()=>h6,parseHookEventPayload:()=>F4,mergeAgentHooks:()=>U2,listHookConfigFiles:()=>q$,createSubprocessHooks:()=>nQ,createHookConfigFileHooks:()=>x6,createHookConfigFileExtension:()=>S8,createHookAuditHooks:()=>P8,createAgentHooksExtension:()=>C8,HookEventPayloadSchema:()=>iQ,HookEventNameSchema:()=>rQ,HookConfigFileName:()=>w8,HOOK_CONFIG_FILE_EVENT_MAP:()=>k6,HOOKS_CONFIG_DIRECTORY_NAME:()=>EZ});import{HookEventNameSchema as rQ,HookEventPayloadSchema as iQ,parseHookEventPayload as F4,resolveHookSessionContext as TS}from"@cline/shared";import{z as m2}from"zod";import{spawn as fS}from"node:child_process";import{augmentNodeCommandForDebug as US,withResolvedClineBuildEnv as DS}from"@cline/shared";function LS($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
|
|
581
|
+
`).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse subprocess stdout JSON"}}}function _S($,Z){let Q=$ instanceof Error?$:Error(String($)),W=Q,J=Z.join(" ");if(W.code==="EACCES")return Error(`Failed to execute hook command "${J}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return Error(`Failed to execute hook command "${J}": ${Q.message}`)}async function zS($,Z){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((W,J)=>{let X=(Y)=>{Q.off("error",X);let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y)};Q.once("error",X),Q.end(Z,(Y)=>{if(Q.off("error",X),Y){let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y);return}W()})})}async function K4($,Z){let Q=US(Z.command,{env:Z.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let W=!!Z.detached,J=fS(Q[0],Q.slice(1),{cwd:Z.cwd,env:DS(Z.env),stdio:W?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:W,windowsHide:!0}),X=new Promise((K)=>{J.once("spawn",()=>{try{Z.onSpawn?.({command:Q,pid:J.pid??void 0,detached:W})}catch{}K()})}),Y=new Promise((K,F)=>{J.once("error",(A)=>{F(_S(A,Q))})});if(await zS(J,JSON.stringify($)),W){await Promise.race([X,Y]),J.unref();return}if(!J.stdout||!J.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let j="",V="",H=!1,B;J.stdout.on("data",(K)=>{j+=K.toString()}),J.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((Z.timeoutMs??0)>0)B=setTimeout(()=>{H=!0,J.kill("SIGKILL")},Z.timeoutMs);J.once("close",(F)=>{if(B)clearTimeout(B);let{parsedJson:A,parseError:L}=LS(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:H})})});return await Promise.race([G,Y])}var OS=m2.object({contextModification:m2.string().optional(),cancel:m2.boolean().optional(),review:m2.boolean().optional(),errorMessage:m2.string().optional(),context:m2.string().optional(),overrideInput:m2.unknown().optional()}).passthrough();var qS=["agent","hook"];async function A4($,Z={}){let Q=Z.command??qS;return await K4($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function NA($){return $ instanceof Error?$:Error(String($))}function MS($){if(!$||typeof $!=="object")return;let Z=OS.safeParse($);if(!Z.success)return;let Q=Z.data;if(!(("cancel"in Q)||("review"in Q)||("context"in Q)||("contextModification"in Q)||("overrideInput"in Q)||("errorMessage"in Q)))return;let J=typeof Q.context==="string"?Q.context:typeof Q.contextModification==="string"?Q.contextModification:typeof Q.errorMessage==="string"&&Q.errorMessage.length>0?Q.errorMessage:void 0;return{cancel:typeof Q.cancel==="boolean"?Q.cancel:void 0,review:typeof Q.review==="boolean"?Q.review:void 0,context:J,overrideInput:Object.hasOwn(Q,"overrideInput")?Q.overrideInput:void 0}}function EA($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W;else Z[Q]=JSON.stringify(W);return Z}function e1($,Z,Q){let W=Q.env??process.env,J=W.CLINE_USER_ID?.trim()||W.USER?.trim()||"unknown",X=Q.cwd||process.cwd();return{clineVersion:W.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:Z.conversationId,sessionContext:TS(Q.sessionContext,{hookName:$,conversationId:Z.conversationId,agentId:Z.agentId,parentAgentId:Z.parentAgentId}),workspaceRoots:X?[X]:[],workspaceInfo:Q.workspaceInfo,userId:J,agent_id:Z.agentId,parent_agent_id:Z.parentAgentId}}function RS($){return{name:$.name,message:$.message,stack:$.stack}}function ES($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function NS($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function CS($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function wS($){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 PS($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}async function v2($,Z){try{let Q=await A4($,{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?.(NA(Q),$)}}function nQ($={}){return{hooks:{beforeRun:async(j)=>{let V=NS(j);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let B={...e1("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await v2(B,$)}else{let B={...e1("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await v2(B,$)}return},beforeTool:async(j)=>{let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...e1("tool_call",V,$),hookName:"tool_call",iteration:j.snapshot.iteration,tool_call:{id:j.toolCall.toolCallId,name:j.toolCall.toolName,input:j.input},preToolUse:{toolName:j.toolCall.toolName,parameters:EA(j.input)}};try{let B=await A4(H,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:H,result:B,detached:!1}),B?.timedOut)throw Error("tool_call hook command timed out");if(B?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${B.parseError}`);return PS(MS(B?.parsedJson))}catch(B){$.onDispatchError?.(NA(B),H);return}},afterTool:async(j)=>{let V=wS(j),H={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},B={...e1("tool_result",H,$),hookName:"tool_result",iteration:j.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:EA(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await v2(B,$);return},afterRun:async({snapshot:j,result:V})=>{let H={agentId:j.agentId,conversationId:j.conversationId??j.runId??j.agentId,parentAgentId:j.parentAgentId??null};if(V.status==="completed"){let K={...e1("agent_end",H,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await v2(K,$);return}let B=V.status==="aborted"||ES(V.error?.message)?"agent_abort":"agent_error",G=B==="agent_error"?{...e1(B,H,$),hookName:B,iteration:V.iterations,error:RS(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...e1(B,H,$),hookName:B,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await v2(G,$)},onEvent:async(j)=>{if(j.type!=="message-added"||j.message.role!=="user")return;let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...e1("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:CS(j.message.content),attachments:[]}};await v2(H,$)}},shutdown:async({agentId:j,conversationId:V,parentAgentId:H,reason:B})=>{let G={...e1("session_shutdown",{agentId:j,conversationId:V,parentAgentId:H},$),hookName:"session_shutdown",reason:B};await v2(G,$)}}}var mf={};N(mf,{writeHubDiscovery:()=>wQ,withHubStartupLock:()=>PQ,verifyHubConnection:()=>f1,truncateNotificationBody:()=>r5,toHubStatusUrl:()=>NJ,toHubHealthUrl:()=>SQ,stopLocalHubServerGracefully:()=>mJ,startHubWebSocketServer:()=>d2,startHubServer:()=>xf,spawnDetachedHubServerWithRetry:()=>o8,spawnDetachedHubServer:()=>yJ,sendHubCommand:()=>hA,restartLocalHubIfIdleAfterStartupTimeout:()=>IQ,resolveWorkspaceHubOwnerContext:()=>KF,resolveSharedHubOwnerContext:()=>y0,resolveProductionHubOwnerContext:()=>s0,resolveHubUrl:()=>fX,resolveHubOwnerContext:()=>n1,resolveHubEndpointOptions:()=>a0,resolveHubBuildId:()=>CQ,resolveDefaultHubPort:()=>s8,resolveDefaultHubPathname:()=>bJ,resolveDefaultHubHost:()=>SJ,resolveCompatibleLocalHubUrl:()=>P5,resolveClineDir:()=>VF,resolveClineDataDir:()=>P2,requestHubShutdown:()=>w5,rememberRecoverableLocalHubUrl:()=>k$,readHubDiscovery:()=>f0,readBearerToken:()=>X7,probeHubServer:()=>a1,probeHubConnection:()=>yA,prewarmDetachedHubServer:()=>yQ,normalizeHubWebSocketUrl:()=>I$,isLocalHubOrigin:()=>xX,isLocalHubHostName:()=>Y7,isHubReconnectableTransportError:()=>xJ,isHubCommandTimeoutError:()=>kQ,isDiscoveryFilePresent:()=>BF,ensureHubWebSocketServer:()=>j7,ensureHubServer:()=>gf,ensureDetachedHubServer:()=>LF,ensureCompatibleLocalHubUrl:()=>y2,createLocalHubScheduleRuntimeHandlers:()=>V7,createInMemoryHubOwnerContext:()=>HF,createHubServerUrl:()=>V1,createHubAuthToken:()=>NQ,createConfiguredTelemetryService:()=>$$,createConfiguredTelemetryHandle:()=>_4,connectToHub:()=>tQ,clearHubDiscovery:()=>b0,NodeHubClient:()=>H1,NativeHubTransportAdapter:()=>o5,HubUIClient:()=>LX,HubTransportError:()=>E0,HubSessionClient:()=>DX,HubServerTransport:()=>z4,HubScheduleService:()=>U4,HubScheduleCommandService:()=>f4,HubCommandError:()=>t8,DEFAULT_HUB_PORT:()=>wJ,DEFAULT_HUB_PATHNAME:()=>PJ,DEFAULT_HUB_HOST:()=>CJ,BrowserWebSocketHubAdapter:()=>s5});import{createSessionId as SS}from"@cline/shared";function o0($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function wA($,Z,Q){return{version:$.version,requestId:$.requestId??SS("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class f4{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return o0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return o0($,{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 o0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return o0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return o0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return o0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return o0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return o0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return o0($,{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 o0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return o0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return o0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return wA($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Z){return wA($,"schedule_command_failed",Z instanceof Error?Z.message:String(Z))}}toCreateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:Z}}toUpdateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:Z}}}function sQ($){return $?new Date($).getTime():void 0}function bS($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function aQ($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof Z?.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:sQ($.nextRunAt),lastRunAt:sQ($.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:bS($)}}function yS($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function GX($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:sQ($.startedAt),endedAt:sQ($.completedAt),status:yS($.status),errorMessage:$.error}}class U4{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new q5({dbPath:$.dbPath}),this.materializer=new L5({store:this.store}),this.runner=new _5({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(BJ($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return aQ(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?aQ(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>aQ(Z))}updateSchedule($,Z){if(Z.cronPattern!==void 0)BJ(Z.cronPattern);let Q=this.store.getHubSchedule($);if(!Q)return;let W=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot;if((Z.enabled??Q.enabled)&&!W)throw Error("workspaceRoot is required for enabled schedules");let X=this.store.updateHubSchedule($,{...Z,scheduleId:$});return X?aQ(X):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;await this.runner.tick();let Q=this.store.getRun(Z.runId)??Z;return GX(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),GX(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((J)=>{let X=Z??this.store.getSpec(J.specId);if(!X||X.source!=="hub-schedule")return;return GX(J,X.externalId)}).filter((J)=>{if(!J)return!1;return!$.status||J.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,W=0,J=0,X;for(let Y of Z){if(Y.status==="success"||Y.status==="completed")Q+=1;if(!X&&Y.status!=="success"&&Y.status!=="completed")X=Y;if(Y.startedAt&&Y.endedAt)J+=Y.endedAt-Y.startedAt,W+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:W>0?J/W/1000:0,lastFailure:X}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let Z=this.store.getSpec($.specId);if(!Z||Z.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:Z.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:Z.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+Z.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let Z={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(Z).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,W)=>String(Q.nextRunAt).localeCompare(String(W.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:W})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:W}))}}oQ();import{resolveClineBuildEnv as Qb}from"@cline/shared";function Wb($,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 Jb="cline-hub-auth.";function Xb($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function Yb($,Z){let Q=new URL($),W=new URL(Z);return Q.search="",Q.hash="",W.search="",W.hash="",Q.toString()===W.toString()}function bA(){return Qb()==="production"?s0():y0()}async function jb($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=bA(),W=await f0(Q.discoveryPath);if(W?.url&&Yb($.toString(),W.url))return W.authToken;return}async function fX($={}){let Z=a0($);if(!Xb($)){let Q=bA(),W=await f0(Q.discoveryPath);if(W?.url)return W.url}return V1(Z.host,Z.port,Z.pathname)}async function tQ($){return await new Promise((Z,Q)=>{(async()=>{let W=new URL($),J=await jb(W);W.hash="";let X=new WebSocket(W.toString(),J?[`${Jb}${J}`]:void 0),Y=new Map,j=0;X.addEventListener("open",()=>{Z({send(V){let H=V.requestId??`hub-client-${++j}`;return new Promise((B,G)=>{Y.set(H,{resolve:B,reject:G});let K={kind:"command",envelope:{...V,requestId:H}};X.send(JSON.stringify(K))})},close(){X.close()}})}),X.addEventListener("message",(V)=>{let H=JSON.parse(String(V.data));if(H.kind==="reply"&&H.envelope.requestId){let B=Y.get(H.envelope.requestId);if(B)Y.delete(H.envelope.requestId),B.resolve(H.envelope)}}),X.addEventListener("close",()=>{for(let V of Y.values())V.reject(Error("Hub connection closed"));Y.clear()}),X.addEventListener("error",(V)=>{Q(Wb(V,$))})})().catch(Q)})}async function yA($){try{return(await tQ($)).close(),!0}catch{return!1}}async function hA($,Z){let Q=await fX($),W=await tQ(Q);try{return await W.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{W.close()}}function UX($){return $?JSON.parse(JSON.stringify($)):{}}function eQ($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?UX(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 kA($,Z){return $.error?.message??`hub command failed: ${Z}`}function Vb($){let Z=UX($);if(typeof Z.error==="string"&&Z.error.trim())return{...Z,error:Z.error.trim()};let Q=Z.result&&typeof Z.result==="object"?Z.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...Z,error:Q.text.trim()};let W=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof W?.message==="string"&&W.message.trim())return{...Z,error:W.message.trim()};return Z}function IA($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function Hb($){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 Bb($){let Z=UX($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||IA(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||IA(Z)||"",eventType:"schedule.execution.failed",payload:Z};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:Z};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:Z};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:Z};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:Z};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:Z};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:Z};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:Z};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:Z};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:Vb($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class DX{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new H1({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=eQ(Z.payload);if(!Q?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}}}async sendRuntimeSession($,Z,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:Z.prompt,mode:Z.config.mode,attachments:Z.attachments,delivery:Z.delivery,timeoutSeconds:Z.config.timeoutSeconds},$,Q)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(i1(Q))return;throw Q}return eQ(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(kA(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async restore($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let W=$.config,J=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.workspaceRoot,cwd:W.cwd,sessionConfig:{providerId:W.provider,modelId:W.model,apiKey:W.apiKey,cwd:W.cwd??W.workspaceRoot,workspaceRoot:W.workspaceRoot,systemPrompt:W.systemPrompt??"",mode:W.mode??"act",rules:W.rules,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawnAgent:W.enableSpawn!==!1,enableAgentTeams:W.enableTeams!==!1,disableMcpSettingsTools:W.disableMcpSettingsTools,missionLogIntervalSteps:W.missionStepInterval,missionLogIntervalMs:W.missionTimeIntervalMs},metadata:{source:W.source??"cli",provider:W.provider,model:W.model,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,prompt:void 0,interactive:W.interactive!==!1},runtimeOptions:{mode:W.mode,systemPrompt:W.systemPrompt,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,autoApproveTools:W.autoApproveTools,configExtensions:W.configExtensions},modelSelection:{provider:W.provider,model:W.model,apiKey:W.apiKey},toolPolicies:W.toolPolicies}:{}},Z);if(!J.ok)throw Error(kA(J,"session.restore"));let X=eQ(J.payload);if(Q&&!X?.sessionId)throw Error("hub checkpoint restore returned no session id");let Y=Array.isArray(J.payload?.messages)?J.payload.messages:void 0,j=Hb(J.payload);return{sessionId:X?.sessionId,startResult:X?.sessionId?{sessionId:X.sessionId,manifestPath:"",messagesPath:X.messagesPath??""}:void 0,...Y?{messages:Y}:{},checkpoint:j}}async listSessions($){await this.ensureMetadataApplied();let Z=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(Z.payload?.sessions)?Z.payload?.sessions:[]).map((W)=>eQ({session:W})).filter((W)=>Boolean(W?.sessionId))}async deleteSession($,Z=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:Z})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,Z){let Q=new Set(($.sessionIds??[]).map((J)=>J.trim()).filter(Boolean)),W=this.client.subscribe((J)=>{let X=Bb(J);if(!X)return;if(Q.size>0&&!Q.has(X.sessionId))return;Z.onEvent?.(X)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),W}streamTeamProgress($,Z){let Q=this.client.subscribe((W)=>{if(W.event!=="team.progress"||!W.payload)return;Z.onProjection?.(W.payload)});return this.ensureMetadataApplied().catch((W)=>{Z.onError?.(W instanceof Error?W:Error(String(W)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list");return Array.isArray(Z.payload?.schedules)?Z.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,Z){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...Z})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,Z){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:Z});return Array.isArray(Q.payload?.executions)?Q.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(Z.payload?.upcoming)?Z.payload?.upcoming:[]}}class LX{client;constructor($){this.client=new H1({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{resolveClineBuildEnv as kf}from"@cline/shared";function Gb($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
|
|
582
|
+
`).trim()||void 0}var xA=120,_X="...";function r5($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=xA)return Z;let Q=xA-Buffer.byteLength(_X,"utf8");if(Q<=0)return _X;let W="";for(let J of Z){if(Buffer.byteLength(W+J,"utf8")>Q)break;W+=J}return`${W}${_X}`}async function gA($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await h$(Q)].reverse().find((V)=>V.role==="assistant"),X=J?Gb(J.content):void 0,Y=$?.workspaceRoot?.trim()||"workspace",j=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():Y;return{title:`Task completed (${Z})`,body:r5(X&&X.length>0?X:j.length>0?j:Y),severity:"info"}}import{captureSdkError as J7,createSessionId as By}from"@cline/shared";import{createSessionId as fb}from"@cline/shared";import{createSessionId as Ab}from"@cline/shared";function Kb($){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 Fb($){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 $7($,Z,Q,W){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:Kb($.status),participants:Z?[...Z.participants.values()]:[],metadata:Fb($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Q?{usage:{...Q}}:{},...W?{aggregateUsage:{...W}}:{}}}function c($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function x($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function Z7($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function k0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function c2($,Z,Q){return{version:"v1",event:$,eventId:Ab("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function t0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let W=await $.sessionHost.getAccumulatedUsage?.(Z);return $7(Q,$.sessionState.get(Z),W?.usage,W?.aggregateUsage)}async function e0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[W,J]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return U1({session:Q,messages:W,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function Q7($,Z,Q,W,J={}){let X=$.sessionState.get(Z);if(X){if(J.interactive!==void 0)X.interactive=J.interactive;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:W});return X}let Y={createdByClientId:Q,interactive:J.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:W}]])};return $.sessionState.set(Z,Y),Y}async function zX($,Z){let Q=fb("approval_"),W=Z.sessionId;if($.sessionState.get(W)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((X)=>{$.pendingApprovals.set(Q,{sessionId:W,resolve:X}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:Z.sessionId,agentId:Z.agentId,conversationId:Z.conversationId,iteration:Z.iteration,toolCallId:Z.toolCallId,toolName:Z.toolName,inputJson:JSON.stringify(Z.input??null),policy:Z.policy},W))})}function TX($,Z,Q){let W=$.pendingApprovals.get(Z);if(!W)return;return $.pendingApprovals.delete(Z),W.resolve(Q),{sessionId:W.sessionId}}function OX($,Z,Q){let W=0;for(let[J,X]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:J,sessionId:X.sessionId}))continue;$.pendingApprovals.delete(J),X.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:J,approved:!1,cancelled:!0,reason:Q},X.sessionId)),W+=1}return W}async function mA($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return x(Z,"approval_not_found",`Unknown approval: ${Q}`);let J=typeof Z.payload?.reason==="string"?Z.payload.reason:Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)&&typeof Z.payload.payload.reason==="string"?Z.payload.payload.reason:void 0,X=Z.payload?.approved===!0,Y=TX($,Q,{approved:X,reason:J});if(!Y)return x(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:X,reason:J},Y.sessionId)),c(Z,{approvalId:Q,approved:X})}import{createSessionId as Lb}from"@cline/shared";function Ub($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var vA={debug:10,info:20,warn:30,error:40,silent:50};function Db(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function u($,Z,Q={}){if(vA[$]<vA[Db()])return;let W=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([J,X])=>[J,Ub(X)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${W}`);return}console.log(`[hub] ${W}`)}function qX($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);u("error",$,{error:Q})}async function cA($,Z,Q,W,J,X){let Y=Lb("capreq_"),j=performance.now();return u("info","capability.request.start",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J}),await new Promise((V,H)=>{$.pendingCapabilityRequests.set(Y,{sessionId:Z,targetClientId:J,capabilityName:Q,onProgress:X,resolve:(B)=>{if(u(B.ok?"info":"warn","capability.request.end",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J,ok:B.ok,error:B.error,durationMs:Math.round(performance.now()-j)}),!B.ok){H(Error(B.error||`Capability ${Q} was rejected by ${J}.`));return}V(B.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:Y,targetClientId:J,capabilityName:Q,payload:W},Z)),u("info","capability.request.published",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J})})}function uA($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);if((Z.clientId?.trim()||"")!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return W.onProgress?.(X),c(Z,{requestId:Q})}function m$($,Z,Q){let W=0;for(let[J,X]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:J,...X}))continue;$.pendingCapabilityRequests.delete(J),u("warn","capability.request.cancelled",{requestId:J,sessionId:X.sessionId,capabilityName:X.capabilityName,targetClientId:X.targetClientId,reason:Q}),X.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:X.capabilityName,targetClientId:X.targetClientId,ok:!1,cancelled:!0,error:Q},X.sessionId)),W+=1}return W}async function dA($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",W=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",J=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!W||!J)return x(Z,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{},Y=await $.requestCapability(Q,W,X,J);return c(Z,Y)}catch(X){return x(Z,"capability_request_failed",X instanceof Error?X.message:String(X))}}function lA($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);let J=Z.clientId?.trim()||"";if(J!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);$.pendingCapabilityRequests.delete(Q);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,Y=typeof Z.payload?.error==="string"?Z.payload.error:void 0,j=Z.payload?.ok===!0;return u(j?"info":"warn","capability.respond",{requestId:Q,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,error:Y}),W.resolve({ok:j,payload:X,error:Y}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,payload:X,error:Y},W.sessionId)),c(Z,{requestId:Q,ok:j})}import{createSessionId as _b}from"@cline/shared";function pA($,Z){let Q=Z.payload,W=Q?.clientId?.trim()||Z.clientId?.trim()||_b("client_");return $.clients.set(W,{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,actorKind:Q?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Q?.transport??"native",capabilities:Q?.capabilities??[],metadata:Q?.metadata,workspaceContext:Q?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),c(Z,{clientId:W})}function rA($,Z){let Q=Z.clientId?.trim(),W=Q?$.clients.get(Q):void 0;if(!Q||!W)return x(Z,"client_not_found","Client is not registered with this hub.");let J=Z7(Z.payload?.metadata);if(W.lastSeenAt=Date.now(),J)W.metadata=JSON.parse(JSON.stringify(J));return c(Z)}function iA($,Z,Q){let W=Z.clientId?.trim();if(W)$.clients.delete(W),Q(W),$.publish($.buildEvent("hub.client.disconnected",{clientId:W}));return c(Z)}function nA($,Z){return c(Z,{clients:[...$.clients.values()]})}L0();import{existsSync as oA,mkdirSync as zb,readdirSync as Tb,readFileSync as Ob,rmSync as qb,writeFileSync as Mb}from"node:fs";import{dirname as Rb,join as aA}from"node:path";import{CONNECTOR_PLATFORMS as Eb,connectorChannelsFromPlatforms as Nb,listConnectorCatalog as tA,shouldIncludeConnectorField as Cb}from"@cline/shared";import{resolveConnectorDataDir as wb,resolveConnectorSettingsPath as RX}from"@cline/shared/storage";var Pb=1,sA={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},Sb={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 v$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function i5($){return typeof $==="string"?$.trim():void 0}function eA($){if(!oA($))return;try{let Z=JSON.parse(Ob($,"utf8"));return v$(Z)?Z:void 0}catch{return}}function EX(){let $=eA(RX()),Z=v$($?.connectors)?$.connectors:{},Q={};for(let[W,J]of Object.entries(Z)){if(!v$(J))continue;let X=i5(J.type),Y=i5(J.configuredAt),j=i5(J.updatedAt);if(!X||!Y||!j)continue;let V=W7(J.values),H=v$(J.security)?{enabled:J.security.enabled===!0,values:W7(J.security.values)}:void 0;Q[W]={type:X,values:V,security:H,configuredAt:Y,updatedAt:j}}return{version:Pb,connectors:Q}}function $f($){let Z=RX();zb(Rb(Z),{recursive:!0}),Mb(Z,`${JSON.stringify($,null,2)}
|
|
583
|
+
`,"utf8")}function W7($){if(!v$($))return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W.trim();return Z}function bb($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function yb($){let Z=aA(wb(),$);if(!oA(Z))return[];return Tb(Z).filter((Q)=>Q.endsWith(".json")&&!Q.endsWith(".threads.json")).map((Q)=>aA(Z,Q))}function hb($,Z,Q){let W=Z.botUsername??Z.userName??Z.applicationId??Z.phoneNumberId??String(Q);return`${$}:${W}`}function kb($,Z){let Q=eA(Z);if(!Q)return;let W=typeof Q.pid==="number"?Q.pid:void 0,J=typeof Q.hubUrl==="string"?Q.hubUrl:typeof Q.rpcAddress==="string"?Q.rpcAddress:void 0;if(!W||!J||!bb(W))return;let X=Sb[$];if(!X)return;let Y={};for(let j of X.required){let V=sA[j](Q);if(!V||typeof V==="string"&&!V.trim())return;Y[j]=V}for(let j of X.optional){let V=sA[j](Q);if(V!==void 0)Y[j]=V}return{id:hb($,Y,W),type:$,pid:W,hubUrl:J,...Y}}function Ib(){let $=[];for(let{name:Z}of tA())for(let Q of yb(Z)){let W=kb(Z,Q);if(W)$.push(W)}return $.sort((Z,Q)=>{if(Z.type!==Q.type)return Z.type.localeCompare(Q.type);let W=Z.botUsername??Z.userName??"",J=Q.botUsername??Q.userName??"";return W.localeCompare(J)})}function xb(){let $=EX();return Object.entries($.connectors).map(([Z,Q])=>({id:Z,type:Q.type,configuredAt:Q.configuredAt,updatedAt:Q.updatedAt})).sort((Z,Q)=>Z.type.localeCompare(Q.type))}function NX(){return{available:Nb(),active:Ib(),configured:xb()}}function gb($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function mb($,Z){let Q={};for(let J of $.fields)Q[J.flag]=Z[J.flag]??J.initialValue??"";let W={};for(let J of $.fields){if(!Cb(J,Q))continue;gb(J,Q),W[J.flag]=Q[J.flag]}return W}function vb($){if(!v$($))throw Error("connector.configure payload must be an object.");let Z=i5($.channel);if(!Z)throw Error("channel is required");let Q=Eb.find((K)=>K.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(tA().map((K)=>K.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let J=W7($.values),X=mb(Q,J),Y=v$($.security)?$.security:{},j=Y.enabled===!0,V=W7(Y.values);if(j&&Q.security)for(let K of Q.security.fields){let F=V[K.key];if(!F)throw Error(K.requiredMessage);let A=K.validate?.(F);if(A)throw Error(A)}let H=EX(),B=new Date().toISOString(),G=H.connectors[Z];return H.connectors[Z]={type:Z,values:X,security:j?{enabled:!0,values:V}:{enabled:!1,values:{}},configuredAt:G?.configuredAt??B,updatedAt:B},$f(H),NX()}function cb($){if(!v$($))throw Error("connector.delete_config payload must be an object.");let Z=i5($.channel);if(!Z)throw Error("channel is required");let Q=EX();if(delete Q.connectors[Z],Object.keys(Q.connectors).length>0)$f(Q);else qb(RX(),{force:!0});return NX()}function ub($){return $==="connector.configure"||$==="connector.delete_config"}function MX($,Z,Q){if(!ub(Z.command))return;e2($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function Zf($,Z){try{if(Z.command==="connector.channels")return c(Z,NX());if(Z.command==="connector.configure"){let Q=vb(Z.payload);return MX($,Z,!0),c(Z,Q)}if(Z.command==="connector.delete_config"){let Q=cb(Z.payload);return MX($,Z,!0),c(Z,Q)}return x(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return MX($,Z,!1),x(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var db=30000;function lb($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function pb($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function rb($,Z,Q){let W=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return x($,E2,W)}function ib($){return $?$:void 0}function nb($){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 ab($,Z,Q,W){let J=performance.now(),X=!1,Y={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:W},j=setInterval(()=>{if(X)return;let B=Math.round(performance.now()-J);u("warn","run.heartbeat",{...Y,elapsedMs:B}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:B,...W?{timeoutMs:W}:{}},Q.sessionId))},db),V=$.sessionHost.runTurn(Q);V.then((B)=>{if(!X)return;u("warn","run.late_end",{...Y,elapsedMs:Math.round(performance.now()-J),finishReason:B?.finishReason})},(B)=>{if(!X)return;u("error","run.late_error",{...Y,elapsedMs:Math.round(performance.now()-J),error:B})});let H;try{if(!W)return await V;return await Promise.race([V,new Promise((B,G)=>{H=setTimeout(()=>{let K=`Hub run ${Z.command} timed out after ${W}ms.`;X=!0,clearInterval(j),G(Error(K)),u("error","run.timeout",{...Y,elapsedMs:Math.round(performance.now()-J)}),OX($,(F)=>F.sessionId===Q.sessionId,K),m$($,(F)=>F.sessionId===Q.sessionId,K),$.sessionHost.abort(Q.sessionId,K).catch((F)=>{u("error","run.timeout_abort_failed",{...Y,error:F})})},W)})])}finally{if(X=!0,clearInterval(j),H)clearTimeout(H)}}async function Qf($,Z){let Q=k0(Z),W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.prompt==="string"?W.prompt:typeof W.input==="string"?W.input:"";if(!J.trim())return x(Z,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let X=W.attachments&&typeof W.attachments==="object"&&!Array.isArray(W.attachments)?W.attachments:void 0,Y=Array.isArray(X?.userFiles)?X.userFiles.filter((B)=>typeof B==="string"):void 0,j=nb(W);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let V;try{V=await ab($,Z,{sessionId:Q,prompt:J,mode:ib(W.mode),delivery:W.delivery==="queue"||W.delivery==="steer"?W.delivery:void 0,userImages:Array.isArray(X?.userImages)?X.userImages:void 0,userFiles:Y,timeoutMs:j},j)}catch(B){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(i1(B))return rb(Z,Q,B);throw $.publish($.buildEvent("run.failed",{reason:"error",error:B instanceof Error?B.message:String(B)},Q)),B}if(V){let B=await e0($,Q),G=pb(V);if($.publish($.buildEvent(lb(V.finishReason),{reason:V.finishReason,...G?{error:G}:{},result:V,...B?{snapshot:B}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let H=await e0($,Q);return c(Z,V||H?{...V?{result:V}:{},...H?{snapshot:H}:{}}:void 0)}async function Wf($,Z){let Q=k0(Z),W=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";OX($,(J)=>J.sessionId===Q,W);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(J){u("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:J})}finally{m$($,(J)=>J.sessionId===Q,W)}return c(Z,{applied:!0})}async function Jf($,Z){let Q=F4(Z.payload?.payload);if(!Q)return x(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),c(Z,{applied:!0})}async function Xf($,Z){switch(Z.type){case"chunk":return;case"agent_event":await sb($,Z);return;case"hook":if(Z.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:Z.payload.toolName},Z.payload.sessionId));else if(Z.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:Z.payload.toolName},Z.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:Z.payload.sessionId,summary:Z.payload.summary,lastEvent:Z.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,Z.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:Z.payload.sessionId,prompts:Z.payload.prompts},Z.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:Z.payload.id,prompt:Z.payload.prompt,delivery:Z.payload.delivery,attachmentCount:Z.payload.attachmentCount,userImages:Z.payload.userImages,userFiles:Z.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:Z.payload.sessionId,prompt:Q},Z.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:Z.payload.sessionId,snapshot:Z.payload.snapshot},Z.payload.sessionId));return;case"status":{let[Q,W]=await Promise.all([t0($,Z.payload.sessionId),e0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...W?{snapshot:W}:{}},Z.payload.sessionId));return}case"ended":await ob($,Z);return;default:return}}async function sb($,Z){let{sessionId:Q,event:W}=Z.payload;if(W.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:W.iteration},Q));return}if(W.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:W.iteration,hadToolCalls:W.hadToolCalls,toolCallCount:W.toolCallCount},Q));return}if(W.type==="content_start"){if(W.contentType==="text"&&typeof W.text==="string"&&W.text.length>0){$.publish($.buildEvent("assistant.delta",{text:W.text},Q));return}if(W.contentType==="reasoning"){if(W.redacted&&!W.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof W.reasoning==="string"&&W.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:W.reasoning,redacted:W.redacted===!0},Q));return}if(W.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:W.toolCallId,toolName:W.toolName,input:W.input},Q));return}}if(W.type==="content_end"){switch(W.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:W.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:W.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:W.toolCallId,toolName:W.toolName,output:W.output,error:W.error},Q));break}return}if(W.type==="usage"){let J;try{J=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{J=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:W.inputTokens,outputTokens:W.outputTokens,cacheReadTokens:W.cacheReadTokens??0,cacheWriteTokens:W.cacheWriteTokens??0,totalCost:W.cost??0},totals:{inputTokens:W.totalInputTokens,outputTokens:W.totalOutputTokens,cacheReadTokens:W.totalCacheReadTokens??0,cacheWriteTokens:W.totalCacheWriteTokens??0,totalCost:W.totalCost??0},usage:J?.usage,aggregateUsage:J?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":W.parentAgentId?"subagent":"lead",agentId:W.agentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(W.type==="done")$.publish($.buildEvent("agent.done",{reason:W.reason,text:W.text,iterations:W.iterations,usage:W.usage},Q))}async function ob($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),W=Q===Z.payload.reason||Q==="run.start.reply";if(W)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[J,X]=await Promise.all([t0($,Z.payload.sessionId),e0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let Y=await gA(J);$.publish($.buildEvent("ui.notify",Y,Z.payload.sessionId))}if(W)return;$.publish($.buildEvent(Z.payload.reason==="aborted"?"run.aborted":Z.payload.reason==="error"||Z.payload.reason==="failed"?"run.failed":"run.completed",{reason:Z.payload.reason,...X?{snapshot:X}:{}},Z.payload.sessionId))}import{createSessionId as Hf,parseRuntimeConfigExtensions as Bf}from"@cline/shared";var Yf={};N(Yf,{SessionVersioningService:()=>c$,SessionVersioningError:()=>I0});class I0 extends Error{code;constructor($,Z){super(Z);this.code=$;this.name="SessionVersioningError"}}function tb($){let Z=$.sessionId.trim();if(!Z)throw new I0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new I0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new I0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new I0("invalid_restore","checkpointRunCount must be a positive integer");return Z}class c${async restoreCheckpoint($){let Z=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,W=tb({sessionId:$.sessionId,restoreMessages:Z,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(W);if(!J)throw new I0("session_not_found",`Session ${W} not found`);let X=Z?await $.readMessages(W):void 0;if(Z&&X?.length===0)throw new I0("session_messages_not_found",`No messages found for session ${W}`);let Y=VX({session:J,messages:X,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:Z});if(Q)await($.applyWorkspaceCheckpoint??HX)(Y.cwd,Y.checkpoint);let j=U1({session:J,messages:X});if(!Z)return{checkpoint:Y.checkpoint,sourceSnapshot:j};let V=YX(J,$.checkpointRunCount),H=$.restore?.omitCheckpointMessageFromSession?jX(X??[],$.checkpointRunCount):Y.messages??[],B={sourceSession:J,sourceMessages:X,sourceSnapshot:j,plan:Y,restoredCheckpointMetadata:V,initialMessages:H,restoreMessages:Z,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new I0("invalid_restore","start is required when restore.messages is true");let G=$.buildStartInput?await $.buildStartInput(B,$.start):$.start,K=await $.startSession(G),F=$.getStartedSessionId?.(K);if(F)await($.retainCheckpointRefs??kB)(Y.cwd,F,V?.history??[]);let A=F&&$.readRestoredSession?await $.readRestoredSession(F):void 0;return{sessionId:F,startResult:K,messages:Y.messages,checkpoint:Y.checkpoint,sourceSnapshot:j,...A?{restoredSnapshot:U1({session:A,messages:H})}:{}}}}import{HUB_CHECKPOINT_CAPABILITY as ns,HUB_COMPACTION_CAPABILITY as as,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as ss,HUB_HOOK_CAPABILITY_PREFIX as os,HUB_MISTAKE_LIMIT_CAPABILITY as ts,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as es,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as $o,isHubToolExecutorName as eb}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as Xo,HUB_COMPACTION_CAPABILITY as Yo,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as jo,HUB_HOOK_CAPABILITY_PREFIX as Vo,HUB_MISTAKE_LIMIT_CAPABILITY as Ho,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Bo,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Go}from"@cline/shared";var $y=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function u2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function Zy($,Z){let Q=typeof $.name==="string"?$.name.trim():"",W=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",X=u2($.inputSchema);if(!Q||!W||!X||!J||Z.has(J))return;return Z.add(J),{kind:"tool",capabilityName:J,name:Q,description:W,inputSchema:X,...u2($.lifecycle)?{lifecycle:u2($.lifecycle)}:{}}}function wX($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let W of $){if(!W||typeof W!=="object"||Array.isArray(W))continue;let J=W,X=J.kind,Y=typeof J.capabilityName==="string"?J.capabilityName.trim():"";if(!Y||Q.has(Y))continue;if(X==="tool"){let j=Zy(J,Q);if(j)Z.push(j);continue}if(X==="toolExecutor"){let j=J.executor;if(!eb(j))continue;Q.add(Y),Z.push({kind:"toolExecutor",capabilityName:Y,executor:j});continue}if(X==="hook"){let j=typeof J.name==="string"?J.name.trim():"";if(!j)continue;Q.add(Y),Z.push({kind:"hook",capabilityName:Y,name:j});continue}if(X==="compaction"){Q.add(Y),Z.push({kind:"compaction",capabilityName:Y,...u2(J.config)?{config:u2(J.config)}:{}});continue}if(X==="checkpoint"){Q.add(Y),Z.push({kind:"checkpoint",capabilityName:Y,...u2(J.config)?{config:u2(J.config)}:{}});continue}if(X==="mistakeLimit"){Q.add(Y),Z.push({kind:"mistakeLimit",capabilityName:Y});continue}if(X==="userInstructionService")Q.add(Y),Z.push({kind:"userInstructionService",capabilityName:Y})}return Z}function Vf($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function Qy($){return Object.hasOwn($,"update")?$.update:$}function n5($){return $.trim().replace(/^\/+/,"").toLowerCase()}function Wy($){let Z=($??[]).map(n5).filter(Boolean);return Z.length>0?new Set(Z):void 0}function Jy($,Z,Q){if(!Q)return!0;let W=n5($),J=n5(Z),X=W.includes(":")?W.split(":").at(-1)??W:W,Y=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(W)||Q.has(J)||Q.has(X)||Q.has(Y)}function CX($,Z){let Q=Wy(Z);return $.records.skill.map((W)=>({id:W.id,name:W.item.name,description:"description"in W.item&&typeof W.item.description==="string"?W.item.description:void 0,disabled:W.item.disabled===!0,skill:W.item})).filter((W)=>Jy(W.id,W.name,Q))}function jf($,Z){let Q=async(W,J)=>{let X=n5(W),j=CX($,Z).filter((K)=>K.id===X||n5(K.name)===X||K.id.endsWith(`:${X}`)).filter((K)=>!K.disabled);if(j.length!==1)return j.length>1?`Skill "${W}" is ambiguous. Use one of: ${j.map((K)=>K.id).join(", ")}`:`Skill "${W}" not found.`;let V=j[0].skill,H=J?.trim(),B=H?`
|
|
584
584
|
<command-args>${H}</command-args>`:"",G=V.description?.trim()?`Description: ${V.description.trim()}
|
|
585
585
|
|
|
586
586
|
`:"";return`<command-name>${V.name}</command-name>${B}
|
|
587
587
|
<command-instructions>
|
|
588
588
|
${G}${V.instructions}
|
|
589
|
-
</command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>
|
|
589
|
+
</command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>CX($,Z).map(({skill:W,...J})=>J),enumerable:!0}),Q}function Xy($,Z,Q,W){let J={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},X=async()=>{let Y=await W($,Q.capabilityName,{},Z);if(Y?.snapshot)J=Y.snapshot};return{start:X,stop:()=>{},refreshType:async()=>{await X()},listRecords:(Y)=>[...J.records[Y]],listRuntimeCommands:()=>[...J.runtimeCommands],resolveRuntimeSlashCommand:(Y)=>{if(!Y.startsWith("/")||Y.length<2)return Y;let V=Y.match(/^\/(\S+)/)?.[1];if(!V)return Y;let H=J.runtimeCommands.find((B)=>B.name===V);return H?`${H.instructions}${Y.slice(V.length+1)}`:Y},hasConfiguredSkills:(Y)=>CX(J,Y).some((j)=>!j.disabled),createSkillsExecutor:(Y)=>jf(J,Y),createExtension:(Y)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[Y.includeRules?"rules":void 0,Y.registerSkillsTool?"tools":void 0,Y.includeSkills||Y.includeWorkflows?"commands":void 0].filter((j)=>Boolean(j))},setup(j){if(Y.includeRules)j.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>c8(J.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(Y.registerSkillsTool)j.registerTool(e$(jf(J,Y.allowedSkillNames)));for(let V of J.runtimeCommands.filter((H)=>H.kind==="skill"&&Y.includeSkills||H.kind==="workflow"&&Y.includeWorkflows))j.registerCommand({name:V.name,description:V.description,handler:(H)=>{let B=H.trim();return B?`${V.instructions}
|
|
590
590
|
|
|
591
|
-
${B}`:V.instructions}})}})}}function Qy($,Z,Q,W){let J=Q.map((X)=>[X.executor,async(...Y)=>{let j=Y.at(-1),V=Y.slice(0,-1);return(await W($,X.capabilityName,{executor:X.executor,args:V,context:Yf(j)},Z))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function Wy($,Z,Q,W){if(Q.length===0)return;return Q.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema,lifecycle:J.lifecycle,async execute(X,Y){return(await W($,J.capabilityName,{toolName:J.name,input:X,context:Yf(Y)},Z,Y.emitUpdate?(V)=>{Y.emitUpdate?.(tb(V))}:void 0))?.result}}))}function Jy($,Z,Q,W){let J=new Map(Q.map((Y)=>[Y.name,Y])),X={};for(let Y of sb){let j=J.get(Y);if(!j)continue;X[Y]=async(V)=>{return(await W($,j.capabilityName,{context:V},Z))?.control}}return Object.keys(X).length>0?X:void 0}function PX($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),W=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),X=$.contributions.find((V)=>V.kind==="checkpoint"),Y=$.contributions.find((V)=>V.kind==="mistakeLimit"),j=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:Qy($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...W.length>0?{hooks:Jy($.sessionId,$.targetClientId,W,$.requestCapability)}:{},...Q.length>0?{extraTools:Wy($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...J?{compaction:{...$.sessionConfig?.compaction??{},...J.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,J.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{checkpoint:{...$.sessionConfig?.checkpoint??{},...X.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...Y?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,Y.capabilityName,{context:V},$.targetClientId))?.result}}:{},...j?{userInstructionService:Zy($.sessionId,$.targetClientId,j,$.requestCapability)}:{}}}}var Hf="hubCapabilityOwnerClientId";function Bf($,Z){$[Hf]=Z}function Xy($){let Z=$?.[Hf];return typeof Z==="string"&&Z.trim()?Z.trim():void 0}async function Gf($,Z,Q){let W=performance.now(),J={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};u("info","session.create.begin",J);let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{},j=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0,V=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{};if(typeof j?.mode==="string")Y.mode=j.mode;else if(typeof V.mode==="string")Y.mode=V.mode;if(typeof j?.systemPrompt==="string")Y.systemPrompt=j.systemPrompt;else if(typeof V.systemPrompt==="string")Y.systemPrompt=V.systemPrompt;if(j?.checkpoint?.enabled===!0)Y.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)Y.checkpointEnabled=!0;let H=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},B=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():"";if(!B)return u("warn","session.create.invalid",{...J,reason:"missing_workspace_root"}),x(Z,"invalid_session_create","session.create requires workspaceRoot or cwd");let G=Z.clientId?.trim()||"hub-client",K=CX(V.clientContributions);if(u("info","session.create.contributions_parsed",{...J,clientId:G,workspaceRoot:B,cwd:typeof X.cwd==="string"?X.cwd:void 0,contributionCount:K.length}),K.length>0)Bf(Y,G);let A=(typeof j?.sessionId==="string"?j.sessionId.trim():"")||jf(),L=Vf(V.configExtensions);u("info","session.create.runtime_build.begin",{...J,sessionId:A,configExtensionCount:L?.length??0});let f=PX({sessionId:A,targetClientId:G,contributions:K,sessionConfig:j,requestCapability:$.requestCapability});u("info","session.create.start_session.begin",{...J,sessionId:A,provider:j?.providerId??(typeof H.provider==="string"?H.provider:typeof Y.provider==="string"?Y.provider:"hub"),model:j?.modelId??(typeof H.model==="string"?H.model:typeof Y.model==="string"?Y.model:"hub")});let D=await $.sessionHost.startSession({source:typeof Y.source==="string"?Y.source:void 0,interactive:Y.interactive!==!1,sessionMetadata:Object.keys(Y).length>0?Y:void 0,initialMessages:Array.isArray(X.initialMessages)?X.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:L,...f.localRuntime},capabilities:{toolExecutors:f.toolExecutors,requestToolApproval:Q},config:{...j??{},sessionId:A,providerId:j?.providerId??(typeof H.provider==="string"?H.provider:typeof Y.provider==="string"?Y.provider:"hub"),modelId:j?.modelId??(typeof H.model==="string"?H.model:typeof Y.model==="string"?Y.model:"hub"),apiKey:j?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:j?.cwd??(typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():B),workspaceRoot:j?.workspaceRoot??B,systemPrompt:j?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:j?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:j?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:j?.enableTools??V.enableTools!==!1,enableSpawnAgent:j?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:j?.enableAgentTeams??V.enableTeams!==!1,checkpoint:j?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:j?.teamName??(typeof Y.teamName==="string"?Y.teamName:void 0)},toolPolicies:X.toolPolicies&&typeof X.toolPolicies==="object"&&!Array.isArray(X.toolPolicies)?JSON.parse(JSON.stringify(X.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});u("info","session.create.start_session.end",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W),hasImmediateResult:!!D.result}),Z7($,D.sessionId,G,"creator",{interactive:Y.interactive!==!1}),u("info","session.create.read_records.begin",{...J,sessionId:D.sessionId});let[U,T]=await Promise.all([t0($,D.sessionId),e0($,D.sessionId)]);if(u("info","session.create.read_records.end",{...J,sessionId:D.sessionId,hasSession:!!U,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-W)}),U)$.publish($.buildEvent("session.created",{session:U,...T?{snapshot:T}:{}},D.sessionId));return u("info","session.create.reply",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W)}),c(Z,{session:U,...T?{snapshot:T}:{}})}async function Kf($,Z,Q){let W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.sessionId==="string"?W.sessionId.trim():Z.sessionId?.trim()||"",X=W.checkpointRunCount;if(!J)return x(Z,"invalid_restore","session.restore requires a session id");let Y=W.restore&&typeof W.restore==="object"?W.restore:{},j=Y.messages!==!1;if(typeof X!=="number")return x(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0;if(j&&!V)return x(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let H=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{},B=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{};if(typeof V?.mode==="string")B.mode=V.mode;else if(typeof H.mode==="string")B.mode=H.mode;if(typeof V?.systemPrompt==="string")B.systemPrompt=V.systemPrompt;else if(typeof H.systemPrompt==="string")B.systemPrompt=H.systemPrompt;if(V?.checkpoint?.enabled===!0)B.checkpointEnabled=!0;else if(H.checkpointEnabled===!0)B.checkpointEnabled=!0;let G=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},K=Z.clientId?.trim()||"hub-client",F=CX(H.clientContributions);if(F.length>0)Bf(B,K);let L=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||jf(),f=Vf(H.configExtensions),D=PX({sessionId:L,targetClientId:K,contributions:F,sessionConfig:V,requestCapability:$.requestCapability}),T=await new c$().restoreCheckpoint({sessionId:J,checkpointRunCount:X,restore:{messages:Y.messages,workspace:Y.workspace,omitCheckpointMessageFromSession:Y.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(E)=>$.sessionHost.getSession(E),readMessages:(E)=>$.sessionHost.readSessionMessages(E),buildStartInput:(E)=>{if(E.restoredCheckpointMetadata)B.checkpoint=E.restoredCheckpointMetadata;let C=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():E.sourceSession.workspaceRoot||E.sourceSession.cwd;return{source:typeof B.source==="string"?B.source:void 0,interactive:B.interactive!==!1,sessionMetadata:{...B,restoredFromSessionId:J,restoredCheckpointRunCount:X},initialMessages:E.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:f,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:L,providerId:V?.providerId??(typeof G.provider==="string"?G.provider:E.sourceSession.provider),modelId:V?.modelId??(typeof G.model==="string"?G.model:E.sourceSession.model),apiKey:V?.apiKey??(typeof G.apiKey==="string"?G.apiKey:""),cwd:V?.cwd??E.plan.cwd,workspaceRoot:V?.workspaceRoot??C,systemPrompt:V?.systemPrompt??(typeof H.systemPrompt==="string"?H.systemPrompt:""),mode:V?.mode??(H.mode==="plan"||H.mode==="yolo"?H.mode:"act"),maxIterations:V?.maxIterations??(typeof H.maxIterations==="number"?H.maxIterations:void 0),enableTools:V?.enableTools??H.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??H.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??H.enableTeams!==!1,checkpoint:V?.checkpoint??(H.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof B.teamName==="string"?B.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):H.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(E)=>$.sessionHost.startSession(E),getStartedSessionId:(E)=>E.sessionId,readRestoredSession:(E)=>$.sessionHost.getSession(E)});if(!j)return c(Z,{checkpoint:T.checkpoint});let O=T.startResult;if(!O)return x(Z,"restore_failed","Checkpoint restore did not start a session");Z7($,O.sessionId,K,"creator",{interactive:B.interactive!==!1});let[z,_]=await Promise.all([t0($,O.sessionId),e0($,O.sessionId)]);if(z)$.publish($.buildEvent("session.created",{session:z,..._?{snapshot:_}:{}},O.sessionId));return c(Z,{session:z,..._?{snapshot:_}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof I0)return x(Z,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return x(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function Ff($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_attach","session.attach requires a session id");Z7($,Q,Z.clientId?.trim()||"hub-client","participant");let W=await t0($,Q);if(W)$.publish($.buildEvent("session.attached",{session:W},Q));return W?c(Z,{session:W}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function Af($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_detach","session.detach requires a session id");let W=Z.clientId?.trim()||"hub-client",[J]=await Promise.all([t0($,Q)]),X=Xy(J?.metadata)??W,Y=$.sessionState.get(Q);if(Y){if(Y.participants.delete(W),Y.createdByClientId===W)Y.createdByClientId=X;if(Y.participants.size===0)$.sessionState.delete(Q)}m$($,(H)=>H.sessionId===Q&&H.targetClientId===W,`Capability owner client ${W} detached before request was resolved.`);let[j,V]=await Promise.all([t0($,Q),e0($,Q)]);return $.publish($.buildEvent("session.detached",j?{session:j,...V?{snapshot:V}:{},clientId:W}:{clientId:W},Q)),c(Z)}async function ff($,Z){let Q=k0(Z),W=Z.payload?.includeSnapshot===!0,[J,X]=await Promise.all([t0($,Q),W?e0($,Q):Promise.resolve(void 0)]);return J?c(Z,{session:J,...X?{snapshot:X}:{}}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function Uf($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_id","session.messages requires a session id");if(!await t0($,Q))return x(Z,"session_not_found",`Unknown session: ${Q}`);let J=await $.sessionHost.readSessionMessages(Q);return c(Z,{sessionId:Q,messages:J})}async function Df($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,J=(await $.sessionHost.listSessions(Q)).map((X)=>eQ(X,$.sessionState.get(X.sessionId)));return c(Z,{sessions:J})}async function Lf($,Z){let Q=k0(Z),W=$7(Z.payload?.metadata),J=await $.sessionHost.updateSession(Q,{metadata:W}),[X,Y]=await Promise.all([t0($,Q),e0($,Q)]);if(X)$.publish($.buildEvent("session.updated",{session:X,...Y?{snapshot:Y}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:J.updated,payload:{updated:J.updated,session:X,...Y?{snapshot:Y}:{}}}}async function _f($,Z){let Q=k0(Z),W=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),c(Z,{deleted:W})}async function zf($,Z){let Q=k0(Z),W=$.sessionHost.pendingPrompts;if(!W)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await W.list({sessionId:Q});return c(Z,{sessionId:Q,prompts:J})}async function Tf($,Z){let Q=k0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,X=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,Y=$.sessionHost.pendingPrompts;if(!Y)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await Y.update({sessionId:Q,promptId:W,prompt:J,delivery:X});return c(Z,j)}async function Of($,Z){let Q=k0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await J.delete({sessionId:Q,promptId:W});return c(Z,X)}function qf($){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 jy=new Set(["skills","workflows","rules","tools","mcp"]);function SX($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function a5($,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 Vy($,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 Mf($){if($===void 0)return{};if(!SX($))throw Error("settings.list payload must be an object.");return{cwd:a5($,"cwd"),workspaceRoot:a5($,"workspaceRoot"),availabilityContext:SX($.availabilityContext)?$.availabilityContext:void 0}}function Hy($){if(!SX($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!jy.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...Mf($),type:Z,id:a5($,"id"),path:a5($,"path"),name:a5($,"name"),enabled:Vy($,"enabled")}}class z4{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=Yy("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new z1({sessionService:new _1(new D1),fetch:$.fetch,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(Z)=>this.publish(Z),buildEvent:v2,requestCapability:(Z,Q,W,J,X)=>mA(this.ctx,Z,Q,W,J,X)},this.schedules=new U4({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let W=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!W)return;this.publish(v2(W,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new f4(this.schedules),this.settings=$.settingsService??new S$,$.cronOptions)this.cronService=new M5({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{Wf(this.ctx,Z).catch((Q)=>{qX("session event handling failed",Q),W7(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())TX(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(m$(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 W7(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 dA(this.ctx,$);case"client.update":return lA(this.ctx,$);case"client.unregister":return pA(this.ctx,$,(Z)=>{this.listeners.delete(Z),this.detachClientFromSessions(Z)});case"client.list":return rA(this.ctx,$);case"session.create":return await Gf(this.ctx,$,(Z)=>zX(this.ctx,Z));case"session.restore":return await Kf(this.ctx,$,(Z)=>zX(this.ctx,Z));case"session.attach":return await Ff(this.ctx,$);case"session.detach":return await Af(this.ctx,$);case"session.get":return await ff(this.ctx,$);case"session.messages":return await Uf(this.ctx,$);case"session.list":return await Df(this.ctx,$);case"session.update":return await Lf(this.ctx,$);case"session.pending_prompts":return await zf(this.ctx,$);case"session.update_pending_prompt":return await Tf(this.ctx,$);case"session.remove_pending_prompt":return await Of(this.ctx,$);case"session.delete":return await _f(this.ctx,$);case"session.hook":return await Qf(this.ctx,$);case"run.start":case"session.send_input":return await $f(this.ctx,$);case"run.abort":return await Zf(this.ctx,$);case"capability.request":return await cA(this.ctx,$);case"approval.respond":return await xA(this.ctx,$);case"capability.respond":return uA(this.ctx,$);case"capability.progress":return vA(this.ctx,$);case"ui.notify":return this.publish(v2("ui.notify",$.payload??{})),c($);case"ui.show_window":return this.publish(v2("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 eA(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=qf($.command);if(Q)this.publish(v2(Q,Z.payload))}return Z}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!By(Z.error.code))return;W7(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(Mf($.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(Hy($.payload));return this.publish(v2("settings.changed",{types:Z.changedTypes,snapshot:Z.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z.snapshot,changedTypes:Z.changedTypes}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:Z instanceof Error?Z.message:String(Z)}}}}subscribe($,Z,Q){let W=this.listeners.get($)??new Set,J={sessionId:Q?.sessionId,listener:Z};return W.add(J),this.listeners.set($,W),()=>{let X=this.listeners.get($);if(!X)return;if(X.delete(J),X.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries())if(Q.participants.delete($),Q.participants.size===0)this.sessionState.delete(Z);m$(this.ctx,(Z)=>Z.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let Z of this.listeners.values())for(let Q of Z){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(W){qX(`listener threw while publishing ${$.event}`,W),W7(this.options.telemetry,{component:"core",operation:"hub.publish",error:W,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function By($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as Ay}from"node:crypto";import fy from"node:http";import Uy from"node:net";import{URL as kX}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as Nf,HUB_CAPABILITIES as Dy,isHubProtocolCompatible as Ly,MAX_CLIENT_HUB_PROTOCOL_VERSION as wf,MIN_CLIENT_HUB_PROTOCOL_VERSION as Cf}from"@cline/shared";import{WebSocketServer as _y}from"ws";import{captureSdkError as Rf,HUB_COMMAND_SLOW_LOG_MS as Gy,resolveHubCommandTimeoutMs as Ky,safeJsonParse as Fy}from"@cline/shared";function bX($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function Ef($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}class s5{transport;telemetry;constructor($,Z){this.transport=$;this.telemetry=Z}attach($){let Z=new Map,Q=new Set,W=!1,J=(V)=>{try{$.send(JSON.stringify(V))}catch(H){console.error(`[hub] failed to send websocket frame: ${H instanceof Error?H.stack||H.message:String(H)}`)}},X=(V)=>{J({kind:"event",envelope:V})},Y=async(V)=>{try{let H=JSON.parse(V.data);switch(H.kind){case"command":{let B=performance.now(),G=!1,K=bX(H);u("info","command.start",K);let F=setTimeout(()=>{if(G)return;u("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-B)})},Gy),A=this.transport.command(H.envelope);A.then((O)=>{if(!G)return;u(O.ok?"warn":"error","command.late_end",{...K,elapsedMs:Math.round(performance.now()-B),ok:O.ok,errorCode:O.error?.code,errorMessage:O.error?.message})},(O)=>{if(!G)return;u("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-B),error:O})});let L=!1,f,D,U=Ky(H.envelope.command,H.envelope.timeoutMs);try{D=U===null?await A:await Promise.race([A,new Promise((O)=>{f=setTimeout(()=>{L=!0,Rf(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${H.envelope.command} did not complete within ${U}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:U}}),O(Ef(H,"hub_command_timeout",`Hub command ${H.envelope.command} did not complete within ${U}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${H.envelope.requestId}.`))},U)})])}catch(O){if(clearTimeout(F),f)clearTimeout(f);throw O}if(G=L,clearTimeout(F),f)clearTimeout(f);let T=Math.round(performance.now()-B);if(L)u("error","command.timeout",{...K,durationMs:T,timeoutMs:U});else u(D.ok?"info":"warn","command.end",{...K,durationMs:T,ok:D.ok,errorCode:D.error?.code,errorMessage:D.error?.message});if(H.envelope.command==="client.register"&&D.ok){let z=(H.envelope.payload??{}).clientId?.trim()||H.envelope.clientId?.trim();if(z)Q.add(z)}else if(H.envelope.command==="client.unregister"&&D.ok){let O=H.envelope.clientId?.trim();if(O)Q.delete(O)}J({kind:"reply",envelope:D});break}case"stream.subscribe":{let B=`${H.clientId}:${H.sessionId??"*"}`;if(Z.has(B))break;let G=await this.transport.subscribe(H.clientId,X,{sessionId:H.sessionId});Z.set(B,G);break}case"stream.unsubscribe":{let B=`${H.clientId}:${H.sessionId??"*"}`;Z.get(B)?.(),Z.delete(B);break}case"reply":case"event":break}}catch(H){let B=typeof V.data==="string"?Fy(V.data):void 0;if(!B||B.kind!=="command"){u("error","rejected malformed websocket frame",{error:H});return}u("error","command.error",{...bX(B),error:H}),Rf(this.telemetry,{component:"core",operation:"hub.websocket_command",error:H,severity:"error",handled:!0,context:bX(B)}),J({kind:"reply",envelope:Ef(B,"command_failed",H instanceof Error?H.message:"Unknown hub error")})}},j=()=>{if(W)return;W=!0;for(let V of Z.values())V();Z.clear();for(let V of Q)this.transport.command({version:"v1",command:"client.unregister",clientId:V});Q.clear(),$.removeEventListener("message",Y),$.removeEventListener("close",j)};return $.addEventListener("message",Y),$.addEventListener("close",j),j}}class o5{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}}function zy($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();return String($)}function Ty($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(W)=>{Q({data:zy(W)})});return}$.on("close",Q)},removeEventListener(){}}}function Oy($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
591
|
+
${B}`:V.instructions}})}})}}function Yy($,Z,Q,W){let J=Q.map((X)=>[X.executor,async(...Y)=>{let j=Y.at(-1),V=Y.slice(0,-1);return(await W($,X.capabilityName,{executor:X.executor,args:V,context:Vf(j)},Z))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function jy($,Z,Q,W){if(Q.length===0)return;return Q.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema,lifecycle:J.lifecycle,async execute(X,Y){return(await W($,J.capabilityName,{toolName:J.name,input:X,context:Vf(Y)},Z,Y.emitUpdate?(V)=>{Y.emitUpdate?.(Qy(V))}:void 0))?.result}}))}function Vy($,Z,Q,W){let J=new Map(Q.map((Y)=>[Y.name,Y])),X={};for(let Y of $y){let j=J.get(Y);if(!j)continue;X[Y]=async(V)=>{return(await W($,j.capabilityName,{context:V},Z))?.control}}return Object.keys(X).length>0?X:void 0}function PX($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),W=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),X=$.contributions.find((V)=>V.kind==="checkpoint"),Y=$.contributions.find((V)=>V.kind==="mistakeLimit"),j=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:Yy($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...W.length>0?{hooks:Vy($.sessionId,$.targetClientId,W,$.requestCapability)}:{},...Q.length>0?{extraTools:jy($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...J?{compaction:{...$.sessionConfig?.compaction??{},...J.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,J.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{checkpoint:{...$.sessionConfig?.checkpoint??{},...X.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...Y?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,Y.capabilityName,{context:V},$.targetClientId))?.result}}:{},...j?{userInstructionService:Xy($.sessionId,$.targetClientId,j,$.requestCapability)}:{}}}}var Gf="hubCapabilityOwnerClientId";function Kf($,Z){$[Gf]=Z}function Hy($){let Z=$?.[Gf];return typeof Z==="string"&&Z.trim()?Z.trim():void 0}async function Ff($,Z,Q){let W=performance.now(),J={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};u("info","session.create.begin",J);let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{},j=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0,V=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{};if(typeof j?.mode==="string")Y.mode=j.mode;else if(typeof V.mode==="string")Y.mode=V.mode;if(typeof j?.systemPrompt==="string")Y.systemPrompt=j.systemPrompt;else if(typeof V.systemPrompt==="string")Y.systemPrompt=V.systemPrompt;if(j?.checkpoint?.enabled===!0)Y.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)Y.checkpointEnabled=!0;let H=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},B=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():"";if(!B)return u("warn","session.create.invalid",{...J,reason:"missing_workspace_root"}),x(Z,"invalid_session_create","session.create requires workspaceRoot or cwd");let G=Z.clientId?.trim()||"hub-client",K=wX(V.clientContributions);if(u("info","session.create.contributions_parsed",{...J,clientId:G,workspaceRoot:B,cwd:typeof X.cwd==="string"?X.cwd:void 0,contributionCount:K.length}),K.length>0)Kf(Y,G);let A=(typeof j?.sessionId==="string"?j.sessionId.trim():"")||Hf(),L=Bf(V.configExtensions);u("info","session.create.runtime_build.begin",{...J,sessionId:A,configExtensionCount:L?.length??0});let f=PX({sessionId:A,targetClientId:G,contributions:K,sessionConfig:j,requestCapability:$.requestCapability});u("info","session.create.start_session.begin",{...J,sessionId:A,provider:j?.providerId??(typeof H.provider==="string"?H.provider:typeof Y.provider==="string"?Y.provider:"hub"),model:j?.modelId??(typeof H.model==="string"?H.model:typeof Y.model==="string"?Y.model:"hub")});let D=await $.sessionHost.startSession({source:typeof Y.source==="string"?Y.source:void 0,interactive:Y.interactive!==!1,sessionMetadata:Object.keys(Y).length>0?Y:void 0,initialMessages:Array.isArray(X.initialMessages)?X.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:L,...f.localRuntime},capabilities:{toolExecutors:f.toolExecutors,requestToolApproval:Q},config:{...j??{},sessionId:A,providerId:j?.providerId??(typeof H.provider==="string"?H.provider:typeof Y.provider==="string"?Y.provider:"hub"),modelId:j?.modelId??(typeof H.model==="string"?H.model:typeof Y.model==="string"?Y.model:"hub"),apiKey:j?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:j?.cwd??(typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():B),workspaceRoot:j?.workspaceRoot??B,systemPrompt:j?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:j?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:j?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:j?.enableTools??V.enableTools!==!1,enableSpawnAgent:j?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:j?.enableAgentTeams??V.enableTeams!==!1,checkpoint:j?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:j?.teamName??(typeof Y.teamName==="string"?Y.teamName:void 0)},toolPolicies:X.toolPolicies&&typeof X.toolPolicies==="object"&&!Array.isArray(X.toolPolicies)?JSON.parse(JSON.stringify(X.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});u("info","session.create.start_session.end",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W),hasImmediateResult:!!D.result}),Q7($,D.sessionId,G,"creator",{interactive:Y.interactive!==!1}),u("info","session.create.read_records.begin",{...J,sessionId:D.sessionId});let[U,T]=await Promise.all([t0($,D.sessionId),e0($,D.sessionId)]);if(u("info","session.create.read_records.end",{...J,sessionId:D.sessionId,hasSession:!!U,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-W)}),U)$.publish($.buildEvent("session.created",{session:U,...T?{snapshot:T}:{}},D.sessionId));return u("info","session.create.reply",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W)}),c(Z,{session:U,...T?{snapshot:T}:{}})}async function Af($,Z,Q){let W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.sessionId==="string"?W.sessionId.trim():Z.sessionId?.trim()||"",X=W.checkpointRunCount;if(!J)return x(Z,"invalid_restore","session.restore requires a session id");let Y=W.restore&&typeof W.restore==="object"?W.restore:{},j=Y.messages!==!1;if(typeof X!=="number")return x(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0;if(j&&!V)return x(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let H=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{},B=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{};if(typeof V?.mode==="string")B.mode=V.mode;else if(typeof H.mode==="string")B.mode=H.mode;if(typeof V?.systemPrompt==="string")B.systemPrompt=V.systemPrompt;else if(typeof H.systemPrompt==="string")B.systemPrompt=H.systemPrompt;if(V?.checkpoint?.enabled===!0)B.checkpointEnabled=!0;else if(H.checkpointEnabled===!0)B.checkpointEnabled=!0;let G=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},K=Z.clientId?.trim()||"hub-client",F=wX(H.clientContributions);if(F.length>0)Kf(B,K);let L=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||Hf(),f=Bf(H.configExtensions),D=PX({sessionId:L,targetClientId:K,contributions:F,sessionConfig:V,requestCapability:$.requestCapability}),T=await new c$().restoreCheckpoint({sessionId:J,checkpointRunCount:X,restore:{messages:Y.messages,workspace:Y.workspace,omitCheckpointMessageFromSession:Y.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(E)=>$.sessionHost.getSession(E),readMessages:(E)=>$.sessionHost.readSessionMessages(E),buildStartInput:(E)=>{if(E.restoredCheckpointMetadata)B.checkpoint=E.restoredCheckpointMetadata;let w=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():E.sourceSession.workspaceRoot||E.sourceSession.cwd;return{source:typeof B.source==="string"?B.source:void 0,interactive:B.interactive!==!1,sessionMetadata:{...B,restoredFromSessionId:J,restoredCheckpointRunCount:X},initialMessages:E.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:f,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:L,providerId:V?.providerId??(typeof G.provider==="string"?G.provider:E.sourceSession.provider),modelId:V?.modelId??(typeof G.model==="string"?G.model:E.sourceSession.model),apiKey:V?.apiKey??(typeof G.apiKey==="string"?G.apiKey:""),cwd:V?.cwd??E.plan.cwd,workspaceRoot:V?.workspaceRoot??w,systemPrompt:V?.systemPrompt??(typeof H.systemPrompt==="string"?H.systemPrompt:""),mode:V?.mode??(H.mode==="plan"||H.mode==="yolo"?H.mode:"act"),maxIterations:V?.maxIterations??(typeof H.maxIterations==="number"?H.maxIterations:void 0),enableTools:V?.enableTools??H.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??H.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??H.enableTeams!==!1,checkpoint:V?.checkpoint??(H.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof B.teamName==="string"?B.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):H.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(E)=>$.sessionHost.startSession(E),getStartedSessionId:(E)=>E.sessionId,readRestoredSession:(E)=>$.sessionHost.getSession(E)});if(!j)return c(Z,{checkpoint:T.checkpoint});let q=T.startResult;if(!q)return x(Z,"restore_failed","Checkpoint restore did not start a session");Q7($,q.sessionId,K,"creator",{interactive:B.interactive!==!1});let[z,_]=await Promise.all([t0($,q.sessionId),e0($,q.sessionId)]);if(z)$.publish($.buildEvent("session.created",{session:z,..._?{snapshot:_}:{}},q.sessionId));return c(Z,{session:z,..._?{snapshot:_}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof I0)return x(Z,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return x(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function ff($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_attach","session.attach requires a session id");Q7($,Q,Z.clientId?.trim()||"hub-client","participant");let W=await t0($,Q);if(W)$.publish($.buildEvent("session.attached",{session:W},Q));return W?c(Z,{session:W}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function Uf($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_detach","session.detach requires a session id");let W=Z.clientId?.trim()||"hub-client",[J]=await Promise.all([t0($,Q)]),X=Hy(J?.metadata)??W,Y=$.sessionState.get(Q);if(Y){if(Y.participants.delete(W),Y.createdByClientId===W)Y.createdByClientId=X;if(Y.participants.size===0)$.sessionState.delete(Q)}m$($,(H)=>H.sessionId===Q&&H.targetClientId===W,`Capability owner client ${W} detached before request was resolved.`);let[j,V]=await Promise.all([t0($,Q),e0($,Q)]);return $.publish($.buildEvent("session.detached",j?{session:j,...V?{snapshot:V}:{},clientId:W}:{clientId:W},Q)),c(Z)}async function Df($,Z){let Q=k0(Z),W=Z.payload?.includeSnapshot===!0,[J,X]=await Promise.all([t0($,Q),W?e0($,Q):Promise.resolve(void 0)]);return J?c(Z,{session:J,...X?{snapshot:X}:{}}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function Lf($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_id","session.messages requires a session id");if(!await t0($,Q))return x(Z,"session_not_found",`Unknown session: ${Q}`);let J=await $.sessionHost.readSessionMessages(Q);return c(Z,{sessionId:Q,messages:J})}async function _f($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,J=(await $.sessionHost.listSessions(Q)).map((X)=>$7(X,$.sessionState.get(X.sessionId)));return c(Z,{sessions:J})}async function zf($,Z){let Q=k0(Z),W=Z7(Z.payload?.metadata),J=await $.sessionHost.updateSession(Q,{metadata:W}),[X,Y]=await Promise.all([t0($,Q),e0($,Q)]);if(X)$.publish($.buildEvent("session.updated",{session:X,...Y?{snapshot:Y}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:J.updated,payload:{updated:J.updated,session:X,...Y?{snapshot:Y}:{}}}}async function Tf($,Z){let Q=k0(Z),W=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),c(Z,{deleted:W})}async function Of($,Z){let Q=k0(Z),W=$.sessionHost.pendingPrompts;if(!W)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await W.list({sessionId:Q});return c(Z,{sessionId:Q,prompts:J})}async function qf($,Z){let Q=k0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,X=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,Y=$.sessionHost.pendingPrompts;if(!Y)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await Y.update({sessionId:Q,promptId:W,prompt:J,delivery:X});return c(Z,j)}async function Mf($,Z){let Q=k0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await J.delete({sessionId:Q,promptId:W});return c(Z,X)}function Rf($){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 Gy=new Set(["skills","workflows","rules","tools","mcp"]);function SX($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function a5($,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 Ky($,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 Ef($){if($===void 0)return{};if(!SX($))throw Error("settings.list payload must be an object.");return{cwd:a5($,"cwd"),workspaceRoot:a5($,"workspaceRoot"),availabilityContext:SX($.availabilityContext)?$.availabilityContext:void 0}}function Fy($){if(!SX($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!Gy.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...Ef($),type:Z,id:a5($,"id"),path:a5($,"path"),name:a5($,"name"),enabled:Ky($,"enabled")}}class z4{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=By("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new T1({sessionService:new z1(new L1),fetch:$.fetch,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(Z)=>this.publish(Z),buildEvent:c2,requestCapability:(Z,Q,W,J,X)=>cA(this.ctx,Z,Q,W,J,X)},this.schedules=new U4({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let W=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!W)return;this.publish(c2(W,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new f4(this.schedules),this.settings=$.settingsService??new S$,$.cronOptions)this.cronService=new M5({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{Xf(this.ctx,Z).catch((Q)=>{qX("session event handling failed",Q),J7(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())TX(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(m$(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 J7(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 pA(this.ctx,$);case"client.update":return rA(this.ctx,$);case"client.unregister":return iA(this.ctx,$,(Z)=>{this.listeners.delete(Z),this.detachClientFromSessions(Z)});case"client.list":return nA(this.ctx,$);case"session.create":return await Ff(this.ctx,$,(Z)=>zX(this.ctx,Z));case"session.restore":return await Af(this.ctx,$,(Z)=>zX(this.ctx,Z));case"session.attach":return await ff(this.ctx,$);case"session.detach":return await Uf(this.ctx,$);case"session.get":return await Df(this.ctx,$);case"session.messages":return await Lf(this.ctx,$);case"session.list":return await _f(this.ctx,$);case"session.update":return await zf(this.ctx,$);case"session.pending_prompts":return await Of(this.ctx,$);case"session.update_pending_prompt":return await qf(this.ctx,$);case"session.remove_pending_prompt":return await Mf(this.ctx,$);case"session.delete":return await Tf(this.ctx,$);case"session.hook":return await Jf(this.ctx,$);case"run.start":case"session.send_input":return await Qf(this.ctx,$);case"run.abort":return await Wf(this.ctx,$);case"capability.request":return await dA(this.ctx,$);case"approval.respond":return await mA(this.ctx,$);case"capability.respond":return lA(this.ctx,$);case"capability.progress":return uA(this.ctx,$);case"ui.notify":return this.publish(c2("ui.notify",$.payload??{})),c($);case"ui.show_window":return this.publish(c2("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 Zf(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=Rf($.command);if(Q)this.publish(c2(Q,Z.payload))}return Z}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!Ay(Z.error.code))return;J7(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(Ef($.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(Fy($.payload));return this.publish(c2("settings.changed",{types:Z.changedTypes,snapshot:Z.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z.snapshot,changedTypes:Z.changedTypes}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:Z instanceof Error?Z.message:String(Z)}}}}subscribe($,Z,Q){let W=this.listeners.get($)??new Set,J={sessionId:Q?.sessionId,listener:Z};return W.add(J),this.listeners.set($,W),()=>{let X=this.listeners.get($);if(!X)return;if(X.delete(J),X.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries())if(Q.participants.delete($),Q.participants.size===0)this.sessionState.delete(Z);m$(this.ctx,(Z)=>Z.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let Z of this.listeners.values())for(let Q of Z){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(W){qX(`listener threw while publishing ${$.event}`,W),J7(this.options.telemetry,{component:"core",operation:"hub.publish",error:W,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function Ay($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as Ly}from"node:crypto";import _y from"node:http";import zy from"node:net";import{URL as kX}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as wf,HUB_CAPABILITIES as Ty,isHubProtocolCompatible as Oy,MAX_CLIENT_HUB_PROTOCOL_VERSION as Pf,MIN_CLIENT_HUB_PROTOCOL_VERSION as Sf}from"@cline/shared";import{WebSocketServer as qy}from"ws";import{captureSdkError as Nf,HUB_COMMAND_SLOW_LOG_MS as fy,resolveHubCommandTimeoutMs as Uy,safeJsonParse as Dy}from"@cline/shared";function bX($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function Cf($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}class s5{transport;telemetry;constructor($,Z){this.transport=$;this.telemetry=Z}attach($){let Z=new Map,Q=new Set,W=!1,J=(V)=>{try{$.send(JSON.stringify(V))}catch(H){console.error(`[hub] failed to send websocket frame: ${H instanceof Error?H.stack||H.message:String(H)}`)}},X=(V)=>{J({kind:"event",envelope:V})},Y=async(V)=>{try{let H=JSON.parse(V.data);switch(H.kind){case"command":{let B=performance.now(),G=!1,K=bX(H);u("info","command.start",K);let F=setTimeout(()=>{if(G)return;u("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-B)})},fy),A=this.transport.command(H.envelope);A.then((q)=>{if(!G)return;u(q.ok?"warn":"error","command.late_end",{...K,elapsedMs:Math.round(performance.now()-B),ok:q.ok,errorCode:q.error?.code,errorMessage:q.error?.message})},(q)=>{if(!G)return;u("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-B),error:q})});let L=!1,f,D,U=Uy(H.envelope.command,H.envelope.timeoutMs);try{D=U===null?await A:await Promise.race([A,new Promise((q)=>{f=setTimeout(()=>{L=!0,Nf(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${H.envelope.command} did not complete within ${U}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:U}}),q(Cf(H,"hub_command_timeout",`Hub command ${H.envelope.command} did not complete within ${U}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${H.envelope.requestId}.`))},U)})])}catch(q){if(clearTimeout(F),f)clearTimeout(f);throw q}if(G=L,clearTimeout(F),f)clearTimeout(f);let T=Math.round(performance.now()-B);if(L)u("error","command.timeout",{...K,durationMs:T,timeoutMs:U});else u(D.ok?"info":"warn","command.end",{...K,durationMs:T,ok:D.ok,errorCode:D.error?.code,errorMessage:D.error?.message});if(H.envelope.command==="client.register"&&D.ok){let z=(H.envelope.payload??{}).clientId?.trim()||H.envelope.clientId?.trim();if(z)Q.add(z)}else if(H.envelope.command==="client.unregister"&&D.ok){let q=H.envelope.clientId?.trim();if(q)Q.delete(q)}J({kind:"reply",envelope:D});break}case"stream.subscribe":{let B=`${H.clientId}:${H.sessionId??"*"}`;if(Z.has(B))break;let G=await this.transport.subscribe(H.clientId,X,{sessionId:H.sessionId});Z.set(B,G);break}case"stream.unsubscribe":{let B=`${H.clientId}:${H.sessionId??"*"}`;Z.get(B)?.(),Z.delete(B);break}case"reply":case"event":break}}catch(H){let B=typeof V.data==="string"?Dy(V.data):void 0;if(!B||B.kind!=="command"){u("error","rejected malformed websocket frame",{error:H});return}u("error","command.error",{...bX(B),error:H}),Nf(this.telemetry,{component:"core",operation:"hub.websocket_command",error:H,severity:"error",handled:!0,context:bX(B)}),J({kind:"reply",envelope:Cf(B,"command_failed",H instanceof Error?H.message:"Unknown hub error")})}},j=()=>{if(W)return;W=!0;for(let V of Z.values())V();Z.clear();for(let V of Q)this.transport.command({version:"v1",command:"client.unregister",clientId:V});Q.clear(),$.removeEventListener("message",Y),$.removeEventListener("close",j)};return $.addEventListener("message",Y),$.addEventListener("close",j),j}}class o5{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}}function My($){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 Ry($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(W)=>{Q({data:My(W)})});return}$.on("close",Q)},removeEventListener(){}}}function Ey($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
592
592
|
Connection: close\r
|
|
593
593
|
Content-Length: 0\r
|
|
594
594
|
\r
|
|
595
|
-
`),$.end()}catch{$.destroy()}}function
|
|
595
|
+
`),$.end()}catch{$.destroy()}}function Ny($){try{$.write(`HTTP/1.1 401 Unauthorized\r
|
|
596
596
|
Connection: close\r
|
|
597
597
|
Content-Length: 0\r
|
|
598
598
|
\r
|
|
599
|
-
`),$.end()}catch{$.destroy()}}function yX($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),W=Buffer.from(Z,"utf8");return Q.length===W.length&&
|
|
600
|
-
Caused by: ${$.stack}`;return X}async function
|
|
601
|
-
`).map((W)=>W.trim()).filter(Boolean).map((W)=>{try{return JSON.parse(W)}catch{return}}).filter((W)=>W!==void 0).reverse().slice(0,Z)}loadRuntime($){let Z=this.readEnvelope($);return{state:Z?.teamState?
|
|
602
|
-
`,"utf8")}persistRuntime($,Z,Q){this.ensureTeamSubdir($);let W={version:1,updatedAt:
|
|
603
|
-
`,"utf8"),
|
|
599
|
+
`),$.end()}catch{$.destroy()}}function yX($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),W=Buffer.from(Z,"utf8");return Q.length===W.length&&Ly(Q,W)}function bf($,Z){let Q=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,W=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",J=`Failed to start hub server on ${Z.host}:${Z.port}${Z.pathname}: ${W}`,X=Error(Q?`${J} (${Q})`:J);if(Q)$.code=Q,X.code=Q;if($ instanceof Error&&$.stack)X.stack=`${X.name}: ${X.message}
|
|
600
|
+
Caused by: ${$.stack}`;return X}async function Cy($){return await new Promise((Z,Q)=>{let W=zy.createServer();W.once("error",Q),W.listen(0,$,()=>{let J=W.address();if(!J||typeof J==="string"){W.close(()=>Q(Error("Failed to resolve free port")));return}let X=J.port;W.close((Y)=>{if(Y){Q(Y);return}Z(X)})})})}function wy($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var hX=new Map,yf="cline-hub-auth.",Py=30000;function IX($){return Array.isArray($)?$.join(","):$??""}function hf($){return $===32||$===9}function X7($){let Z=IX($).trim(),Q="bearer";if(Z.length<=6||Z.slice(0,6).toLowerCase()!=="bearer"||!hf(Z.charCodeAt(6)))return null;let W=7;while(W<Z.length&&hf(Z.charCodeAt(W)))W+=1;return Z.slice(W).trim()||null}function Sy($){for(let Z of IX($).split(",")){let Q=Z.trim();if(Q.startsWith(yf))return Q.slice(yf.length).trim()||null}return null}function Y7($){let Z=$.trim().toLowerCase();return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"||Z==="[::1]"}function xX($){let Z=IX($).trim();if(!Z)return!1;try{return Y7(new kX(Z).hostname)}catch{return!1}}async function d2($){let Z=$.owner??n1(),Q=$.host??"127.0.0.1",W=$.pathname??"/hub",J=$.port??s8(),X=J===0?await Cy(Q):J,Y=X,j=V1(Q,X,W),V=CQ(),H=NQ(),B=new z4($);await B.start();let G=new s5(new o5(B),$.telemetry),K=new Set,F=new Date().toISOString(),A={protocolVersion:wf,minClientProtocolVersion:Sf,maxClientProtocolVersion:Pf,capabilities:Ty,coreVersion:N5.version,buildId:V,pid:process.pid,startedAt:F},L=new Set,f,D,U=async()=>{if(D)return D;return D=(async()=>{if(f)clearInterval(f),f=void 0;for(let _ of L)_.terminate?.();L.clear();for(let _ of K)_();if(K.clear(),await new Promise((_,E)=>{q.close((w)=>{if(w){E(w);return}_()})}),await new Promise((_,E)=>{T.close((w)=>{if(w){E(w);return}_()})}),await B.stop(),(await f0(Z.discoveryPath))?.url===j)await b0(Z.discoveryPath)})(),D},T=_y.createServer((z,_)=>{if((z.url??"/")==="/health"){let w=JSON.stringify({ok:!0,protocolVersion:A.protocolVersion,minClientProtocolVersion:A.minClientProtocolVersion,maxClientProtocolVersion:A.maxClientProtocolVersion,coreVersion:A.coreVersion,host:Q,port:Y,url:j});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(w);return}if((z.url??"/")==="/status"){if(!yX(X7(z.headers.authorization),H)){_.statusCode=401,_.end("Unauthorized");return}let w=JSON.stringify({hubId:B.getHubId(),...A,authToken:H,host:Q,port:Y,url:j,updatedAt:new Date().toISOString()});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(w);return}if((z.url??"/")==="/version"){_.statusCode=200,_.setHeader("content-type","application/json"),_.end(JSON.stringify(A));return}if(new kX(z.url??"/",`http://${Q}:${Y}`).pathname==="/shutdown"&&z.method==="POST"){if(!yX(X7(z.headers.authorization),H)){_.statusCode=401,_.end("Unauthorized");return}_.statusCode=202,_.setHeader("content-type","application/json"),_.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{U()});return}_.statusCode=404,_.end("Not found")}),q=new qy({noServer:!0});f=setInterval(()=>{for(let z of L){if(z.isAlive===!1){try{z.terminate?.()}catch{}L.delete(z);continue}z.isAlive=!1;try{z.ping?.()}catch{try{z.terminate?.()}catch{}L.delete(z)}}},Py),T.on("upgrade",(z,_,E)=>{if(new kX(z.url??"/",`http://${Q}:${Y}`).pathname!==W){_.destroy();return}if(!(yX(Sy(z.headers["sec-websocket-protocol"]),H)||Y7(Q)&&xX(z.headers.origin))){Ny(_);return}try{q.handleUpgrade(z,_,E,(l)=>{let o=l;o.isAlive=!0,o.on("pong",()=>{o.isAlive=!0}),L.add(o);let t=G.attach(Ry(l));K.add(t),l.once("close",()=>{L.delete(o),t(),K.delete(t)})})}catch{Ey(_)}});try{await new Promise((z,_)=>{T.once("error",(E)=>{_(bf(E,{host:Q,port:X,pathname:W}))}),T.listen(X,Q,()=>{let E=T.address();if(!E||typeof E==="string"){_(bf(Error("Failed to resolve hub port"),{host:Q,port:X,pathname:W}));return}Y=E.port,j=V1(Q,Y,W),z()})})}catch(z){if(f)clearInterval(f),f=void 0;throw await B.stop().catch(()=>{return}),z}return await wQ(Z.discoveryPath,{hubId:B.getHubId(),protocolVersion:wf,minClientProtocolVersion:Sf,maxClientProtocolVersion:Pf,capabilities:[...A.capabilities],coreVersion:N5.version,buildId:V,authToken:H,host:Q,port:Y,url:j,pid:process.pid,startedAt:F,updatedAt:F}),{host:Q,port:Y,url:j,authToken:H,close:U}}async function j7($){let Z=$.owner??n1(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=$.host??"127.0.0.1",J=$.port??s8(),X=$.pathname??"/hub",Y=V1(W,J,X),j=Z.discoveryPath,V=(B)=>{if(!Q)k$(B.url,B.authToken);return B},H=hX.get(j);if(H){let B=await H;if(B.url===Y)return V({server:B,url:B.url,authToken:B.authToken,action:"reuse"})}return await PQ(Z.discoveryPath,async()=>{let B=await f0(Z.discoveryPath);if(B?.url&&(B.url===Y||$.allowPortFallback===!0)){let F=await a1(B.url,{authToken:B.authToken});if(F?.url&&Oy(F).compatible&&await f1(F.url,{authToken:B.authToken}))return V({url:F.url,authToken:B.authToken,action:"reuse"})}if(B?.url)await b0(Z.discoveryPath);let K=async(F)=>{let A=d2({...F,owner:Z});hX.set(j,A);try{let L=await A;return V({server:L,url:L.url,authToken:L.authToken,action:"started"})}catch(L){throw hX.delete(j),L}};try{return await K($)}catch(F){if(!$.allowPortFallback||!wy(F))throw F;return await K({...$,port:0})}})}function If(){return kf()==="production"?s0():y0()}function by($){return kf()!=="production"&&!$}async function xf($){let Z=a0({host:$.host,port:$.port,pathname:$.pathname});return await d2({...$,...Z,owner:If()})}async function gf($){let Z=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=a0({host:$.host,port:$.port,pathname:$.pathname});return await j7({...$,...Q,allowPortFallback:$.allowPortFallback??by(Z),owner:If()})}H7();var cf={};N(cf,{registerRemoteConfigSessionBlobUpload:()=>K7,readRemoteConfigSessionBlobUploadMetadata:()=>gX,prepareRemoteConfigCoreIntegration:()=>vX,createRemoteConfigSessionMessagesArtifactUploader:()=>mX,buildRemoteConfigSessionBlobUploadMetadata:()=>B7,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>G7});import{buildRemoteConfigSessionBlobUploadMetadata as B7,clearRemoteConfigSessionBlobUpload as yy,createClineTelemetryServiceConfig as hy,createSessionId as ky,createRemoteConfigSessionMessagesArtifactUploader as Iy,prepareRemoteConfigRuntime as xy,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as G7,readRemoteConfigSessionBlobUploadMetadata as gX,registerRemoteConfigSessionBlobUpload as K7}from"@cline/shared";function gy($,Z){let Q=$.telemetry||Z.telemetryService?{...Z.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return $$(hy(Q)).telemetry}function mX(){let $=Iy();return{async uploadMessagesFile(Z){await $.uploadMessagesFile(Z)}}}async function vX($){let Z=await xy($),Q=gy(Z,$),W=[Z.pluginDefinition],J=Z.claims?.subject,X=B7(Z.bundle?.remoteConfig,J),Y;return{prepared:Z,extensions:W,telemetry:Q,applyToStartSessionInput(j){let V=j.config.extensions??[],H=j.config.telemetry,B=X?j.config.sessionId?.trim()||ky():j.config.sessionId;if(B&&X)Y=B;let G=B&&X?K7(B,Z.bundle?.remoteConfig,J):void 0,K=G?{...j.sessionMetadata??{},[G7]:G}:j.sessionMetadata;return{...j,...K?{sessionMetadata:K}:{},config:{...j.config,...B?{sessionId:B}:{},extensions:[...V,...W],telemetry:Q??H}}},async dispose(){if(Y)yy(Y)}}}var af={};N(af,{createTeamName:()=>f7,DefaultRuntimeBuilder:()=>q4});import{hasRuntimeConfigExtension as ty}from"@cline/shared";import{nanoid as ey}from"nanoid";Y1();var nf={};N(nf,{createLocalTeamStore:()=>lX,SqliteTeamStore:()=>l2,FileTeamStore:()=>t5});import{appendFileSync as my,existsSync as T4,mkdirSync as uf,readdirSync as vy,readFileSync as df,renameSync as cy,writeFileSync as uy}from"node:fs";import{join as cX}from"node:path";import{resolveTeamDataDir as dy}from"@cline/shared/storage";function lf(){return new Date().toISOString()}function uX($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function pf($){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 t5{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??dy()}init(){this.ensureTeamDir()}listTeamNames(){if(!T4(this.teamDirPath))return[];return vy(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>T4(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let Z=this.readEnvelope($);return Z?.teamState?pf(Z.teamState):void 0}readHistory($,Z=200){let Q=this.historyPath($);if(!T4(Q))return[];return df(Q,"utf8").split(`
|
|
601
|
+
`).map((W)=>W.trim()).filter(Boolean).map((W)=>{try{return JSON.parse(W)}catch{return}}).filter((W)=>W!==void 0).reverse().slice(0,Z)}loadRuntime($){let Z=this.readEnvelope($);return{state:Z?.teamState?pf(Z.teamState):void 0,teammates:Z?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,Z){this.ensureTeamSubdir($),my(this.historyPath($),`${JSON.stringify({ts:lf(),eventType:Z.type,payload:Z})}
|
|
602
|
+
`,"utf8")}persistRuntime($,Z,Q){this.ensureTeamSubdir($);let W={version:1,updatedAt:lf(),teamState:Z,teammates:Q},J=this.statePath($),X=`${J}.tmp`;uy(X,`${JSON.stringify(W,null,2)}
|
|
603
|
+
`,"utf8"),cy(X,J)}markInProgressRunsInterrupted($,Z){let Q=this.readEnvelope($);if(!Q?.teamState?.runs?.length)return[];let W=Q.teamState.runs.filter((X)=>X.status==="queued"||X.status==="running").map((X)=>X.id);if(W.length===0)return[];let J=new Date;return Q.teamState={...Q.teamState,runs:Q.teamState.runs.map((X)=>X.status==="queued"||X.status==="running"?{...X,status:"interrupted",error:Z,endedAt:J}:X)},this.persistRuntime($,Q.teamState,Q.teammates),W}ensureTeamDir(){if(!T4(this.teamDirPath))uf(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let Z=cX(this.ensureTeamDir(),uX($));if(!T4(Z))uf(Z,{recursive:!0});return Z}statePath($){return cX(this.ensureTeamDir(),uX($),"state.json")}historyPath($){return cX(this.ensureTeamDir(),uX($),"task-history.jsonl")}readEnvelope($){let Z=this.statePath($);if(!T4(Z))return;try{let Q=JSON.parse(df(Z,"utf8"));if(Q?.version===1&&Q.teamState)return Q}catch{}return}}import{existsSync as ly,mkdirSync as py}from"node:fs";import{join as ry}from"node:path";import{safeJsonParse as rf}from"@cline/shared";import{loadSqliteDb as iy,nowIso as dX}from"@cline/shared/db";import{resolveDbDataDir as ny}from"@cline/shared/storage";function ay(){return ny()}function O4($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function sy($){let Z=rf($);if(!Array.isArray(Z))return[];let Q=[];for(let W of Z){if(!W||typeof W!=="object")continue;let J=W,X=J.agentId,Y=J.rolePrompt;if(typeof X!=="string"||!X.trim())continue;if(typeof Y!=="string"||!Y.trim())continue;let j={agentId:X.trim(),rolePrompt:Y};if(typeof J.modelId==="string"&&J.modelId.trim())j.modelId=J.modelId.trim();if(typeof J.maxIterations==="number"&&Number.isFinite(J.maxIterations))j.maxIterations=Math.max(1,Math.floor(J.maxIterations));Q.push(j)}return Q}function oy($){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 l2{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??ay()}init(){this.getRawDb()}ensureTeamDir(){if(!ly(this.teamDirPath))py(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return ry(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=iy(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
|
|
604
604
|
CREATE TABLE IF NOT EXISTS team_store_schema_version (
|
|
605
605
|
lock INTEGER PRIMARY KEY CHECK (lock = 1),
|
|
606
606
|
version INTEGER NOT NULL
|
|
@@ -684,7 +684,7 @@ Caused by: ${$.stack}`;return X}async function My($){return await new Promise((Z
|
|
|
684
684
|
version INTEGER NOT NULL DEFAULT 1,
|
|
685
685
|
PRIMARY KEY(team_name, fragment_id)
|
|
686
686
|
);
|
|
687
|
-
`)}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 = ?",[O4($)]);if(!Z)return;let Q=
|
|
687
|
+
`)}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 = ?",[O4($)]);if(!Z)return;let Q=rf(Z.state_json);if(!Q)return;try{return oy(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 ?",[O4($),Z]).flatMap((Q)=>{try{return[{eventType:Q.event_type,payload:JSON.parse(Q.payload_json),ts:Q.ts}]}catch{return[]}})}loadRuntime($){let Z=O4($),Q=this.readState(Z),W=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[Z]),J=W?sy(W.teammates_json):[];return{state:Q,teammates:J,interruptedRunIds:[]}}appendTeamEvent($,Z,Q,W){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
|
|
688
688
|
VALUES (?, ?, ?, ?, NULL, ?)`,[O4($),dX(),Z,JSON.stringify(Q),W??null])}persistRuntime($,Z,Q){let W=O4($),J=dX();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
|
|
689
689
|
VALUES (?, ?, ?, ?)
|
|
690
690
|
ON CONFLICT(team_name) DO UPDATE SET
|
|
@@ -731,28 +731,28 @@ Caused by: ${$.stack}`;return X}async function My($){return await new Promise((Z
|
|
|
731
731
|
reviewed_by = excluded.reviewed_by,
|
|
732
732
|
reviewed_at = excluded.reviewed_at,
|
|
733
733
|
version = team_outcome_fragments.version + 1`,[W,X.outcomeId,X.id,X.section,X.sourceAgentId,X.sourceRunId??null,X.content,X.status,X.reviewedBy??null,X.reviewedAt?X.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,Z){let Q=O4($),W=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[Q]);if(W.length===0)return[];let J=dX();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
|
|
734
|
-
WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,J,Q]),W.map((X)=>X.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function lX($={}){try{let Z=new
|
|
735
|
-
`,"utf8");let V=Z.timeoutMs??300000,H=Z.pollIntervalMs??200,B=Date.now();while(Date.now()-B<V){try{let G=await
|
|
736
|
-
`,"utf8")}function $U($){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 L7($){if(!l2($))return;let Z=$.metadata;return l2(Z)?Z:void 0}function D7($,Z){let Q=L7($);if(!Q||Q.source!=="plugin")return!1;let W=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,J=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&W===Z.pluginName){if(!Z.pluginPath||J===Z.pluginPath)return!0}if(J&&Z.pluginPath&&(J===Z.pluginPath||U7(Z.pluginPath,J)||U7(J,Z.pluginPath)))return!0;if(W&&Z.pluginNames?.some((X)=>X===W))return!0;if(J&&Z.pluginPaths?.some((X)=>J===X||U7(X,J)||U7(J,X)))return!0;return!1}function Rh($){let Z=l2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:ef($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function Eh($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await E8({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],W=[],J=(Z.failures??[]).map((X)=>({pluginPath:X.pluginPath,pluginName:X.pluginName,message:X.message}));for(let X of Z.extensions??[]){let Y=X.__clinePluginPath;if(!Y)continue;if(!X.setup){Q.push({pluginName:X.name,pluginPath:Y});continue}let j=[],V={registerTool:(H)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(H)=>{if(!X.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');j.push(H)}};try{await X.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(H){J.push({pluginPath:Y,pluginName:X.name,message:H instanceof Error?H.message:String(H)});continue}Q.push({pluginName:X.name,pluginPath:Y});for(let H of j)W.push({pluginName:X.name,pluginPath:Y,server:{...H,metadata:{...H.metadata??{},source:"plugin",pluginName:X.name,pluginPath:Y}}})}return{plugins:Q,servers:W,failures:J}}finally{await Z.shutdown().catch(()=>{})}}async function $9($){let Z=$.settingsPath??$0(),Q={mutations:[],failures:[]},W;try{W=await Eh($)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)});return Q}Q.failures.push(...W.failures);let J;try{J=aX(Z)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)});return Q}let X=sX(J),Y=new Map,j=new Map;for(let H of W.plugins)Y.set(H.pluginPath,new Set),j.set(H.pluginPath,H.pluginName);let V=DQ(W.servers.map((H)=>({server:H.server,owner:H,ownerLabel:H.pluginName})));for(let H of V){let B=H.owner;if(!Y.has(B.pluginPath))Y.set(B.pluginPath,new Set);if(H.name)Y.get(B.pluginPath)?.add(H.name);if(!H.registration){Q.mutations.push({name:H.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:"skipped",reason:H.loadError??"invalid MCP server registration"});continue}let G=X[H.registration.name];if(G!==void 0){if(!D7(G,{pluginName:B.pluginName,pluginPath:B.pluginPath})){Q.mutations.push({name:H.registration.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}X[H.registration.name]=Rh({registration:H.registration,pluginName:B.pluginName,pluginPath:B.pluginPath,existing:l2(G)?G:void 0}),Q.mutations.push({name:H.registration.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:G===void 0?"created":"updated"})}for(let[H,B]of Object.entries(X)){let G=L7(B),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=Y.get(K);if(F&&D7(B,{pluginPath:K})&&!F.has(H))delete X[H],Q.mutations.push({name:H,pluginName:typeof G?.pluginName==="string"?G.pluginName:j.get(K)??"plugin",pluginPath:K,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((H)=>H.action!=="skipped"))try{oX(Z,J,X)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)})}return Q}function tX($){let Z=$.settingsPath??$0(),Q;try{Q=aX(Z)}catch{return[]}let W=sX(Q),J=$U($),X=[];for(let[Y,j]of Object.entries(W)){if(!l2(j)||!D7(j,J))continue;let V=L7(j);W[Y]={...j,disabled:!0},X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(X.length>0)oX(Z,Q,W);return X}function Z9($){let Z=$.settingsPath??$0(),Q;try{Q=aX(Z)}catch{return[]}let W=sX(Q),J=$U($),X=[];for(let[Y,j]of Object.entries(W)){if(!D7(j,J))continue;let V=L7(j);delete W[Y],X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(X.length>0)oX(Z,Q,W);return X}var JY="_installed",xh="package",gh=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function $Y($){return $.trim().toLowerCase()}function B1($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function mh($){return $.replace(/-[0-9a-f]{12}$/i,"")}function ZY($){let Z=bh($);return Z?$.slice(0,-Z.length):$}function QY($){if(!R4($))return;try{let Z=JSON.parse(wh($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function XY($,Z){let Q=hh(Z,$);return Q===""||!Q.startsWith("..")&&!yh(Q)}function QU($){let Q=M4($).split(eX),W=Q.lastIndexOf(JY);if(W<0)return;let J=Q[W+1];if(!J)return;let X=gh.get(J)??1,Y=W+2+X;if(Q.length<Y)return;let j=Q.slice(0,Y).join(eX)||eX;return R4(j)?j:void 0}function _7($){try{return Nh($,{withFileTypes:!0})}catch{return[]}}function vh($){let Z=Z$($,JY);if(!R4(Z))return[];let Q=[];for(let W of _7(Z)){if(!W.isDirectory())continue;let J=Z$(Z,W.name);if(W.name==="git"){for(let X of _7(J)){if(!X.isDirectory())continue;let Y=Z$(J,X.name);for(let j of _7(Y))if(j.isDirectory())Q.push(Z$(Y,j.name))}continue}for(let X of _7(J))if(X.isDirectory())Q.push(Z$(J,X.name))}return Q.sort((W,J)=>W.localeCompare(J))}function WU($){try{return kh($)}catch{return[]}}function WY($){let Z=WU($),Q=new Set;B1(Q,$1($)),B1(Q,mh($1($))),B1(Q,QY(Z$($,"package.json"))),B1(Q,QY(Z$($,xh,"package.json")));for(let W of Z)B1(Q,$1(W)),B1(Q,ZY($1(W)));return{installPath:$,entryPaths:Z,names:[...Q].sort((W,J)=>W.localeCompare(J)),installed:!0}}function ch($,Z){let Q=M4($),W=Z.find((Y)=>XY(Q,Y));if(!W)return;let J=u$(Q);while(J!==W&&J!==u$(J)){if(R4(Z$(J,"package.json")))return J;J=u$(J)}let X=$1(Q);if((X==="index.ts"||X==="index.js")&&u$(Q)!==W)return u$(Q);return Q}function JU($,Z){let Q=ch($,Z);if(!Q)return;let W=new Set;return B1(W,$1($)),B1(W,ZY($1($))),B1(W,$1(Q)),B1(W,ZY($1(Q))),B1(W,QY(Z$(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...W].sort((J,X)=>J.localeCompare(X)),installed:!1}}function uh($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return Ih(Z).filter((Q)=>R4(Q))}function dh($){let Z=new Map;for(let Q of $){for(let W of vh(Q))Z.set(W,WY(W));for(let W of WU(Q)){let J=QU(W);if(J){if(!Z.has(J))Z.set(J,WY(J));continue}let X=JU(W,$);if(X)Z.set(X.installPath,X)}}return[...Z.values()].sort((Q,W)=>Q.installPath.localeCompare(W.installPath))}function lh($,Z){let Q=$Y(Z);if(!Q)return!1;if($Y($.installPath)===Q)return!0;return $.names.some((W)=>$Y(W)===Q)}function ph($,Z,Q){let W=M4($);for(let X of Z){if(XY(W,X.installPath))return X;if(X.entryPaths.some((Y)=>M4(Y)===W))return X}let J=QU(W);if(J)return WY(J);if(R4(W))return JU(W,Q);return}function rh($){let Z=R0(),Q=Z.disabledPlugins;if(!Q?.length)return;let W=Q.filter((J)=>{let X=M4(J);if(XY(X,$.installPath))return!1;return!$.entryPaths.some((Y)=>M4(Y)===X)});if(W.length===Q.length)return;x1({...Z,disabledPlugins:W})}function ih($){let Z=u$($);while(Z!==u$(Z)&&$1(Z)!==JY){try{Ch(Z)}catch{return}Z=u$(Z)}}function nh($){return`${$.names[0]??$1($.installPath)} at ${$.installPath}`}async function Q9($){let Z=uh($),Q=dh(Z),W=$.path?.trim(),J=$.name?.trim(),X;if(W){if(X=ph(W,Q,Z),!X)throw Error(`No plugin found at ${W}`)}else{if(!J)throw Error("plugin uninstall requires a plugin name");let j=Q.filter((V)=>lh(V,J));if(j.length===0)throw Error(`No plugin found matching "${J}"`);if(j.length>1)throw Error(`Multiple plugins match "${J}": ${j.map(nh).join(", ")}`);X=j[0]}let Y=Sh(X.installPath,{throwIfNoEntry:!1});if(!Y)throw Error(`Plugin install path does not exist: ${X.installPath}`);if(Z9({pluginPaths:[X.installPath,...X.entryPaths],pluginNames:X.names}),Ph(X.installPath,{recursive:Y.isDirectory(),force:!0}),rh(X),X.installed)ih(X.installPath);return{name:J||X.names[0]||$1(X.installPath),installPath:X.installPath,removedPaths:[X.installPath],entryPaths:X.entryPaths}}var YY=120000,W9=12000,Qk=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,Wk=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,Jk=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,Xk=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function jY($){return $.install?.args??[]}function Yk(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||oh()}function jk($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function Vk($){return jk($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function VU($){return $.split(/\r?\n/).map((Z)=>{if(!Qk.test(Z))return Z;return Z.replace(Wk,"$1[redacted]").replace(Jk,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(Xk,"$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(`
|
|
737
|
-
`).slice(-W9)}function
|
|
738
|
-
`)).trim();return Z.length>0?Z:void 0}function
|
|
739
|
-
Timed out after ${YY/1000}s.`,Y.kill("SIGTERM")},YY);H.unref?.(),B.unref?.(),Y.stdout?.on("data",(G)=>{if(j+=String(G),j.length>W9*2)j=j.slice(-W9)}),Y.stderr?.on("data",(G)=>{if(V+=String(G),V.length>W9*2)V=V.slice(-W9)}),Y.once("error",(G)=>{clearTimeout(B),clearTimeout(H),W(G)}),Y.once("close",(G,K)=>{J=!0,clearTimeout(B),clearTimeout(H),Q({exitCode:X?124:G??(K==="SIGINT"?130:1),stdout:j,stderr:V})})});function VY($){return`${$.type}:${$.id}`}function J9($){let Z=jY($);if(Z.length===0)throw Error("Marketplace install args are required.");return e5(Z).name}function
|
|
734
|
+
WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,J,Q]),W.map((X)=>X.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function lX($={}){try{let Z=new l2($);return Z.init(),Z}catch{let Z=new t5({teamDir:$.teamDir});return Z.init(),Z}}function F7($,Z){return ty($,Z)}function $h($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function Zh($,Z){return $.filter((Q)=>$h(Q.name,Z))}function pX($,Z){return g1(Zh($,Z))}var Qh={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 Wh($){let Z=$.trim().toLowerCase();return Qh[Z]??Z}function Jh($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(Wh));if(Z.skills!==void 0)Q.add("skills");return $.filter((W)=>Q.has(W.name))}function f7(){return`team-${ey(5)}`}function A7($,Z,Q,W,J,X,Y,j){let V=u0[x1({mode:Q})],H=F8(Z,W,Q,J??K8);return pX(V2({cwd:$,...V,enableSkills:!!Y,...H,executors:{...Y?{skills:Y}:{},...j??{}}}),X)}function Xh($){return A7($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,Yh,$.toolExecutors).some((Z)=>Z.name==="skills")}var Yh=async()=>"";async function jh($){let Z=$0();if(!p1({filePath:Z}))return{tools:[]};let Q=new M2({clientFactory:r8({settingsPath:Z})}),W;try{W=await q2(Q,{filePath:Z})}catch(j){await Q.dispose().catch(()=>{});let V=j instanceof Error?j.message:String(j);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let J=W.filter((j)=>j.disabled!==!0),X=await Promise.allSettled(J.map((j)=>n8({serverName:j.name,provider:Q}))),Y=[];for(let[j,V]of X.entries())if(V.status==="fulfilled")Y.push(...V.value);else{let H=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${J[j].name}", skipping: ${H}`)}return{tools:Y,shutdown:async()=>{await Q.dispose()}}}function Vh($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function Hh($){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 Bh($){let Z=u0[x1({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 q4{teamRuntimeEntries=new Map;async build($){let{config:Z,hooks:Q,extensions:W,logger:J,telemetry:X,createSpawnTool:Y,onTeamRestored:j,userInstructionService:V,configExtensions:H,toolExecutors:B}=$,G=$.onTeamEvent??(()=>{}),K=Bh(Z),F=Z.workspaceRoot??Z.cwd,A=$.toolPolicies??Z.toolPolicies,L=F1(),f=[],D=Z.teamName?.trim()||f7(),U=Z.sessionId?.trim()||D,T=K.enableSpawnAgent?Q4({workspaceRoot:F}):{configs:[],errors:[]},q=T.configs.some((v)=>v.skills!==void 0),z=F7(H,"rules"),_=F7(H,"skills"),E=_||q,w=F7(H,"workflows"),y=F7(H,"plugins"),l=z||_||w,o=!1,t=Boolean(V),Q0=V,Q1;for(let v of T.errors)(J??Z.logger)?.log?.(`[agents] Failed to load agent config at ${v.path}: ${v.error.message}`);if(!Q0&&(l||q))Q0=C$({skills:E?{workspacePath:F,includePluginSkills:y,pluginSkillDirectories:y?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(Q0)await Q0.start().catch(()=>{});let l$=K.enableTools&&_&&Boolean(Q0)&&Q0?.hasConfiguredSkills(Z.skills)===!0&&Xh({cwd:Z.cwd,providerId:Z.providerId,mode:K.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:A,toolExecutors:B}),r=Q0&&l?Q0.createExtension({includeRules:z,includeSkills:_,includeWorkflows:w,registerSkillsTool:l$,allowedSkillNames:Z.skills}):void 0,M1=r?[...W??Z.extensions??[],r]:W??Z.extensions;if(K.enableTools){if(f.push(...A7(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,B)),!K.disableMcpSettingsTools){let v=await jh(Z.logger);f.push(...v.tools),Q1=v.shutdown}}let P,B0=K.enableAgentTeams?lX():void 0,G0=B0?.loadRuntime(U),w0=G0?.state,a2=G0?.teammates??[],R1=new Map(a2.map((v)=>[v.agentId,v])),G1=Z.sessionId||D,P4,s2=[],K9=!1,E1=D$({providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey??"",baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxTokensPerTurn:Z.maxTokensPerTurn,maxIterations:Z.maxIterations,hooks:Q,extensions:M1,logger:J??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(K.enableSpawnAgent){if(T.configs.length>0)f.push(...pX(W4({configProvider:E1,agents:T.configs,createSubAgentTools:(v)=>K.enableTools?Jh(A7(Z.cwd,v.providerId??Z.providerId,K.mode,v.modelId??Z.modelId,Z.toolRoutingRules,A,v.skills!==void 0&&Q0?.createSkillsExecutor?Q0.createSkillsExecutor(v.skills):void 0,B),v):[],hookErrorMode:Z.hookErrorMode,toolPolicies:A,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),A))}if(!this.teamRuntimeEntries.has(G1))this.teamRuntimeEntries.set(G1,{delegatedAgentConfigProvider:E1});let F9=()=>{if(!K.enableAgentTeams)return;let v=this.teamRuntimeEntries.get(G1)??{delegatedAgentConfigProvider:E1};if(this.teamRuntimeEntries.set(G1,v),P=v.runtime,!P){if(P=new k2({teamName:D,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:K.missionLogIntervalSteps,missionLogIntervalMs:K.missionLogIntervalMs,onTeamEvent:(Y0)=>{if(G(Y0),P&&B0){if(Y0.type==="teammate_spawned"&&Y0.teammate?.rolePrompt){let N1={agentId:Y0.agentId,rolePrompt:Y0.teammate.rolePrompt,modelId:Y0.teammate.modelId,maxIterations:Y0.teammate.maxIterations};R1.set(N1.agentId,N1)}if(Y0.type==="teammate_shutdown"&&!Hh(Y0.reason))R1.delete(Y0.agentId);B0.handleTeamEvent(U,Y0),B0.persistRuntime(U,P.exportState(),Array.from(R1.values()))}}}),w0)P.hydrateState(w0),K9=!0;v.runtime=P}if(!o){if(!P)return;o=!0;let Y0=D8({runtime:P,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(w0),restoredTeammates:a2,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(N1)=>{s2=N1,P4?.addTools(N1)},createBaseTools:K.enableTools?()=>A7(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,B):void 0,teammateConfigProvider:E1});if(K9)P.recoverActiveRuns("runtime_recovered");if(Y0.restoredFromPersistence)j?.();f.push(...Y0.tools)}return P};if(K.enableSpawnAgent&&Y){let v=Y();f.push({...v,execute:async(Y0,N1)=>{return F9(),v.execute(Y0,N1)}})}if(K.enableAgentTeams)F9();let o2=pX(f,A),ZW=o2.some((v)=>v.name==="submit_and_exit"&&v.lifecycle?.completesRun===!0),A9=K.enableAgentTeams?()=>{let v=this.teamRuntimeEntries.get(G1)?.runtime;if(!v)return;let Y0=v.listTasks(),N1=Y0.some((J$)=>J$.status==="in_progress"||J$.status==="pending"),Qj=v.listRuns({}),zD=Qj.some((J$)=>J$.status==="running"||J$.status==="queued");if(N1||zD){let J$=Y0.filter((g0)=>g0.status==="in_progress"||g0.status==="pending").map((g0)=>`${g0.id} (${g0.status}): ${g0.title}`).join(", "),Wj=Qj.filter((g0)=>g0.status==="running"||g0.status==="queued").map((g0)=>`${g0.id} (${g0.status})`).join(", "),QW=[];if(J$)QW.push(`Unfinished tasks: ${J$}`);if(Wj)QW.push(`Active runs: ${Wj}`);return`[SYSTEM] You still have team obligations. ${QW.join(". ")}. Use team_run_task to delegate work, or team_task with action=complete to mark tasks done, or team_await_runs to wait for active runs. Do NOT stop until all tasks are completed.`}return}:void 0,_D=ZW?{requireCompletionTool:!0,...A9?{completionGuard:A9}:{}}:A9?{completionGuard:A9}:void 0;return{tools:o2,logger:J??Z.logger,telemetry:X??Z.telemetry,teamRuntime:P,teamRestoredFromPersistence:Boolean(w0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(G1)?.delegatedAgentConfigProvider??E1,extensions:M1,completionPolicy:_D,registerLeadAgent:(v)=>{if(P4=v,s2.length>0)v.addTools(g1(s2,[...L]))},shutdown:async(v)=>{if(Vh(P,v),this.teamRuntimeEntries.delete(G1),await Q1?.(),!t)Q0?.stop()}}}}var of={};N(of,{requestDesktopToolApproval:()=>iX});import{mkdir as Gh,readFile as Kh,unlink as Fh,writeFile as Ah}from"node:fs/promises";import{join as sf}from"node:path";function fh($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function Uh($){return new Promise((Z)=>setTimeout(Z,$))}async function rX($){try{await Fh($)}catch{}}async function iX($,Z={}){let Q=Z.approvalDir?.trim(),W=Z.sessionId?.trim();if(!Q||!W)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await Gh(Q,{recursive:!0});let J=fh(`${$.toolCallId}`),X=sf(Q,`${W}.request.${J}.json`),Y=sf(Q,`${W}.decision.${J}.json`),j=Z.nowIso??(()=>new Date().toISOString());await Ah(X,`${JSON.stringify({requestId:J,sessionId:W,createdAt:j(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
|
|
735
|
+
`,"utf8");let V=Z.timeoutMs??300000,H=Z.pollIntervalMs??200,B=Date.now();while(Date.now()-B<V){try{let G=await Kh(Y,"utf8"),K=JSON.parse(G),F={approved:K.approved===!0,reason:typeof K.reason==="string"?K.reason:void 0};return await Promise.all([rX(Y),rX(X)]),F}catch{}await Uh(H)}return await rX(X),{approved:!1,reason:"Tool approval request timed out"}}Y1();var ef={};N(ef,{parseMcpInstallArgs:()=>e5,installMcpServer:()=>nX,buildMcpInstallTransport:()=>U7});function Dh($){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 Lh($){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 _h($){let Z=$.indexOf(":");if(Z<=0)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);let Q=$.slice(0,Z).trim(),W=$.slice(Z+1).trim();if(!Q||!W)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);if(!/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(Q))throw Error(`Invalid MCP header name "${Q}".`);return[Q,W]}function zh($){let Z=$.indexOf("<");return Z>=0&&$.indexOf(">",Z+1)>Z+1}function tf($){let Z=[...$.headers??[]],Q=[],W=$.transport,J=$.targetArgs??[];for(let X=0;X<J.length;X++){let Y=J[X];if($.parseTransport&&Y==="--transport"){let j=J[X+1];if(!j)throw Error("--transport requires a value");W=j,X++;continue}if($.parseTransport&&Y?.startsWith("--transport=")){W=Y.slice(12);continue}if(Y==="--header"){let j=J[X+1];if(!j)throw Error("--header requires a value");Z.push(j),X++;continue}if(Y?.startsWith("--header=")){Z.push(Y.slice(9));continue}Q.push(Y)}return{headers:Z,targetArgs:Q,transport:W}}function Th($){if($.length===0)return{warnings:[]};let Z={},Q=[];for(let W of $){let[J,X]=_h(W);if(Z[J]=X,zh(X))Q.push(`Header "${J}" looks like it contains a placeholder. Update it in MCP settings before using this server.`)}return{headers:Z,warnings:Q}}function U7($){let Z=$.name.trim();if(!Z)throw Error("MCP server name is required");let{headers:Q,targetArgs:W,transport:J}=tf({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),X=Dh(J),{headers:Y,warnings:j}=Th(Q);if(X==="stdio"){if(Q.length>0)throw Error("Stdio MCP installs do not support request headers.");let[H,...B]=W;if(!H?.trim())throw Error("Stdio MCP install requires a command after the server name, for example: cline mcp install fs --yes -- npx -y @modelcontextprotocol/server-filesystem /tmp");return{name:Z,transport:{type:X,command:H,args:B.length>0?B:void 0},warnings:j}}if(W.length!==1)throw Error("Remote MCP install requires exactly one URL argument after the server name.");let V=W[0]?.trim()??"";return Lh(V),{name:Z,transport:Y?{type:X,url:V,headers:Y}:{type:X,url:V},warnings:j}}function e5($){let[Z,...Q]=$;if(!Z)throw Error("Marketplace MCP install args must start with a server name.");return{name:Z,...tf({parseTransport:!0,targetArgs:Q})}}function Oh($,Z,Q){j1(Q,(W)=>{let J=W.mcpServers,X=J&&typeof J==="object"&&!Array.isArray(J)?{...J}:{};X[$]={transport:Z},W.mcpServers=X})}function nX($){let{name:Z,transport:Q,warnings:W}=U7($);return Oh(Z,Q,$.settingsPath??$0()),{name:Z,status:"installed",transport:Q,warnings:W}}var GU={};N(GU,{uninstallMarketplaceSkill:()=>q7,uninstallMarketplacePlugin:()=>M7,uninstallMarketplaceMcpServerFromSettings:()=>T7,uninstallMarketplaceEntry:()=>HY,resolveMarketplaceMcpServerName:()=>J9,marketplaceEntryKey:()=>VY,isMarketplaceSkillInstalled:()=>O7,getMarketplaceSkillCandidates:()=>X9,getGlobalMarketplaceSkillPaths:()=>Y9,findInstalledGlobalMarketplaceSkillName:()=>j9});import{spawn as eh}from"node:child_process";import{existsSync as HU,rmSync as $k}from"node:fs";import{homedir as Zk,platform as Qk}from"node:os";import{dirname as Wk,join as VU}from"node:path";import{resolveClineDir as Jk,resolveMcpSettingsPath as Xk}from"@cline/shared/storage";Y1();var jU={};N(jU,{uninstallPlugin:()=>Q9});import{existsSync as R4,readdirSync as Sh,readFileSync as bh,rmdirSync as yh,rmSync as hh,statSync as kh}from"node:fs";import{basename as $1,dirname as u$,extname as Ih,isAbsolute as xh,join as Z$,relative as gh,resolve as M4,sep as eX}from"node:path";import{discoverPluginModulePaths as mh,resolvePluginConfigSearchPaths as vh}from"@cline/shared/storage";var WU={};N(WU,{syncPluginMcpServersToSettings:()=>$9,removePluginMcpServersFromSettings:()=>Z9,disablePluginMcpServersInSettings:()=>tX});import{existsSync as qh,mkdirSync as Mh,readFileSync as Rh,writeFileSync as Eh}from"node:fs";import{dirname as ZU,isAbsolute as Nh,relative as Ch,resolve as $U}from"node:path";function p2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function D7($,Z){let Q=Ch($U($),$U(Z));return Q===""||!Q.startsWith("..")&&!Nh(Q)}function aX($){if(!qh($))return{mcpServers:{}};try{let Z=JSON.parse(Rh($,"utf8"));if(p2(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 sX($){if(p2($.mcpServers))return{...$.mcpServers};return{}}function oX($,Z,Q){Mh(ZU($),{recursive:!0}),Eh($,`${JSON.stringify({...Z,mcpServers:Q},null,2)}
|
|
736
|
+
`,"utf8")}function QU($){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 _7($){if(!p2($))return;let Z=$.metadata;return p2(Z)?Z:void 0}function L7($,Z){let Q=_7($);if(!Q||Q.source!=="plugin")return!1;let W=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,J=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&W===Z.pluginName){if(!Z.pluginPath||J===Z.pluginPath)return!0}if(J&&Z.pluginPath&&(J===Z.pluginPath||D7(Z.pluginPath,J)||D7(J,Z.pluginPath)))return!0;if(W&&Z.pluginNames?.some((X)=>X===W))return!0;if(J&&Z.pluginPaths?.some((X)=>J===X||D7(X,J)||D7(J,X)))return!0;return!1}function wh($){let Z=p2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:ZU($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function Ph($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await E8({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],W=[],J=(Z.failures??[]).map((X)=>({pluginPath:X.pluginPath,pluginName:X.pluginName,message:X.message}));for(let X of Z.extensions??[]){let Y=X.__clinePluginPath;if(!Y)continue;if(!X.setup){Q.push({pluginName:X.name,pluginPath:Y});continue}let j=[],V={registerTool:(H)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(H)=>{if(!X.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');j.push(H)}};try{await X.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(H){J.push({pluginPath:Y,pluginName:X.name,message:H instanceof Error?H.message:String(H)});continue}Q.push({pluginName:X.name,pluginPath:Y});for(let H of j)W.push({pluginName:X.name,pluginPath:Y,server:{...H,metadata:{...H.metadata??{},source:"plugin",pluginName:X.name,pluginPath:Y}}})}return{plugins:Q,servers:W,failures:J}}finally{await Z.shutdown().catch(()=>{})}}async function $9($){let Z=$.settingsPath??$0(),Q={mutations:[],failures:[]},W;try{W=await Ph($)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)});return Q}Q.failures.push(...W.failures);let J;try{J=aX(Z)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)});return Q}let X=sX(J),Y=new Map,j=new Map;for(let H of W.plugins)Y.set(H.pluginPath,new Set),j.set(H.pluginPath,H.pluginName);let V=LQ(W.servers.map((H)=>({server:H.server,owner:H,ownerLabel:H.pluginName})));for(let H of V){let B=H.owner;if(!Y.has(B.pluginPath))Y.set(B.pluginPath,new Set);if(H.name)Y.get(B.pluginPath)?.add(H.name);if(!H.registration){Q.mutations.push({name:H.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:"skipped",reason:H.loadError??"invalid MCP server registration"});continue}let G=X[H.registration.name];if(G!==void 0){if(!L7(G,{pluginName:B.pluginName,pluginPath:B.pluginPath})){Q.mutations.push({name:H.registration.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}X[H.registration.name]=wh({registration:H.registration,pluginName:B.pluginName,pluginPath:B.pluginPath,existing:p2(G)?G:void 0}),Q.mutations.push({name:H.registration.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:G===void 0?"created":"updated"})}for(let[H,B]of Object.entries(X)){let G=_7(B),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=Y.get(K);if(F&&L7(B,{pluginPath:K})&&!F.has(H))delete X[H],Q.mutations.push({name:H,pluginName:typeof G?.pluginName==="string"?G.pluginName:j.get(K)??"plugin",pluginPath:K,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((H)=>H.action!=="skipped"))try{oX(Z,J,X)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)})}return Q}function tX($){let Z=$.settingsPath??$0(),Q;try{Q=aX(Z)}catch{return[]}let W=sX(Q),J=QU($),X=[];for(let[Y,j]of Object.entries(W)){if(!p2(j)||!L7(j,J))continue;let V=_7(j);W[Y]={...j,disabled:!0},X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(X.length>0)oX(Z,Q,W);return X}function Z9($){let Z=$.settingsPath??$0(),Q;try{Q=aX(Z)}catch{return[]}let W=sX(Q),J=QU($),X=[];for(let[Y,j]of Object.entries(W)){if(!L7(j,J))continue;let V=_7(j);delete W[Y],X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(X.length>0)oX(Z,Q,W);return X}var JY="_installed",ch="package",uh=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function $Y($){return $.trim().toLowerCase()}function B1($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function dh($){return $.replace(/-[0-9a-f]{12}$/i,"")}function ZY($){let Z=Ih($);return Z?$.slice(0,-Z.length):$}function QY($){if(!R4($))return;try{let Z=JSON.parse(bh($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function XY($,Z){let Q=gh(Z,$);return Q===""||!Q.startsWith("..")&&!xh(Q)}function JU($){let Q=M4($).split(eX),W=Q.lastIndexOf(JY);if(W<0)return;let J=Q[W+1];if(!J)return;let X=uh.get(J)??1,Y=W+2+X;if(Q.length<Y)return;let j=Q.slice(0,Y).join(eX)||eX;return R4(j)?j:void 0}function z7($){try{return Sh($,{withFileTypes:!0})}catch{return[]}}function lh($){let Z=Z$($,JY);if(!R4(Z))return[];let Q=[];for(let W of z7(Z)){if(!W.isDirectory())continue;let J=Z$(Z,W.name);if(W.name==="git"){for(let X of z7(J)){if(!X.isDirectory())continue;let Y=Z$(J,X.name);for(let j of z7(Y))if(j.isDirectory())Q.push(Z$(Y,j.name))}continue}for(let X of z7(J))if(X.isDirectory())Q.push(Z$(J,X.name))}return Q.sort((W,J)=>W.localeCompare(J))}function XU($){try{return mh($)}catch{return[]}}function WY($){let Z=XU($),Q=new Set;B1(Q,$1($)),B1(Q,dh($1($))),B1(Q,QY(Z$($,"package.json"))),B1(Q,QY(Z$($,ch,"package.json")));for(let W of Z)B1(Q,$1(W)),B1(Q,ZY($1(W)));return{installPath:$,entryPaths:Z,names:[...Q].sort((W,J)=>W.localeCompare(J)),installed:!0}}function ph($,Z){let Q=M4($),W=Z.find((Y)=>XY(Q,Y));if(!W)return;let J=u$(Q);while(J!==W&&J!==u$(J)){if(R4(Z$(J,"package.json")))return J;J=u$(J)}let X=$1(Q);if((X==="index.ts"||X==="index.js")&&u$(Q)!==W)return u$(Q);return Q}function YU($,Z){let Q=ph($,Z);if(!Q)return;let W=new Set;return B1(W,$1($)),B1(W,ZY($1($))),B1(W,$1(Q)),B1(W,ZY($1(Q))),B1(W,QY(Z$(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...W].sort((J,X)=>J.localeCompare(X)),installed:!1}}function rh($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return vh(Z).filter((Q)=>R4(Q))}function ih($){let Z=new Map;for(let Q of $){for(let W of lh(Q))Z.set(W,WY(W));for(let W of XU(Q)){let J=JU(W);if(J){if(!Z.has(J))Z.set(J,WY(J));continue}let X=YU(W,$);if(X)Z.set(X.installPath,X)}}return[...Z.values()].sort((Q,W)=>Q.installPath.localeCompare(W.installPath))}function nh($,Z){let Q=$Y(Z);if(!Q)return!1;if($Y($.installPath)===Q)return!0;return $.names.some((W)=>$Y(W)===Q)}function ah($,Z,Q){let W=M4($);for(let X of Z){if(XY(W,X.installPath))return X;if(X.entryPaths.some((Y)=>M4(Y)===W))return X}let J=JU(W);if(J)return WY(J);if(R4(W))return YU(W,Q);return}function sh($){let Z=_0(),Q=Z.disabledPlugins;if(!Q?.length)return;let W=Q.filter((J)=>{let X=M4(J);if(XY(X,$.installPath))return!1;return!$.entryPaths.some((Y)=>M4(Y)===X)});if(W.length===Q.length)return;K1({...Z,disabledPlugins:W})}function oh($){let Z=u$($);while(Z!==u$(Z)&&$1(Z)!==JY){try{yh(Z)}catch{return}Z=u$(Z)}}function th($){return`${$.names[0]??$1($.installPath)} at ${$.installPath}`}async function Q9($){let Z=rh($),Q=ih(Z),W=$.path?.trim(),J=$.name?.trim(),X;if(W){if(X=ah(W,Q,Z),!X)throw Error(`No plugin found at ${W}`)}else{if(!J)throw Error("plugin uninstall requires a plugin name");let j=Q.filter((V)=>nh(V,J));if(j.length===0)throw Error(`No plugin found matching "${J}"`);if(j.length>1)throw Error(`Multiple plugins match "${J}": ${j.map(th).join(", ")}`);X=j[0]}let Y=kh(X.installPath,{throwIfNoEntry:!1});if(!Y)throw Error(`Plugin install path does not exist: ${X.installPath}`);if(Z9({pluginPaths:[X.installPath,...X.entryPaths],pluginNames:X.names}),hh(X.installPath,{recursive:Y.isDirectory(),force:!0}),sh(X),X.installed)oh(X.installPath);return{name:J||X.names[0]||$1(X.installPath),installPath:X.installPath,removedPaths:[X.installPath],entryPaths:X.entryPaths}}var YY=120000,W9=12000,Yk=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,jk=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,Vk=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,Hk=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function jY($){return $.install?.args??[]}function Bk(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||Zk()}function Gk($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function Kk($){return Gk($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function BU($){return $.split(/\r?\n/).map((Z)=>{if(!Yk.test(Z))return Z;return Z.replace(jk,"$1[redacted]").replace(Vk,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(Hk,"$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(`
|
|
737
|
+
`).slice(-W9)}function Fk($){let Z=BU([$.stdout,$.stderr].filter(Boolean).join(`
|
|
738
|
+
`)).trim();return Z.length>0?Z:void 0}function Ak($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function fk($,Z){return[$,...Z].map((Q)=>Ak(BU(Q).trim())).join(" ")}var Uk=async($,Z)=>new Promise((Q,W)=>{let J=!1,X=!1,Y=eh($,Z,{env:process.env,shell:Qk()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),j="",V="",H=setTimeout(()=>{if(!J)Y.kill("SIGKILL")},YY+5000),B=setTimeout(()=>{X=!0,V+=`
|
|
739
|
+
Timed out after ${YY/1000}s.`,Y.kill("SIGTERM")},YY);H.unref?.(),B.unref?.(),Y.stdout?.on("data",(G)=>{if(j+=String(G),j.length>W9*2)j=j.slice(-W9)}),Y.stderr?.on("data",(G)=>{if(V+=String(G),V.length>W9*2)V=V.slice(-W9)}),Y.once("error",(G)=>{clearTimeout(B),clearTimeout(H),W(G)}),Y.once("close",(G,K)=>{J=!0,clearTimeout(B),clearTimeout(H),Q({exitCode:X?124:G??(K==="SIGINT"?130:1),stdout:j,stderr:V})})});function VY($){return`${$.type}:${$.id}`}function J9($){let Z=jY($);if(Z.length===0)throw Error("Marketplace install args are required.");return e5(Z).name}function T7($,Z={}){let Q=J9($),W=Z.mcpSettingsPath??Xk(),J=j1(W,(X)=>{let Y=X.mcpServers&&typeof X.mcpServers==="object"&&!Array.isArray(X.mcpServers)?X.mcpServers:{},j=Object.hasOwn(Y,Q);if(j)delete Y[Q];return X.mcpServers=Y,j});return{name:Q,deleted:J}}function X9($){let Z=new Set,Q=(J)=>{let X=Kk(J??"");if(X&&X!=="skill")Z.add(X)};Q($.id),Q($.name);let W=jY($);for(let J=0;J<W.length;J++){let X=W[J];if((X==="--skill"||X==="-s")&&W[J+1]){Q(W[J+1]),J++;continue}let Y=X.split("@").at(1);if(Y)Q(Y)}return[...Z]}function Y9($){return[VU(Jk(),"skills",$,"SKILL.md"),VU(Bk(),".agents","skills",$,"SKILL.md")].filter((Z,Q,W)=>W.indexOf(Z)===Q)}function j9($){if($.type!=="skill")return;return X9($).find((Z)=>Y9(Z).some((Q)=>HU(Q)))}function O7($){return j9($)!==void 0}function Dk($){let Z=[];if($.type!=="skill")return Z;for(let Q of X9($))for(let W of Y9(Q)){if(!HU(W))continue;let J=Wk(W);$k(J,{recursive:!0,force:!0}),Z.push(J)}return Z}async function q7($,Z={}){let Q=j9($);if(!Q)return{id:$.id,type:"skill",status:"uninstalled",message:`${$.name??$.id} is not installed.`};let W="npx",J=["-y","skills@latest","remove",Q,"-g","-y"],X=fk(W,J),Y=Z.spawnCommand??Uk,j;try{j=await Y(W,J)}catch(B){throw Error(`Failed to start ${$.name??$.id} uninstall command:
|
|
740
740
|
${X}
|
|
741
|
-
${B instanceof Error?B.message:String(B)}`)}let V=
|
|
741
|
+
${B instanceof Error?B.message:String(B)}`)}let V=Fk(j);if(j.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${j.exitCode}.
|
|
742
742
|
Command:
|
|
743
743
|
${X}${V?`
|
|
744
744
|
|
|
745
|
-
${V}`:""}`);let H=
|
|
746
|
-
`)||void 0}}async function
|
|
747
|
-
`)}}async function HY($,Z={}){if($.type==="mcp"){let Q=J9($);if(Z.deleteMcpServer)await Z.deleteMcpServer(Q);else
|
|
748
|
-
`,"utf8")}function
|
|
749
|
-
`,"utf8")}async function
|
|
750
|
-
`,"utf8")}function CU($,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 PU($){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 SU($){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 AI($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function bU($,Z){return $??Z??"openai-chat"}function yU($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function hU($,Z,Q){let W=new Set(Z?.capabilities??Q??[]);if(Z?.supportsVision)W.add("images");if(Z?.supportsAttachments)W.add("files");if(Z?.supportsReasoning)W.add("reasoning");return{id:$,name:Z?.name??$,maxTokens:Z?.maxTokens,contextWindow:Z?.contextWindow,maxInputTokens:Z?.maxInputTokens,capabilities:W.size>0?[...W]:void 0}}function fI($,Z){for(let[Q,W]of Object.entries(Z??{})){let J=W.id?.trim()||Q.trim();if(!J)continue;x0.registerModel($,J,hU(J,W))}}function UI($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function DI($){return Object.assign({},...x0.resolveProviderModelCatalogKeys($).map((Q)=>x0.getGeneratedModelsForProvider(Q)))}function LI($){let Z=$.provider.trim();if(!Z||x0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let W=x0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],J=DI(Z),X=SU($.capabilities),Y=X.length>0?X:void 0,j=$.model?.trim(),V={...J,...W?.models??{}};if(j)V[j]=UI(j,V[j],Y);let H=Object.keys(V).filter(Boolean),B=j||H[0];if(!B)return;let G=bU($.protocol,W?.provider.protocol),K=yU($.client,G,W?.provider.client);x0.registerProvider({provider:{id:Z,name:W?.provider.name??EU(Z),description:W?.provider.description,protocol:G,client:K,baseUrl:Q,modelsSourceUrl:W?.provider.modelsSourceUrl,defaultModelId:B,capabilities:PU($.capabilities)??W?.provider.capabilities,source:"file"},models:V})}function x7($){for(let Z of Object.values($.providers))LI(Z.settings)}function V9($,Z){let Q=Z.models??{};if(!AI(Z.provider)){fI($,Q);return}let W=SU(Z.provider.capabilities),J=Object.entries(Q).map(([H,B])=>({id:B.id?.trim()||H.trim(),model:B})).filter(({id:H})=>H.length>0),X=Z.provider.defaultModelId?.trim()||J[0]?.id||"default",Y=bU(Z.provider.protocol,void 0),j=yU(Z.provider.client,Y,void 0),V=Object.fromEntries(J.map(({id:H,model:B})=>[H,{...hU(H,B,W.length>0?W:void 0),status:"active"}]));x0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||EU($),protocol:Y,client:j,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:X,capabilities:PU(Z.provider.capabilities),source:"file"},models:V})}function kU($){let Z=r2($);if(h7.has(Z))return;let Q=DY(Z);for(let[W,J]of Object.entries(Q.providers))V9(W,J);h7.add(Z)}async function g7($){let Z=r2($);if(h7.has(Z))return;let Q=await w4(Z);for(let[W,J]of Object.entries(Q.providers))V9(W,J);h7.add(Z)}var xU="cline-pass";function _I($){return $.apiKey??$.auth?.apiKey}function zI($){return($.auth?.accessToken?.trim()??"").length>0}function gU($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function TI($){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 OI($){let Z=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let W of $)Q=Q*31+W.charCodeAt(0)>>>0;return Z[Q%Z.length]}function mU($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>CU(Z,Q))}async function qI($,Z){let Q=await w0.getModelsForProvider($),W=$===xU;if(!Z&&!W)return Q;let J=await v6($,{loadLatestOnInit:W,loadPrivateOnAuth:!0,failOnError:!1},Z);if($==="litellm"&&J?.knownModels)return J.knownModels;if(W&&J?.knownModels)return J.knownModels;return J?.knownModels?{...Q,...J.knownModels}:Q}function LY($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function MI($){if(!$?.length)return;return[...new Set($)]}function RI($,Z){return MI([...$??[],...Z??[]])}function EI($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function NI($){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 wI($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(NI)}var m7={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},IU={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function CI($){if(!$)return[m7];if($.source!=="system")return $.baseUrl?[m7,IU]:[m7];let Z=[];if($.env?.length)Z.push(m7);if($.baseUrl)Z.push(IU);return Z}function PI($,Z){return Z.split(".").reduce((Q,W)=>{if(!Q||typeof Q!=="object")return;return Q[W]},$)}function SI($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function bI($,Z,Q){if(!$?.length)return;let W={};for(let J of $){let Y=SI(J.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:PI(Z,J.path))??J.defaultValue;if(Y!==void 0)W[J.path]=Y}return W}function vU($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function _Y($,Z){let Q=Z?.includes("vision")??!1,W=Z?.includes("reasoning")??!1;return Object.fromEntries($.map((J)=>[J,{id:J,name:J,supportsVision:Q,supportsAttachments:Q,supportsReasoning:W}]))}async function cU($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await wZ($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function uU($,Z){let Q=$.read(),W=!1;if(Q.providers[Z])delete Q.providers[Z],W=!0;if(Q.lastUsedProvider===Z)delete Q.lastUsedProvider,W=!0;if(W)$.write(Q);w0.unregisterProvider(Z)}async function zY($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=Z.baseUrl.trim(),J=Z.apiKey?.trim()??"";if(!W&&!J){let A=r2($);if((await w4(A)).providers[Q]){let f=await u7($,{providerId:Q});return{providerId:Q,settingsPath:f.settingsPath,modelsPath:f.modelsPath,modelsCount:0}}return uU($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(w0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let X=Z.name.trim();if(!X)throw Error("name is required");if(!W)throw Error("baseUrl is required");let Y=LY(Z.models),j=Z.modelsSourceUrl?.trim(),V=await cU({providerId:Q,explicitModels:Y,modelsSourceUrl:j,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let H=Z.defaultModelId?.trim()&&V.includes(Z.defaultModelId.trim())?Z.defaultModelId.trim():V[0],B=Z.capabilities?.length?[...new Set(Z.capabilities)]:void 0,G=vU(Z.headers);$.saveProviderSettings({provider:Q,apiKey:J||void 0,baseUrl:W,headers:G,timeout:Z.timeoutMs,model:H,protocol:Z.protocol,client:Z.client},{setLastUsed:!1});let K=r2($),F=await w4(K);return F.providers[Q]={provider:{name:X,baseUrl:W,defaultModelId:H,protocol:Z.protocol,client:Z.client,capabilities:B,modelsSourceUrl:j},models:_Y(V,B)},await I7(K,F),V9(Q,F.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function c7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=r2($),J=await w4(W),X=J.providers[Q];if(!X){let O=$.getProviderSettings(Q);if(!O)throw Error(`provider "${Q}" does not exist`);let z=Z.modelsSourceUrl?.trim(),_=LY(Z.models)[0]??O.model?.trim();if(!_&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);X={provider:{name:Z.name?.trim()||gU(Q),baseUrl:Z.baseUrl?.trim()??O.baseUrl?.trim()??"",defaultModelId:_,protocol:O.protocol,client:O.client,capabilities:O.capabilities},models:_?_Y([_],O.capabilities):{}}}if(!X.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let Y=Z.name?.trim()??X.provider.name.trim();if(!Y)throw Error("name is required");let j=Z.baseUrl?.trim()??X.provider.baseUrl.trim();if(!j)throw Error("baseUrl is required");let V=Z.capabilities===void 0?X.provider.capabilities:Z.capabilities===null?void 0:[...new Set(Z.capabilities)],H=Z.protocol===void 0?X.provider.protocol:Z.protocol??void 0,B=Z.client===void 0?X.provider.client:Z.client??void 0,G=LY(Z.models),K=Z.modelsSourceUrl===void 0?X.provider.modelsSourceUrl:Z.modelsSourceUrl?.trim()||void 0,F=Z.models!==void 0||Z.modelsSourceUrl!==void 0&&!!K,A=Object.keys(X.models??{}).map((O)=>O.trim()).filter(Boolean),L=await cU({providerId:Q,explicitModels:G,modelsSourceUrl:K,fallbackModelIds:A,shouldRecompute:F});if(L.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let f=Z.defaultModelId===void 0?X.provider.defaultModelId?.trim():Z.defaultModelId?.trim(),D=f&&L.includes(f)?f:L[0],T={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:j,model:D};if(H)T.protocol=H;else delete T.protocol;if(B)T.client=B;else delete T.client;if(Z.apiKey!==void 0){let O=Z.apiKey?.trim()??"";if(O)T.apiKey=O;else delete T.apiKey}if(Z.headers!==void 0){let O=vU(Z.headers);if(O)T.headers=O;else delete T.headers}if(Z.timeoutMs!==void 0)if(typeof Z.timeoutMs==="number")T.timeout=Z.timeoutMs;else delete T.timeout;return $.saveProviderSettings(T,{setLastUsed:!1}),J.providers[Q]={provider:{name:Y,baseUrl:j,defaultModelId:D,protocol:H,client:B,capabilities:V,modelsSourceUrl:K},models:_Y(L,V)},await I7(W,J),V9(Q,J.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W,modelsCount:L.length}}async function u7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=r2($),J=await w4(W);if(!J.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete J.providers[Q],await I7(W,J),w0.unregisterProvider(Q),uU($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W}}async function TY($,Z={}){let Q=$.read(),W=w0.getProviderIds(),J=await Promise.all(W.map(async(Y)=>{let[j,V]=await Promise.all([w0.getProvider(Y),w0.getModelsForProvider(Y)]),H=mU(V),B=Q.providers[Y]?.settings,G=j?.name??gU(Y),K=RI(j?.capabilities,B?.capabilities),F=wI(j?.metadata)??CI(j);return{provider:{id:Y,name:G,models:H.length,color:OI(Y),letter:TI(G),enabled:Boolean(B),apiKey:B?_I(B):void 0,oauthAccessTokenPresent:B?zI(B):void 0,baseUrl:B?.baseUrl??j?.baseUrl,defaultModelId:j?.defaultModelId,protocol:B?.protocol??j?.protocol,client:B?.client??j?.client,capabilities:K,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:F,configValues:bI(F,B,j),modelList:H},rank:EI(j?.metadata)}}));J.sort((Y,j)=>{if(Y.rank!==j.rank)return Y.rank-j.rank;return Y.provider.name.localeCompare(j.provider.name)||Y.provider.id.localeCompare(j.provider.id)});let X=J.map((Y)=>Y.provider);if(Z.isClinePassEnabled!==!0)X=X.filter((Y)=>Y.id!==xU);return{providers:X,settingsPath:$.getFilePath()}}async function OY($,Z){let Q=$.trim(),W=await qI(Q,Z),J=mU(W);return{providerId:Q,models:J}}function v7($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function dU($,Z){if(!v7(Z))return v7($)?{...$}:void 0;let Q=v7($)?{...$}:{};for(let[W,J]of Object.entries(Z)){if(J==null||J===""){delete Q[W];continue}if(v7(J)){let X=dU(Q[W],J);if(X&&Object.keys(X).length>0)Q[W]=X;else delete Q[W];continue}Q[W]=J}return Object.keys(Q).length>0?Q:void 0}function qY($,Z){let Q=Z.providerId.trim();if(Z.enabled===!1){let X=$.read();if(delete X.providers[Q],X.lastUsedProvider===Q)delete X.lastUsedProvider;return $.write(X),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let J={...$.getProviderSettings(Q)??{},provider:Q};for(let X of["apiKey","baseUrl","model","region"])if(Object.hasOwn(Z,X)&&typeof Z[X]==="string")if(Z[X].trim().length===0)delete J[X];else J[X]=Z[X];for(let X of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(Z,X))J[X]=Z[X];for(let X of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(Z,X)&&Z[X]!=null){let Y=dU(J[X],Z[X]);if(Y)J[X]=Y;else delete J[X]}return $.saveProviderSettings(J,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function MY($,Z){let Q=Z.trim(),W=$.getProviderSettings(Q),X=w0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,Y=W?.baseUrl?.trim()||X?.baseUrl?.trim(),j=CZ(Y,X?.baseUrl,X?.modelsSourceUrl);if(!W||!X||!Y||!j)return{providerId:Q,refreshed:!1};let V=await c7($,{providerId:Q,name:X.name,baseUrl:Y,apiKey:W.apiKey,headers:W.headers??null,timeoutMs:W.timeout??null,modelsSourceUrl:j,protocol:W.protocol??X.protocol??null,client:W.client??X.client??null,capabilities:W.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:V.modelsCount}}function RY($){let Z=$.trim().toLowerCase(),Q=j0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function EY($,Z,Q,W){let J=j0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let X=g8({onPrompt:async(Y)=>Y.defaultValue??"",openUrl:Q,onOpenUrlError:({error:Y})=>{throw Y instanceof Error?Y:Error(String(Y))}});return J.login({settings:Z,callbacks:X,telemetry:W})}function NY($,Z,Q,W,J){return n$({manager:$,providerId:Z,settings:Q,credentials:W,setLastUsed:J?.setLastUsed})}async function wY($,Z,Q,W){let J=g8({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return c4($,Z,{callbacks:J,telemetry:W})}function CY($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}var pU={};N(pU,{getProviderConfigFields:()=>PY});import*as d7 from"@cline/llms";var yI=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],hI={"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 kI($,Z){let Q={};for(let W of yI){let J=$[W],X=Z[W];if(J||X)Q[W]={...J,...X}}return Q}function II($){let Z=hI[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:kI($.fields,Z.fields)}}var xI=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function gI($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return xI.has($)}function PY($){let Z=d7.normalizeProviderId($);if(i$(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=d7.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:Z,authMethod:"local",fields:{}};let W=Q?.provider.baseUrl,J={apiKey:{}};if(gI(Z,Q))J.baseUrl={defaultValue:W};return II({providerId:Z,authMethod:"api-key",fields:J})}var aU={};N(aU,{resolveLegacyClineAuth:()=>yY,migrateLegacyProviderSettings:()=>H9});import{existsSync as mI,readFileSync as vI}from"node:fs";import{dirname as cI,join as SY}from"node:path";import*as C4 from"@cline/llms";import{resolveClineDataDir as uI}from"@cline/shared/storage";var l7="openai",nU=C4.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,rU=128000;function yY($){let Z=$?.trim();if(!Z)return;try{let Q=JSON.parse(Z);if(!Q)return;let W=typeof Q.expiresAt==="number"&&Number.isFinite(Q.expiresAt)?Q.expiresAt<10000000000?Q.expiresAt*1000:Q.expiresAt:void 0;return{accessToken:Q.idToken,refreshToken:Q.refreshToken,expiresAt:W,accountId:Q.userInfo?.id}}catch{return}}function b($){let Z=$?.trim();return Z?Z:void 0}function dI($){return $==="credentials"?"iam":$}function iU($){if(!mI($))return;try{let Z=vI($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function lI($){let Z=$.dataDir??uI(),Q=$.globalStatePath??SY(Z,"globalState.json"),W=$.secretsPath??SY(Z,"secrets.json"),J=iU(Q),X=iU(W);if(!J&&!X)return;return{globalState:J??{},secrets:X??{}}}function bY($){if($===l7)return nU;return $}function pI($,Z,Q,W){let J=Q==="plan"?"planMode":"actMode",X=Z===W?b(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,j={openrouter:`${J}OpenRouterModelId`,cline:`${J}ClineModelId`,openai:`${J}OpenAiModelId`,ollama:`${J}OllamaModelId`,lmstudio:`${J}LmStudioModelId`,litellm:`${J}LiteLlmModelId`,requesty:`${J}RequestyModelId`,together:`${J}TogetherModelId`,fireworks:`${J}FireworksModelId`,sapaicore:`${J}SapAiCoreModelId`,groq:`${J}GroqModelId`,baseten:`${J}BasetenModelId`,huggingface:`${J}HuggingFaceModelId`,"huawei-cloud-maas":`${J}HuaweiCloudMaasModelId`,oca:`${J}OcaModelId`,aihubmix:`${J}AihubmixModelId`,hicap:`${J}HicapModelId`,nousResearch:`${J}NousResearchModelId`,"vercel-ai-gateway":`${J}VercelAiGatewayModelId`}[Z];return(j?b(typeof $[j]==="string"?$[j]:void 0):void 0)??X}function rI($,Z,Q){let W=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,J=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(b).find(Boolean),X=J==="none"||J==="low"||J==="medium"||J==="high"||J==="xhigh"?J:void 0,Y=typeof W==="number"&&Number.isInteger(W)&&W>0?W:void 0;if(!X&&Y===void 0)return;return{...X?{effort:X}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function iI($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),W=b(Q.access_token),J=b(Q.refresh_token),X=b(Q.accountId);if(!W&&!J&&!X)return;return{...W?{apiKey:W}:{},auth:{...W?{accessToken:W}:{},...J?{refreshToken:J}:{},...X?{accountId:X}:{}}}}catch{return}}function nI($){let Z=C4.getGeneratedModelsForProvider($),W=C4.getProviderCollectionSync($)?.provider.defaultModelId;if(W&&Z[W])return W;return Object.keys(Z)[0]??void 0}function aI($,Z,Q,W){let J=bY($),X=b(W==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),Y=pI(Z,$,W,X)??nI(J),j=rI(Z,J,W),V=typeof Z.requestTimeoutMs==="number"&&Number.isInteger(Z.requestTimeoutMs)&&Z.requestTimeoutMs>0?Z.requestTimeoutMs:void 0,H={anthropic:Q.apiKey,cline:Q.clineApiKey,openai:Q.openAiApiKey,"openai-native":Q.openAiNativeApiKey,openrouter:Q.openRouterApiKey,bedrock:Q.awsBedrockApiKey,gemini:Q.geminiApiKey,ollama:Q.ollamaApiKey,deepseek:Q.deepSeekApiKey,requesty:Q.requestyApiKey,together:Q.togetherApiKey,fireworks:Q.fireworksApiKey,qwen:Q.qwenApiKey,doubao:Q.doubaoApiKey,mistral:Q.mistralApiKey,litellm:Q.liteLlmApiKey,asksage:Q.asksageApiKey,xai:Q.xaiApiKey,moonshot:Q.moonshotApiKey,zai:Q.zaiApiKey,huggingface:Q.huggingFaceApiKey,nebius:Q.nebiusApiKey,sambanova:Q.sambanovaApiKey,cerebras:Q.cerebrasApiKey,groq:Q.groqApiKey,"huawei-cloud-maas":Q.huaweiCloudMaasApiKey,baseten:Q.basetenApiKey,"vercel-ai-gateway":Q.vercelAiGatewayApiKey,dify:Q.difyApiKey,minimax:Q.minimaxApiKey,hicap:Q.hicapApiKey,aihubmix:Q.aihubmixApiKey,nousResearch:Q.nousResearchApiKey,oca:Q.ocaApiKey},B={};if($==="openai-codex")Object.assign(B,iI(Q));if($==="cline")try{let D=b(Q["cline:clineAccountId"]);if(D)B.auth={...B.auth??{},...yY(D)}}catch{}if($===l7&&Z.openAiHeaders)B.headers=Z.openAiHeaders;if($==="bedrock"){let D=dI(Z.awsAuthentication),U=D==="profile"||Z.awsUseProfile===!0;B.aws={accessKey:b(Q.awsAccessKey),secretKey:b(Q.awsSecretKey),sessionToken:b(Q.awsSessionToken),region:b(Z.awsRegion),authentication:D,profile:U?b(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:b(Z.awsBedrockEndpoint),customModelBaseId:b(W==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")B.gcp={projectId:b(Z.vertexProjectId),region:b(Z.vertexRegion)};if($===l7&&(Z.azureApiVersion||Z.azureIdentity!==void 0))B.azure={apiVersion:b(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let D=Z.sapAiCoreUseOrchestrationMode??!0;B.sap={clientId:b(Q.sapAiCoreClientId),clientSecret:b(Q.sapAiCoreClientSecret),tokenUrl:b(Z.sapAiCoreTokenUrl),resourceGroup:b(Z.sapAiResourceGroup),deploymentId:D?void 0:b(W==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:D}}if($==="oca"){B.oca={mode:Z.ocaMode};let D=b(Q.ocaRefreshToken);if(D)B.auth={...B.auth??{},refreshToken:D}}if($==="qwen")B.apiLine=Z.qwenApiLine;if($==="moonshot")B.apiLine=Z.moonshotApiLine;if($==="zai")B.apiLine=Z.zaiApiLine;if($==="minimax")B.apiLine=Z.minimaxApiLine;let G={anthropic:Z.anthropicBaseUrl,openai:Z.openAiBaseUrl,ollama:Z.ollamaBaseUrl,lmstudio:Z.lmStudioBaseUrl,litellm:Z.liteLlmBaseUrl,gemini:Z.geminiBaseUrl,requesty:Z.requestyBaseUrl,asksage:Z.asksageApiUrl,dify:Z.difyBaseUrl,oca:Z.ocaBaseUrl,aihubmix:Z.aihubmixBaseUrl,sapaicore:Z.sapAiCoreBaseUrl},K=b(H[$]),F=b(G[$]),A={provider:J,...K?{apiKey:K}:{},...Y?{model:Y}:{},...F?{baseUrl:F}:{},...j?{reasoning:j}:{},...V?{timeout:V}:{},...B},L=h8.safeParse(A);if(!L.success)return;return Object.keys(A).filter((D)=>D!=="provider").length>0?L.data:void 0}function sI($,Z){if($!==nU)return;if(!Z.baseUrl||!Z.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:Z.baseUrl,defaultModelId:Z.model},models:{[Z.model]:{id:Z.model,name:Z.model,contextWindow:rU,maxInputTokens:rU,capabilities:["streaming","tools","images"]}}}}function oI($,Z){let Q=new Set;for(let J of[$.actModeApiProvider,$.planModeApiProvider]){let X=b(J);if(X)Q.add(X)}if(b(Z.apiKey))Q.add("anthropic");if(b(Z.openRouterApiKey))Q.add("openrouter");if(b(Z.openAiApiKey))Q.add(l7);if(b(Z.openAiNativeApiKey))Q.add("openai-native");if(b(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(b(Z.geminiApiKey))Q.add("gemini");if(b(Z.ollamaApiKey))Q.add("ollama");if(b(Z.awsAccessKey)||b(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||b($.awsProfile))Q.add("bedrock");if(b($.vertexProjectId)||b($.vertexRegion))Q.add("vertex");if(b(Z.clineApiKey))Q.add("cline");let W=yY(b(Z["cline:clineAccountId"]));if(W?.accessToken||W?.refreshToken||W?.accountId)Q.add("cline");if(b(Z.ocaApiKey))Q.add("oca");if(b(Z.sapAiCoreClientId)||b(Z.sapAiCoreClientSecret)||b($.sapAiCoreTokenUrl)||b($.sapAiCoreBaseUrl)||b($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function H9($){let Z=$.providerSettingsManager.read(),Q=lI($);if(!Q)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let{globalState:W,secrets:J}=Q,X=W.mode==="plan"?"plan":"act",Y=oI(W,J),j=N$();j.providers={...Z.providers},j.lastUsedProvider=Z.lastUsedProvider;let V=new Date().toISOString(),H=0,B=SY(cI($.providerSettingsManager.getFilePath()),"models.json"),G=DY(B),K=0;for(let L of Y){let f=bY(L);if(j.providers[f])continue;let D=aI(L,W,J,X);if(!D)continue;j.providers[f]={settings:D,updatedAt:V,tokenSource:"migration"},H+=1;let U=sI(f,D);if(U&&!G.providers[f])G.providers[f]=U,K+=1}if(H===0&&K===0)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let F=b(X==="plan"?W.planModeApiProvider:W.actModeApiProvider),A=F?bY(F):void 0;if(j.lastUsedProvider=Z.lastUsedProvider??(A&&j.providers[A]?A:Object.keys(j.providers)[0]),$.providerSettingsManager.write(j),K>0)wU(B,G);return{migrated:H>0||K>0,providerCount:Object.keys(j.providers).length,lastUsedProvider:j.lastUsedProvider}}V7();L0();sQ();var sU={};N(sU,{FileTeamPersistenceStore:()=>p7});import{appendFileSync as tI,existsSync as hY,mkdirSync as eI,readFileSync as $x,renameSync as Zx,unlinkSync as Qx,writeFileSync as Wx}from"node:fs";import{join as kY}from"node:path";import{resolveTeamDataDir as Jx}from"@cline/shared/storage";function Xx($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class p7{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=Xx($.teamName),Q=$.baseDir?.trim()||Jx();this.dirPath=kY(Q,Z),this.statePath=kY(this.dirPath,"state.json"),this.taskHistoryPath=kY(this.dirPath,"task-history.jsonl")}loadState(){if(!hY(this.statePath))return;try{let $=$x(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 XA(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`;Wx(Q,`${JSON.stringify(Z,null,2)}
|
|
751
|
-
`,"utf8"),
|
|
752
|
-
`,"utf8")}ensureDir(){if(!hY(this.dirPath))eI(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(hY(this.statePath))Qx(this.statePath)}}var oU={};N(oU,{ChatViewStateSchema:()=>IY,ChatSummarySchema:()=>s7,ChatSessionStatusSchema:()=>i7,ChatSessionConfigSchema:()=>r7,ChatMessageSchema:()=>a7,ChatMessageRoleSchema:()=>n7});import{z as h}from"zod";var r7=h.object({workspaceRoot:h.string().min(1),cwd:h.string().optional(),provider:h.string().min(1),model:h.string().min(1),mode:h.enum(["act","plan"]).default("act"),apiKey:h.string(),systemPrompt:h.string().optional(),rules:h.string().optional(),maxIterations:h.number().int().positive().optional(),enableTools:h.boolean(),enableSpawn:h.boolean().optional(),enableTeams:h.boolean().optional(),autoApproveTools:h.boolean().optional(),missionStepInterval:h.number().int().positive().optional(),missionTimeIntervalMs:h.number().int().positive().optional()}),i7=h.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),n7=h.enum(["user","assistant","tool","system","status","error"]),a7=h.object({id:h.string().min(1),sessionId:h.string().nullable(),role:n7,content:h.string(),createdAt:h.number().int().nonnegative(),meta:h.object({stream:h.enum(["stdout","stderr"]).optional(),toolName:h.string().optional(),iteration:h.number().int().nonnegative().optional(),agentId:h.string().optional(),conversationId:h.string().optional(),hookEventName:h.string().optional(),inputTokens:h.number().int().nonnegative().optional(),outputTokens:h.number().int().nonnegative().optional(),checkpoint:h.object({ref:h.string(),createdAt:h.number().int().nonnegative(),runCount:h.number().int().positive(),kind:h.enum(["stash","commit"]).optional()}).optional()}).optional()}),s7=h.object({toolCalls:h.number().int().nonnegative(),tokensIn:h.number().int().nonnegative(),tokensOut:h.number().int().nonnegative()}),IY=h.object({sessionId:h.string().nullable(),status:i7,config:r7,messages:h.array(a7),rawTranscript:h.string(),error:h.string().nullable(),summary:s7});var tU={};N(tU,{CORE_BUILD_VERSION:()=>xY});var xY=$F;import{Agent as tx,createAgentRuntime as ex}from"@cline/agents";var eU={};N(eU,{fetchClineRecommendedModels:()=>mY,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>o7});import{getClineEnvironmentConfig as Yx}from"@cline/shared";var jx=5000,o7={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 Vx($){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 gY($){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 Hx($){if(!$||typeof $!=="object")return null;let Z=$,Q=Array.isArray(Z.recommended)?Z.recommended:[],W=Array.isArray(Z.free)?Z.free:[],J=Array.isArray(Z.clinePass)?Z.clinePass:[],X=Q.map(gY).filter((V)=>V!==null),Y=W.map(gY).filter((V)=>V!==null),j=J.map(gY).filter((V)=>V!==null);if(X.length===0&&Y.length===0&&j.length===0)return null;return{recommended:X,free:Y,clinePass:j}}function Bx($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=Yx().apiBaseUrl;try{return($.providerSettingsManager??new O1).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function Gx($,Z,Q){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await $(Z,{signal:W.signal})}finally{clearTimeout(J)}}async function mY($={}){try{let Z=Bx($),Q=$.fetchImpl??fetch,W=await Gx(Q,`${Z}/api/v1/ai/cline/recommended-models`,$.timeoutMs??jx);if(!W.ok)throw Error(`HTTP ${W.status}`);let J=await W.json(),X=Hx(J);if(X)return X}catch{}return Vx(o7)}var $D={};N($D,{loadLlmsConfigFromFile:()=>cY,defineLlmsConfig:()=>vY});import{readFile as Kx}from"node:fs/promises";import Fx from"node:path";function vY($){return $}async function cY($){let Z=Fx.resolve($),Q=await Kx(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(J){let X=J instanceof Error?J.message:String(J);throw Error(`Failed to parse JSON config at "${Z}": ${X}`)}return Ax(W,Z)}function Ax($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let W=$.providers;if(!Array.isArray(W))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!W.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}var YD={};N(YD,{createLlmsSdk:()=>dY,DefaultLlmsSdk:()=>B9});import{BUILT_IN_PROVIDER_IDS as WD,createHandler as Dx,createHandlerAsync as Lx,getProviderCollection as _x,hasProvider as JD,registerAsyncHandler as zx,registerHandler as Tx,registerModel as Ox,registerProvider as XD}from"@cline/llms";function ZD($){return $?{...$}:{}}function fx($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function Ux($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function QD($){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 uY{providers=new Map;register($){Ux($.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??{},...ZD($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:fx($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...ZD($.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 B9{configuredProviders=new uY;constructor($){this.applyConfig($)}createHandler($){return Dx(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return Lx(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(XD($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)Tx($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)zx($.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.`);XD({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($){Ox($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...WD]}async getBuiltInProviders(){return(await Promise.all(WD.map((Z)=>_x(Z)))).filter((Z)=>Z!==void 0).map((Z)=>QD({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=JD(Z.id),W=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,J=typeof W==="string"&&JD(W);if(!Q&&!J)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function dY($){return new B9($)}KX();async function qx(){return Promise.resolve().then(() => (V7(),gf))}function Jg(){return new Date().toISOString()}var Xg="cline",Yg="cline-pass";function jg($){if(BD($)!=="providers.json")return;let Z=pY($);if(BD(Z)!=="settings")return;return pY(Z)}class O1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??Wg(),this.dataDir=$.dataDir??jg(this.filePath),this.dataDir||!$.filePath)H9({providerSettingsManager:this,dataDir:this.dataDir});if(kU(this),x7(this.read()),lY(this.filePath))try{HD(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!lY(this.filePath))return N$();try{let $=Zg(this.filePath,"utf8"),Z=JSON.parse($),Q=k8.safeParse(Z);if(Q.success)return x7(Q.data),Q.data}catch{}return N$()}write($){let Z=k8.parse($),Q=pY(this.filePath);if(!lY(Q))$g(Q,{recursive:!0,mode:448});Qg(this.filePath,`${JSON.stringify(Z,null,2)}
|
|
753
|
-
`,"utf8");try{HD(this.filePath,384)}catch{}x7(Z)}saveProviderSettings($,Z={}){let Q=h8.parse($),W=this.read(),J=Q.provider,X=Z.setLastUsed!==!1,Y=W.providers[J],j=Z.tokenSource??Y?.tokenSource??"manual",V={...W,providers:{...W.providers,[J]:{settings:Q,updatedAt:Jg(),tokenSource:j}},lastUsedProvider:X?J:W.lastUsedProvider};return this.write(V),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,J=j0(Z)?.storageProviderId;if(!J||J===Z)return Q;let X=$.providers[J]?.settings;if(!X)return Q;return h8.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===Yg&&Z.isClinePassEnabled===!1)return Xg;return Q}getLastUsedProviderSettings($={}){let Z=this.read(),Q=this.resolveLastUsedProviderId(Z,$);if(!Q)return;return this.resolveProviderSettings(Z,Q)}getProviderConfig($,Z){let Q=this.getProviderSettings($);if(!Q)return;return l0(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return l0(Z,$)}async refreshCatalog(){try{await b8({})}catch{}}}L0();Z4();function Vg($,Z){let Q=$?.expiresAt,W=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===W}class t7 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 rY{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new O1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=j0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let W=this.refreshInFlight.get(Z);if(W)return W;let J=this.resolveProviderApiKeyInternal($,Z,Q).catch((X)=>{throw X}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,J),J}async resolveProviderApiKeyInternal($,Z,Q){let W=j0($);if(!W)return null;let J=this.providerSettingsManager.getProviderSettings(Z);if(!J)return null;let X=u4($,J);if(!X)return null;let Y=await W.refresh({settings:J,credentials:X,forceRefresh:Q,telemetry:this.telemetry});if(!Y)throw new t7($);let j=n$({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:Y,setLastUsed:!1,save:!1}),V=!Vg(J.auth,j.auth);if(V)this.providerSettingsManager.saveProviderSettings(j,{setLastUsed:!1,tokenSource:"oauth"});return{apiKey:W.getApiKey(j)??Y.access,accountId:Y.accountId,refreshed:V}}}import{normalizeUserInput as Hg}from"@cline/shared";import{nanoid as Bg}from"nanoid";class GD{list($){return $?Z1($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((V)=>V.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:Z1($),updated:!1};let J=$.pendingPrompts[W];if(!J)return{sessionId:Z.sessionId,prompts:Z1($),updated:!1};let X=Z.prompt===void 0?J.prompt:Hg(Z.prompt).trim();if(!X)throw Error("prompt cannot be empty");let Y=Z.delivery??J.delivery,j={...J,prompt:X,mode:Z.mode??J.mode,delivery:Y};return $.pendingPrompts.splice(W,1),Gg($,j,W,J.delivery),{sessionId:Z.sessionId,prompts:Z1($),prompt:e7(j),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((X)=>X.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:Z1($),removed:!1};let[J]=$.pendingPrompts.splice(W,1);return{sessionId:Z.sessionId,prompts:Z1($),prompt:J?e7(J):void 0,removed:!0}}enqueue($,Z){let{prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y}=Z,j=$.pendingPrompts.findIndex((V)=>V.prompt===Q);if(j>=0){let[V]=$.pendingPrompts.splice(j,1),H={...V,prompt:Q,mode:W??V.mode,userImages:X??V.userImages,userFiles:Y??V.userFiles};if(J==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...H,delivery:"steer"});else $.pendingPrompts.push(H)}else{let V={id:`pending_${Date.now()}_${Bg(5)}`,prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return Z1($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((W)=>W.delivery==="steer");if(Z<0)return{prompts:Z1($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:Z1($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:Z1($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),Z1($)}clear($){return $.pendingPrompts.length=0,[]}}class iY{deps;service=new GD;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:Z1($)}})}scheduleDrain($,Z){if(Z.pendingPrompts.length===0||Z.aborting||Z.drainingPendingPrompts||!Z.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let Z=this.deps.getSession($);if(!Z)return;if(Z.aborting||Z.drainingPendingPrompts)return;if(!Z.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(Z);if(!Q)return;this.emitPrompts(Z),this.emitSubmitted(Z,Q),Z.drainingPendingPrompts=!0;let W=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{W=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,W&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=e7(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 e7($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function Z1($){return $.pendingPrompts.map(e7)}function Gg($,Z,Q,W){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(W==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}L0();class aY{deps;constructor($){this.deps=$}dispatchAgentEvent($,Z,Q){let W=this.deps.getSession($),J={sessionId:$,config:Z,liveSession:W,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},X=W3(Q),Y=!!W&&(!X.agentId||X.agentId===nY(W.agent));J3(J,Q,Y?{isPrimaryAgentEvent:!0,agentId:nY(W.agent),conversationId:W.agent.getConversationId(),...W?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(rJ(Q,Z),Z.type==="agent_event"){let W={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};J3(W,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let W=v1({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:nY(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(W)Y$(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...W})}}if(await iJ($,Z,this.deps.invokeBackendOptional),Q)nJ(Q,$,Z,this.deps.emit)}async handlePluginEvent($,Z,Q){if(Z.name==="plugin_log"){this.handlePluginLog($,Z.payload);return}if(Z.name==="automation_event"){let V=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!V)return;let H=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!H)return;await V.ingestEvent(H);return}if(Z.name!=="steer_message"&&Z.name!=="queue_message"&&Z.name!=="pending_prompt")return;let W=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0,J=typeof W?.sessionId==="string"&&W.sessionId.trim().length>0?W.sessionId.trim():$,X=typeof W?.prompt==="string"?W.prompt.trim():"";if(!X)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":W?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(J,{prompt:X,delivery:Y})}handlePluginLog($,Z,Q){let W=this.deps.getSession($),J=Q??W?.config.extensionContext?.logger??W?.config.logger;if(!J||!Z||typeof Z!=="object")return;let X=Z,Y=typeof X.message==="string"?X.message:"";if(!Y)return;let j=X.metadata&&typeof X.metadata==="object"?{...X.metadata}:{};if(j.sessionId??=$,typeof X.pluginName==="string"&&X.pluginName)j.pluginName=X.pluginName;if(X.level==="debug"){J.debug(Y,j);return}if(X.level==="error"){if(J.error)J.error(Y,j);else J.log(Y,{...j,severity:"error"});return}J.log(Y,j)}}function nY($){return $.getAgentId()}function sY($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:T$($.config),teamName:$.config.teamName?.trim()||void 0,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,parentSessionId:typeof $.sessionMetadata?.parentSessionId==="string"?$.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof $.sessionMetadata?.parentAgentId==="string"?$.sessionMetadata.parentAgentId:void 0,agentId:typeof $.sessionMetadata?.agentId==="string"?$.sessionMetadata.agentId:void 0,conversationId:typeof $.sessionMetadata?.conversationId==="string"?$.sessionMetadata.conversationId:void 0,isSubagent:typeof $.sessionMetadata?.isSubagent==="boolean"?$.sessionMetadata.isSubagent:!1,prompt:$.pendingPrompt,metadata:$.sessionMetadata,messagesPath:$.artifacts?.messagesPath,updatedAt:$.updatedAt??$.endedAt??$.startedAt}}function oY($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function KD($,Z,...Q){let W=oY($,Z);if(!W)throw Error(`session service method not available: ${Z}`);return Promise.resolve(W.apply($,Q))}async function FD($,Z,...Q){let W=oY($,Z);if(!W)return;await Promise.resolve(W.apply($,Q))}async function AD($,Z,...Q){let W=oY($,Z);if(!W)return;return await Promise.resolve(W.apply($,Q))}Y1();L0();function tY($,Z,Q){return{onSubAgentEvent:(W)=>$.onAgentEvent(Q,Z,W),onSubAgentStart:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(W.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let X=v1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId});if(X)Y$(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...X});y4(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:W.parentAgentId,agentId:W.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",Q,W)},onSubAgentEnd:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime,X=$.subAgentStarts.get(W.subAgentId),Y=X?Date.now()-X.startedAt:0,j=W.result?.text?W.result.text.split(`
|
|
754
|
-
`).length:0;y4(Z.telemetry,{event:"ended",ulid:Q,durationMs:Y,outputLines:j,errorMessage:W.error?String(W.error):void 0,agentId:W.subAgentId,parentId:W.parentAgentId,...v1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId})}),$.subAgentStarts.delete(W.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,W)}}}function eY($,Z,Q,W){let J=tY($,Z,Q);return _$({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let Y=Z.enableTools?j2({cwd:Z.cwd,...u0[I1({mode:Z.mode})],executors:W}):[];if(Z.enableSpawnAgent)Y.push(eY($,Z,Q,W));return g1(Y)},...J})}import{readFile as Kg,stat as Fg}from"node:fs/promises";var Ag=20480000;async function fD($){let Z=await Fg($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>Ag)throw Error("File is too large to read into context.");let Q=await Kg($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var UD=5000;function G9($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Og($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=G9(Z.inputTokens),W=G9(Z.outputTokens),J=G9(Z.cacheReadTokens),X=G9(Z.cacheWriteTokens),Y=G9(Z.totalCost);if(Q===void 0||W===void 0||J===void 0||X===void 0||Y===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:J,cacheWriteTokens:X,totalCost:Y}}function qg($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}class z1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new R5;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new c$;constructor($){let Z=Ug();if(Z)Tg(Z);let Q=h0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new q4,this.createAgentInstance=$.createAgent??((W)=>new U$(W)),this.defaultCapabilities=O0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new O1,this.oauthTokenManager=$.oauthTokenManager??new rY({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new iY({getSession:(W)=>this.sessions.get(W),emit:(W)=>this.emit(W),send:(W)=>this.runTurn(W)}),this.pendingPrompts={list:async(W)=>this.pendingPromptsController.list(W.sessionId),update:async(W)=>this.pendingPromptsController.update(W),delete:async(W)=>this.pendingPromptsController.delete(W)},this.eventBridge=new aY({getSession:(W)=>this.sessions.get(W),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(W)=>this.emit(W),persistMessages:(W,J,X)=>{this.invoke("persistSessionMessages",W,J,X)},enqueuePendingPrompt:(W,J)=>this.pendingPromptsController.enqueue(W,J),invokeBackendOptional:(W,...J)=>this.invokeOptional(W,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.source??_0.CLI,Q=J0(),W=$.config.sessionId?.trim()??"",J=W||Lg(),X=await this.applyInitialOAuthCredentials($),Y=X.initialMessages??[],j=Y.length>0?T8(Y):D0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let H=$j(V,J),B=$j(H,`${J}.messages.json`),G=$j(H,`${J}.json`),K=T$($.config),F=P0.parse({version:1,session_id:J,source:Z,pid:process.pid,started_at:Q,status:"running",interactive:$.interactive===!0,provider:X.config.providerId,model:X.config.modelId,cwd:X.config.cwd,workspace_root:K,team_name:X.config.teamName,enable_tools:X.config.enableTools,enable_spawn:X.config.enableSpawnAgent,enable_teams:X.config.enableAgentTeams,prompt:X.prompt?.trim()||void 0,messages_path:B}),A;if(W.length>0&&Y.length>0&&!X.prompt?.trim()){let P=await this.invokeOptionalValue("readSessionManifest",J);if(P)F=P,A={manifestPath:G,messagesPath:P.messages_path||B,manifest:P}}let f=await this.seedAggregateUsageFromArtifacts({initialUsage:j,sessionDir:H,rootMessagesPath:A?.messagesPath??B,manifest:F});this.usageBySession.set(J,j),this.aggregateUsageBySession.set(J,f);let D=O0(this.defaultCapabilities,$.capabilities),U=D?.toolExecutors??this.toolExecutors,T=$.localRuntime,O=T?.extensionContext?.logger??T?.logger,z=T?.extensionContext?.automation,_,E={getSession:(P)=>this.sessions.get(P),subAgentStarts:this.subAgentStarts,onAgentEvent:(P,B0,G0)=>this.eventBridge.dispatchAgentEvent(P,B0,G0),invokeBackendOptional:(P,...B0)=>this.invokeOptional(P,...B0)};_=await jG({input:X,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:D,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(P)=>{if(P.name==="plugin_log"){this.eventBridge.handlePluginLog(J,P.payload,O);return}this.eventBridge.handlePluginEvent(J,P,z)},onTeamEvent:(P)=>{this.eventBridge.handleTeamEvent(J,P),_.config.onTeamEvent?.(P)},createSpawnTool:()=>eY(E,_.config,J,U),createSubAgentLifecycleCallbacks:(P)=>tY(E,P,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(P)=>{await this.persistSessionMetadata(J,()=>P)}});let C=await this.runtimeBuilder.build(_.runtimeBuilderInput),y=_.config,l=_.providerConfig;if(C.teamRuntime&&!y.teamName?.trim())y.teamName=C.teamRuntime.getTeamName();let o=[...C.tools,...y.extraTools??[]],t=C.extensions??_.extensions,Q0={sessionId:J,providerId:l.providerId,modelId:l.modelId,apiKey:l.apiKey,baseUrl:l.baseUrl,headers:l.headers,knownModels:l.knownModels,providerConfig:l,thinking:y.thinking,reasoningEffort:y.reasoningEffort??l.reasoningEffort,maxTokensPerTurn:y.maxTokensPerTurn,systemPrompt:y.systemPrompt,maxIterations:y.maxIterations,execution:y.execution,prepareTurn:a4(y),tools:o,hooks:_.hooks,extensions:t,hookErrorMode:y.hookErrorMode,initialMessages:_.effectiveInput.initialMessages,userFileContentLoader:fD,toolPolicies:_.toolPolicies,requestToolApproval:_.requestToolApproval?async(P)=>{let B0=_.requestToolApproval,G0=this.sessions.get(J);if(G0)await this.markTurnPending(G0);try{if(!B0)return{approved:!1,reason:"Tool approval callback is not configured."};return await B0(P)}finally{let C0=this.sessions.get(J);if(C0?.status==="pending")await this.markTurnRunning(C0)}}:void 0,telemetry:y.telemetry,onConsecutiveMistakeLimitReached:y.onConsecutiveMistakeLimitReached,completionPolicy:C.completionPolicy,consumePendingUserMessage:()=>{let P=this.pendingPromptsController.consumeSteer(J);return P?g5(P.prompt,P.mode??y.mode):void 0},logger:C.logger??y.logger,extensionContext:y.extensionContext,onEvent:(P)=>this.eventBridge.dispatchAgentEvent(J,y,P)};Q0.hooks={...Q0.hooks,onEvent:async(P)=>{if(await _.hooks?.onEvent?.(P),P.type!=="assistant-message")return;let B0=this.sessions.get(J);if(!B0)return;let G0=B0.agent.getMessages();try{await this.invoke("persistSessionMessages",J,G0,y.systemPrompt)}catch(C0){y.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:C0}),i2(y.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:C0,severity:"warn",handled:!0,context:{sessionId:J,providerId:y.providerId,modelId:y.modelId}})}}};let Q1=this.createAgentInstance(Q0);if(Q0.onEvent)Q1.subscribeEvents(Q0.onEvent);C.registerLeadAgent?.(Q1);let l$=v1({agentId:Q1.getAgentId(),conversationId:Q1.getConversationId(),teamId:C.teamRuntime?.getTeamId(),teamName:C.teamRuntime?.getTeamName(),teamRole:C.teamRuntime?"lead":void 0});if(HG(y,J,W.length>0,K,l$),l$)Y$(y.telemetry,{ulid:J,modelId:y.modelId,provider:y.providerId,...l$});if(C.teamRuntime)N9(y.telemetry,{ulid:J,teamId:C.teamRuntime.getTeamId(),teamName:C.teamRuntime.getTeamName(),leadAgentId:Q1.getAgentId(),restoredFromPersistence:C.teamRestoredFromPersistence===!0});let r={sessionId:J,config:y,sessionMetadata:X.sessionMetadata,...A?{artifacts:A}:{},source:Z,startedAt:A?.manifest.started_at??Q,updatedAt:A?.manifest.ended_at??A?.manifest.started_at??Q,pendingPrompt:F.prompt,runtime:C,agent:Q1,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:_.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(this.sessions.set(J,r),this.emitStatus(J,"running"),Y.length>0&&!A){if(await this.ensureSessionPersisted(r),await this.invoke("persistSessionMessages",r.sessionId,Y,r.config.systemPrompt),!X.prompt?.trim())await this.updateStatus(r,"completed",0)}let q1;try{if(X.prompt?.trim())if(q1=await this.executeTurn(r,{prompt:X.prompt,userImages:X.userImages,userFiles:X.userFiles}),!r.interactive)await this.finalizeSingleRun(r,q1.finishReason);else await this.completeInteractiveTurn(r,q1.finishReason)}catch(P){if(r.interactive&&r.aborting)q1=await this.completeAbortedInteractiveTurn(r);else{i2(r.config.telemetry,{component:"core",operation:"session.start",error:P,severity:"error",handled:!1,context:{sessionId:r.sessionId,providerId:r.config.providerId,modelId:r.config.modelId}});try{await this.failSession(r)}catch(B0){r.config.logger?.error?.("Session failure cleanup threw",{sessionId:r.sessionId,error:B0})}throw P}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:B,result:q1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let W=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...W?{sessionMetadata:W}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),W=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:W??"immediate"}}),W==="queue"||W==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:W,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,J.finishReason);else await this.completeInteractiveTurn(Z,J.finishReason);if(J.finishReason==="error"||J.finishReason==="aborted")return J;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),J}catch(J){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw i2(Z.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),J}}async getAccumulatedUsage($){let Z=zJ(this.usageBySession.get($)),Q=zJ(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,this.pendingPromptsController.clearAborted(Q),Q.agent.abort(Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!H0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!H0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return sY(Z);let Q=$.trim();if(!Q)return;let W=await this.getRow(Q);if(W)return R6(W);let J=await this.readManifest(Q);return J?MQ(J):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(R6),W=new Set(Q.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(W.has(J.sessionId))continue;Q.unshift(sY(J))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return h$(Q.messagesPath);let W=await this.readManifest(Z);return h$(W?.messages_path)}async dispatchHookEvent($){await rK($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){let Q=this.getSessionOrThrow($);Q.config.modelId=Z,Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:Z}),Q.agent.updateConnection({modelId:Z})}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),W=Q.prompt.trim();if(!W)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=W;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let J=await this.executeAgentTurn($,W,Q.userImages,Q.userFiles);while(aJ($,J.finishReason)){let X=await sJ($);if(X.length===0)break;let Y=oJ($,X);J=await this.executeAgentTurn($,Y)}return J}async completeInteractiveTurn($,Z){if(x5($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),W=D0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:W}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:W,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,W){let J=$.started||$.agent.getMessages().length>0,X=$.persistedMessages??$.agent.getMessages(),Y=this.usageBySession.get($.sessionId)??D0(),j=this.aggregateUsageBySession.get($.sessionId)??Y;$.turnUsageBaseline=Y,$.turnAggregateUsageBaseline=j,$.turnPrimaryUsage=D0(),$.turnUsageByAgent=new Map,T9($.config.telemetry,$.sessionId,$.config.mode),o2($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(Z,Q,W):()=>$.agent.run(Z,Q,W),H=await this.runWithAuthRetry($,V,X);$.started=!0;let B=DZ(H.messages,H,X);$.persistedMessages=B;let G=N6($.turnUsageByAgent?.values()??[]),K=A0(Y,H.usage),F=A0(A0(D0(),H.usage),G),A=A0(j,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(L)=>({...L??{},totalCost:K.totalCost,aggregatedAgentsCost:A.totalCost,usage:K,aggregateUsage:A})),await this.invoke("persistSessionMessages",$.sessionId,B,$.config.systemPrompt),this.observeTaskCompletionTool($,H),H}catch(V){throw i2($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((W)=>W.name===U0.SUBMIT_AND_EXIT&&W.error===void 0))return;$.submitAndExitObserved=!0,S4($.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=T$($.config),W=zg(Z.prompt).trim();if(!W)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let J=await H8(W,Q);BG($.config.telemetry,J);let X=g5(J.prompt,Z.mode??$.config.mode),Y=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),j=this.resolveAbsoluteFilePaths(Q,J.matchedFiles),V=Array.from(new Set([...Y,...j]));return{prompt:X,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=T$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:Z,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,Z){let Q=this.sessions.get($),W=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,J=Z(W?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Q.sessionMetadata=J,Q.artifacts.manifest.metadata=J}async finalizeSingleRun($,Z){if(x5($))return;let Q=Z==="aborted"||$.aborting,W=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":W?"failed":"completed",exitCode:W?1:0,shutdownReason:W?"session_error":"session_complete",endReason:Z})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(Z.status==="completed"&&!$.submitAndExitObserved)S4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});cQ($);let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),i2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,Z.status,Z.exitCode)}catch(J){W("update_status",J)}try{await $.agent.shutdown(Z.shutdownReason)}catch(J){W("agent_shutdown",J)}}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),i2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(Z)}catch(J){W("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let W=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!W.updated)return;let J=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(J.status=Z,H0(Z))delete J.ended_at,J.exit_code=null;else J.ended_at=W.endedAt??J0(),J.exit_code=typeof Q==="number"?Q:null;$.artifacts.manifest=J,$.status=Z,$.updatedAt=W.endedAt??J0(),$.endedAt=H0(Z)?null:J.ended_at,$.exitCode=J.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,J),this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(W){if(!i$($.config.providerId)||!_g(W))throw W;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),Z()}}async syncOAuthCredentials($,Z){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:Z?.forceRefresh})}catch(W){if(W instanceof t7)throw Error(`${W.providerId} requires re-authentication.`);throw W}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new r1($);throw i2(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>Dg(W)?W:Zj($,W));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return v1({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=A0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let W=Zj(Z),J=`${Q}.messages.json`,X;try{X=fg($)}catch{return D0()}let Y=D0();for(let j of X){if(!j.endsWith(".messages.json"))continue;if(j===J)continue;let V=Zj($,j);if(V===W)continue;let H=await h$(V);if(H.length===0)continue;Y=A0(Y,T8(H))}return Y}withPersistedAggregateUsageFloor($,Z){let Q=Og(Z.metadata?.aggregateUsage);if(Q)return qg($,Q);let W=Z.metadata?.aggregatedAgentsCost;if(typeof W!=="number"||!Number.isFinite(W)||W<=$.totalCost)return $;return{...$,totalCost:W}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:f1({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($)),UD))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(UD)).find((W)=>W.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return KD(this.sessionService,$,...Z)}invokeOptional($,...Z){return FD(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return AD(this.sessionService,$,...Z)}}function Rg($){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 Eg($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function j7($={}){let Z=new z1({sessionService:new _1(new D1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||_0.CLI,interactive:!1,config:{providerId:Mg(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:Eg(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{configExtensions:Q.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Q,W){let J=await Z.runTurn({sessionId:Q,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((X)=>X.content)});if(!J)throw Error("local hub schedule runtime returned no turn result");return{result:Rg(J)}},async abortSession(Q){return await Z.abort(Q,Error("hub schedule abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}wg(process.env.CLINE_VCR);function Pg($){let Z=process.cwd(),Q,W,J;for(let X=0;X<$.length;X+=1){let Y=$[X],j=$[X+1];if(Y==="--cwd"&&j){Z=j,X+=1;continue}if(Y==="--host"&&j){Q=j,X+=1;continue}if(Y==="--port"&&j){let V=Number(j);if(Number.isFinite(V))W=V;X+=1;continue}if(Y==="--pathname"&&j)J=j,X+=1}return{cwd:Z,host:Q,port:W,pathname:J}}async function Sg(){let $=Pg(process.argv.slice(2));process.chdir($.cwd);let Z=a0({host:$.host,port:$.port,pathname:$.pathname}),Q=await u2({host:Z.host,port:Z.port,pathname:Z.pathname,owner:Cg()==="production"?s0():y0(),runtimeHandlers:j7(),cronOptions:{workspaceRoot:$.cwd}}),W=async()=>{await Q.close(),process.exit(0)},J=!1,X=(Y,j)=>{if(J)return;J=!0;let V=j instanceof Error?j.stack||j.message:String(j);process.stderr.write(`[hub-daemon] ${Y}: ${V}
|
|
745
|
+
${V}`:""}`);let H=Dk($);if(O7($))throw Error(`Skill uninstall completed, but ${$.name??$.id} is still present in Cline's global skills directories.`);return{id:$.id,type:"skill",status:"uninstalled",message:`Uninstalled ${$.name??$.id}.`,output:[V,...H.map((B)=>`Removed: ${B}`)].filter(Boolean).join(`
|
|
746
|
+
`)||void 0}}async function M7($,Z={}){let[Q]=jY($),W=Q?.trim()||$.id;if(!W)throw Error("Plugin marketplace uninstalls require a plugin name.");let J=await Q9({name:W,workspaceRoot:Z.workspaceRoot});return{id:$.id,type:"plugin",status:"uninstalled",message:`Uninstalled ${$.name??J.name??$.id}.`,output:[`Path: ${J.installPath}`,...J.removedPaths.map((X)=>`Removed: ${X}`)].join(`
|
|
747
|
+
`)}}async function HY($,Z={}){if($.type==="mcp"){let Q=J9($);if(Z.deleteMcpServer)await Z.deleteMcpServer(Q);else T7($,Z);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Q??$.id}.`}}if($.type==="skill")return q7($,Z);if($.type==="plugin")return M7($,Z);throw Error(`Unsupported marketplace entry type: ${$.type}`)}var RU={};N(RU,{parsePluginSource:()=>y7,isOfficialPluginSlug:()=>b7,installPlugin:()=>fY,collectPluginMcpOAuthCandidates:()=>h7});import{spawn as Lk}from"node:child_process";import{createHash as _k}from"node:crypto";import{existsSync as O1,mkdirSync as KY,readdirSync as zk,readFileSync as Tk,renameSync as R7,rmSync as C7,statSync as FY}from"node:fs";import{cp as GY,mkdir as _U,writeFile as w7}from"node:fs/promises";import{homedir as KU}from"node:os";import{basename as W$,dirname as FU,extname as Ok,join as n,relative as zU,resolve as d$,sep as qk}from"node:path";import{isPluginModulePath as N7,resolveClineDir as Mk,resolvePluginModuleEntries as Rk}from"@cline/shared/storage";var E4="_installed",P7="package",Ek="https://github.com/cline/plugins.git",AU=30000,E7=10485760,fU="@cline/",Nk=["dependencies","devDependencies","optionalDependencies","peerDependencies"],Ck={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function S7($){if($==="~")return KU();if($.startsWith("~/"))return n(KU(),$.slice(2));return $}function TU($){return $.split(qk).join("/")}function r2($){return _k("sha256").update($).digest("hex").slice(0,12)}function wk($){let Z=0;while(Z<$.length&&$[Z]==="-")Z++;let Q=$.length;while(Q>Z&&$[Q-1]==="-")Q--;return $.slice(Z,Q)}function Q$($){let Z="",Q=!1,W=$.startsWith("@")?$.slice(1):$;for(let X of W.slice(0,256)){if(X>="a"&&X<="z"||X>="A"&&X<="Z"||X>="0"&&X<="9"||X==="."||X==="_"||X==="-")Z+=X,Q=X==="-";else if(!Q)Z+="-",Q=!0;if(Z.length>=80)break}return wk(Z)||"plugin"}function b7($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function Pk($){return $?.trim()||Ek}function UU($){let Q=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Q?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Q[1]}}function Sk($){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 bk($){let Z=$.match(/^git@([^:]+):(.+)$/);if(Z){let Y=Z[2]??"",j=Y.indexOf("@");if(j<0)return{repo:$};return{repo:`git@${Z[1]}:${Y.slice(0,j)}`,ref:Y.slice(j+1)||void 0}}if($.includes("://"))try{let Y=new URL($),j=Y.pathname.replace(/^\/+/,""),V=j.indexOf("@");if(V<0)return{repo:$};return Y.pathname=`/${j.slice(0,V)}`,{repo:Y.toString().replace(/\/$/,""),ref:j.slice(V+1)||void 0}}catch{return{repo:$}}let Q=$.indexOf("/");if(Q<0)return{repo:$};let W=$.slice(0,Q),J=$.slice(Q+1),X=J.indexOf("@");if(X<0)return{repo:$};return{repo:`${W}/${J.slice(0,X)}`,ref:J.slice(X+1)||void 0}}function yk($){try{return decodeURIComponent($)}catch{return $}}function hk($){return W$(yk($))||"plugin"}function kk($){let Z=$.split("/").filter(Boolean);return Z.length>=5&&(Z[2]==="blob"||Z[2]==="raw")}function DU($){if(!/^https?:\/\//i.test($))return null;let Z;try{Z=new URL($)}catch{return null}let Q=Z.hostname.toLowerCase(),W=hk(Z.pathname),J=N7(W),X=(Q==="github.com"||Q==="www.github.com")&&kk(Z.pathname);if(Z.protocol!=="https:"){if(X||Q==="raw.githubusercontent.com"||J)throw Error(`Remote plugin file URLs must use https: ${$}`);return null}if(Q==="github.com"||Q==="www.github.com"){let Y=Z.pathname.split("/").filter(Boolean);if(!X)return null;if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:`https://raw.githubusercontent.com/${[Y[0],Y[1],...Y.slice(3)].join("/")}`,filename:W}}if(Q==="raw.githubusercontent.com"){if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:Z.toString(),filename:W}}if(!J)return null;return{type:"remote",url:Z.toString(),filename:W}}function LU($,Z={}){let Q=$.trim(),W=Q.startsWith("git:")&&!Q.startsWith("git://"),J=W?Q.slice(4).trim():Q;if(!Z.force&&!W&&!/^(https?|ssh|git):\/\//i.test(J))return null;let{repo:X,ref:Y}=bk(J),j="",V="";if(X.startsWith("git@")){let G=X.match(/^git@([^:]+):(.+)$/);j=G?.[1]??"",V=G?.[2]??""}else if(/^(https?|ssh|git):\/\//i.test(X)){let G=new URL(X);j=G.hostname,V=G.pathname.replace(/^\/+/,"")}else{let G=X.indexOf("/");if(G<0)return null;j=X.slice(0,G),V=X.slice(G+1)}let H=V.replace(/\.git$/,"").replace(/^\/+/,"");if(!j||!H||H.split("/").length<2)return null;return{type:"git",repo:X.startsWith("git@")||/^(https?|ssh|git):\/\//i.test(X)?X:`https://${X}`,ref:Y,host:j,path:H}}function y7($,Z){let Q=$.trim();if(!Q)throw Error("plugin install requires a source");if(Z==="npm"){let Y=Q.startsWith("npm:")?Q.slice(4).trim():Q,{name:j}=UU(Y);return{type:"npm",spec:Y,name:j}}if(Z==="git"){let Y=LU(Q,{force:!0});if(!Y)throw Error(`Invalid git plugin source: ${$}`);return Y}if(Z==="local")return{type:"local",path:$};if(Z==="remote"){let Y=DU(Q);if(!Y)throw Error(`Invalid remote plugin source: ${$}`);return Y}if(Q.startsWith("npm:")){let Y=Q.slice(4).trim(),{name:j}=UU(Y);return{type:"npm",spec:Y,name:j}}if(Q.startsWith(".")||Q.startsWith("/")||Q==="~"||Q.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test(Q))return{type:"local",path:$};let J=DU(Q);if(J)return J;let X=LU(Q);if(X)return X;if(b7(Q))return{type:"official",slug:Q};if(Sk(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 Ik($){return $?n($,".cline","plugins"):n(Mk(),"plugins")}function xk($,Z,Q){if(Z.type==="npm")return n($,E4,"npm",`${Q$(Z.name)}-${r2(Q)}`);if(Z.type==="git")return n($,E4,"git",Q$(Z.host),`${Q$(Z.path)}-${r2(Q)}`);if(Z.type==="remote")return n($,E4,"remote",`${Q$(Z.filename)}-${r2(Q)}`);if(Z.type==="official")return n($,E4,"official",`${Q$(Z.slug)}-${r2(Q)}`);return n($,E4,"local",`${Q$(W$(S7(Z.path)))}-${r2(Q)}`)}function gk($,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:${d$(Z,S7($.path))}`}function mk($,Z){if($.type==="npm")return $.name;if($.type==="git")return Q$(W$($.path));if($.type==="remote")return Q$(W$($.filename,Ok($.filename)));if($.type==="official")return $.slug;return Q$(W$(d$(Z,S7($.path))))}async function N4($,Z,Q={}){await new Promise((W,J)=>{let X=Lk($,Z,{cwd:Q.cwd,stdio:["ignore","ignore","pipe"],env:process.env,windowsHide:!0}),Y="";X.stderr.on("data",(j)=>{Y+=String(j)}),X.on("error",J),X.on("close",(j)=>{if(j===0){W();return}let V=Y.trim();J(Error(`${$} ${Z.join(" ")} failed with exit code ${j}${V?`: ${V}`:""}`))})})}function OU($){let Z=n($,"package.json");if(!O1(Z))return null;try{return JSON.parse(Tk(Z,"utf8"))}catch{return null}}function vk($){let Z=$?.cline?.plugins;if(!Array.isArray(Z))return[];return Z.flatMap((Q)=>{if(typeof Q==="string")return[Q];return Q.paths??[]})}async function ck($){let Z=n($,"package.json"),Q=OU($);if(!Q)return;let W=!1;for(let J of Nk){let X=Q[J];if(!X||typeof X!=="object")continue;for(let Y of Object.keys(X)){if(!Y.startsWith(fU))continue;delete X[Y],delete Q.peerDependenciesMeta?.[Y],W=!0}if(Object.keys(X).length===0)delete Q[J]}if(Q.peerDependenciesMeta){for(let J of Object.keys(Q.peerDependenciesMeta)){if(!J.startsWith(fU))continue;delete Q.peerDependenciesMeta[J],W=!0}if(Object.keys(Q.peerDependenciesMeta).length===0)delete Q.peerDependenciesMeta}if(!W)return;await w7(Z,`${JSON.stringify(Q,null,2)}
|
|
748
|
+
`,"utf8")}function uk($,Z){let Q=n($,"node_modules","@cline");if(!O1(Q))return;for(let W of MU(Q)){if(`@cline/${W.name}`===Z)continue;C7(n(Q,W.name),{recursive:!0,force:!0})}}function qU($){let Z=vk(OU($)).map((X)=>d$($,X)).filter((X)=>O1(X)&&FY(X).isFile()&&N7(X));if(Z.length>0)return Z;let Q=Rk($);if(Q?.length)return Q;let W=[],J=[$];while(J.length>0){let X=J.pop();if(!X)continue;for(let Y of MU(X)){let j=n(X,Y.name);if(Y.name==="node_modules"||Y.name===".git")continue;if(Y.isDirectory()){J.push(j);continue}if(Y.isFile()&&!Y.name.startsWith(".")&&N7(j))W.push(j)}}return W.sort((X,Y)=>X.localeCompare(Y))}function MU($){try{return zk($,{withFileTypes:!0})}catch{return[]}}function dk($,Z){let Q=qU(Z);if(Q.length===0)throw Error(`No plugin entry files found in ${Z}`);return Q.map((W)=>`./${TU(zU($,W))}`)}async function lk($,Z,Q){let W=dk($,Z);return await w7(n($,"package.json"),JSON.stringify({...Ck,name:Q,cline:{plugins:[{paths:W}]}},null,2),"utf8"),W}async function pk($,Z,Q){let W=n(Z,P7);return await _U(W,{recursive:!0}),await w7(n(W,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await N4(Q,["install",$.spec,"--prefix",W,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),uk(W,$.name),n(W,"node_modules",$.name)}async function AY($,Z){if(!O1(n($,"package.json")))return;await ck($),await N4(Z,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function rk($,Z,Q){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let W=n(Z,P7),J=["clone","--filter=blob:none"];if($.ref)J.push("--branch",$.ref);J.push("--",$.repo,W);try{await N4("git",J)}catch(X){if(!$.ref)throw X;await N4("git",["clone","--filter=blob:none","--",$.repo,W]),await N4("git",["checkout","--detach",$.ref],{cwd:W})}return await AY(W,Q),W}async function ik($,Z,Q,W){let J=n(Z,"repo");await N4("git",["clone","--filter=blob:none","--depth","1","--",W,J]);let X=n(J,"plugins",$.slug);if(!O1(X)||!FY(X).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${W}`);let Y=n(Z,P7);return await GY(X,Y,{recursive:!0,filter:(j)=>{let V=W$(j);return V!==".git"&&V!=="node_modules"}}),C7(J,{recursive:!0,force:!0}),await AY(Y,Q),Y}function BY($){return Error(`Remote plugin file from ${$} exceeds the ${E7} byte limit`)}function nk($){let Z=$.headers.get("content-length");if(!Z)return;let Q=Number(Z);if(!Number.isFinite(Q)||Q<0)return;return Q}async function ak($,Z){let Q=nk($);if(Q!==void 0&&Q>E7)throw BY(Z);if(!$.body){let Y=Buffer.from(await $.text(),"utf8");if(Y.byteLength>E7)throw BY(Z);return Y}let W=$.body.getReader(),J=[],X=0;try{while(!0){let{done:Y,value:j}=await W.read();if(Y)break;let V=Buffer.from(j);if(X+=V.byteLength,X>E7)throw await W.cancel().catch(()=>{return}),BY(Z);J.push(V)}return Buffer.concat(J,X)}finally{W.releaseLock()}}async function sk($,Z){let Q=new AbortController,W=setTimeout(()=>{Q.abort()},AU);try{let J=await fetch($.url,{signal:Q.signal});if(!J.ok){let Y=J.statusText?` ${J.statusText}`:"";throw Error(`Failed to download plugin file from ${$.url}: ${J.status}${Y}`)}let X=await ak(J,$.url);return KY(Z,{recursive:!0}),await w7(n(Z,$.filename),X),Z}catch(J){if(J instanceof Error&&J.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${AU}ms`);throw J}finally{clearTimeout(W)}}async function ok($,Z,Q,W){let J=d$(Q,S7($.path));if(!O1(J))throw Error(`Plugin source path does not exist: ${J}`);let X=FY(J);if(X.isFile()){if(!N7(J))throw Error(`Plugin file must be .js or .ts: ${J}`);KY(Z,{recursive:!0});let j=n(Z,W$(J));return await GY(J,j),Z}if(!X.isDirectory())throw Error(`Plugin source must be a file or directory: ${J}`);let Y=n(Z,P7);return await GY(J,Y,{recursive:!0,filter:(j)=>{let V=W$(j);return V!==".git"&&V!=="node_modules"}}),await AY(Y,W),Y}function tk($,Z){if(O1($)&&!Z)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function ek($,Z,Q){if(KY(FU(Z),{recursive:!0}),!O1(Z)){R7($,Z);return}if(!Q)throw Error(`Plugin is already installed at ${Z}. Use --force to replace it.`);let W=n(FU(Z),`.replace-${W$(Z)}-${Date.now()}-${process.pid}-${r2(`${Z}:${Math.random()}`)}`);R7(Z,W);try{R7($,Z)}catch(J){if(!O1(Z)&&O1(W))R7(W,Z);throw J}try{C7(W,{recursive:!0,force:!0})}catch{}}function $I($){let Z=$.transport;if(Z.type==="stdio")return!1;return Z.headers!==void 0&&Object.keys(Z.headers).length>0}function ZI($){let Z=$.oauth?.tokens?.access_token;return typeof Z==="string"&&Z.trim().length>0}function QI($){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 h7($){let Z=new Set($.pluginPaths.map((J)=>d$(J)));if(Z.size===0)return[];let Q;try{Q=p0({filePath:$.settingsPath??$0()})}catch{return[]}let W=[];for(let J of Q){let X=QI(J);if(!X||!Z.has(d$(X.pluginPath)))continue;let Y=J.transport.type;if(Y==="stdio")continue;if($I(J)||ZI(J))continue;W.push({name:J.name,pluginName:X.pluginName,pluginPath:X.pluginPath,transportType:Y,lastError:J.oauth?.lastError})}return W.sort((J,X)=>J.name.localeCompare(X.name))}async function fY($){let Z=$.source.trim(),Q=y7(Z,$.sourceType),W=$.cwd?.trim(),J=W?d$(W):process.cwd(),X=Ik(W?J:void 0),Y=Pk($.officialPluginsRepo),j=gk(Q,J,Y),V=xk(X,Q,j),H=mk(Q,J),B=n(X,E4,".tmp"),G=n(B,`${Date.now()}-${process.pid}-${r2(`${Z}:${Math.random()}`)}`),K=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;tk(V,F),await _U(B,{recursive:!0});let A;try{if(Q.type==="npm")A=await pk(Q,G,K);else if(Q.type==="git")A=await rk(Q,G,K);else if(Q.type==="official")A=await ik(Q,G,K,Y);else if(Q.type==="remote")A=await sk(Q,G);else A=await ok(Q,G,J,K);let L=(Q.type==="local"||Q.type==="remote")&&A===G?qU(G).map((U)=>`./${TU(zU(G,U))}`):await lk(G,A,H);if(L.length===0)throw Error(`No plugin entry files found for ${Z}`);ek(G,V,F);let f={source:Z,installPath:V,entryPaths:L.map((U)=>d$(V,U)),mcpSyncFailures:[],mcpOAuthCandidates:[]},D=await $9({pluginPaths:f.entryPaths,cwd:J,workspacePath:J});return f.mcpSyncFailures=D.failures,f.mcpOAuthCandidates=h7({pluginPaths:f.entryPaths}),f}catch(L){throw C7(G,{recursive:!0,force:!0}),L}}var rU={};N(rU,{updateLocalProvider:()=>u7,saveLocalProviderSettings:()=>qY,saveLocalProviderOAuthCredentials:()=>NY,resolveLocalClineAuthToken:()=>wY,refreshProviderModelsFromSource:()=>MY,normalizeOAuthProvider:()=>RY,loginLocalProvider:()=>EY,loginAndSaveLocalProviderOAuthCredentials:()=>CY,listLocalProviders:()=>TY,getLocalProviderModels:()=>OY,ensureCustomProvidersLoaded:()=>m7,deleteLocalProvider:()=>d7,addLocalProvider:()=>zY});import*as C0 from"@cline/llms";import{existsSync as WI,mkdirSync as JI,readFileSync as XI,writeFileSync as YI}from"node:fs";import{mkdir as jI,readFile as VI,writeFile as HI}from"node:fs/promises";import{dirname as UY,join as BI}from"node:path";import*as x0 from"@cline/llms";import{ModelCapabilitySchema as GI,ProviderCapabilitySchema as KI,ProviderClientSchema as FI,ProviderProtocolSchema as AI}from"@cline/shared";import{z as a}from"zod";var fI=a.object({id:a.string().optional(),name:a.string().optional(),maxTokens:a.number().optional(),contextWindow:a.number().optional(),maxInputTokens:a.number().optional(),capabilities:a.array(GI).optional(),supportsVision:a.boolean().optional(),supportsAttachments:a.boolean().optional(),supportsReasoning:a.boolean().optional()}).passthrough(),UI=a.object({name:a.string(),baseUrl:a.string(),defaultModelId:a.string().optional(),protocol:AI.optional(),client:FI.optional(),capabilities:a.array(KI).optional(),modelsSourceUrl:a.string().optional()}).passthrough(),EU=a.object({provider:UI.optional(),models:a.record(a.string(),fI).optional()}).passthrough(),NU=a.object({version:a.literal(1),providers:a.record(a.string(),EU)}),DI=a.object({version:a.literal(1),providers:a.record(a.string(),a.unknown())}),k7=new Set;function CU($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function i2($){return BI(UY($.getFilePath()),"models.json")}function I7(){return{version:1,providers:{}}}function wU($){let Z=DI.safeParse($);if(!Z.success)return I7();let Q={};for(let[W,J]of Object.entries(Z.data.providers)){let X=EU.safeParse(J);if(X.success)Q[W]=X.data}return{version:1,providers:Q}}function DY($){if(!WI($))return I7();try{let Z=XI($,"utf8");return wU(JSON.parse(Z))}catch{}return I7()}async function C4($){try{let Z=await VI($,"utf8");return wU(JSON.parse(Z))}catch{}return I7()}function PU($,Z){JI(UY($),{recursive:!0});let Q=NU.parse(Z);YI($,`${JSON.stringify(Q,null,2)}
|
|
749
|
+
`,"utf8")}async function x7($,Z){await jI(UY($),{recursive:!0});let Q=NU.parse(Z);await HI($,`${JSON.stringify(Q,null,2)}
|
|
750
|
+
`,"utf8")}function SU($,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 bU($){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 yU($){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 LI($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function hU($,Z){return $??Z??"openai-chat"}function kU($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function IU($,Z,Q){let W=new Set(Z?.capabilities??Q??[]);if(Z?.supportsVision)W.add("images");if(Z?.supportsAttachments)W.add("files");if(Z?.supportsReasoning)W.add("reasoning");return{id:$,name:Z?.name??$,maxTokens:Z?.maxTokens,contextWindow:Z?.contextWindow,maxInputTokens:Z?.maxInputTokens,capabilities:W.size>0?[...W]:void 0}}function _I($,Z){for(let[Q,W]of Object.entries(Z??{})){let J=W.id?.trim()||Q.trim();if(!J)continue;x0.registerModel($,J,IU(J,W))}}function zI($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function TI($){return Object.assign({},...x0.resolveProviderModelCatalogKeys($).map((Q)=>x0.getGeneratedModelsForProvider(Q)))}function OI($){let Z=$.provider.trim();if(!Z||x0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let W=x0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],J=TI(Z),X=yU($.capabilities),Y=X.length>0?X:void 0,j=$.model?.trim(),V={...J,...W?.models??{}};if(j)V[j]=zI(j,V[j],Y);let H=Object.keys(V).filter(Boolean),B=j||H[0];if(!B)return;let G=hU($.protocol,W?.provider.protocol),K=kU($.client,G,W?.provider.client);x0.registerProvider({provider:{id:Z,name:W?.provider.name??CU(Z),description:W?.provider.description,protocol:G,client:K,baseUrl:Q,modelsSourceUrl:W?.provider.modelsSourceUrl,defaultModelId:B,capabilities:bU($.capabilities)??W?.provider.capabilities,source:"file"},models:V})}function g7($){for(let Z of Object.values($.providers))OI(Z.settings)}function V9($,Z){let Q=Z.models??{};if(!LI(Z.provider)){_I($,Q);return}let W=yU(Z.provider.capabilities),J=Object.entries(Q).map(([H,B])=>({id:B.id?.trim()||H.trim(),model:B})).filter(({id:H})=>H.length>0),X=Z.provider.defaultModelId?.trim()||J[0]?.id||"default",Y=hU(Z.provider.protocol,void 0),j=kU(Z.provider.client,Y,void 0),V=Object.fromEntries(J.map(({id:H,model:B})=>[H,{...IU(H,B,W.length>0?W:void 0),status:"active"}]));x0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||CU($),protocol:Y,client:j,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:X,capabilities:bU(Z.provider.capabilities),source:"file"},models:V})}function xU($){let Z=i2($);if(k7.has(Z))return;let Q=DY(Z);for(let[W,J]of Object.entries(Q.providers))V9(W,J);k7.add(Z)}async function m7($){let Z=i2($);if(k7.has(Z))return;let Q=await C4(Z);for(let[W,J]of Object.entries(Q.providers))V9(W,J);k7.add(Z)}var mU="cline-pass";function qI($){return $.apiKey??$.auth?.apiKey}function MI($){return($.auth?.accessToken?.trim()??"").length>0}function vU($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function RI($){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 EI($){let Z=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let W of $)Q=Q*31+W.charCodeAt(0)>>>0;return Z[Q%Z.length]}function cU($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>SU(Z,Q))}async function NI($,Z){let Q=await C0.getModelsForProvider($),W=$===mU;if(!Z&&!W)return Q;let J=await v6($,{loadLatestOnInit:W,loadPrivateOnAuth:!0,failOnError:!1},Z);if($==="litellm"&&J?.knownModels)return J.knownModels;if(W&&J?.knownModels)return J.knownModels;return J?.knownModels?{...Q,...J.knownModels}:Q}function LY($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function CI($){if(!$?.length)return;return[...new Set($)]}function wI($,Z){return CI([...$??[],...Z??[]])}function PI($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function SI($){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 bI($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(SI)}var v7={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},gU={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function yI($){if(!$)return[v7];if($.source!=="system")return $.baseUrl?[v7,gU]:[v7];let Z=[];if($.env?.length)Z.push(v7);if($.baseUrl)Z.push(gU);return Z}function hI($,Z){return Z.split(".").reduce((Q,W)=>{if(!Q||typeof Q!=="object")return;return Q[W]},$)}function kI($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function II($,Z,Q){if(!$?.length)return;let W={};for(let J of $){let Y=kI(J.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:hI(Z,J.path))??J.defaultValue;if(Y!==void 0)W[J.path]=Y}return W}function uU($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function _Y($,Z){let Q=Z?.includes("vision")??!1,W=Z?.includes("reasoning")??!1;return Object.fromEntries($.map((J)=>[J,{id:J,name:J,supportsVision:Q,supportsAttachments:Q,supportsReasoning:W}]))}async function dU($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await wZ($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function lU($,Z){let Q=$.read(),W=!1;if(Q.providers[Z])delete Q.providers[Z],W=!0;if(Q.lastUsedProvider===Z)delete Q.lastUsedProvider,W=!0;if(W)$.write(Q);C0.unregisterProvider(Z)}async function zY($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=Z.baseUrl.trim(),J=Z.apiKey?.trim()??"";if(!W&&!J){let A=i2($);if((await C4(A)).providers[Q]){let f=await d7($,{providerId:Q});return{providerId:Q,settingsPath:f.settingsPath,modelsPath:f.modelsPath,modelsCount:0}}return lU($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(C0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let X=Z.name.trim();if(!X)throw Error("name is required");if(!W)throw Error("baseUrl is required");let Y=LY(Z.models),j=Z.modelsSourceUrl?.trim(),V=await dU({providerId:Q,explicitModels:Y,modelsSourceUrl:j,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let H=Z.defaultModelId?.trim()&&V.includes(Z.defaultModelId.trim())?Z.defaultModelId.trim():V[0],B=Z.capabilities?.length?[...new Set(Z.capabilities)]:void 0,G=uU(Z.headers);$.saveProviderSettings({provider:Q,apiKey:J||void 0,baseUrl:W,headers:G,timeout:Z.timeoutMs,model:H,protocol:Z.protocol,client:Z.client},{setLastUsed:!1});let K=i2($),F=await C4(K);return F.providers[Q]={provider:{name:X,baseUrl:W,defaultModelId:H,protocol:Z.protocol,client:Z.client,capabilities:B,modelsSourceUrl:j},models:_Y(V,B)},await x7(K,F),V9(Q,F.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function u7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=i2($),J=await C4(W),X=J.providers[Q];if(!X){let q=$.getProviderSettings(Q);if(!q)throw Error(`provider "${Q}" does not exist`);let z=Z.modelsSourceUrl?.trim(),_=LY(Z.models)[0]??q.model?.trim();if(!_&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);X={provider:{name:Z.name?.trim()||vU(Q),baseUrl:Z.baseUrl?.trim()??q.baseUrl?.trim()??"",defaultModelId:_,protocol:q.protocol,client:q.client,capabilities:q.capabilities},models:_?_Y([_],q.capabilities):{}}}if(!X.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let Y=Z.name?.trim()??X.provider.name.trim();if(!Y)throw Error("name is required");let j=Z.baseUrl?.trim()??X.provider.baseUrl.trim();if(!j)throw Error("baseUrl is required");let V=Z.capabilities===void 0?X.provider.capabilities:Z.capabilities===null?void 0:[...new Set(Z.capabilities)],H=Z.protocol===void 0?X.provider.protocol:Z.protocol??void 0,B=Z.client===void 0?X.provider.client:Z.client??void 0,G=LY(Z.models),K=Z.modelsSourceUrl===void 0?X.provider.modelsSourceUrl:Z.modelsSourceUrl?.trim()||void 0,F=Z.models!==void 0||Z.modelsSourceUrl!==void 0&&!!K,A=Object.keys(X.models??{}).map((q)=>q.trim()).filter(Boolean),L=await dU({providerId:Q,explicitModels:G,modelsSourceUrl:K,fallbackModelIds:A,shouldRecompute:F});if(L.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let f=Z.defaultModelId===void 0?X.provider.defaultModelId?.trim():Z.defaultModelId?.trim(),D=f&&L.includes(f)?f:L[0],T={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:j,model:D};if(H)T.protocol=H;else delete T.protocol;if(B)T.client=B;else delete T.client;if(Z.apiKey!==void 0){let q=Z.apiKey?.trim()??"";if(q)T.apiKey=q;else delete T.apiKey}if(Z.headers!==void 0){let q=uU(Z.headers);if(q)T.headers=q;else delete T.headers}if(Z.timeoutMs!==void 0)if(typeof Z.timeoutMs==="number")T.timeout=Z.timeoutMs;else delete T.timeout;return $.saveProviderSettings(T,{setLastUsed:!1}),J.providers[Q]={provider:{name:Y,baseUrl:j,defaultModelId:D,protocol:H,client:B,capabilities:V,modelsSourceUrl:K},models:_Y(L,V)},await x7(W,J),V9(Q,J.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W,modelsCount:L.length}}async function d7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=i2($),J=await C4(W);if(!J.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete J.providers[Q],await x7(W,J),C0.unregisterProvider(Q),lU($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W}}async function TY($,Z={}){let Q=$.read(),W=C0.getProviderIds(),J=await Promise.all(W.map(async(Y)=>{let[j,V]=await Promise.all([C0.getProvider(Y),C0.getModelsForProvider(Y)]),H=cU(V),B=Q.providers[Y]?.settings,G=j?.name??vU(Y),K=wI(j?.capabilities,B?.capabilities),F=bI(j?.metadata)??yI(j);return{provider:{id:Y,name:G,models:H.length,color:EI(Y),letter:RI(G),enabled:Boolean(B),apiKey:B?qI(B):void 0,oauthAccessTokenPresent:B?MI(B):void 0,baseUrl:B?.baseUrl??j?.baseUrl,defaultModelId:j?.defaultModelId,protocol:B?.protocol??j?.protocol,client:B?.client??j?.client,capabilities:K,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:F,configValues:II(F,B,j),modelList:H},rank:PI(j?.metadata)}}));J.sort((Y,j)=>{if(Y.rank!==j.rank)return Y.rank-j.rank;return Y.provider.name.localeCompare(j.provider.name)||Y.provider.id.localeCompare(j.provider.id)});let X=J.map((Y)=>Y.provider);if(Z.isClinePassEnabled!==!0)X=X.filter((Y)=>Y.id!==mU);return{providers:X,settingsPath:$.getFilePath()}}async function OY($,Z){let Q=$.trim(),W=await NI(Q,Z),J=cU(W);return{providerId:Q,models:J}}function c7($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function pU($,Z){if(!c7(Z))return c7($)?{...$}:void 0;let Q=c7($)?{...$}:{};for(let[W,J]of Object.entries(Z)){if(J==null||J===""){delete Q[W];continue}if(c7(J)){let X=pU(Q[W],J);if(X&&Object.keys(X).length>0)Q[W]=X;else delete Q[W];continue}Q[W]=J}return Object.keys(Q).length>0?Q:void 0}function qY($,Z){let Q=Z.providerId.trim();if(Z.enabled===!1){let X=$.read();if(delete X.providers[Q],X.lastUsedProvider===Q)delete X.lastUsedProvider;return $.write(X),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let J={...$.getProviderSettings(Q)??{},provider:Q};for(let X of["apiKey","baseUrl","model","region"])if(Object.hasOwn(Z,X)&&typeof Z[X]==="string")if(Z[X].trim().length===0)delete J[X];else J[X]=Z[X];for(let X of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(Z,X))J[X]=Z[X];for(let X of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(Z,X)&&Z[X]!=null){let Y=pU(J[X],Z[X]);if(Y)J[X]=Y;else delete J[X]}return $.saveProviderSettings(J,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function MY($,Z){let Q=Z.trim(),W=$.getProviderSettings(Q),X=C0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,Y=W?.baseUrl?.trim()||X?.baseUrl?.trim(),j=PZ(Y,X?.baseUrl,X?.modelsSourceUrl);if(!W||!X||!Y||!j)return{providerId:Q,refreshed:!1};let V=await u7($,{providerId:Q,name:X.name,baseUrl:Y,apiKey:W.apiKey,headers:W.headers??null,timeoutMs:W.timeout??null,modelsSourceUrl:j,protocol:W.protocol??X.protocol??null,client:W.client??X.client??null,capabilities:W.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:V.modelsCount}}function RY($){let Z=$.trim().toLowerCase(),Q=j0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function EY($,Z,Q,W){let J=j0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let X=g8({onPrompt:async(Y)=>Y.defaultValue??"",openUrl:Q,onOpenUrlError:({error:Y})=>{throw Y instanceof Error?Y:Error(String(Y))}});return J.login({settings:Z,callbacks:X,telemetry:W})}function NY($,Z,Q,W,J){return n$({manager:$,providerId:Z,settings:Q,credentials:W,setLastUsed:J?.setLastUsed})}async function CY($,Z,Q,W){let J=g8({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return c4($,Z,{callbacks:J,telemetry:W})}function wY($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}var iU={};N(iU,{getProviderConfigFields:()=>PY});import*as l7 from"@cline/llms";var xI=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],gI={"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 mI($,Z){let Q={};for(let W of xI){let J=$[W],X=Z[W];if(J||X)Q[W]={...J,...X}}return Q}function vI($){let Z=gI[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:mI($.fields,Z.fields)}}var cI=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function uI($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return cI.has($)}function PY($){let Z=l7.normalizeProviderId($);if(i$(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=l7.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:Z,authMethod:"local",fields:{}};let W=Q?.provider.baseUrl,J={apiKey:{}};if(uI(Z,Q))J.baseUrl={defaultValue:W};return vI({providerId:Z,authMethod:"api-key",fields:J})}var oU={};N(oU,{resolveLegacyClineAuth:()=>yY,migrateLegacyProviderSettings:()=>H9});import{existsSync as dI,readFileSync as lI}from"node:fs";import{dirname as pI,join as SY}from"node:path";import*as w4 from"@cline/llms";import{resolveClineDataDir as rI}from"@cline/shared/storage";var p7="openai",sU=w4.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,nU=128000;function yY($){let Z=$?.trim();if(!Z)return;try{let Q=JSON.parse(Z);if(!Q)return;let W=typeof Q.expiresAt==="number"&&Number.isFinite(Q.expiresAt)?Q.expiresAt<10000000000?Q.expiresAt*1000:Q.expiresAt:void 0;return{accessToken:Q.idToken,refreshToken:Q.refreshToken,expiresAt:W,accountId:Q.userInfo?.id}}catch{return}}function b($){let Z=$?.trim();return Z?Z:void 0}function iI($){return $==="credentials"?"iam":$}function aU($){if(!dI($))return;try{let Z=lI($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function nI($){let Z=$.dataDir??rI(),Q=$.globalStatePath??SY(Z,"globalState.json"),W=$.secretsPath??SY(Z,"secrets.json"),J=aU(Q),X=aU(W);if(!J&&!X)return;return{globalState:J??{},secrets:X??{}}}function bY($){if($===p7)return sU;return $}function aI($,Z,Q,W){let J=Q==="plan"?"planMode":"actMode",X=Z===W?b(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,j={openrouter:`${J}OpenRouterModelId`,cline:`${J}ClineModelId`,openai:`${J}OpenAiModelId`,ollama:`${J}OllamaModelId`,lmstudio:`${J}LmStudioModelId`,litellm:`${J}LiteLlmModelId`,requesty:`${J}RequestyModelId`,together:`${J}TogetherModelId`,fireworks:`${J}FireworksModelId`,sapaicore:`${J}SapAiCoreModelId`,groq:`${J}GroqModelId`,baseten:`${J}BasetenModelId`,huggingface:`${J}HuggingFaceModelId`,"huawei-cloud-maas":`${J}HuaweiCloudMaasModelId`,oca:`${J}OcaModelId`,aihubmix:`${J}AihubmixModelId`,hicap:`${J}HicapModelId`,nousResearch:`${J}NousResearchModelId`,"vercel-ai-gateway":`${J}VercelAiGatewayModelId`}[Z];return(j?b(typeof $[j]==="string"?$[j]:void 0):void 0)??X}function sI($,Z,Q){let W=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,J=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(b).find(Boolean),X=J==="none"||J==="low"||J==="medium"||J==="high"||J==="xhigh"?J:void 0,Y=typeof W==="number"&&Number.isInteger(W)&&W>0?W:void 0;if(!X&&Y===void 0)return;return{...X?{effort:X}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function oI($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),W=b(Q.access_token),J=b(Q.refresh_token),X=b(Q.accountId);if(!W&&!J&&!X)return;return{...W?{apiKey:W}:{},auth:{...W?{accessToken:W}:{},...J?{refreshToken:J}:{},...X?{accountId:X}:{}}}}catch{return}}function tI($){let Z=w4.getGeneratedModelsForProvider($),W=w4.getProviderCollectionSync($)?.provider.defaultModelId;if(W&&Z[W])return W;return Object.keys(Z)[0]??void 0}function eI($,Z,Q,W){let J=bY($),X=b(W==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),Y=aI(Z,$,W,X)??tI(J),j=sI(Z,J,W),V=typeof Z.requestTimeoutMs==="number"&&Number.isInteger(Z.requestTimeoutMs)&&Z.requestTimeoutMs>0?Z.requestTimeoutMs:void 0,H={anthropic:Q.apiKey,cline:Q.clineApiKey,openai:Q.openAiApiKey,"openai-native":Q.openAiNativeApiKey,openrouter:Q.openRouterApiKey,bedrock:Q.awsBedrockApiKey,gemini:Q.geminiApiKey,ollama:Q.ollamaApiKey,deepseek:Q.deepSeekApiKey,requesty:Q.requestyApiKey,together:Q.togetherApiKey,fireworks:Q.fireworksApiKey,qwen:Q.qwenApiKey,doubao:Q.doubaoApiKey,mistral:Q.mistralApiKey,litellm:Q.liteLlmApiKey,asksage:Q.asksageApiKey,xai:Q.xaiApiKey,moonshot:Q.moonshotApiKey,zai:Q.zaiApiKey,huggingface:Q.huggingFaceApiKey,nebius:Q.nebiusApiKey,sambanova:Q.sambanovaApiKey,cerebras:Q.cerebrasApiKey,groq:Q.groqApiKey,"huawei-cloud-maas":Q.huaweiCloudMaasApiKey,baseten:Q.basetenApiKey,"vercel-ai-gateway":Q.vercelAiGatewayApiKey,dify:Q.difyApiKey,minimax:Q.minimaxApiKey,hicap:Q.hicapApiKey,aihubmix:Q.aihubmixApiKey,nousResearch:Q.nousResearchApiKey,oca:Q.ocaApiKey},B={};if($==="openai-codex")Object.assign(B,oI(Q));if($==="cline")try{let D=b(Q["cline:clineAccountId"]);if(D)B.auth={...B.auth??{},...yY(D)}}catch{}if($===p7&&Z.openAiHeaders)B.headers=Z.openAiHeaders;if($==="bedrock"){let D=iI(Z.awsAuthentication),U=D==="profile"||Z.awsUseProfile===!0;B.aws={accessKey:b(Q.awsAccessKey),secretKey:b(Q.awsSecretKey),sessionToken:b(Q.awsSessionToken),region:b(Z.awsRegion),authentication:D,profile:U?b(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:b(Z.awsBedrockEndpoint),customModelBaseId:b(W==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")B.gcp={projectId:b(Z.vertexProjectId),region:b(Z.vertexRegion)};if($===p7&&(Z.azureApiVersion||Z.azureIdentity!==void 0))B.azure={apiVersion:b(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let D=Z.sapAiCoreUseOrchestrationMode??!0;B.sap={clientId:b(Q.sapAiCoreClientId),clientSecret:b(Q.sapAiCoreClientSecret),tokenUrl:b(Z.sapAiCoreTokenUrl),resourceGroup:b(Z.sapAiResourceGroup),deploymentId:D?void 0:b(W==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:D}}if($==="oca"){B.oca={mode:Z.ocaMode};let D=b(Q.ocaRefreshToken);if(D)B.auth={...B.auth??{},refreshToken:D}}if($==="qwen")B.apiLine=Z.qwenApiLine;if($==="moonshot")B.apiLine=Z.moonshotApiLine;if($==="zai")B.apiLine=Z.zaiApiLine;if($==="minimax")B.apiLine=Z.minimaxApiLine;let G={anthropic:Z.anthropicBaseUrl,openai:Z.openAiBaseUrl,ollama:Z.ollamaBaseUrl,lmstudio:Z.lmStudioBaseUrl,litellm:Z.liteLlmBaseUrl,gemini:Z.geminiBaseUrl,requesty:Z.requestyBaseUrl,asksage:Z.asksageApiUrl,dify:Z.difyBaseUrl,oca:Z.ocaBaseUrl,aihubmix:Z.aihubmixBaseUrl,sapaicore:Z.sapAiCoreBaseUrl},K=b(H[$]),F=b(G[$]),A={provider:J,...K?{apiKey:K}:{},...Y?{model:Y}:{},...F?{baseUrl:F}:{},...j?{reasoning:j}:{},...V?{timeout:V}:{},...B},L=h8.safeParse(A);if(!L.success)return;return Object.keys(A).filter((D)=>D!=="provider").length>0?L.data:void 0}function $x($,Z){if($!==sU)return;if(!Z.baseUrl||!Z.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:Z.baseUrl,defaultModelId:Z.model},models:{[Z.model]:{id:Z.model,name:Z.model,contextWindow:nU,maxInputTokens:nU,capabilities:["streaming","tools","images"]}}}}function Zx($,Z){let Q=new Set;for(let J of[$.actModeApiProvider,$.planModeApiProvider]){let X=b(J);if(X)Q.add(X)}if(b(Z.apiKey))Q.add("anthropic");if(b(Z.openRouterApiKey))Q.add("openrouter");if(b(Z.openAiApiKey))Q.add(p7);if(b(Z.openAiNativeApiKey))Q.add("openai-native");if(b(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(b(Z.geminiApiKey))Q.add("gemini");if(b(Z.ollamaApiKey))Q.add("ollama");if(b(Z.awsAccessKey)||b(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||b($.awsProfile))Q.add("bedrock");if(b($.vertexProjectId)||b($.vertexRegion))Q.add("vertex");if(b(Z.clineApiKey))Q.add("cline");let W=yY(b(Z["cline:clineAccountId"]));if(W?.accessToken||W?.refreshToken||W?.accountId)Q.add("cline");if(b(Z.ocaApiKey))Q.add("oca");if(b(Z.sapAiCoreClientId)||b(Z.sapAiCoreClientSecret)||b($.sapAiCoreTokenUrl)||b($.sapAiCoreBaseUrl)||b($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function H9($){let Z=$.providerSettingsManager.read(),Q=nI($);if(!Q)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let{globalState:W,secrets:J}=Q,X=W.mode==="plan"?"plan":"act",Y=Zx(W,J),j=N$();j.providers={...Z.providers},j.lastUsedProvider=Z.lastUsedProvider;let V=new Date().toISOString(),H=0,B=SY(pI($.providerSettingsManager.getFilePath()),"models.json"),G=DY(B),K=0;for(let L of Y){let f=bY(L);if(j.providers[f])continue;let D=eI(L,W,J,X);if(!D)continue;j.providers[f]={settings:D,updatedAt:V,tokenSource:"migration"},H+=1;let U=$x(f,D);if(U&&!G.providers[f])G.providers[f]=U,K+=1}if(H===0&&K===0)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let F=b(X==="plan"?W.planModeApiProvider:W.actModeApiProvider),A=F?bY(F):void 0;if(j.lastUsedProvider=Z.lastUsedProvider??(A&&j.providers[A]?A:Object.keys(j.providers)[0]),$.providerSettingsManager.write(j),K>0)PU(B,G);return{migrated:H>0||K>0,providerCount:Object.keys(j.providers).length,lastUsedProvider:j.lastUsedProvider}}H7();L0();oQ();var tU={};N(tU,{FileTeamPersistenceStore:()=>r7});import{appendFileSync as Qx,existsSync as hY,mkdirSync as Wx,readFileSync as Jx,renameSync as Xx,unlinkSync as Yx,writeFileSync as jx}from"node:fs";import{join as kY}from"node:path";import{resolveTeamDataDir as Vx}from"@cline/shared/storage";function Hx($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class r7{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=Hx($.teamName),Q=$.baseDir?.trim()||Vx();this.dirPath=kY(Q,Z),this.statePath=kY(this.dirPath,"state.json"),this.taskHistoryPath=kY(this.dirPath,"task-history.jsonl")}loadState(){if(!hY(this.statePath))return;try{let $=Jx(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 jA(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`;jx(Q,`${JSON.stringify(Z,null,2)}
|
|
751
|
+
`,"utf8"),Xx(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(),Qx(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:Z})}
|
|
752
|
+
`,"utf8")}ensureDir(){if(!hY(this.dirPath))Wx(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(hY(this.statePath))Yx(this.statePath)}}var eU={};N(eU,{ChatViewStateSchema:()=>IY,ChatSummarySchema:()=>o7,ChatSessionStatusSchema:()=>n7,ChatSessionConfigSchema:()=>i7,ChatMessageSchema:()=>s7,ChatMessageRoleSchema:()=>a7});import{z as h}from"zod";var i7=h.object({workspaceRoot:h.string().min(1),cwd:h.string().optional(),provider:h.string().min(1),model:h.string().min(1),mode:h.enum(["act","plan"]).default("act"),apiKey:h.string(),systemPrompt:h.string().optional(),rules:h.string().optional(),maxIterations:h.number().int().positive().optional(),enableTools:h.boolean(),enableSpawn:h.boolean().optional(),enableTeams:h.boolean().optional(),autoApproveTools:h.boolean().optional(),missionStepInterval:h.number().int().positive().optional(),missionTimeIntervalMs:h.number().int().positive().optional()}),n7=h.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),a7=h.enum(["user","assistant","tool","system","status","error"]),s7=h.object({id:h.string().min(1),sessionId:h.string().nullable(),role:a7,content:h.string(),createdAt:h.number().int().nonnegative(),meta:h.object({stream:h.enum(["stdout","stderr"]).optional(),toolName:h.string().optional(),iteration:h.number().int().nonnegative().optional(),agentId:h.string().optional(),conversationId:h.string().optional(),hookEventName:h.string().optional(),inputTokens:h.number().int().nonnegative().optional(),outputTokens:h.number().int().nonnegative().optional(),checkpoint:h.object({ref:h.string(),createdAt:h.number().int().nonnegative(),runCount:h.number().int().positive(),kind:h.enum(["stash","commit"]).optional()}).optional()}).optional()}),o7=h.object({toolCalls:h.number().int().nonnegative(),tokensIn:h.number().int().nonnegative(),tokensOut:h.number().int().nonnegative()}),IY=h.object({sessionId:h.string().nullable(),status:n7,config:i7,messages:h.array(s7),rawTranscript:h.string(),error:h.string().nullable(),summary:o7});var $D={};N($D,{CORE_BUILD_VERSION:()=>xY});var xY=QF;import{Agent as Qg,createAgentRuntime as Wg}from"@cline/agents";var ZD={};N(ZD,{fetchClineRecommendedModels:()=>mY,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>t7});import{getClineEnvironmentConfig as Bx}from"@cline/shared";var Gx=5000,t7={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 Kx($){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 gY($){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 Fx($){if(!$||typeof $!=="object")return null;let Z=$,Q=Array.isArray(Z.recommended)?Z.recommended:[],W=Array.isArray(Z.free)?Z.free:[],J=Array.isArray(Z.clinePass)?Z.clinePass:[],X=Q.map(gY).filter((V)=>V!==null),Y=W.map(gY).filter((V)=>V!==null),j=J.map(gY).filter((V)=>V!==null);if(X.length===0&&Y.length===0&&j.length===0)return null;return{recommended:X,free:Y,clinePass:j}}function Ax($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=Bx().apiBaseUrl;try{return($.providerSettingsManager??new q1).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function fx($,Z,Q){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await $(Z,{signal:W.signal})}finally{clearTimeout(J)}}async function mY($={}){try{let Z=Ax($),Q=$.fetchImpl??fetch,W=await fx(Q,`${Z}/api/v1/ai/cline/recommended-models`,$.timeoutMs??Gx);if(!W.ok)throw Error(`HTTP ${W.status}`);let J=await W.json(),X=Fx(J);if(X)return X}catch{}return Kx(t7)}var QD={};N(QD,{loadLlmsConfigFromFile:()=>cY,defineLlmsConfig:()=>vY});import{readFile as Ux}from"node:fs/promises";import Dx from"node:path";function vY($){return $}async function cY($){let Z=Dx.resolve($),Q=await Ux(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(J){let X=J instanceof Error?J.message:String(J);throw Error(`Failed to parse JSON config at "${Z}": ${X}`)}return Lx(W,Z)}function Lx($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let W=$.providers;if(!Array.isArray(W))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!W.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}var VD={};N(VD,{createLlmsSdk:()=>dY,DefaultLlmsSdk:()=>B9});import{BUILT_IN_PROVIDER_IDS as XD,createHandler as Tx,createHandlerAsync as Ox,getProviderCollection as qx,hasProvider as YD,registerAsyncHandler as Mx,registerHandler as Rx,registerModel as Ex,registerProvider as jD}from"@cline/llms";function WD($){return $?{...$}:{}}function _x($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function zx($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function JD($){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 uY{providers=new Map;register($){zx($.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??{},...WD($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:_x($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...WD($.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 B9{configuredProviders=new uY;constructor($){this.applyConfig($)}createHandler($){return Tx(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return Ox(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(jD($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)Rx($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)Mx($.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.`);jD({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($){Ex($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...XD]}async getBuiltInProviders(){return(await Promise.all(XD.map((Z)=>qx(Z)))).filter((Z)=>Z!==void 0).map((Z)=>JD({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=YD(Z.id),W=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,J=typeof W==="string"&&YD(W);if(!Q&&!J)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function dY($){return new B9($)}KX();async function Nx(){return Promise.resolve().then(() => (H7(),vf))}function Vg(){return new Date().toISOString()}var Hg="cline",Bg="cline-pass";function Gg($){if(KD($)!=="providers.json")return;let Z=pY($);if(KD(Z)!=="settings")return;return pY(Z)}class q1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??jg(),this.dataDir=$.dataDir??Gg(this.filePath),this.dataDir||!$.filePath)H9({providerSettingsManager:this,dataDir:this.dataDir});if(xU(this),g7(this.read()),lY(this.filePath))try{GD(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!lY(this.filePath))return N$();try{let $=Xg(this.filePath,"utf8"),Z=JSON.parse($),Q=k8.safeParse(Z);if(Q.success)return g7(Q.data),Q.data}catch{}return N$()}write($){let Z=k8.parse($),Q=pY(this.filePath);if(!lY(Q))Jg(Q,{recursive:!0,mode:448});Yg(this.filePath,`${JSON.stringify(Z,null,2)}
|
|
753
|
+
`,"utf8");try{GD(this.filePath,384)}catch{}g7(Z)}saveProviderSettings($,Z={}){let Q=h8.parse($),W=this.read(),J=Q.provider,X=Z.setLastUsed!==!1,Y=W.providers[J],j=Z.tokenSource??Y?.tokenSource??"manual",V={...W,providers:{...W.providers,[J]:{settings:Q,updatedAt:Vg(),tokenSource:j}},lastUsedProvider:X?J:W.lastUsedProvider};return this.write(V),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,J=j0(Z)?.storageProviderId;if(!J||J===Z)return Q;let X=$.providers[J]?.settings;if(!X)return Q;return h8.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===Bg&&Z.isClinePassEnabled===!1)return Hg;return Q}getLastUsedProviderSettings($={}){let Z=this.read(),Q=this.resolveLastUsedProviderId(Z,$);if(!Q)return;return this.resolveProviderSettings(Z,Q)}getProviderConfig($,Z){let Q=this.getProviderSettings($);if(!Q)return;return l0(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return l0(Z,$)}async refreshCatalog(){try{await b8({})}catch{}}}L0();Z4();function Kg($,Z){let Q=$?.expiresAt,W=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===W}class e7 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 rY{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new q1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=j0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let W=this.refreshInFlight.get(Z);if(W)return W;let J=this.resolveProviderApiKeyInternal($,Z,Q).catch((X)=>{throw X}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,J),J}async resolveProviderApiKeyInternal($,Z,Q){let W=j0($);if(!W)return null;let J=this.providerSettingsManager.getProviderSettings(Z);if(!J)return null;let X=u4($,J);if(!X)return null;let Y=await W.refresh({settings:J,credentials:X,forceRefresh:Q,telemetry:this.telemetry});if(!Y)throw new e7($);let j=n$({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:Y,setLastUsed:!1,save:!1}),V=!Kg(J.auth,j.auth);if(V)this.providerSettingsManager.saveProviderSettings(j,{setLastUsed:!1,tokenSource:"oauth"});return{apiKey:W.getApiKey(j)??Y.access,accountId:Y.accountId,refreshed:V}}}import{normalizeUserInput as Fg}from"@cline/shared";import{nanoid as Ag}from"nanoid";class FD{list($){return $?Z1($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((V)=>V.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:Z1($),updated:!1};let J=$.pendingPrompts[W];if(!J)return{sessionId:Z.sessionId,prompts:Z1($),updated:!1};let X=Z.prompt===void 0?J.prompt:Fg(Z.prompt).trim();if(!X)throw Error("prompt cannot be empty");let Y=Z.delivery??J.delivery,j={...J,prompt:X,mode:Z.mode??J.mode,delivery:Y};return $.pendingPrompts.splice(W,1),fg($,j,W,J.delivery),{sessionId:Z.sessionId,prompts:Z1($),prompt:$W(j),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((X)=>X.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:Z1($),removed:!1};let[J]=$.pendingPrompts.splice(W,1);return{sessionId:Z.sessionId,prompts:Z1($),prompt:J?$W(J):void 0,removed:!0}}enqueue($,Z){let{prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y}=Z,j=$.pendingPrompts.findIndex((V)=>V.prompt===Q);if(j>=0){let[V]=$.pendingPrompts.splice(j,1),H={...V,prompt:Q,mode:W??V.mode,userImages:X??V.userImages,userFiles:Y??V.userFiles};if(J==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...H,delivery:"steer"});else $.pendingPrompts.push(H)}else{let V={id:`pending_${Date.now()}_${Ag(5)}`,prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return Z1($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((W)=>W.delivery==="steer");if(Z<0)return{prompts:Z1($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:Z1($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:Z1($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),Z1($)}clear($){return $.pendingPrompts.length=0,[]}}class iY{deps;service=new FD;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:Z1($)}})}scheduleDrain($,Z){if(Z.pendingPrompts.length===0||Z.aborting||Z.drainingPendingPrompts||!Z.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let Z=this.deps.getSession($);if(!Z)return;if(Z.aborting||Z.drainingPendingPrompts)return;if(!Z.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(Z);if(!Q)return;this.emitPrompts(Z),this.emitSubmitted(Z,Q),Z.drainingPendingPrompts=!0;let W=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{W=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,W&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=$W(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 $W($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function Z1($){return $.pendingPrompts.map($W)}function fg($,Z,Q,W){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(W==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}L0();class aY{deps;constructor($){this.deps=$}dispatchAgentEvent($,Z,Q){let W=this.deps.getSession($),J={sessionId:$,config:Z,liveSession:W,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},X=W3(Q),Y=!!W&&(!X.agentId||X.agentId===nY(W.agent));J3(J,Q,Y?{isPrimaryAgentEvent:!0,agentId:nY(W.agent),conversationId:W.agent.getConversationId(),...W?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(rJ(Q,Z),Z.type==="agent_event"){let W={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};J3(W,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let W=v1({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:nY(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(W)Y$(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...W})}}if(await iJ($,Z,this.deps.invokeBackendOptional),Q)nJ(Q,$,Z,this.deps.emit)}async handlePluginEvent($,Z,Q){if(Z.name==="plugin_log"){this.handlePluginLog($,Z.payload);return}if(Z.name==="automation_event"){let V=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!V)return;let H=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!H)return;await V.ingestEvent(H);return}if(Z.name!=="steer_message"&&Z.name!=="queue_message"&&Z.name!=="pending_prompt")return;let W=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0,J=typeof W?.sessionId==="string"&&W.sessionId.trim().length>0?W.sessionId.trim():$,X=typeof W?.prompt==="string"?W.prompt.trim():"";if(!X)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":W?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(J,{prompt:X,delivery:Y})}handlePluginLog($,Z,Q){let W=this.deps.getSession($),J=Q??W?.config.extensionContext?.logger??W?.config.logger;if(!J||!Z||typeof Z!=="object")return;let X=Z,Y=typeof X.message==="string"?X.message:"";if(!Y)return;let j=X.metadata&&typeof X.metadata==="object"?{...X.metadata}:{};if(j.sessionId??=$,typeof X.pluginName==="string"&&X.pluginName)j.pluginName=X.pluginName;if(X.level==="debug"){J.debug(Y,j);return}if(X.level==="error"){if(J.error)J.error(Y,j);else J.log(Y,{...j,severity:"error"});return}J.log(Y,j)}}function nY($){return $.getAgentId()}function sY($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:T$($.config),teamName:$.config.teamName?.trim()||void 0,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,parentSessionId:typeof $.sessionMetadata?.parentSessionId==="string"?$.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof $.sessionMetadata?.parentAgentId==="string"?$.sessionMetadata.parentAgentId:void 0,agentId:typeof $.sessionMetadata?.agentId==="string"?$.sessionMetadata.agentId:void 0,conversationId:typeof $.sessionMetadata?.conversationId==="string"?$.sessionMetadata.conversationId:void 0,isSubagent:typeof $.sessionMetadata?.isSubagent==="boolean"?$.sessionMetadata.isSubagent:!1,prompt:$.pendingPrompt,metadata:$.sessionMetadata,messagesPath:$.artifacts?.messagesPath,updatedAt:$.updatedAt??$.endedAt??$.startedAt}}function oY($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function AD($,Z,...Q){let W=oY($,Z);if(!W)throw Error(`session service method not available: ${Z}`);return Promise.resolve(W.apply($,Q))}async function fD($,Z,...Q){let W=oY($,Z);if(!W)return;await Promise.resolve(W.apply($,Q))}async function UD($,Z,...Q){let W=oY($,Z);if(!W)return;return await Promise.resolve(W.apply($,Q))}Y1();L0();function tY($,Z,Q){return{onSubAgentEvent:(W)=>$.onAgentEvent(Q,Z,W),onSubAgentStart:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(W.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let X=v1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId});if(X)Y$(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...X});y4(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:W.parentAgentId,agentId:W.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",Q,W)},onSubAgentEnd:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime,X=$.subAgentStarts.get(W.subAgentId),Y=X?Date.now()-X.startedAt:0,j=W.result?.text?W.result.text.split(`
|
|
754
|
+
`).length:0;y4(Z.telemetry,{event:"ended",ulid:Q,durationMs:Y,outputLines:j,errorMessage:W.error?String(W.error):void 0,agentId:W.subAgentId,parentId:W.parentAgentId,...v1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId})}),$.subAgentStarts.delete(W.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,W)}}}function eY($,Z,Q,W){let J=tY($,Z,Q);return _$({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let Y=Z.enableTools?V2({cwd:Z.cwd,...u0[x1({mode:Z.mode})],executors:W}):[];if(Z.enableSpawnAgent)Y.push(eY($,Z,Q,W));return g1(Y)},...J})}import{readFile as Ug,stat as Dg}from"node:fs/promises";var Lg=20480000;async function DD($){let Z=await Dg($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>Lg)throw Error("File is too large to read into context.");let Q=await Ug($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var LD=5000;function G9($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Eg($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=G9(Z.inputTokens),W=G9(Z.outputTokens),J=G9(Z.cacheReadTokens),X=G9(Z.cacheWriteTokens),Y=G9(Z.totalCost);if(Q===void 0||W===void 0||J===void 0||X===void 0||Y===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:J,cacheWriteTokens:X,totalCost:Y}}function Ng($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}class T1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new R5;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new c$;constructor($){let Z=zg();if(Z)Rg(Z);let Q=h0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new q4,this.createAgentInstance=$.createAgent??((W)=>new U$(W)),this.defaultCapabilities=q0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new q1,this.oauthTokenManager=$.oauthTokenManager??new rY({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new iY({getSession:(W)=>this.sessions.get(W),emit:(W)=>this.emit(W),send:(W)=>this.runTurn(W)}),this.pendingPrompts={list:async(W)=>this.pendingPromptsController.list(W.sessionId),update:async(W)=>this.pendingPromptsController.update(W),delete:async(W)=>this.pendingPromptsController.delete(W)},this.eventBridge=new aY({getSession:(W)=>this.sessions.get(W),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(W)=>this.emit(W),persistMessages:(W,J,X)=>{this.invoke("persistSessionMessages",W,J,X)},enqueuePendingPrompt:(W,J)=>this.pendingPromptsController.enqueue(W,J),invokeBackendOptional:(W,...J)=>this.invokeOptional(W,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.source??z0.CLI,Q=J0(),W=$.config.sessionId?.trim()??"",J=W||Og(),X=await this.applyInitialOAuthCredentials($),Y=X.initialMessages??[],j=Y.length>0?T8(Y):D0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let H=$j(V,J),B=$j(H,`${J}.messages.json`),G=$j(H,`${J}.json`),K=T$($.config),F=P0.parse({version:1,session_id:J,source:Z,pid:process.pid,started_at:Q,status:"running",interactive:$.interactive===!0,provider:X.config.providerId,model:X.config.modelId,cwd:X.config.cwd,workspace_root:K,team_name:X.config.teamName,enable_tools:X.config.enableTools,enable_spawn:X.config.enableSpawnAgent,enable_teams:X.config.enableAgentTeams,prompt:X.prompt?.trim()||void 0,messages_path:B}),A;if(W.length>0&&Y.length>0&&!X.prompt?.trim()){let P=await this.invokeOptionalValue("readSessionManifest",J);if(P)F=P,A={manifestPath:G,messagesPath:P.messages_path||B,manifest:P}}let f=await this.seedAggregateUsageFromArtifacts({initialUsage:j,sessionDir:H,rootMessagesPath:A?.messagesPath??B,manifest:F});this.usageBySession.set(J,j),this.aggregateUsageBySession.set(J,f);let D=q0(this.defaultCapabilities,$.capabilities),U=D?.toolExecutors??this.toolExecutors,T=$.localRuntime,q=T?.extensionContext?.logger??T?.logger,z=T?.extensionContext?.automation,_,E={getSession:(P)=>this.sessions.get(P),subAgentStarts:this.subAgentStarts,onAgentEvent:(P,B0,G0)=>this.eventBridge.dispatchAgentEvent(P,B0,G0),invokeBackendOptional:(P,...B0)=>this.invokeOptional(P,...B0)};_=await HG({input:X,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:D,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(P)=>{if(P.name==="plugin_log"){this.eventBridge.handlePluginLog(J,P.payload,q);return}this.eventBridge.handlePluginEvent(J,P,z)},onTeamEvent:(P)=>{this.eventBridge.handleTeamEvent(J,P),_.config.onTeamEvent?.(P)},createSpawnTool:()=>eY(E,_.config,J,U),createSubAgentLifecycleCallbacks:(P)=>tY(E,P,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(P)=>{await this.persistSessionMetadata(J,()=>P)}});let w=await this.runtimeBuilder.build(_.runtimeBuilderInput),y=_.config,l=_.providerConfig;if(w.teamRuntime&&!y.teamName?.trim())y.teamName=w.teamRuntime.getTeamName();let o=[...w.tools,...y.extraTools??[]],t=w.extensions??_.extensions,Q0={sessionId:J,providerId:l.providerId,modelId:l.modelId,apiKey:l.apiKey,baseUrl:l.baseUrl,headers:l.headers,knownModels:l.knownModels,providerConfig:l,thinking:y.thinking,reasoningEffort:y.reasoningEffort??l.reasoningEffort,maxTokensPerTurn:y.maxTokensPerTurn,systemPrompt:y.systemPrompt,maxIterations:y.maxIterations,execution:y.execution,prepareTurn:a4(y),tools:o,hooks:_.hooks,extensions:t,hookErrorMode:y.hookErrorMode,initialMessages:_.effectiveInput.initialMessages,userFileContentLoader:DD,toolPolicies:_.toolPolicies,requestToolApproval:_.requestToolApproval?async(P)=>{let B0=_.requestToolApproval,G0=this.sessions.get(J);if(G0)await this.markTurnPending(G0);try{if(!B0)return{approved:!1,reason:"Tool approval callback is not configured."};return await B0(P)}finally{let w0=this.sessions.get(J);if(w0?.status==="pending")await this.markTurnRunning(w0)}}:void 0,telemetry:y.telemetry,onConsecutiveMistakeLimitReached:y.onConsecutiveMistakeLimitReached,completionPolicy:w.completionPolicy,consumePendingUserMessage:()=>{let P=this.pendingPromptsController.consumeSteer(J);return P?g5(P.prompt,P.mode??y.mode):void 0},logger:w.logger??y.logger,extensionContext:y.extensionContext,onEvent:(P)=>this.eventBridge.dispatchAgentEvent(J,y,P)};Q0.hooks={...Q0.hooks,onEvent:async(P)=>{if(await _.hooks?.onEvent?.(P),P.type!=="assistant-message")return;let B0=this.sessions.get(J);if(!B0)return;let G0=B0.agent.getMessages();try{await this.invoke("persistSessionMessages",J,G0,y.systemPrompt)}catch(w0){y.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:w0}),n2(y.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:w0,severity:"warn",handled:!0,context:{sessionId:J,providerId:y.providerId,modelId:y.modelId}})}}};let Q1=this.createAgentInstance(Q0);if(Q0.onEvent)Q1.subscribeEvents(Q0.onEvent);w.registerLeadAgent?.(Q1);let l$=v1({agentId:Q1.getAgentId(),conversationId:Q1.getConversationId(),teamId:w.teamRuntime?.getTeamId(),teamName:w.teamRuntime?.getTeamName(),teamRole:w.teamRuntime?"lead":void 0});if(GG(y,J,W.length>0,K,l$),l$)Y$(y.telemetry,{ulid:J,modelId:y.modelId,provider:y.providerId,...l$});if(w.teamRuntime)N9(y.telemetry,{ulid:J,teamId:w.teamRuntime.getTeamId(),teamName:w.teamRuntime.getTeamName(),leadAgentId:Q1.getAgentId(),restoredFromPersistence:w.teamRestoredFromPersistence===!0});let r={sessionId:J,config:y,sessionMetadata:X.sessionMetadata,...A?{artifacts:A}:{},source:Z,startedAt:A?.manifest.started_at??Q,updatedAt:A?.manifest.ended_at??A?.manifest.started_at??Q,pendingPrompt:F.prompt,runtime:w,agent:Q1,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:_.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(this.sessions.set(J,r),this.emitStatus(J,"running"),Y.length>0&&!A){if(await this.ensureSessionPersisted(r),await this.invoke("persistSessionMessages",r.sessionId,Y,r.config.systemPrompt),!X.prompt?.trim())await this.updateStatus(r,"completed",0)}let M1;try{if(X.prompt?.trim())if(M1=await this.executeTurn(r,{prompt:X.prompt,userImages:X.userImages,userFiles:X.userFiles}),!r.interactive)await this.finalizeSingleRun(r,M1.finishReason);else await this.completeInteractiveTurn(r,M1.finishReason)}catch(P){if(r.interactive&&r.aborting)M1=await this.completeAbortedInteractiveTurn(r);else{n2(r.config.telemetry,{component:"core",operation:"session.start",error:P,severity:"error",handled:!1,context:{sessionId:r.sessionId,providerId:r.config.providerId,modelId:r.config.modelId}});try{await this.failSession(r)}catch(B0){r.config.logger?.error?.("Session failure cleanup threw",{sessionId:r.sessionId,error:B0})}throw P}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:B,result:M1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let W=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...W?{sessionMetadata:W}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),W=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:W??"immediate"}}),W==="queue"||W==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:W,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,J.finishReason);else await this.completeInteractiveTurn(Z,J.finishReason);if(J.finishReason==="error"||J.finishReason==="aborted")return J;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),J}catch(J){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw n2(Z.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),J}}async getAccumulatedUsage($){let Z=zJ(this.usageBySession.get($)),Q=zJ(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,this.pendingPromptsController.clearAborted(Q),Q.agent.abort(Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!H0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!H0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return sY(Z);let Q=$.trim();if(!Q)return;let W=await this.getRow(Q);if(W)return R6(W);let J=await this.readManifest(Q);return J?RQ(J):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(R6),W=new Set(Q.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(W.has(J.sessionId))continue;Q.unshift(sY(J))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return h$(Q.messagesPath);let W=await this.readManifest(Z);return h$(W?.messages_path)}async dispatchHookEvent($){await nK($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){let Q=this.getSessionOrThrow($);Q.config.modelId=Z,Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:Z}),Q.agent.updateConnection({modelId:Z})}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),W=Q.prompt.trim();if(!W)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=W;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let J=await this.executeAgentTurn($,W,Q.userImages,Q.userFiles);while(aJ($,J.finishReason)){let X=await sJ($);if(X.length===0)break;let Y=oJ($,X);J=await this.executeAgentTurn($,Y)}return J}async completeInteractiveTurn($,Z){if(x5($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),W=D0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:W}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:W,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,W){let J=$.started||$.agent.getMessages().length>0,X=$.persistedMessages??$.agent.getMessages(),Y=this.usageBySession.get($.sessionId)??D0(),j=this.aggregateUsageBySession.get($.sessionId)??Y;$.turnUsageBaseline=Y,$.turnAggregateUsageBaseline=j,$.turnPrimaryUsage=D0(),$.turnUsageByAgent=new Map,T9($.config.telemetry,$.sessionId,$.config.mode),t2($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(Z,Q,W):()=>$.agent.run(Z,Q,W),H=await this.runWithAuthRetry($,V,X);$.started=!0;let B=LZ(H.messages,H,X);$.persistedMessages=B;let G=N6($.turnUsageByAgent?.values()??[]),K=A0(Y,H.usage),F=A0(A0(D0(),H.usage),G),A=A0(j,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(L)=>({...L??{},totalCost:K.totalCost,aggregatedAgentsCost:A.totalCost,usage:K,aggregateUsage:A})),await this.invoke("persistSessionMessages",$.sessionId,B,$.config.systemPrompt),this.observeTaskCompletionTool($,H),H}catch(V){throw n2($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((W)=>W.name===U0.SUBMIT_AND_EXIT&&W.error===void 0))return;$.submitAndExitObserved=!0,S4($.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=T$($.config),W=Mg(Z.prompt).trim();if(!W)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let J=await B8(W,Q);KG($.config.telemetry,J);let X=g5(J.prompt,Z.mode??$.config.mode),Y=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),j=this.resolveAbsoluteFilePaths(Q,J.matchedFiles),V=Array.from(new Set([...Y,...j]));return{prompt:X,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=T$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:Z,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,Z){let Q=this.sessions.get($),W=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,J=Z(W?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Q.sessionMetadata=J,Q.artifacts.manifest.metadata=J}async finalizeSingleRun($,Z){if(x5($))return;let Q=Z==="aborted"||$.aborting,W=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":W?"failed":"completed",exitCode:W?1:0,shutdownReason:W?"session_error":"session_complete",endReason:Z})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(Z.status==="completed"&&!$.submitAndExitObserved)S4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});uQ($);let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),n2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,Z.status,Z.exitCode)}catch(J){W("update_status",J)}try{await $.agent.shutdown(Z.shutdownReason)}catch(J){W("agent_shutdown",J)}}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),n2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(Z)}catch(J){W("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let W=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!W.updated)return;let J=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(J.status=Z,H0(Z))delete J.ended_at,J.exit_code=null;else J.ended_at=W.endedAt??J0(),J.exit_code=typeof Q==="number"?Q:null;$.artifacts.manifest=J,$.status=Z,$.updatedAt=W.endedAt??J0(),$.endedAt=H0(Z)?null:J.ended_at,$.exitCode=J.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,J),this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(W){if(!i$($.config.providerId)||!qg(W))throw W;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),Z()}}async syncOAuthCredentials($,Z){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:Z?.forceRefresh})}catch(W){if(W instanceof e7)throw Error(`${W.providerId} requires re-authentication.`);throw W}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new r1($);throw n2(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>Tg(W)?W:Zj($,W));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return v1({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=A0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let W=Zj(Z),J=`${Q}.messages.json`,X;try{X=_g($)}catch{return D0()}let Y=D0();for(let j of X){if(!j.endsWith(".messages.json"))continue;if(j===J)continue;let V=Zj($,j);if(V===W)continue;let H=await h$(V);if(H.length===0)continue;Y=A0(Y,T8(H))}return Y}withPersistedAggregateUsageFloor($,Z){let Q=Eg(Z.metadata?.aggregateUsage);if(Q)return Ng($,Q);let W=Z.metadata?.aggregatedAgentsCost;if(typeof W!=="number"||!Number.isFinite(W)||W<=$.totalCost)return $;return{...$,totalCost:W}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:U1({session:Z,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),LD))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(LD)).find((W)=>W.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return AD(this.sessionService,$,...Z)}invokeOptional($,...Z){return fD(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return UD(this.sessionService,$,...Z)}}function wg($){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 Pg($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function V7($={}){let Z=new T1({sessionService:new z1(new L1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||z0.CLI,interactive:!1,config:{providerId:Cg(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:Pg(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{configExtensions:Q.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Q,W){let J=await Z.runTurn({sessionId:Q,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((X)=>X.content)});if(!J)throw Error("local hub schedule runtime returned no turn result");return{result:wg(J)}},async abortSession(Q){return await Z.abort(Q,Error("hub schedule abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}bg(process.env.CLINE_VCR);function hg($){let Z=process.cwd(),Q,W,J;for(let X=0;X<$.length;X+=1){let Y=$[X],j=$[X+1];if(Y==="--cwd"&&j){Z=j,X+=1;continue}if(Y==="--host"&&j){Q=j,X+=1;continue}if(Y==="--port"&&j){let V=Number(j);if(Number.isFinite(V))W=V;X+=1;continue}if(Y==="--pathname"&&j)J=j,X+=1}return{cwd:Z,host:Q,port:W,pathname:J}}async function kg(){let $=hg(process.argv.slice(2));process.chdir($.cwd);let Z=a0({host:$.host,port:$.port,pathname:$.pathname}),Q=await d2({host:Z.host,port:Z.port,pathname:Z.pathname,owner:yg()==="production"?s0():y0(),runtimeHandlers:V7(),cronOptions:{workspaceRoot:$.cwd}}),W=async()=>{await Q.close(),process.exit(0)},J=!1,X=(Y,j)=>{if(J)return;J=!0;let V=j instanceof Error?j.stack||j.message:String(j);process.stderr.write(`[hub-daemon] ${Y}: ${V}
|
|
755
755
|
`),Q.close().catch((H)=>{let B=H instanceof Error?H.stack||H.message:String(H);process.stderr.write(`[hub-daemon] shutdown after ${Y} failed: ${B}
|
|
756
|
-
`)}).finally(()=>{process.exit(1)})};process.on("SIGINT",()=>{W()}),process.on("SIGTERM",()=>{W()}),process.on("uncaughtException",(Y)=>{X("uncaughtException",Y)}),process.on("unhandledRejection",(Y)=>{if(Y instanceof
|
|
757
|
-
`);return}X("unhandledRejection",Y)}),await new Promise(()=>{})}
|
|
756
|
+
`)}).finally(()=>{process.exit(1)})};process.on("SIGINT",()=>{W()}),process.on("SIGTERM",()=>{W()}),process.on("uncaughtException",(Y)=>{X("uncaughtException",Y)}),process.on("unhandledRejection",(Y)=>{if(Y instanceof Sg){process.stderr.write(`[hub-daemon] ignored agent runtime abort rejection: ${Y.message}
|
|
757
|
+
`);return}X("unhandledRejection",Y)}),await new Promise(()=>{})}kg().catch(($)=>{let Z=$ instanceof Error?$.stack||$.message:String($);process.stderr.write(`[hub-daemon] fatal: ${Z}
|
|
758
758
|
`),process.exit(1)});
|