@cline/core 0.0.64 → 0.0.65-nightly.1784603699
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/definitions.d.ts +21 -3
- package/dist/extensions/tools/index.d.ts +8 -3
- package/dist/extensions/tools/team/delegated-agent.d.ts +1 -1
- package/dist/extensions/tools/types.d.ts +7 -0
- package/dist/hub/daemon/entry.js +159 -159
- package/dist/hub/index.js +157 -157
- package/dist/hub/server/hub-server-options.d.ts +6 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +154 -154
- package/dist/runtime/host/local-runtime-host.d.ts +3 -1
- package/dist/runtime/orchestration/session-runtime-orchestrator.d.ts +7 -0
- package/dist/services/local-runtime-bootstrap.d.ts +2 -1
- package/dist/services/telemetry/core-events.d.ts +17 -2
- package/dist/services/telemetry/index.js +1 -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{nZ.delete($.lockDir),LE($)}}function D1($,W,Z={}){let Q=OE($,Z);return BF(Q,$,W)}async function F6($,W,Z={}){let Q=await TE($,Z);return BF(Q,$,W)}function zE($){let W=RE($);if(!W.mcpServers||typeof W.mcpServers!=="object"||Array.isArray(W.mcpServers))W.mcpServers={};return W}function qE($,W){let Z=JSON.stringify($),Q=JSON.parse(Z),J=W(Q),j=JSON.stringify(Q),X=W($);if(JSON.stringify($)!==j)throw new g$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(X)!==JSON.stringify(J))throw new g$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return X}function ME($){let W=tK($,"utf8"),Z;try{Z=JSON.parse(W)}catch(Q){let J=Q instanceof Error?Q.message:String(Q);throw Error(`Failed to parse MCP settings JSON at "${$}": ${J}`)}if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Z}function RE($){try{return ME($)}catch(W){if(W.code==="ENOENT")return{};throw W}}function HF($,W){if(!Object.hasOwn($,W))return;let Z=$[W];if(!Z||typeof Z!=="object"||Array.isArray(Z))return;return Z}function NE($,W,Z){Object.defineProperty($,W,{value:Z,enumerable:!0,configurable:!0,writable:!0})}function x2($={}){let W=$.filePath??Q0(),Z=tK(W,"utf8"),Q;try{Q=JSON.parse(Z)}catch(j){let X=j instanceof Error?j.message:String(j);throw Error(`Failed to parse MCP settings JSON at "${W}": ${X}`)}let J=AE.safeParse(Q);if(!J.success){let j=J.error.issues.map((X)=>{let Y=X.path.join(".");return Y?`${Y}: ${X.message}`:X.message}).join("; ");throw Error(`Invalid MCP settings at "${W}": ${j}`)}return J.data}function A6($){if(!$)return;let W={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(W).length>0?W:void 0}function EE($){if($===void 0)return;let W=hJ.safeParse($);if(!W.success)return;return A6(W.data)}function W$($={}){let W=$.filePath??Q0();return sK(W)}function t0($={}){let W=x2($);return Object.entries(W.mcpServers).map(([Z,Q])=>({name:Z,transport:Q.transport,disabled:Q.disabled,metadata:Q.metadata,oauth:Q.oauth}))}function g2($){let W=$.filePath??Q0(),Z=$.name.trim();if(!Z)throw Error("MCP server settings toggle requires a server name.");D1(W,(Q)=>{let J=Q.mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${W}": mcpServers must be an object.`);let j={...J},X=HF(j,Z);if(!X)throw Error(`Unknown MCP server: ${Z}`);let Y={...X};if($.disabled)Y.disabled=!0;else delete Y.disabled;NE(j,Z,Y),Q.mcpServers=j})}function m2($,W={}){let Z=x2(W);if(!Object.hasOwn(Z.mcpServers,$))return;return A6(Z.mcpServers[$]?.oauth)}function GF($,W){return(Z)=>{let Q=Z.mcpServers,J=HF(Q,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let j=EE(J.oauth)??{},X=A6(W(j));if(X)J.oauth=X;else delete J.oauth;return X??{}}}function v2($,W,Z={}){let Q=Z.filePath??Q0();return D1(Q,GF($,W))}async function k5($,W,Z={}){let Q=Z.filePath??Q0();return F6(Q,GF($,W))}function I5($={}){return t0($).map((Z)=>{let Q=Z.transport.type!=="stdio",J=Z.oauth?.tokens?.access_token;return{serverName:Z.name,oauthSupported:Q,oauthConfigured:Q&&typeof J==="string"&&J.trim().length>0,lastError:Z.oauth?.lastError,lastAuthenticatedAt:Z.oauth?.lastAuthenticatedAt}}).sort((Z,Q)=>Z.serverName.localeCompare(Q.serverName))}async function c2($,W={}){let Z=t0(W);for(let Q of Z)await $.registerServer(Q);return Z}var h5,ZF,hJ,jE,XE,YE,VE,BE,HE,QF,GE,KE,FE,AE,K6,m$,g$,kJ=1e4,JF=25,DE,nZ;var aZ=Z2(()=>{h5=S.record(S.string(),S.string()),ZF=S.record(S.string(),S.unknown()),hJ=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(),jE=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:h5.optional()}),XE=S.object({type:S.literal("sse"),url:S.string().url(),headers:h5.optional()}),YE=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:h5.optional()}),VE=S.discriminatedUnion("type",[jE,XE,YE]),BE=S.object({transport:VE,disabled:S.boolean().optional(),metadata:ZF.optional(),oauth:hJ.optional()}),HE=S.enum(["stdio","sse","http","streamableHttp"]).optional(),QF=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:HE,disabled:S.boolean().optional(),metadata:ZF.optional(),oauth:hJ.optional()});GE=QF.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:h5.optional()}).superRefine(($,W)=>{let Z=$.type??bJ($.transportType);if(Z&&Z!=="stdio")W.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})),KE=QF.extend({url:S.string().url(),headers:h5.optional()}).superRefine(($,W)=>{let Z=$.type??bJ($.transportType)??"sse";if(Z!=="sse"&&Z!=="streamableHttp")W.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??bJ($.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}}),FE=S.union([BE,GE,KE]),AE=S.object({mcpServers:S.record(S.string(),FE)}).passthrough();K6=class K6 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};m$=class m$ extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};g$=class g$ extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};DE=new Int32Array(new SharedArrayBuffer(4)),nZ=new Set});import{existsSync as vS,mkdirSync as cS,readFileSync as uS,writeFileSync as dS}from"node:fs";import{resolve as lS}from"node:path";import{resolveSessionDataDir as pS}from"@cline/shared/storage";import{nanoid as rS}from"nanoid";import*as iS from"node-machine-id";function c0($){let W=$?.trim();if(W)return W;let Z=oS();if(Z)return Z;return sS()}function aS(){let $=iS;return $.machineIdSync??$.default?.machineIdSync}function oS(){try{let $=aS();if(!$)return;return $().trim()||void 0}catch{return}}function sS(){let $=pS(),W=lS($,nS);try{if(vS(W)){let Q=uS(W,"utf8").trim();if(Q.length>0)return Q}}catch{}let Z=`cl-${rS()}`;try{cS($,{recursive:!0}),dS(W,Z,"utf8")}catch{}return Z}var nS="machine-id";var M6=()=>{};class AW{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($,W){if(!this.isEnabled())return;this.emitLog($,W,!1)}emitRequired($,W){this.emitLog($,W,!0)}recordCounter($,W,Z,Q,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let j=this.counters.get($);if(!j)j=this.meter.createCounter($,Q?{description:Q}:void 0),this.counters.set($,j);j.add(W,this.flattenProperties(this.buildAttributes(Z)))}recordHistogram($,W,Z,Q,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let j=this.histograms.get($);if(!j)j=this.meter.createHistogram($,Q?{description:Q}:void 0),this.histograms.set($,j);j.record(W,this.flattenProperties(this.buildAttributes(Z)))}recordGauge($,W,Z,Q,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let j=this.buildAttributes(Z),X=JSON.stringify(j),Y=this.gaugeValues.get($);if(W===null){if(Y){if(Y.delete(X),Y.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=Y;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let B=this.meter.createObservableGauge($,Q?{description:Q}:void 0);B.addCallback((H)=>{for(let G of this.snapshotGaugeSeries($))H.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set($,B)}V.set(X,{value:W,attributes:j})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,W,Z){if(!this.logger)return;let Q=this.flattenProperties(this.buildAttributes(W,Z));this.logger.emit({severityText:"INFO",body:$,attributes:Q})}buildAttributes($,W=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...W?{_required:!0}:{}}}snapshotGaugeSeries($){let W=this.gaugeValues.get($);if(!W)return[];return Array.from(W.values(),(Z)=>({value:Z.value,attributes:Z.attributes?{...Z.attributes}:void 0}))}flattenProperties($,W="",Z=new WeakSet,Q=0){if(!$)return{};let J={},j=100,X=10;for(let[Y,V]of Object.entries($)){if(Y==="__proto__"||Y==="constructor"||Y==="prototype")continue;let B=W?`${W}.${Y}`:Y;if(V===null||V===void 0){J[B]=String(V);continue}if(Array.isArray(V)){let H=V.length>j?V.slice(0,j):V;try{J[B]=JSON.stringify(H)}catch{J[B]="[UnserializableArray]"}if(V.length>j)J[`${B}_truncated`]=!0,J[`${B}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){J[B]=V.toISOString();continue}if(V instanceof Error){J[B]=V.message;continue}if(Z.has(V)){J[B]="[Circular]";continue}if(Q>=X){J[B]="[MaxDepthExceeded]";continue}Z.add(V),Object.assign(J,this.flattenProperties(V,B,Z,Q+1));continue}if(Py(V)){J[B]=V;continue}try{J[B]=JSON.stringify(V)}catch{J[B]=String(V)}}return J}}function Py($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class UW{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,W){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:W})}emitRequired($,W){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:W})}recordCounter($,W,Z,Q,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:W,attributes:Z,description:Q,required:J===!0})}recordHistogram($,W,Z,Q,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:W,attributes:Z,description:Q,required:J===!0})}recordGauge($,W,Z,Q,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:W,attributes:Z,description:Q,required:J===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class v6{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new UW({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 W=this.buildAttributes($.properties);for(let Z of this.adapters)Z.emit($.event,W)}captureRequired($,W){let Z=this.buildAttributes(W);for(let Q of this.adapters)Q.emitRequired($,Z)}recordCounter($,W,Z,Q,J=!1){let j=this.buildAttributes(Z);for(let X of this.adapters)X.recordCounter($,W,j,Q,J)}recordHistogram($,W,Z,Q,J=!1){let j=this.buildAttributes(Z);for(let X of this.adapters)X.recordHistogram($,W,j,Q,J)}recordGauge($,W,Z,Q,J=!1){let j=this.buildAttributes(Z);for(let X of this.adapters)X.recordGauge($,W,j,Q,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 tj=()=>{};import{metrics as Sy,trace as by}from"@opentelemetry/api";import{logs as yy}from"@opentelemetry/api-logs";import{OTLPLogExporter as hy}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as ky}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as Iy}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as xy}from"@opentelemetry/resources";import{BatchLogRecordProcessor as gy,ConsoleLogRecordExporter as my,LoggerProvider as vy}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as cy,MeterProvider as uy,PeriodicExportingMetricReader as dU}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as dy,ConsoleSpanExporter as ly,SimpleSpanProcessor as py}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as ry}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as iy,ATTR_SERVICE_VERSION as ny}from"@opentelemetry/semantic-conventions";class lU{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($,W){this.resolveProperties(W)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class c6{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let W=xy({[iy]:$.serviceName??"cline",...$.serviceVersion?{[ny]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(W),this.loggerProvider=this.createLoggerProvider(W),this.tracerProvider=this.createTracerProvider(W),this.meterProvider)Sy.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)yy.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",W){return by.getTracer($,W??this.options.serviceVersion)}createAdapter($){return new AW({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let W=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new v6({...$,adapters:[W],distinctId:c0($.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 W=ej(this.options.metricsExporter);if(W.length===0)return null;let Z=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),Q=Math.min(30000,Math.floor(Z*0.8)),J=W.map((j)=>sy(j,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Z,timeout:Q})).filter((j)=>j!==null);if(J.length===0)return null;return new uy({resource:$,readers:J})}createTracerProvider($){let W=ej(this.options.tracesExporter);if(W.length===0)return null;let Z=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,Q=this.options.otlpTracesHeaders??this.options.otlpHeaders,J=[];for(let j of W){let X=oy(j,{endpoint:Z,headers:Q,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(X)J.push(X)}if(J.length===0)return null;return new ry({resource:$,spanProcessors:J})}createLoggerProvider($){let W=ej(this.options.logsExporter);if(W.length===0)return null;let Z=W.map((Q)=>{let J=ay(Q,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new gy(J,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((Q)=>Q!==null);if(Z.length===0)return null;return new vy({resource:$,processors:Z})}}function DW($){let W=new c6($),Z=W.createTelemetryService($);return Z.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion}),{provider:W,telemetry:Z}}function H$($){if(m9())return{telemetry:new lU($)};if($.enabled!==!0)return{telemetry:new v6({...$,distinctId:c0($.distinctId)})};return DW($)}function n$($){let{telemetry:W,provider:Z}=H$($);return{telemetry:W,provider:Z,flush:async()=>{let j=Z;if(j&&typeof j.forceFlush==="function")try{await j.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([W.dispose(),Z?.dispose()])}}}function ej($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Z)=>Z.trim()).filter((Z)=>Z==="console"||Z==="otlp")}function ay($,W){if($==="console")return new my;if(!W.endpoint)return null;let Z=$X(W.endpoint,"/v1/logs");return new hy({url:Z,headers:W.headers})}function oy($,W){if($==="console")return new py(new ly);if(!W.endpoint)return null;let Z=$X(W.endpoint,"/v1/traces");return new dy(new Iy({url:Z,headers:W.headers}))}function sy($,W){if($==="console")return new dU({exporter:new cy,exportIntervalMillis:W.interval,exportTimeoutMillis:W.timeout});if(!W.endpoint)return null;let Z=$X(W.endpoint,"/v1/metrics");return new dU({exporter:new ky({url:Z,headers:W.headers}),exportIntervalMillis:W.interval,exportTimeoutMillis:W.timeout})}function $X($,W){let Z=new URL($),Q=Z.pathname.endsWith("/")?Z.pathname.slice(0,-1):Z.pathname;return Z.pathname=Q.endsWith(W)?Q:`${Q}${W}`,Z.toString()}var _W=Z2(()=>{U1();M6();tj()});var Q_={};w(Q_,{resolveCoreDistinctId:()=>c0,createOpenTelemetryTelemetryService:()=>DW,createConfiguredTelemetryService:()=>H$,createConfiguredTelemetryHandle:()=>n$,OpenTelemetryProvider:()=>c6,OpenTelemetryAdapter:()=>AW});var uQ=Z2(()=>{M6();_W()});import{AgentRuntimeAbortError as dv}from"@cline/agents";import{initVcr as lv,resolveClineBuildEnv as pv}from"@cline/shared";import{normalizeProviderId as Iv}from"@cline/llms";var Mf={};w(Mf,{LocalRuntimeHost:()=>h1});import{readdirSync as Ev}from"node:fs";import{homedir as wv}from"node:os";import{isAbsolute as Cv,join as rY,resolve as iY}from"node:path";import{captureSdkError as $2,createSessionId as Pv,isLikelyAuthError as Sv,normalizeUserInput as bv}from"@cline/shared";import{setHomeDirIfUnset as yv}from"@cline/shared/storage";var IV={};w(IV,{saveProviderOAuthCredentials:()=>j2,resolveProviderApiKeyFromSettings:()=>i7,loginAndSaveProviderOAuthCredentials:()=>G4,isOAuthProvider:()=>J2,getProviderOAuthCredentialsFromSettings:()=>K4,getProviderAuthStorageId:()=>r7,getProviderAuthHandler:()=>H0,getPersistedProviderApiKey:()=>q8,formatProviderOAuthApiKey:()=>n7});import{decodeJwtPayload as NL,getClineEnvironmentConfig as hV}from"@cline/shared";var _V={};w(_V,{startClineDeviceAuth:()=>v7,refreshClineToken:()=>K9,loginClineOAuth:()=>Q4,getValidClineCredentials:()=>J4,completeClineDeviceAuth:()=>c7});import{getClineEnvironmentConfig as k7}from"@cline/shared";var eY={};w(eY,{setSdkLogger:()=>y7,sdkDebug:()=>s,hashSecret:()=>R0,getSdkLogger:()=>uf});import{createHash as cf}from"node:crypto";var b7;function y7($){b7=$}function uf(){return b7}function R0($){if(typeof $!=="string"||$.length===0)return"unset";return cf("sha256").update($).digest("hex").slice(0,8)}function s($){try{b7?.debug($)}catch{}}D0();var VV={};w(VV,{startLocalOAuthServer:()=>G1});function of(){let $;return{promise:new Promise((Z)=>{$=Z}),resolve:$}}async function G1($){let W=await import("node:http"),Z=$.host??"127.0.0.1",Q=$.timeoutMs??300000,J=$.successHtml??sf,j=of(),X=!1,Y=null,V=null,B=null,H=(F)=>{if(X)return;X=!0,j.resolve(F)},G=()=>{if(Y)clearTimeout(Y),Y=null;let F=B;if(B=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Z,port:F})).catch(()=>{})},K=async()=>{return Y=setTimeout(()=>{G(),H(null)},Q),j.promise};for(let F of $.ports){let A=W.createServer((U,f)=>{try{let _=new URL(U.url||"",`http://${Z}:${F}`);if(_.pathname!==$.callbackPath){f.statusCode=404,f.end("Not found");return}let R={url:_,code:_.searchParams.get("code")??void 0,state:_.searchParams.get("state")??void 0,provider:_.searchParams.get("provider")??void 0,error:_.searchParams.get("error")??void 0};if(R.error){f.statusCode=400,f.end(`Authentication failed: ${R.error}`),G(),H(R);return}if(!R.code){f.statusCode=400,f.end("Missing authorization code");return}if($.expectedState&&R.state!==$.expectedState){f.statusCode=400,f.end("State mismatch");return}f.statusCode=200,f.setHeader("Content-Type","text/html; charset=utf-8"),f.end(J),G(),H(R)}catch{f.statusCode=500,f.end("Internal error")}}),D=await new Promise((U)=>{let f=(_)=>{A.off("error",f),U({bound:!1,error:_})};A.once("error",f),A.listen(F,Z,()=>{A.off("error",f),V=A,U({bound:!0})})});if(D.error){if(D.error.code==="EADDRINUSE")continue;throw G(),D.error}if(D.bound){B=F;let U=`http://${Z}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Z,port:F,callbackUrl:U})).catch(()=>{});return{callbackUrl:U,waitForCallback:K,cancelWait:()=>{G(),H(null)},close:()=>{G(),H(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var sf=`<!DOCTYPE html>
|
|
1
|
+
import{createRequire as uL}from"node:module";var{defineProperty:y7,getOwnPropertyNames:mL}=Object;var sY=Object.prototype.hasOwnProperty;function tY($){return this[$]}var R=($,W,Z)=>{var Q=mL(W);for(let J of Q)if(!sY.call($,J)&&J!=="default")y7($,J,{get:tY.bind(W,J),enumerable:!0});if(Z){for(let J of Q)if(!sY.call(Z,J)&&J!=="default")y7(Z,J,{get:tY.bind(W,J),enumerable:!0});return Z}};var vL=($)=>$;function cL($,W){this[$]=vL.bind(null,W)}var w=($,W)=>{for(var Z in W)y7($,Z,{get:W[Z],enumerable:!0,configurable:!0,set:cL.bind(W,Z)})};var j2=($,W)=>()=>($&&(W=$($=0)),W);var eY=uL(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as pL,captureAgentUnexpectedReasoningTokens as ZV,captureTaskLifecycleEvent as Hc,SDK_ERROR_TELEMETRY_EVENT as rL,TASK_CANCELLED_EVENT as iL,TASK_FIRST_CHUNK_RECEIVED_EVENT as nL,TASK_PROVIDER_REQUEST_STARTED_EVENT as aL,TASK_PROVIDER_STREAM_FAILED_EVENT as oL,TASK_PROVIDER_STREAM_STARTED_EVENT as sL}from"@cline/shared";function r($,W,Z){$?.capture({event:W,properties:Z})}function i9($){if(!$)return;return $.substring(0,tL)}function eL($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function $f($){return typeof $==="string"?$:$.message}function WV($,W){return $.some((Z)=>W.has(Z.trim().toLowerCase()))}function QV($){r($,v.CLIENT.EXTENSION_ACTIVATED)}function n9($,W){let Z=[...W.vcs_types],Q={root_count:W.root_count,vcs_types:Z,is_multi_root:W.root_count>1,has_git:WV(Z,new Set(["git"])),has_mercurial:WV(Z,new Set(["mercurial","hg"]))};if(W.init_duration_ms!==void 0)Q.init_duration_ms=W.init_duration_ms;if(W.feature_flag_enabled!==void 0)Q.feature_flag_enabled=W.feature_flag_enabled;if(W.is_remote_workspace!==void 0)Q.is_remote_workspace=W.is_remote_workspace;r($,v.WORKSPACE.INITIALIZED,Q)}function a9($,W,Z){r($,v.WORKSPACE.INIT_ERROR,{error_type:eL(W),error_message:i9($f(W)),fallback_to_single_root:Z.fallback_to_single_root,workspace_count:Z.workspace_count??0})}function JV($,W){r($,v.WORKSPACE.PATH_RESOLVED,{...W})}function g1($,W){r($,v.USER.AUTH_STARTED,{provider:W})}function m1($,W){r($,v.USER.AUTH_SUCCEEDED,{provider:W})}function v1($,W,Z){r($,v.USER.AUTH_FAILED,{provider:W,errorMessage:i9(Z)})}function f$($,W,Z,Q){r($,v.USER.AUTH_LOGGED_OUT,{provider:W,reason:Z,status:Q?.status,errorCode:Q?.errorCode})}function I7($,W,Z){r($,v.USER.AUTH_REFRESH_SOFT_FAILURE,{provider:W,status:Z?.status,errorCode:Z?.errorCode,errorName:Z?.errorName,tokenExpired:Z?.tokenExpired})}function jV($,W,Z){r($,v.USER.AUTH_RUN_RETRY,{provider:W,recovered:Z?.recovered})}function XV($,W){r($,v.USER.PROVIDER_CONFIGURED,{provider:W})}function YV($,W){$?.captureRequired(v.USER.TELEMETRY_OPT_OUT,W)}function H1($,W){let Z=W.id?.trim();if(Z)$?.setDistinctId(Z);$?.updateCommonProperties({user_id:Z||W.id,account_id:W.id,account_email:W.email,provider:W.provider,organization_id:W.organizationId,organization_name:W.organizationName,member_id:W.memberId})}function o9($,W){r($,v.TASK.CREATED,W)}function s9($,W){r($,v.TASK.RESTARTED,W)}function Z4($,W){r($,v.TASK.COMPLETED,W)}function L8($,W){r($,v.TASK.CONVERSATION_TURN,{...W,timestamp:new Date().toISOString()})}function t9($,W){r($,v.TASK.TOKEN_USAGE,W)}function e9($,W,Z){r($,v.TASK.MODE_SWITCH,{ulid:W,mode:Z})}function f8($,W){r($,v.TASK.TOOL_USED,W)}function $W($,W){r($,v.TASK.SKILL_USED,W)}function WW($,W){r($,v.TASK.DIFF_EDIT_FAILED,W)}function Q4($,W){r($,v.TASK.PROVIDER_API_ERROR,{...W,errorMessage:i9(W.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function ZW($,W){r($,v.TASK.MISTAKE_LIMIT_REACHED,{...W,timestamp:new Date().toISOString()})}function VV($,W){r($,v.SDK.TOOL_TIMEOUT,Wf(W))}function Wf($){let W={};for(let[Z,Q]of Object.entries($))if(Q!==void 0)W[Z]=Q;return W}function QW($,W,Z){r($,v.TASK.MENTION_USED,{mentionType:W,contentLength:Z,timestamp:new Date().toISOString()})}function JW($,W,Z,Q){r($,v.TASK.MENTION_FAILED,{mentionType:W,errorType:Z,errorMessage:i9(Q),timestamp:new Date().toISOString()})}function jW($,W,Z,Q,J){r($,v.TASK.MENTION_SEARCH_RESULTS,{queryLength:W.length,resultCount:Z,searchType:Q,isEmpty:J,timestamp:new Date().toISOString()})}function O$($,W){r($,v.TASK.AGENT_CREATED,{...W,timestamp:new Date().toISOString()})}function XW($,W){r($,v.TASK.AGENT_TEAM_CREATED,{...W,timestamp:new Date().toISOString()})}function J4($,W){r($,W.event==="ended"?v.TASK.SUBAGENT_COMPLETED:v.TASK.SUBAGENT_STARTED,{...W,timestamp:new Date().toISOString()})}function YW($,W,Z,Q){r($,v.HOOKS.DISCOVERY_COMPLETED,{hookName:W,globalCount:Z,workspaceCount:Q,totalCount:Z+Q,timestamp:new Date().toISOString()})}function VW($,W){r($,v.TASK.COMPACTION_EXECUTED,{...W,timestamp:new Date().toISOString()})}function BW($,W){r($,v.TASK.COMPACTION_SKIPPED,{...W,timestamp:new Date().toISOString()})}function BV($,W){r($,v.TASK.COMPACTION_BUDGET_EMERGENCY,{...W,timestamp:new Date().toISOString()})}var tL=500,v;var U0=j2(()=>{v={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:pL},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",AUTH_REFRESH_SOFT_FAILURE:"user.auth_refresh_soft_failure",AUTH_RUN_RETRY:"user.auth_run_retry",PROVIDER_CONFIGURED:"user.provider_configured",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MISTAKE_LIMIT_REACHED:"task.mistake_limit_reached",PROVIDER_REQUEST_STARTED:aL,PROVIDER_STREAM_STARTED:sL,FIRST_CHUNK_RECEIVED:nL,PROVIDER_STREAM_FAILED:oL,CANCELLED:iL,MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed",COMPACTION_EXECUTED:"task.compaction_executed",COMPACTION_SKIPPED:"task.compaction_skipped",COMPACTION_BUDGET_EMERGENCY:"task.compaction_budget_emergency"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:rL,TOOL_TIMEOUT:"sdk.tool_timeout"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as oT,readFileSync as sT,statSync as tT,writeFileSync as eT}from"node:fs";import{dirname as $z}from"node:path";import{resolveGlobalSettingsPath as QH}from"@cline/shared/storage";import{z as T2}from"zod";function gW(){return m4.parse({})}function Zz(){mW=void 0}function Qz($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function Jz($){let W;try{W=sT($,"utf8")}catch{return gW()}try{let Z=m4.safeParse(JSON.parse(W));return Z.success?Z.data:gW()}catch{return gW()}}function jz(){let $=QH(),W=tT($,{throwIfNoEntry:!1}),Z=W?.mtimeMs??0,Q=W?.size??0,J=mW;if(J&&J.path===$&&J.mtimeMs===Z&&J.size===Q)return J;let j=Qz(W?Jz($):gW());return mW={path:$,mtimeMs:Z,size:Q,value:j},mW}function N0(){return jz().value}function q1($,W={}){let Z=QH(),Q=N0();oT($z(Z),{recursive:!0});let J=m4.parse($);if(!Q.telemetryOptOut&&J.telemetryOptOut)YV(W.telemetry);eT(Z,`${JSON.stringify(J,null,2)}
|
|
2
|
+
`,"utf8"),Zz()}function vW(){return N0().telemetryOptOut}function JH($,W={}){q1({...N0(),telemetryOptOut:$},W)}function jH(){return N0().autoUpdateEnabled}function XH($,W={}){q1({...N0(),autoUpdateEnabled:$},W)}function YH(){return N0().compactionStrategy??"basic"}function VH($){q1({...N0(),compactionStrategy:$})}function M1($){return new Set($??N0().disabledTools??[])}function v4($){return new Set($??N0().disabledPlugins??[])}function BH($){return M1().has($)}function cW($){let W=N0(),Z=new Set(W.disabledTools??[]),Q=Z.has($);if(Q)Z.delete($);else Z.add($);return q1({...W,disabledTools:[...Z]}),!Q}function f3($,W){let Z=[...new Set($.map((j)=>j.trim()).filter(Boolean))];if(Z.length===0)return;let Q=N0(),J=M1(Q.disabledTools);for(let j of Z)if(W)J.add(j);else J.delete(j);q1({...Q,disabledTools:[...J]})}function HH($,W){return f3([$],W),W}function GH($){return v4().has($)}function KH($,W){let Z=$.trim();if(!Z)return;let Q=N0(),J=v4(Q.disabledPlugins);if(W)J.add(Z);else J.delete(Z);q1({...Q,disabledPlugins:[...J]})}function uW($,W){let Z=v4(W);if(Z.size===0)return[...$];return $.filter((Q)=>!Z.has(Q))}function i1($,W){let Z=M1(W);if(Z.size===0)return[...$];return $.filter((Q)=>!Z.has(Q.name))}function dW($,W){if(!$||$.length===0)return $;let Z=M1(W);if(Z.size===0)return $;return $.map((Q)=>{if(!Q.setup)return Q;return{...Q,setup:(J,j)=>Q.setup?.({...J,registerTool:(X)=>{if(!Z.has(X.name))J.registerTool(X)}},j)}})}var ZH,Wz,m4,mW;var U1=j2(()=>{U0();ZH=T2.preprocess(($)=>Array.isArray($)?$.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter(Boolean):void 0,T2.array(T2.string()).optional()).transform(($)=>{if(!$)return;let W=[...new Set($)].sort((Z,Q)=>Z.localeCompare(Q));return W.length>0?W:void 0}),Wz=T2.enum(["basic","agentic"]).catch("basic"),m4=T2.object({telemetryOptOut:T2.boolean().default(!1).catch(!1),autoUpdateEnabled:T2.boolean().default(!0).catch(!0),compactionStrategy:Wz.optional(),disabledTools:ZH.optional(),disabledPlugins:ZH.optional()}).strip().transform(($)=>{let W={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.compactionStrategy)W.compactionStrategy=$.compactionStrategy;if($.disabledTools?.length)W.disabledTools=$.disabledTools;if($.disabledPlugins?.length)W.disabledPlugins=$.disabledPlugins;return W})});var bH={};w(bH,{normalizeUserMessage:()=>Xq,buildInitialUserContent:()=>jq});async function jq($,W,Z,Q){let J=Yq(W),j=await Bq(Z,Q);if(J.length===0&&!j)return $;let X=[{type:"text",text:$},...J];if(j)X.push(...j);return X}function Xq($){if($==null)return"";if(typeof $==="string")return $;let W=$.content;if(typeof W==="string")return W;if(!Array.isArray(W))return"";let Z=[];for(let Q of W)if(Q&&typeof Q==="object"&&Q.type==="text"){let J=Q.text;if(typeof J==="string")Z.push(J)}return Z.join(`
|
|
3
|
+
`)}function Yq($){if(!$||$.length===0)return[];let W=[];for(let Z of $){let Q=Vq(Z);if(Q)W.push(Q)}return W}function Vq($){let W=$.trim();if(!W)return;let Z=W.match(/^data:([^;,]+);base64,(.+)$/);if(Z){let Q=Z[1],J=Z[2];if(!Q||!J)return;return{type:"image",mediaType:Q,data:J}}return{type:"image",mediaType:"image/png",data:W}}async function Bq($,W){if(!$||$.length===0)return;let Z=W??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),Q=await Promise.all($.map(async(J)=>{let j=J.replace(/\\/g,"/");try{let X=await Z(J);return{type:"file",path:j,content:X}}catch(X){let Y=X instanceof Error?X.message:String(X);return{type:"file",path:j,content:`Error fetching content: ${Y}`}}}));if(Q.length===0)return;return Q}var AF={};w(AF,{updateMcpSettingsFileSync:()=>D1,updateMcpSettingsFile:()=>U6,updateMcpServerOAuthStateAsync:()=>x5,updateMcpServerOAuthState:()=>u2,setMcpServerDisabled:()=>v2,resolveMcpServerRegistrations:()=>$1,resolveDefaultMcpSettingsPath:()=>J0,registerMcpServersFromSettingsFile:()=>d2,normalizeMcpServerOAuthState:()=>D6,loadMcpSettingsFile:()=>m2,listMcpServerOAuthStatuses:()=>g5,hasMcpSettingsFile:()=>$$,getMcpServerOAuthState:()=>c2,McpSettingsUpdateSkippedError:()=>A6,McpSettingsMutatorPurityError:()=>u$,McpSettingsLockTimeoutError:()=>d$});import{existsSync as eK,mkdirSync as bJ,readFileSync as $F,renameSync as kJ,rmdirSync as KE,rmSync as yJ,statSync as FE,unlinkSync as WF,writeFileSync as ZF}from"node:fs";import{randomUUID as AE}from"node:crypto";import{dirname as QF,join as tK}from"node:path";import{setTimeout as UE}from"node:timers/promises";import{resolveMcpSettingsPath as DE}from"@cline/shared/storage";import{z as S}from"zod";function hJ($){if(!$)return;if($==="http")return"streamableHttp";return $}function J0(){return DE()}function EE($,W){bJ(QF($),{recursive:!0});let Z=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{ZF(Z,W,{encoding:"utf8",flag:"wx"}),kJ(Z,$)}catch(Q){try{WF(Z)}catch{}throw Q}}function CE($){Atomics.wait(wE,0,0,$)}function PE($){return`${$}.lock`}function YF(){return`${process.pid}.${Date.now()}.${AE()}`}function VF($,W){bJ(QF($),{recursive:!0});let Z=`${$}.tmp.${W}`;yJ(Z,{recursive:!0,force:!0}),bJ(Z,{recursive:!0}),ZF(tK(Z,`owner.${W}`),W,{encoding:"utf8",flag:"wx"});try{return kJ(Z,$),{lockDir:$,ownerFile:tK($,`owner.${W}`)}}catch(Q){if(yJ(Z,{recursive:!0,force:!0}),eK($))return;throw Q}}function BF($,W){let Z;try{Z=Date.now()-FE($).mtimeMs}catch(J){if(J.code==="ENOENT")return;throw J}if(Z<xJ)return;W.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Z}ms); reclaiming.`,{severity:"warn"});let Q=`${$}.stale.${YF()}`;try{kJ($,Q)}catch(J){if(J.code==="ENOENT")return;throw J}yJ(Q,{recursive:!0,force:!0})}function SE($){try{WF($.ownerFile)}catch(W){if(W.code!=="ENOENT")throw W}try{KE($.lockDir)}catch(W){let Z=W.code;if(Z!=="ENOENT"&&Z!=="ENOTEMPTY"&&Z!=="EEXIST")throw W}}function HF($){let W=PE($);if(aZ.has(W))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:W,token:YF()}}function bE($,W){let{lockDir:Z,token:Q}=HF($),J=W.timeoutMs??xJ,j=Date.now();while(!0){let X=VF(Z,Q);if(X)return aZ.add(Z),X;if(Date.now()-j>J)throw new d$(`Timed out waiting for MCP settings lock at ${Z} after ${J}ms.`);BF(Z,W),CE(XF)}}async function yE($,W){let{lockDir:Z,token:Q}=HF($),J=W.timeoutMs??xJ,j=Date.now();while(!0){let X=VF(Z,Q);if(X)return aZ.add(Z),X;if(Date.now()-j>J)throw new d$(`Timed out waiting for MCP settings lock at ${Z} after ${J}ms.`);BF(Z,W),await UE(XF)}}function GF($,W,Z){try{let Q=hE(W),J=kE(Q,Z);return EE(W,`${JSON.stringify(Q,null,2)}
|
|
4
|
+
`),J}finally{aZ.delete($.lockDir),SE($)}}function D1($,W,Z={}){let Q=bE($,Z);return GF(Q,$,W)}async function U6($,W,Z={}){let Q=await yE($,Z);return GF(Q,$,W)}function hE($){let W=xE($);if(!W.mcpServers||typeof W.mcpServers!=="object"||Array.isArray(W.mcpServers))W.mcpServers={};return W}function kE($,W){let Z=JSON.stringify($),Q=JSON.parse(Z),J=W(Q),j=JSON.stringify(Q),X=W($);if(JSON.stringify($)!==j)throw new u$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(X)!==JSON.stringify(J))throw new u$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return X}function IE($){let W=$F($,"utf8"),Z;try{Z=JSON.parse(W)}catch(Q){let J=Q instanceof Error?Q.message:String(Q);throw Error(`Failed to parse MCP settings JSON at "${$}": ${J}`)}if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Z}function xE($){try{return IE($)}catch(W){if(W.code==="ENOENT")return{};throw W}}function KF($,W){if(!Object.hasOwn($,W))return;let Z=$[W];if(!Z||typeof Z!=="object"||Array.isArray(Z))return;return Z}function gE($,W,Z){Object.defineProperty($,W,{value:Z,enumerable:!0,configurable:!0,writable:!0})}function m2($={}){let W=$.filePath??J0(),Z=$F(W,"utf8"),Q;try{Q=JSON.parse(Z)}catch(j){let X=j instanceof Error?j.message:String(j);throw Error(`Failed to parse MCP settings JSON at "${W}": ${X}`)}let J=NE.safeParse(Q);if(!J.success){let j=J.error.issues.map((X)=>{let Y=X.path.join(".");return Y?`${Y}: ${X.message}`:X.message}).join("; ");throw Error(`Invalid MCP settings at "${W}": ${j}`)}return J.data}function D6($){if(!$)return;let W={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(W).length>0?W:void 0}function mE($){if($===void 0)return;let W=IJ.safeParse($);if(!W.success)return;return D6(W.data)}function $$($={}){let W=$.filePath??J0();return eK(W)}function $1($={}){let W=m2($);return Object.entries(W.mcpServers).map(([Z,Q])=>({name:Z,transport:Q.transport,disabled:Q.disabled,metadata:Q.metadata,oauth:Q.oauth}))}function v2($){let W=$.filePath??J0(),Z=$.name.trim();if(!Z)throw Error("MCP server settings toggle requires a server name.");D1(W,(Q)=>{let J=Q.mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${W}": mcpServers must be an object.`);let j={...J},X=KF(j,Z);if(!X)throw Error(`Unknown MCP server: ${Z}`);let Y={...X};if($.disabled)Y.disabled=!0;else delete Y.disabled;gE(j,Z,Y),Q.mcpServers=j})}function c2($,W={}){let Z=m2(W);if(!Object.hasOwn(Z.mcpServers,$))return;return D6(Z.mcpServers[$]?.oauth)}function FF($,W){return(Z)=>{let Q=Z.mcpServers,J=KF(Q,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let j=mE(J.oauth)??{},X=D6(W(j));if(X)J.oauth=X;else delete J.oauth;return X??{}}}function u2($,W,Z={}){let Q=Z.filePath??J0();return D1(Q,FF($,W))}async function x5($,W,Z={}){let Q=Z.filePath??J0();return U6(Q,FF($,W))}function g5($={}){return $1($).map((Z)=>{let Q=Z.transport.type!=="stdio",J=Z.oauth?.tokens?.access_token;return{serverName:Z.name,oauthSupported:Q,oauthConfigured:Q&&typeof J==="string"&&J.trim().length>0,lastError:Z.oauth?.lastError,lastAuthenticatedAt:Z.oauth?.lastAuthenticatedAt}}).sort((Z,Q)=>Z.serverName.localeCompare(Q.serverName))}async function d2($,W={}){let Z=$1(W);for(let Q of Z)await $.registerServer(Q);return Z}var I5,JF,IJ,_E,LE,fE,OE,TE,zE,jF,qE,ME,RE,NE,A6,d$,u$,xJ=1e4,XF=25,wE,aZ;var oZ=j2(()=>{I5=S.record(S.string(),S.string()),JF=S.record(S.string(),S.unknown()),IJ=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(),_E=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:I5.optional()}),LE=S.object({type:S.literal("sse"),url:S.string().url(),headers:I5.optional()}),fE=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:I5.optional()}),OE=S.discriminatedUnion("type",[_E,LE,fE]),TE=S.object({transport:OE,disabled:S.boolean().optional(),metadata:JF.optional(),oauth:IJ.optional()}),zE=S.enum(["stdio","sse","http","streamableHttp"]).optional(),jF=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:zE,disabled:S.boolean().optional(),metadata:JF.optional(),oauth:IJ.optional()});qE=jF.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:I5.optional()}).superRefine(($,W)=>{let Z=$.type??hJ($.transportType);if(Z&&Z!=="stdio")W.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})),ME=jF.extend({url:S.string().url(),headers:I5.optional()}).superRefine(($,W)=>{let Z=$.type??hJ($.transportType)??"sse";if(Z!=="sse"&&Z!=="streamableHttp")W.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??hJ($.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}}),RE=S.union([TE,qE,ME]),NE=S.object({mcpServers:S.record(S.string(),RE)}).passthrough();A6=class A6 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};d$=class d$ extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};u$=class u$ extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};wE=new Int32Array(new SharedArrayBuffer(4)),aZ=new Set});import{existsSync as tS,mkdirSync as eS,readFileSync as $b,writeFileSync as Wb}from"node:fs";import{resolve as Zb}from"node:path";import{resolveSessionDataDir as Qb}from"@cline/shared/storage";import{nanoid as Jb}from"nanoid";import*as jb from"node-machine-id";function d0($){let W=$?.trim();if(W)return W;let Z=Vb();if(Z)return Z;return Bb()}function Yb(){let $=jb;return $.machineIdSync??$.default?.machineIdSync}function Vb(){try{let $=Yb();if(!$)return;return $().trim()||void 0}catch{return}}function Bb(){let $=Qb(),W=Zb($,Xb);try{if(tS(W)){let Q=$b(W,"utf8").trim();if(Q.length>0)return Q}}catch{}let Z=`cl-${Jb()}`;try{eS($,{recursive:!0}),Wb(W,Z,"utf8")}catch{}return Z}var Xb="machine-id";var N6=()=>{};class D9{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($,W){if(!this.isEnabled())return;this.emitLog($,W,!1)}emitRequired($,W){this.emitLog($,W,!0)}recordCounter($,W,Z,Q,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let j=this.counters.get($);if(!j)j=this.meter.createCounter($,Q?{description:Q}:void 0),this.counters.set($,j);j.add(W,this.flattenProperties(this.buildAttributes(Z)))}recordHistogram($,W,Z,Q,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let j=this.histograms.get($);if(!j)j=this.meter.createHistogram($,Q?{description:Q}:void 0),this.histograms.set($,j);j.record(W,this.flattenProperties(this.buildAttributes(Z)))}recordGauge($,W,Z,Q,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let j=this.buildAttributes(Z),X=JSON.stringify(j),Y=this.gaugeValues.get($);if(W===null){if(Y){if(Y.delete(X),Y.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=Y;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let B=this.meter.createObservableGauge($,Q?{description:Q}:void 0);B.addCallback((H)=>{for(let G of this.snapshotGaugeSeries($))H.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set($,B)}V.set(X,{value:W,attributes:j})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,W,Z){if(!this.logger)return;let Q=this.flattenProperties(this.buildAttributes(W,Z));this.logger.emit({severityText:"INFO",body:$,attributes:Q})}buildAttributes($,W=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...W?{_required:!0}:{}}}snapshotGaugeSeries($){let W=this.gaugeValues.get($);if(!W)return[];return Array.from(W.values(),(Z)=>({value:Z.value,attributes:Z.attributes?{...Z.attributes}:void 0}))}flattenProperties($,W="",Z=new WeakSet,Q=0){if(!$)return{};let J={},j=100,X=10;for(let[Y,V]of Object.entries($)){if(Y==="__proto__"||Y==="constructor"||Y==="prototype")continue;let B=W?`${W}.${Y}`:Y;if(V===null||V===void 0){J[B]=String(V);continue}if(Array.isArray(V)){let H=V.length>j?V.slice(0,j):V;try{J[B]=JSON.stringify(H)}catch{J[B]="[UnserializableArray]"}if(V.length>j)J[`${B}_truncated`]=!0,J[`${B}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){J[B]=V.toISOString();continue}if(V instanceof Error){J[B]=V.message;continue}if(Z.has(V)){J[B]="[Circular]";continue}if(Q>=X){J[B]="[MaxDepthExceeded]";continue}Z.add(V),Object.assign(J,this.flattenProperties(V,B,Z,Q+1));continue}if(uy(V)){J[B]=V;continue}try{J[B]=JSON.stringify(V)}catch{J[B]=String(V)}}return J}}function uy($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class _9{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,W){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:W})}emitRequired($,W){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:W})}recordCounter($,W,Z,Q,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:W,attributes:Z,description:Q,required:J===!0})}recordHistogram($,W,Z,Q,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:W,attributes:Z,description:Q,required:J===!0})}recordGauge($,W,Z,Q,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:W,attributes:Z,description:Q,required:J===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class u6{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new _9({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 W=this.buildAttributes($.properties);for(let Z of this.adapters)Z.emit($.event,W)}captureRequired($,W){let Z=this.buildAttributes(W);for(let Q of this.adapters)Q.emitRequired($,Z)}recordCounter($,W,Z,Q,J=!1){let j=this.buildAttributes(Z);for(let X of this.adapters)X.recordCounter($,W,j,Q,J)}recordHistogram($,W,Z,Q,J=!1){let j=this.buildAttributes(Z);for(let X of this.adapters)X.recordHistogram($,W,j,Q,J)}recordGauge($,W,Z,Q,J=!1){let j=this.buildAttributes(Z);for(let X of this.adapters)X.recordGauge($,W,j,Q,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 $X=()=>{};import{metrics as dy,trace as ly}from"@opentelemetry/api";import{logs as py}from"@opentelemetry/api-logs";import{OTLPLogExporter as ry}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as iy}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as ny}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as ay}from"@opentelemetry/resources";import{BatchLogRecordProcessor as oy,ConsoleLogRecordExporter as sy,LoggerProvider as ty}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as ey,MeterProvider as $h,PeriodicExportingMetricReader as pU}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as Wh,ConsoleSpanExporter as Zh,SimpleSpanProcessor as Qh}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as Jh}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as jh,ATTR_SERVICE_VERSION as Xh}from"@opentelemetry/semantic-conventions";class rU{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($,W){this.resolveProperties(W)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class d6{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let W=ay({[jh]:$.serviceName??"cline",...$.serviceVersion?{[Xh]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(W),this.loggerProvider=this.createLoggerProvider(W),this.tracerProvider=this.createTracerProvider(W),this.meterProvider)dy.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)py.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",W){return ly.getTracer($,W??this.options.serviceVersion)}createAdapter($){return new D9({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let W=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new u6({...$,adapters:[W],distinctId:d0($.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 W=WX(this.options.metricsExporter);if(W.length===0)return null;let Z=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),Q=Math.min(30000,Math.floor(Z*0.8)),J=W.map((j)=>Bh(j,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Z,timeout:Q})).filter((j)=>j!==null);if(J.length===0)return null;return new $h({resource:$,readers:J})}createTracerProvider($){let W=WX(this.options.tracesExporter);if(W.length===0)return null;let Z=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,Q=this.options.otlpTracesHeaders??this.options.otlpHeaders,J=[];for(let j of W){let X=Vh(j,{endpoint:Z,headers:Q,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(X)J.push(X)}if(J.length===0)return null;return new Jh({resource:$,spanProcessors:J})}createLoggerProvider($){let W=WX(this.options.logsExporter);if(W.length===0)return null;let Z=W.map((Q)=>{let J=Yh(Q,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new oy(J,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((Q)=>Q!==null);if(Z.length===0)return null;return new ty({resource:$,processors:Z})}}function L9($){let W=new d6($),Z=W.createTelemetryService($);return Z.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion}),{provider:W,telemetry:Z}}function B$($){if(vW())return{telemetry:new rU($)};if($.enabled!==!0)return{telemetry:new u6({...$,distinctId:d0($.distinctId)})};return L9($)}function t$($){let{telemetry:W,provider:Z}=B$($);return{telemetry:W,provider:Z,flush:async()=>{let j=Z;if(j&&typeof j.forceFlush==="function")try{await j.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([W.dispose(),Z?.dispose()])}}}function WX($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Z)=>Z.trim()).filter((Z)=>Z==="console"||Z==="otlp")}function Yh($,W){if($==="console")return new sy;if(!W.endpoint)return null;let Z=ZX(W.endpoint,"/v1/logs");return new ry({url:Z,headers:W.headers})}function Vh($,W){if($==="console")return new Qh(new Zh);if(!W.endpoint)return null;let Z=ZX(W.endpoint,"/v1/traces");return new Wh(new ny({url:Z,headers:W.headers}))}function Bh($,W){if($==="console")return new pU({exporter:new ey,exportIntervalMillis:W.interval,exportTimeoutMillis:W.timeout});if(!W.endpoint)return null;let Z=ZX(W.endpoint,"/v1/metrics");return new pU({exporter:new iy({url:Z,headers:W.headers}),exportIntervalMillis:W.interval,exportTimeoutMillis:W.timeout})}function ZX($,W){let Z=new URL($),Q=Z.pathname.endsWith("/")?Z.pathname.slice(0,-1):Z.pathname;return Z.pathname=Q.endsWith(W)?Q:`${Q}${W}`,Z.toString()}var f9=j2(()=>{U1();N6();$X()});var j_={};w(j_,{resolveCoreDistinctId:()=>d0,createOpenTelemetryTelemetryService:()=>L9,createConfiguredTelemetryService:()=>B$,createConfiguredTelemetryHandle:()=>t$,OpenTelemetryProvider:()=>d6,OpenTelemetryAdapter:()=>D9});var dQ=j2(()=>{N6();f9()});import{AgentRuntimeAbortError as Wc}from"@cline/agents";import{initVcr as Zc,resolveClineBuildEnv as Qc}from"@cline/shared";import{normalizeProviderId as nv}from"@cline/llms";var EL={};w(EL,{LocalRuntimeHost:()=>y1});import{readdirSync as mv}from"node:fs";import{homedir as vv}from"node:os";import{isAbsolute as cv,join as iY,resolve as nY}from"node:path";import{captureSdkError as J2,createSessionId as uv,isLikelyAuthError as dv,normalizeUserInput as lv}from"@cline/shared";import{setHomeDirIfUnset as pv}from"@cline/shared/storage";var gV={};w(gV,{saveProviderOAuthCredentials:()=>Y2,resolveProviderApiKeyFromSettings:()=>a7,loginAndSaveProviderOAuthCredentials:()=>F4,isOAuthProvider:()=>z$,getProviderOAuthCredentialsFromSettings:()=>A4,getProviderAuthStorageId:()=>n7,getProviderAuthHandler:()=>H0,getPersistedProviderApiKey:()=>R8,formatProviderOAuthApiKey:()=>o7});import{decodeJwtPayload as bf,getClineEnvironmentConfig as IV}from"@cline/shared";var fV={};w(fV,{startClineDeviceAuth:()=>u7,refreshClineToken:()=>FW,loginClineOAuth:()=>j4,getValidClineCredentials:()=>X4,completeClineDeviceAuth:()=>d7});import{getClineEnvironmentConfig as x7}from"@cline/shared";var $V={};w($V,{setSdkLogger:()=>k7,sdkDebug:()=>s,hashSecret:()=>R0,getSdkLogger:()=>lL});import{createHash as dL}from"node:crypto";var h7;function k7($){h7=$}function lL(){return h7}function R0($){if(typeof $!=="string"||$.length===0)return"unset";return dL("sha256").update($).digest("hex").slice(0,8)}function s($){try{h7?.debug($)}catch{}}U0();var HV={};w(HV,{startLocalOAuthServer:()=>G1});function Zf(){let $;return{promise:new Promise((Z)=>{$=Z}),resolve:$}}async function G1($){let W=await import("node:http"),Z=$.host??"127.0.0.1",Q=$.timeoutMs??300000,J=$.successHtml??Qf,j=Zf(),X=!1,Y=null,V=null,B=null,H=(F)=>{if(X)return;X=!0,j.resolve(F)},G=()=>{if(Y)clearTimeout(Y),Y=null;let F=B;if(B=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Z,port:F})).catch(()=>{})},K=async()=>{return Y=setTimeout(()=>{G(),H(null)},Q),j.promise};for(let F of $.ports){let A=W.createServer((U,L)=>{try{let _=new URL(U.url||"",`http://${Z}:${F}`);if(_.pathname!==$.callbackPath){L.statusCode=404,L.end("Not found");return}let M={url:_,code:_.searchParams.get("code")??void 0,state:_.searchParams.get("state")??void 0,provider:_.searchParams.get("provider")??void 0,error:_.searchParams.get("error")??void 0};if(M.error){L.statusCode=400,L.end(`Authentication failed: ${M.error}`),G(),H(M);return}if(!M.code){L.statusCode=400,L.end("Missing authorization code");return}if($.expectedState&&M.state!==$.expectedState){L.statusCode=400,L.end("State mismatch");return}L.statusCode=200,L.setHeader("Content-Type","text/html; charset=utf-8"),L.end(J),G(),H(M)}catch{L.statusCode=500,L.end("Internal error")}}),D=await new Promise((U)=>{let L=(_)=>{A.off("error",L),U({bound:!1,error:_})};A.once("error",L),A.listen(F,Z,()=>{A.off("error",L),V=A,U({bound:!0})})});if(D.error){if(D.error.code==="EADDRINUSE")continue;throw G(),D.error}if(D.bound){B=F;let U=`http://${Z}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Z,port:F,callbackUrl:U})).catch(()=>{});return{callbackUrl:U,waitForCallback:K,cancelWait:()=>{G(),H(null)},close:()=>{G(),H(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var Qf=`<!DOCTYPE html>
|
|
5
5
|
<html lang="en">
|
|
6
6
|
<head>
|
|
7
7
|
<meta charset="utf-8">
|
|
@@ -42,27 +42,27 @@ import{createRequire as vf}from"node:module";var{defineProperty:S7,getOwnPropert
|
|
|
42
42
|
</div>
|
|
43
43
|
<script>setTimeout(() => window.close(), 3000);</script>
|
|
44
44
|
</body>
|
|
45
|
-
</html>`;function BV($){let W="";for(let Z=0;Z<$.length;Z+=1)W+=String.fromCharCode($[Z]??0);return btoa(W).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function tf($){let Z=new TextEncoder().encode($),Q=await crypto.subtle.digest("SHA-256",Z);return new Uint8Array(Q)}function ef($=32){let W=new Uint8Array($);return crypto.getRandomValues(W),BV(W)}async function B9(){let $=ef(),W=BV(await tf($));return{verifier:$,challenge:W}}function H9($){return $.endsWith("/")?$.slice(0,-1):$}function Q2($,W){return new URL(W,`${H9($)}/`).toString()}function f8($,W={}){let Z=$.trim();if(!Z)return{};try{let Q=new URL(Z);return{code:Q.searchParams.get("code")??void 0,state:Q.searchParams.get("state")??void 0,provider:W.includeProvider?Q.searchParams.get("provider")??void 0:void 0}}catch{}if(W.allowHashCodeState&&Z.includes("#")){let[Q,J]=Z.split("#",2);return{code:Q||void 0,state:J||void 0}}if(Z.includes("code=")){let Q=new URLSearchParams(Z);return{code:Q.get("code")??void 0,state:Q.get("state")??void 0,provider:W.includeProvider?Q.get("provider")??void 0:void 0}}return{code:Z}}function L8($){try{let W=JSON.parse($),Z=W.error,Q=typeof Z==="string"?Z:Z&&typeof Z==="object"&&typeof Z.type==="string"?Z.type:void 0,J=typeof W.error_description==="string"?W.error_description:typeof W.message==="string"?W.message:Z&&typeof Z==="object"&&typeof Z.message==="string"?Z.message:void 0;return{code:Q,message:J}}catch{return{}}}function O8($,W){return Date.now()>=$.expires-W}async function T8($){if(!$.onManualCodeInput){let j=await $.waitForCallback();return{code:j?.code,state:j?.state,provider:j?.provider,error:j?.error}}let W,Z,Q=$.onManualCodeInput().then((j)=>{W=j,$.cancelWait()}).catch((j)=>{Z=j instanceof Error?j:Error(String(j)),$.cancelWait()}),J=await $.waitForCallback();if(Z)throw Z;if(J?.code||J?.error)return{code:J.code,state:J.state,provider:J.provider,error:J.error};if(W)return f8(W,$.parseOptions);if(await Q,Z)throw Z;if(W)return f8(W,$.parseOptions);return{}}var G9={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},FV={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},I7="https://api.workos.com",$L="/auth",HV=Array.from({length:11},($,W)=>48801+W),WL=300000,ZL=30000,z8=30000,QL=300,JL=5;class T1 extends Error{status;errorCode;constructor($,W){super($);this.name="ClineOAuthTokenError",this.status=W?.status,this.errorCode=W?.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 jL($){let W=Date.parse($);if(Number.isNaN(W))throw Error(`Invalid expiresAt value: ${$}`);return W}function x7($,W,Z={}){let Q=$.userInfo.clineUserId??Z.accountId,J=$.refreshToken??Z.refresh;if(!J)throw Error("Token response did not include a refresh token");let j={...Z.metadata??{},provider:W,tokenType:$.tokenType,userInfo:$.userInfo};return delete j.startedAt,{access:$.accessToken,refresh:J,expires:jL($.expiresAt),accountId:Q??void 0,email:$.userInfo.email||Z.email,metadata:j}}async function g7($){if(!$)return{};return typeof $==="function"?await $():$}function GV($,W){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return W;return Math.floor($)}async function KV($){await new Promise((W)=>setTimeout(W,$))}function m7($,W){if(!$.success||!$.data?.accessToken)throw Error(W);return $.data}async function AV($,W){let Z=await fetch(Q2(I7,FV.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(W?.requestTimeoutMs??z8)}),Q=await Z.json().catch(()=>({}));if(!Z.ok)throw new T1(`Device authorization failed: ${Z.status}${Q.error_description?` - ${Q.error_description}`:""}`,{status:Z.status,errorCode:Q.error});if(!Q.device_code||!Q.user_code||!Q.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:Q.device_code,userCode:Q.user_code,verificationUri:Q.verification_uri,verificationUriComplete:Q.verification_uri_complete,expiresInSeconds:GV(Q.expires_in,QL),pollIntervalSeconds:GV(Q.interval,JL)}}async function UV($){let W=Date.now()+$.expiresInSeconds*1000,Z=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=W){let Q=await fetch(Q2($.workosApiBaseUrl,FV.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 Q.json().catch(()=>({}));if(Q.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 KV(Z*1000);break}case"slow_down":{Z+=1,await KV(Z*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new T1(J.error_description||"WorkOS authorization failed",{status:Q.status,errorCode:J.error});default:throw new T1(`WorkOS token polling failed: ${Q.status}${J.error_description?` - ${J.error_description}`:""}`,{status:Q.status,errorCode:J.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function DV($,W,Z){let Q={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(Q2(W.apiBaseUrl,G9.register),{method:"POST",headers:{"Content-Type":"application/json",...await g7(W.headers)},body:JSON.stringify(Q),signal:AbortSignal.timeout(W.requestTimeoutMs??z8)});if(!J.ok){let X=await J.text().catch(()=>""),Y=L8(X);throw new T1(`Token registration failed: ${J.status}${Y.message?` - ${Y.message}`:""}`,{status:J.status,errorCode:Y.code})}let j=await J.json();return x7(m7(j,"Invalid token exchange response"),Z??W.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function XL($,W,Z,Q){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:W,provider:Q??Z.provider},j=await fetch(Q2(Z.apiBaseUrl,G9.token),{method:"POST",headers:{"Content-Type":"application/json",...await g7(Z.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Z.requestTimeoutMs??z8)});if(!j.ok){let Y=await j.text().catch(()=>""),V=L8(Y);throw new T1(`Token exchange failed: ${j.status}${V.message?` - ${V.message}`:""}`,{status:j.status,errorCode:V.code})}let X=await j.json();return x7(m7(X,"Invalid token exchange response"),Q??Z.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function Q4($){m1($.telemetry,$.provider??"cline");let W=$.useWorkOSDeviceAuth??!0,Z=$.callbackPorts?.length?$.callbackPorts:HV,Q=$.callbackPath??$L,J=W?null:await G1({ports:Z,callbackPath:Q,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=J?.callbackUrl||`http://127.0.0.1:${Z[0]??HV[0]}${Q}`;try{let X;if(W){let Y=k7().workOsClientId,V=await AV(Y,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let B=await UV({clientId:Y,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??z8,workosApiBaseUrl:I7,onProgress:$.callbacks.onProgress});X=await DV(B,$,$.provider)}else{let Y=new URL(Q2($.apiBaseUrl,G9.authorize));Y.searchParams.set("client_type","extension"),Y.searchParams.set("callback_url",j),Y.searchParams.set("redirect_uri",j),$.callbacks.onAuth({url:Y.toString(),instructions:"Continue the authentication process in your browser."});let V,B=$.provider,H=await T8({waitForCallback:J?.waitForCallback??(async()=>null),cancelWait:J?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(H.error)throw Error(`OAuth error: ${H.error}`);if(V=H.code,B=H.provider??B,!V){let G=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=f8(G,{includeProvider:!0});V=K.code,B=K.provider??B}if(!V)throw Error("Missing authorization code");X=await XL(V,j,$,B)}return v1($.telemetry,$.provider??"cline"),H1($.telemetry,{id:X.accountId,email:X.email,provider:$.provider??"cline"}),X}catch(X){throw c1($.telemetry,$.provider??"cline",X instanceof Error?X.message:String(X)),X}finally{J?.close()}}async function v7($){return await AV(k7().workOsClientId,$)}async function c7($){let W=$.provider??"cline";m1($.telemetry,W);try{let Z=await UV({clientId:k7().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??z8,workosApiBaseUrl:I7}),Q=await DV(Z,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return v1($.telemetry,W),H1($.telemetry,{id:Q.accountId,email:Q.email,provider:W}),Q}catch(Z){throw c1($.telemetry,W,Z instanceof Error?Z.message:String(Z)),Z}}async function K9($,W){let Z=Q2(W.apiBaseUrl,G9.refresh);s(`cline.refresh.request url=${Z} refreshTokenHash=${R0($.refresh)}`);let Q=await fetch(Z,{method:"POST",headers:{"Content-Type":"application/json",...await g7(W.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(W.requestTimeoutMs??z8)});if(!Q.ok){let Y=await Q.text().catch(()=>""),V=L8(Y);throw s(`cline.refresh.error status=${Q.status} errorCode=${V.code??"none"} message=${V.message??"none"}`),new T1(`Token refresh failed: ${Q.status}${V.message?` - ${V.message}`:""}`,{status:Q.status,errorCode:V.code})}let J=await Q.json(),j=$.metadata?.provider??W.provider,X=x7(m7(J,"Invalid token refresh response"),j,$);return s(`cline.refresh.success newAccessTokenHash=${R0(X.access)} newRefreshTokenHash=${R0(X.refresh)} expires=${X.expires}`),X}async function J4($,W,Z){if(!$)return s("cline.getCredentials outcome=no_current_credentials"),null;let Q=Z?.refreshBufferMs??WL,J=Z?.retryableTokenGraceMs??ZL,j=Z?.forceRefresh===!0;if(!j&&!O8($,Q))return s(`cline.getCredentials outcome=still_valid forceRefresh=${j}`),$;s(`cline.getCredentials outcome=needs_refresh forceRefresh=${j} accessTokenHash=${R0($.access)}`);try{return await K9($,W)}catch(X){let Y={status:X instanceof T1?X.status:void 0,errorCode:X instanceof T1?X.errorCode:void 0,errorName:X instanceof Error?X.name:void 0};if(X instanceof T1&&X.isLikelyInvalidGrant())return s(`cline.getCredentials outcome=invalid_grant status=${X.status} errorCode=${X.errorCode??"none"}`),D$(W.telemetry,W.provider??"cline","invalid_grant",{status:X.status,errorCode:X.errorCode}),null;if($.expires-Date.now()>J)return s(`cline.getCredentials outcome=transient_failure_kept_current error=${X instanceof Error?X.message:String(X)}`),h7(W.telemetry,W.provider??"cline",{...Y,tokenExpired:!1}),$;throw s(`cline.getCredentials outcome=transient_failure_rethrown error=${X instanceof Error?X.message:String(X)}`),h7(W.telemetry,W.provider??"cline",{...Y,tokenExpired:!0}),X}}D0();var LV={};w(LV,{refreshOpenAICodexToken:()=>A9,loginOpenAICodex:()=>j4,getValidOpenAICodexCredentials:()=>X4,OPENAI_CODEX_OAUTH_CONFIG:()=>Y0});import{decodeJwtPayload as u7}from"@cline/shared";import{nanoid as YL}from"nanoid";var Y0={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 F9 extends Error{status;errorCode;constructor($,W){super($);this.name="OpenAICodexOAuthTokenError",this.status=W?.status,this.errorCode=W?.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 VL($,W,Z=Y0.redirectUri){let Q=await fetch(Y0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:Y0.clientId,code:$,code_verifier:W,redirect_uri:Z}),signal:AbortSignal.timeout(Y0.httpTimeoutMs)});if(!Q.ok)return{type:"failed"};let J=await Q.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 BL($){try{let W=await fetch(Y0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:Y0.clientId}),signal:AbortSignal.timeout(Y0.httpTimeoutMs)});if(!W.ok){let Q=await W.text().catch(()=>""),J=L8(Q);throw new F9(`Token refresh failed: ${W.status}${J.message?` - ${J.message}`:""}`,{status:W.status,errorCode:J.code})}let Z=await W.json();if(!Z.access_token||!Z.refresh_token||typeof Z.expires_in!=="number")return{type:"failed"};return{type:"success",access:Z.access_token,refresh:Z.refresh_token,expires:Date.now()+Z.expires_in*1000,email:Z.email,idToken:Z.id_token}}catch(W){if(W instanceof F9)throw W;return{type:"failed"}}}async function HL($="pi"){let{verifier:W,challenge:Z}=await B9(),Q=YL(32),J=new URL(Y0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",Y0.clientId),J.searchParams.set("redirect_uri",Y0.redirectUri),J.searchParams.set("scope",Y0.scopes),J.searchParams.set("code_challenge",Z),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("state",Q),J.searchParams.set("id_token_add_organizations","true"),J.searchParams.set("codex_cli_simplified_flow","true"),J.searchParams.set("originator",$),{verifier:W,state:Q,url:J.toString()}}function GL(){try{let $=new URL(Y0.redirectUri),W=$.port.length>0?Number.parseInt($.port,10):Y0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(W)?W:Y0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:Y0.callbackPort,callbackPath:"/auth/callback",redirectUri:Y0.redirectUri}}}function KL($,W){let Z=W?u7(W):u7($),Q=Z?Z:u7($),j=Q?.[Y0.jwtClaimPath]?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;let X=Q?.organizations;if(Array.isArray(X)&&X.length>0){let V=X[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let Y=Q?.chatgpt_account_id;if(typeof Y==="string"&&Y.length>0)return Y;return null}function fV($,W){let Z=KL($.access,$.idToken)??W?.accountId;if(!Z)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||W?.refresh||"",expires:$.expires,accountId:Z,email:$.email??W?.email,metadata:{...W?.metadata??{},provider:"openai-codex"}}}async function j4($){m1($.telemetry,"openai-codex");let W=GL(),{verifier:Z,state:Q,url:J}=await HL($.originator),j=await G1({host:W.host,ports:[W.port],callbackPath:W.callbackPath,expectedState:Q});$.onAuth({url:J,instructions:"Continue the authentication process in your browser."});let X;try{let Y=await T8({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(Y.state&&Y.state!==Q)throw Error("State mismatch");if(X=Y.code,!X){let H=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=f8(H,{allowHashCodeState:!0});if(G.state&&G.state!==Q)throw Error("State mismatch");X=G.code}if(!X)throw Error("Missing authorization code");let V=await VL(X,Z,W.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let B=fV(V);return v1($.telemetry,"openai-codex"),H1($.telemetry,{id:B.accountId,email:B.email,provider:"openai-codex"}),B}catch(Y){throw c1($.telemetry,"openai-codex",Y instanceof Error?Y.message:String(Y)),Y}finally{j.close()}}async function A9($,W){let Z=await BL($);if(Z.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let Q=fV(Z,W);if(!Q.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return Q}async function X4($,W){if(!$)return null;let Z=W?.refreshBufferMs??Y0.refreshBufferMs,Q=W?.retryableTokenGraceMs??Y0.retryableTokenGraceMs;if(W?.forceRefresh!==!0&&!O8($,Z))return $;try{return await A9($.refresh,$)}catch(j){if(j instanceof F9&&j.isLikelyInvalidGrant())return D$(W?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>Q)return $;return null}}D0();var yV={};w(yV,{refreshOcaToken:()=>f9,loginOcaOAuth:()=>B4,getValidOcaCredentials:()=>H4,OCI_HEADER_OPC_REQUEST_ID:()=>FL,DEFAULT_INTERNAL_OCA_BASE_URL:()=>U9,DEFAULT_INTERNAL_IDCS_URL:()=>zV,DEFAULT_INTERNAL_IDCS_SCOPES:()=>qV,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>TV,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>D9,DEFAULT_EXTERNAL_IDCS_URL:()=>RV,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>NV,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>MV});import{decodeJwtPayload as Y4}from"@cline/shared";import{nanoid as OV}from"nanoid";class d7{ttlMs;maxEntries;entries=new Map;constructor($,W){this.ttlMs=$;this.maxEntries=W}get($,W=Date.now()){this.pruneExpired(W);let Z=this.entries.get($);if(!Z)return;return this.entries.delete($),this.entries.set($,Z),Z.value}set($,W,Z=Date.now(),Q=this.ttlMs){this.pruneExpired(Z),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:W,expiresAt:Z+Q})}pruneExpired($){for(let[W,Z]of this.entries)if(Z.expiresAt<=$)this.entries.delete(W)}}var TV="a8331954c0cf48ba99b5dd223a14c6ea",zV="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",qV="openid offline_access",U9="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",MV="c1aba3deed5740659981a752714eba33",RV="https://login-ext.identity.oraclecloud.com",NV="openid offline_access",D9="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",FL="opc-request-id",AL="/auth/oca",UL=Array.from({length:11},($,W)=>48801+W),DL=300000,_L=30000,EV=30000,fL=600000;class _9 extends Error{status;errorCode;constructor($,W){super($);this.name="OcaOAuthTokenError",this.status=W?.status,this.errorCode=W?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var f$={internal:{clientId:TV,idcsUrl:zV,scopes:qV,baseUrl:U9},external:{clientId:MV,idcsUrl:RV,scopes:NV,baseUrl:D9}},V4=new Map,LL=86400000,OL=300000,TL=32,l7=new d7(LL,TL);function wV($){if(typeof $==="function")return $();return $??"internal"}function CV($){return{internal:{clientId:$?.internal?.clientId??f$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??f$.internal.idcsUrl,scopes:$?.internal?.scopes??f$.internal.scopes,baseUrl:$?.internal?.baseUrl??f$.internal.baseUrl},external:{clientId:$?.external?.clientId??f$.external.clientId,idcsUrl:$?.external?.idcsUrl??f$.external.idcsUrl,scopes:$?.external?.scopes??f$.external.scopes,baseUrl:$?.external?.baseUrl??f$.external.baseUrl}}}function zL($=Date.now()){let W=$-fL;for(let[Z,Q]of V4.entries())if(Q.createdAt<W)V4.delete(Z)}function qL($,W,Z){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=Y4(W)?.exp;if(typeof J==="number"&&J>0)return J*1000;let X=Y4(Z)?.exp;if(typeof X==="number"&&X>0)return X*1000;return Date.now()+3600000}function PV($,W,Z){let Q=$.access_token;if(!Q)throw Error("Token response did not include an access token");let J=$.refresh_token??Z?.refresh;if(!J)throw Error("Token response did not include a refresh token");let j=Y4($.id_token),X=Y4(Q),Y=j?.sub??X?.sub,V=j?.email??X?.email;return{access:Q,refresh:J,expires:qL($,Q,$.id_token),accountId:Y??Z?.accountId,email:V??Z?.email,metadata:{...Z?.metadata??{},provider:"oca",mode:W,subject:Y,idToken:$.id_token}}}async function SV($,W){let Z=H9($),Q=l7.get(Z);if(Q)return Q;let J=`${Z}/.well-known/openid-configuration`,j=await fetch(J,{method:"GET",signal:AbortSignal.timeout(W)});if(!j.ok){let V=`${Z}/oauth2/v1/token`;return l7.set(Z,V,Date.now(),OL),V}let Y=(await j.json()).token_endpoint||`${Z}/oauth2/v1/token`;return l7.set(Z,Y),Y}function bV($){return{code:$.error,message:$.error_description}}async function ML($){let W=V4.get($.state);if(!W)throw Error("No PKCE verifier found for this state");V4.delete($.state);let Z=$.mode==="external"?$.config.external:$.config.internal,Q=await SV(Z.idcsUrl,$.requestTimeoutMs),J=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:W.redirectUri,client_id:Z.clientId,code_verifier:W.verifier}),j=await fetch(Q,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:J,signal:AbortSignal.timeout($.requestTimeoutMs)}),X=await j.json();if(!j.ok){let V=bV(X);throw new _9(`Token exchange failed: ${j.status}${V.message?` - ${V.message}`:""}`,{status:j.status,errorCode:V.code})}let Y=Y4(X.id_token);if(!X.id_token||!Y)throw Error("No ID token received from OCA");if(Y.nonce!==W.nonce)throw Error("OIDC nonce verification failed");return PV(X,$.mode)}function RL($){let W=$.mode==="external"?$.config.external:$.config.internal,Z=new URL(`${H9(W.idcsUrl)}/oauth2/v1/authorize`);return Z.searchParams.set("client_id",W.clientId),Z.searchParams.set("response_type","code"),Z.searchParams.set("scope",W.scopes),Z.searchParams.set("code_challenge",$.challenge),Z.searchParams.set("code_challenge_method","S256"),Z.searchParams.set("redirect_uri",$.callbackUrl),Z.searchParams.set("state",$.state),Z.searchParams.set("nonce",$.nonce),Z.toString()}async function B4($){m1($.telemetry,"oca");let W=CV($.config),Z=wV($.mode),Q=$.callbackPorts?.length?$.callbackPorts:UL,J=$.callbackPath??AL,j=$.requestTimeoutMs??EV,X=await G1({ports:Q,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),Y=X.callbackUrl;if(!Y)throw Error("Unable to bind local OAuth callback server");let V=OV(16),B=OV(16),{verifier:H,challenge:G}=await B9();zL(),V4.set(V,{verifier:H,nonce:B,mode:Z,redirectUri:Y,createdAt:Date.now()});let K=RL({callbackUrl:Y,mode:Z,state:V,nonce:B,challenge:G,config:W});$.callbacks.onAuth({url:K,instructions:"Continue the authentication process in your browser."});try{let F=await T8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),A=F.code,D=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(!D||D!==V)throw Error("State mismatch");let U=await ML({code:A,state:D,mode:Z,config:W,requestTimeoutMs:j});return v1($.telemetry,"oca"),H1($.telemetry,{id:U.accountId,email:U.email,provider:"oca"}),U}catch(F){throw c1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{X.close()}}async function f9($,W={}){let Z=CV(W.config),Q=W.requestTimeoutMs??EV,J=$.metadata?.mode,j=J==="internal"||J==="external"?J:wV(W.mode),X=j==="external"?Z.external:Z.internal,Y=await SV(X.idcsUrl,Q),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:X.clientId}),B=await fetch(Y,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(Q)}),H=await B.json();if(!B.ok){let G=bV(H);throw new _9(`Token refresh failed: ${B.status}${G.message?` - ${G.message}`:""}`,{status:B.status,errorCode:G.code})}return PV(H,j,$)}async function H4($,W,Z){if(!$)return null;let Q=W?.refreshBufferMs??Z?.refreshBufferMs??DL,J=W?.retryableTokenGraceMs??Z?.retryableTokenGraceMs??_L;if(W?.forceRefresh!==!0&&!O8($,Q))return $;try{return await f9($,Z)}catch(X){if(X instanceof _9&&X.isLikelyInvalidGrant())return D$(Z?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}var L9="workos:";function EL($){let W=$.trim();return W.toLowerCase().startsWith(L9)?W:`${L9}${W}`}function wL($){let W=$.trim();return W.toLowerCase().startsWith(L9)?W.slice(L9.length):W}function CL($){let Z=NL($)?.exp;if(typeof Z==="number"&&Z>0)return Z*1000;return null}function PL($,W){let Z=$.auth?.expiresAt;if(typeof Z==="number"&&Number.isFinite(Z)&&Z>0)return Z;let Q=CL(W);if(Q)return Q;return Date.now()-1}function SL($,W){let Z=$.auth?.accessToken?.trim(),Q=$.auth?.refreshToken?.trim();if(!Z||!Q)return null;let J=W?.normalizeAccessToken?.(Z)??Z;if(!J)return null;return{access:J,refresh:Q,expires:PL($,J),accountId:$.auth?.accountId,metadata:$.auth?.metadata}}function bL($){let W=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Z={...$.settings?.auth??{},accessToken:W,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},Q=Object.fromEntries(Object.entries($.credentials.metadata??{}).filter(([,X])=>X!==void 0)),J={...$.settings?.auth?.metadata??{},...Q};if(Object.keys(J).length>0)Z.metadata=J;let j={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Z};if($.save!==!1)$.manager.saveProviderSettings(j,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return j}function p7($){let W=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:W,getApiKey(Z){let Q=Z?.auth?.accessToken?.trim();if(Q)return $.formatAccessToken?.(Q)??Q;return Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Z){return bL({...Z,storageProviderId:W,formatAccessToken:$.formatAccessToken})},isConfigured(Z){return!!Z?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function kV($){return p7({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:EL,normalizeStoredAccessToken:wL,login:({settings:W,callbacks:Z,telemetry:Q})=>Q4({apiBaseUrl:W?.baseUrl?.trim()||hV().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Z,telemetry:Q}),refresh:({settings:W,credentials:Z,forceRefresh:Q,telemetry:J})=>J4(Z,{apiBaseUrl:W.baseUrl?.trim()||hV().apiBaseUrl,telemetry:J},{forceRefresh:Q})})}var yL=[kV({providerId:"cline"}),kV({providerId:"cline-pass",storageProviderId:"cline"}),p7({providerId:"oca",login:({settings:$,callbacks:W,telemetry:Z})=>B4({mode:$?.oca?.mode,callbacks:W,telemetry:Z}),refresh:({settings:$,credentials:W,forceRefresh:Z,telemetry:Q})=>H4(W,{forceRefresh:Z,telemetry:Q},{mode:$.oca?.mode,telemetry:Q})}),p7({providerId:"openai-codex",login:({callbacks:$,telemetry:W})=>j4({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:W}),refresh:({credentials:$,forceRefresh:W,telemetry:Z})=>X4($,{forceRefresh:W,telemetry:Z})})],hL=new Map(yL.map(($)=>[$.providerId,$]));function H0($){return hL.get($.trim().toLowerCase())}function J2($){return H0($)!==void 0}function r7($){return H0($)?.storageProviderId}function i7($,W){let Z=H0(W),Q=Z?.storageProviderId??W,J=$.getProviderSettings(Q);return Z?.getApiKey(J)??q8(W,J)}async function G4($,W,Z){let Q=H0(W);if(!Q)throw Error(`Provider "${W}" does not support OAuth login`);let J=$.getProviderSettings(Q.storageProviderId),j=await Q.login({settings:J,callbacks:Z.callbacks,telemetry:Z.telemetry});return Q.saveCredentials({manager:$,settings:J,credentials:j})}function K4($,W){let Z=H0($);if(!Z)return null;return SL(W,{normalizeAccessToken:Z.normalizeStoredAccessToken})}function j2($){let W=H0($.providerId);if(!W)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return W.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function q8($,W){let Z=H0($);if(Z)return Z.getApiKey(W);return W?.auth?.accessToken?.trim()||W?.apiKey?.trim()||W?.auth?.apiKey?.trim()||void 0}function n7($,W){let Z=H0($);if(!Z)return W.access;return Z.getApiKey({provider:Z.storageProviderId,auth:{accessToken:W.access}})??W.access}D0();var TB={};w(TB,{createContextCompactionPrepareTurn:()=>T4,createCompactionStateAwarePrepareTurn:()=>z4});import{estimateRequestInputTokens as fO}from"@cline/shared";var uV={};w(uV,{projectSessionCompactionState:()=>X2,parseSessionCompactionState:()=>K1,createSessionCompactionState:()=>M8,SessionCompactionStateSchema:()=>F4});import{createHash as kL}from"node:crypto";import{formatDisplayUserInput as xV}from"@cline/shared";import{z as z1}from"zod";function IL($){if(!$||typeof $!=="object"||Array.isArray($))return!1;let W=$;if(W.role!=="user"&&W.role!=="assistant")return!1;return typeof W.content==="string"||Array.isArray(W.content)}var xL=z1.custom(IL),F4=z1.object({version:z1.literal(1),updated_at:z1.string().datetime(),conversation_id:z1.string().min(1).optional(),source_message_count:z1.number().int().nonnegative(),source_prefix_hash:z1.string().min(1).optional(),source_last_message_key:z1.string().min(1).optional(),messages:z1.array(xL),system_prompt:z1.string().optional()});function a7($){return JSON.parse(JSON.stringify($))}function gV($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:xV($.content)};return{...$,content:$.content.map((W)=>W.type==="text"?{...W,text:xV(W.text)}:W)}}function mV($){if($.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function gL($){let W=gV($);return mV(W.role),[["role",W.role],["content",W.content],["id",W.id??null],["agent",W.agent??null],["sessionId",W.sessionId??null],["metadata",W.metadata??null],["modelInfo",W.modelInfo??null],["metrics",W.metrics??null],["ts",W.ts??null]]}function vV($){if(!$)return"";let W=gV($);if(typeof W.id==="string"&&W.id.trim())return`id:${W.id.trim()}`;if(mV(W.role),typeof W.ts==="number"&&Number.isFinite(W.ts))return`ts:${W.role}:${W.ts}`;return`content:${W.role}:${JSON.stringify(W.content)}`}function cV($,W=$.length){let Z=kL("sha256");Z.update(`cline-session-compaction-source-v1
|
|
45
|
+
</html>`;function GV($){let W="";for(let Z=0;Z<$.length;Z+=1)W+=String.fromCharCode($[Z]??0);return btoa(W).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function Jf($){let Z=new TextEncoder().encode($),Q=await crypto.subtle.digest("SHA-256",Z);return new Uint8Array(Q)}function jf($=32){let W=new Uint8Array($);return crypto.getRandomValues(W),GV(W)}async function HW(){let $=jf(),W=GV(await Jf($));return{verifier:$,challenge:W}}function GW($){return $.endsWith("/")?$.slice(0,-1):$}function X2($,W){return new URL(W,`${GW($)}/`).toString()}function O8($,W={}){let Z=$.trim();if(!Z)return{};try{let Q=new URL(Z);return{code:Q.searchParams.get("code")??void 0,state:Q.searchParams.get("state")??void 0,provider:W.includeProvider?Q.searchParams.get("provider")??void 0:void 0}}catch{}if(W.allowHashCodeState&&Z.includes("#")){let[Q,J]=Z.split("#",2);return{code:Q||void 0,state:J||void 0}}if(Z.includes("code=")){let Q=new URLSearchParams(Z);return{code:Q.get("code")??void 0,state:Q.get("state")??void 0,provider:W.includeProvider?Q.get("provider")??void 0:void 0}}return{code:Z}}function T8($){try{let W=JSON.parse($),Z=W.error,Q=typeof Z==="string"?Z:Z&&typeof Z==="object"&&typeof Z.type==="string"?Z.type:void 0,J=typeof W.error_description==="string"?W.error_description:typeof W.message==="string"?W.message:Z&&typeof Z==="object"&&typeof Z.message==="string"?Z.message:void 0;return{code:Q,message:J}}catch{return{}}}function z8($,W){return Date.now()>=$.expires-W}async function q8($){if(!$.onManualCodeInput){let j=await $.waitForCallback();return{code:j?.code,state:j?.state,provider:j?.provider,error:j?.error}}let W,Z,Q=$.onManualCodeInput().then((j)=>{W=j,$.cancelWait()}).catch((j)=>{Z=j instanceof Error?j:Error(String(j)),$.cancelWait()}),J=await $.waitForCallback();if(Z)throw Z;if(J?.code||J?.error)return{code:J.code,state:J.state,provider:J.provider,error:J.error};if(W)return O8(W,$.parseOptions);if(await Q,Z)throw Z;if(W)return O8(W,$.parseOptions);return{}}var KW={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},UV={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},g7="https://api.workos.com",Xf="/auth",KV=Array.from({length:11},($,W)=>48801+W),Yf=300000,Vf=30000,M8=30000,Bf=300,Hf=5;class O1 extends Error{status;errorCode;constructor($,W){super($);this.name="ClineOAuthTokenError",this.status=W?.status,this.errorCode=W?.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 Gf($){let W=Date.parse($);if(Number.isNaN(W))throw Error(`Invalid expiresAt value: ${$}`);return W}function m7($,W,Z={}){let Q=$.userInfo.clineUserId??Z.accountId,J=$.refreshToken??Z.refresh;if(!J)throw Error("Token response did not include a refresh token");let j={...Z.metadata??{},provider:W,tokenType:$.tokenType,userInfo:$.userInfo};return delete j.startedAt,{access:$.accessToken,refresh:J,expires:Gf($.expiresAt),accountId:Q??void 0,email:$.userInfo.email||Z.email,metadata:j}}async function v7($){if(!$)return{};return typeof $==="function"?await $():$}function FV($,W){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return W;return Math.floor($)}async function AV($){await new Promise((W)=>setTimeout(W,$))}function c7($,W){if(!$.success||!$.data?.accessToken)throw Error(W);return $.data}async function DV($,W){let Z=await fetch(X2(g7,UV.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(W?.requestTimeoutMs??M8)}),Q=await Z.json().catch(()=>({}));if(!Z.ok)throw new O1(`Device authorization failed: ${Z.status}${Q.error_description?` - ${Q.error_description}`:""}`,{status:Z.status,errorCode:Q.error});if(!Q.device_code||!Q.user_code||!Q.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:Q.device_code,userCode:Q.user_code,verificationUri:Q.verification_uri,verificationUriComplete:Q.verification_uri_complete,expiresInSeconds:FV(Q.expires_in,Bf),pollIntervalSeconds:FV(Q.interval,Hf)}}async function _V($){let W=Date.now()+$.expiresInSeconds*1000,Z=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=W){let Q=await fetch(X2($.workosApiBaseUrl,UV.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 Q.json().catch(()=>({}));if(Q.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 AV(Z*1000);break}case"slow_down":{Z+=1,await AV(Z*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new O1(J.error_description||"WorkOS authorization failed",{status:Q.status,errorCode:J.error});default:throw new O1(`WorkOS token polling failed: ${Q.status}${J.error_description?` - ${J.error_description}`:""}`,{status:Q.status,errorCode:J.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function LV($,W,Z){let Q={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(X2(W.apiBaseUrl,KW.register),{method:"POST",headers:{"Content-Type":"application/json",...await v7(W.headers)},body:JSON.stringify(Q),signal:AbortSignal.timeout(W.requestTimeoutMs??M8)});if(!J.ok){let X=await J.text().catch(()=>""),Y=T8(X);throw new O1(`Token registration failed: ${J.status}${Y.message?` - ${Y.message}`:""}`,{status:J.status,errorCode:Y.code})}let j=await J.json();return m7(c7(j,"Invalid token exchange response"),Z??W.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function Kf($,W,Z,Q){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:W,provider:Q??Z.provider},j=await fetch(X2(Z.apiBaseUrl,KW.token),{method:"POST",headers:{"Content-Type":"application/json",...await v7(Z.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Z.requestTimeoutMs??M8)});if(!j.ok){let Y=await j.text().catch(()=>""),V=T8(Y);throw new O1(`Token exchange failed: ${j.status}${V.message?` - ${V.message}`:""}`,{status:j.status,errorCode:V.code})}let X=await j.json();return m7(c7(X,"Invalid token exchange response"),Q??Z.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function j4($){g1($.telemetry,$.provider??"cline");let W=$.useWorkOSDeviceAuth??!0,Z=$.callbackPorts?.length?$.callbackPorts:KV,Q=$.callbackPath??Xf,J=W?null:await G1({ports:Z,callbackPath:Q,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=J?.callbackUrl||`http://127.0.0.1:${Z[0]??KV[0]}${Q}`;try{let X;if(W){let Y=x7().workOsClientId,V=await DV(Y,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let B=await _V({clientId:Y,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??M8,workosApiBaseUrl:g7,onProgress:$.callbacks.onProgress});X=await LV(B,$,$.provider)}else{let Y=new URL(X2($.apiBaseUrl,KW.authorize));Y.searchParams.set("client_type","extension"),Y.searchParams.set("callback_url",j),Y.searchParams.set("redirect_uri",j),$.callbacks.onAuth({url:Y.toString(),instructions:"Continue the authentication process in your browser."});let V,B=$.provider,H=await q8({waitForCallback:J?.waitForCallback??(async()=>null),cancelWait:J?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(H.error)throw Error(`OAuth error: ${H.error}`);if(V=H.code,B=H.provider??B,!V){let G=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=O8(G,{includeProvider:!0});V=K.code,B=K.provider??B}if(!V)throw Error("Missing authorization code");X=await Kf(V,j,$,B)}return m1($.telemetry,$.provider??"cline"),H1($.telemetry,{id:X.accountId,email:X.email,provider:$.provider??"cline"}),X}catch(X){throw v1($.telemetry,$.provider??"cline",X instanceof Error?X.message:String(X)),X}finally{J?.close()}}async function u7($){return await DV(x7().workOsClientId,$)}async function d7($){let W=$.provider??"cline";g1($.telemetry,W);try{let Z=await _V({clientId:x7().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??M8,workosApiBaseUrl:g7}),Q=await LV(Z,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return m1($.telemetry,W),H1($.telemetry,{id:Q.accountId,email:Q.email,provider:W}),Q}catch(Z){throw v1($.telemetry,W,Z instanceof Error?Z.message:String(Z)),Z}}async function FW($,W){let Z=X2(W.apiBaseUrl,KW.refresh);s(`cline.refresh.request url=${Z} refreshTokenHash=${R0($.refresh)}`);let Q=await fetch(Z,{method:"POST",headers:{"Content-Type":"application/json",...await v7(W.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(W.requestTimeoutMs??M8)});if(!Q.ok){let Y=await Q.text().catch(()=>""),V=T8(Y);throw s(`cline.refresh.error status=${Q.status} errorCode=${V.code??"none"} message=${V.message??"none"}`),new O1(`Token refresh failed: ${Q.status}${V.message?` - ${V.message}`:""}`,{status:Q.status,errorCode:V.code})}let J=await Q.json(),j=$.metadata?.provider??W.provider,X=m7(c7(J,"Invalid token refresh response"),j,$);return s(`cline.refresh.success newAccessTokenHash=${R0(X.access)} newRefreshTokenHash=${R0(X.refresh)} expires=${X.expires}`),X}async function X4($,W,Z){if(!$)return s("cline.getCredentials outcome=no_current_credentials"),null;let Q=Z?.refreshBufferMs??Yf,J=Z?.retryableTokenGraceMs??Vf,j=Z?.forceRefresh===!0;if(!j&&!z8($,Q))return s(`cline.getCredentials outcome=still_valid forceRefresh=${j}`),$;s(`cline.getCredentials outcome=needs_refresh forceRefresh=${j} accessTokenHash=${R0($.access)}`);try{return await FW($,W)}catch(X){let Y={status:X instanceof O1?X.status:void 0,errorCode:X instanceof O1?X.errorCode:void 0,errorName:X instanceof Error?X.name:void 0};if(X instanceof O1&&X.isLikelyInvalidGrant())return s(`cline.getCredentials outcome=invalid_grant status=${X.status} errorCode=${X.errorCode??"none"}`),f$(W.telemetry,W.provider??"cline","invalid_grant",{status:X.status,errorCode:X.errorCode}),null;if($.expires-Date.now()>J)return s(`cline.getCredentials outcome=transient_failure_kept_current error=${X instanceof Error?X.message:String(X)}`),I7(W.telemetry,W.provider??"cline",{...Y,tokenExpired:!1}),$;throw s(`cline.getCredentials outcome=transient_failure_rethrown error=${X instanceof Error?X.message:String(X)}`),I7(W.telemetry,W.provider??"cline",{...Y,tokenExpired:!0}),X}}U0();var TV={};w(TV,{refreshOpenAICodexToken:()=>UW,loginOpenAICodex:()=>Y4,getValidOpenAICodexCredentials:()=>V4,OPENAI_CODEX_OAUTH_CONFIG:()=>V0});import{decodeJwtPayload as l7}from"@cline/shared";import{nanoid as Ff}from"nanoid";var V0={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 AW extends Error{status;errorCode;constructor($,W){super($);this.name="OpenAICodexOAuthTokenError",this.status=W?.status,this.errorCode=W?.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 Af($,W,Z=V0.redirectUri){let Q=await fetch(V0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:V0.clientId,code:$,code_verifier:W,redirect_uri:Z}),signal:AbortSignal.timeout(V0.httpTimeoutMs)});if(!Q.ok)return{type:"failed"};let J=await Q.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 Uf($){try{let W=await fetch(V0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:V0.clientId}),signal:AbortSignal.timeout(V0.httpTimeoutMs)});if(!W.ok){let Q=await W.text().catch(()=>""),J=T8(Q);throw new AW(`Token refresh failed: ${W.status}${J.message?` - ${J.message}`:""}`,{status:W.status,errorCode:J.code})}let Z=await W.json();if(!Z.access_token||!Z.refresh_token||typeof Z.expires_in!=="number")return{type:"failed"};return{type:"success",access:Z.access_token,refresh:Z.refresh_token,expires:Date.now()+Z.expires_in*1000,email:Z.email,idToken:Z.id_token}}catch(W){if(W instanceof AW)throw W;return{type:"failed"}}}async function Df($="pi"){let{verifier:W,challenge:Z}=await HW(),Q=Ff(32),J=new URL(V0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",V0.clientId),J.searchParams.set("redirect_uri",V0.redirectUri),J.searchParams.set("scope",V0.scopes),J.searchParams.set("code_challenge",Z),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("state",Q),J.searchParams.set("id_token_add_organizations","true"),J.searchParams.set("codex_cli_simplified_flow","true"),J.searchParams.set("originator",$),{verifier:W,state:Q,url:J.toString()}}function _f(){try{let $=new URL(V0.redirectUri),W=$.port.length>0?Number.parseInt($.port,10):V0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(W)?W:V0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:V0.callbackPort,callbackPath:"/auth/callback",redirectUri:V0.redirectUri}}}function Lf($,W){let Z=W?l7(W):l7($),Q=Z?Z:l7($),j=Q?.[V0.jwtClaimPath]?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;let X=Q?.organizations;if(Array.isArray(X)&&X.length>0){let V=X[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let Y=Q?.chatgpt_account_id;if(typeof Y==="string"&&Y.length>0)return Y;return null}function OV($,W){let Z=Lf($.access,$.idToken)??W?.accountId;if(!Z)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||W?.refresh||"",expires:$.expires,accountId:Z,email:$.email??W?.email,metadata:{...W?.metadata??{},provider:"openai-codex"}}}async function Y4($){g1($.telemetry,"openai-codex");let W=_f(),{verifier:Z,state:Q,url:J}=await Df($.originator),j=await G1({host:W.host,ports:[W.port],callbackPath:W.callbackPath,expectedState:Q});$.onAuth({url:J,instructions:"Continue the authentication process in your browser."});let X;try{let Y=await q8({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(Y.state&&Y.state!==Q)throw Error("State mismatch");if(X=Y.code,!X){let H=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=O8(H,{allowHashCodeState:!0});if(G.state&&G.state!==Q)throw Error("State mismatch");X=G.code}if(!X)throw Error("Missing authorization code");let V=await Af(X,Z,W.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let B=OV(V);return m1($.telemetry,"openai-codex"),H1($.telemetry,{id:B.accountId,email:B.email,provider:"openai-codex"}),B}catch(Y){throw v1($.telemetry,"openai-codex",Y instanceof Error?Y.message:String(Y)),Y}finally{j.close()}}async function UW($,W){let Z=await Uf($);if(Z.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let Q=OV(Z,W);if(!Q.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return Q}async function V4($,W){if(!$)return null;let Z=W?.refreshBufferMs??V0.refreshBufferMs,Q=W?.retryableTokenGraceMs??V0.retryableTokenGraceMs;if(W?.forceRefresh!==!0&&!z8($,Z))return $;try{return await UW($.refresh,$)}catch(j){if(j instanceof AW&&j.isLikelyInvalidGrant())return f$(W?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>Q)return $;return null}}U0();var kV={};w(kV,{refreshOcaToken:()=>fW,loginOcaOAuth:()=>G4,getValidOcaCredentials:()=>K4,OCI_HEADER_OPC_REQUEST_ID:()=>ff,DEFAULT_INTERNAL_OCA_BASE_URL:()=>DW,DEFAULT_INTERNAL_IDCS_URL:()=>MV,DEFAULT_INTERNAL_IDCS_SCOPES:()=>RV,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>qV,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>_W,DEFAULT_EXTERNAL_IDCS_URL:()=>EV,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>wV,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>NV});import{decodeJwtPayload as B4}from"@cline/shared";import{nanoid as zV}from"nanoid";class p7{ttlMs;maxEntries;entries=new Map;constructor($,W){this.ttlMs=$;this.maxEntries=W}get($,W=Date.now()){this.pruneExpired(W);let Z=this.entries.get($);if(!Z)return;return this.entries.delete($),this.entries.set($,Z),Z.value}set($,W,Z=Date.now(),Q=this.ttlMs){this.pruneExpired(Z),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:W,expiresAt:Z+Q})}pruneExpired($){for(let[W,Z]of this.entries)if(Z.expiresAt<=$)this.entries.delete(W)}}var qV="a8331954c0cf48ba99b5dd223a14c6ea",MV="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",RV="openid offline_access",DW="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",NV="c1aba3deed5740659981a752714eba33",EV="https://login-ext.identity.oraclecloud.com",wV="openid offline_access",_W="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",ff="opc-request-id",Of="/auth/oca",Tf=Array.from({length:11},($,W)=>48801+W),zf=300000,qf=30000,CV=30000,Mf=600000;class LW extends Error{status;errorCode;constructor($,W){super($);this.name="OcaOAuthTokenError",this.status=W?.status,this.errorCode=W?.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 T$={internal:{clientId:qV,idcsUrl:MV,scopes:RV,baseUrl:DW},external:{clientId:NV,idcsUrl:EV,scopes:wV,baseUrl:_W}},H4=new Map,Rf=86400000,Nf=300000,Ef=32,r7=new p7(Rf,Ef);function PV($){if(typeof $==="function")return $();return $??"internal"}function SV($){return{internal:{clientId:$?.internal?.clientId??T$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??T$.internal.idcsUrl,scopes:$?.internal?.scopes??T$.internal.scopes,baseUrl:$?.internal?.baseUrl??T$.internal.baseUrl},external:{clientId:$?.external?.clientId??T$.external.clientId,idcsUrl:$?.external?.idcsUrl??T$.external.idcsUrl,scopes:$?.external?.scopes??T$.external.scopes,baseUrl:$?.external?.baseUrl??T$.external.baseUrl}}}function wf($=Date.now()){let W=$-Mf;for(let[Z,Q]of H4.entries())if(Q.createdAt<W)H4.delete(Z)}function Cf($,W,Z){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=B4(W)?.exp;if(typeof J==="number"&&J>0)return J*1000;let X=B4(Z)?.exp;if(typeof X==="number"&&X>0)return X*1000;return Date.now()+3600000}function bV($,W,Z){let Q=$.access_token;if(!Q)throw Error("Token response did not include an access token");let J=$.refresh_token??Z?.refresh;if(!J)throw Error("Token response did not include a refresh token");let j=B4($.id_token),X=B4(Q),Y=j?.sub??X?.sub,V=j?.email??X?.email;return{access:Q,refresh:J,expires:Cf($,Q,$.id_token),accountId:Y??Z?.accountId,email:V??Z?.email,metadata:{...Z?.metadata??{},provider:"oca",mode:W,subject:Y,idToken:$.id_token}}}async function yV($,W){let Z=GW($),Q=r7.get(Z);if(Q)return Q;let J=`${Z}/.well-known/openid-configuration`,j=await fetch(J,{method:"GET",signal:AbortSignal.timeout(W)});if(!j.ok){let V=`${Z}/oauth2/v1/token`;return r7.set(Z,V,Date.now(),Nf),V}let Y=(await j.json()).token_endpoint||`${Z}/oauth2/v1/token`;return r7.set(Z,Y),Y}function hV($){return{code:$.error,message:$.error_description}}async function Pf($){let W=H4.get($.state);if(!W)throw Error("No PKCE verifier found for this state");H4.delete($.state);let Z=$.mode==="external"?$.config.external:$.config.internal,Q=await yV(Z.idcsUrl,$.requestTimeoutMs),J=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:W.redirectUri,client_id:Z.clientId,code_verifier:W.verifier}),j=await fetch(Q,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:J,signal:AbortSignal.timeout($.requestTimeoutMs)}),X=await j.json();if(!j.ok){let V=hV(X);throw new LW(`Token exchange failed: ${j.status}${V.message?` - ${V.message}`:""}`,{status:j.status,errorCode:V.code})}let Y=B4(X.id_token);if(!X.id_token||!Y)throw Error("No ID token received from OCA");if(Y.nonce!==W.nonce)throw Error("OIDC nonce verification failed");return bV(X,$.mode)}function Sf($){let W=$.mode==="external"?$.config.external:$.config.internal,Z=new URL(`${GW(W.idcsUrl)}/oauth2/v1/authorize`);return Z.searchParams.set("client_id",W.clientId),Z.searchParams.set("response_type","code"),Z.searchParams.set("scope",W.scopes),Z.searchParams.set("code_challenge",$.challenge),Z.searchParams.set("code_challenge_method","S256"),Z.searchParams.set("redirect_uri",$.callbackUrl),Z.searchParams.set("state",$.state),Z.searchParams.set("nonce",$.nonce),Z.toString()}async function G4($){g1($.telemetry,"oca");let W=SV($.config),Z=PV($.mode),Q=$.callbackPorts?.length?$.callbackPorts:Tf,J=$.callbackPath??Of,j=$.requestTimeoutMs??CV,X=await G1({ports:Q,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),Y=X.callbackUrl;if(!Y)throw Error("Unable to bind local OAuth callback server");let V=zV(16),B=zV(16),{verifier:H,challenge:G}=await HW();wf(),H4.set(V,{verifier:H,nonce:B,mode:Z,redirectUri:Y,createdAt:Date.now()});let K=Sf({callbackUrl:Y,mode:Z,state:V,nonce:B,challenge:G,config:W});$.callbacks.onAuth({url:K,instructions:"Continue the authentication process in your browser."});try{let F=await q8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),A=F.code,D=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(!D||D!==V)throw Error("State mismatch");let U=await Pf({code:A,state:D,mode:Z,config:W,requestTimeoutMs:j});return m1($.telemetry,"oca"),H1($.telemetry,{id:U.accountId,email:U.email,provider:"oca"}),U}catch(F){throw v1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{X.close()}}async function fW($,W={}){let Z=SV(W.config),Q=W.requestTimeoutMs??CV,J=$.metadata?.mode,j=J==="internal"||J==="external"?J:PV(W.mode),X=j==="external"?Z.external:Z.internal,Y=await yV(X.idcsUrl,Q),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:X.clientId}),B=await fetch(Y,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(Q)}),H=await B.json();if(!B.ok){let G=hV(H);throw new LW(`Token refresh failed: ${B.status}${G.message?` - ${G.message}`:""}`,{status:B.status,errorCode:G.code})}return bV(H,j,$)}async function K4($,W,Z){if(!$)return null;let Q=W?.refreshBufferMs??Z?.refreshBufferMs??zf,J=W?.retryableTokenGraceMs??Z?.retryableTokenGraceMs??qf;if(W?.forceRefresh!==!0&&!z8($,Q))return $;try{return await fW($,Z)}catch(X){if(X instanceof LW&&X.isLikelyInvalidGrant())return f$(Z?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}var OW="workos:";function yf($){let W=$.trim();return W.toLowerCase().startsWith(OW)?W:`${OW}${W}`}function hf($){let W=$.trim();return W.toLowerCase().startsWith(OW)?W.slice(OW.length):W}function kf($){let Z=bf($)?.exp;if(typeof Z==="number"&&Z>0)return Z*1000;return null}function If($,W){let Z=$.auth?.expiresAt;if(typeof Z==="number"&&Number.isFinite(Z)&&Z>0)return Z;let Q=kf(W);if(Q)return Q;return Date.now()-1}function xf($,W){let Z=$.auth?.accessToken?.trim(),Q=$.auth?.refreshToken?.trim();if(!Z||!Q)return null;let J=W?.normalizeAccessToken?.(Z)??Z;if(!J)return null;return{access:J,refresh:Q,expires:If($,J),accountId:$.auth?.accountId,metadata:$.auth?.metadata}}function gf($){let W=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Z={...$.settings?.auth??{},accessToken:W,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},Q=Object.fromEntries(Object.entries($.credentials.metadata??{}).filter(([,X])=>X!==void 0)),J={...$.settings?.auth?.metadata??{},...Q};if(Object.keys(J).length>0)Z.metadata=J;let j={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Z};if($.save!==!1)$.manager.saveProviderSettings(j,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return j}function i7($){let W=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:W,getApiKey(Z){let Q=Z?.auth?.accessToken?.trim();if(Q)return $.formatAccessToken?.(Q)??Q;return Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Z){return gf({...Z,storageProviderId:W,formatAccessToken:$.formatAccessToken})},isConfigured(Z){return!!Z?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function xV($){return i7({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:yf,normalizeStoredAccessToken:hf,login:({settings:W,callbacks:Z,telemetry:Q})=>j4({apiBaseUrl:W?.baseUrl?.trim()||IV().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Z,telemetry:Q}),refresh:({settings:W,credentials:Z,forceRefresh:Q,telemetry:J})=>X4(Z,{apiBaseUrl:W.baseUrl?.trim()||IV().apiBaseUrl,telemetry:J},{forceRefresh:Q})})}var mf=[xV({providerId:"cline"}),xV({providerId:"cline-pass",storageProviderId:"cline"}),i7({providerId:"oca",login:({settings:$,callbacks:W,telemetry:Z})=>G4({mode:$?.oca?.mode,callbacks:W,telemetry:Z}),refresh:({settings:$,credentials:W,forceRefresh:Z,telemetry:Q})=>K4(W,{forceRefresh:Z,telemetry:Q},{mode:$.oca?.mode,telemetry:Q})}),i7({providerId:"openai-codex",login:({callbacks:$,telemetry:W})=>Y4({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:W}),refresh:({credentials:$,forceRefresh:W,telemetry:Z})=>V4($,{forceRefresh:W,telemetry:Z})})],vf=new Map(mf.map(($)=>[$.providerId,$]));function H0($){return vf.get($.trim().toLowerCase())}function z$($){return H0($)!==void 0}function n7($){return H0($)?.storageProviderId}function a7($,W){let Z=H0(W),Q=Z?.storageProviderId??W,J=$.getProviderSettings(Q);return Z?.getApiKey(J)??R8(W,J)}async function F4($,W,Z){let Q=H0(W);if(!Q)throw Error(`Provider "${W}" does not support OAuth login`);let J=$.getProviderSettings(Q.storageProviderId),j=await Q.login({settings:J,callbacks:Z.callbacks,telemetry:Z.telemetry});return Q.saveCredentials({manager:$,settings:J,credentials:j})}function A4($,W){let Z=H0($);if(!Z)return null;return xf(W,{normalizeAccessToken:Z.normalizeStoredAccessToken})}function Y2($){let W=H0($.providerId);if(!W)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return W.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function R8($,W){let Z=H0($);if(Z)return Z.getApiKey(W);return W?.auth?.accessToken?.trim()||W?.apiKey?.trim()||W?.auth?.apiKey?.trim()||void 0}function o7($,W){let Z=H0($);if(!Z)return W.access;return Z.getApiKey({provider:Z.storageProviderId,auth:{accessToken:W.access}})??W.access}U0();var qB={};w(qB,{createContextCompactionPrepareTurn:()=>q4,createCompactionStateAwarePrepareTurn:()=>M4});import{estimateRequestInputTokens as RO}from"@cline/shared";var lV={};w(lV,{projectSessionCompactionState:()=>V2,parseSessionCompactionState:()=>K1,createSessionCompactionState:()=>N8,SessionCompactionStateSchema:()=>U4});import{createHash as cf}from"node:crypto";import{formatDisplayUserInput as mV}from"@cline/shared";import{z as T1}from"zod";function uf($){if(!$||typeof $!=="object"||Array.isArray($))return!1;let W=$;if(W.role!=="user"&&W.role!=="assistant")return!1;return typeof W.content==="string"||Array.isArray(W.content)}var df=T1.custom(uf),U4=T1.object({version:T1.literal(1),updated_at:T1.string().datetime(),conversation_id:T1.string().min(1).optional(),source_message_count:T1.number().int().nonnegative(),source_prefix_hash:T1.string().min(1).optional(),source_last_message_key:T1.string().min(1).optional(),messages:T1.array(df),system_prompt:T1.string().optional()});function s7($){return JSON.parse(JSON.stringify($))}function vV($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:mV($.content)};return{...$,content:$.content.map((W)=>W.type==="text"?{...W,text:mV(W.text)}:W)}}function cV($){if($.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function lf($){let W=vV($);return cV(W.role),[["role",W.role],["content",W.content],["id",W.id??null],["agent",W.agent??null],["sessionId",W.sessionId??null],["metadata",W.metadata??null],["modelInfo",W.modelInfo??null],["metrics",W.metrics??null],["ts",W.ts??null]]}function uV($){if(!$)return"";let W=vV($);if(typeof W.id==="string"&&W.id.trim())return`id:${W.id.trim()}`;if(cV(W.role),typeof W.ts==="number"&&Number.isFinite(W.ts))return`ts:${W.role}:${W.ts}`;return`content:${W.role}:${JSON.stringify(W.content)}`}function dV($,W=$.length){let Z=cf("sha256");Z.update(`cline-session-compaction-source-v1
|
|
46
46
|
`),Z.update(`${W}
|
|
47
|
-
`);for(let Q of $.slice(0,W))Z.update(JSON.stringify(
|
|
48
|
-
`);return`sha256:${Z.digest("hex")}`}function
|
|
47
|
+
`);for(let Q of $.slice(0,W))Z.update(JSON.stringify(lf(Q))),Z.update(`
|
|
48
|
+
`);return`sha256:${Z.digest("hex")}`}function N8($){let W=$.sourceMessages.at(-1),Z=uV(W);return U4.parse({version:1,updated_at:$.updatedAt??new Date().toISOString(),...$.conversationId?.trim()?{conversation_id:$.conversationId.trim()}:{},source_message_count:$.sourceMessages.length,source_prefix_hash:dV($.sourceMessages),...Z?{source_last_message_key:Z}:{},messages:s7($.compactedMessages),...$.systemPrompt!==void 0?{system_prompt:$.systemPrompt}:{}})}function V2($,W){if(!($.source_message_count<=W.length))return;let Q=!!$.source_prefix_hash&&dV(W,$.source_message_count)===$.source_prefix_hash,J=W[$.source_message_count-1],j=!$.source_prefix_hash&&$.source_message_count>0&&!!$.source_last_message_key&&uV(J)===$.source_last_message_key;if(!(Q||j))return;return[...s7($.messages),...s7(W.slice($.source_message_count))]}function K1($){let W=U4.safeParse($);return W.success?W.data:void 0}import{createHandlerAsync as GO}from"@cline/llms";function pf($){switch($){case"agentic_summary":case"basic_compaction_projection":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!0,dropThinkingBlocks:!0};case"normal_provider_request":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!1,dropThinkingBlocks:!1}}}function pV($){return $.map((W)=>({...W,content:Array.isArray(W.content)?W.content.map((Z)=>({...Z})):W.content,...W.metadata?{metadata:{...W.metadata}}:{}}))}function z1($){try{return JSON.stringify($).length}catch{return String($).length}}function TW($,W){return $.reduce((Z,Q)=>Z+W(Q),0)}function aV($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((W)=>W.type==="tool_result")}function zW($){for(let W=$.length-1;W>=0;W-=1){let Z=$[W];if(Z.role==="user"&&!aV(Z))return W}return-1}function rf($){for(let W=0;W<$.length;W+=1){let Z=$[W];if(Z.role==="user"&&!aV(Z))return W}return-1}function e7($){let W=new Set;if(!Array.isArray($.content))return W;for(let Z of $.content)if(Z.type==="tool_use")W.add(Z.id);else if(Z.type==="tool_result")W.add(Z.tool_use_id);return W}function nf($){let W=new Map;for(let Z=0;Z<$.length;Z+=1)for(let Q of e7($[Z])){let J=W.get(Q);if(J)J.add(Z);else W.set(Q,new Set([Z]))}return W}function t7($){let W=new Set;for(let Z of $){if(!Array.isArray(Z.content))continue;for(let Q of Z.content)if(Q.type==="tool_result")W.add(Q.tool_use_id)}for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(!Array.isArray(Q.content))continue;if(Q.content.some((J)=>J.type==="tool_use"&&!W.has(J.id)))return Z}return $.length}function af($,W){let Z=nf($),Q=new Set,J=[W];while(J.length>0){let j=J.shift();if(j===void 0||Q.has(j))continue;Q.add(j);for(let X of e7($[j]))for(let Y of Z.get(X)??[])if(!Q.has(Y))J.push(Y)}return Q}function of($){return $.type==="image"||$.type==="redacted_thinking"}function sf($){return $.type==="image"}function tf($,W,Z){if(W.dropThinkingBlocks&&$.type==="thinking")return!0;return W.dropUnsafeOutsideLiveTail&&!Z&&of($)}function rV($,W,Z,Q="over_budget"){let J=[],j=[];for(let X=0;X<$.length;X+=1){let Y=$[X];if(Array.isArray(Y.content)&&Y.content.length===0){Z.push({kind:"dropped_message",path:{messageIndex:W[X]},reason:Q,originalSize:z1(Y),finalSize:0});continue}J.push(Y),j.push(W[X])}return{messages:J,originalIndexes:j}}function ef($,W,Z,Q,J,j){return $.map((X,Y)=>{if(!Array.isArray(X.content))return X;let V=!1,B=Y===Q||Y>=J,H=X.content.flatMap((G,K)=>{if(tf(G,j,B))return V=!0,Z.push({kind:"dropped_block",path:{messageIndex:W[Y],blockIndex:K},reason:"unsafe_to_truncate",originalSize:z1(G),finalSize:0}),[];if(G.type==="tool_result"&&Array.isArray(G.content)){let F=G.content.filter((A)=>{if(j.dropUnsafeOutsideLiveTail&&!B&&sf(A))return!1;return!0});if(F.length!==G.content.length){V=!0;let A={...G,content:F};return Z.push({kind:"dropped_block",path:{messageIndex:W[Y],blockIndex:K},reason:"unsafe_to_truncate",originalSize:z1(G),finalSize:z1(A)}),[A]}}return[G]});return V?{...X,content:H}:X})}function $O($,W,Z){return $.map((Q,J)=>{if(!Array.isArray(Q.content))return Q;let j=!1,X=Q.content.filter((Y,V)=>{if(Y.type!=="thinking")return!0;return j=!0,Z.push({kind:"dropped_block",path:{messageIndex:W[J],blockIndex:V},reason:"unsafe_to_truncate",originalSize:z1(Y),finalSize:0}),!1});return j?{...Q,content:X}:Q})}function E8($,W){if(W<=0)return"";if($.length<=W)return $;if(W<=16)return $.slice(0,Math.max(1,W));let Z=`
|
|
49
49
|
...[truncated ${$.length-W} chars]`,Q=Math.max(1,W-Z.length),J=`
|
|
50
|
-
...[truncated ${$.length-Q} chars]`;return`${$.slice(0,Q)}${J}`}function
|
|
51
|
-
...[truncated ${$.length-W} chars]`}function
|
|
50
|
+
...[truncated ${$.length-Q} chars]`;return`${$.slice(0,Q)}${J}`}function iV($,W){if(typeof $==="string")return E8($,W);let Z=W;return $.map((Q)=>{if(Z<=0){if(Q.type==="text")return{...Q,text:""};if(Q.type==="file")return{...Q,content:""};return Q}if(Q.type==="text"){let J=E8(Q.text,Z);return Z-=J.length,{...Q,text:J}}if(Q.type==="file"){let J=E8(Q.content,Z);return Z-=J.length,{...Q,content:J}}return Q})}function WO($){if(typeof $==="string")return $.length;return $.reduce((W,Z)=>{if(Z.type==="text")return W+Z.text.length;if(Z.type==="file")return W+Z.content.length;return W},0)}function ZO($,W){if(typeof $.content==="string")return{...$,content:E8($.content,W)};let Z=W;return{...$,content:$.content.map((Q)=>{if(Z<=0){if(Q.type==="text")return{...Q,text:""};if(Q.type==="file")return{...Q,content:""};if(Q.type==="tool_result")return{...Q,content:iV(Q.content,0)};return Q}if(Q.type==="text"){let J=E8(Q.text,Z);return Z-=J.length,{...Q,text:J}}if(Q.type==="file"){let J=E8(Q.content,Z);return Z-=J.length,{...Q,content:J}}if(Q.type==="tool_result"){let J=iV(Q.content,Z);return Z-=WO(J),{...Q,content:J}}return Q})}}function QO($){if(typeof $.content==="string")return $.content.length>0;return $.content.some((W)=>W.type==="text"||W.type==="file"||W.type==="tool_result")}function JO($,W,Z){return{messages:$.filter((Q,J)=>!Z.has(J)),originalIndexes:W.filter((Q,J)=>!Z.has(J))}}function jO($,W){if(W<0)return!1;for(let Z of $)if(Z>=W)return!0;return!1}function nV($,W){return W>=0&&$.has(W)}function D4($){let W=[],Z=[],Q=pf($.policyIntent);if($.targetTokens<=0)return{status:"failed",messages:pV($.messages),actions:W,liveTailHandling:"preserved_out_of_band",estimatedTokens:TW($.messages,$.estimateMessageTokens),warnings:[{code:"budget_impossible",message:"Target budget must be greater than zero."}]};let J=pV($.messages),j=J.map((B,H)=>H);if(Q.dropThinkingBlocks){let B=rV($O(J,j,W),j,W,"unsafe_to_truncate");J=B.messages,j=B.originalIndexes}let X=Q.protectLatestTypedUser?zW(J):-1,Y=Q.protectLiveTailFromDrop?t7(J):J.length;if(Q.dropUnsafeOutsideLiveTail){let B=rV(ef(J,j,W,X,Y,Q),j,W);J=B.messages,j=B.originalIndexes}let V=TW(J,$.estimateMessageTokens);if(V<=$.targetTokens)return{status:"ok",messages:J,actions:W,liveTailHandling:W.length>0?"included_degraded":"included_verbatim",estimatedTokens:V,warnings:Z};for(let B=J.length-1;B>=0&&V>$.targetTokens;B-=1){let H=zW(J);if(B===H)continue;if(Q.protectLiveTailFromDrop&&B>=t7(J))continue;if(!QO(J[B]))continue;let G=z1(J[B]),K=Math.max(1,G/Math.max(1,$.estimateMessageTokens(J[B]))),F=Math.max(16,Math.floor($.targetTokens*K/Math.max(1,J.length)));J[B]=ZO(J[B],F),W.push({kind:"truncated_text",path:{messageIndex:j[B]},reason:"over_budget",originalSize:G,finalSize:z1(J[B])}),V=TW(J,$.estimateMessageTokens)}for(let B=0;B<J.length&&V>$.targetTokens;){let H=rf(J),G=zW(J),K=Q.protectLiveTailFromDrop?t7(J):J.length;if(B===H||B===G){W.push({kind:"preserved",path:{messageIndex:j[B]},reason:"protected_live_tail",originalSize:z1(J[B]),finalSize:z1(J[B])}),B+=1;continue}let F=af(J,B);if(nV(F,H)){B+=1;continue}if(nV(F,G)){B+=1;continue}if(jO(F,K)){B+=1;continue}for(let D of F)W.push({kind:"dropped_message",path:{messageIndex:j[D]},reason:F.size>1||e7(J[D]).size>0?"tool_pair_boundary":"over_budget",originalSize:z1(J[D]),finalSize:0});let A=JO(J,j,F);J=A.messages,j=A.originalIndexes,V=TW(J,$.estimateMessageTokens)}if(V>$.targetTokens)return Z.push({code:"budget_unachievable_with_protections",message:"Projection could not reach budget without violating protected content."}),{status:"failed",messages:J,actions:W,liveTailHandling:"included_degraded",estimatedTokens:V,warnings:Z};return{status:"ok",messages:J,actions:W,liveTailHandling:W.length>0?"included_degraded":"included_verbatim",estimatedTokens:V,warnings:Z}}import{CHARS_PER_TOKEN as cc,estimateTokens as qW}from"@cline/shared";var eV=128000,XO=0.9,B2=0.9,$B=0.7,WB=20000,oV=1024,sV=2000,ZB=2000,QB=8;function tV($){return typeof $==="number"&&Number.isFinite($)&&$>0}function O4($){let W=tV($.contextWindow)?$.contextWindow:void 0,Z=tV($.maxInputTokens)?$.maxInputTokens:void 0;if(Z!==void 0)return W===void 0?Z:Math.min(Z,W);return W===void 0?void 0:W*XO}function f4($,W){if($.length<=W)return $;return`${$.slice(0,W)}
|
|
51
|
+
...[truncated ${$.length-W} chars]`}function YO($){let W=$3($);if(typeof W==="string")return W;return W.map((Z)=>{switch(Z.type){case"text":return Z.text;case"file":return`<file path="${Z.path}">
|
|
52
52
|
${Z.content}
|
|
53
53
|
</file>`;case"image":return`[image:${Z.mediaType}]`;default:return""}}).join(`
|
|
54
|
-
`)}function
|
|
55
|
-
`)}function
|
|
54
|
+
`)}function $3($){if(typeof $==="string")return f4($,sV);return $.map((W)=>{switch(W.type){case"text":return{...W,text:f4(W.text,sV)};case"file":return{...W,content:f4(W.content,ZB)};case"image":return W;default:return W}})}function VO($){return Object.entries($).map(([W,Z])=>`${W}=${JSON.stringify(Z)}`).join(", ")}function JB($){if(typeof $.content==="string")return`[${$.role==="user"?"User":"Bot"}]: ${$.content}`;let W=[];for(let Z of $.content)switch(Z.type){case"text":W.push(`[${$.role==="user"?"User":"Bot"}]: ${Z.text}`);break;case"thinking":W.push(`[Bot thinking]: ${f4(Z.thinking,2000)}`);break;case"redacted_thinking":W.push("[Bot thinking]: [redacted]");break;case"tool_use":W.push(`[Bot tool calls]: ${Z.name}(${VO(Z.input)})`);break;case"tool_result":W.push(`[Tool result]: ${YO(Z.content)}`);break;case"file":W.push(`[${$.role==="user"?"User":"Bot"} file ${Z.path}]: ${f4(Z.content,ZB)}`);break;case"image":W.push(`[${$.role==="user"?"User":"Bot"} image]: ${Z.mediaType}`);break}return W.join(`
|
|
55
|
+
`)}function jB($){return $.map(JB).join(`
|
|
56
56
|
|
|
57
|
-
`).trim()}function
|
|
57
|
+
`).trim()}function XB(){let $=new WeakMap;return(W)=>{let Z=W,Q=$.get(Z);if(typeof Q==="number")return Q;let J;try{J=JSON.stringify(W)}catch{J=JB(W)}let j=qW(J.length);return $.set(Z,j),j}}function T4($){return $.metadata?.kind==="compaction_summary"}function W3($){if(!T4($))return;let W=$.metadata;if(!W)return;let Z=W.details;return{kind:"compaction_summary",summary:String(W.summary??""),details:{readFiles:Array.isArray(Z?.readFiles)?Z.readFiles.filter((Q)=>typeof Q==="string").map((Q)=>Q.trim()).filter((Q)=>Q.length>0):[],modifiedFiles:Array.isArray(Z?.modifiedFiles)?Z.modifiedFiles.filter((Q)=>typeof Q==="string").map((Q)=>Q.trim()).filter((Q)=>Q.length>0):[]},tokensBefore:Number(W.tokensBefore??0),generatedAt:Number(W.generatedAt??0)}}function BO($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((W)=>W.type==="tool_result")}function z4($){return $.role==="user"&&!BO($)&&!T4($)}function YB($){for(let W=0;W<$.length;W+=1)if(z4($[W]))return W;return-1}function MW($){for(let W=$.length-1;W>=0;W-=1)if(z4($[W]))return W;return 0}function VB($){for(let W=$.length-1;W>=0;W-=1)if($[W].role==="assistant")return W;return-1}function BB($){for(let W=$.length-1;W>=0;W-=1)if(T4($[W]))return W;return-1}function HB($,W,Z){let Q=MW($);if(Q<=0)return 0;let J=0,j=$.length;for(let Y=$.length-1;Y>=0;Y-=1)if(J+=Z($[Y]),j=Y,J>=W)break;if(j<=0)return 0;let X=Math.min(j,Q);while(X>0&&!z4($[X]))X-=1;return X}function L4($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((W)=>L4(W));if($&&typeof $==="object"){let W=$,Z=[];for(let Q of["path","file_path","target_file","new_file_path","old_file_path"])Z.push(...L4(W[Q]));if(Array.isArray(W.files)){for(let Q of W.files)if(Q&&typeof Q==="object")Z.push(...L4(Q.path))}if(Array.isArray(W.file_paths))Z.push(...L4(W.file_paths));return Z}return[]}function _4($,W){let Z=new Set($);for(let Q of W){let J=Q.trim();if(!J)continue;Z.add(J)}return[...Z].sort((Q,J)=>Q.localeCompare(J))}function Z3($){let W=[],Z=[];for(let Q of $){let J=W3(Q);if(J){W=_4(W,J.details.readFiles),Z=_4(Z,J.details.modifiedFiles);continue}if(!Array.isArray(Q.content))continue;for(let j of Q.content){if(j.type==="file"){W=_4(W,[j.path]);continue}if(j.type!=="tool_use")continue;let X=L4(j.input);if(j.name==="read_files"){W=_4(W,X);continue}if(j.name==="editor"||j.name==="apply_patch")Z=_4(Z,X)}}return{readFiles:W,modifiedFiles:Z}}function HO($){let W=$.readFiles.length>0?$.readFiles.map((Q)=>`- ${Q}`).join(`
|
|
58
58
|
`):"- none",Z=$.modifiedFiles.length>0?$.modifiedFiles.map((Q)=>`- ${Q}`).join(`
|
|
59
59
|
`):"- none";return`## Files
|
|
60
60
|
Read:
|
|
61
61
|
${W}
|
|
62
62
|
Modified:
|
|
63
|
-
${Z}`}function
|
|
63
|
+
${Z}`}function GB($,W){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
|
|
64
64
|
|
|
65
|
-
${
|
|
65
|
+
${HO(W)}`.trim()}function Q3($){let W=[`Summarize this session for continuation. Be concise and factual.
|
|
66
66
|
|
|
67
67
|
## Goal
|
|
68
68
|
One sentence: what is being built or fixed.
|
|
@@ -84,20 +84,20 @@ Edited: ${$.fileOps.modifiedFiles.join(", ")||"none"}`];if($.previousSummary?.tr
|
|
|
84
84
|
${$.previousSummary.trim()}`);return W.push(`Conversation:
|
|
85
85
|
${$.conversationText||"(empty)"}`),W.join(`
|
|
86
86
|
|
|
87
|
-
`)}function
|
|
87
|
+
`)}function KB($){let W=$.summarizer,Z=(J)=>{if(J.providerId==="openai-codex"){let{maxOutputTokens:j,...X}=J;return{...X,thinking:!1}}return{...J,maxOutputTokens:J.maxOutputTokens??oV,thinking:!1}};if(!W)return Z($.activeProviderConfig);let Q=W.providerConfig?.providerId===W.providerId?W.providerConfig:void 0;return Z({...Q??{},providerId:W.providerId,modelId:W.modelId,apiKey:W.apiKey??Q?.apiKey,baseUrl:W.baseUrl??Q?.baseUrl,headers:W.headers??Q?.headers,modelInfo:W.modelInfo??Q?.modelInfo,knownModels:W.knownModels??Q?.knownModels,maxOutputTokens:W.maxOutputTokens??oV})}function FB($){return{role:"user",content:`Context summary:
|
|
88
88
|
|
|
89
|
-
${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}var
|
|
90
|
-
...`,Q=Math.max(1,W-Z.length);return`${$.slice(0,Q)}${Z}`}function UB($,W){let Z=Number.isFinite(W)?Math.max(1,W):1,Q=Math.max(16,Z*BO);if(typeof $.content==="string"){let X=AB($.content,Q).trim();return{...$,content:X||"..."}}let J=Q,j=$.content.map((X)=>{if(X.type!=="text"||J<=0)return X;let Y=AB(X.text,J).trim();return J-=Y.length,{...X,text:Y||"..."}});return{...$,content:j}}function GO($,W){let Z=jB($),Q=q9($),J=XB($),j=[],X=0;for(let Y=0;Y<$.length;Y+=1){let V=HO($[Y]);if(!V)continue;let B=W(V);X+=B,j.push({index:Y,message:V,estimatedTokens:B,toolPairIds:_B(V),isFirstUser:Y===Z,isLastUser:Y===Q,isLastAssistant:Y===J})}return{candidates:j,totalTokens:X}}function DB($,W,Z,Q){let J=$[W],j=J.estimatedTokens;return J.message=Z,J.estimatedTokens=Q(Z),J.toolPairIds=_B(Z),J.estimatedTokens-j}function _B($){if(!Array.isArray($.content))return[];let W=[];for(let Z of $.content)if(Z.type==="tool_use")W.push(Z.id);else if(Z.type==="tool_result")W.push(Z.tool_use_id);return W}function KO($){let W=new Map;for(let Z of $)for(let Q of Z.toolPairIds){let J=W.get(Q);if(J)J.add(Z);else W.set(Q,new Set([Z]))}return W}function FO($,W,Z){let Q=new Set,J=[Z],j=0;while(j<J.length){let X=J[j];if(j+=1,X===void 0||!$.has(X)||Q.has(X))continue;Q.add(X);for(let Y of X.toolPairIds)for(let V of W.get(Y)??[])if(!Q.has(V))J.push(V)}return Q}function AO($,W){let Z=0;for(let Q of $){if(W.has(Q))continue;$[Z]=Q,Z+=1}$.length=Z}function M9($,W,Z,Q){let J=new Set($),j=KO($);for(let X=0;X<$.length&&Q>Z;){if(!W($[X])){X+=1;continue}let Y=FO(J,j,$[X]);if(Y.size===0){X+=1;continue}let V=0;for(let B of Y)V+=B.estimatedTokens,J.delete(B);Q-=V,AO($,Y)}return Q}function UO($,W,Z,Q,J){if(Z<=W)return Z;for(let X=$.length-1;X>=0&&Z>W;X-=1){let Y=$[X];if(Y.isFirstUser)continue;let V=Math.max(WB,Y.estimatedTokens-(Z-W));if(V>=Y.estimatedTokens)continue;Z+=DB($,X,UB(Y.message,V),J)}if(Z<=W)return Z;let j=$.findIndex((X)=>X.isFirstUser);if(j>=0){if($[j].estimatedTokens<=Q)return Z;while(Z>W){let Y=$[j],V=Math.max(1,Y.estimatedTokens-(Z-W));if(V>=Y.estimatedTokens)break;let B=Y.estimatedTokens;if(Z+=DB($,j,UB(Y.message,V),J),Y.estimatedTokens>=B)break}}return Z}function DO($,W){return JSON.stringify($)!==JSON.stringify(W)}function _O($){let W=q9($);if(W<0||W===0&&!O4($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,W),protectedTail:$.slice(W)}}function fB($){let W=Math.max(1,Math.min($.context.budget.messages.targetTokens,$.context.budget.messages.triggerTokens)),{compactable:Z,protectedTail:Q}=_O($.context.messages);if(Z.length===0)return;let J=FB(Q,$.estimateMessageTokens),j=Math.max(1,W-J),X=GO(Z,$.estimateMessageTokens),{candidates:Y}=X;if(Y.length===0)return;let V=X.totalTokens,B=V;B=M9(Y,(U)=>U.message.role==="assistant"&&!U.isLastAssistant,j,B),B=M9(Y,(U)=>U.message.role==="user"&&!U.isFirstUser&&!U.isLastUser,j,B),B=M9(Y,(U)=>U.message.role==="assistant"&&U.isLastAssistant,j,B),B=M9(Y,(U)=>U.message.role==="user"&&U.isLastUser&&!U.isFirstUser,j,B),B=UO(Y,j,B,$.context.budget.messages.triggerTokens,$.estimateMessageTokens);let H=[...Y.map((U)=>U.message),...Q],G=A4({messages:H,targetTokens:W,policyIntent:"basic_compaction_projection",estimateMessageTokens:$.estimateMessageTokens});if(G.status==="failed")$.logger?.debug("Basic compaction returned best-effort projection",{budgetWarnings:G.warnings.map((U)=>U.code),projectedTokens:G.estimatedTokens,targetTokens:W,maxInputTokens:$.context.budget.request.maxInputTokens});let K=G.messages;if(!DO($.context.messages,K))return;let F=V+J,A=FB(K,$.estimateMessageTokens),D=G.actions.filter((U)=>U.reason==="over_budget"||U.reason==="tool_pair_boundary").length;return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:K.length,messagesRemoved:$.context.messages.length-K.length,tokensBefore:F,tokensAfter:A,budgetStatus:G.status,budgetActions:D,budgetWarnings:G.warnings.map((U)=>U.code),targetTokens:W,maxInputTokens:$.context.budget.request.maxInputTokens}),{messages:K,budget:{policyIntent:"basic_compaction_projection",actionCount:D,warningCount:G.warnings.length,liveTailHandling:G.liveTailHandling}}}var LO=0.5;function OB($){try{return JSON.stringify($).length}catch{return String($).length}}function OO($){let W=0,Z=0,Q=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let j of J.content){if(j.type!=="tool_result")continue;let X=OB(j.content);W+=1,Z+=X,Q=Math.max(Q,X)}}return{toolResultCount:W,toolResultSerializedChars:Z,maxToolResultSerializedChars:Q}}var TO={basic:({context:$,estimateMessageTokens:W,logger:Z})=>fB({context:$,estimateMessageTokens:W,logger:Z}),agentic:({context:$,providerConfig:W,compaction:Z,estimateMessageTokens:Q,logger:J})=>KB({context:$,providerConfig:W,summarizer:Z?.summarizer,preserveRecentTokens:Math.min(Z?.preserveRecentTokens??eV,$.budget.messages.targetTokens),estimateMessageTokens:Q,logger:J})};function zO($){let W=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Z=Math.min(0.95,Math.max(0.05,W));return Math.max(1,Math.floor(Math.min($.messageTriggerTokens,$.messageInputTokens*Z)))}function qO($){let W=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*LO):Math.floor($.triggerTokens*tV),Z=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(W,$.maxInputTokens,Z))}function LB($,W){return Math.max(1,Math.floor($-W))}function MO($){let W=0,Z=!1;for(let Q of $)if(Q.role==="user")Z=!0;else if(Q.role==="assistant"&&Z)W+=1,Z=!1;return W}function T4($,W={}){let Z=$.compaction;if(Z?.enabled!==!0)return;let Q=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=JB(),j=Z?.strategy??"basic",X=TO[j],Y=W.mode??"auto",V=Z?.compact?"custom":j;return async(B)=>{let H=B.apiMessages.reduce((r,d)=>r+J(d),0),G=fO({systemPrompt:B.systemPrompt,messages:B.apiMessages,tools:B.tools}),K=B.messages.reduce((r,d)=>r+J(d),0),F=Math.max(0,G-H),A=f4({maxInputTokens:B.model.info?.maxInputTokens,contextWindow:B.model.info?.contextWindow})??sV,D=A*Y2,U=LB(D,F),f=G>=D;if($.logger?.debug("Context compaction diagnostics",{mode:Y,strategy:j,iteration:B.iteration,providerId:$.providerId,modelId:$.modelId,requestInputTokens:G,apiMessageTokens:H,messageInputTokens:K,requestOverheadTokens:F,maxInputTokens:A,requestTriggerTokens:D,messageTriggerTokens:U,thresholdRatio:Y2,shouldCompact:f,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:OB(B.apiMessages),...OO(B.apiMessages)}),Y==="auto"&&!f)return;let _,R;if(Y==="auto")_=qO({maxInputTokens:A,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:D,messagePairCount:MO(B.messages)}),R=LB(_,F);else R=zO({messageInputTokens:K,messageTriggerTokens:U,manualTargetRatio:W.manualTargetRatio}),_=F+R;let T={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId,iteration:B.iteration,messages:B.messages,model:B.model,mode:Y,budget:{request:{inputTokens:G,maxInputTokens:A,triggerTokens:D,targetTokens:_,overheadTokens:F,thresholdRatio:Y2,utilizationRatio:A>0?G/A:0},messages:{inputTokens:K,triggerTokens:U,targetTokens:R}}},O=Y==="manual"?"manual_compaction":"auto_compaction";B.emitStatusNotice?.(Y==="manual"?"compacting":"auto-compacting",{kind:O,reason:O,phase:"started",iteration:B.iteration,triggerTokens:D,targetTokens:_,maxInputTokens:A,messageTargetTokens:R});let L=B.messages.length,C=Date.now(),N=Z?.compact?await Z.compact(T):await X({context:T,providerConfig:{...Q,abortSignal:B.abortSignal},compaction:Z,estimateMessageTokens:J,logger:$.logger}),p=Date.now()-C,x=$.sessionId??B.conversationId,P={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId??void 0};if(N?.messages){let r=N.messages.reduce((x1,W2)=>x1+J(W2),0),d=F+r;if($.logger?.log("Context compaction completed",{severity:"info",strategy:j,maxInputTokens:A,messageInputTokens:K,apiInputTokens:H,requestInputTokens:G,requestOverheadTokens:F,afterMessageTokens:r,afterRequestTokens:d,tokensSaved:G-d,utilizationBefore:`${(G/A*100).toFixed(1)}%`,utilizationAfter:`${(d/A*100).toFixed(1)}%`,thresholdTrigger:`${(Y2*100).toFixed(1)}%`,messagesBefore:L,messagesAfter:N.messages.length,messagesRemoved:L-N.messages.length}),B.emitStatusNotice?.(Y==="manual"?"compacted":"auto-compacted",{kind:O,reason:O,phase:"completed",iteration:B.iteration,tokensBefore:G,tokensAfter:d,messagesBefore:L,messagesAfter:N.messages.length,maxInputTokens:A}),Y9($.telemetry,{ulid:x,strategy:V,mode:Y,messagesBefore:L,messagesAfter:N.messages.length,messagesRemoved:L-N.messages.length,tokensBefore:G,tokensAfter:d,tokensSaved:G-d,triggerTokens:D,maxInputTokens:A,thresholdRatio:Y2,durationMs:p,provider:$.providerId,modelId:$.modelId,...P}),N.budget&&(N.budget.actionCount>0||N.budget.warningCount>0))YV($.telemetry,{ulid:x,strategy:V,mode:Y,policyIntent:N.budget.policyIntent,actionCount:N.budget.actionCount,warningCount:N.budget.warningCount,liveTailHandling:N.budget.liveTailHandling,provider:$.providerId,modelId:$.modelId,...P}),B.emitStatusNotice?.("compaction-budget-adjusted",{kind:"compaction_budget_emergency",reason:"compaction_budget_emergency",iteration:B.iteration,policyIntent:N.budget.policyIntent,actionCount:N.budget.actionCount,warningCount:N.budget.warningCount})}else B.emitStatusNotice?.(Y==="manual"?"compaction-skipped":"auto-compaction-skipped",{kind:O,reason:O,phase:"skipped",iteration:B.iteration,maxInputTokens:A}),V9($.telemetry,{ulid:x,strategy:V,mode:Y,reason:"no_result",tokensBefore:G,triggerTokens:D,maxInputTokens:A,thresholdRatio:Y2,durationMs:p,provider:$.providerId,modelId:$.modelId,...P});return N}}function z4($){return async(W)=>{let Z=$.getState?.(),Q=Z?X2(Z,W.messages):void 0;if(Z&&Q){let j=$.compact?await $.compact({...W,messages:Q,apiMessages:Q}):void 0;if(j?.messages){let X=j.systemPrompt??Z.system_prompt,Y=M8({sourceMessages:W.messages,compactedMessages:j.messages,conversationId:W.conversationId,systemPrompt:X});return await $.saveState?.(Y),{...j,...X!==void 0?{systemPrompt:X}:{}}}return{messages:Q,...j?.systemPrompt!==void 0?{systemPrompt:j.systemPrompt}:Z.system_prompt!==void 0?{systemPrompt:Z.system_prompt}:{}}}let J=$.compact?await $.compact(W):void 0;if(J?.messages){let j=M8({sourceMessages:W.messages,compactedMessages:J.messages,conversationId:W.conversationId,systemPrompt:J.systemPrompt});await $.saveState?.(j)}return J}}var YG={};w(YG,{zodToJsonSchema:()=>Iq,validateWithZod:()=>kq,truncateCommandOutput:()=>G2,resolveToolRoutingConfig:()=>k8,resolveToolPresetName:()=>i1,resolveCoreSelectedToolIds:()=>s9,getCoreHeadlessToolNames:()=>l4,getCoreDefaultEnabledToolIds:()=>o9,getCoreBuiltinToolCatalog:()=>R2,getCoreAcpToolNames:()=>t9,createWebFetchTool:()=>V3,createWebFetchExecutor:()=>k4,createToolPoliciesWithPreset:()=>k9,createSubmitAndExitTool:()=>K3,createSkillsTool:()=>F2,createShellTool:()=>b4,createShellExecutor:()=>K2,createSearchTool:()=>Y3,createSearchExecutor:()=>h4,createReadFilesTool:()=>X3,createFileReadExecutor:()=>y4,createEditorTool:()=>H3,createEditorExecutor:()=>D2,createDefaultToolsWithPreset:()=>I9,createDefaultTools:()=>q$,createDefaultShellExecutor:()=>I4,createDefaultExecutors:()=>y8,createBuiltinTools:()=>N2,createAskQuestionTool:()=>G3,createApplyPatchTool:()=>B3,createApplyPatchExecutor:()=>U2,computePatchChanges:()=>P8,WebFetchRequestSchema:()=>Q3,ToolPresets:()=>a0,TEAM_TOOL_NAMES:()=>g8,SubmitInputSchema:()=>S4,StructuredCommandInputSchema:()=>B2,SkillsInputSchema:()=>C4,SearchCodebaseInputSchema:()=>M4,RunCommandsInputSchema:()=>R4,ReadFilesInputSchema:()=>q4,ReadFileRequestSchema:()=>w9,PatchActionType:()=>A2,MAX_COMMAND_OUTPUT_CHARS:()=>d1,FetchWebContentInputSchema:()=>N4,EditFileInputSchema:()=>E4,DefaultToolNames:()=>z0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>h8,CommandExitError:()=>l1,AskQuestionInputSchema:()=>P4,ApplyPatchInputSchema:()=>w4,ALL_DEFAULT_TOOL_NAMES:()=>L$});import{validateWithZod as kq,zodToJsonSchema as Iq}from"@cline/shared";var z0={READ_FILES:"read_files",SEARCH_CODEBASE:"search_codebase",RUN_COMMANDS:"run_commands",FETCH_WEB_CONTENT:"fetch_web_content",APPLY_PATCH:"apply_patch",EDITOR:"editor",SKILLS:"skills",ASK:"ask_question",SUBMIT_AND_EXIT:"submit_and_exit"},L$=[z0.READ_FILES,z0.SEARCH_CODEBASE,z0.RUN_COMMANDS,z0.FETCH_WEB_CONTENT,z0.APPLY_PATCH,z0.EDITOR,z0.SKILLS,z0.ASK,z0.SUBMIT_AND_EXIT];D0();import{createTool as T$,validateWithZod as z$,zodToJsonSchema as p1}from"@cline/shared";var R9="__clineInternalTelemetry";function zB($){let W=$?.__clineInternalTelemetry;return W&&typeof W==="object"&&"capture"in W&&typeof W.capture==="function"?W:void 0}import{spawn as kB}from"node:child_process";import{StringDecoder as PO}from"node:string_decoder";import{getDefaultShell as SO,getShellArgs as bO}from"@cline/shared";import{validateWithZod as NO}from"@cline/shared";import{z}from"zod";var O$=6000,V2=z.string().describe("The absolute path of a text file to read content from"),N9=z.object({start_line:z.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:z.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"),w9=z.object({path:V2,start_line:N9.shape.start_line,end_line:N9.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds. Always include path; start_line/end_line must be on the same object as the path they apply to, never in a separate array element"),q4=z.object({files:z.array(w9).describe("Array of file read requests; each element is one file and must include path. Omit start_line/end_line or set them to null to read from the start; provide integers on the same object as the path to return only that inclusive one-based line range — never emit a range as its own array element. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),qB={start_line:N9.shape.start_line,end_line:N9.shape.end_line},N8=z.union([w9,z.object({file_path:V2,...qB}).transform(({file_path:$,...W})=>({path:$,...W})),z.object({filePath:V2,...qB}).transform(({filePath:$,...W})=>({path:$,...W}))]),MB=z.union([q4,N8,z.array(N8),z.array(z.string()),z.string(),z.object({files:z.array(z.union([V2,N8]))}),z.object({files:N8}),z.object({files:V2}),z.object({file_paths:z.array(V2)}),z.object({file_paths:z.string()}),z.object({paths:z.array(z.union([V2,N8]))}),z.object({paths:N8}),z.object({paths:z.string()})]),M4=z.object({queries:z.array(z.string()).describe("Array of regex search queries to execute")}),RB=z.union([M4,z.array(z.string()),z.string(),z.object({queries:z.string()})]),E9=z.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${O$*2} characters) to avoid timeouts.`),B2=z.object({command:z.string().min(1).describe("The executable to run directly without shell parsing."),args:z.array(z.string()).optional().describe("Optional argv list passed directly to the executable.")}),NB=z.union([E9,B2]),R4=z.object({commands:z.array(E9).describe("Array of complete shell command strings to execute.")}),RO=z.object({commands:z.array(NB)}),EB=z.union([R4,RO,z.object({commands:NB}),z.array(B2),B2,z.object({command:E9}),z.object({cmd:E9}),z.array(z.string()),z.string()]),Q3=z.object({url:z.string().describe("The URL to fetch"),prompt:z.string().min(2).describe("Analysis prompt for the fetched content")}),N4=z.object({requests:z.array(Q3).describe("Array of the URLs for the web fetch requests")}),E4=z.object({path:z.string().min(1).describe("The absolute path for the action to be performed on"),old_text:z.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 ${O$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:z.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 ${O$} 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:z.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."),w4=z.object({input:z.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."),wB=z.union([w4,z.string()]),C4=z.object({skill:z.string().min(1).describe("Name of the skill to execute."),args:z.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),P4=z.object({question:z.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:z.array(z.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),S4=z.object({summary:z.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:z.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.
|
|
89
|
+
${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}var J3=1024;function KO($){let W=O4({maxInputTokens:$.maxInputTokens??$.modelInfo?.maxInputTokens,contextWindow:$.modelInfo?.contextWindow});if(W!==void 0)return W;let Z=$.knownModels?.[$.modelId];return O4({maxInputTokens:Z?.maxInputTokens,contextWindow:Z?.contextWindow})}function FO($){return D4({messages:$.messages,targetTokens:Math.max(1,$.targetTokens),policyIntent:"agentic_summary",estimateMessageTokens:$.estimateMessageTokens})}async function AO($){let W=await GO($.providerConfig),Z="";for await(let Q of W.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(Q.type==="text"){Z+=Q.text;continue}if(Q.type==="done"&&!Q.success&&Q.error)throw Error(Q.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Z.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Z.trim()}function UO($){try{return JSON.stringify($).length}catch{return String($).length}}async function AB($){let W=$.context.messages;if(W.length<2)return;let Z=HB(W,$.preserveRecentTokens,$.estimateMessageTokens);if(Z<=0||Z>=W.length)return;let Q=W.slice(0,Z),J=BB(Q),j=J>=0?W3(Q[J])?.summary:void 0,X=J>=0?Q.slice(J+1):Q;if(X.length===0)return;let Y=Z3(Q),V=KB({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),B=KO(V),H=$.summarizer===void 0,G=Math.max($.context.budget.request.maxInputTokens,$.context.budget.request.triggerTokens,J3);if(B===void 0&&!H)$.logger?.log("Agentic compaction summarizer has no known input limit; using conservative summary budget",{severity:"warn",summarizerProviderId:V.providerId,summarizerModelId:V.modelId,fallbackInputLimit:J3});let K=B??(H?G:J3),F=qW(Q3({previousSummary:j,conversationText:"",fileOps:Y}).length),A=K-F;if(A<=0){$.logger?.debug("Skipped agentic compaction: summarizer budget exhausted",{summarizerProviderId:V.providerId,summarizerModelId:V.modelId,summarizerInputLimit:K,summaryRequestOverheadTokens:F});return}let D=FO({messages:X,targetTokens:A,estimateMessageTokens:$.estimateMessageTokens});if(D.status==="failed"){$.logger?.log("Skipped agentic compaction: summary input budget failed",{severity:"warn",budgetWarnings:D.warnings.map((l)=>l.code),summaryInputEstimatedTokens:D.estimatedTokens,targetTokens:A,summarizerProviderId:V.providerId,summarizerModelId:V.modelId});return}let U=Z3(D.messages),L=jB(D.messages),_=Q3({previousSummary:j,conversationText:L,fileOps:U});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:Q.length,newMessagesToFold:X.length,preservedMessages:W.length-Z,previousSummaryChars:j?.length??0,conversationTextChars:L.length,summaryRequestChars:_.length,summaryRequestEstimatedTokens:qW(_.length),newMessagesJsonChars:UO(X),summaryInputEstimatedTokens:D.estimatedTokens,summaryInputActions:D.actions.length,summaryInputWarnings:D.warnings.map((l)=>l.code),summaryRequestOverheadTokens:F,summarizerProviderId:V.providerId,summarizerModelId:V.modelId,summarizerInputLimit:K,maxInputTokens:$.context.budget.request.maxInputTokens,triggerTokens:$.context.budget.request.triggerTokens});let M=await AO({providerConfig:V,request:_,logger:$.logger});if(!M.trim())return;let T=GB(M,U),O=W.reduce((l,k)=>l+$.estimateMessageTokens(k),0),f=[FB({summary:T,fileOps:U,tokensBefore:O}),...W.slice(Z)],E=f.reduce((l,k)=>l+$.estimateMessageTokens(k),0);$.logger?.debug("Performed agentic compaction",{messagesBefore:W.length,messagesAfter:f.length,messagesSummarized:Z,messagesPreserved:W.length-Z,tokensBefore:O,tokensAfter:E,maxInputTokens:$.context.budget.request.maxInputTokens});let N=D.actions.filter((l)=>l.reason==="over_budget"||l.reason==="tool_pair_boundary").length;return{messages:f,budget:{policyIntent:"agentic_summary",actionCount:N,warningCount:D.warnings.length,liveTailHandling:D.liveTailHandling}}}import{CHARS_PER_TOKEN as DO}from"@cline/shared";function _O($){if(T4($))return;if(typeof $.content==="string"){let Z=$.content.trim();return Z?{...$,content:Z}:void 0}let W=$.content.filter((Z)=>Z.type!=="text"||Z.text.trim());if(W.length===0)return;return{...$,content:W.map((Z)=>Z.type==="text"?{...Z,text:Z.text.trim()}:Z.type==="tool_result"?{...Z,content:$3(Z.content)}:Z)}}function UB($,W){return $.reduce((Z,Q)=>Z+W(Q),0)}function DB($,W){if($.length<=W)return $;let Z=`
|
|
90
|
+
...`,Q=Math.max(1,W-Z.length);return`${$.slice(0,Q)}${Z}`}function _B($,W){let Z=Number.isFinite(W)?Math.max(1,W):1,Q=Math.max(16,Z*DO);if(typeof $.content==="string"){let X=DB($.content,Q).trim();return{...$,content:X||"..."}}let J=Q,j=$.content.map((X)=>{if(X.type!=="text"||J<=0)return X;let Y=DB(X.text,J).trim();return J-=Y.length,{...X,text:Y||"..."}});return{...$,content:j}}function LO($,W){let Z=YB($),Q=MW($),J=VB($),j=[],X=0;for(let Y=0;Y<$.length;Y+=1){let V=_O($[Y]);if(!V)continue;let B=W(V);X+=B,j.push({index:Y,message:V,estimatedTokens:B,toolPairIds:fB(V),isFirstUser:Y===Z,isLastUser:Y===Q,isLastAssistant:Y===J})}return{candidates:j,totalTokens:X}}function LB($,W,Z,Q){let J=$[W],j=J.estimatedTokens;return J.message=Z,J.estimatedTokens=Q(Z),J.toolPairIds=fB(Z),J.estimatedTokens-j}function fB($){if(!Array.isArray($.content))return[];let W=[];for(let Z of $.content)if(Z.type==="tool_use")W.push(Z.id);else if(Z.type==="tool_result")W.push(Z.tool_use_id);return W}function fO($){let W=new Map;for(let Z of $)for(let Q of Z.toolPairIds){let J=W.get(Q);if(J)J.add(Z);else W.set(Q,new Set([Z]))}return W}function OO($,W,Z){let Q=new Set,J=[Z],j=0;while(j<J.length){let X=J[j];if(j+=1,X===void 0||!$.has(X)||Q.has(X))continue;Q.add(X);for(let Y of X.toolPairIds)for(let V of W.get(Y)??[])if(!Q.has(V))J.push(V)}return Q}function TO($,W){let Z=0;for(let Q of $){if(W.has(Q))continue;$[Z]=Q,Z+=1}$.length=Z}function RW($,W,Z,Q){let J=new Set($),j=fO($);for(let X=0;X<$.length&&Q>Z;){if(!W($[X])){X+=1;continue}let Y=OO(J,j,$[X]);if(Y.size===0){X+=1;continue}let V=0;for(let B of Y)V+=B.estimatedTokens,J.delete(B);Q-=V,TO($,Y)}return Q}function zO($,W,Z,Q,J){if(Z<=W)return Z;for(let X=$.length-1;X>=0&&Z>W;X-=1){let Y=$[X];if(Y.isFirstUser)continue;let V=Math.max(QB,Y.estimatedTokens-(Z-W));if(V>=Y.estimatedTokens)continue;Z+=LB($,X,_B(Y.message,V),J)}if(Z<=W)return Z;let j=$.findIndex((X)=>X.isFirstUser);if(j>=0){if($[j].estimatedTokens<=Q)return Z;while(Z>W){let Y=$[j],V=Math.max(1,Y.estimatedTokens-(Z-W));if(V>=Y.estimatedTokens)break;let B=Y.estimatedTokens;if(Z+=LB($,j,_B(Y.message,V),J),Y.estimatedTokens>=B)break}}return Z}function qO($,W){return JSON.stringify($)!==JSON.stringify(W)}function MO($){let W=MW($);if(W<0||W===0&&!z4($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,W),protectedTail:$.slice(W)}}function OB($){let W=Math.max(1,Math.min($.context.budget.messages.targetTokens,$.context.budget.messages.triggerTokens)),{compactable:Z,protectedTail:Q}=MO($.context.messages);if(Z.length===0)return;let J=UB(Q,$.estimateMessageTokens),j=Math.max(1,W-J),X=LO(Z,$.estimateMessageTokens),{candidates:Y}=X;if(Y.length===0)return;let V=X.totalTokens,B=V;B=RW(Y,(U)=>U.message.role==="assistant"&&!U.isLastAssistant,j,B),B=RW(Y,(U)=>U.message.role==="user"&&!U.isFirstUser&&!U.isLastUser,j,B),B=RW(Y,(U)=>U.message.role==="assistant"&&U.isLastAssistant,j,B),B=RW(Y,(U)=>U.message.role==="user"&&U.isLastUser&&!U.isFirstUser,j,B),B=zO(Y,j,B,$.context.budget.messages.triggerTokens,$.estimateMessageTokens);let H=[...Y.map((U)=>U.message),...Q],G=D4({messages:H,targetTokens:W,policyIntent:"basic_compaction_projection",estimateMessageTokens:$.estimateMessageTokens});if(G.status==="failed")$.logger?.debug("Basic compaction returned best-effort projection",{budgetWarnings:G.warnings.map((U)=>U.code),projectedTokens:G.estimatedTokens,targetTokens:W,maxInputTokens:$.context.budget.request.maxInputTokens});let K=G.messages;if(!qO($.context.messages,K))return;let F=V+J,A=UB(K,$.estimateMessageTokens),D=G.actions.filter((U)=>U.reason==="over_budget"||U.reason==="tool_pair_boundary").length;return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:K.length,messagesRemoved:$.context.messages.length-K.length,tokensBefore:F,tokensAfter:A,budgetStatus:G.status,budgetActions:D,budgetWarnings:G.warnings.map((U)=>U.code),targetTokens:W,maxInputTokens:$.context.budget.request.maxInputTokens}),{messages:K,budget:{policyIntent:"basic_compaction_projection",actionCount:D,warningCount:G.warnings.length,liveTailHandling:G.liveTailHandling}}}var NO=0.5;function zB($){try{return JSON.stringify($).length}catch{return String($).length}}function EO($){let W=0,Z=0,Q=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let j of J.content){if(j.type!=="tool_result")continue;let X=zB(j.content);W+=1,Z+=X,Q=Math.max(Q,X)}}return{toolResultCount:W,toolResultSerializedChars:Z,maxToolResultSerializedChars:Q}}var wO={basic:({context:$,estimateMessageTokens:W,logger:Z})=>OB({context:$,estimateMessageTokens:W,logger:Z}),agentic:({context:$,providerConfig:W,compaction:Z,estimateMessageTokens:Q,logger:J})=>AB({context:$,providerConfig:W,summarizer:Z?.summarizer,preserveRecentTokens:Math.min(Z?.preserveRecentTokens??WB,$.budget.messages.targetTokens),estimateMessageTokens:Q,logger:J})};function CO($){let W=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Z=Math.min(0.95,Math.max(0.05,W));return Math.max(1,Math.floor(Math.min($.messageTriggerTokens,$.messageInputTokens*Z)))}function PO($){let W=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*NO):Math.floor($.triggerTokens*$B),Z=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(W,$.maxInputTokens,Z))}function TB($,W){return Math.max(1,Math.floor($-W))}function SO($){let W=0,Z=!1;for(let Q of $)if(Q.role==="user")Z=!0;else if(Q.role==="assistant"&&Z)W+=1,Z=!1;return W}function q4($,W={}){let Z=$.compaction;if(Z?.enabled!==!0)return;let Q=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=XB(),j=Z?.strategy??"basic",X=wO[j],Y=W.mode??"auto",V=Z?.compact?"custom":j;return async(B)=>{let H=B.apiMessages.reduce((o,p)=>o+J(p),0),G=RO({systemPrompt:B.systemPrompt,messages:B.apiMessages,tools:B.tools}),K=B.messages.reduce((o,p)=>o+J(p),0),F=Math.max(0,G-H),A=O4({maxInputTokens:B.model.info?.maxInputTokens,contextWindow:B.model.info?.contextWindow})??eV,D=A*B2,U=TB(D,F),L=G>=D;if($.logger?.debug("Context compaction diagnostics",{mode:Y,strategy:j,iteration:B.iteration,providerId:$.providerId,modelId:$.modelId,requestInputTokens:G,apiMessageTokens:H,messageInputTokens:K,requestOverheadTokens:F,maxInputTokens:A,requestTriggerTokens:D,messageTriggerTokens:U,thresholdRatio:B2,shouldCompact:L,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:zB(B.apiMessages),...EO(B.apiMessages)}),Y==="auto"&&!L)return;let _,M;if(Y==="auto")_=PO({maxInputTokens:A,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:D,messagePairCount:SO(B.messages)}),M=TB(_,F);else M=CO({messageInputTokens:K,messageTriggerTokens:U,manualTargetRatio:W.manualTargetRatio}),_=F+M;let T={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId,iteration:B.iteration,messages:B.messages,model:B.model,mode:Y,budget:{request:{inputTokens:G,maxInputTokens:A,triggerTokens:D,targetTokens:_,overheadTokens:F,thresholdRatio:B2,utilizationRatio:A>0?G/A:0},messages:{inputTokens:K,triggerTokens:U,targetTokens:M}}},O=Y==="manual"?"manual_compaction":"auto_compaction";B.emitStatusNotice?.(Y==="manual"?"compacting":"auto-compacting",{kind:O,reason:O,phase:"started",iteration:B.iteration,triggerTokens:D,targetTokens:_,maxInputTokens:A,messageTargetTokens:M});let f=B.messages.length,E=Date.now(),N=Z?.compact?await Z.compact(T):await X({context:T,providerConfig:{...Q,abortSignal:B.abortSignal},compaction:Z,estimateMessageTokens:J,logger:$.logger}),l=Date.now()-E,k=$.sessionId??B.conversationId,P={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId??void 0};if(N?.messages){let o=N.messages.reduce((O0,F$)=>O0+J(F$),0),p=F+o;if($.logger?.log("Context compaction completed",{severity:"info",strategy:j,maxInputTokens:A,messageInputTokens:K,apiInputTokens:H,requestInputTokens:G,requestOverheadTokens:F,afterMessageTokens:o,afterRequestTokens:p,tokensSaved:G-p,utilizationBefore:`${(G/A*100).toFixed(1)}%`,utilizationAfter:`${(p/A*100).toFixed(1)}%`,thresholdTrigger:`${(B2*100).toFixed(1)}%`,messagesBefore:f,messagesAfter:N.messages.length,messagesRemoved:f-N.messages.length}),B.emitStatusNotice?.(Y==="manual"?"compacted":"auto-compacted",{kind:O,reason:O,phase:"completed",iteration:B.iteration,tokensBefore:G,tokensAfter:p,messagesBefore:f,messagesAfter:N.messages.length,maxInputTokens:A}),VW($.telemetry,{ulid:k,strategy:V,mode:Y,messagesBefore:f,messagesAfter:N.messages.length,messagesRemoved:f-N.messages.length,tokensBefore:G,tokensAfter:p,tokensSaved:G-p,triggerTokens:D,maxInputTokens:A,thresholdRatio:B2,durationMs:l,provider:$.providerId,modelId:$.modelId,...P}),N.budget&&(N.budget.actionCount>0||N.budget.warningCount>0))BV($.telemetry,{ulid:k,strategy:V,mode:Y,policyIntent:N.budget.policyIntent,actionCount:N.budget.actionCount,warningCount:N.budget.warningCount,liveTailHandling:N.budget.liveTailHandling,provider:$.providerId,modelId:$.modelId,...P}),B.emitStatusNotice?.("compaction-budget-adjusted",{kind:"compaction_budget_emergency",reason:"compaction_budget_emergency",iteration:B.iteration,policyIntent:N.budget.policyIntent,actionCount:N.budget.actionCount,warningCount:N.budget.warningCount})}else B.emitStatusNotice?.(Y==="manual"?"compaction-skipped":"auto-compaction-skipped",{kind:O,reason:O,phase:"skipped",iteration:B.iteration,maxInputTokens:A}),BW($.telemetry,{ulid:k,strategy:V,mode:Y,reason:"no_result",tokensBefore:G,triggerTokens:D,maxInputTokens:A,thresholdRatio:B2,durationMs:l,provider:$.providerId,modelId:$.modelId,...P});return N}}function M4($){return async(W)=>{let Z=$.getState?.(),Q=Z?V2(Z,W.messages):void 0;if(Z&&Q){let j=$.compact?await $.compact({...W,messages:Q,apiMessages:Q}):void 0;if(j?.messages){let X=j.systemPrompt??Z.system_prompt,Y=N8({sourceMessages:W.messages,compactedMessages:j.messages,conversationId:W.conversationId,systemPrompt:X});return await $.saveState?.(Y),{...j,...X!==void 0?{systemPrompt:X}:{}}}return{messages:Q,...j?.systemPrompt!==void 0?{systemPrompt:j.systemPrompt}:Z.system_prompt!==void 0?{systemPrompt:Z.system_prompt}:{}}}let J=$.compact?await $.compact(W):void 0;if(J?.messages){let j=N8({sourceMessages:W.messages,compactedMessages:J.messages,conversationId:W.conversationId,systemPrompt:J.systemPrompt});await $.saveState?.(j)}return J}}var BG={};w(BG,{zodToJsonSchema:()=>nq,validateWithZod:()=>iq,truncateCommandOutput:()=>F2,resolveToolRoutingConfig:()=>x8,resolveToolPresetName:()=>r1,resolveCoreSelectedToolIds:()=>tW,getCoreHeadlessToolNames:()=>r4,getCoreDefaultEnabledToolIds:()=>sW,getCoreBuiltinToolCatalog:()=>E2,getCoreAcpToolNames:()=>eW,createWebFetchTool:()=>H3,createWebFetchExecutor:()=>x4,createToolPoliciesWithPreset:()=>IW,createSubmitAndExitTool:()=>A3,createSkillsTool:()=>U2,createShellTool:()=>h4,createShellExecutor:()=>A2,createSearchTool:()=>B3,createSearchExecutor:()=>I4,createReadFilesTool:()=>V3,createFileReadExecutor:()=>k4,createEditorTool:()=>K3,createEditorExecutor:()=>L2,createDefaultToolsWithPreset:()=>xW,createDefaultTools:()=>E$,createDefaultShellExecutor:()=>g4,createDefaultExecutors:()=>k8,createBuiltinTools:()=>w2,createAskQuestionTool:()=>F3,createApplyPatchTool:()=>G3,createApplyPatchExecutor:()=>_2,computePatchChanges:()=>b8,WebFetchRequestSchema:()=>j3,ToolPresets:()=>s0,TEAM_TOOL_NAMES:()=>v8,SubmitInputSchema:()=>y4,StructuredCommandInputSchema:()=>G2,SkillsInputSchema:()=>S4,SearchCodebaseInputSchema:()=>N4,RunCommandsInputSchema:()=>E4,ReadFilesInputSchema:()=>R4,ReadFileRequestSchema:()=>CW,PatchActionType:()=>D2,MAX_COMMAND_OUTPUT_CHARS:()=>u1,FetchWebContentInputSchema:()=>w4,EditFileInputSchema:()=>C4,DefaultToolNames:()=>z0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>I8,CommandExitError:()=>d1,AskQuestionInputSchema:()=>b4,ApplyPatchInputSchema:()=>P4,ALL_DEFAULT_TOOL_NAMES:()=>q$});import{validateWithZod as iq,zodToJsonSchema as nq}from"@cline/shared";var z0={READ_FILES:"read_files",SEARCH_CODEBASE:"search_codebase",RUN_COMMANDS:"run_commands",FETCH_WEB_CONTENT:"fetch_web_content",APPLY_PATCH:"apply_patch",EDITOR:"editor",SKILLS:"skills",ASK:"ask_question",SUBMIT_AND_EXIT:"submit_and_exit"},q$=[z0.READ_FILES,z0.SEARCH_CODEBASE,z0.RUN_COMMANDS,z0.FETCH_WEB_CONTENT,z0.APPLY_PATCH,z0.EDITOR,z0.SKILLS,z0.ASK,z0.SUBMIT_AND_EXIT];U0();import{createTool as R$,getDefaultShell as cO,getShellKind as uO,validateWithZod as N$,zodToJsonSchema as l1}from"@cline/shared";var NW="__clineInternalTelemetry";function MB($){let W=$?.__clineInternalTelemetry;return W&&typeof W==="object"&&"capture"in W&&typeof W.capture==="function"?W:void 0}import{spawn as xB}from"node:child_process";import{StringDecoder as xO}from"node:string_decoder";import{getDefaultShell as gO,getShellArgs as mO}from"@cline/shared";import{validateWithZod as yO}from"@cline/shared";import{z}from"zod";var M$=6000,H2=z.string().describe("The absolute path of a text file to read content from"),EW=z.object({start_line:z.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:z.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"),CW=z.object({path:H2,start_line:EW.shape.start_line,end_line:EW.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds. Always include path; start_line/end_line must be on the same object as the path they apply to, never in a separate array element"),R4=z.object({files:z.array(CW).describe("Array of file read requests; each element is one file and must include path. Omit start_line/end_line or set them to null to read from the start; provide integers on the same object as the path to return only that inclusive one-based line range — never emit a range as its own array element. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),RB={start_line:EW.shape.start_line,end_line:EW.shape.end_line},w8=z.union([CW,z.object({file_path:H2,...RB}).transform(({file_path:$,...W})=>({path:$,...W})),z.object({filePath:H2,...RB}).transform(({filePath:$,...W})=>({path:$,...W}))]),NB=z.union([R4,w8,z.array(w8),z.array(z.string()),z.string(),z.object({files:z.array(z.union([H2,w8]))}),z.object({files:w8}),z.object({files:H2}),z.object({file_paths:z.array(H2)}),z.object({file_paths:z.string()}),z.object({paths:z.array(z.union([H2,w8]))}),z.object({paths:w8}),z.object({paths:z.string()})]),N4=z.object({queries:z.array(z.string()).describe("Array of regex search queries to execute")}),EB=z.union([N4,z.array(z.string()),z.string(),z.object({queries:z.string()})]),wW=z.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${M$*2} characters) to avoid timeouts.`),G2=z.object({command:z.string().min(1).describe("The executable to run directly without shell parsing."),args:z.array(z.string()).optional().describe("Optional argv list passed directly to the executable.")}),wB=z.union([wW,G2]),E4=z.object({commands:z.array(wW).describe("Array of complete shell command strings to execute.")}),bO=z.object({commands:z.array(wB)}),CB=z.union([E4,bO,z.object({commands:wB}),z.array(G2),G2,z.object({command:wW}),z.object({cmd:wW}),z.array(z.string()),z.string()]),j3=z.object({url:z.string().describe("The URL to fetch"),prompt:z.string().min(2).describe("Analysis prompt for the fetched content")}),w4=z.object({requests:z.array(j3).describe("Array of the URLs for the web fetch requests")}),C4=z.object({path:z.string().min(1).describe("The absolute path for the action to be performed on"),old_text:z.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 ${M$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:z.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 ${M$} 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:z.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."),P4=z.object({input:z.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."),PB=z.union([P4,z.string()]),S4=z.object({skill:z.string().min(1).describe("Name of the skill to execute."),args:z.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),b4=z.object({question:z.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:z.array(z.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),y4=z.object({summary:z.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:z.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.
|
|
91
91
|
'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
|
|
92
|
-
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
|
|
92
|
+
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 K2($){if($ instanceof Error)return $.message;return String($)}function bB($){if(typeof $.old_text==="string"&&$.old_text.length>M$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${M$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>M$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${M$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class C8 extends Error{timeoutMs;constructor($,W){super($);this.name="TimeoutError",this.timeoutMs=W}}function c1($,W,Z){return Promise.race([$,new Promise((Q,J)=>{setTimeout(()=>J(new C8(Z,W)),W)})])}function PW($){let{path:W,start_line:Z,end_line:Q}=$;if(Z==null&&Q==null)return W;return`${W}:${Z??1}-${Q??"EOF"}`}function yB($){let{start_line:W,end_line:Z}=$;if(W==null||Z==null||W<=Z)return null;return`start_line must be less than or equal to end_line (received start_line: ${W}, end_line: ${Z})`}var hO=new Set(["start_line","end_line"]);function kO($){if($===null||typeof $!=="object"||Array.isArray($))return!1;let W=Object.keys($);return W.length>0&&W.every((Z)=>hO.has(Z))}function SB($){let W=[];for(let Z of $){if(kO(Z)){let Q=W[W.length-1];if(typeof Q==="string"){W[W.length-1]={path:Q,...Z};continue}if(Q!==null&&typeof Q==="object"&&!Array.isArray(Q)&&"path"in Q&&Object.keys(Z).every((J)=>!(J in Q))){W[W.length-1]={...Q,...Z};continue}}W.push(Z)}return W}function hB($){if(Array.isArray($))return SB($);if($!==null&&typeof $==="object")for(let W of["files","paths"]){let Z=$[W];if(Array.isArray(Z))return{...$,[W]:SB(Z)}}return $}function kB($){let W=yO(CB,$);if(typeof W==="string")return[W];if(Array.isArray(W))return W;if("commands"in W)return Array.isArray(W.commands)?W.commands:[W.commands];if("command"in W)return"args"in W?[W]:[W.command];if("cmd"in W)return[W.cmd];return[W]}function IO($){if(typeof $==="string")return $;let W=$.args??[];if(W.length===0)return $.command;let Z=W.map((Q)=>/[\s"]/u.test(Q)?JSON.stringify(Q):Q);return`${$.command} ${Z.join(" ")}`}var X3=200;function IB($){let W=IO($);if(W.length<=X3)return W;let Z=W.length-X3;return`${W.slice(0,X3)} ... [command truncated: ${Z} more chars; full command is in the tool call input]`}var u1=48000;function F2($,W={}){let Z=W.maxChars??48000,Q=W.totalChars??$.length;if($.length<=Z&&Q<=Z)return $;let J=Math.ceil(Z/2),j=Math.max(1,Z-J);return`${$.slice(0,J)}
|
|
93
93
|
[... output truncated: ${Q} chars total. Refine the command (grep, head, tail) to view the elided middle ...]
|
|
94
|
-
`+$.slice(-j)}var
|
|
94
|
+
`+$.slice(-j)}var P8=2000,Y3=2000,SW=48000,S8=48000;class d1 extends Error{exitCode;output;constructor($,W){super(`Command exited with code ${$}`);this.exitCode=$;this.output=W;this.name="CommandExitError"}}function gB($){let W=Math.ceil($/2),Z=Math.max(1,$-W),Q=new xO("utf8"),J="",j="",X=0,Y=(V)=>{if(!V)return;X+=V.length;let B=W-J.length;if(B>0){J+=V.slice(0,B),j=(j+V.slice(B)).slice(-Z);return}j=(j+V).slice(-Z)};return{append(V){Y(Q.write(V))},snapshot(){return Y(Q.end()),{text:J+j,totalChars:X,dropped:X>J.length+j.length}}}}function vO($,W,Z,Q,J){return new Promise((j,X)=>{let Y=process.platform==="win32",V=xB($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!Y,windowsHide:!0}),B=V.pid,H=gB(Q),G=gB(Q),K=!1,F=!1,A=(T)=>{if(F)return;F=!0,T()},D=()=>{if(!B)return;if(Y){xB("taskkill",["/pid",String(B),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-B,"SIGKILL")}catch{V.kill("SIGKILL")}},U=(T)=>{K=!0,D(),A(()=>X(T))},L=setTimeout(()=>U(new C8(`Command timed out after ${Z}ms`,Z)),Z),_=()=>U(Error("Command was aborted"));if(W.signal)W.signal.addEventListener("abort",_);let M=()=>{clearTimeout(L),W.signal?.removeEventListener("abort",_)};V.stdout?.on("data",(T)=>{H.append(T)}),V.stderr?.on("data",(T)=>{G.append(T)}),V.on("close",(T)=>{if(M(),K)return;let O=H.snapshot(),f=G.snapshot();if(T!==0){let E=T??1,N=J?O.text+(f.text?`
|
|
95
95
|
[stderr]
|
|
96
|
-
${
|
|
97
|
-
${N}`:`[Command exited with code ${
|
|
96
|
+
${f.text}`:""):O.text,l=O.dropped||J&&f.dropped,k=J?O.totalChars+f.totalChars:O.totalChars;if(l||N.length>Q)N=F2(N,{maxChars:Q,totalChars:k});let P=N.length>0?`[Command exited with code ${E}]
|
|
97
|
+
${N}`:`[Command exited with code ${E}]`;A(()=>X(new d1(E,P)))}else{let E=J?O.text+(f.text?`
|
|
98
98
|
[stderr]
|
|
99
|
-
${
|
|
100
|
-
`))}return W}function
|
|
99
|
+
${f.text}`:""):O.text;if(O.dropped||J&&f.dropped||E.length>Q){let l=J?O.totalChars+f.totalChars:O.totalChars;E=F2(E,{maxChars:Q,totalChars:l})}A(()=>j(E))}}),V.on("error",(T)=>{M(),A(()=>X(Error(`Failed to execute command: ${T.message}`)))})})}function A2($={}){let{shell:W=gO(process.platform),timeoutMs:Z=30000,env:Q={},combineOutput:J=!0}=$,j=$.maxOutputChars??$.maxOutputBytes??u1;return(X,Y,V)=>{let B=typeof X!=="string";return vO({executable:B?X.command:W,args:B?X.args??[]:mO(W,X),cwd:Y,env:Q},V,Z,j,J)}}function mB($,W){let Z=$.metadata?.[W];return typeof Z==="string"?Z:void 0}function dO($,W){VV(MB($.metadata),{tool_name:"run_commands",effective_timeout_ms:W.effectiveTimeoutMs,timeout_source:W.timeoutSource,command_count:W.commandCount,duration_ms:W.durationMs,ulid:$.sessionId,mode:mB($,"mode"),source:mB($,"source"),session_id:$.sessionId,agent_id:$.agentId,conversation_id:$.conversationId,run_id:$.runId,iteration:$.iteration,tool_call_id:$.toolCallId})}function lO($){let W=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return W?.[1]??W?.[2]??W?.[3]}function pO($){let W=[];for(let Z=0;Z<$.length;Z+=1){let Q=$[Z],J=lO(Q);if(!J){W.push(Q);continue}let j=$.findIndex((Y,V)=>V>Z&&Y.trim()===J);if(j===-1){W.push(Q);continue}let X=[Q];while(Z<j){Z+=1;let Y=$[Z];X.push(Y)}W.push(X.join(`
|
|
100
|
+
`))}return W}function rO($){let W=[],Z=[],Q=()=>{if(Z.length>0)W.push(...pO(Z)),Z=[]};for(let J of $){if(typeof J==="string"){Z.push(J);continue}Q(),W.push(J)}return Q(),W}async function iO($,W){let{executor:Z,cwd:Q,context:J,timeoutMs:j,timeoutSource:X}=W;return Promise.all($.map(async(Y)=>{let V=Date.now(),B=IB(Y);try{let H=await c1(Z(Y,Q,J),j,`Command timed out after ${j}ms`);return{query:B,result:H,success:!0}}catch(H){if(H instanceof C8)dO(J,{effectiveTimeoutMs:H.timeoutMs,timeoutSource:X,commandCount:$.length,durationMs:Date.now()-V});if(H instanceof d1)return{query:B,result:H.output,error:H.message,success:!1};let G=K2(H);return{query:B,result:"",error:`Command failed: ${G}`,success:!1}}}))}function V3($,W={}){let Z=W.fileReadTimeoutMs??1e4;return R$({name:"read_files",description:`Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided on the same file entry as its path. When you already know multiple files you need, read them together in one call, and call this tool in the same response as other independent tool calls. Each read returns at most ${P8} lines / ~${Math.round(SW/1024)}k characters; longer files report their total line count, page through them with start_line/end_line on that file's entry. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. `,inputSchema:l1(R4),timeoutMs:Z*2,retryable:!0,maxRetries:1,execute:async(Q,J)=>{let j=N$(NB,hB(Q)),X;if(typeof j==="string")X=[{path:j}];else if(Array.isArray(j))X=j.map((Y)=>typeof Y==="string"?{path:Y}:Y);else if("files"in j)X=(Array.isArray(j.files)?j.files:[j.files]).map((V)=>typeof V==="string"?{path:V}:V);else if("file_paths"in j)X=(Array.isArray(j.file_paths)?j.file_paths:[j.file_paths]).map((V)=>({path:V}));else if("paths"in j)X=(Array.isArray(j.paths)?j.paths:[j.paths]).map((V)=>typeof V==="string"?{path:V}:V);else X=[j];return Promise.all(X.map(async(Y)=>{let V=yB(Y);if(V)return{query:PW(Y),result:"",error:`Invalid file range: ${V}`,success:!1};try{let B=await c1($(Y,J),Z,`File read timed out after ${Z}ms`);return{query:PW(Y),result:B,success:!0}}catch(B){let H=K2(B);return{query:PW(Y),result:"",error:`Error reading file: ${H}`,success:!1}}}))}})}function B3($,W={}){let Z=W.searchTimeoutMs??30000,Q=W.cwd??process.cwd();return R$({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(S8/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:l1(N4),timeoutMs:Z*2,retryable:!0,maxRetries:1,execute:async(J,j)=>{let X=N$(EB,J),Y=Array.isArray(X)?X:typeof X==="object"?Array.isArray(X.queries)?X.queries:[X.queries]:[X];return Promise.all(Y.map(async(V)=>{try{let B=await c1($(V,Q,j),Z,`Search timed out after ${Z}ms`);return{query:V,result:B,success:!0}}catch(B){let H=K2(B);return{query:V,result:"",error:`Search failed: ${H}`,success:!1}}}))}})}var vB="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 nO($,W){if($==="powershell"||$==="cmd"){let Q=$==="powershell"?"PowerShell":"cmd.exe",J=$==="powershell"?"';'":"'&&'";return"Run non-interactive shell commands from the root of the workspace in Windows environment. "+vB+`Output beyond ~${Math.round(u1/1000)}k characters is middle-truncated (start and end preserved); filter output when you need specific sections. Commands run through ${Q}; quote paths and arguments for ${Q} and use ${J} to sequence commands. Include multiple commands in the same call when they are independent and safe to run concurrently. When independent reads, searches, or edits are also needed, call those tools in the same response.`}let Z=$==="wsl"?"Commands run through bash in WSL (wsl.exe); the Windows working directory is mounted under /mnt/<drive>. ":W?"Commands run through a POSIX (bash-compatible) shell on Windows. ":"";return"Run non-interactive shell commands from the root of the workspace. "+vB+Z+`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(u1/1000)}k characters is middle-truncated (start and end preserved); pipe through grep/head/tail when you need specific sections of large output. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.`}function h4($,W={}){let Z=W.bashTimeoutMs??30000,Q=W.bashTimeoutMs===void 0?"default_setting":"configured_setting",J=W.cwd??process.cwd(),j=process.platform==="win32",X=W.shell,Y=typeof X==="function"?X:()=>X??cO(process.platform),V=()=>nO(uO(Y()),j),B=R$({name:"run_commands",description:V(),inputSchema:l1(E4),timeoutMs:Z*2,retryable:!1,maxRetries:0,execute:async(H,G)=>{let K=rO(kB(H));return iO(K,{executor:$,cwd:J,context:G,timeoutMs:Z,timeoutSource:Q})}});if(typeof X==="function")Object.defineProperty(B,"description",{get:V,enumerable:!0});return B}function H3($,W={}){let Z=W.webFetchTimeoutMs??30000;return R$({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:l1(w4),timeoutMs:Z*2,retryable:!0,maxRetries:2,execute:async(Q,J)=>{let j=N$(w4,Q);return Promise.all(j.requests.map(async(X)=>{try{let Y=await c1($(X.url,X.prompt,J),Z,`Web fetch timed out after ${Z}ms`);return{query:X.url,result:Y,success:!0}}catch(Y){let V=K2(Y);return{query:X.url,result:"",error:`Error fetching web content: ${V}`,success:!1}}}))}})}var aO=`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:
|
|
101
101
|
|
|
102
102
|
*** Begin Patch
|
|
103
103
|
*** Update File: path/to/file.ts
|
|
@@ -133,109 +133,109 @@ Example:
|
|
|
133
133
|
</div>
|
|
134
134
|
);
|
|
135
135
|
}
|
|
136
|
-
*** End Patch`;function
|
|
137
|
-
`),J=0,j=[
|
|
138
|
-
${this.lines[this.index]}`);if(Y?.trim()){let U=
|
|
139
|
-
`);this.addWarning({path:this.currentPath||W,chunkIndex:Z.chunks.length,message:`Could not find matching context (similarity: ${D.toFixed(2)}). Chunk skipped.`,context:U.length>200?`${U.substring(0,200)}...`:U}),this.index=G}else{this.fuzz+=A;for(let U of H)U.origIndex+=F,Z.chunks.push(U);J=F+B.length,this.index=G}}return Z}parseDelete($){if(this.checkDuplicate($,"delete"),!($ in this.currentFiles))throw new G0(`Delete File Error: Missing File: ${$}`);this.patch.actions[$]={type:"delete",chunks:[]},this.index++}parseAdd($){if(this.checkDuplicate($,"add"),$ in this.currentFiles)throw new G0(`Add File Error: File already exists: ${$}`);this.index++;let W=[],Z=[
|
|
140
|
-
`),chunks:[]}}}function
|
|
141
|
-
`));for(let B=X;B<$.length;B++){let H=
|
|
142
|
-
`));if(H===Y)return[B,0,1];let G=
|
|
143
|
-
`)),G=
|
|
144
|
-
`));if(H===G)return[B,1,1]}for(let B=X;B<$.length;B++){let H=
|
|
145
|
-
`)),G=
|
|
146
|
-
`));if(H===G)return[B,100,1]}let V=0.66;for(let B=X;B<$.length;B++){let H=
|
|
147
|
-
`)),G=
|
|
148
|
-
`).map((W)=>W.replace(/\r$/,""))}function
|
|
136
|
+
*** End Patch`;function G3($,W={}){let Z=W.applyPatchTimeoutMs??30000,Q=W.cwd??process.cwd();return R$({name:"apply_patch",description:aO,inputSchema:l1(P4),timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(J,j)=>{let X=N$(PB,J),Y=typeof X==="string"?X:X.input;try{return{query:"apply_patch",result:await c1($({input:Y},Q,j),Z,`apply_patch timed out after ${Z}ms`),success:!0}}catch(V){return{query:"apply_patch",result:"",error:`apply_patch failed: ${K2(V)}`,success:!1}}}})}function K3($,W={}){let Z=W.editorTimeoutMs??30000,Q=W.cwd??process.cwd();return R$({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:l1(C4),timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(J,j)=>{let X=N$(C4,J),Y=X.insert_line==null?"edit":"insert",V=bB(X);if(V)return{query:`${Y}:${X.path}`,result:"",error:V,success:!1};try{let B=await c1($(X,Q,j),Z,`Editor operation timed out after ${Z}ms`);return{query:`${Y}:${X.path}`,result:B,success:!0}}catch(B){let H=K2(B);return{query:`${Y}:${X.path}`,result:"",error:`Editor operation failed: ${H}`,success:!1}}}})}function U2($,W={}){let Z=W.skillsTimeoutMs??15000,Q='Execute a skill within the main conversation. When users ask you to perform tasks, check if any available skills match. When users reference a slash command, invoke it with this tool. Input: `skill` (required) and optional `args`. Example: `skill: "pdf"`, `skill: "commit", args: "-m \\"Fix bug\\""`, `skill: "review-pr", args: "123"`, `skill: "ms-office-suite:pdf"`. When a skill matches the user\'s request, invoking this tool is a blocking requirement before any other response. Never mention a skill without invoking this tool.',J=R$({name:"skills",description:Q,inputSchema:l1(S4),timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(j,X)=>{let Y=N$(S4,j);return c1($(Y.skill,Y.args||void 0,X),Z,`Skills operation timed out after ${Z}ms`)}});return Object.defineProperty(J,"description",{get(){let j=$.configuredSkills?.filter((X)=>!X.disabled).map((X)=>X.name);if(j&&j.length>0)return`${Q} Available skills: ${j.join(", ")}.`;return Q},enumerable:!0,configurable:!0}),J}function F3($){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:l1(b4),retryable:!1,maxRetries:0,execute:async(W,Z)=>{let Q=N$(b4,W);return $(Q.question,Q.options,Z)}}}function A3($,W={}){let Z=W.submitTimeoutMs??15000;return R$({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:l1(y4),lifecycle:{completesRun:!0},timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(Q,J)=>{let j=N$(y4,Q);return c1($(j.summary,j.verified,J),Z,`submit_and_exit timed out after ${Z}ms`)}})}function E$($){let{executors:W,enableReadFiles:Z=!0,enableSearch:Q=!0,enableBash:J=!0,enableWebFetch:j=!0,enableApplyPatch:X=!1,enableEditor:Y=!0,enableSkills:V=!0,enableAskQuestion:B=!0,enableSubmitAndExit:H=!1,...G}=$,K=[];if(Z&&W.readFile)K.push(V3(W.readFile,G));if(Q&&W.search)K.push(B3(W.search,G));if(J&&W.bash)K.push(h4(W.bash,G));if(j&&W.webFetch)K.push(H3(W.webFetch,G));if(Y&&W.editor)K.push(K3(W.editor,G));else if(X&&W.applyPatch)K.push(G3(W.applyPatch,G));if(V&&W.skills)K.push(U2(W.skills,G));let F=H?W.submit:void 0;if(B&&W.askQuestion&&!F)K.push(F3(W.askQuestion));if(F)K.push(A3(F,G));return K}import*as a0 from"node:fs/promises";import*as o0 from"node:path";var n={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},uB=["%%bash","apply_patch","EOF","```"],D2;((Q)=>{Q.ADD="add";Q.DELETE="delete";Q.UPDATE="update"})(D2||={});class G0 extends Error{constructor($){super($);this.name="DiffError"}}function n0($){let W={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(Z)=>W[Z]??Z).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class U3{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor($,W){this.lines=$;this.currentFiles=W}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(n.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(n.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(n.UPDATE)){this.parseUpdate($.substring(n.UPDATE.length).trim());return}if($?.startsWith(n.DELETE)){this.parseDelete($.substring(n.DELETE.length).trim());return}if($?.startsWith(n.ADD)){this.parseAdd($.substring(n.ADD.length).trim());return}throw new G0(`Unknown line while parsing: ${$}`)}checkDuplicate($,W){if($ in this.patch.actions)throw new G0(`Duplicate ${W} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let W=this.lines[this.index]?.startsWith(n.MOVE)?(this.lines[this.index++]??"").substring(n.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new G0(`Update File Error: Missing File: ${$}`);let Z=this.currentFiles[$]??"",Q=this.parseUpdateFile(Z,$);Q.movePath=W,this.patch.actions[$]=Q,this.currentPath=void 0}parseUpdateFile($,W){let Z={type:"update",chunks:[]},Q=$.split(`
|
|
137
|
+
`),J=0,j=[n.END,n.UPDATE,n.DELETE,n.ADD,n.END_FILE];while(!j.some((X)=>this.lines[this.index]?.startsWith(X.trim()))){let X=this.lines[this.index],Y=X?.startsWith("@@ ")?X.substring(3):void 0;if(Y!==void 0||(X==="@@"?X:void 0)!==void 0)this.index++;else if(J!==0)throw new G0(`Invalid Line:
|
|
138
|
+
${this.lines[this.index]}`);if(Y?.trim()){let U=n0(Y.trim());for(let L=J;L<Q.length;L++){let _=Q[L];if(_&&(n0(_)===U||n0(_.trim())===U)){if(J=L+1,n0(_.trim())===U&&n0(_)!==U)this.fuzz++;break}}}let[B,H,G,K]=tO(this.lines,this.index),[F,A,D]=sO(Q,B,J,K);if(F===-1){let U=B.join(`
|
|
139
|
+
`);this.addWarning({path:this.currentPath||W,chunkIndex:Z.chunks.length,message:`Could not find matching context (similarity: ${D.toFixed(2)}). Chunk skipped.`,context:U.length>200?`${U.substring(0,200)}...`:U}),this.index=G}else{this.fuzz+=A;for(let U of H)U.origIndex+=F,Z.chunks.push(U);J=F+B.length,this.index=G}}return Z}parseDelete($){if(this.checkDuplicate($,"delete"),!($ in this.currentFiles))throw new G0(`Delete File Error: Missing File: ${$}`);this.patch.actions[$]={type:"delete",chunks:[]},this.index++}parseAdd($){if(this.checkDuplicate($,"add"),$ in this.currentFiles)throw new G0(`Add File Error: File already exists: ${$}`);this.index++;let W=[],Z=[n.END,n.UPDATE,n.DELETE,n.ADD];while(this.hasMoreLines()&&!Z.some((Q)=>this.lines[this.index]?.startsWith(Q.trim()))){let Q=this.lines[this.index++];if(Q===void 0)break;if(!Q.startsWith("+"))throw new G0(`Invalid Add File line (missing '+'): ${Q}`);W.push(Q.substring(1))}this.patch.actions[$]={type:"add",newFile:W.join(`
|
|
140
|
+
`),chunks:[]}}}function cB($,W){let Z=$.length>W.length?$:W,Q=$.length>W.length?W:$;if(Z.length===0)return 1;let J=oO(Q,Z);return(Z.length-J)/Z.length}function oO($,W){let Z=W.length+1,Q=$.length+1,J=Array(Z*Q).fill(0),j=(Y,V)=>J[Y*Q+V]??0,X=(Y,V,B)=>{J[Y*Q+V]=B};for(let Y=0;Y<=W.length;Y++)X(Y,0,Y);for(let Y=0;Y<=$.length;Y++)X(0,Y,Y);for(let Y=1;Y<=W.length;Y++)for(let V=1;V<=$.length;V++)if(W[Y-1]===$[V-1])X(Y,V,j(Y-1,V-1));else X(Y,V,1+Math.min(j(Y-1,V-1),j(Y,V-1),j(Y-1,V)));return j(W.length,$.length)}function sO($,W,Z,Q){if(W.length===0)return[Z,0,1];let J=0,j=(X)=>{let Y=n0(W.join(`
|
|
141
|
+
`));for(let B=X;B<$.length;B++){let H=n0($.slice(B,B+W.length).join(`
|
|
142
|
+
`));if(H===Y)return[B,0,1];let G=cB(H,Y);if(G>J)J=G}for(let B=X;B<$.length;B++){let H=n0($.slice(B,B+W.length).map((K)=>K.trimEnd()).join(`
|
|
143
|
+
`)),G=n0(W.map((K)=>K.trimEnd()).join(`
|
|
144
|
+
`));if(H===G)return[B,1,1]}for(let B=X;B<$.length;B++){let H=n0($.slice(B,B+W.length).map((K)=>K.trim()).join(`
|
|
145
|
+
`)),G=n0(W.map((K)=>K.trim()).join(`
|
|
146
|
+
`));if(H===G)return[B,100,1]}let V=0.66;for(let B=X;B<$.length;B++){let H=n0($.slice(B,B+W.length).join(`
|
|
147
|
+
`)),G=cB(H,Y);if(G>=V)return[B,1000,G];if(G>J)J=G}return[-1,0,J]};if(Q){let[X,Y,V]=j($.length-W.length);if(X!==-1)return[X,Y,V];return[X,Y,V]=j(Z),[X,Y+1e4,V]}return j(Z)}function tO($,W){let Z=W,Q=[],J=[],j=[],X=[],Y="keep",V=["@@",n.END,n.UPDATE,n.DELETE,n.ADD,n.END_FILE];while(Z<$.length){let B=$[Z];if(!B||V.some((K)=>B.startsWith(K.trim())))break;if(B==="***")break;if(B.startsWith("***"))throw new G0(`Invalid line: ${B}`);Z++;let H=Y,G=B;if(G[0]==="+")Y="add";else if(G[0]==="-")Y="delete";else if(G[0]===" ")Y="keep";else Y="keep",G=` ${G}`;if(G=G.slice(1),Y==="keep"&&H!==Y){if(j.length||J.length)X.push({origIndex:Q.length-J.length,delLines:J,insLines:j});J=[],j=[]}if(Y==="delete")J.push(G),Q.push(G);else if(Y==="add")j.push(G);else Q.push(G)}if(j.length||J.length)X.push({origIndex:Q.length-J.length,delLines:J,insLines:j});if(Z<$.length&&$[Z]===n.END_FILE)return Z++,[Q,X,Z,!0];return[Q,X,Z,!1]}function D3($,W,Z){let Q=o0.isAbsolute(W),J=Q?o0.normalize(W):o0.resolve($,W);if(!Z||Q)return J;let j=o0.relative($,J);if(j.startsWith("..")||o0.isAbsolute(j))throw new G0(`Path must stay within cwd: ${W}`);return J}function eO($){return $.split(`
|
|
148
|
+
`).map((W)=>W.replace(/\r$/,""))}function dB($){if($.trim()==="")return!1;return uB.some((W)=>$.startsWith(W))}function $T($){let W=0,Z=$.length;while(W<Z&&dB($[W]??""))W++;while(Z>W&&dB($[Z-1]??""))Z--;return $.slice(W,Z)}function WT($){let W=eO($),Z=W.findIndex((X)=>X.startsWith(n.BEGIN)),Q=-1;for(let X=W.length-1;X>=0;X--)if(W[X]?.startsWith(n.END)){Q=X;break}if(Z!==-1||Q!==-1){if(Z===-1||Q===-1||Q<Z)throw new G0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:W.slice(Z,Q+1)}}let J=$T(W);while(J.length>0&&J[0]==="")J.shift();while(J.length>0&&J[J.length-1]==="")J.pop();return{lines:[n.BEGIN,...J,n.END]}}function ZT($,W){let Z=new Set;for(let Q of $)for(let J of W)if(Q.startsWith(J)){Z.add(Q.substring(J.length).trim());break}return[...Z]}function QT($,W,Z){if(W.length===0)return $;let Q=$.split(`
|
|
149
149
|
`),J=[],j=0;for(let X of W){if(X.origIndex>Q.length)throw new G0(`${Z}: chunk.origIndex ${X.origIndex} > lines.length ${Q.length}`);if(j>X.origIndex)throw new G0(`${Z}: currentIndex ${j} > chunk.origIndex ${X.origIndex}`);J.push(...Q.slice(j,X.origIndex)),J.push(...X.insLines),j=X.origIndex+X.delLines.length}return J.push(...Q.slice(j)),J.join(`
|
|
150
|
-
`)}async function
|
|
151
|
-
`)}return j}function
|
|
150
|
+
`)}async function JT($,W,Z,Q){let J=ZT($,[n.UPDATE,n.DELETE]),j={};for(let X of J){let Y=D3(W,X,Q),V;try{V=await a0.readFile(Y,Z)}catch{throw new G0(`File not found: ${X}`)}j[X]=V.replace(/\r\n/g,`
|
|
151
|
+
`)}return j}function jT($,W){let Z={};for(let[Q,J]of Object.entries($.actions))switch(J.type){case"delete":Z[Q]={type:"delete",oldContent:W[Q]};break;case"add":if(J.newFile===void 0)throw new G0("ADD action without file content");Z[Q]={type:"add",newContent:J.newFile};break;case"update":Z[Q]={type:"update",oldContent:W[Q],newContent:QT(W[Q]??"",J.chunks,Q),movePath:J.movePath};break}return Z}function XT($){let W=[`Patch could not be applied because ${$.length} hunk${$.length===1?"":"s"} did not match the current file content.`];for(let Z of $){let Q=Z.chunkIndex===void 0?"unknown":String(Z.chunkIndex+1);if(W.push(`${Z.path}: hunk ${Q}: ${Z.message}`),Z.context)W.push(`Context:
|
|
152
152
|
${Z.context}`)}return W.join(`
|
|
153
|
-
`)}async function
|
|
154
|
-
`)}}import*as A1 from"node:fs/promises";import*as F1 from"node:path";function
|
|
153
|
+
`)}async function YT($,W,Z,Q){let J=[];for(let[j,X]of Object.entries($)){let Y=D3(W,j,Q);switch(X.type){case"delete":await a0.rm(Y,{force:!0}),J.push(`${j}: [deleted]`);break;case"add":if(X.newContent===void 0)throw new G0(`Cannot create ${j} with no content`);await a0.mkdir(o0.dirname(Y),{recursive:!0}),await a0.writeFile(Y,X.newContent,{encoding:Z}),J.push(j);break;case"update":{if(X.newContent===void 0)throw new G0(`UPDATE change for ${j} has no new content`);if(X.movePath){let V=D3(W,X.movePath,Q);await a0.mkdir(o0.dirname(V),{recursive:!0}),await a0.writeFile(V,X.newContent,{encoding:Z}),await a0.rm(Y,{force:!0}),J.push(`${j} -> ${X.movePath}`)}else await a0.writeFile(Y,X.newContent,{encoding:Z}),J.push(j);break}}}return J}async function b8($,W,Z={}){let{encoding:Q="utf-8",restrictToCwd:J=!0}=Z,j=WT($),X=await JT(j.lines,W,Q,J),Y=new U3(j.lines,X),{patch:V,fuzz:B}=Y.parse();if(V.warnings&&V.warnings.length>0)throw new G0(XT(V.warnings));return{changes:jT(V,X),fuzz:B}}function _2($={}){let{encoding:W="utf-8",restrictToCwd:Z=!0}=$;return async(Q,J,j)=>{let{changes:X,fuzz:Y}=await b8(Q.input,J,{encoding:W,restrictToCwd:Z}),V=await YT(X,J,W,Z),B=["Successfully applied patch to the following files:"];for(let H of V)B.push(H);if(Y>0)B.push(`Note: Patch applied with fuzz factor ${Y}`);return B.join(`
|
|
154
|
+
`)}}import*as A1 from"node:fs/promises";import*as F1 from"node:path";function VT($,W,Z){let Q=F1.isAbsolute(W),J=Q?F1.normalize(W):F1.resolve($,W);if(!Z)return J;if(Q)return J;let j=F1.relative($,J);if(j.startsWith("..")||F1.isAbsolute(j))throw Error(`Path must stay within cwd: ${W}`);return J}function BT($,W){if(W.length===0)return 0;return $.split(W).length-1}function HT($,W,Z){let Q=$.split(`
|
|
155
155
|
`),J=W.split(`
|
|
156
156
|
`),j=0;while(j<Q.length&&j<J.length&&Q[j]===J[j])j++;let X=Q.length,Y=J.length;while(X>j&&Y>j&&Q[X-1]===J[Y-1])X--,Y--;let V=X-j,B=Y-j,H=V,G=B;if(V+B>Z)H=Math.min(V,Math.max(Math.ceil(Z/2),Z-B)),G=Math.min(B,Z-H);let K=["```diff"];for(let D=j;D<j+H;D++)K.push(`-${D+1}: ${Q[D]}`);for(let D=j;D<j+G;D++)K.push(`+${D+1}: ${J[D]}`);let F=V-H,A=B-G;if(F>0||A>0)K.push(`... diff truncated (${F} more removed, ${A} more added lines) ...`);return K.push("```"),K.join(`
|
|
157
|
-
`)}async function
|
|
158
|
-
${V}`}async function
|
|
157
|
+
`)}async function GT($,W,Z){return await A1.mkdir(F1.dirname($),{recursive:!0}),await A1.writeFile($,W,{encoding:Z}),`File created successfully at: ${$}`}async function KT($){try{return await A1.access($),!0}catch{return!1}}async function FT($,W,Z,Q,J){let j=await A1.readFile($,Q),X=BT(j,W);if(X===0)throw Error(`No replacement performed: text not found in ${$}.`);if(X>1)throw Error(`No replacement performed: multiple occurrences of text found in ${$}.`);let Y=j.replace(W,Z??"");await A1.writeFile($,Y,{encoding:Q});let V=HT(j,Y,J);return`Edited ${$}
|
|
158
|
+
${V}`}async function AT($,W,Z,Q){let j=(await A1.readFile($,Q)).split(`
|
|
159
159
|
`),X=j.length+1;if(W<1||W>X)throw Error(`Invalid insert_line: ${W}. insert_line must be a positive one-based boundary line in the range 1-${X}. Use ${X} to append at EOF.`);let Y=W-1;return j.splice(Y,0,...Z.split(`
|
|
160
160
|
`)),await A1.writeFile($,j.join(`
|
|
161
|
-
`),{encoding:Q}),`Inserted content at line ${W} in ${$}.`}function
|
|
162
|
-
`),
|
|
163
|
-
|
|
164
|
-
[Showing lines ${X}-${
|
|
165
|
-
`).filter((U)=>U.trim());for(let U of D){if(A.length>=Z)break;let
|
|
166
|
-
`))}let F;try{F=new RegExp(V,"gim")}catch(_){throw Error(`Invalid regex pattern: ${V}. ${_ instanceof Error?_.message:""}`)}let A=[],D=0,U=await
|
|
167
|
-
`);for(let
|
|
168
|
-
Searched ${D} files.`;let
|
|
169
|
-
`))}}function
|
|
161
|
+
`),{encoding:Q}),`Inserted content at line ${W} in ${$}.`}function L2($={}){let{encoding:W="utf-8",restrictToCwd:Z=!0,maxDiffLines:Q=200}=$;return async(J,j,X)=>{let Y=VT(j,J.path,Z);if(J.insert_line!=null)return AT(Y,J.insert_line,J.new_text,W);if(!await KT(Y))return GT(Y,J.new_text,W);if(J.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return FT(Y,J.old_text,J.new_text,W,Q)}}import{createReadStream as UT}from"node:fs";import*as bW from"node:fs/promises";import*as w$ from"node:path";import{createInterface as DT}from"node:readline";import{resolveExistingFilePath as _T}from"@cline/shared/storage";var LT=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),fT={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},lB=1e8,OT=50000;function pB($){let{reason:W}=$;if(W instanceof Error)return W;if(W!==void 0)return Error(String(W));return Error("File read was aborted")}async function TT($,W,Z,Q,J,j){if(j?.aborted)throw pB(j);let X=Math.max(Q??1,1),Y=J??Number.POSITIVE_INFINITY,V=Number.isFinite(Y),B=V?Y:X+OT-1,H=[],G=0,K=0,F=!1,A=!1,D=Number.isFinite(Y)?Math.min(Y,X+P8-1):X+P8-1,U=Z?String(D).length+3:0,L=UT($,{encoding:W}),_=DT({input:L,crlfDelay:Number.POSITIVE_INFINITY}),M=j?()=>L.destroy(pB(j)):void 0;if(j&&M)j.addEventListener("abort",M,{once:!0});try{for await(let l of _){if(K+=1,K>Y){K=Y;break}if(!V&&F&&K>=B){A=!0;break}if(K<X||F)continue;if(H.length>=P8){F=!0;continue}let k=l;if(k.length>Y3)k=`${k.slice(0,Y3)} [line truncated]`;let P=G+k.length+U+1;if(P>SW&&H.length>0){F=!0;continue}H.push({lineNumber:K,text:k}),G=P}}finally{if(j&&M)j.removeEventListener("abort",M);_.close(),L.destroy()}let T=String(H[H.length-1]?.lineNumber??K).length,O=H.map(({lineNumber:l,text:k})=>Z?`${String(l).padStart(T," ")} | ${k}`:k).join(`
|
|
162
|
+
`),f=H[H.length-1]?.lineNumber;if(f===void 0)return O;let E=Math.min(Y,K);if(f>=E)return O;let N=A?`${K}+ lines`:E;return`${O}
|
|
163
|
+
|
|
164
|
+
[Showing lines ${X}-${f} of ${N}. Use start_line/end_line to read other sections.]`}function k4($={}){let{maxFileSizeBytes:W,encoding:Z,includeLineNumbers:Q}={...fT,...$};return async(J,j)=>{let{path:X,start_line:Y,end_line:V}=J,B=w$.isAbsolute(X)?w$.normalize(X):w$.resolve(process.cwd(),X),H=_T(B)??B,G=w$.extname(H).toLowerCase(),K=LT.get(G),F=await bW.stat(H);if(!F.isFile())throw Error(`Path is not a file: ${H}`);if(K){if(F.size>W)throw Error(`Image file too large: ${F.size} bytes (max: ${W} bytes).`);if(j.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let A=await bW.readFile(H);return[{type:"text",text:"Successfully read image"},{type:"image",data:A.toString("base64"),mediaType:K}]}if(F.size>lB)throw Error(`Text file too large to stream safely: ${F.size} bytes (max: ${lB} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return TT(H,Z,Q,Y,V,j.signal)}}import{spawn as eB}from"node:child_process";import*as $H from"node:fs/promises";import*as kW from"node:path";var sB={};w(sB,{prewarmFileIndex:()=>hW,getFileIndex:()=>p1,enrichPromptWithMentions:()=>h8});import{spawn as zT}from"node:child_process";import{readdir as qT}from"node:fs/promises";import L3 from"node:path";import{isMainThread as nB,parentPort as rB,Worker as MT}from"node:worker_threads";var RT=15000,NT=600000,ET=1000,wT=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function iB($){let W=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return W==="EACCES"||W==="EPERM"||W==="ENOENT"}var y8=new Map;function CT(){if(!nB)return!1;return!0}function PT($){if(y8.size<=1)return;for(let[W,Z]of y8.entries()){if(Z.pending)continue;if($-Z.lastAccessedAt>NT)y8.delete(W)}}function ST($,W){return L3.relative($,W).split(L3.sep).join("/")}async function bT($){let Z=(await new Promise((Q,J)=>{let j=zT("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"],windowsHide:!0}),X="",Y="";j.stdout.on("data",(V)=>{X+=V.toString()}),j.stderr.on("data",(V)=>{Y+=V.toString()}),j.on("error",J),j.on("close",(V)=>{if(V===0){Q(X);return}J(Error(Y||`rg exited with code ${V}`))})})).split(/\r?\n/).map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>Q.replace(/\\/g,"/"));return new Set(Z)}async function aB($,W,Z){let Q;try{Q=await qT(W,{withFileTypes:!0})}catch(J){if(iB(J))return;throw J}for(let J of Q){let j=L3.join(W,J.name);if(J.isDirectory()){if(wT.has(J.name))continue;try{await aB($,j,Z)}catch(X){if(iB(X))continue;throw X}continue}if(J.isFile())Z.add(ST($,j))}}async function yT($){let W=new Set;return await aB($,$,W),W}async function yW($){try{return await bT($)}catch{return yT($)}}function hT(){if(nB||!rB)return;let $=rB;$.on("message",(W)=>{if(W.type!=="index")return;yW(W.cwd).then((Z)=>{let Q={type:"indexResult",requestId:W.requestId,files:Array.from(Z)};$.postMessage(Q)}).catch((Z)=>{let Q={type:"indexResult",requestId:W.requestId,error:Z instanceof Error?Z.message:"Failed to build file index"};$.postMessage(Q)})})}class oB{worker=new MT(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",($)=>{if($.type!=="indexResult")return;let W=this.pending.get($.requestId);if(!W)return;if(this.pending.delete($.requestId),$.error){W.reject(Error($.error));return}W.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 W=++this.nextRequestId,Z=new Promise((J,j)=>{let X=setTimeout(()=>{this.pending.delete(W),J(null)},ET);X.unref(),this.pending.set(W,{resolve:(Y)=>{clearTimeout(X),J(Y)},reject:(Y)=>{clearTimeout(X),j(Y)}})}),Q={type:"index",requestId:W,cwd:$};return this.worker.postMessage(Q),Z}flushPending($){for(let[W,Z]of this.pending.entries())Z.reject($),this.pending.delete(W)}}hT();var _3;function kT(){if(!CT())return null;if(_3===void 0)_3=new oB;return _3}async function IT($){let W=kT();if(!W)return yW($);try{let Z=await W.requestIndex($);if(Z===null)return yW($);return new Set(Z)}catch{return yW($)}}async function p1($,W={}){let Z=W.ttlMs??RT,Q=Date.now();PT(Q);let J=y8.get($);if(J&&Z>0&&Q-J.lastBuiltAt<=Z&&J.files.size>0)return J.lastAccessedAt=Q,J.files;if(J?.pending)return J.lastAccessedAt=Q,J.pending;let j=IT($).then((X)=>{return y8.set($,{files:X,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),X});return y8.set($,{files:J?.files??new Set,lastBuiltAt:J?.lastBuiltAt??0,lastAccessedAt:Q,pending:j}),j}async function hW($,W={}){await p1($,{...W,ttlMs:0})}import{stat as xT}from"node:fs/promises";import f2 from"node:path";var gT=/[),.:;!?`'"]+$/,mT=/^[(`'"]+/;function vT($){let W=$.matchAll(/(^|[\s])@([^\s]+)/g),Z=[];for(let Q of W){let J=(Q[2]??"").trim();if(J.length===0)continue;let j=J.replace(mT,"").replace(gT,"");if(j.length===0||j.includes("@"))continue;Z.push(j)}return Array.from(new Set(Z))}function cT($,W){let Z=$.replace(/\\/g,"/"),Q=f2.isAbsolute(Z)?f2.resolve(Z):f2.resolve(W,Z),J=f2.relative(W,Q);if(J.startsWith("..")||f2.isAbsolute(J))return;return J.split(f2.sep).join("/")}async function h8($,W,Z={}){let Q=vT($);if(Q.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:J,maxFileBytes:j,maxTotalBytes:X}=Z,Y=await p1(W,{ttlMs:Z.ttlMs}),V=[],B=[],H=[],G=0;for(let K of Q){if(J&&H.length>=J){B.push(K);continue}let F=cT(K,W);if(!F||!Y.has(F)){B.push(K);continue}if(!j||!X){V.push(F);continue}let A=f2.join(W,F);try{if(!(await xT(A)).isFile()){B.push(K);continue}let U=G+j;if(U>X){B.push(K);continue}G=U,V.push(F)}catch{B.push(K)}}return{prompt:$,mentions:Q,matchedFiles:V,ignoredMentions:B}}var uT=["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"],dT=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],O2=null;function lT(){if(O2!==null)return Promise.resolve(O2);return new Promise(($)=>{let W=eB("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});W.on("close",(Z)=>{O2=Z===0,$(O2)}),W.on("error",()=>{O2=!1,$(!1)}),setTimeout(()=>{if(!W.killed)W.kill("SIGTERM");if(O2===null)O2=!1,$(!1)},1000)})}function pT($,W,Z,Q,J=5000,j){return new Promise((X)=>{let Y=eB("rg",["--json",`--context=${Q}`,"--max-count=1","-i",$],{cwd:W,stdio:["ignore","pipe","pipe"],windowsHide:!0}),V="",B=!1,H=()=>{if(!Y.killed)Y.kill("SIGTERM")},G=setTimeout(()=>{if(!B)B=!0,H(),X(null)},J),K=(F)=>{if(!B)B=!0,clearTimeout(G),H(),X(F)};if(j?.aborted){H(),X(null);return}j?.addEventListener("abort",()=>{K(null)}),Y.stdout.on("data",(F)=>{V+=F.toString()}),Y.stderr.on("data",()=>{}),Y.on("close",(F)=>{if(F===0||F===1){try{let A=[],D=V.split(`
|
|
165
|
+
`).filter((U)=>U.trim());for(let U of D){if(A.length>=Z)break;let L=JSON.parse(U);if(L.type==="match"){let _=L.data,M=[];if(L.data.submatches&&L.data.submatches.length>0){let T=L.data.submatches[0];A.push({file:_.path.text,line:_.line_number,column:(T?.start??0)+1,match:T?.match?.text??"",context:M})}}else if(L.type==="context"&&A.length>0){let _=A[A.length-1],M=L.data.line_number===_.line?">":" ";_.context.push(`${M} ${L.data.line_number}: ${L.data.lines?.text??L.data.line?.text??""}`)}}K(A.length>0?A:null)}catch{K(null)}return}K(null)}),Y.on("error",()=>{K(null)})})}function rT($,W,Z,Q){let J=$.split("/"),j=J[J.length-1]??"";if(J.length-1>Q)return!1;for(let V=0;V<J.length-1;V++)if(W.has(J[V]??""))return!1;let Y=kW.posix.extname(j).slice(1).toLowerCase();return Z.has(Y)||!Y&&!j.startsWith(".")}function I4($={}){let{includeExtensions:W=uT,excludeDirs:Z=dT,maxResults:Q=100,contextLines:J=2,maxDepth:j=20}=$,X=new Set(Z),Y=new Set(W.map((V)=>V.toLowerCase()));return async(V,B,H)=>{if(H.signal?.aborted)throw Error("Search operation aborted");let G=await lT(),K=null;if(G)K=await pT(V,B,Q,J,5000,H.signal);if(K){let _=[`Found ${K.length} result${K.length===1?"":"s"} for pattern: ${V}`,""];for(let M of K)_.push(`${M.file}:${M.line}:${M.column}`),_.push(...M.context),_.push("");if(K.length>=Q)_.push(`(Showing first ${Q} results. Refine your search for more specific results.)`);return tB(_.join(`
|
|
166
|
+
`))}let F;try{F=new RegExp(V,"gim")}catch(_){throw Error(`Invalid regex pattern: ${V}. ${_ instanceof Error?_.message:""}`)}let A=[],D=0,U=await p1(B);for(let _ of U){if(H.signal?.aborted)throw Error("Search operation aborted");if(!rT(_,X,Y,j))continue;if(A.length>=Q)break;D++;let M=kW.join(B,_);try{let O=(await $H.readFile(M,"utf-8")).split(`
|
|
167
|
+
`);for(let f=0;f<O.length;f++){let E=O[f];F.lastIndex=0;let N=F.exec(E);while(N!==null){if(A.length>=Q)break;let l=Math.max(0,f-J),k=Math.min(O.length-1,f+J),P=[];for(let o=l;o<=k;o++){let p=o===f?">":" ";P.push(`${p} ${o+1}: ${O[o]}`)}if(A.push({file:_,line:f+1,column:N.index+1,match:N[0],context:P}),N.index===F.lastIndex)F.lastIndex++;N=F.exec(E)}}}catch{}}if(A.length===0)return`No results found for pattern: ${V}
|
|
168
|
+
Searched ${D} files.`;let L=[`Found ${A.length} result${A.length===1?"":"s"} for pattern: ${V}`,`Searched ${D} files.`,""];for(let _ of A)L.push(`${_.file}:${_.line}:${_.column}`),L.push(..._.context),L.push("");if(A.length>=Q)L.push(`(Showing first ${Q} results. Refine your search for more specific results.)`);return tB(L.join(`
|
|
169
|
+
`))}}function tB($){if($.length<=S8)return $;let W=Math.ceil(S8/2),Z=Math.max(1,S8-W);return`${$.slice(0,W)}
|
|
170
170
|
[... search output truncated: ${$.length} chars total. Narrow the pattern or scope to view the elided matches ...]
|
|
171
|
-
`+$.slice(-Z)}function
|
|
171
|
+
`+$.slice(-Z)}function iT($){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,`
|
|
172
172
|
`).replace(/<[^>]+>/g," ").replace(/ /g," ").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/&#(\d+);/g,(W,Z)=>String.fromCharCode(parseInt(Z,10))).replace(/\s+/g," ").replace(/\n\s+/g,`
|
|
173
173
|
`).replace(/\n{3,}/g,`
|
|
174
174
|
|
|
175
|
-
`).trim()}function
|
|
176
|
-
[Content truncated: showing first 50000 of ${O.length} characters]`);return
|
|
177
|
-
`)}catch(F){if(clearTimeout(G),F instanceof Error){if(F.name==="AbortError")throw Error(`Request timed out after ${W}ms`);throw F}throw Error(`Fetch failed: ${String(F)}`)}finally{if(V.signal&&K)V.signal.removeEventListener("abort",K)}}}function I4($={}){return K2($)}function y8($={}){return{readFile:y4($.fileRead),search:h4($.search),bash:I4($.bash),webFetch:k4($.webFetch),applyPatch:U2($.applyPatch),editor:D2($.editor)}}var gT={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"},h8=[{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 eB($,W){if(!W||W.length===0)return!0;let Z=$.toLowerCase();return W.some((Q)=>Z.includes(Q.toLowerCase()))}function mT($,W,Z,Q){if($.mode&&$.mode!=="any"&&$.mode!==Q)return!1;return eB(W,$.providerIdIncludes)&&eB(Z,$.modelIdIncludes)}function k8($,W,Z,Q){if(!Q||Q.length===0)return{};let J=new Map;for(let X of Q){if(!mT(X,$,W,Z))continue;for(let Y of X.disableTools??[])J.set(Y,!1);for(let Y of X.enableTools??[])J.set(Y,!0)}let j={};for(let[X,Y]of J.entries())j[gT[X]]=Y;return j}var a0={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 k9($){if($!=="yolo")return{};let W={enabled:!0,autoApprove:!0},Z={"*":W};for(let Q of L$)Z[Q]=W;return Z}function I9($,W){let Z=a0[$],{enableSpawnAgent:Q,enableAgentTeams:J,...j}=Z;return q$({...j,...W})}import{createTool as Kq,zodToJsonSchema as Fq}from"@cline/shared";import{z as P3}from"zod";U1();import{createAgentRuntime as $q}from"@cline/agents";import{createContributionRegistry as Wq,mergeModelOptions as SH}from"@cline/shared";import{createGateway as jz,createHandlerAsync as Xz,hasRegisteredHandler as Yz,MODEL_COLLECTIONS_BY_PROVIDER_ID as Vz,normalizeProviderId as Bz}from"@cline/llms";import{EMPTY_CONTENT_TEXT as oT}from"@cline/shared";function sT($){let W=eT($.content),Z=[],Q=$.id??Zz(),J=0,j=[],X=()=>{if(j.length===0)return;let Y=J===0?Q:`${Q}_part_${J}`;J+=1,Z.push({id:Y,role:$.role,content:j.map($z),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:GH($.metrics)}),j=[]};if(W.length===0)return Z.push({id:Q,role:$.role,content:[{type:"text",text:oT}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:GH($.metrics)}),Z;for(let Y of W){if(Y.type!=="tool_result"){j.push(Y);continue}X(),Z.push({id:`${Q}_tool_${Y.tool_use_id}`,role:"tool",content:[FH(Y)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return X(),Z}function d9($){return $.flatMap(sT)}function tT($){let W=$.content.map(AH).filter((Z)=>Z!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:W,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:Wz($.metrics)}}function I8($){return $.map(tT)}function l9($){let W=[];for(let Z of $){let Q=Z.content.map(AH).filter((X)=>X!==void 0),J=Z.role==="tool"?"user":Z.role,j=W[W.length-1];if(J==="user"&&Q.length>0&&Q.every((X)=>X.type==="tool_result")&&j?.role==="user"&&Array.isArray(j.content)&&j.content.every((X)=>X.type==="tool_result")){j.content.push(...Q);continue}W.push({role:J,content:Q})}return W}function eT($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function $z($){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 FH($)}}function FH($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function AH($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let W=$.metadata;return{type:"thinking",thinking:$.text,signature:W?.signature,details:W?.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 W=$.metadata;return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:W?.thoughtSignature??W?.signature}}case"tool-result":{let W=$.output,Z=typeof W==="string"?W:Array.isArray(W)?W:JSON.stringify(W);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:Z,is_error:$.isError}}}}function GH($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function Wz($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var KH=0;function Zz(){return KH+=1,`msg_${Date.now().toString(36)}_${KH.toString(36)}`}function Qz($){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 W=$.tool_call.function,Z=W.arguments;return[{type:"tool-call-delta",toolCallId:$.tool_call.call_id??W.id,toolName:W.name,inputText:typeof Z==="string"?Z:void 0,input:typeof Z==="string"?void 0:Z,...$.signature?{metadata:{thoughtSignature:$.signature}}:{}}]}case"usage":return[{type:"usage",usage:{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,reasoningTokenCount:$.thoughtsTokenCount,totalCost:$.totalCost}}];case"done":return[{type:"finish",reason:Jz($),error:$.error}];default:return[]}}function Jz($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function UH($){return{async*stream(W){let Z=!1,Q=!1;try{let J=typeof $==="function"?await $():$;J.setAbortSignal?.(W.signal);let j=l9(W.messages),X=W.tools.map((Y)=>({name:Y.name,description:Y.description,inputSchema:Y.inputSchema}));for await(let Y of J.createMessage(W.systemPrompt??"",j,X))for(let V of Qz(Y)){if(V.type==="finish")Z=!0;else if(V.type==="tool-call-delta")Q=!0;yield V}if(!Z)yield{type:"finish",reason:Q?"tool-calls":"stop"}}catch(J){if(!Z)yield{type:"finish",reason:W.signal?.aborted?"aborted":"error",error:J instanceof Error?J.message:String(J)}}}}}function Hz($){let W=Object.fromEntries(Object.entries($).filter(([,Z])=>Z!==void 0));return Object.keys(W).length>0?W:void 0}function Gz($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function Kz($){let W={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(Gz($))Object.assign(W,{apiVersion:$.azure?.apiVersion,useIdentity:$.azure?.useIdentity});if($.providerId==="bedrock")Object.assign(W,{authentication:$.aws?.authentication,profile:$.aws?.profile,accessKeyId:$.aws?.accessKey,secretAccessKey:$.aws?.secretKey,sessionToken:$.aws?.sessionToken,usePromptCache:$.aws?.usePromptCache,useCrossRegionInference:$.useCrossRegionInference,useGlobalInference:$.useGlobalInference,endpoint:$.aws?.endpoint,customModelBaseId:$.aws?.customModelBaseId});if($.providerId==="vertex"){let Z=$.gcp?.region??$.region;Object.assign(W,{project:$.gcp?.projectId,projectId:$.gcp?.projectId,location:Z,region:Z})}if($.providerId==="sapaicore")Object.assign(W,$.sap);return Hz(W)}function Fz($){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):void 0}function f3($){let W=$.providerConfig,Z=W?.knownModels?W.knownModels:$.knownModels??Vz[$.providerId]?.models??void 0,Q=Fz(W?.maxInputTokens),J=W?.modelInfo&&W.modelInfo.id===$.modelId?W.modelInfo:void 0;if(Q===void 0&&!J)return Z;return{...Z??{},[$.modelId]:{...Z?.[$.modelId],...Q!==void 0?{contextWindow:Q,maxInputTokens:Q}:{},...J,id:$.modelId}}}function Az($){if(!$?.length)return;let W=new Set;for(let Z of $)switch(Z){case"tools":case"reasoning":case"prompt-cache":case"images":W.add(Z);break;case"structured_output":W.add("structured-output");break;default:W.add("text")}return W.add("text"),[...W]}function Uz($,W){return{id:$,name:W.name??$,description:W.description,contextWindow:W.contextWindow,maxInputTokens:W.maxInputTokens,maxOutputTokens:W.maxTokens,capabilities:Az(W.capabilities),metadata:{family:W.family,pricing:W.pricing,status:W.status,releaseDate:W.releaseDate}}}function DH($,W,Z){let Q=$.providerConfig,J=Q?.providerId===$.providerId?Q:void 0,j={...J??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??J?.apiKey,baseUrl:$.baseUrl??J?.baseUrl,headers:$.headers??J?.headers,knownModels:f3($),maxOutputTokens:$.maxTokensPerTurn,temperature:$.temperature,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:W,extensionContext:$.extensionContext};if(Yz(Bz(j.providerId)))return UH(()=>Xz(j));return jz({fetch:j.fetch,providerConfigs:[{providerId:j.providerId,apiKey:j.apiKey,baseUrl:j.baseUrl,headers:j.headers,timeoutMs:j.timeoutMs,fetch:j.fetch,options:Kz(j),models:j.knownModels?Object.entries(j.knownModels).map(([X,Y])=>Uz(X,Y)):void 0}],logger:W,telemetry:Z??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:j.providerId,modelId:j.modelId},{maxTokens:j.maxOutputTokens,temperature:j.temperature})}D0();import{createMediaBudgetState as Dz,IMAGE_OMITTED_PLACEHOLDER as _H,normalizeUserInput as fH,resolveMediaBudget as _z,validateAndReserveImageMedia as fz}from"@cline/shared";var Lz=8000,Oz=50000,Tz=6000000,zz=200000,qz=12000,Mz=65536,v4=2000,LH=40000,Rz=8,L3={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},Nz=new Set(["read","read_files"]),O2="[outdated - see the latest file content]",OH="Tool execution was interrupted before a result was produced.",TH=($)=>`
|
|
175
|
+
`).trim()}function x4($={}){let{timeoutMs:W=30000,maxResponseBytes:Z=5000000,userAgent:Q="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:J={},followRedirects:j=!0}=$;return async(X,Y,V)=>{let B;try{B=new URL(X)}catch{throw Error(`Invalid URL: ${X}`)}if(!["http:","https:"].includes(B.protocol))throw Error(`Invalid protocol: ${B.protocol}. Only http and https are supported.`);let H=new AbortController,G=setTimeout(()=>H.abort(),W),K;if(V.signal)K=()=>H.abort(),V.signal.addEventListener("abort",K);try{let F=await fetch(X,{method:"GET",headers:{"User-Agent":Q,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...J},redirect:j?"follow":"manual",signal:H.signal});if(clearTimeout(G),!j&&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")||"",D=F.body?.getReader();if(!D)throw Error("Failed to read response body");let U=[],L=0;while(!0){let{done:E,value:N}=await D.read();if(E)break;if(L+=N.length,L>Z)throw D.cancel(),Error(`Response too large: exceeded ${Z} bytes`);U.push(N)}let _=new Uint8Array(L),M=0;for(let E of U)_.set(E,M),M+=E.length;let T=new TextDecoder("utf-8").decode(_),O;if(A.includes("text/html")||A.includes("application/xhtml"))O=iT(T);else if(A.includes("application/json"))try{let E=JSON.parse(T);O=JSON.stringify(E,null,2)}catch{O=T}else O=T;let f=[`URL: ${X}`,`Content-Type: ${A}`,`Size: ${L} bytes`,"","--- Content ---",O.slice(0,50000)];if(O.length>50000)f.push(`
|
|
176
|
+
[Content truncated: showing first 50000 of ${O.length} characters]`);return f.push("","--- Analysis Request ---",`Prompt: ${Y}`),f.join(`
|
|
177
|
+
`)}catch(F){if(clearTimeout(G),F instanceof Error){if(F.name==="AbortError")throw Error(`Request timed out after ${W}ms`);throw F}throw Error(`Fetch failed: ${String(F)}`)}finally{if(V.signal&&K)V.signal.removeEventListener("abort",K)}}}function g4($={}){return A2($)}function k8($={}){return{readFile:k4($.fileRead),search:I4($.search),bash:g4($.bash),webFetch:x4($.webFetch),applyPatch:_2($.applyPatch),editor:L2($.editor)}}var nT={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"},I8=[{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 WH($,W){if(!W||W.length===0)return!0;let Z=$.toLowerCase();return W.some((Q)=>Z.includes(Q.toLowerCase()))}function aT($,W,Z,Q){if($.mode&&$.mode!=="any"&&$.mode!==Q)return!1;return WH(W,$.providerIdIncludes)&&WH(Z,$.modelIdIncludes)}function x8($,W,Z,Q){if(!Q||Q.length===0)return{};let J=new Map;for(let X of Q){if(!aT(X,$,W,Z))continue;for(let Y of X.disableTools??[])J.set(Y,!1);for(let Y of X.enableTools??[])J.set(Y,!0)}let j={};for(let[X,Y]of J.entries())j[nT[X]]=Y;return j}var s0={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 r1($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function IW($){if($!=="yolo")return{};let W={enabled:!0,autoApprove:!0},Z={"*":W};for(let Q of q$)Z[Q]=W;return Z}function xW($,W){let Z=s0[$],{enableSpawnAgent:Q,enableAgentTeams:J,...j}=Z;return E$({...j,...W})}import{createTool as qq,zodToJsonSchema as Mq}from"@cline/shared";import{z as b3}from"zod";U1();import{createAgentRuntime as Hq}from"@cline/agents";import{createContributionRegistry as Gq,isLikelyAuthError as Kq,mergeModelOptions as yH}from"@cline/shared";import{createGateway as Uz,createHandlerAsync as Dz,hasRegisteredHandler as _z,MODEL_COLLECTIONS_BY_PROVIDER_ID as Lz,normalizeProviderId as fz}from"@cline/llms";import{EMPTY_CONTENT_TEXT as Xz}from"@cline/shared";function Yz($){let W=Bz($.content),Z=[],Q=$.id??Kz(),J=0,j=[],X=()=>{if(j.length===0)return;let Y=J===0?Q:`${Q}_part_${J}`;J+=1,Z.push({id:Y,role:$.role,content:j.map(Hz),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:FH($.metrics)}),j=[]};if(W.length===0)return Z.push({id:Q,role:$.role,content:[{type:"text",text:Xz}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:FH($.metrics)}),Z;for(let Y of W){if(Y.type!=="tool_result"){j.push(Y);continue}X(),Z.push({id:`${Q}_tool_${Y.tool_use_id}`,role:"tool",content:[UH(Y)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return X(),Z}function lW($){return $.flatMap(Yz)}function Vz($){let W=$.content.map(DH).filter((Z)=>Z!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:W,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:Gz($.metrics)}}function g8($){return $.map(Vz)}function pW($){let W=[];for(let Z of $){let Q=Z.content.map(DH).filter((X)=>X!==void 0),J=Z.role==="tool"?"user":Z.role,j=W[W.length-1];if(J==="user"&&Q.length>0&&Q.every((X)=>X.type==="tool_result")&&j?.role==="user"&&Array.isArray(j.content)&&j.content.every((X)=>X.type==="tool_result")){j.content.push(...Q);continue}W.push({role:J,content:Q})}return W}function Bz($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function Hz($){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 UH($)}}function UH($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function DH($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let W=$.metadata;return{type:"thinking",thinking:$.text,signature:W?.signature,details:W?.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 W=$.metadata;return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:W?.thoughtSignature??W?.signature}}case"tool-result":{let W=$.output,Z=typeof W==="string"?W:Array.isArray(W)?W:JSON.stringify(W);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:Z,is_error:$.isError}}}}function FH($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function Gz($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var AH=0;function Kz(){return AH+=1,`msg_${Date.now().toString(36)}_${AH.toString(36)}`}function Fz($){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 W=$.tool_call.function,Z=W.arguments;return[{type:"tool-call-delta",toolCallId:$.tool_call.call_id??W.id,toolName:W.name,inputText:typeof Z==="string"?Z:void 0,input:typeof Z==="string"?void 0:Z,...$.signature?{metadata:{thoughtSignature:$.signature}}:{}}]}case"usage":return[{type:"usage",usage:{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,reasoningTokenCount:$.thoughtsTokenCount,totalCost:$.totalCost}}];case"done":return[{type:"finish",reason:Az($),error:$.error}];default:return[]}}function Az($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function _H($){return{async*stream(W){let Z=!1,Q=!1;try{let J=typeof $==="function"?await $():$;J.setAbortSignal?.(W.signal);let j=pW(W.messages),X=W.tools.map((Y)=>({name:Y.name,description:Y.description,inputSchema:Y.inputSchema}));for await(let Y of J.createMessage(W.systemPrompt??"",j,X))for(let V of Fz(Y)){if(V.type==="finish")Z=!0;else if(V.type==="tool-call-delta")Q=!0;yield V}if(!Z)yield{type:"finish",reason:Q?"tool-calls":"stop"}}catch(J){if(!Z)yield{type:"finish",reason:W.signal?.aborted?"aborted":"error",error:J instanceof Error?J.message:String(J)}}}}}function Oz($){let W=Object.fromEntries(Object.entries($).filter(([,Z])=>Z!==void 0));return Object.keys(W).length>0?W:void 0}function Tz($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function zz($){let W={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(Tz($))Object.assign(W,{apiVersion:$.azure?.apiVersion,useIdentity:$.azure?.useIdentity});if($.providerId==="bedrock")Object.assign(W,{authentication:$.aws?.authentication,profile:$.aws?.profile,accessKeyId:$.aws?.accessKey,secretAccessKey:$.aws?.secretKey,sessionToken:$.aws?.sessionToken,usePromptCache:$.aws?.usePromptCache,useCrossRegionInference:$.useCrossRegionInference,useGlobalInference:$.useGlobalInference,endpoint:$.aws?.endpoint,customModelBaseId:$.aws?.customModelBaseId});if($.providerId==="vertex"){let Z=$.gcp?.region??$.region;Object.assign(W,{project:$.gcp?.projectId,projectId:$.gcp?.projectId,location:Z,region:Z})}if($.providerId==="sapaicore")Object.assign(W,$.sap);return Oz(W)}function qz($){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):void 0}function O3($){let W=$.providerConfig,Z=W?.knownModels?W.knownModels:$.knownModels??Lz[$.providerId]?.models??void 0,Q=qz(W?.maxInputTokens),J=W?.modelInfo&&W.modelInfo.id===$.modelId?W.modelInfo:void 0;if(Q===void 0&&!J)return Z;return{...Z??{},[$.modelId]:{...Z?.[$.modelId],...Q!==void 0?{contextWindow:Q,maxInputTokens:Q}:{},...J,id:$.modelId}}}function Mz($){if(!$?.length)return;let W=new Set;for(let Z of $)switch(Z){case"tools":case"reasoning":case"prompt-cache":case"images":W.add(Z);break;case"structured_output":W.add("structured-output");break;default:W.add("text")}return W.add("text"),[...W]}function Rz($,W){return{id:$,name:W.name??$,description:W.description,contextWindow:W.contextWindow,maxInputTokens:W.maxInputTokens,maxOutputTokens:W.maxTokens,capabilities:Mz(W.capabilities),metadata:{family:W.family,pricing:W.pricing,status:W.status,releaseDate:W.releaseDate}}}function LH($,W,Z){let Q=$.providerConfig,J=Q?.providerId===$.providerId?Q:void 0,j={...J??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??J?.apiKey,baseUrl:$.baseUrl??J?.baseUrl,headers:$.headers??J?.headers,knownModels:O3($),maxOutputTokens:$.maxTokensPerTurn,temperature:$.temperature,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:W,extensionContext:$.extensionContext};if(_z(fz(j.providerId)))return _H(()=>Dz(j));return Uz({fetch:j.fetch,providerConfigs:[{providerId:j.providerId,apiKey:j.apiKey,baseUrl:j.baseUrl,headers:j.headers,timeoutMs:j.timeoutMs,fetch:j.fetch,options:zz(j),models:j.knownModels?Object.entries(j.knownModels).map(([X,Y])=>Rz(X,Y)):void 0}],logger:W,telemetry:Z??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:j.providerId,modelId:j.modelId},{maxTokens:j.maxOutputTokens,temperature:j.temperature})}U0();import{createMediaBudgetState as Nz,IMAGE_OMITTED_PLACEHOLDER as fH,normalizeUserInput as OH,resolveMediaBudget as Ez,validateAndReserveImageMedia as wz}from"@cline/shared";var Cz=8000,Pz=50000,Sz=6000000,bz=200000,yz=12000,hz=65536,u4=2000,TH=40000,kz=8,T3={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"]),z2="[outdated - see the latest file content]",zH="Tool execution was interrupted before a result was produced.",qH=($)=>`
|
|
178
178
|
|
|
179
179
|
...[truncated ${$} chars]...
|
|
180
180
|
|
|
181
|
-
`,
|
|
181
|
+
`,d4=($)=>`
|
|
182
182
|
|
|
183
183
|
...[truncated ${$} chars to fit provider request budget]...
|
|
184
184
|
|
|
185
|
-
`,
|
|
185
|
+
`,xz=($)=>`
|
|
186
186
|
|
|
187
187
|
...[assistant text truncated: omitted ${$} chars]...
|
|
188
188
|
|
|
189
|
-
`,
|
|
189
|
+
`,MH=($)=>`
|
|
190
190
|
|
|
191
191
|
...[assistant text truncated: omitted ${$} chars to fit provider request budget]...
|
|
192
192
|
|
|
193
|
-
`,
|
|
193
|
+
`,gz=($)=>`
|
|
194
194
|
|
|
195
195
|
...[assistant text truncated: omitted ${$} chars due to repeated tool-call markup]...
|
|
196
196
|
|
|
197
|
-
`;function RH($=process.env){return{maxToolResultChars:MH($[L3.maxToolResultChars]),maxTotalTextBytes:MH($[L3.maxTotalTextBytes]),minOutdatedRewriteBytes:Pz($[L3.minOutdatedRewriteBytes])}}class T3{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=m4($.maxToolResultChars,Lz),this.maxFileContentChars=m4($.maxFileContentChars,Oz),this.maxTotalTextBytes=m4($.maxTotalTextBytes,Tz),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=m4($.maxAssistantTextChars,zz),this.maxAssistantToolMarkupChars=m4($.maxAssistantToolMarkupChars,qz),this.minOutdatedRewriteBytes=Sz($.minOutdatedRewriteBytes,Mz)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Z=this.addMissingToolResults($).map((J)=>{if(!Array.isArray(J.content)){if(J.role==="user"&&typeof J.content==="string"){let Y=fH(J.content);if(Y!==J.content)return{...J,content:Y}}if(J.role==="assistant"&&typeof J.content==="string"){let Y=this.truncateAssistantText(J.content);if(Y!==J.content)return{...J,content:Y}}return J}let j=!1,X=J.content.map((Y)=>{let V=this.transformBlock(Y,J.role);if(V!==Y)j=!0;return V});return j?{...J,content:X}:J}),Q=this.applyMediaBudget(Z);return this.truncateToTotalTextBudget(Q)}transformBlock($,W){if(W==="user"&&$.type==="text"&&typeof $.text==="string"){let J=fH($.text);if(J!==$.text)return{...$,text:J};return $}if(W==="assistant"&&$.type==="text"&&typeof $.text==="string"){let J=this.truncateAssistantText($.text);return J===$.text?$:{...$,text:J}}if($.type==="file"){let J=x8($.content,this.maxFileContentChars,TH);return J===$.content?$:{...$,content:J}}if($.type!=="tool_result")return $;let Z=this.resolveToolName($),Q=$.content;if(this.isReadTool(Z)&&$.is_error!==!0){let J=this.committedOutdatedRewrites.get($.tool_use_id);if(J&&J.size>0){let X=this.getReadLocators($).filter((Y)=>J.has(this.toReadLocatorKey(Y))&&this.isOutdatedReadLocator(Y,$.tool_use_id));if(X.length>0)Q=this.replaceOutdatedReadContent(Q,X)}}return Q=this.truncateToolResultContent(Q),Q===$.content?$:{...$,content:Q}}reindex($){let W=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!W)this.resetIndexes();for(let Z=this.indexedMessageCount;Z<$.length;Z++){let Q=$[Z];if(!Array.isArray(Q.content))continue;for(let J=0;J<Q.content.length;J++){let j=Q.content[J];if(j.type==="file")this.latestFullContentOwnerByPathCache.set(j.path,`file:${Z}:${J}`);else if(j.type==="tool_use"){let X=j.name.toLowerCase();if(this.toolNameByIdCache.set(j.id,X),this.isReadTool(X)){let Y=this.extractLocatorsFromReadToolInput(j.input);if(Y.length>0)this.readLocatorsByToolUseIdCache.set(j.id,Y)}}else if(j.type==="tool_result"){let X=this.resolveToolName(j);if(!this.isReadTool(X)||j.is_error===!0)continue;let Y=this.getReadLocators(j);for(let V of Y)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),j.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,j.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let W=new Map,Z=new Set,Q=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let j of J.content){if(j.type!=="tool_result"||j.is_error===!0)continue;let X=this.resolveToolName(j);if(!this.isReadTool(X))continue;Z.add(j.tool_use_id);let Y=this.committedOutdatedRewrites.get(j.tool_use_id),V=new Set,B=new Set;for(let G of this.getReadLocators(j)){let K=this.toReadLocatorKey(G);if(!this.isOutdatedReadLocator(G,j.tool_use_id))continue;if(B.add(K),!Y?.has(K))V.add(K)}if(Y){for(let G of Y)if(!B.has(G))Y.delete(G);if(Y.size===0)this.committedOutdatedRewrites.delete(j.tool_use_id)}if(V.size===0)continue;let H=W.get(j.tool_use_id);if(!H)H=new Set,W.set(j.tool_use_id,H);for(let G of V)H.add(G);Q+=this.estimateOutdatedReclaimBytes(j.content,V)}}for(let J of this.committedOutdatedRewrites.keys())if(!Z.has(J))this.committedOutdatedRewrites.delete(J);if(W.size===0||Q<this.minOutdatedRewriteBytes)return;for(let[J,j]of W){let X=this.committedOutdatedRewrites.get(J);if(!X)X=new Set,this.committedOutdatedRewrites.set(J,X);for(let Y of j)X.add(Y)}}estimateOutdatedReclaimBytes($,W){let Z=this.extractReadLocatorsFromToolResultContent($),Q=Z.length>0&&Z.every((V)=>W.has(this.toReadLocatorKey(V))),J=(V)=>{let B;try{B=JSON.parse(V)}catch{return Q||Z.length===0?j0(this.truncateMiddle(V)):0}let H=Array.isArray(B)?B:[B],G=0;for(let K of H){let F=this.extractLocatorFromResultEntry(K);if(F&&W.has(this.toReadLocatorKey(F)))G+=this.providerBoundEntryBytes(K)}return G};if(typeof $==="string")return J($);let j=new Set(W),X=0;for(let V of $)if(V.type==="text")X+=this.countOutdatedImageEntries(V.text,j);let Y=0;for(let V of $)if(V.type==="text")Y+=J(V.text);else if(V.type==="image"){if(X>0)X-=1,Y+=j0(V.data)}else if(R$(V)){let B=this.extractLocatorFromResultEntry(V);if(B&&W.has(this.toReadLocatorKey(B)))Y+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(W.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))Y+=j0(this.truncateMiddle(V.content))}return Y}providerBoundEntryBytes($){let W=this.truncateNestedStrings($);return j0(JSON.stringify(W))}addMissingToolResults($){let W=this.collectToolResultIds($),Z=[],Q=new Map,J=!1,j=()=>{if(Q.size===0)return;X(this.createMissingToolResultMessage(Q)),Q.clear(),J=!0},X=(Y)=>{let V=Z.at(-1);if(this.shouldMergeUserAfterToolResults(V,Y)){Z[Z.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(Y.content)]},J=!0;return}Z.push(Y)};for(let Y of $){if(this.isToolResultOnlyMessage(Y)){if(X(this.appendMissingToolResults(Y,Q)),Q.size>0)Q.clear(),J=!0;continue}if(Array.isArray(Y.content)){let V=Y.content.filter((H)=>H.type==="tool_result"),B=Y.content.filter((H)=>H.type!=="tool_result");if(V.length>0){let H=this.appendMissingToolResults({...Y,role:"user",content:V},Q);if(X(H),Q.size>0)Q.clear();J=!0}if(B.length>0||V.length===0){if(V.length===0)j();let H=V.length>0?{...Y,content:B}:Y;if(X(H),H.role==="assistant")this.trackMissingToolCalls(H,W,Q)}continue}j(),X(Y)}return j(),J?Z:$}appendMissingToolResults($,W){if(W.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(W)]}}shouldMergeUserAfterToolResults($,W){return $?.role==="user"&&W.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(W.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let W=new Set;for(let Z of $){if(!Array.isArray(Z.content))continue;for(let Q of Z.content)if(Q.type==="tool_result")W.add(Q.tool_use_id)}return W}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((W)=>W.type==="tool_result")}trackMissingToolCalls($,W,Z){if(!Array.isArray($.content))return;for(let Q of $.content){if(Q.type!=="tool_use"||W.has(Q.id))continue;Z.set(Q.id,Q.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([W,Z])=>({type:"tool_result",tool_use_id:W,name:Z,content:[{type:"text",text:this.formatMissingToolResultText(Z)}],is_error:!0}))}formatMissingToolResultText($){return $?`${OH} Tool: ${$}.`:OH}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 W=$,Z=this.readResultLocatorCache.get(W);if(Z===void 0)Z=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(W,Z);if(Z.length>0)return Z;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let W=$,Z=[],Q=this.extractLocatorFromReadRequest(W);if(Q)Z.push(Q);if(Array.isArray(W.files))for(let J of W.files){let j=this.extractLocatorFromReadRequest(J);if(j)Z.push(j)}if(Array.isArray(W.file_paths)){for(let J of W.file_paths)if(typeof J==="string"&&J.length>0)Z.push({path:J,startLine:null,endLine:null})}return this.dedupeReadLocators(Z)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);let W=[];for(let Z of $){if(Z.type==="text"){W.push(...this.tryParseReadLocators(Z.text));continue}if(R$(Z)){let Q=this.extractLocatorFromResultEntry(Z);if(Q)W.push(Q)}}return this.dedupeReadLocators(W)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Z=[];for(let Q of $){let J=this.extractLocatorFromResultEntry(Q);if(J)Z.push(J)}return this.dedupeReadLocators(Z)}let W=this.extractLocatorFromResultEntry($);return W?[W]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let W=$,Z=this.extractPath(W);if(!Z)return;return{path:Z,startLine:this.extractLineNumber(W.start_line),endLine:this.extractLineNumber(W.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let W=$,Z=this.extractPath(W);if(Z)return{path:Z,startLine:this.extractLineNumber(W.start_line),endLine:this.extractLineNumber(W.end_line)};if(typeof W.query==="string"&&W.query.length>0)return this.parseReadQuery(W.query);return}extractPath($){let W=[$.path,$.file_path,$.filePath];for(let Z of W)if(typeof Z==="string"&&Z.length>0)return Z;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let W=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!W)return{path:$,startLine:null,endLine:null};return{path:W[1],startLine:Number(W[2]),endLine:W[3]==="EOF"?null:Number(W[3])}}dedupeReadLocators($){let W=new Map;for(let Z of $)W.set(this.toReadLocatorKey(Z),Z);return Array.from(W.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,W){let Z=this.latestFullContentOwnerByPathCache.get($.path);if(Z&&Z!==W)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==W}replaceOutdatedReadContent($,W){let Z=new Set(W.map((j)=>this.toReadLocatorKey(j))),Q=new Set(W.map((j)=>j.path));if(typeof $==="string")return this.replaceOutdatedInString($,Z)??O2;let J=0;for(let j of $)if(j.type==="text")J+=this.countOutdatedImageEntries(j.text,Z);return $.map((j)=>{if(j.type==="file"){if(!Q.has(j.path))return j;return{...j,content:O2}}if(j.type==="image"){if(J===0)return j;return J-=1,{type:"text",text:O2}}if(R$(j))return this.replaceOutdatedReadEntry(j,Z);if(j.type!=="text")return j;let X=this.replaceOutdatedInString(j.text,Z);if(X===null)return{...j,text:O2};return X===j.text?j:{...j,text:X}})}countOutdatedImageEntries($,W){let Z;try{Z=JSON.parse($)}catch{return 0}let Q=Array.isArray(Z)?Z:[Z],J=0;for(let j of Q){if(!j||typeof j!=="object")continue;let X=j,Y=this.extractLocatorFromResultEntry(X);if(!Y)continue;if(!W.has(this.toReadLocatorKey(Y)))continue;if(X.result==="Successfully read image"||X.content==="Successfully read image")J+=1}return J}replaceOutdatedInString($,W){let Z;try{Z=JSON.parse($)}catch{return null}let Q=Array.isArray(Z)?Z.map((J)=>this.replaceOutdatedReadEntry(J,W)):this.replaceOutdatedReadEntry(Z,W);return JSON.stringify(Q)}replaceOutdatedReadEntry($,W){if(!$||typeof $!=="object")return $;let Z=this.extractLocatorFromResultEntry($);if(!Z||!W.has(this.toReadLocatorKey(Z)))return $;let Q={...$};if(typeof Q.result==="string")Q.result=O2;else if(typeof Q.content==="string")Q.content=O2;else Q.result=O2;return Q}isReadTool($){return!!$&&Nz.has($)}resolveToolName($){let W=this.toolNameByIdCache.get($.tool_use_id);if(W!==void 0)return W;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((W)=>{if(W.type==="file"){let Z=this.truncateMiddle(W.content);return Z===W.content?W:{...W,content:Z}}if(W.type==="text"){let Z=this.truncateMiddle(W.text);return Z===W.text?W:{...W,text:Z}}if(R$(W))return this.truncateNestedStrings(W);return W})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let W=!1,Z=$.map((Q)=>{let J=this.truncateNestedStrings(Q);if(J!==Q)W=!0;return J});return W?Z:$}if($!==null&&typeof $==="object"){if(z3($))return $;let W=!1,Z={};for(let[Q,J]of Object.entries($)){let j=this.truncateNestedStrings(J);if(j!==J)W=!0;Z[Q]=j}return W?Z:$}return $}truncateMiddle($){return x8($,this.maxToolResultChars,TH)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return x8($,this.maxAssistantToolMarkupChars,wz);return x8($,this.maxAssistantTextChars,Ez)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let W=0;for(let Z of $.matchAll(Cz))if(W+=1,W>=Rz)return!0;return!1}truncateToTotalTextBudget($){let W=this.countMessageTextBytes($);if(W<=this.maxTotalTextBytes)return $;let Z=$.map((J)=>{if(!Array.isArray(J.content))return{...J};return{...J,content:J.content.map((j)=>yz(j))}}),Q=this.collectTruncationCandidates(Z);for(let J of Q){if(W<=this.maxTotalTextBytes)break;let j=J.byteLength;if(j<=J.minBytes)continue;let X=W-this.maxTotalTextBytes,Y=Math.max(J.minBytes,j-X),V=bz(J.get(),Y,J.makeMarker);J.set(V),W-=j-j0(V)}return Z}countMessageTextBytes($){let W=0;for(let Z of $){if(typeof Z.content==="string"){W+=j0(Z.content);continue}for(let Q of Z.content)if(Q.type==="text")W+=j0(Q.text);else if(Q.type==="thinking")W+=j0(Q.thinking);else if(Q.type==="file")W+=j0(Q.content);else if(Q.type==="tool_use")W+=p9(Q.input);else if(Q.type==="tool_result"){if(typeof Q.content==="string")W+=j0(Q.content);else for(let J of Q.content)if(J.type==="text")W+=j0(J.text);else if(J.type==="file")W+=j0(J.content);else if(R$(J))W+=p9(J)}}return W}collectTruncationCandidates($){let W=[],Z=[];for(let Q of $){if(Q.role==="assistant"&&typeof Q.content==="string"){W.push({byteLength:j0(Q.content),minBytes:LH,makeMarker:zH,get:()=>Q.content,set:(J)=>{Q.content=J}});continue}if(!Array.isArray(Q.content))continue;for(let J of Q.content){if(J.type==="tool_use"){r9(J.input,Z);continue}if(Q.role==="assistant"&&J.type==="text"){W.push({byteLength:j0(J.text),minBytes:LH,makeMarker:zH,get:()=>J.text,set:(j)=>{J.text=j}});continue}if(J.type!=="tool_result")continue;if(typeof J.content==="string"){W.push({byteLength:j0(J.content),minBytes:v4,makeMarker:c4,get:()=>J.content,set:(j)=>{J.content=j}});continue}for(let j of J.content)if(j.type==="text")W.push({byteLength:j0(j.text),minBytes:v4,makeMarker:c4,get:()=>j.text,set:(X)=>{j.text=X}});else if(j.type==="file")W.push({byteLength:j0(j.content),minBytes:v4,makeMarker:c4,get:()=>j.content,set:(X)=>{j.content=X}});else if(R$(j))r9(j,W)}}return W.sort((Q,J)=>J.byteLength-Q.byteLength),Z.sort((Q,J)=>J.byteLength-Q.byteLength),[...W,...Z]}applyMediaBudget($){let W=this.resolveMediaBudget();if(W.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&W.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&W.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Z=Dz(),Q=!1,J=$.map((j)=>{if(!Array.isArray(j.content))return j;let X=!1,Y=j.content.map((V)=>{let B=this.applyMediaBudgetToBlock(V,W,Z);if(B!==V)X=!0;return B});if(!X)return j;return Q=!0,{...j,content:Y}});return Q?J:$}resolveMediaBudget(){return _z(this.mediaBudget)}applyMediaBudgetToBlock($,W,Z){if(O3($))return this.limitImageContent($,W,Z);if($.type!=="tool_result"||typeof $.content==="string")return $;let Q=!1,J=$.content.map((j)=>{let X=this.applyMediaBudgetToToolResultEntry(j,W,Z);if(X!==j)Q=!0;return X});return Q?{...$,content:J}:$}applyMediaBudgetToToolResultEntry($,W,Z){if(O3($))return this.limitImageContent($,W,Z);if(R$($))return this.limitNestedMedia($,W,Z);return $}limitNestedMedia($,W,Z){if(O3($)){let Q=this.limitImageContent($,W,Z);return Q.type==="text"?Q.text:Q}if(Array.isArray($)){let Q=!1,J=$.map((j)=>{let X=this.limitNestedMedia(j,W,Z);if(X!==j)Q=!0;return X});return Q?J:$}if($!==null&&typeof $==="object"){let Q=!1,J={};for(let[j,X]of Object.entries($)){let Y=this.limitNestedMedia(X,W,Z);if(Y!==X)Q=!0;J[j]=Y}return Q?J:$}return $}limitImageContent($,W,Z){if(!NH($))return{type:"text",text:_H};let Q=fz($.mediaType,$.data,{maxImageEncodedBytes:W.maxImageEncodedBytes,maxImageDecodedBytes:W.maxImageDecodedBytes,maxTotalMediaBytes:W.maxTotalMediaBytes},Z);if(!Q.ok)return{type:"text",text:_H};return{...$,data:Q.base64,mediaType:Q.mediaType}}}var qH=String.raw`[\|\uFF5C]`,Cz=new RegExp(String.raw`<\s*(?:${qH}\s*)?DSML\s*(?:${qH}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function j0($){return Buffer.byteLength($,"utf8")}function MH($){if($===void 0)return;let W=Number.parseInt($,10);return Number.isFinite(W)&&W>0?W:void 0}function Pz($){if($===void 0)return;let W=$.trim().toLowerCase();if(W==="infinity"||W==="disable")return Number.POSITIVE_INFINITY;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>=0?Z:void 0}function m4($,W){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):W}function Sz($,W){if(typeof $!=="number"||Number.isNaN($)||$<0)return W;return Number.isFinite($)?Math.floor($):$}function x8($,W,Z){if($.length<=W)return $;let Q=Z($.length-W),J=Math.max(0,Math.floor((W-Q.length)/2)),j=Math.max(0,$.length-J*2),X=Z(j),Y=Math.max(0,Math.floor((W-X.length)/2)),V=$.slice(0,Y),B=Y>0?$.slice(-Y):"";return`${V}${X}${B}`}function bz($,W,Z){if(j0($)<=W)return $;let Q=0,J=$.length,j=x8($,0,Z);while(Q<=J){let X=Q+J>>>1,Y=x8($,X,Z);if(j0(Y)<=W)j=Y,Q=X+1;else J=X-1}return j}function yz($){if($.type==="tool_use")return{...$,input:i9($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((W)=>R$(W)?i9(W):{...W})}}function R$($){if($===null||typeof $!=="object")return!1;let W=$.type;return W!=="text"&&W!=="image"&&W!=="file"}function O3($){return $!==null&&typeof $==="object"&&$.type==="image"}function NH($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function z3($){return NH($)}function p9($){if(typeof $==="string")return j0($);if(Array.isArray($)){let W=0;for(let Z of $)W+=p9(Z);return W}if($!==null&&typeof $==="object"){if(z3($))return 0;let W=0;for(let Z of Object.values($))W+=p9(Z);return W}return 0}function r9($,W){if(Array.isArray($)){$.forEach((Z,Q)=>{if(typeof Z==="string")W.push({byteLength:j0(Z),minBytes:v4,makeMarker:c4,get:()=>$[Q],set:(J)=>{$[Q]=J}});else r9(Z,W)});return}if($!==null&&typeof $==="object"){if(z3($))return;let Z=$;for(let Q of Object.keys(Z)){let J=Z[Q];if(typeof J==="string")W.push({byteLength:j0(J),minBytes:v4,makeMarker:c4,get:()=>Z[Q],set:(j)=>{Z[Q]=j}});else r9(J,W)}}}function i9($){if(Array.isArray($))return $.map(i9);if($!==null&&typeof $==="object"){let W={};for(let[Z,Q]of Object.entries($))W[Z]=i9(Q);return W}return $}function q3(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class M3{messages=[];conversationId=q3();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=q3(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=q3(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function EH($){let{agentConfig:W}=$,Z=hz(W),Q=kz(W),J=$.hooks,j=Iz(W.maxParallelToolCalls);return{sessionId:$.sessionId??W.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??W.systemPrompt,messageModelInfo:Q,model:$.model,modelOptions:Z,tools:$.tools,hooks:J,prepareTurn:$.prepareTurn,consumePendingUserMessage:W.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??W.logger,telemetry:$.telemetry??W.telemetry,initialMessages:$.initialMessages,completionPolicy:W.completionPolicy,maxIterations:W.maxIterations,toolExecution:j,toolPolicies:W.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:W.requestToolApproval}}function hz($){let W={};if($.thinking!==void 0)W.thinking=$.thinking;if($.reasoningEffort!==void 0)W.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)W.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)W.maxTokensPerTurn=$.maxTokensPerTurn;if($.temperature!==void 0)W.temperature=$.temperature;if($.apiTimeoutMs!==void 0)W.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(W).length>0?W:void 0}function kz($){let W=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:W}}function Iz($){if($===void 0)return;return $>=2?"parallel":"sequential"}var wH={};w(wH,{normalizeConnectionUpdate:()=>T2,buildConnectionUpdate:()=>R3});function R3($){let W={};if($.providerId!==void 0)W.providerId=$.providerId;if($.modelId!==void 0)W.modelId=$.modelId;if($.apiKey!==void 0)W.apiKey=$.apiKey;if($.baseUrl!==void 0)W.baseUrl=$.baseUrl;if($.headers!==void 0)W.headers=$.headers;if($.providerConfig!==void 0)W.providerConfig=$.providerConfig;if($.thinking===!1)return W.thinking=!1,W.reasoningEffort=null,W.thinkingBudgetTokens=null,W;if($.thinking===!0)W.thinking=!0,W.reasoningEffort=$.reasoningEffort??null,W.thinkingBudgetTokens=null;else if($.reasoningEffort!==void 0)W.thinking=!0,W.reasoningEffort=$.reasoningEffort;if(typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)W.thinking=!0,W.thinkingBudgetTokens=Math.trunc($.thinkingBudgetTokens);return W}function T2($){let W={...$},Z=Object.hasOwn($,"thinking"),Q=Object.hasOwn($,"thinkingBudgetTokens");if($.thinking===!1||$.thinking===null)return W.reasoningEffort=void 0,W.thinkingBudgetTokens=void 0,W;if(!Z&&Q&&typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)W.thinking=!0;return W}function xz(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function gz($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function N3($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(N3);let W={};for(let Z of Object.keys($).sort())W[Z]=N3($[Z]);return W}function mz($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(N3($))}catch{return String($)}}function vz($,W,Z,Q){if(W===$.lastToolName&&Z===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=W,$.lastToolSignature=Z,{softWarning:$.consecutiveIdenticalCount===Q.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=Q.hardThreshold}}var CH={softThreshold:3,hardThreshold:5};class E3{config;state=xz();constructor($){this.config={softThreshold:$?.softThreshold??CH.softThreshold,hardThreshold:$?.hardThreshold??CH.hardThreshold}}inspect($){let W=mz($.input),Z=vz(this.state,$.name,W,this.config);if(Z.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Z.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){gz(this.state)}}class w3{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let W=this.options.maxConsecutiveMistakes,Z=$.forceAtLimit&&W?W:this.consecutiveMistakes+1;this.consecutiveMistakes=Z;let Q=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(Q),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Z,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!W||Z<W)return{action:"continue"};let J={iteration:$.iteration,consecutiveMistakes:Z,maxConsecutiveMistakes:W,reason:$.reason,details:$.details};this.options.onLimitTelemetry?.(J);let j=await uz(J,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:cz({iteration:$.iteration,consecutiveMistakes:Z,maxConsecutiveMistakes:W,reason:$.reason,details:$.details,stopReason:j.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function cz($){let W=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Z=$.details?.trim();if(Z)W.push(`Error: ${Z}`);let Q=$.stopReason?.trim();if(Q)W.push(`Decision: ${Q}`);return W.push("Session state was preserved. Send a new prompt to resume from the latest state."),W.join(" ")}async function uz($,W){if(!W)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await W($)}catch(Z){return{action:"stop",reason:Z instanceof Error?Z.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function dz($){switch($){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return $;default:return}}function lz($){let W=$.content.filter((Z)=>Z.type==="text");if(W.length===0)return;return W.map((Z)=>Z.text).join("")}function pz($){let W=$.content.filter((Z)=>Z.type==="reasoning");if(W.length===0)return;return{reasoning:W.map((Z)=>Z.text).join(""),redacted:W.some((Z)=>Z.redacted===!0)}}function rz($){return $.content.find((W)=>W.type==="tool-result")}function iz($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function nz($){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 C3{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:dz($.metadata?.reason),metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let W=[],Z=lz($);if(Z!==void 0)W.push({type:"content_end",contentType:"text",text:Z});let Q=pz($);if(Q!==void 0)W.push({type:"content_end",contentType:"reasoning",reasoning:Q.reasoning});return W}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 W=this.toolStartedAt.get($.toolCall.toolCallId),Z=W===void 0?void 0:Date.now()-W;this.toolStartedAt.delete($.toolCall.toolCallId);let Q=rz($.message),J=Q?.output,j=nz(Q);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:J,error:j,durationMs:Z}]}translateUsage($){let W=$.inputTokens-this.lastUsage.inputTokens,Z=$.outputTokens-this.lastUsage.outputTokens,Q=$.cacheReadTokens-this.lastUsage.cacheReadTokens,J=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,j=this.lastUsage.totalCost??0,Y=($.totalCost??0)-j;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,W),outputTokens:Math.max(0,Z),cacheReadTokens:Q===0?void 0:Math.max(0,Q),cacheWriteTokens:J===0?void 0:Math.max(0,J),cost:Y===0?void 0:Y,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let W={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:iz($.status),text:$.outputText,iterations:$.iterations,usage:W}]}}function Zq($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function Qq($){let Z=(typeof $.content==="function"?await $.content():$.content).trim();return Z.length>0?Z:void 0}function Jq($,W){let Z=$.trim(),Q=W.map((J)=>J.trim()).filter(Boolean).join(`
|
|
197
|
+
`;function EH($=process.env){return{maxToolResultChars:NH($[T3.maxToolResultChars]),maxTotalTextBytes:NH($[T3.maxTotalTextBytes]),minOutdatedRewriteBytes:vz($[T3.minOutdatedRewriteBytes])}}class q3{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=c4($.maxToolResultChars,Cz),this.maxFileContentChars=c4($.maxFileContentChars,Pz),this.maxTotalTextBytes=c4($.maxTotalTextBytes,Sz),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=c4($.maxAssistantTextChars,bz),this.maxAssistantToolMarkupChars=c4($.maxAssistantToolMarkupChars,yz),this.minOutdatedRewriteBytes=cz($.minOutdatedRewriteBytes,hz)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Z=this.addMissingToolResults($).map((J)=>{if(!Array.isArray(J.content)){if(J.role==="user"&&typeof J.content==="string"){let Y=OH(J.content);if(Y!==J.content)return{...J,content:Y}}if(J.role==="assistant"&&typeof J.content==="string"){let Y=this.truncateAssistantText(J.content);if(Y!==J.content)return{...J,content:Y}}return J}let j=!1,X=J.content.map((Y)=>{let V=this.transformBlock(Y,J.role);if(V!==Y)j=!0;return V});return j?{...J,content:X}:J}),Q=this.applyMediaBudget(Z);return this.truncateToTotalTextBudget(Q)}transformBlock($,W){if(W==="user"&&$.type==="text"&&typeof $.text==="string"){let J=OH($.text);if(J!==$.text)return{...$,text:J};return $}if(W==="assistant"&&$.type==="text"&&typeof $.text==="string"){let J=this.truncateAssistantText($.text);return J===$.text?$:{...$,text:J}}if($.type==="file"){let J=m8($.content,this.maxFileContentChars,qH);return J===$.content?$:{...$,content:J}}if($.type!=="tool_result")return $;let Z=this.resolveToolName($),Q=$.content;if(this.isReadTool(Z)&&$.is_error!==!0){let J=this.committedOutdatedRewrites.get($.tool_use_id);if(J&&J.size>0){let X=this.getReadLocators($).filter((Y)=>J.has(this.toReadLocatorKey(Y))&&this.isOutdatedReadLocator(Y,$.tool_use_id));if(X.length>0)Q=this.replaceOutdatedReadContent(Q,X)}}return Q=this.truncateToolResultContent(Q),Q===$.content?$:{...$,content:Q}}reindex($){let W=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!W)this.resetIndexes();for(let Z=this.indexedMessageCount;Z<$.length;Z++){let Q=$[Z];if(!Array.isArray(Q.content))continue;for(let J=0;J<Q.content.length;J++){let j=Q.content[J];if(j.type==="file")this.latestFullContentOwnerByPathCache.set(j.path,`file:${Z}:${J}`);else if(j.type==="tool_use"){let X=j.name.toLowerCase();if(this.toolNameByIdCache.set(j.id,X),this.isReadTool(X)){let Y=this.extractLocatorsFromReadToolInput(j.input);if(Y.length>0)this.readLocatorsByToolUseIdCache.set(j.id,Y)}}else if(j.type==="tool_result"){let X=this.resolveToolName(j);if(!this.isReadTool(X)||j.is_error===!0)continue;let Y=this.getReadLocators(j);for(let V of Y)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),j.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,j.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let W=new Map,Z=new Set,Q=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let j of J.content){if(j.type!=="tool_result"||j.is_error===!0)continue;let X=this.resolveToolName(j);if(!this.isReadTool(X))continue;Z.add(j.tool_use_id);let Y=this.committedOutdatedRewrites.get(j.tool_use_id),V=new Set,B=new Set;for(let G of this.getReadLocators(j)){let K=this.toReadLocatorKey(G);if(!this.isOutdatedReadLocator(G,j.tool_use_id))continue;if(B.add(K),!Y?.has(K))V.add(K)}if(Y){for(let G of Y)if(!B.has(G))Y.delete(G);if(Y.size===0)this.committedOutdatedRewrites.delete(j.tool_use_id)}if(V.size===0)continue;let H=W.get(j.tool_use_id);if(!H)H=new Set,W.set(j.tool_use_id,H);for(let G of V)H.add(G);Q+=this.estimateOutdatedReclaimBytes(j.content,V)}}for(let J of this.committedOutdatedRewrites.keys())if(!Z.has(J))this.committedOutdatedRewrites.delete(J);if(W.size===0||Q<this.minOutdatedRewriteBytes)return;for(let[J,j]of W){let X=this.committedOutdatedRewrites.get(J);if(!X)X=new Set,this.committedOutdatedRewrites.set(J,X);for(let Y of j)X.add(Y)}}estimateOutdatedReclaimBytes($,W){let Z=this.extractReadLocatorsFromToolResultContent($),Q=Z.length>0&&Z.every((V)=>W.has(this.toReadLocatorKey(V))),J=(V)=>{let B;try{B=JSON.parse(V)}catch{return Q||Z.length===0?X0(this.truncateMiddle(V)):0}let H=Array.isArray(B)?B:[B],G=0;for(let K of H){let F=this.extractLocatorFromResultEntry(K);if(F&&W.has(this.toReadLocatorKey(F)))G+=this.providerBoundEntryBytes(K)}return G};if(typeof $==="string")return J($);let j=new Set(W),X=0;for(let V of $)if(V.type==="text")X+=this.countOutdatedImageEntries(V.text,j);let Y=0;for(let V of $)if(V.type==="text")Y+=J(V.text);else if(V.type==="image"){if(X>0)X-=1,Y+=X0(V.data)}else if(C$(V)){let B=this.extractLocatorFromResultEntry(V);if(B&&W.has(this.toReadLocatorKey(B)))Y+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(W.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))Y+=X0(this.truncateMiddle(V.content))}return Y}providerBoundEntryBytes($){let W=this.truncateNestedStrings($);return X0(JSON.stringify(W))}addMissingToolResults($){let W=this.collectToolResultIds($),Z=[],Q=new Map,J=!1,j=()=>{if(Q.size===0)return;X(this.createMissingToolResultMessage(Q)),Q.clear(),J=!0},X=(Y)=>{let V=Z.at(-1);if(this.shouldMergeUserAfterToolResults(V,Y)){Z[Z.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(Y.content)]},J=!0;return}Z.push(Y)};for(let Y of $){if(this.isToolResultOnlyMessage(Y)){if(X(this.appendMissingToolResults(Y,Q)),Q.size>0)Q.clear(),J=!0;continue}if(Array.isArray(Y.content)){let V=Y.content.filter((H)=>H.type==="tool_result"),B=Y.content.filter((H)=>H.type!=="tool_result");if(V.length>0){let H=this.appendMissingToolResults({...Y,role:"user",content:V},Q);if(X(H),Q.size>0)Q.clear();J=!0}if(B.length>0||V.length===0){if(V.length===0)j();let H=V.length>0?{...Y,content:B}:Y;if(X(H),H.role==="assistant")this.trackMissingToolCalls(H,W,Q)}continue}j(),X(Y)}return j(),J?Z:$}appendMissingToolResults($,W){if(W.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(W)]}}shouldMergeUserAfterToolResults($,W){return $?.role==="user"&&W.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(W.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let W=new Set;for(let Z of $){if(!Array.isArray(Z.content))continue;for(let Q of Z.content)if(Q.type==="tool_result")W.add(Q.tool_use_id)}return W}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((W)=>W.type==="tool_result")}trackMissingToolCalls($,W,Z){if(!Array.isArray($.content))return;for(let Q of $.content){if(Q.type!=="tool_use"||W.has(Q.id))continue;Z.set(Q.id,Q.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([W,Z])=>({type:"tool_result",tool_use_id:W,name:Z,content:[{type:"text",text:this.formatMissingToolResultText(Z)}],is_error:!0}))}formatMissingToolResultText($){return $?`${zH} Tool: ${$}.`:zH}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 W=$,Z=this.readResultLocatorCache.get(W);if(Z===void 0)Z=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(W,Z);if(Z.length>0)return Z;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let W=$,Z=[],Q=this.extractLocatorFromReadRequest(W);if(Q)Z.push(Q);if(Array.isArray(W.files))for(let J of W.files){let j=this.extractLocatorFromReadRequest(J);if(j)Z.push(j)}if(Array.isArray(W.file_paths)){for(let J of W.file_paths)if(typeof J==="string"&&J.length>0)Z.push({path:J,startLine:null,endLine:null})}return this.dedupeReadLocators(Z)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);let W=[];for(let Z of $){if(Z.type==="text"){W.push(...this.tryParseReadLocators(Z.text));continue}if(C$(Z)){let Q=this.extractLocatorFromResultEntry(Z);if(Q)W.push(Q)}}return this.dedupeReadLocators(W)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Z=[];for(let Q of $){let J=this.extractLocatorFromResultEntry(Q);if(J)Z.push(J)}return this.dedupeReadLocators(Z)}let W=this.extractLocatorFromResultEntry($);return W?[W]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let W=$,Z=this.extractPath(W);if(!Z)return;return{path:Z,startLine:this.extractLineNumber(W.start_line),endLine:this.extractLineNumber(W.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let W=$,Z=this.extractPath(W);if(Z)return{path:Z,startLine:this.extractLineNumber(W.start_line),endLine:this.extractLineNumber(W.end_line)};if(typeof W.query==="string"&&W.query.length>0)return this.parseReadQuery(W.query);return}extractPath($){let W=[$.path,$.file_path,$.filePath];for(let Z of W)if(typeof Z==="string"&&Z.length>0)return Z;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let W=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!W)return{path:$,startLine:null,endLine:null};return{path:W[1],startLine:Number(W[2]),endLine:W[3]==="EOF"?null:Number(W[3])}}dedupeReadLocators($){let W=new Map;for(let Z of $)W.set(this.toReadLocatorKey(Z),Z);return Array.from(W.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,W){let Z=this.latestFullContentOwnerByPathCache.get($.path);if(Z&&Z!==W)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==W}replaceOutdatedReadContent($,W){let Z=new Set(W.map((j)=>this.toReadLocatorKey(j))),Q=new Set(W.map((j)=>j.path));if(typeof $==="string")return this.replaceOutdatedInString($,Z)??z2;let J=0;for(let j of $)if(j.type==="text")J+=this.countOutdatedImageEntries(j.text,Z);return $.map((j)=>{if(j.type==="file"){if(!Q.has(j.path))return j;return{...j,content:z2}}if(j.type==="image"){if(J===0)return j;return J-=1,{type:"text",text:z2}}if(C$(j))return this.replaceOutdatedReadEntry(j,Z);if(j.type!=="text")return j;let X=this.replaceOutdatedInString(j.text,Z);if(X===null)return{...j,text:z2};return X===j.text?j:{...j,text:X}})}countOutdatedImageEntries($,W){let Z;try{Z=JSON.parse($)}catch{return 0}let Q=Array.isArray(Z)?Z:[Z],J=0;for(let j of Q){if(!j||typeof j!=="object")continue;let X=j,Y=this.extractLocatorFromResultEntry(X);if(!Y)continue;if(!W.has(this.toReadLocatorKey(Y)))continue;if(X.result==="Successfully read image"||X.content==="Successfully read image")J+=1}return J}replaceOutdatedInString($,W){let Z;try{Z=JSON.parse($)}catch{return null}let Q=Array.isArray(Z)?Z.map((J)=>this.replaceOutdatedReadEntry(J,W)):this.replaceOutdatedReadEntry(Z,W);return JSON.stringify(Q)}replaceOutdatedReadEntry($,W){if(!$||typeof $!=="object")return $;let Z=this.extractLocatorFromResultEntry($);if(!Z||!W.has(this.toReadLocatorKey(Z)))return $;let Q={...$};if(typeof Q.result==="string")Q.result=z2;else if(typeof Q.content==="string")Q.content=z2;else Q.result=z2;return Q}isReadTool($){return!!$&&Iz.has($)}resolveToolName($){let W=this.toolNameByIdCache.get($.tool_use_id);if(W!==void 0)return W;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((W)=>{if(W.type==="file"){let Z=this.truncateMiddle(W.content);return Z===W.content?W:{...W,content:Z}}if(W.type==="text"){let Z=this.truncateMiddle(W.text);return Z===W.text?W:{...W,text:Z}}if(C$(W))return this.truncateNestedStrings(W);return W})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let W=!1,Z=$.map((Q)=>{let J=this.truncateNestedStrings(Q);if(J!==Q)W=!0;return J});return W?Z:$}if($!==null&&typeof $==="object"){if(M3($))return $;let W=!1,Z={};for(let[Q,J]of Object.entries($)){let j=this.truncateNestedStrings(J);if(j!==J)W=!0;Z[Q]=j}return W?Z:$}return $}truncateMiddle($){return m8($,this.maxToolResultChars,qH)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return m8($,this.maxAssistantToolMarkupChars,gz);return m8($,this.maxAssistantTextChars,xz)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let W=0;for(let Z of $.matchAll(mz))if(W+=1,W>=kz)return!0;return!1}truncateToTotalTextBudget($){let W=this.countMessageTextBytes($);if(W<=this.maxTotalTextBytes)return $;let Z=$.map((J)=>{if(!Array.isArray(J.content))return{...J};return{...J,content:J.content.map((j)=>dz(j))}}),Q=this.collectTruncationCandidates(Z);for(let J of Q){if(W<=this.maxTotalTextBytes)break;let j=J.byteLength;if(j<=J.minBytes)continue;let X=W-this.maxTotalTextBytes,Y=Math.max(J.minBytes,j-X),V=uz(J.get(),Y,J.makeMarker);J.set(V),W-=j-X0(V)}return Z}countMessageTextBytes($){let W=0;for(let Z of $){if(typeof Z.content==="string"){W+=X0(Z.content);continue}for(let Q of Z.content)if(Q.type==="text")W+=X0(Q.text);else if(Q.type==="thinking")W+=X0(Q.thinking);else if(Q.type==="file")W+=X0(Q.content);else if(Q.type==="tool_use")W+=rW(Q.input);else if(Q.type==="tool_result"){if(typeof Q.content==="string")W+=X0(Q.content);else for(let J of Q.content)if(J.type==="text")W+=X0(J.text);else if(J.type==="file")W+=X0(J.content);else if(C$(J))W+=rW(J)}}return W}collectTruncationCandidates($){let W=[],Z=[];for(let Q of $){if(Q.role==="assistant"&&typeof Q.content==="string"){W.push({byteLength:X0(Q.content),minBytes:TH,makeMarker:MH,get:()=>Q.content,set:(J)=>{Q.content=J}});continue}if(!Array.isArray(Q.content))continue;for(let J of Q.content){if(J.type==="tool_use"){iW(J.input,Z);continue}if(Q.role==="assistant"&&J.type==="text"){W.push({byteLength:X0(J.text),minBytes:TH,makeMarker:MH,get:()=>J.text,set:(j)=>{J.text=j}});continue}if(J.type!=="tool_result")continue;if(typeof J.content==="string"){W.push({byteLength:X0(J.content),minBytes:u4,makeMarker:d4,get:()=>J.content,set:(j)=>{J.content=j}});continue}for(let j of J.content)if(j.type==="text")W.push({byteLength:X0(j.text),minBytes:u4,makeMarker:d4,get:()=>j.text,set:(X)=>{j.text=X}});else if(j.type==="file")W.push({byteLength:X0(j.content),minBytes:u4,makeMarker:d4,get:()=>j.content,set:(X)=>{j.content=X}});else if(C$(j))iW(j,W)}}return W.sort((Q,J)=>J.byteLength-Q.byteLength),Z.sort((Q,J)=>J.byteLength-Q.byteLength),[...W,...Z]}applyMediaBudget($){let W=this.resolveMediaBudget();if(W.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&W.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&W.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Z=Nz(),Q=!1,J=$.map((j)=>{if(!Array.isArray(j.content))return j;let X=!1,Y=j.content.map((V)=>{let B=this.applyMediaBudgetToBlock(V,W,Z);if(B!==V)X=!0;return B});if(!X)return j;return Q=!0,{...j,content:Y}});return Q?J:$}resolveMediaBudget(){return Ez(this.mediaBudget)}applyMediaBudgetToBlock($,W,Z){if(z3($))return this.limitImageContent($,W,Z);if($.type!=="tool_result"||typeof $.content==="string")return $;let Q=!1,J=$.content.map((j)=>{let X=this.applyMediaBudgetToToolResultEntry(j,W,Z);if(X!==j)Q=!0;return X});return Q?{...$,content:J}:$}applyMediaBudgetToToolResultEntry($,W,Z){if(z3($))return this.limitImageContent($,W,Z);if(C$($))return this.limitNestedMedia($,W,Z);return $}limitNestedMedia($,W,Z){if(z3($)){let Q=this.limitImageContent($,W,Z);return Q.type==="text"?Q.text:Q}if(Array.isArray($)){let Q=!1,J=$.map((j)=>{let X=this.limitNestedMedia(j,W,Z);if(X!==j)Q=!0;return X});return Q?J:$}if($!==null&&typeof $==="object"){let Q=!1,J={};for(let[j,X]of Object.entries($)){let Y=this.limitNestedMedia(X,W,Z);if(Y!==X)Q=!0;J[j]=Y}return Q?J:$}return $}limitImageContent($,W,Z){if(!wH($))return{type:"text",text:fH};let Q=wz($.mediaType,$.data,{maxImageEncodedBytes:W.maxImageEncodedBytes,maxImageDecodedBytes:W.maxImageDecodedBytes,maxTotalMediaBytes:W.maxTotalMediaBytes},Z);if(!Q.ok)return{type:"text",text:fH};return{...$,data:Q.base64,mediaType:Q.mediaType}}}var RH=String.raw`[\|\uFF5C]`,mz=new RegExp(String.raw`<\s*(?:${RH}\s*)?DSML\s*(?:${RH}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function X0($){return Buffer.byteLength($,"utf8")}function NH($){if($===void 0)return;let W=Number.parseInt($,10);return Number.isFinite(W)&&W>0?W:void 0}function vz($){if($===void 0)return;let W=$.trim().toLowerCase();if(W==="infinity"||W==="disable")return Number.POSITIVE_INFINITY;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>=0?Z:void 0}function c4($,W){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):W}function cz($,W){if(typeof $!=="number"||Number.isNaN($)||$<0)return W;return Number.isFinite($)?Math.floor($):$}function m8($,W,Z){if($.length<=W)return $;let Q=Z($.length-W),J=Math.max(0,Math.floor((W-Q.length)/2)),j=Math.max(0,$.length-J*2),X=Z(j),Y=Math.max(0,Math.floor((W-X.length)/2)),V=$.slice(0,Y),B=Y>0?$.slice(-Y):"";return`${V}${X}${B}`}function uz($,W,Z){if(X0($)<=W)return $;let Q=0,J=$.length,j=m8($,0,Z);while(Q<=J){let X=Q+J>>>1,Y=m8($,X,Z);if(X0(Y)<=W)j=Y,Q=X+1;else J=X-1}return j}function dz($){if($.type==="tool_use")return{...$,input:nW($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((W)=>C$(W)?nW(W):{...W})}}function C$($){if($===null||typeof $!=="object")return!1;let W=$.type;return W!=="text"&&W!=="image"&&W!=="file"}function z3($){return $!==null&&typeof $==="object"&&$.type==="image"}function wH($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function M3($){return wH($)}function rW($){if(typeof $==="string")return X0($);if(Array.isArray($)){let W=0;for(let Z of $)W+=rW(Z);return W}if($!==null&&typeof $==="object"){if(M3($))return 0;let W=0;for(let Z of Object.values($))W+=rW(Z);return W}return 0}function iW($,W){if(Array.isArray($)){$.forEach((Z,Q)=>{if(typeof Z==="string")W.push({byteLength:X0(Z),minBytes:u4,makeMarker:d4,get:()=>$[Q],set:(J)=>{$[Q]=J}});else iW(Z,W)});return}if($!==null&&typeof $==="object"){if(M3($))return;let Z=$;for(let Q of Object.keys(Z)){let J=Z[Q];if(typeof J==="string")W.push({byteLength:X0(J),minBytes:u4,makeMarker:d4,get:()=>Z[Q],set:(j)=>{Z[Q]=j}});else iW(J,W)}}}function nW($){if(Array.isArray($))return $.map(nW);if($!==null&&typeof $==="object"){let W={};for(let[Z,Q]of Object.entries($))W[Z]=nW(Q);return W}return $}function R3(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class N3{messages=[];conversationId=R3();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=R3(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=R3(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function CH($){let{agentConfig:W}=$,Z=lz(W),Q=pz(W),J=$.hooks,j=rz(W.maxParallelToolCalls);return{sessionId:$.sessionId??W.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??W.systemPrompt,messageModelInfo:Q,model:$.model,modelOptions:Z,tools:$.tools,hooks:J,prepareTurn:$.prepareTurn,consumePendingUserMessage:W.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??W.logger,telemetry:$.telemetry??W.telemetry,initialMessages:$.initialMessages,completionPolicy:W.completionPolicy,maxIterations:W.maxIterations,toolExecution:j,toolPolicies:W.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:W.requestToolApproval}}function lz($){let W={};if($.thinking!==void 0)W.thinking=$.thinking;if($.reasoningEffort!==void 0)W.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)W.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)W.maxTokensPerTurn=$.maxTokensPerTurn;if($.temperature!==void 0)W.temperature=$.temperature;if($.apiTimeoutMs!==void 0)W.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(W).length>0?W:void 0}function pz($){let W=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:W}}function rz($){if($===void 0)return;return $>=2?"parallel":"sequential"}var PH={};w(PH,{normalizeConnectionUpdate:()=>q2,buildConnectionUpdate:()=>E3});function E3($){let W={};if($.providerId!==void 0)W.providerId=$.providerId;if($.modelId!==void 0)W.modelId=$.modelId;if($.apiKey!==void 0)W.apiKey=$.apiKey;if($.baseUrl!==void 0)W.baseUrl=$.baseUrl;if($.headers!==void 0)W.headers=$.headers;if($.providerConfig!==void 0)W.providerConfig=$.providerConfig;if($.thinking===!1)return W.thinking=!1,W.reasoningEffort=null,W.thinkingBudgetTokens=null,W;if($.thinking===!0)W.thinking=!0,W.reasoningEffort=$.reasoningEffort??null,W.thinkingBudgetTokens=null;else if($.reasoningEffort!==void 0)W.thinking=!0,W.reasoningEffort=$.reasoningEffort;if(typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)W.thinking=!0,W.thinkingBudgetTokens=Math.trunc($.thinkingBudgetTokens);return W}function q2($){let W={...$},Z=Object.hasOwn($,"thinking"),Q=Object.hasOwn($,"thinkingBudgetTokens");if($.thinking===!1||$.thinking===null)return W.reasoningEffort=void 0,W.thinkingBudgetTokens=void 0,W;if(!Z&&Q&&typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)W.thinking=!0;return W}function iz(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function nz($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function w3($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(w3);let W={};for(let Z of Object.keys($).sort())W[Z]=w3($[Z]);return W}function az($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(w3($))}catch{return String($)}}function oz($,W,Z,Q){if(W===$.lastToolName&&Z===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=W,$.lastToolSignature=Z,{softWarning:$.consecutiveIdenticalCount===Q.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=Q.hardThreshold}}var SH={softThreshold:3,hardThreshold:5};class C3{config;state=iz();constructor($){this.config={softThreshold:$?.softThreshold??SH.softThreshold,hardThreshold:$?.hardThreshold??SH.hardThreshold}}inspect($){let W=az($.input),Z=oz(this.state,$.name,W,this.config);if(Z.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Z.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){nz(this.state)}}class P3{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let W=this.options.maxConsecutiveMistakes,Z=$.forceAtLimit&&W?W:this.consecutiveMistakes+1;this.consecutiveMistakes=Z;let Q=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(Q),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Z,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!W||Z<W)return{action:"continue"};let J={iteration:$.iteration,consecutiveMistakes:Z,maxConsecutiveMistakes:W,reason:$.reason,details:$.details};this.options.onLimitTelemetry?.(J);let j=await tz(J,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:sz({iteration:$.iteration,consecutiveMistakes:Z,maxConsecutiveMistakes:W,reason:$.reason,details:$.details,stopReason:j.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function sz($){let W=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Z=$.details?.trim();if(Z)W.push(`Error: ${Z}`);let Q=$.stopReason?.trim();if(Q)W.push(`Decision: ${Q}`);return W.push("Session state was preserved. Send a new prompt to resume from the latest state."),W.join(" ")}async function tz($,W){if(!W)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await W($)}catch(Z){return{action:"stop",reason:Z instanceof Error?Z.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function ez($){switch($){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return $;default:return}}function $q($){let W=$.content.filter((Z)=>Z.type==="text");if(W.length===0)return;return W.map((Z)=>Z.text).join("")}function Wq($){let W=$.content.filter((Z)=>Z.type==="reasoning");if(W.length===0)return;return{reasoning:W.map((Z)=>Z.text).join(""),redacted:W.some((Z)=>Z.redacted===!0)}}function Zq($){return $.content.find((W)=>W.type==="tool-result")}function Qq($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function Jq($){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 S3{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:ez($.metadata?.reason),metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let W=[],Z=$q($);if(Z!==void 0)W.push({type:"content_end",contentType:"text",text:Z});let Q=Wq($);if(Q!==void 0)W.push({type:"content_end",contentType:"reasoning",reasoning:Q.reasoning});return W}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 W=this.toolStartedAt.get($.toolCall.toolCallId),Z=W===void 0?void 0:Date.now()-W;this.toolStartedAt.delete($.toolCall.toolCallId);let Q=Zq($.message),J=Q?.output,j=Jq(Q);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:J,error:j,durationMs:Z}]}translateUsage($){let W=$.inputTokens-this.lastUsage.inputTokens,Z=$.outputTokens-this.lastUsage.outputTokens,Q=$.cacheReadTokens-this.lastUsage.cacheReadTokens,J=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,j=this.lastUsage.totalCost??0,Y=($.totalCost??0)-j;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,W),outputTokens:Math.max(0,Z),cacheReadTokens:Q===0?void 0:Math.max(0,Q),cacheWriteTokens:J===0?void 0:Math.max(0,J),cost:Y===0?void 0:Y,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let W={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:Qq($.status),text:$.outputText,iterations:$.iterations,usage:W}]}}function Fq($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function Aq($){let Z=(typeof $.content==="function"?await $.content():$.content).trim();return Z.length>0?Z:void 0}function Uq($,W){let Z=$.trim(),Q=W.map((J)=>J.trim()).filter(Boolean).join(`
|
|
198
198
|
|
|
199
199
|
`);if(Z&&Q)return`${Z}
|
|
200
200
|
|
|
201
|
-
${Q}`;return Z||Q}function jq($,W){let Z=W?.["*"]??{},Q=W?.[$]??{};return{...Z,...Q}.enabled!==!1}function Xq($,W){return $.filter((Z)=>jq(Z.name,W))}function Yq($,W){return n1(Xq($,W))}function Vq($){let W=$.filter((Z)=>Z!==void 0);if(W.length===0)return{};return{beforeRun:async(Z)=>{for(let Q of W){let J=await Q.beforeRun?.(Z);if(J?.stop)return J}return},afterRun:async(Z)=>{for(let Q of W)await Q.afterRun?.(Z)},beforeModel:async(Z)=>{let Q=Z.request,J;for(let j of W){let X=await j.beforeModel?.({...Z,request:Q});if(!X)continue;if(X.stop)return X;J={...J,...X,options:SH(J?.options,X.options)},Q={...Q,...X.messages?{messages:X.messages}:{},...X.tools?{tools:X.tools}:{},...X.options?{options:SH(Q.options,X.options)}:{}}}return J},afterModel:async(Z)=>{for(let Q of W){let J=await Q.afterModel?.(Z);if(J?.stop)return J}return},beforeTool:async(Z)=>{let Q=Z.input,J;for(let j of W){let X=await j.beforeTool?.({...Z,input:Q});if(!X)continue;if(X.stop||X.skip)return X;if(J={...J,...X},Object.hasOwn(X,"input"))Q=X.input}return J},afterTool:async(Z)=>{let Q=Z.result,J;for(let j of W){let X=await j.afterTool?.({...Z,result:Q});if(!X)continue;if(X.stop)return X;if(J={...J,...X},X.result)Q=X.result}return J},onEvent:async(Z)=>{for(let Q of W)await Q.onEvent?.(Z)}}}class N${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 C3;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($,W={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=W.logger??$.logger,this.telemetry=W.telemetry??$.telemetry,this.createAgentRuntimeImpl=W.createAgentRuntimeImpl??$q,this.conversation=new M3($.initialMessages),this.messageBuilder=new T3(RH()),this.contributionRegistry=Wq({extensions:$.extensions?[...$.extensions]:[],setupContext:{session:$.extensionContext?.session,client:$.extensionContext?.client,user:$.extensionContext?.user,workspaceInfo:$.extensionContext?.workspace,automation:$.extensionContext?.automation,logger:$.extensionContext?.logger??this.logger,telemetry:$.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let Z=$.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new w3({maxConsecutiveMistakes:Z,onLimitReached:$.onConsecutiveMistakeLimitReached,onLimitTelemetry:(j)=>{W9(this.telemetry,{ulid:this.config.sessionId??this.conversation.getConversationId(),model:this.config.modelId,provider:this.config.providerId,reason:j.reason,consecutiveMistakes:j.consecutiveMistakes,maxConsecutiveMistakes:j.maxConsecutiveMistakes,agentId:this.agentId,conversationId:this.conversation.getConversationId(),parentAgentId:this.parentAgentId,isSubagent:Boolean(this.parentAgentId)})},emit:(j)=>this.emitLegacyEvent(j),log:(j,X,Y)=>Bq(this.logger,j,X,Y),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(j,X)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:j}]})}});let Q=$.execution?.loopDetection;this.loopDetectionDisabled=Q===!1;let J=Q===!1||Q===void 0?void 0:Q;this.loopTracker=new E3(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 W=new Set(this.config.tools.map((Q)=>Q.name)),Z=[...this.config.tools];for(let Q of $)if(!W.has(Q.name))Z.push(Q),W.add(Q.name);this.config={...this.config,tools:Z}}updateConnection($){let W=T2($),Z={...this.config};if(W.providerId!==void 0)Z.providerId=W.providerId;if(W.modelId!==void 0)Z.modelId=W.modelId;if(W.apiKey!==void 0)Z.apiKey=W.apiKey;if(W.baseUrl!==void 0)Z.baseUrl=W.baseUrl;if(W.headers!==void 0)Z.headers=W.headers;if(W.providerConfig!==void 0)Z.providerConfig=W.providerConfig;if(Object.hasOwn(W,"reasoningEffort"))Z.reasoningEffort=W.reasoningEffort??void 0;if(Object.hasOwn(W,"thinkingBudgetTokens"))Z.thinkingBudgetTokens=W.thinkingBudgetTokens??void 0;if(Object.hasOwn(W,"thinking")){if(Z.thinking=W.thinking??void 0,W.thinking===!1||W.thinking===null)Z.reasoningEffort=void 0,Z.thinkingBudgetTokens=void 0}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 W=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=W,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(W)}async shutdown($,W){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($,W,Z){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:W,userFiles:Z,isContinue:!1})}continue($,W,Z){return this.executeRun({userMessage:$,userImages:W,userFiles:Z,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let W of this.contributionRegistry.getRegisteredRules()){let Z=await Qq(W);if(Z)$.push(Z)}return Jq(this.config.systemPrompt,$)}executeRun($){let W;return W=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===W)this.activeRunPromise=null}),this.activeRunPromise=W,W}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 W=new Date,Z=$.userMessage;if(Z!==void 0){let _=await Gq(Z,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:_})}let Q=await this.composeSystemPrompt(),J=DH(this.config,this.logger,this.telemetry),j=new Map;for(let _ of this.contributionRegistry.getRegisteredTools())j.set(_.name,_);let X=Yq([...j.values()],this.config.toolPolicies),Y=new Map;for(let _ of X)Y.set(_.name,_);for(let _ of this.config.tools)Y.set(_.name,_);let V=this.conversation.getConversationId(),B=bH(this.config),H=Array.from(Y.values()),G=d9(this.conversation.getMessages()),K=EH({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:J,logger:this.logger,telemetry:this.telemetry,tools:H,toolContextMetadata:{modelSupportsImages:B?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[R9]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(B,H),initialMessages:G,systemPrompt:Q}),F=this.createAgentRuntimeImpl(K);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let A=F.subscribe((_)=>{this.handleRuntimeEvent(_)}),D,U;try{if($.isContinue)D=await F.continue(void 0);else D=await F.run("")}catch(_){U=_ instanceof Error?_:Error(String(_))}finally{A();try{await this.activeTrackerWork}catch(_){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:_})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(D&&D.messages.length>0){let _=I8(D.messages);this.conversation.replaceMessages(_)}let f=new Date;try{return this.buildLegacyResult({runResult:D,thrownError:U,startedAt:W,endedAt:f})}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 $=Vq([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((W)=>W.hooks)]);return{...$,beforeModel:async(W)=>{let Z=await $.beforeModel?.(W);if(Z?.stop)return Z;let Q=Z?.messages??W.request.messages,J=await this.prepareMessagesForModelRequest(Q);return{...Z,messages:J}}}}createRuntimePrepareTurn($,W){let Z=this.config.prepareTurn;if(!Z)return;return async(Q)=>{let J=I8(Q.messages),j=await this.prepareProviderMessagesForApi(J),X=await Z({agentId:Q.agentId,conversationId:Q.conversationId??this.conversation.getConversationId(),parentAgentId:Q.parentAgentId??null,iteration:Q.iteration,messages:J,apiMessages:j,abortSignal:Q.signal??new AbortController().signal,systemPrompt:Q.systemPrompt??"",tools:W,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:Q.emitStatusNotice});if(!X)return;return{...X.messages?{messages:d9(X.messages)}:{},...X.systemPrompt!==void 0?{systemPrompt:X.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let W=await this.prepareProviderMessagesForApi(l9($));return d9(W)}async prepareProviderMessagesForApi($){let W=$,Z=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let Q of Z)W=await Q.build(W);return this.messageBuilder.buildForApi(W)}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 W=this.toolStartedAt.get($.toolCall.toolCallId),Z=new Date,Q=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let J=$.message.content.find((V)=>V.type==="tool-result"),j=J?.type==="tool-result"&&J.isError===!0,X=j?Zq(J?.type==="tool-result"?J.output:void 0):void 0,Y={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:Q,output:J?.type==="tool-result"?J.output:void 0,error:X,durationMs:W===void 0?0:Z.getTime()-W.getTime(),startedAt:W??Z,endedAt:Z};if(this.currentRunToolCalls.push(Y),j){if(this.currentTurnFailedTools+=1,X)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${X}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let W=this.currentTurnFailedTools,Z=this.currentTurnSuccessfulTools;if(W>0&&Z===0){let Q=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${W} tool call(s) failed${Q?`: ${Q}`:""}`})}else if(Z>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let W of this.eventAdapter.translate($))this.emitLegacyEvent(W)}syncConversationFromRuntimeMessage($,W){if($.length>0){this.conversation.replaceMessages(I8($));return}if(W.length===0)return;let Z=new Set(this.conversation.getMessages().map((J)=>J.id).filter((J)=>typeof J==="string")),Q=I8(W).filter((J)=>!J.id||!Z.has(J.id));if(Q.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...Q])}emitLegacyEvent($){for(let W of this.listeners)try{W($)}catch(Z){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Z})}}inspectLoopForToolCall($,W,Z){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let Q=this.loopTracker.inspect({name:$,input:W});if(Q.kind==="ok")return;if(Q.kind==="soft"){if(Q.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:Q.message}]});return}this.enqueueMistakeRecord({iteration:Z,reason:"tool_execution_failed",forceAtLimit:!0,details:Q.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let W=await this.mistakeTracker.record($);if(W.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:W.message}]}),this.activeRuntime?.abort(W.reason??W.message)})}buildLegacyResult($){let{runResult:W,thrownError:Z,startedAt:Q,endedAt:J}=$,j=J.getTime()-Q.getTime(),X=Z?"error":Hq(W),Y=(W?.status==="failed"?W.error?.message:void 0)||W?.outputText||"",V=W?{inputTokens:W.usage.inputTokens,outputTokens:W.usage.outputTokens,cacheReadTokens:W.usage.cacheReadTokens>0?W.usage.cacheReadTokens:void 0,cacheWriteTokens:W.usage.cacheWriteTokens>0?W.usage.cacheWriteTokens:void 0,totalCost:W.usage.totalCost}:this.currentRunUsage,B=W?I8(W.messages):this.conversation.getMessages(),H=bH(this.config);if(Z)throw Z;return{text:Y,usage:V,messages:B,toolCalls:this.currentRunToolCalls,iterations:W?.iterations??0,finishReason:X,model:{id:this.config.modelId,provider:this.config.providerId,info:H},startedAt:Q,endedAt:J,durationMs:j}}}function Bq($,W,Z,Q){if(!$)return;if(W==="debug"){$.debug(Z,Q);return}if(W==="error"&&$.error){$.error(Z,Q);return}let J=W==="warn"?"warn":W==="error"?"error":"info";$.log(Z,{...Q,severity:J})}function Hq($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function Gq($,W,Z,Q){let{buildInitialUserContent:J}=await Promise.resolve().then(() => PH);return J($,W,Z,Q)}function bH($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let W=f3($);if(W?.[$.modelId])return W[$.modelId];return}import{buildClineSystemPrompt as yH}from"@cline/shared";function hH($,W){let Z=$.trim();if(W.providerId.toLowerCase()!=="cline")return Z;return yH({ide:W.clineIdeName?.trim()||"Terminal",workspaceRoot:W.cwd?.trim()||"/",providerId:W.providerId,rules:`# Team Teammate Role
|
|
202
|
-
${Z}`,platform:W.clinePlatform,metadata:W.workspaceMetadata})}function kH($,W){let Z=$.trim();if(W.providerId.toLowerCase()!=="cline")return Z;return yH({ide:W.clineIdeName||"Terminal",workspaceRoot:W.cwd?.trim()||"/",providerId:W.providerId,overridePrompt:Z,metadata:W.workspaceMetadata,platform:W.clinePlatform})}function E$($){let W={...$};return{getRuntimeConfig:()=>W,getConnectionConfig:()=>({providerId:W.providerId,modelId:W.modelId,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking,reasoningEffort:W.reasoningEffort,thinkingBudgetTokens:W.thinkingBudgetTokens,maxTokensPerTurn:W.maxTokensPerTurn,temperature:W.temperature}),updateConnectionDefaults:(Z)=>{W={...W,...Z}}}}function z2($){let W=$.configProvider.getRuntimeConfig(),Z=$.kind==="teammate"?hH($.prompt,W):kH($.prompt,W);return{...$.configProvider.getConnectionConfig(),systemPrompt:Z,tools:$.tools,maxIterations:$.maxIterations??W.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:W.hooks,extensions:W.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:W.logger,role:$.role}}function w$($){let W=z2($),Z=new N$(W);if(W.onEvent)Z.subscribeEvents(W.onEvent);return Z}var Aq=P3.object({systemPrompt:P3.string().describe("System prompt defining the sub-agent's behavior"),task:P3.string().describe("Task for the sub-agent to complete")});function C$($){return Kq({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:Fq(Aq),execute:async(W,Z)=>{let Q=$.createSubAgentTools?await $.createSubAgentTools(W,Z):$.subAgentTools??[],J=w$({kind:"subagent",prompt:W.systemPrompt,configProvider:$.configProvider,tools:Q,maxIterations:$.defaultMaxIterations,parentAgentId:Z.agentId,abortSignal:Z.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),j=J.getAgentId(),X=J.getConversationId(),Y=Z.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:j,conversationId:X,parentAgentId:Y,input:W})}catch{}try{let V=await J.run(W.task),B={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:j,conversationId:X,parentAgentId:Y,input:W,result:B,agentResult:V})}catch{}return B}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:j,conversationId:X,parentAgentId:Y,input:W,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as _0,TEAM_AWAIT_TIMEOUT_MS as Uq,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as Dq,TEAM_RUN_TEXT_PREVIEW_LIMIT as _q,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as fq,TeamAttachOutcomeFragmentInputSchema as IH,TeamAwaitRunsInputSchema as xH,TeamBroadcastInputSchema as gH,TeamBroadcastToolResultSchema as Lq,TeamCancelRunInputSchema as mH,TeamCancelRunToolResultSchema as Oq,TeamCleanupInputSchema as vH,TeamCleanupToolResultSchema as Tq,TeamCreateOutcomeInputSchema as cH,TeamCreateOutcomeToolResultSchema as zq,TeamFinalizeOutcomeInputSchema as uH,TeamFinalizeOutcomeToolResultSchema as qq,TeamListOutcomesInputSchema as dH,TeamListRunsInputSchema as lH,TeamMailboxMessageToolResultSchema as Mq,TeamMissionLogInputSchema as pH,TeamMissionLogToolResultSchema as Rq,TeamOutcomeFragmentToolResultSchema as rH,TeamOutcomeToolResultSchema as Nq,TeamReadMailboxInputSchema as iH,TeamReviewOutcomeFragmentInputSchema as nH,TeamRunTaskInputSchema as aH,TeamRunTaskToolResultSchema as S3,TeamRunToolSummarySchema as b3,TeamSendMessageInputSchema as oH,TeamSendMessageToolResultSchema as Eq,TeamShutdownTeammateInputSchema as sH,TeamSimpleAgentStatusToolResultSchema as tH,TeamSpawnTeammateInputSchema as eH,TeamStatusInputSchema as $G,TeamStatusToolResultSchema as wq,TeamTaskInputSchema as WG,TeamTaskToolResultSchema as d4,validateWithZod as g,zodToJsonSchema as f0}from"@cline/shared";function ZG($,W){let Z=$.replace(/\s+/g," ").trim();if(Z.length<=W)return Z;return`${Z.slice(0,Math.max(0,W-3)).trimEnd()}...`}function q2($,W){if($===void 0)throw Error(`Missing required field: ${W}`);return $}function Cq($){let W=$.result;if(!W)return;return{textPreview:ZG(W.text,_q),iterations:W.iterations,finishReason:W.finishReason,durationMs:W.durationMs,usage:{inputTokens:W.usage.inputTokens,outputTokens:W.usage.outputTokens,cacheReadTokens:W.usage.cacheReadTokens,cacheWriteTokens:W.usage.cacheWriteTokens,totalCost:W.usage.totalCost}}}function n9($){return $?.toISOString()}function y3($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:ZG($.message,Dq),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:n9($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:n9($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:n9($.heartbeatAt),lastProgressAt:n9($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:Cq($)}}function Pq($){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 g8=["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 QG($){let W=[];if($.createBaseTools)W.push(...$.createBaseTools());W.push(...M2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:z2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:W,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function m8($){let W=$.leadAgentId??"lead",Z=$.restoredFromPersistence===!0,Q=M2({runtime:$.runtime,requesterId:W,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),J=[];for(let j of $.restoredTeammates??[]){if($.runtime.isTeammateActive(j.agentId))continue;QG({runtime:$.runtime,requesterId:W,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:j}),J.push(j.agentId)}return{tools:Q,restoredFromPersistence:Z,restoredTeammates:J}}function M2($){let W=$.allowSpawn??!0,Z=$.includeSpawnTool??!0,Q=$.includeManagementTools??!0,J=[];if(Z)J.push(_0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:f0(eH),execute:async(X)=>{let Y=g(eH,X);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!W)throw Error("Spawning teammates is disabled in this context.");let V={agentId:Y.agentId,rolePrompt:Y.rolePrompt};if(QG({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!Q)$.onLeadToolsUnlocked?.(M2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return g(tH,{agentId:Y.agentId,status:"spawned"})}}));if(!Q)return J;J.push(_0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:f0(sH),execute:async(X)=>{let Y=g(sH,X);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(Y.agentId,Y.reason),g(tH,{agentId:Y.agentId,status:"stopped"})}})),J.push(_0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:f0($G),execute:async(X)=>{return g($G,X),g(wq,$.runtime.getSnapshot())}})),J.push(_0({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(WG),execute:async(X)=>{let Y=g(WG,X);switch(Y.action){case"create":{let V=new Set(fq.create??[]),B=Object.entries(X).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),H=$.runtime.createTask({title:q2(Y.title,"title"),description:q2(Y.description,"description"),dependsOn:Y.dependsOn,assignee:Y.assignee,createdBy:$.requesterId});return g(d4,{action:"create",taskId:H.id,status:H.status,...B.length>0?{ignoredFields:B,note:`Ignored fields for action=create: ${B.join(", ")}`}:{}})}case"list":return g(d4,{action:"list",tasks:$.runtime.listTaskItems({status:Y.status,assignee:Y.assignee})});case"claim":{let V=$.runtime.claimTask(q2(Y.taskId,"taskId"),$.requesterId);return g(d4,{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(q2(Y.taskId,"taskId"),$.requesterId,q2(Y.summary,"summary"));return g(d4,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(q2(Y.taskId,"taskId"),$.requesterId,q2(Y.reason,"reason"));return g(d4,{action:"block",taskId:V.id,status:V.status})}}}}));let j=new Map;return J.push(_0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:f0(aH),execute:async(X)=>{let Y=g(aH,X);if(Y.runMode==="async"){let H=$.runtime.startTeammateRun(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0});return g(S3,{agentId:Y.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${Y.agentId} and queued as ${H.id}.`,runId:H.id})}let V=j.get(Y.agentId);if(V){let H=await V;return g(S3,{...H,status:"joined",deduped:!0,message:`Task for ${Y.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let B=$.runtime.routeToTeammate(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0}).then((H)=>g(S3,{agentId:Y.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${Y.agentId} and completed in sync mode.`,text:H.text,iterations:H.iterations})).finally(()=>{j.delete(Y.agentId)});return j.set(Y.agentId,B),await B}})),J.push(_0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:f0(mH),execute:async(X)=>{let Y=g(mH,X),V=$.runtime.cancelRun(Y.runId,Y.reason);return g(Oq,{runId:V.id,status:V.status})}})),J.push(_0({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(lH),execute:async(X)=>g(b3.array(),$.runtime.listRuns(g(lH,X)).map(y3))})),J.push(_0({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(xH),timeoutMs:Uq,execute:async(X)=>{let Y=g(xH,X);if(Y.runId){let H=await $.runtime.awaitRun(Y.runId);return Pq(H),g(b3,y3(H))}let V=await $.runtime.awaitAllRuns(),B=V.filter((H)=>["failed","cancelled","interrupted"].includes(H.status));if(B.length>0){let H=B.map((G)=>`${G.id}:${G.status}${G.error?`(${G.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${H}`)}return g(b3.array(),V.map(y3))}})),J.push(_0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:f0(oH),execute:async(X)=>{let Y=g(oH,X),V=$.runtime.sendMessage($.requesterId,Y.toAgentId,Y.subject,Y.body,Y.taskId??void 0);return g(Eq,{id:V.id,toAgentId:V.toAgentId})}})),J.push(_0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:f0(gH),execute:async(X)=>{let Y=g(gH,X),V=$.runtime.broadcast($.requesterId,Y.subject,Y.body,{taskId:Y.taskId??void 0});return g(Lq,{delivered:V.length})}})),J.push(_0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:f0(iH),execute:async(X)=>{let Y=g(iH,X);return g(Mq.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:Y.unreadOnly,markRead:!0}))}})),J.push(_0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:f0(pH),execute:async(X)=>{let Y=g(pH,X),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:Y.taskId||void 0,kind:Y.kind,summary:Y.summary,evidence:Y.evidence?.length?Y.evidence:void 0,nextAction:Y.nextAction||void 0});return g(Rq,{id:V.id})}})),J.push(_0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:f0(vH),execute:async(X)=>{if(g(vH,X),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),g(Tq,{status:"cleaned"})}})),J.push(_0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:f0(cH),execute:async(X)=>{let Y=g(cH,X),V=$.runtime.createOutcome({title:Y.title,requiredSections:Y.requiredSections,createdBy:$.requesterId});return g(zq,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),J.push(_0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:f0(IH),execute:async(X)=>{let Y=g(IH,X),V=$.runtime.attachOutcomeFragment({outcomeId:Y.outcomeId,section:Y.section,sourceAgentId:$.requesterId,sourceRunId:Y.sourceRunId||void 0,content:Y.content});return g(rH,{fragmentId:V.id,status:V.status})}})),J.push(_0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:f0(nH),execute:async(X)=>{let Y=g(nH,X),V=$.runtime.reviewOutcomeFragment({fragmentId:Y.fragmentId,reviewedBy:$.requesterId,approved:Y.approved});return g(rH,{fragmentId:V.id,status:V.status})}})),J.push(_0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:f0(uH),execute:async(X)=>{let Y=g(uH,X),V=$.runtime.finalizeOutcome(Y.outcomeId);return g(qq,{outcomeId:V.id,status:V.status})}})),J.push(_0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:f0(dH),execute:async(X)=>{return g(dH,X),g(Nq.array(),$.runtime.listOutcomes())}})),J}function a9($){return{...$,tasks:$.tasks.map((W)=>({...W,createdAt:new Date(W.createdAt),updatedAt:new Date(W.updatedAt)})),mailbox:$.mailbox.map((W)=>({...W,sentAt:new Date(W.sentAt),readAt:W.readAt?new Date(W.readAt):void 0})),missionLog:$.missionLog.map((W)=>({...W,ts:new Date(W.ts)})),runs:($.runs??[]).map((W)=>({...W,startedAt:new Date(W.startedAt),endedAt:W.endedAt?new Date(W.endedAt):void 0,nextAttemptAt:W.nextAttemptAt?new Date(W.nextAttemptAt):void 0,heartbeatAt:W.heartbeatAt?new Date(W.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),finalizedAt:W.finalizedAt?new Date(W.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),reviewedAt:W.reviewedAt?new Date(W.reviewedAt):void 0}))}}function JG($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var Sq=[{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:C$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...g8]}],bq={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function yq($){return $==="plan"||$==="yolo"?$:"act"}function XG($){let W=yq($.mode),Z=a0[i1({mode:W})],Q=k8($.providerId??"",$.modelId??"",W,h8);return{mode:W,flags:{...Z,...Q,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function jG($,W){if(W.disabledToolIds?.has($))return!1;let{flags:Z}=XG(W);if($==="spawn_agent")return Z.enableSpawnAgent===!0;if($==="teams")return Z.enableAgentTeams===!0;if($==="editor")return Z.enableEditor===!0||Z.enableApplyPatch===!0;let Q=bq[$];return Q?Z[Q]===!0:!1}function hq($,W){if($.id==="editor"){let{flags:Z}=XG(W),Q=Z.enableApplyPatch===!0&&Z.enableEditor!==!0;return{...$,defaultEnabled:jG($.id,W),headlessToolNames:[Q?"apply_patch":"editor"]}}return{...$,defaultEnabled:jG($.id,W)}}function R2($={}){return Sq.map((W)=>hq(W,$))}function o9($={}){return R2($).filter((W)=>W.defaultEnabled).map((W)=>W.id)}function s9($){if(!$.enabled)return new Set;let W=R2($.availabilityContext),Z=new Set(W.map((Q)=>Q.id));if(!$.allowlist||$.allowlist.length===0)return new Set(W.filter((Q)=>Q.defaultEnabled).map((Q)=>Q.id));for(let Q of $.allowlist)if(!Z.has(Q))throw Error(`Unknown tool "${Q}". Available tools: ${W.map((J)=>J.id).join(", ")}`);return new Set($.allowlist)}function l4($,W={}){return R2(W).filter((Z)=>$.has(Z.id)).flatMap((Z)=>Z.headlessToolNames)}function t9($,W={}){return l4($,W)}function N2($={}){let{executorOptions:W={},executors:Z,...Q}=$,J={...y8(W),...Z??{}};return q$({...Q,executors:J})}import{mkdirSync as vq,writeFileSync as cq}from"node:fs";import{dirname as uq}from"node:path";import{normalizeUserInput as dq,stripModeNotices as lq}from"@cline/shared";import{nanoid as pq}from"nanoid";var VG={};w(VG,{sanitizeSessionToken:()=>E2,parseTeamTaskSubSessionId:()=>c8,parseSubSessionId:()=>r4,makeTeamTaskSubSessionId:()=>p4,makeSubSessionId:()=>v8,deriveSubsessionStatus:()=>i4});import{nanoid as xq}from"nanoid";function E2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function v8($,W){let Z=E2($),Q=E2(W),J=`${Z}__${Q}`;return J.length>180?J.slice(0,180):J}function p4($,W){let Z=E2($),Q=E2(W);return`${Z}__teamtask__${Q}__${xq(6)}`}function c8($){let Z=$.indexOf("__teamtask__");if(Z<=0)return null;let Q=$.slice(0,Z),J=$.slice(Z+12),j=J.lastIndexOf("__");if(j<=0)return null;let X=J.slice(0,j),Y=J.slice(j+2);if(!Q||!X||!Y)return null;return{rootSessionId:Q,agentId:X,teamTaskId:Y}}function r4($){if(c8($))return null;let W="__",Z=$.indexOf(W);if(Z<=0)return null;let Q=$.slice(0,Z),J=$.slice(Z+W.length);if(!Q||!J)return null;return{rootSessionId:Q,agentId:J}}function i4($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let W=String($.reason??"").toLowerCase();if(W.includes("cancel")||W.includes("abort")||W.includes("interrupt"))return"cancelled";if(W.includes("fail")||W.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as Z0}from"zod";var GG={};w(GG,{isTerminalSessionStatus:()=>HG,isNonTerminalSessionStatus:()=>K0,SessionSource:()=>F0,SESSION_STATUSES:()=>n4,NON_TERMINAL_SESSION_STATUSES:()=>BG});import{SESSION_STATUS_VALUES as gq}from"@cline/shared";var n4=gq,BG=["idle","running","pending"];function HG($){return!BG.includes($)}function K0($){return!HG($)}var F0={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 mq=Z0.enum(n4),x0=Z0.object({version:Z0.literal(1),session_id:Z0.string().min(1),source:Z0.string().min(1),pid:Z0.number().int(),started_at:Z0.string().min(1),ended_at:Z0.string().min(1).optional(),exit_code:Z0.number().int().nullable().optional(),status:mq,interactive:Z0.boolean(),provider:Z0.string().min(1),model:Z0.string().min(1),cwd:Z0.string().min(1),workspace_root:Z0.string().min(1),team_name:Z0.string().min(1).optional(),enable_tools:Z0.boolean(),enable_spawn:Z0.boolean(),enable_teams:Z0.boolean(),prompt:Z0.string().optional(),metadata:Z0.record(Z0.string(),Z0.unknown()).optional(),messages_path:Z0.string().min(1).optional(),compaction_path:Z0.string().min(1).optional()});function KG($){if(!$)return!1;return Object.values($).some((W)=>typeof W==="function")}function k3($,W){let Z=[...$??[],...W??[]];if(Z.length===0)return;let Q=[],J=new Set;for(let j of Z){if(J.has(j.name))continue;J.add(j.name),Q.push(j)}return Q}function FG($){return JSON.stringify($,(W,Z)=>{if(Z instanceof Error)return{name:Z.name,message:Z.message,stack:Z.stack};return Z})}function a1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function h3($,W){let Z={...$};Z.id=a1(Z.id)??pq();let Q=Z.modelInfo&&typeof Z.modelInfo==="object"?{...Z.modelInfo}:void 0,J={id:a1(Q?.id)??a1(Z.modelId)??a1(W?.id),provider:a1(Q?.provider)??a1(Z.providerId)??a1(W?.provider),family:a1(Q?.family)??a1(W?.family)};if(delete Z.providerId,delete Z.modelId,J.id&&J.provider)Z.modelInfo={id:J.id,provider:J.provider,...J.family?{family:J.family}:{}};else delete Z.modelInfo;return Z}function e9($){return $.map((W)=>h3(W))}function $Z($,W,Z=[]){let Q=$.map((V,B)=>{let H=Z[B],K=H?.role===V.role&&JSON.stringify(H.content)===JSON.stringify(V.content)?{...H,...V}:{...V};return h3(K)}),J=Z.length,j=[];for(let V=J;V<Q.length;V+=1)if(Q[V]?.role==="assistant")j.push(V);if(j.length===0){let V=[...Q].reverse().findIndex((B)=>B.role==="assistant");if(V===-1)return Q;j.push(Q.length-1-V)}let X=j[j.length-1],Y=j.some((V)=>Q[V]?.metrics);for(let V of j){let B=Q[V],H=B.metrics;if(!H&&V===X&&!Y){let G=W.usage;H={inputTokens:G.inputTokens,outputTokens:G.outputTokens,cacheReadTokens:G.cacheReadTokens??0,cacheWriteTokens:G.cacheWriteTokens??0,cost:G.totalCost}}Q[V]={...h3(B,{id:W.model.id,provider:W.model.provider,family:W.model.info?.family}),...H?{metrics:H}:{},ts:B.ts??W.endedAt.getTime()}}return Q}function a4($){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 rq=120;function w2($){let W=$?.trim();return W?W.slice(0,rq):void 0}function I3($){let W=lq(dq($??"")).trim();if(!W)return;return w2(W.split(`
|
|
203
|
-
`)[0]?.trim())}function
|
|
204
|
-
`,"utf8")}function UG($,W){return x0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:W?.endedAt??$.endedAt??void 0,exit_code:W?.exitCode??$.exitCode??void 0,status:W?.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:W?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function DG($,W,Z){let Q=0;while(!0){let J=await $();if(J===void 0)return{updated:!1};let j=await W(J);if(typeof j==="object"&&j!==null&&"updated"in j&&j.updated===!1){if(Q+=1,Q>=Z)return j;continue}return j}}D0();var _G={};w(_G,{summarizeUsageFromMessages:()=>d8,sumUsageTotals:()=>s4,getCurrentContextSize:()=>m3,createInitialAccumulatedUsage:()=>q0,accumulateUsageTotals:()=>L0});function q0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function L0($,W){return{inputTokens:$.inputTokens+Math.max(0,W.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,W.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,W.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,W.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,W.totalCost??0)}}function s4($){let W=q0();for(let Z of $)W=L0(W,Z);return W}function u8($){return typeof $==="number"&&Number.isFinite($)?$:0}function d8($){let W=q0();for(let Z of $){let Q=Z.metrics;if(!Q)continue;W=L0(W,{inputTokens:u8(Q.inputTokens),outputTokens:u8(Q.outputTokens),cacheReadTokens:u8(Q.cacheReadTokens),cacheWriteTokens:u8(Q.cacheWriteTokens),totalCost:u8(Q.cost)})}return W}function m3($){for(let W=$.length-1;W>=0;W-=1){let Z=$[W];if(Z?.role!=="assistant")continue;let Q=u8(Z.metrics?.inputTokens);return Q>0?Q:void 0}return}function iq($){if(!$||typeof $!=="object")return;let W=$,Z=W.skill??W.skill_name??W.skillName;if(typeof Z!=="string")return;let Q=Z.trim();return Q.length>0?Q:void 0}function v3($){if(!$||typeof $!=="object")return{};let W=$;return{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}}function o1($){let W=$.agentId?.trim();if(!W)return;let Z=$.parentAgentId?.trim()||void 0,Q=$.teamRole,J="root";if(Q==="teammate")J="team_teammate";else if(Q==="lead")J="team_lead";else if(Z)J="subagent";return{agentId:W,agentKind:J,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Z,createdByAgentId:$.createdByAgentId?.trim()||Z||void 0,isSubagent:Boolean(Z),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:Q,teamAgentId:$.teamAgentId?.trim()||void 0}}function nq($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function aq($){let W=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Z of W){let Q=Z?.trim();if(Q)return Q}return $.isPrimaryAgentEvent?"root":"unknown"}function c3($,W,Z){let{sessionId:Q,config:J,liveSession:j,emit:X}=$,Y=J.telemetry,V=j?.runtime.teamRuntime,B=Z?.isPrimaryAgentEvent??!0,H=v3(W),G=o1({agentId:Z?.agentId??H.agentId,conversationId:Z?.conversationId??H.conversationId,parentAgentId:Z?.parentAgentId??H.parentAgentId,createdByAgentId:Z?.createdByAgentId,teamId:Z?.teamId??V?.getTeamId(),teamName:Z?.teamName??V?.getTeamName(),teamRole:Z?.teamRole,teamAgentId:Z?.teamAgentId});if(W.type==="content_start"&&W.contentType==="tool"&&W.toolName==="skills"){let K=iq(W.input);if(K)eW(Y,{ulid:Q,skillName:K,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:J.providerId,modelId:J.modelId,...G})}if(W.type==="content_end"&&W.contentType==="tool"){let K=W.toolName??"unknown",F=!W.error;if(_8(Y,{ulid:Q,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))$9(Y,{ulid:Q,modelId:J.modelId,provider:J.providerId,errorType:W.error,...G})}if(W.type==="notice"&&W.reason==="api_error")W4(Y,{ulid:Q,model:J.modelId,provider:J.providerId,errorMessage:W.message,...G});if(W.type==="error")W4(Y,{ulid:Q,model:J.modelId,provider:J.providerId,errorMessage:W.error?.message??"unknown error",...G});if(W.type==="usage"&&j?.turnUsageBaseline){let K=nq(W);if(B){j.turnPrimaryUsage=L0(j.turnPrimaryUsage??q0(),K);let A=L0(j.turnUsageBaseline,j.turnPrimaryUsage);$.usageBySession.set(Q,A),D8(Y,{ulid:Q,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),sW(Y,{ulid:Q,tokensIn:W.inputTokens,tokensOut:W.outputTokens,cacheWriteTokens:W.cacheWriteTokens,cacheReadTokens:W.cacheReadTokens,totalCost:W.cost,model:J.modelId,...G})}else{let A=aq({isPrimaryAgentEvent:B,overrides:Z,eventMetadata:H}),D=j.turnUsageByAgent??new Map;j.turnUsageByAgent=D,D.set(A,L0(D.get(A)??q0(),K))}let F=L0(j.turnPrimaryUsage??q0(),s4(j.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(Q,L0(j.turnAggregateUsageBaseline??j.turnUsageBaseline,F))}if(W.type==="iteration_end"&&B)$.persistMessages(Q,j?.agent.getMessages()??[],j?.config.systemPrompt);X({type:"agent_event",payload:{sessionId:Q,event:W,teamAgentId:Z?.teamAgentId,teamRole:Z!==void 0?Z.teamRole??(B?"lead":void 0):void 0}}),X({type:"chunk",payload:{sessionId:Q,stream:"agent",chunk:FG(W),ts:Date.now()}})}function s1($){return $.workspaceRoot??$.cwd}import{resolveProviderRequestHeaders as jN}from"@cline/llms";import{hasRuntimeConfigExtension as XN}from"@cline/shared";var l8="0.0.64";var t4={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:l8,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"]};U1();import{existsSync as XZ,readFileSync as IM,statSync as xM}from"node:fs";import{basename as gM,dirname as JZ,join as YZ,resolve as jZ}from"node:path";import{discoverPluginModulePaths as mM,resolveConfiguredPluginModulePaths as mG,resolvePluginConfigSearchPaths as vM,SKILLS_CONFIG_DIRECTORY_NAME as cM}from"@cline/shared/storage";import{resolve as UM}from"node:path";import{normalizePluginManifest as DM}from"@cline/shared";import{existsSync as E0,readFileSync as r8}from"node:fs";import{builtinModules as oq,createRequire as p3}from"node:module";import{dirname as S$,extname as $5,isAbsolute as sq,resolve as o}from"node:path";import{fileURLToPath as OG}from"node:url";import{PLUGIN_FILE_EXTENSIONS as tq}from"@cline/shared";var TG=S$(OG(import.meta.url)),eq=p3(import.meta.url),$M=o(TG,"..","..","..","..",".."),u3=QM($M),WM=["@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"],r3=new Set(oq.flatMap(($)=>[$,$.replace(/^node:/,"")])),e4=new Set(tq),ZM=["development","node","import","require","default"];function QM($){let W={},Z={"@cline/sdk":o($,"packages/sdk/src/index.ts"),"@cline/agents":o($,"packages/agents/src/index.ts"),"@cline/core":o($,"packages/core/src/index.ts"),"@cline/llms":o($,"packages/llms/src/index.ts"),"@cline/shared":o($,"packages/shared/src/index.ts"),"@cline/shared/storage":o($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":o($,"packages/shared/src/db/index.ts")};for(let[Q,J]of Object.entries(Z))if(E0(J))W[Q]=J;for(let Q of["agents","core","llms","shared"]){let J=o($,"packages",Q),j=o(J,"package.json");if(!E0(j))continue;try{let X=JSON.parse(r8(j,"utf8"));if(typeof X.name!=="string"||!X.exports)continue;if(typeof X.exports==="string"){let Y=o(J,X.exports);if(E0(Y))W[X.name]=Y;continue}if(typeof X.exports!=="object")continue;for(let[Y,V]of Object.entries(X.exports)){let B=JM(J,V);if(!B)continue;let H=Y==="."?X.name:`${X.name}/${Y.replace(/^\.\//,"")}`;W[H]=B}}catch{}}return W}function JM($,W){let Z=i3(W);if(!Z)return null;let Q=zG($,Z);for(let J of Q)if(E0(J))return J;return null}function i3($,W=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(W.has($))return null;W.add($);let Z=$;for(let Q of ZM){let J=i3(Z[Q],W);if(J)return J}return null}function zG($,W){let Z=W.replace(/^\.\//,""),Q=[o($,W)];if(Z.startsWith("dist/")){let J=Z.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[o($,`${J}.ts`),o($,`${J}.tsx`),o($,`${J}.mts`),o($,`${J}.cts`),...Q]}return Q}function jM($){return Object.fromEntries(Object.entries($).sort(([W],[Z])=>Z.length-W.length))}function WZ($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function p8($){if($.startsWith("@")){let[W,Z]=$.split("/",3);return Z?`${W}/${Z}`:$}return $.split("/",1)[0]??$}function XM($){let W=p8($);if($===W)return".";return`.${$.slice(W.length)}`}function qG($){return p8($).startsWith("@cline/")}function d3($,W){let Z=p8(W),Q=S$($);while(!0){let J=o(Q,"node_modules",Z);if(E0(J)||E0(o(J,"package.json")))return!0;let j=o(Q,"..");if(j===Q)return!1;Q=j}}function LG($){return l3($)!==null}function l3($){try{return eq.resolve($)}catch{}return YM($)}function YM($){let W=p8($),Z=MG(W);if(!Z)return null;let Q=o(Z,"package.json");try{let J=JSON.parse(r8(Q,"utf8")),j=XM($),X=j==="."&&typeof J.exports==="string"?J.exports:J.exports&&typeof J.exports==="object"&&Object.hasOwn(J.exports,j)?J.exports[j]:void 0,Y=i3(X)??(j==="."&&typeof J.main==="string"?J.main:null);if(!Y)return null;let V=o(Z,Y),B=[V,...zG(Z,Y).filter((H)=>H!==V)];for(let H of B)if(E0(H))return H;return null}catch{return null}}function VM(){let $=[TG],W=process.env.CLINE_WRAPPER_PATH?.trim();if(W)$.push(S$(S$(W)));let Z=process.execPath?.trim();if(Z)$.push(S$(Z));return[...new Set($.map((Q)=>o(Q)))]}function BM($,W){let Z=$;while(!0){let Q=o(Z,"package.json");if(E0(Q))try{if(JSON.parse(r8(Q,"utf8")).name===W)return Z}catch{}let J=o(Z,"node_modules",W,"package.json");if(E0(J))return S$(J);let j=o(Z,"..");if(j===Z)return null;Z=j}}function MG($){for(let W of VM()){let Z=BM(W,$);if(Z)return Z}return null}function HM($){let Z=S$($);for(let Q=0;Q<4;Q++){let J=o(Z,"package.json");if(E0(J))try{let X=JSON.parse(r8(J,"utf8"));return X!=null&&typeof X==="object"&&"cline"in X}catch{return!1}let j=o(Z,"..");if(j===Z)return!1;Z=j}return!1}function RG($,W){let Z=W.startsWith("file:")?OG(W):sq(W)?W:o(S$($),W);if(E0(Z)&&e4.has($5(Z)))return Z;for(let Q of e4){let J=`${Z}${Q}`;if(E0(J))return J}for(let Q of e4){let J=o(Z,`index${Q}`);if(E0(J))return J}return null}function NG($){let W=new Set,Z=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let Q of Z)for(let J of $.matchAll(Q)){let j=J[1];if(j)W.add(j)}return[...W]}function GM($){return $5($)!==".ts"}function EG($,W,Z=new Set){if(Z.has($)||!E0($))return;if(Z.add($),!e4.has($5($)))return;let Q=r8($,"utf8"),J=GM($);for(let j of NG(Q)){if(j.startsWith("node:")||r3.has(j))continue;if(WZ(j)){if(!J)continue;if(Object.hasOwn(u3,j)||Object.hasOwn(u3,p8(j))||d3($,j)||qG(j)&&LG(j)||W&&LG(j))continue;throw Error(`Cannot find module '${p8(j)}'`)}let X=RG($,j);if(X)EG(X,W,Z)}}function wG($,W=new Set,Z=new Set){if(W.has($)||!E0($))return Z;if(W.add($),!e4.has($5($)))return Z;let Q=r8($,"utf8");for(let J of NG(Q)){if(Z.add(J),WZ(J))continue;let j=RG($,J);if(j)wG(j,W,Z)}return Z}function KM($,W){let Z=p3($),Q={},J=wG($),j=new Set(WM);for(let[X,Y]of Object.entries(u3)){try{Z.resolve(X);continue}catch{}Q[X]=Y}for(let X of J)if(WZ(X)&&(qG(X)||W))j.add(X);for(let X of j){if(Object.hasOwn(Q,X)||d3($,X))continue;let Y=l3(X);if(Y)Q[X]=Y}if(!W)return Q;for(let X of J){if(!WZ(X)||Object.hasOwn(Q,X)||d3($,X)||X.startsWith("node:")||r3.has(X))continue;let Y=l3(X);if(Y)Q[X]=Y}return Q}function FM($){let W=$5($);return W===".ts"||W===".tsx"||W===".mts"||W===".cts"}var C2;function AM(){if(C2!==void 0)return C2;let $=MG("jiti");if(!$)return C2=null,null;let W=o($,"dist","babel.cjs");if(!E0(W))return C2=null,null;try{let Q=p3(W)(W);C2=typeof Q==="function"?Q:null}catch{C2=null}return C2}async function CG($,W={}){let Z=!HM($);EG($,Z);let Q=KM($,Z),J=jM(Q),j=await import("jiti"),X=typeof j==="function"?j:typeof j.default==="function"?j.default:void 0;if(!X)throw Error("Unable to load jiti");let Y=Object.entries(J).filter(([,G])=>FM(G)).map(([G])=>G),V=AM(),B=V?(G)=>V({...G,interopDefault:!0}):void 0;return await X($,{alias:J,cache:W.useCache,requireCache:W.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...r3],transformModules:Y,tryNative:!1,...B?{transform:B}:{}}).import($,{})}function PG($,W){if(!$)return!0;if($.providerIds?.length){if(!W?.providerId||!$.providerIds.includes(W.providerId))return!1}if($.modelIds?.length){if(!W?.modelId||!$.modelIds.includes(W.modelId))return!1}return!0}function SG($){return typeof $==="object"&&$!==null}function n3($){return Array.isArray($)&&$.every((W)=>typeof W==="string")}function _M($,W){if(!SG($.manifest))throw Error(`Invalid plugin module at ${W}: missing required "manifest"`);if(!n3($.manifest.capabilities))throw Error(`Invalid plugin module at ${W}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${W}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!n3($.manifest.providerIds))throw Error(`Invalid plugin module at ${W}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!n3($.manifest.modelIds))throw Error(`Invalid plugin module at ${W}: manifest.modelIds must be a string array when provided`)}function fM($,W){if(!SG($))throw Error(`Invalid plugin module at ${W}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${W}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${W}: missing required "manifest"`);_M($,W)}async function W5($,W={}){let Z=UM(W.cwd??process.cwd(),$),Q=await CG(Z,{useCache:W.useCache}),J=W.exportName??"plugin",j=Q.default??Q[J];fM(j,Z);let X=j,Y=X.setup,V=Y?(B,H)=>{let G={...W.session,...H.session},K={...H,session:Object.keys(G).length>0?G:void 0,client:W.client??H.client,user:W.user??H.user,workspaceInfo:W.workspaceInfo??H.workspaceInfo,automation:W.automation??H.automation,logger:W.logger??H.logger,telemetry:W.telemetry??H.telemetry};return Y(B,K)}:void 0;return{...X,manifest:DM(X.manifest),setup:V}}async function ZZ($,W={}){return(await P2($,W)).plugins}async function P2($,W={}){let Z=[],Q=[],J=new Map,j=0;for(let Y of $)try{let V=await W5(Y,W);if(!PG(V.manifest,W))continue;let B=J.get(V.name);if(B)Q.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:Y,overriddenPluginPath:B.pluginPath,message:`Plugin "${V.name}" from ${Y} overrides ${B.pluginPath}`});J.set(V.name,{plugin:V,pluginPath:Y,order:j++})}catch(V){let B=V instanceof Error?V.message:String(V);Z.push({pluginPath:Y,phase:"load",message:B,stack:V instanceof Error?V.stack:void 0})}let X=[...J.values()].sort((Y,V)=>Y.order-V.order);return{plugins:X.map((Y)=>Y.plugin),pluginPaths:X.map((Y)=>Y.pluginPath),failures:Z,warnings:Q}}import{existsSync as t3}from"node:fs";import{createRequire as gG}from"node:module";import{dirname as QZ,join as n8}from"node:path";import{fileURLToPath as qM}from"node:url";var IG={};w(IG,{resolveSubprocessRuntimeExecutable:()=>a3,buildSubprocessSandboxCommand:()=>kG,SubprocessSandbox:()=>i8,CLINE_JS_RUNTIME_PATH_ENV:()=>hG});import{spawn as LM}from"node:child_process";import{basename as OM}from"node:path";import{augmentNodeCommandForDebug as TM,withResolvedClineBuildEnv as zM}from"@cline/shared";function bG($){if($ instanceof Error)return $;return Error(String($))}var hG="CLINE_JS_RUNTIME_PATH";function yG($){let W=$?.trim();if(!W)return!1;let Z=OM(W).toLowerCase();return Z==="node"||Z==="node.exe"||Z==="bun"||Z==="bun.exe"}function a3($={}){let W=$.env??process.env,Z=$.runtimeExecutable?.trim()||W[hG]?.trim();if(Z)return Z;let Q=$.execPath?.trim()||process.execPath;if(yG(Q))return Q;for(let J of[W.BUN_EXEC_PATH,W.npm_node_execpath,W.NODE]){let j=J?.trim();if(j&&yG(j))return j}return"node"}function kG($,W={}){let Z=a3({env:W.env,execPath:W.execPath,runtimeExecutable:W.runtimeExecutable});return TM([Z,...$],{env:W.env,execArgv:W.execArgv,debugRole:W.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class i8{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let W=this.pending.get($);if(!W)return;if(this.pending.delete($),W.timeout)clearTimeout(W.timeout);return W}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],W=kG($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Z=LM(W[0]??a3(this.options),W.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:zM(process.env),windowsHide:!0});this.process=Z;let Q="",J=(j)=>{let X=Q+j;Q=X.length>4000?X.slice(-4000):X};Z.stderr?.setEncoding("utf8"),Z.stderr?.on("data",(j)=>{J(j)}),Z.on("message",(j)=>{this.onMessage(j)}),Z.on("error",(j)=>{this.failPending(Error(`${this.processLabel} process error: ${bG(j).message}`))}),Z.on("exit",(j,X)=>{this.process=null;let Y=Q.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(j)}, signal=${String(X)})${Y?`: ${Y}`:""}`))})}async call($,W,Z={}){this.start();let Q=this.process;if(!Q||Q.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let J=`req_${++this.requestCounter}`,j={type:"call",id:J,method:$,args:W};return await new Promise((X,Y)=>{let V={resolve:(B)=>X(B),reject:Y};if((Z.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(J),this.shutdown().catch(()=>{}),Y(Error(`${this.processLabel} call timed out after ${Z.timeoutMs}ms: ${$}`))},Z.timeoutMs);this.pending.set(J,V),Q.send(j,(B)=>{if(!B)return;let H=this.clearPendingRequest(J);if(!H)return;H.reject(Error(`${this.processLabel} failed to send call "${$}": ${bG(B).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((W)=>{let Z=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}W()},300);$.once("exit",()=>{clearTimeout(Z),W()});try{$.kill("SIGTERM")}catch{clearTimeout(Z),W()}}),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 W=this.clearPendingRequest($.id);if(!W)return;if($.ok){W.resolve($.result);return}W.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[W,Z]of this.pending.entries()){if(this.pending.delete(W),Z.timeout)clearTimeout(Z.timeout);Z.reject($)}}}function MM($){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 Z5($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function RM(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function NM(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Z=gG($).resolve(`${RM()}/package.json`),Q=n8(QZ(Z),"extensions","plugin-sandbox-bootstrap.js");return t3(Q)?Q:void 0}catch{return}}function EM(){let $=process.execPath?.trim();if(!$)return;let W=n8(QZ(QZ($)),"extensions","plugin-sandbox-bootstrap.js");return t3(W)?W:void 0}function wM(){let $=QZ(qM(import.meta.url)),W=gG(import.meta.url),Z=[n8($,"plugin-sandbox-bootstrap.js"),n8($,"extensions","plugin-sandbox-bootstrap.js"),n8($,"agents","plugin-sandbox-bootstrap.js"),NM(),EM()];for(let j of Z.filter((X)=>typeof X==="string"))if(t3(j))return{file:j};let Q=n8($,"plugin-sandbox-bootstrap.ts"),J="jiti";try{J=W.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(J)});`,`const jiti = createJiti(${JSON.stringify(Q)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(Q)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
|
|
205
|
-
`)}}var
|
|
206
|
-
`).filter(Boolean);await Promise.allSettled(J.map((j)=>
|
|
207
|
-
`),Q=[...$.appendMessages??[],...W.appendMessages??[]];return{cancel:$.cancel===!0||W.cancel===!0?!0:void 0,review:$.review===!0||W.review===!0?!0:void 0,context:Z||void 0,overrideInput:W.overrideInput!==void 0?W.overrideInput:$.overrideInput,systemPrompt:W.systemPrompt!==void 0?W.systemPrompt:$.systemPrompt,appendMessages:Q.length>0?Q:void 0}}function
|
|
208
|
-
`).map((j)=>j.trim()).filter(Boolean).filter((j)=>j.startsWith("HOOK_CONTROL\t")).map((j)=>j.slice(13)),J=Q.length>0?Q[Q.length-1]:W;try{return{parsedJson:JSON.parse(J)}}catch(j){return{parseError:j instanceof Error?j.message:"Failed to parse hook stdout JSON"}}}async function
|
|
209
|
-
`,X=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??GR(rG(),"hooks.jsonl");rG(X),BR(X,J,"utf8")};return{beforeRun:async(Q)=>{let J=jJ(Q,"");Z({...w0(J,W),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Q)=>{let J=sG(Q);Z({...w0(J,W),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:HZ(J.call.input)}});return},afterTool:async(Q)=>{let J=tG(Q);Z({...w0(J,W),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:HZ(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:Q,result:J})=>{let j=y$(Q);if(J.status==="completed"){Z({...w0(j,W),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||JJ(J.error?.message)){Z({...w0(j,W),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Z({...w0(j,W),hookName:"agent_error",iteration:J.iterations,error:{name:J.error.name,message:J.error.message,stack:J.error.stack}})},onEvent:async(Q)=>{if(Q.type!=="message-added"||Q.message.role!=="user")return;let J=jJ({snapshot:Q.snapshot},eG(Q.message.content));Z({...w0(J,W),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function V5($){let W=OR($.workspacePath);if(!Object.values(W).some((G)=>G.length>0))return;let Q=async(G,K)=>{let F=W[K]??[];if(F.length===0)return;b2({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...w0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...w0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=W.prompt_submit??[];if(K.length>0)b2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...w0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},j=async(G)=>{let K=W.tool_call??[];if(K.length===0)return;return TR({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...w0(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:HZ(G.call.input)}}})},X=async(G)=>{let K=W.tool_result??[];if(K.length===0)return;b2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...w0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:HZ(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}}})},Y=async(G)=>{let K=W.agent_end??[];if(K.length===0)return;b2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...w0(G,$),hookName:"agent_end",iteration:G.iteration,turn:G.turn,taskComplete:{taskMetadata:{}}}})},V=async(G)=>{let K=W.agent_error??[];if(K.length===0)return;b2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...w0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},B=async(G)=>{if(JJ(G.reason)){let F=W.agent_abort??[];if(F.length>0)b2({commands:F,cwd:$.cwd,logger:$.logger,payload:{...w0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=W.session_shutdown??[];if(K.length===0)return;b2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...w0(G,$),hookName:"session_shutdown",reason:G.reason}})},H={};if((W.agent_start?.length??0)>0||(W.agent_resume?.length??0)>0||(W.prompt_submit?.length??0)>0){if((W.agent_start?.length??0)>0||(W.agent_resume?.length??0)>0)H.beforeRun=async(G)=>{let K=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await Q(y$(G.snapshot),K);return};if((W.prompt_submit?.length??0)>0)H.onEvent=async(G)=>{if(G.type!=="message-added"||G.message.role!=="user")return;await J(jJ({snapshot:G.snapshot},eG(G.message.content)))}}if((W.tool_call?.length??0)>0)H.beforeTool=async(G)=>{let K=await j(sG(G));return zR(K)};if((W.tool_result?.length??0)>0)H.afterTool=async(G)=>{await X(tG(G));return};if((W.agent_end?.length??0)>0)H.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await Y({...y$(G),iteration:K.iterations,turn:{outputText:K.outputText,status:K.status}})};if((W.agent_error?.length??0)>0||(W.agent_abort?.length??0)>0||(W.session_shutdown?.length??0)>0){let G=H.afterRun;H.afterRun=async(K)=>{await G?.(K);let{snapshot:F,result:A}=K;if(A.status==="aborted"||JJ(A.error?.message)){await B({...y$(F),reason:A.error?.message});return}if(A.error)await V({...y$(F),iteration:A.iterations,error:A.error})}}return H}function $6($){return s8("core.hook_config_files",V5($))}function y2($,W){let Z=$.map((Q)=>Q[W]).filter((Q)=>typeof Q==="function");if(Z.length===0)return;return async(Q)=>{let J;for(let j of Z){let X=await j(Q);if(!X||typeof X!=="object")continue;let Y=X;J={...J??{},...Y,stop:J?.stop===!0||Y.stop===!0?!0:Y.stop,options:J?.options||Y.options?{...J?.options??{},...Y.options??{}}:void 0}}return J}}function h2($){let W=$.filter((Z)=>Z!==void 0);if(W.length===0)return;return{beforeRun:y2(W,"beforeRun"),afterRun:y2(W,"afterRun"),beforeModel:y2(W,"beforeModel"),afterModel:y2(W,"afterModel"),beforeTool:y2(W,"beforeTool"),afterTool:y2(W,"afterTool"),onEvent:y2(W,"onEvent")}}var $K={};w($K,{normalizeRuntimeCapabilities:()=>C0});function C0(...$){let W,Z;for(let J of $){if(!J)continue;if(J.toolExecutors)W={...W??{},...J.toolExecutors};if(J.requestToolApproval)Z=J.requestToolApproval}let Q=W&&Object.keys(W).length>0;if(!Q&&!Z)return;return{...Q?{toolExecutors:W}:{},...Z?{requestToolApproval:Z}:{}}}var BK={};w(BK,{toProviderConfig:()=>s0,emptyStoredProviderSettings:()=>I$,StoredProviderSettingsSchema:()=>J6,StoredProviderSettingsEntrySchema:()=>yZ,ProviderSettingsSchemaTyped:()=>Q6});import{z as k$}from"zod";var VK={};w(VK,{toProviderConfig:()=>s0,safeParseSettings:()=>bZ,safeCreateProviderConfig:()=>DJ,parseSettings:()=>SZ,normalizeProviderId:()=>Z6,isBuiltInProviderId:()=>AJ,createProviderConfig:()=>UJ,SapSettingsSchema:()=>wZ,ReasoningSettingsSchema:()=>MZ,ProviderSettingsSchema:()=>h$,ProviderProtocolSchema:()=>TZ,ProviderIdSchema:()=>F5,ProviderClientSchema:()=>zZ,OcaSettingsSchema:()=>CZ,ModelCatalogSettingsSchema:()=>PZ,GcpSettingsSchema:()=>NZ,BUILT_IN_PROVIDER_IDS:()=>FJ,BUILT_IN_PROVIDER:()=>K5,AzureSettingsSchema:()=>EZ,AwsSettingsSchema:()=>RZ,AuthSettingsSchema:()=>qZ});import*as o0 from"@cline/llms";import{z as E}from"zod";var YK={};w(YK,{resolveProviderConfig:()=>G5,getProviderConfig:()=>OZ,getLiveModelsCatalog:()=>W6,clearPublicModelsCatalogCache:()=>pR,clearPrivateModelsCatalogCache:()=>KJ,clearLiveModelsCatalogCache:()=>GJ,OPENAI_COMPATIBLE_PROVIDERS:()=>H5,DEFAULT_MODELS_CATALOG_URL:()=>DZ});import*as $0 from"@cline/llms";function YJ($){if(!Array.isArray($))return[];return $.map((W)=>{if(typeof W==="string")return W.trim();if(W&&typeof W==="object"){let Z=W;for(let Q of[Z.id,Z.name,Z.model])if(typeof Q==="string"&&Q.trim())return Q.trim()}return""}).filter((W)=>W.length>0)}function qR($,W){let Z=YJ($);if(Z.length>0)return Z;if(!$||typeof $!=="object")return[];let Q=$,J=YJ(Q.data??Q.models);if(J.length>0)return J;if(Q.models&&typeof Q.models==="object"&&!Array.isArray(Q.models)){let X=Object.keys(Q.models).filter((Y)=>Y.trim().length>0);if(X.length>0)return X}let j=Q.providers?.[W];if(j&&typeof j==="object"){let Y=YJ(j.models??j);if(Y.length>0)return Y}return[]}async function GZ($,W){let Z=await fetch($,{method:"GET"});if(!Z.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Z.status}`);return qR(await Z.json(),W)}function WK($){return $.replace(/\/+$/,"")}function KZ($,W,Z){let Q=Z?.trim();if(!Q)return;let J=$?.trim();if(!J||!W?.trim())return Q;try{let j=new URL(Q),X=new URL(W),Y=new URL(J);if(j.origin!==X.origin)return Q;let V=WK(X.pathname),B=WK(Y.pathname);if(V&&j.pathname.startsWith(`${V}/`)){let H=j.pathname.slice(V.length);Y.pathname=`${B}${H}`}else Y.pathname=j.pathname;return Y.search=j.search,Y.hash=j.hash,Y.toString()}catch{return Q}}function MR($){return Object.fromEntries(Object.entries($).map(([W,Z])=>[W,{...Z}]))}function RR($){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 NR=Object.values($0.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:MR($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),QK=Object.fromEntries(NR.map(($)=>[$.id,$]));function ER($){return QK[$]}function wR(){return Object.fromEntries(Object.entries(QK).filter(([,$])=>RR($)))}function JK($=[]){let W=$.flatMap((Z)=>{switch(Z){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Z];default:return[]}});return W.length>0?W:void 0}var DZ="https://models.dev/api.json",CR=600000,jK=300000,PR=5000,UZ=new Map,B5=new Map,VJ=new Map,FZ=new Map;async function SR(){return $0.getGeneratedProviderModels()}async function bR($,W={},Z={},Q={},J={},j={}){if($==="litellm")return $0.sortModelsByReleaseDate(Q);let X=await SR(),Y=$0.resolveProviderModelCatalogKeys($),V=Object.assign({},...Y.map((G)=>X[G]??{}));if(Boolean($0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl))return $0.sortModelsByReleaseDate({...J,...j});if($==="openai-codex")return $0.sortModelsByReleaseDate({...W,...$0.filterOpenAICodexModels(Z),...J,...j});if($==="cline-pass"&&Object.keys(Z).length>0)return{...Z,...j};let H=$0.sortModelsByReleaseDate({...V,...W,...Z,...Q,...J});if($==="cline")return $0.sortModelsByReleaseDate({...$0.preferCanonicalModelIds(H,$0.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...j});return $0.sortModelsByReleaseDate({...H,...j})}function yR($,W){let Z=$0.resolveProviderModelCatalogKeys($);return Object.assign({},...Z.map((Q)=>W[Q]??{}))}function _Z($){let W=$?.trim();return W&&W.length>0?W:""}function HJ($){let W=$.apiKey?.trim()||$.accessToken?.trim();return W&&W.length>0?W:void 0}function hR($){let W=2166136261;for(let Z=0;Z<$.length;Z+=1)W^=$.charCodeAt(Z),W+=(W<<1)+(W<<4)+(W<<7)+(W<<8)+(W<<24);return(W>>>0).toString(16)}function kR($,W){return`${$}:${_Z(W.baseUrl)}:${hR(HJ(W)??"")}`}async function fZ($,W,Z=PR){let Q=new AbortController,J=setTimeout(()=>Q.abort(),Z);try{return await fetch($,{...W,signal:Q.signal})}finally{clearTimeout(J)}}function k2($,W,Z){if(Z&&!$.includes(W))$.push(W)}function LZ($,W){let Z=["streaming","tools"];return k2(Z,"images",Boolean(W.supportsImages)),k2(Z,"prompt-cache",Boolean(W.supportsPromptCache)),k2(Z,"reasoning",Boolean(W.supportsReasoning)),{id:$,name:W.name??$,contextWindow:W.contextWindow,maxInputTokens:W.maxInputTokens,maxTokens:W.maxTokens,capabilities:Z,releaseDate:W.releaseDate,status:"active"}}async function IR($,W){let Z=await fZ("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${W}`,"Content-Type":"application/json"}});if(!Z.ok)throw Error(`Baseten model refresh failed: HTTP ${Z.status}`);let J=(await Z.json())?.data??[],j={};for(let X of J){let Y=X.id?.trim();if(!Y)continue;if(Y.includes("whisper")||Y.includes("tts")||Y.includes("embedding"))continue;let V=X.supported_features??[];j[Y]=LZ(Y,{name:Y,contextWindow:X.context_length,maxInputTokens:X.context_length,maxTokens:X.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return j}function ZK($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let W=Number($);return Number.isFinite(W)?W:void 0}return}async function xR($,W){let Z=await fZ("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":W}});if(!Z.ok)throw Error(`Hicap model refresh failed: HTTP ${Z.status}`);let J=(await Z.json())?.data??[],j={};for(let X of J){let Y=X.id?.trim();if(!Y)continue;j[Y]=LZ(Y,{name:Y,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return j}async function gR($,W){let Q=`${(_Z($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await fZ(Q,{method:"GET",headers:{Authorization:`Bearer ${W}`,accept:"application/json"}});if(!J.ok)throw Error(`Poolside model refresh failed: HTTP ${J.status}`);let X=(await J.json())?.data??[],Y={};for(let V of X){let B=V.id?.trim();if(!B)continue;let H=V.supported_features??[],G=V.supported_sampling_parameters??[],K=V.input_modalities??[],F=["streaming"];k2(F,"tools",H.includes("tools")),k2(F,"reasoning",H.includes("reasoning")),k2(F,"temperature",G.includes("temperature")),k2(F,"images",K.includes("image"));let A={input:ZK(V.pricing?.prompt),output:ZK(V.pricing?.completion)};Y[B]={id:B,name:V.name??B,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:A.input!==void 0||A.output!==void 0?A:void 0,status:"active"}}return Y}function mR($){let W=_Z($).replace(/\/+$/,"");if(!W)return"http://localhost:4000";return W.endsWith("/v1")?W.slice(0,-3):W}function vR($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function cR($){let W=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Z=500,Q=W?`: ${W.slice(0,500)}${W.length>500?"...":""}`:"";return`HTTP ${$.status}${Q}`}async function uR($,W){let Z=mR($.baseUrl),Q=[],J=[["x-litellm-api-key",{"x-litellm-api-key":W}],["Authorization",{Authorization:`Bearer ${W}`}]];for(let j of vR(Z))for(let[X,Y]of J)try{let V=await fZ(j,{method:"GET",headers:{accept:"application/json",...Y}});if(V.ok){let H=(await V.json())?.data??[],G={};for(let K of H){let F=K.model_name?.trim(),D=K.litellm_params?.model?.trim()||F;if(!D)continue;let U=K.model_info,f=LZ(D,{name:F??D,maxTokens:U?.max_output_tokens??U?.max_tokens,maxInputTokens:U?.max_input_tokens??U?.max_tokens,supportsImages:U?.supports_vision,supportsPromptCache:U?.supports_prompt_caching,supportsReasoning:U?.supports_reasoning});if(G[D]=f,F)G[F]={...f,id:F,name:F}}return G}Q.push(`${new URL(j).pathname} (${X}): ${await cR(V)}`)}catch(V){let B=V instanceof Error?V.message:String(V);Q.push(`${new URL(j).pathname} (${X}): ${B}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${Q.join("; ")}`)}var XK={baseten:IR,hicap:xR,litellm:uR,poolside:gR},BJ=new Map,AZ=new Map;function dR($,W){return`${$}:${_Z(W.baseUrl)}`}async function lR($,W,Z){let Q=$0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=KZ(Z.baseUrl,Q?.provider.baseUrl,Q?.provider.modelsSourceUrl);if(!J)return{};let j=W?.cacheTtlMs??jK,X=dR($,Z),Y=Date.now(),V=BJ.get(X);if(V&&V.expiresAt>Y)return V.data;let B=AZ.get(X);if(B)return B;let H=GZ(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,LZ(F,{name:F})]));return BJ.set(X,{data:K,expiresAt:Y+j}),K}).finally(()=>{AZ.delete(X)});return AZ.set(X,H),H}function pR(){BJ.clear(),AZ.clear()}async function rR($,W){let Z=HJ(W);if(!Z)return{};let Q=XK[$];if(!Q)return{};return Q(W,Z)}function iR($,W,Z){if(!Z)return!1;if(!XK[$])return!1;if(W?.loadPrivateOnAuth===!1)return!1;return Boolean(HJ(Z))}async function nR($,W,Z){let Q=W?.cacheTtlMs??jK,J=kR($,Z),j=Date.now(),X=VJ.get(J);if(X&&X.expiresAt>j)return X.data;let Y=FZ.get(J);if(Y)return Y;let V=rR($,Z).then((B)=>{return VJ.set(J,{data:B,expiresAt:j+Q}),B}).finally(()=>{FZ.delete(J)});return FZ.set(J,V),V}async function aR($){return $0.fetchLiveProviderModels($,globalThis.fetch)}async function W6($={}){let W=$.url??DZ,Z=$.cacheTtlMs??CR,Q=Date.now(),J=UZ.get(W);if(J&&J.expiresAt>Q)return J.data;let j=B5.get(W);if(j)return j;let X=aR(W).then((Y)=>{return UZ.set(W,{data:Y,expiresAt:Q+Z}),Y}).finally(()=>{B5.delete(W)});return B5.set(W,X),X}function GJ($){if($){UZ.delete($),B5.delete($);return}UZ.clear(),B5.clear()}function KJ(){VJ.clear(),FZ.clear()}function oR($){return Object.fromEntries(Object.entries($).map(([W,Z])=>[W,{baseUrl:Z.baseUrl,modelId:Z.modelId,capabilities:JK(Z.capabilities)}]))}var H5=oR(wR());function OZ($){let W=ER($);if(!W)return;return{baseUrl:W.baseUrl||void 0,modelId:W.modelId,knownModels:W.knownModels,capabilities:JK(W.capabilities)}}async function G5($,W,Z){let Q=OZ($);if(!Q)return;try{let J=W?.loadLatestOnInit?await W6(W):void 0,j=J?yR($,J):{},X=Z&&iR($,W,Z)?await nR($,W,Z):{},V=Boolean($0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Z??{providerId:$,modelId:Q.modelId,baseUrl:Q.baseUrl}:Z,B=V?await lR($,W,V).catch(()=>({})):{},H=await bR($,Q.knownModels,j,X,B,Z?.knownModels);return{...Q,knownModels:H}}catch(J){if(W?.failOnError)throw J;if($==="litellm")return{...Q,knownModels:{}};return Q}}var K5=o0.BUILT_IN_PROVIDER,FJ=o0.BUILT_IN_PROVIDER_IDS,AJ=o0.isBuiltInProviderId,Z6=o0.normalizeProviderId,F5=E.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),TZ=E.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),zZ=E.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),qZ=E.object({apiKey:E.string().optional(),accessToken:E.string().optional(),refreshToken:E.string().optional(),expiresAt:E.number().int().positive().optional(),accountId:E.string().optional(),organizationId:E.string().optional(),organizationName:E.string().optional(),memberId:E.string().optional(),metadata:E.record(E.string(),E.unknown()).optional()}),sR=E.enum(["none","low","medium","high","xhigh"]),MZ=E.object({enabled:E.boolean().optional(),effort:sR.optional(),budgetTokens:E.number().int().positive().optional()}),RZ=E.object({accessKey:E.string().optional(),secretKey:E.string().optional(),sessionToken:E.string().optional(),region:E.string().optional(),profile:E.string().optional(),authentication:E.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:E.boolean().optional(),useCrossRegionInference:E.boolean().optional(),useGlobalInference:E.boolean().optional(),endpoint:E.string().url().optional(),customModelBaseId:E.string().optional()}),NZ=E.object({projectId:E.string().optional(),region:E.string().optional()}),EZ=E.object({apiVersion:E.string().optional(),useIdentity:E.boolean().optional()}),wZ=E.object({clientId:E.string().optional(),clientSecret:E.string().optional(),tokenUrl:E.string().url().optional(),resourceGroup:E.string().optional(),deploymentId:E.string().optional(),useOrchestrationMode:E.boolean().optional(),api:E.enum(["orchestration","foundation-models"]).optional(),defaultSettings:E.record(E.string(),E.unknown()).optional()}),CZ=E.object({mode:E.enum(["internal","external"]).optional(),usePromptCache:E.boolean().optional()}),PZ=E.object({loadLatestOnInit:E.boolean().optional(),loadPrivateOnAuth:E.boolean().optional(),url:E.string().url().optional(),cacheTtlMs:E.number().int().positive().optional(),failOnError:E.boolean().optional()}),h$=E.object({provider:F5,apiKey:E.string().optional(),auth:qZ.optional(),model:E.string().optional(),protocol:TZ.optional(),client:zZ.optional(),routingProviderId:F5.optional(),maxTokens:E.number().int().positive().optional(),contextWindow:E.number().int().positive().optional(),baseUrl:E.string().url().optional(),headers:E.record(E.string(),E.string()).optional(),timeout:E.number().int().positive().optional(),reasoning:MZ.optional(),aws:RZ.optional(),gcp:NZ.optional(),azure:EZ.optional(),sap:wZ.optional(),oca:CZ.optional(),region:E.string().optional(),apiLine:E.enum(["china","international"]).optional(),capabilities:E.array(E.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:PZ.optional()});function SZ($){return h$.parse($)}function bZ($){return h$.safeParse($)}function tR($){return $.protocol==="openai-responses"||$.client==="openai"}function s0($,W={}){let Z=$.provider,Q=Z6(Z),J=W.includeKnownModels!==!1,j=$.reasoning?.effort||"none",X=j==="none"?void 0:j,Y=H5[Q],V=Object.assign({},...o0.resolveProviderModelCatalogKeys(Q).map((D)=>o0.getGeneratedModelsForProvider(D))),B=Object.keys(V)[0],H=q8(Q,$),G=$.baseUrl??(Q==="oca"?$.oca?.mode==="internal"?U9:D9:Y?.baseUrl),K=$.routingProviderId??(tR($)&&Q!==K5.OPENAI_NATIVE?K5.OPENAI_NATIVE:void 0),F=J?Y?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,A={providerId:Z,clientType:$.client,routingProviderId:K,modelId:$.model??Y?.modelId??B??"default",...J?{knownModels:F}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:X,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??Y?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(A).filter(([D,U])=>U!==void 0))}function UJ($){let W=SZ($);return s0(W)}function DJ($){let W=bZ($);if(W.success)return{success:!0,config:s0(W.data)};return{success:!1,error:W.error}}var Q6=h$;var yZ=k$.object({settings:h$,updatedAt:k$.string().datetime(),tokenSource:k$.enum(["manual","oauth","migration"]).default("manual")}),J6=k$.object({version:k$.literal(1),lastUsedProvider:k$.string().min(1).optional(),providers:k$.record(k$.string(),yZ)});function I$(){return{version:1,providers:{}}}U1();var _K={};w(_K,{InMemoryWorkspaceManager:()=>X6});import{upsertWorkspaceInfo as WN,WorkspaceManifestSchema as OJ}from"@cline/shared";var DK={};w(DK,{withSessionGitMetadata:()=>kZ,readSessionGitMetadata:()=>AK,readGitWorkspaceState:()=>fJ,normalizeWorkspacePath:()=>N1,hasCurrentSessionGitMetadata:()=>_J,generateWorkspaceInfoWithDiagnostics:()=>A5,generateWorkspaceInfo:()=>j6,buildWorkspaceMetadataWithInfo:()=>LJ,buildWorkspaceMetadata:()=>U5});import{basename as eR,resolve as $N}from"node:path";import{performance as HK}from"node:perf_hooks";import{processWorkspaceInfo as KK}from"@cline/shared";import FK from"simple-git";function AK($){let W=$?.git;if(!W||typeof W!=="object"||Array.isArray(W))return{};let Z=W;return{...typeof Z.url==="string"&&Z.url.trim()?{url:Z.url.trim()}:{},...typeof Z.branch==="string"&&Z.branch.trim()?{branch:Z.branch.trim()}:{}}}function kZ($,W){let Z={...$??{}};if(!W.url&&!W.branch)return delete Z.git,Object.keys(Z).length>0?Z:void 0;let J={...Z.git&&typeof Z.git==="object"&&!Array.isArray(Z.git)?Z.git:{}};if(W.url)J.url=W.url;else delete J.url;if(W.branch)J.branch=W.branch;else delete J.branch;return Z.git=J,Z}function _J($,W){let Z=AK($);return Z.url===W.url&&Z.branch===W.branch}function UK($){let W=$.find(({name:Z})=>Z==="origin")??$[0];return(W?.refs.fetch||W?.refs.push)?.trim()||void 0}function N1($){return $N($)}async function j6($){return(await A5($)).info}function GK($){let W=$ instanceof Error?$.message:String($);return/unknown revision|ambiguous argument|does not have any commits yet/i.test(W)}function hZ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function A5($){let W=N1($),Z={rootPath:W,hint:eR(W)},Q={},J;try{let j=FK({baseDir:W});if(!await j.checkIsRepo())return{info:Z,vcsType:"none",gitState:Q};try{let Y=await j.getRemotes(!0);if(Y.length>0){let V=Y.map((H)=>{let G=H.refs.fetch||H.refs.push;return`${H.name}: ${G}`});Z.associatedRemoteUrls=V;let B=UK(Y);if(B)Q.url=B}}catch(Y){J??=hZ(Y)}try{let Y=(await j.revparse(["HEAD"])).trim();if(Y.length>0)Z.latestGitCommitHash=Y}catch(Y){if(!GK(Y))J??=hZ(Y)}try{let Y=(await j.branch()).current.trim();if(Y.length>0)Z.latestGitBranchName=Y,Q.branch=Y}catch(Y){if(!GK(Y))J??=hZ(Y)}return{info:Z,vcsType:"git",gitState:Q,error:J}}catch(j){return{info:Z,vcsType:"none",gitState:Q,error:hZ(j)}}}async function fJ($){try{let W=FK({baseDir:N1($)});if(!await W.checkIsRepo())return{};let[Z,Q]=await Promise.all([W.getRemotes(!0),W.branch()]),J=UK(Z),j=Q.current.trim();return{...J?{url:J}:{},...j?{branch:j}:{}}}catch{return}}async function U5($){let W=await j6($);return KK(W)}async function LJ($){let W=HK.now(),Z=await A5($),Q=HK.now()-W,J=Z.info;return{workspaceInfo:J,workspaceMetadata:KK(J),durationMs:Q,vcsType:Z.vcsType,gitState:Z.gitState,initError:Z.error}}class X6{manifest;listeners=new Set;constructor($){this.manifest=OJ.parse($??{workspaces:{}})}async addWorkspacePath($){let W=await j6($);return this.manifest=WN(this.manifest,W),this.emit({type:"workspace_added",workspace:W}),W}async switchWorkspace($){let W=N1($),Z=this.manifest.workspaces[W];if(Z)return this.manifest=OJ.parse({...this.manifest,currentWorkspacePath:W}),this.emit({type:"workspace_switched",workspace:Z}),Z;let Q=await this.addWorkspacePath(W);return this.manifest=OJ.parse({...this.manifest,currentWorkspacePath:Q.rootPath}),this.emit({type:"workspace_switched",workspace:Q}),Q}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let W=N1($);return this.manifest.workspaces[W]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let W of this.listeners)W($)}}D0();import{createHash as ZN}from"node:crypto";var fK=new Set,LK=new Set;function QN($){return ZN("sha256").update($).digest("hex")}function JN($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function OK($){if(!$.telemetry)return;let W=QN($.rootPath),Z=$.rootCount??1;if(!fK.has(W))fK.add(W),iW($.telemetry,{root_count:Z,vcs_types:JN($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!LK.has(W)){LK.add(W);let Q=Error($.initError.message);Q.name=$.initError.errorType||"Error",nW($.telemetry,Q,{fallback_to_single_root:!0,workspace_count:Z})}}function YN($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function VN($,W,Z){if(W.length>0)for(let j of W)Z?.log(j.message,{severity:"warn"});if($.length===0)return;let Q=$.slice(0,3).map(YN).join("; "),J=$.length>3?`; and ${$.length-3} more`:"";Z?.log(`Some plugins failed to initialize. ${Q}${J}. Use --verbose for more details.`,{severity:"warn"});for(let j of $)Z?.log(`Plugin initialization failed (${j.phase}) for ${j.pluginPath}`,{severity:"warn",stack:j.stack,pluginPath:j.pluginPath,pluginName:j.pluginName})}function BN($,W){let Z=typeof $.thinking==="boolean",Q=typeof $.reasoningEffort==="string";if(!Z&&!Q)return W;return{...W??{},...Z?{enabled:$.thinking}:{},...Q?{effort:$.reasoningEffort}:{}}}function TK($,W){return XN($,W)}function HN($){let W=0;for(let Z of $??[]){if(Z.role!=="user")continue;if(("metadata"in Z&&Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0)?.kind==="recovery_notice")continue;W+=1}return W}function GN($,W,Z,Q,J,j){let X=Q.getProviderSettings($.providerId),Y=J||X?.modelCatalog?{...J??{},...X?.modelCatalog??{}}:void 0,V=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,B=jN({providerId:$.providerId,sessionId:W,source:Z,defaultSource:F0.CLI,client:{name:$.extensionContext?.client?.name,version:$.extensionContext?.client?.version,versionHeaderFallback:$.headers?.["X-CLIENT-VERSION"],platform:$.extensionContext?.client?.platform,platformVersion:$.extensionContext?.client?.platformVersion,isMultiRoot:$.extensionContext?.client?.isMultiRoot},coreVersion:l8,openAiCodex:{accountId:V?.accountId??X?.auth?.accountId,accessToken:V?.accessToken??$.apiKey??X?.auth?.accessToken??X?.apiKey,userAgentVersion:process.env.npm_package_version},headers:{stored:X?.headers,config:$.headers,session:V?.headers}}),H={...X??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??X?.apiKey,baseUrl:$.baseUrl??X?.baseUrl,headers:void 0,reasoning:BN($,X?.reasoning),modelCatalog:Y},G={...s0(H),...V??{}};if(B)G.headers=B;if($.knownModels)G.knownModels=$.knownModels;if($.extensionContext)G.extensionContext=$.extensionContext;let F=$.fetch??G.fetch??j;if(F)G.fetch=F;return G}async function zK($){let{input:W,sessionId:Z,providerSettingsManager:Q,defaultTelemetry:J,defaultCapabilities:j,defaultToolPolicies:X,defaultFetch:Y,onPluginEvent:V,onTeamEvent:B,createSubAgentLifecycleCallbacks:H,createSpawnTool:G,localRuntime:K,readSessionMetadata:F,writeSessionMetadata:A}=$,D=s1(W.config),{modelCatalogDefaults:U,userInstructionService:f,configExtensions:_,onTeamRestored:R,...T}=K??{},O=Object.keys(T).length>0?T:void 0,{workspaceInfo:L,workspaceMetadata:C,gitState:N,durationMs:p,vcsType:x,initError:P}=await LJ(D),r=O?.extensionContext,d={...r??{},workspace:{...L,...r?.workspace??{}},session:{...r?.session??{},sessionId:Z},logger:r?.logger??O?.logger,telemetry:r?.telemetry??O?.telemetry??J};OK({telemetry:d.telemetry,rootPath:L.rootPath,workspaceInfo:L,rootCount:1,vcsType:x,durationMs:p,initError:P,featureFlagEnabled:!0});let x1=$6({cwd:W.config.cwd,workspacePath:D,rootSessionId:Z,logger:O?.logger,workspaceInfo:L}),W2=KG(O?.hooks)?void 0:e8({rootSessionId:Z,workspacePath:D,workspaceInfo:L}),A$=h2([O?.hooks,W2]),I0;if(TK(_,"plugins"))try{I0=await o8({pluginPaths:O?.pluginPaths,workspacePath:D,cwd:W.config.cwd,onEvent:V,providerId:W.config.providerId,modelId:W.config.modelId,workspaceInfo:L,session:d.session,client:d.client,user:d.user,logger:d.logger,telemetry:d.telemetry,automation:d.automation}),VN(I0.failures,I0.warnings,O?.logger)}catch(e6){let U8=e6 instanceof Error?e6.message:String(e6);O?.logger?.log?.(`plugin loading failed; continuing without plugins (${U8})`)}let O1=k3(x1?[x1]:void 0,k3(O?.extensions,u9(I0?.extensions))),A8=TK(_,"plugins")?e1(I0?.pluginPaths??[]):void 0,V0={...W.config,...O??{},sessionId:Z,hooks:A$,extensions:O1,extensionContext:d,telemetry:d.telemetry},l0=GN(V0,Z,W.source,Q,U,Y),V1=h2([V0.hooks,V0.checkpoint?.enabled===!0?pG({cwd:V0.cwd,sessionId:Z,logger:V0.logger,createCheckpoint:V0.checkpoint?.createCheckpoint,initialRunCount:HN(W.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),y={...V0,providerConfig:l0,workspaceMetadata:C,hooks:V1},B1=W.toolPolicies??V0.toolPolicies??X,k=C0(j,W.capabilities),W0=k?.requestToolApproval,T0=k?.toolExecutors,M0=H?.(y),pW=new X6({currentWorkspacePath:L.rootPath,workspaces:{[L.rootPath]:L}});return{effectiveInput:W,config:y,providerConfig:l0,workspaceMetadata:C,workspaceInfo:L,gitState:N,extensions:O1,hooks:V1,toolPolicies:B1,requestToolApproval:W0,pluginSandboxShutdown:I0?.shutdown,runtimeBuilderInput:{config:y,hooks:V1,extensions:O1,onTeamEvent:B,createSpawnTool:G,onTeamRestored:R,onSubAgentEvent:M0?.onSubAgentEvent,onSubAgentStart:M0?.onSubAgentStart,onSubAgentEnd:M0?.onSubAgentEnd,userInstructionService:f,pluginSkillDirectories:A8,configExtensions:_,toolExecutors:T0,toolPolicies:B1,workspaceManager:pW,logger:y.logger,telemetry:y.telemetry,requestToolApproval:W0}}}import{existsSync as IZ,mkdirSync as KN,readdirSync as FN,rmdirSync as AN,rmSync as UN,unlinkSync as DN}from"node:fs";import{dirname as qK,join as D5}from"node:path";function X0(){return new Date().toISOString()}function _5($){if(!$||!IZ($))return;try{DN($)}catch{}}function _N($){let W=c8($);if(W)return{rootSessionId:W.rootSessionId,fileStem:`${W.agentId}__${W.teamTaskId}`};let Z=r4($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:Z.agentId};return{rootSessionId:$,fileStem:$}}class TJ{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return D5(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let W=this.sessionArtifactsDir($);if(!IZ(W))KN(W,{recursive:!0});return W}sessionMessagesPath($){return D5(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionCompactionPath($){return D5(this.sessionArtifactsDir($),`${$}.compaction.json`)}sessionManifestPath($,W=!1){let Z=W?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return D5(Z,`${$}.json`)}removeSessionDirIfEmpty($){let W=this.sessionArtifactsDir($),Z=this.ensureSessionsDir();while(W.startsWith(Z)&&W!==Z){if(!IZ(W)){W=qK(W);continue}try{if(FN(W).length>0)break;AN(W)}catch{break}W=qK(W)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!IZ($))return;try{UN($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,W,Z){let{rootSessionId:Q,fileStem:J}=_N($),j=this.sessionArtifactsDir(Q);return{messagesPath:D5(j,`${J}.messages.json`)}}}import{resolveDocumentsExtensionPath as fN}from"@cline/shared/storage";D0();function MK($,W,Z,Q,J){if(Z)oW($.telemetry,{ulid:W,apiProvider:$.providerId,...J});else aW($.telemetry,{ulid:W,apiProvider:$.providerId,...J});LN($.telemetry,{workspacePath:Q})}function LN($,W){let Z=fN("Hooks"),Q=b$(W.workspacePath),J=new Map;for(let j of Q){let X=j.hookEventName??"unknown",Y=J.get(X)??{global:0,workspace:0};if(j.path===Z||j.path.startsWith(`${Z}/`))Y.global+=1;else Y.workspace+=1;J.set(X,Y)}for(let[j,X]of J.entries())X9($,j,X.global,X.workspace)}function RK($,W){for(let Z of W.mentions)J9($,Z,W.matchedFiles.includes(Z)?1:0,"file",!W.matchedFiles.includes(Z));for(let Z of W.matchedFiles)Z9($,"file",Z.length);for(let Z of W.ignoredMentions)Q9($,"file","not_found",Z)}var qf={};w(qf,{ProviderSettingsManager:()=>X1});import{chmodSync as Rf,existsSync as IY,mkdirSync as Hv,readFileSync as Gv,renameSync as Kv,rmSync as Fv,writeFileSync as Av}from"node:fs";import{basename as Nf,dirname as xY}from"node:path";import{resolveProviderSettingsPath as Uv}from"@cline/shared/storage";var q={};w(q,{writeModelsFileSync:()=>IW,writeHubDiscovery:()=>GQ,writeGlobalSettings:()=>M1,withHubStartupLock:()=>KQ,verifyHubConnection:()=>w1,updateMcpSettingsFileSync:()=>D1,updateMcpSettingsFile:()=>F6,updateMcpServerOAuthStateAsync:()=>k5,updateMcpServerOAuthState:()=>v2,updateLocalProvider:()=>_7,uninstallPlugin:()=>wW,uninstallMarketplaceSkill:()=>Z7,uninstallMarketplacePlugin:()=>Q7,uninstallMarketplaceMcpServerFromSettings:()=>$7,uninstallMarketplaceEntry:()=>oX,truncateNotificationBody:()=>fW,truncateCommandOutput:()=>G2,toggleDisabledTool:()=>v9,toTeamProgressLifecycleEvent:()=>w6,toProviderConfig:()=>s0,toHubStatusUrl:()=>Kj,toHubHealthUrl:()=>FQ,toHookConfigFileName:()=>Y5,syncStoredProviderRegistration:()=>BY,syncPluginMcpServersToSettings:()=>NW,summarizeUsageFromMessages:()=>d8,stripUtf8Bom:()=>Yv,stopLocalHubServerGracefully:()=>Mj,startLocalOAuthServer:()=>G1,startHubWebSocketServer:()=>V8,startHubServer:()=>$_,startClineDeviceAuth:()=>v7,splitCoreSessionConfig:()=>u5,spawnDetachedHubServerWithRetry:()=>O6,spawnDetachedHubServer:()=>fj,setTelemetryOptOutGlobally:()=>ZH,setSdkLogger:()=>y7,setMcpServerDisabled:()=>g2,setDisabledTools:()=>_3,setDisabledPlugin:()=>HH,setCompactionStrategyGlobally:()=>XH,setAutoUpdateEnabledGlobally:()=>JH,sendHubCommand:()=>iU,sdkDebug:()=>s,saveProviderOAuthCredentials:()=>j2,saveLocalProviderSettings:()=>DY,saveLocalProviderOAuthCredentials:()=>OY,sanitizeSessionToken:()=>E2,safeParseSettings:()=>bZ,safeCreateProviderConfig:()=>DJ,runSubprocessEvent:()=>k6,runHook:()=>x6,reviveTeamStateDates:()=>a9,restartLocalHubIfIdleAfterStartupTimeout:()=>fQ,resolveWorkspaceHubOwnerContext:()=>TA,resolveWorkflowsConfigSearchPaths:()=>w5,resolveSkillsConfigSearchPaths:()=>N5,resolveSharedHubOwnerContext:()=>v0,resolveSessionBackend:()=>pj,resolveRulesConfigSearchPaths:()=>E5,resolveProviderConfig:()=>G5,resolveProviderApiKeyFromSettings:()=>i7,resolveProductionHubOwnerContext:()=>Q1,resolvePluginSkillDirectoriesFromPaths:()=>e1,resolvePluginConfigSearchPaths:()=>Q5,resolveModelsRegistryPath:()=>I1,resolveMcpServerRegistrations:()=>t0,resolveMarketplaceMcpServerName:()=>PW,resolveLocalClineAuthToken:()=>zY,resolveHubUrl:()=>WX,resolveHubOwnerContext:()=>J$,resolveHubEndpointOptions:()=>Z1,resolveHubBuildId:()=>HQ,resolveHooksConfigSearchPaths:()=>j5,resolveDisabledToolNames:()=>R1,resolveDisabledPluginPaths:()=>g4,resolveDefaultMcpSettingsPath:()=>Q0,resolveDefaultHubPort:()=>L6,resolveDefaultHubPathname:()=>_j,resolveDefaultHubHost:()=>Dj,resolveCoreSelectedToolIds:()=>s9,resolveCoreDistinctId:()=>c0,resolveCompatibleLocalHubUrl:()=>WW,resolveClineDir:()=>_A,resolveClineDataDir:()=>n2,resolveAndLoadAgentPlugins:()=>o8,resolveAgentPluginPaths:()=>t1,requestHubShutdown:()=>$W,requestDesktopToolApproval:()=>hX,removePluginMcpServersFromSettings:()=>EW,rememberRecoverableLocalHubUrl:()=>l$,registerRemoteConfigSessionBlobUpload:()=>pQ,registerMcpServersFromSettingsFile:()=>c2,registerDisposable:()=>jv,refreshProviderModelsFromSource:()=>_Y,refreshOpenAICodexToken:()=>A9,refreshOcaToken:()=>f9,refreshClineToken:()=>K9,readSessionCheckpointHistory:()=>Q8,readRemoteConfigSessionBlobUploadMetadata:()=>RX,readModelsFileSync:()=>s6,readHubDiscovery:()=>O0,readGlobalSettings:()=>N0,readCompactionStrategyGlobally:()=>jH,readBearerToken:()=>gQ,projectSessionCompactionState:()=>X2,probeHubServer:()=>j$,probeHubConnection:()=>rU,prewarmFileIndex:()=>y9,prewarmDetachedHubServer:()=>UQ,prepareRemoteConfigCoreIntegration:()=>EX,parseWorkflowConfigFromMarkdown:()=>R5,parseUserCommandEnvelope:()=>Jv,parseSkillConfigFromMarkdown:()=>q5,parseSettings:()=>SZ,parseSessionCompactionState:()=>K1,parseRuleConfigFromMarkdown:()=>M5,parsePluginSource:()=>K7,parseMcpInstallArgs:()=>RW,parseHookEventPayload:()=>I6,parseConfiguredAgentConfig:()=>jW,normalizeWorkspacePath:()=>N1,normalizeUserInput:()=>Qv,normalizeSdkError:()=>Zv,normalizeRuntimeCapabilities:()=>C0,normalizeProviderId:()=>Z6,normalizeOAuthProvider:()=>fY,normalizeHubWebSocketUrl:()=>p$,noopBasicLogger:()=>Wv,migrateLegacyProviderSettings:()=>cW,mergeRulesForSystemPrompt:()=>G6,mergeAgentHooks:()=>h2,marketplaceEntryKey:()=>aX,markLocalProviderEnabled:()=>FY,makeTeamTaskSubSessionId:()=>p4,makeSubSessionId:()=>v8,loginOpenAICodex:()=>j4,loginOcaOAuth:()=>B4,loginLocalProvider:()=>LY,loginClineOAuth:()=>Q4,loginAndSaveProviderOAuthCredentials:()=>G4,loginAndSaveLocalProviderOAuthCredentials:()=>TY,loadOpenTelemetryAdapter:()=>wm,loadMcpSettingsFile:()=>x2,loadLlmsConfigFromFile:()=>yY,loadConfiguredAgentConfigs:()=>R6,loadAgentPluginsFromPathsWithDiagnostics:()=>P2,loadAgentPluginsFromPaths:()=>ZZ,loadAgentPluginFromPath:()=>W5,listSessionHistoryFromBackend:()=>Vj,listPluginToolsWithDiagnostics:()=>QQ,listPluginTools:()=>g5,listMcpServerOAuthStatuses:()=>I5,listLocalProviders:()=>AY,listHookConfigFiles:()=>b$,isToolDisabledGlobally:()=>YH,isTelemetryOptedOutGlobally:()=>m9,isSessionNotFoundError:()=>Q$,isRuleEnabled:()=>rZ,isPluginDisabledGlobally:()=>BH,isOfficialPluginSlug:()=>G7,isOAuthProvider:()=>J2,isMarketplaceSkillInstalled:()=>W7,isLocalHubOrigin:()=>MX,isLocalHubHostName:()=>mQ,isHubReconnectableTransportError:()=>zj,isHubCommandTimeoutError:()=>_Q,isDiscoveryFilePresent:()=>LA,isClinePassLimitMessage:()=>um,isClinePassLimitError:()=>cm,isClineOrgIndividualInferenceSubscriptionMessage:()=>vm,isClineOrgIndividualInferenceSubscriptionError:()=>mm,isClineNotSubscribedMessage:()=>gm,isClineNotSubscribedError:()=>xm,isClineAccountActionRequest:()=>xZ,isBuiltInProviderId:()=>AJ,isAutoUpdateEnabledGlobally:()=>QH,installPlugin:()=>ZY,installMcpServer:()=>kX,identifyAccount:()=>H1,hashSecret:()=>R0,hasMcpSettingsFile:()=>W$,getValidOpenAICodexCredentials:()=>X4,getValidOcaCredentials:()=>H4,getValidClineCredentials:()=>J4,getProviderOAuthCredentialsFromSettings:()=>K4,getProviderConfigFields:()=>qY,getProviderConfig:()=>OZ,getProviderAuthStorageId:()=>r7,getProviderAuthHandler:()=>H0,getPersistedProviderApiKey:()=>q8,getMcpServerOAuthState:()=>m2,getMarketplaceSkillCandidates:()=>SW,getLocalProviderModels:()=>UY,getLiveModelsCatalog:()=>W6,getGlobalMarketplaceSkillPaths:()=>bW,getFileIndex:()=>r1,getCurrentContextSize:()=>m3,getCoreHeadlessToolNames:()=>l4,getCoreDefaultEnabledToolIds:()=>o9,getCoreBuiltinToolCatalog:()=>R2,getCoreAcpToolNames:()=>t9,getClinePassSubscriptionUrl:()=>Im,getClineOrgIndividualInferenceSubscriptionMessage:()=>km,getClineNotSubscribedMessage:()=>hm,getClineDefaultSystemPrompt:()=>dm,generateWorkspaceInfoWithDiagnostics:()=>A5,generateWorkspaceInfo:()=>j6,formatRulesForSystemPrompt:()=>H6,formatProviderOAuthApiKey:()=>n7,formatDisplayUserInput:()=>$v,findInstalledGlobalMarketplaceSkillName:()=>yW,findCheckpointForRun:()=>y6,filterExtensionToolRegistrations:()=>u9,filterDisabledTools:()=>n1,filterDisabledPluginPaths:()=>c9,fetchClineRecommendedModels:()=>SY,extractClinePassLimitMessage:()=>ym,executeClineAccountAction:()=>gZ,ensureHubWebSocketServer:()=>vQ,ensureHubServer:()=>W_,ensureDetachedHubServer:()=>EA,ensureCustomProvidersLoadedSync:()=>mW,ensureCustomProvidersLoaded:()=>vW,ensureCompatibleLocalHubUrl:()=>s2,enrichPromptWithMentions:()=>b8,emptyWorkspaceManifest:()=>sm,emptyStoredProviderSettings:()=>I$,discoverPluginModulePaths:()=>J5,disablePluginMcpServersInSettings:()=>mX,deriveSubsessionStatus:()=>i4,deleteLocalProvider:()=>f7,defineLlmsConfig:()=>bY,createWorkflowsConfigDefinition:()=>S5,createUserInstructionConfigService:()=>x$,createToolPoliciesWithPreset:()=>k9,createTool:()=>om,createTeamName:()=>nQ,createSubprocessHooks:()=>CQ,createSpawnAgentTool:()=>C$,createSkillsConfigDefinition:()=>C5,createShellTool:()=>b4,createShellExecutor:()=>K2,createSessionHost:()=>S6,createSessionCompactionState:()=>M8,createRuntimeHost:()=>S6,createRulesConfigDefinition:()=>P5,createRemoteConfigSessionMessagesArtifactUploader:()=>NX,createProviderConfig:()=>UJ,createOpenTelemetryTelemetryService:()=>DW,createOAuthClientCallbacks:()=>Y6,createMcpTools:()=>_6,createLocalHubScheduleRuntimeHandlers:()=>cQ,createLlmsSdk:()=>kY,createInitialAccumulatedUsage:()=>q0,createInMemoryHubOwnerContext:()=>fA,createHubServerUrl:()=>_1,createHubAuthToken:()=>BQ,createHookConfigFileHooks:()=>V5,createHookConfigFileExtension:()=>$6,createHookAuditHooks:()=>e8,createEditorExecutor:()=>D2,createDisabledMcpToolPolicy:()=>x5,createDisabledMcpToolPolicies:()=>ZQ,createDelegatedAgentConfigProvider:()=>E$,createDelegatedAgent:()=>w$,createDefaultToolsWithPreset:()=>I9,createDefaultTools:()=>q$,createDefaultShellExecutor:()=>I4,createDefaultMcpServerClientFactory:()=>U6,createDefaultExecutors:()=>y8,createCoreSettingsService:()=>d2,createCoreSessionSnapshot:()=>C1,createContributionRegistry:()=>am,createContextCompactionPrepareTurn:()=>T4,createConfiguredTelemetryService:()=>H$,createConfiguredTelemetryHandle:()=>n$,createConfiguredAgentTools:()=>N6,createCompactionStateAwarePrepareTurn:()=>z4,createClineTelemetryServiceMetadata:()=>nm,createClineTelemetryServiceConfig:()=>im,createCheckpointComparePlan:()=>RQ,createBuiltinTools:()=>N2,createApplyPatchExecutor:()=>U2,createAgentTeamsTools:()=>M2,createAgentRuntime:()=>Bv,createAgentHooksExtension:()=>s8,connectToHub:()=>bQ,computePatchChanges:()=>P8,completeClineDeviceAuth:()=>c7,compareCheckpointToWorkspace:()=>KW,collectPluginMcpOAuthCandidates:()=>F7,clearPrivateModelsCatalogCache:()=>KJ,clearLiveModelsCatalogCache:()=>GJ,clearHubDiscovery:()=>m0,captureWorkspacePathResolved:()=>QV,captureWorkspaceInitialized:()=>iW,captureWorkspaceInitError:()=>nW,captureToolUsage:()=>_8,captureTokenUsage:()=>sW,captureTaskRestarted:()=>oW,captureTaskCreated:()=>aW,captureTaskCompleted:()=>$4,captureSubagentExecution:()=>Z4,captureSkillUsed:()=>eW,captureSdkError:()=>rm,captureProviderConfigured:()=>JV,captureProviderApiError:()=>W4,captureModeSwitch:()=>tW,captureMistakeLimitReached:()=>W9,captureMentionUsed:()=>Z9,captureMentionSearchResults:()=>J9,captureMentionFailed:()=>Q9,captureHookDiscovery:()=>X9,captureExtensionActivated:()=>ZV,captureDiffEditFailure:()=>$9,captureConversationTurnEvent:()=>D8,captureCompactionSkipped:()=>V9,captureCompactionExecuted:()=>Y9,captureAuthSucceeded:()=>v1,captureAuthStarted:()=>m1,captureAuthLoggedOut:()=>D$,captureAuthFailed:()=>c1,captureAgentUnexpectedReasoningTokens:()=>WV,captureAgentTeamCreated:()=>j9,captureAgentCreated:()=>_$,buildWorkspaceMetadata:()=>U5,buildTeamProgressSummary:()=>E6,buildSdkErrorProperties:()=>lm,buildRemoteConfigSessionBlobUploadMetadata:()=>dQ,buildMcpInstallTransport:()=>aQ,buildDelegatedAgentConfig:()=>z2,buildConnectionUpdate:()=>R3,buildConfiguredAgentToolName:()=>XW,buildConfiguredAgentToolDescriptors:()=>YW,buildCheckpointWorkspaceDiff:()=>NQ,bootstrapAgentTeams:()=>m8,authorizeMcpServerOAuth:()=>tZ,addLocalProvider:()=>KY,accumulateUsageTotals:()=>L0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>z5,UnifiedConfigFileWatcher:()=>I2,ToolPresets:()=>a0,TelemetryService:()=>v6,TelemetryLoggerSink:()=>UW,TEAM_TOOL_NAMES:()=>g8,SubprocessSandbox:()=>i8,StructuredCommandInputSchema:()=>B2,StoredProviderSettingsSchema:()=>J6,StoredProviderSettingsEntrySchema:()=>yZ,SqliteTeamStore:()=>B8,SqliteSessionStore:()=>S1,SessionVersioningService:()=>s$,SessionVersioningError:()=>d0,SessionSource:()=>F0,SessionNotFoundError:()=>Z$,SapSettingsSchema:()=>wZ,SKILLS_CONFIG_DIRECTORY_NAME:()=>T5,SESSION_STATUSES:()=>n4,SESSION_NOT_FOUND_ERROR_CODE:()=>l2,SDK_ERROR_TELEMETRY_EVENT:()=>Xv,RpcClineAccountService:()=>L5,RemoteRuntimeHost:()=>q6,ReasoningSettingsSchema:()=>MZ,RULES_CONFIG_DIRECTORY_NAME:()=>pZ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>lQ,ProviderSettingsSchema:()=>h$,ProviderSettingsManager:()=>X1,ProviderProtocolSchema:()=>TZ,ProviderIdSchema:()=>F5,ProviderClientSchema:()=>zZ,PatchActionType:()=>A2,OpenTelemetryProvider:()=>c6,OcaSettingsSchema:()=>CZ,OPENAI_COMPATIBLE_PROVIDERS:()=>H5,NodeHubClient:()=>f1,NoOpFeatureFlagsProvider:()=>Z8,NativeHubTransportAdapter:()=>qW,ModelCatalogSettingsSchema:()=>PZ,McpSettingsUpdateSkippedError:()=>K6,McpSettingsMutatorPurityError:()=>g$,McpSettingsLockTimeoutError:()=>m$,MAX_COMMAND_OUTPUT_CHARS:()=>d1,LocalRuntimeHost:()=>h1,Llms:()=>Cm,InMemoryWorkspaceManager:()=>X6,InMemoryMcpManager:()=>u2,HubUIClient:()=>JX,HubTransportError:()=>y0,HubSessionClient:()=>QX,HubServerTransport:()=>d6,HubScheduleService:()=>m6,HubScheduleCommandService:()=>g6,HubRuntimeHost:()=>X$,HubCommandError:()=>T6,HookEventPayloadSchema:()=>wQ,HookEventNameSchema:()=>EQ,HookConfigFileName:()=>t8,HOOK_CONFIG_FILE_EVENT_MAP:()=>X5,HOOKS_CONFIG_DIRECTORY_NAME:()=>VZ,GlobalSettingsSchema:()=>x4,GcpSettingsSchema:()=>NZ,FileTeamPersistenceStore:()=>T7,FeatureFlagsService:()=>W8,FeatureFlagDefaultValue:()=>em,FEATURE_FLAGS:()=>tm,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>E7,DefaultToolNames:()=>z0,DefaultRuntimeBuilder:()=>r6,DefaultLlmsSdk:()=>dW,DEFAULT_MODELS_CATALOG_URL:()=>DZ,DEFAULT_HUB_PORT:()=>Aj,DEFAULT_HUB_PATHNAME:()=>Uj,DEFAULT_HUB_HOST:()=>Fj,CoreSettingsService:()=>v$,CoreSessionService:()=>y1,ContributionRegistry:()=>pm,CommandExitError:()=>l1,ClinePassLimitError:()=>bm,ClineOrgIndividualInferenceSubscriptionError:()=>Sm,ClineNotSubscribedError:()=>Pm,ClineCore:()=>FW,ClineAccountService:()=>f5,ChatViewStateSchema:()=>CY,ChatSummarySchema:()=>N7,ChatSessionStatusSchema:()=>q7,ChatSessionConfigSchema:()=>z7,ChatMessageSchema:()=>R7,ChatMessageRoleSchema:()=>M7,CORE_TELEMETRY_EVENTS:()=>v,CORE_BUILD_VERSION:()=>uW,BrowserWebSocketHubAdapter:()=>zW,BUILT_IN_PROVIDER_IDS:()=>FJ,BUILT_IN_PROVIDER:()=>K5,AzureSettingsSchema:()=>EZ,AwsSettingsSchema:()=>RZ,AuthSettingsSchema:()=>qZ,AgentTeamsRuntime:()=>$8,AgentTeam:()=>P6,Agent:()=>Vv,ALL_DEFAULT_TOOL_NAMES:()=>L$});M(q,Y20);import*as Cm from"@cline/llms";import{ClineNotSubscribedError as Pm,ClineOrgIndividualInferenceSubscriptionError as Sm,ClinePassLimitError as bm,extractClinePassLimitMessage as ym,getClineNotSubscribedMessage as hm,getClineOrgIndividualInferenceSubscriptionMessage as km,getClinePassSubscriptionUrl as Im,isClineNotSubscribedError as xm,isClineNotSubscribedMessage as gm,isClineOrgIndividualInferenceSubscriptionError as mm,isClineOrgIndividualInferenceSubscriptionMessage as vm,isClinePassLimitError as cm,isClinePassLimitMessage as um}from"@cline/llms";import{buildClineSystemPrompt as dm,buildSdkErrorProperties as lm,ContributionRegistry as pm,captureSdkError as rm,createClineTelemetryServiceConfig as im,createClineTelemetryServiceMetadata as nm,createContributionRegistry as am,createTool as om,emptyWorkspaceManifest as sm,FEATURE_FLAGS as tm,FeatureFlagDefaultValue as em,formatDisplayUserInput as $v,noopBasicLogger as Wv,normalizeSdkError as Zv,normalizeUserInput as Qv,parseUserCommandEnvelope as Jv,registerDisposable as jv,SDK_ERROR_TELEMETRY_EVENT as Xv,stripUtf8Bom as Yv}from"@cline/shared";import"@cline/shared/storage";var EK={};w(EK,{isClineAccountActionRequest:()=>xZ,executeClineAccountAction:()=>gZ,RpcClineAccountService:()=>L5,ClineAccountService:()=>f5});function ON($){if(typeof $!=="object"||$===null||!("error"in $))return;let W=$.error;return typeof W==="string"&&W.trim()?W:void 0}function NK($,W,Z){let Q=ON(Z);if(Q)return Q;let J=W.trim();if(J){let j=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${j}`}return`Cline account request failed with status ${$}`}class f5{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let W=$.apiBaseUrl.trim();if(!W)throw Error("apiBaseUrl is required");this.apiBaseUrl=W,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 W=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(W)}/balance`)}async fetchUsageTransactions($){let W=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(W)}/usages`)).items??[]}async fetchPaymentTransactions($){let W=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(W)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let W=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)W.searchParams.set("type",$.type);return this.request(`${W.pathname}${W.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let W=$.trim();if(!W)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(W)}`)}async fetchOrganizationBalance($){let W=$.trim();if(!W)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(W)}/balance`)}async fetchOrganizationUsageTransactions($){let W=$.organizationId.trim();if(!W)throw Error("organizationId is required");let Z=await this.resolveOrganizationMemberId(W,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(W)}/members/${encodeURIComponent(Z)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let W=$?.trim();if(W)return W;let Q=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(Q)return Q;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,W){let Z=W?.trim();if(Z)return Z;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let X=(await this.fetchUserOrganizations()).find((Y)=>Y.organizationId===$)?.memberId;if(!X?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return X}async request($,W){let Z=(await this.getAuthTokenFn())?.trim();if(!Z)throw Error("No Cline account auth token found");let Q=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,j=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let X=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:W?.method??"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json",...Q??{}},body:W?.body!==void 0?JSON.stringify(W.body):void 0,signal:J.signal});if(X.status===204||W?.expectNoContent){if(!X.ok)throw Error(`Cline account request failed with status ${X.status}`);return}let Y=await X.text(),V;if(Y.trim())try{V=JSON.parse(Y)}catch{if(!X.ok)throw Error(NK(X.status,Y,void 0));throw Error("Cline account response was not valid JSON")}if(!X.ok)throw Error(NK(X.status,Y,V));if(typeof V==="object"&&V!==null){let B=V;if(typeof B.success==="boolean"){if(!B.success)throw Error(B.error||"Cline account request failed");return B.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(j)}}}function xZ($){return $.action==="clineAccount"}async function gZ($,W){switch($.operation){case"fetchMe":return W.fetchMe();case"fetchBalance":return W.fetchBalance($.userId);case"fetchUsageTransactions":return W.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return W.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return W.fetchUserOrganizations();case"fetchOrganizationBalance":return W.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return W.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await W.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return W.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class L5{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 W=$.trim();if(!W)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:W})}async fetchOrganizationUsageTransactions($){let W=$.organizationId.trim();if(!W)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:W,...$.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 wK={};w(wK,{createOAuthClientCallbacks:()=>Y6});function Y6($){return{onAuth:({url:W,instructions:Z})=>{if($.onOutput?.(Z??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(W)).catch((Q)=>{$.onOpenUrlError?.({url:W,error:Q})})}catch(Q){$.onOpenUrlError?.({url:W,error:Q})}$.onOutput?.(W)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var xU={};w(xU,{ClineCore:()=>FW});function CK($){if($===!0)return{};if(!$)return;return $}function PK($){if($==="user")return"global";return $}class zJ{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let W=this.getService().ingestEvent($);return{event:W.event,duplicate:W.duplicate,matchedSpecIds:W.matchedSpecs.map((Z)=>Z.specId),queuedRuns:W.queuedRuns,suppressions:W.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function SK($){let{host:W}=$;return{async startSession(Z){let Q=(Z.cwd?.trim()||Z.workspaceRoot).trim(),J=await W.startSession({source:Z.source?.trim()||F0.CLI,interactive:!1,config:{providerId:Z6(Z.provider),modelId:Z.model,apiKey:Z.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:qN(Z),maxIterations:Z.maxIterations,enableTools:Z.enableTools!==!1,enableSpawnAgent:Z.enableSpawn!==!1,enableAgentTeams:Z.enableTeams!==!1,disableMcpSettingsTools:Z.disableMcpSettingsTools,missionLogIntervalSteps:Z.missionStepInterval,missionLogIntervalMs:Z.missionTimeIntervalMs},toolPolicies:Z.toolPolicies??{"*":{autoApprove:Z.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Z.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Z,Q){let J=await W.runTurn({sessionId:Z,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((j)=>j.content),delivery:Q.delivery});if(!J)throw Error("ClineCore automation runtime returned no result");return{result:zN(J)}},async abortSession(Z){return await W.abort(Z,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Z){return await W.stopSession(Z),{applied:!0}}}}function mZ($){let W=TN($.automationService,$.automation),Z=$.context?.client??($.clientName?{name:$.clientName}:void 0),Q=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),J=$.context?.logger??$.logger,j=$.context?.telemetry??$.telemetry;if(!W&&!Z&&!Q&&!J&&!j)return $.context;return{...$.context??{},...Z?{client:Z}:{},...Q?{user:Q}:{},...J?{logger:J}:{},...j?{telemetry:j}:{},...W?{automation:W}:{}}}function TN($,W){if(!$)return;return{ingestEvent:(Z)=>{W.ingestEvent(Z)}}}function zN($){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((W)=>({name:W.name,input:W.input,output:W.output,error:W.error,durationMs:W.durationMs}))}}function qN($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var kF={};w(kF,{createCoreSettingsService:()=>d2,CoreSettingsService:()=>v$});import{existsSync as v5,readFileSync as Hw}from"node:fs";import{basename as mJ,dirname as wF,extname as Gw,isAbsolute as SF,join as Kw,relative as bF,resolve as CF}from"node:path";var rK={};w(rK,{resolveWorkflowsConfigSearchPaths:()=>w5,resolveSkillsConfigSearchPaths:()=>N5,resolveRulesConfigSearchPaths:()=>E5,parseWorkflowConfigFromMarkdown:()=>R5,parseSkillConfigFromMarkdown:()=>q5,parseRuleConfigFromMarkdown:()=>M5,createWorkflowsConfigDefinition:()=>S5,createUserInstructionConfigService:()=>x$,createSkillsConfigDefinition:()=>C5,createRulesConfigDefinition:()=>P5,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>z5,UnifiedConfigFileWatcher:()=>I2,SKILLS_CONFIG_DIRECTORY_NAME:()=>T5,RULES_CONFIG_DIRECTORY_NAME:()=>pZ});import{createHash as MN}from"node:crypto";import{watch as RN}from"node:fs";import{readdir as NN,readFile as EN}from"node:fs/promises";import{join as wN}from"node:path";function CN($){return MN("sha1").update($).digest("hex")}function hK($){return Boolean($&&typeof $==="object"&&"code"in $)}function bK($){return hK($)&&$.code==="ENOENT"}function yK($){return hK($)&&($.code==="EACCES"||$.code==="EPERM")}class I2{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($,W){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=W?.debounceMs??75,this.emitParseErrors=W?.emitParseErrors??!1;for(let Z of $){if(this.definitionsByType.has(Z.type))throw Error(`Duplicate unified config definition type '${Z.type}'.`);this.definitionsByType.set(Z.type,Z),this.recordsByType.set(Z.type,new Map),this.discoveredDirectoriesByType.set(Z.type,new Set);for(let Q of Z.directories){let J=this.baseTypesByDirectory.get(Q);if(J)J.add(Z.type);else this.baseTypesByDirectory.set(Q,new Set([Z.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let W=this.definitionsByType.get($);if(!W)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(W)})}getSnapshot($){let W=this.recordsByType.get($);return new Map([...W?.entries()??[]].map(([Z,Q])=>[Z,{...Q}]))}getAllSnapshots(){let $=new Map;for(let[W,Z]of this.recordsByType.entries())$.set(W,new Map([...Z.entries()].map(([Q,J])=>[Q,{...J}])));return $}emit($){for(let W of this.listeners)W($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[W,Z]of this.watchersByDirectory.entries()){if($.has(W))continue;Z.close(),this.watchersByDirectory.delete(W)}this.watchedTypesByDirectory=$;for(let W of $.keys()){if(this.watchersByDirectory.has(W))continue;try{let Z=RN(W,()=>{let Q=this.watchedTypesByDirectory.get(W);if(!Q)return;for(let J of Q)this.pendingTypes.add(J);this.scheduleFlush()});this.watchersByDirectory.set(W,Z),Z.on("error",(Q)=>{let J=this.watchedTypesByDirectory.get(W);if(!J)return;for(let j of J)this.emit({kind:"error",type:j,error:Q,filePath:W})})}catch(Z){if(!bK(Z)&&!yK(Z)){let Q=$.get(W);if(!Q)continue;for(let J of Q)this.emit({kind:"error",type:J,error:Z,filePath:W})}}}}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 W of $){let Z=this.definitionsByType.get(W);if(!Z)continue;await this.refreshTypeInternal(Z)}})},this.debounceMs)}async refreshTypeInternal($){let{records:W,discoveredDirectories:Z}=await this.loadDefinition($),Q=this.recordsByType.get($.type)??new Map;for(let[J,j]of Q.entries()){if(W.has(J))continue;this.emit({kind:"remove",type:$.type,id:J,filePath:j.filePath})}for(let[J,j]of W.entries()){let X=Q.get(J);if(X&&X.filePath===j.filePath&&X.fingerprint===j.fingerprint)continue;this.emit({kind:"upsert",record:{type:j.type,id:J,item:j.item,filePath:j.filePath}})}if(this.recordsByType.set($.type,W),this.discoveredDirectoriesByType.set($.type,Z),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let W=new Map,Z=new Set;for(let Q of $.directories){Z.add(Q);let J=$.discoverFiles?await $.discoverFiles(Q):await this.readDirectoryFileCandidates(Q);for(let j of J){let{fileName:X,filePath:Y}=j;if(Z.add(j.directoryPath),$.includeFile&&!$.includeFile(X,Y))continue;try{let V=await EN(Y,"utf8"),B={type:$.type,directoryPath:j.directoryPath,fileName:X,filePath:Y,content:V},H=$.parseFile(B),G=$.resolveId(H,B).trim();if(!G)continue;W.set(G,{type:$.type,id:G,item:H,filePath:Y,fingerprint:CN(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:Y})}}}return{records:W,discoveredDirectories:Z}}buildDesiredTypesByDirectory(){let $=new Map;for(let[W,Z]of this.baseTypesByDirectory.entries())$.set(W,new Set(Z));for(let[W,Z]of this.discoveredDirectoriesByType.entries())for(let Q of Z){let J=$.get(Q);if(J)J.add(W);else $.set(Q,new Set([W]))}return $}async readDirectoryFileCandidates($){try{return(await NN($,{withFileTypes:!0})).filter((Z)=>Z.isFile()).map((Z)=>({directoryPath:$,fileName:Z.name,filePath:wN($,Z.name)})).sort((Z,Q)=>Z.fileName.localeCompare(Q.fileName))}catch(W){if(bK(W)||yK(W))return[];throw W}}}import{readdir as MJ,readFile as PN,stat as qJ}from"node:fs/promises";import{basename as $$,dirname as SN,extname as cZ,join as g0,resolve as O5}from"node:path";import{stripUtf8Bom as bN}from"@cline/shared";import{AGENTS_RULES_FILE_NAME as kK,RULES_CONFIG_DIRECTORY_NAME as pZ,resolveGlobalAgentsRulesPath as yN,resolveRulesConfigSearchPaths as hN,resolveSkillsConfigSearchPaths as kN,resolveWorkflowsConfigSearchPaths as IN,SKILLS_CONFIG_DIRECTORY_NAME as T5,WORKFLOWS_CONFIG_DIRECTORY_NAME as z5}from"@cline/shared/storage";import xN from"yaml";var vZ="SKILL.md",gN="managed.json",mN=new Set([".md",".markdown",".txt"]);function RJ($){return $.trim().toLowerCase()}function V6($){let W=$;return W?.code==="ENOENT"||W?.code==="EACCES"||W?.code==="EPERM"||W?.code==="ELOOP"}function uZ($){return mN.has(cZ($).toLowerCase())}function IK($){let W=[],Z=new Set;for(let Q of $){let J=O5(Q);if(Z.has(J))continue;Z.add(J),W.push(Q)}return W}function vN($){let W=[...$?.directories??N5($?.workspacePath)];if($?.pluginSkillDirectories)W.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)W.push(...dG({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return IK(W)}async function NJ($){try{let W=await MJ($,{withFileTypes:!0}),Z=[];for(let Q of W){if(!Q.isDirectory())continue;let J=g0($,Q.name),j=g0(J,gN);try{let X=await PN(j,"utf8"),Y=JSON.parse(X);if(Y&&typeof Y==="object")Z.push(J)}catch(X){if(V6(X))continue;if(X?.name==="SyntaxError")continue;throw X}}return Z.sort((Q,J)=>Q.localeCompare(J))}catch(W){if(V6(W))return[];throw W}}function EJ($){let W=bN($),Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=W.match(Z);if(!Q)return{data:{},body:W,hadFrontmatter:!1};let[,J,j]=Q;try{let X=xN.parse(J);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:W,hadFrontmatter:!0,parseError:Y}}}function dZ($,W,Z){if($===void 0||$===null){if(Z)throw Error(`Missing required frontmatter field '${W}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${W}' must be a string.`);let Q=$.trim();if(!Q&&Z)throw Error(`Frontmatter field '${W}' cannot be empty.`);return Q||void 0}function B6($,W){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${W}' must be a boolean.`);return $}function cN($,W){if($$($.filePath).toLowerCase()!==kK.toLowerCase())return $$($.filePath,cZ($.filePath));if(W&&O5($.filePath)===O5(W,kK))return"Workspace AGENTS.md";if(O5($.filePath)===O5(yN()))return"Global AGENTS.md";return $$($.filePath,cZ($.filePath))}function q5($,W){let{data:Z,body:Q,parseError:J}=EJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let j=Q.trim();if(!j)throw Error("Missing instructions body in skill file.");let Y=dZ(Z.name,"name",!1)??W.trim();if(!Y)throw Error("Missing skill name.");return{name:Y,description:dZ(Z.description,"description",!1),disabled:B6(Z.disabled,"disabled")??(B6(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function M5($,W){let{data:Z,body:Q,parseError:J}=EJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let j=Q.trim();if(!j)throw Error("Missing instructions body in rule file.");let X=dZ(Z.name,"name",!1)??W.trim();if(!X)throw Error("Missing rule name.");return{name:X,disabled:B6(Z.disabled,"disabled")??(B6(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function R5($,W){let{data:Z,body:Q,parseError:J}=EJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let j=Q.trim();if(!j)throw Error("Missing instructions body in workflow file.");let X=dZ(Z.name,"name",!1)??W.trim();if(!X)throw Error("Missing workflow name.");return{name:X,disabled:B6(Z.disabled,"disabled")??(B6(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function N5($){return kN($)}function E5($){return hN($)}function w5($){return IN($)}async function xK($){if($$($)===".cline"){let W=await NJ($);return(await Promise.all(W.map((Q)=>xK(g0(Q,T5))))).flat()}try{let W=await MJ($,{withFileTypes:!0}),Z=[];for(let Q of W){if(Q.isFile()&&Q.name===vZ){Z.push({directoryPath:$,fileName:Q.name,filePath:g0($,Q.name)});continue}let J=g0($,Q.name);if(Q.isDirectory()||Q.isSymbolicLink()&&await qJ(J).then((X)=>X.isDirectory()).catch((X)=>{if(V6(X))return!1;throw X}))Z.push({directoryPath:J,fileName:vZ,filePath:g0(J,vZ)})}return Z}catch(W){if(V6(W))return[];throw W}}async function lZ($){if($$($)===".cline"){let W=await NJ($);return(await Promise.all(W.map((Q)=>lZ(g0(Q,"rules.md"))))).flat()}try{if((await qJ($)).isFile())return[{directoryPath:SN($),fileName:$$($),filePath:$}]}catch(W){if(!V6(W))throw W}try{let Z=(await MJ($,{withFileTypes:!0})).filter((J)=>J.isFile()&&uZ(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:g0($,J.name)})),Q=g0($,"AGENTS.md");try{if((await qJ(Q)).isFile()){if(!Z.some((X)=>X.fileName==="AGENTS.md"))Z.push({directoryPath:$,fileName:"AGENTS.md",filePath:Q})}}catch{}return Z}catch(W){if(V6(W))return[];throw W}}async function uN($){if($$($)===".cline"){let W=await NJ($);return(await Promise.all(W.map((Q)=>lZ(g0(Q,z5))))).flat()}return lZ($)}function C5($){let W=vN($),Z=$?.workspacePath?g0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Z?IK([...W,Z]):W,discoverFiles:xK,includeFile:(Q)=>Q===vZ,parseFile:(Q)=>q5(Q.content,$$(Q.directoryPath)),resolveId:(Q)=>RJ(Q.name)}}function P5($){let W=$?.directories??E5($?.workspacePath),Z=$?.workspacePath?g0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Z?[...W,Z]:W,discoverFiles:lZ,includeFile:(Q,J)=>Q===".clinerules"||uZ(Q)||uZ(J),parseFile:(Q)=>M5(Q.content,cN(Q,$?.workspacePath)),resolveId:(Q)=>RJ(Q.name)}}function S5($){let W=$?.directories??w5($?.workspacePath),Z=$?.workspacePath?g0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Z?[...W,Z]:W,discoverFiles:uN,includeFile:(Q)=>uZ(Q),parseFile:(Q)=>R5(Q.content,$$(Q.filePath,cZ(Q.filePath))),resolveId:(Q)=>RJ(Q.name)}}function gK($){let W=[C5($?.skills),P5($?.rules),S5($?.workflows)];return new I2(W,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as mK}from"@cline/shared";function dN($,W){if($.description?.trim())return mK($.description,".");if(W==="workflow")return;return mK($.instructions,".")}function lN($){return $.disabled!==!0}function vK($,W){return[...$.getSnapshot(W).entries()].map(([Z,Q])=>({id:Z,record:Q})).filter(({record:Z})=>lN(Z.item)).map(({id:Z,record:Q})=>({id:Z,name:Q.item.name,instructions:Q.item.instructions,description:dN(Q.item,W),kind:W})).sort((Z,Q)=>Z.name.localeCompare(Q.name))}function b5($){let W=new Map;for(let Z of[...vK($,"workflow"),...vK($,"skill")])if(!W.has(Z.name))W.set(Z.name,Z);return[...W.values()].sort((Z,Q)=>Z.name.localeCompare(Q.name))}function cK($,W){if(!$.startsWith("/")||$.length<2)return $;let Z=$.match(/^\/(\S+)/);if(!Z)return $;let Q=Z[1];if(!Q)return $;let J=Q.length+1,j=$.slice(J),X=b5(W).find((Y)=>Y.name===Q);return X?`${X.instructions}${j}`:$}var dK={};w(dK,{mergeRulesForSystemPrompt:()=>G6,loadRulesForSystemPromptFromWatcher:()=>wJ,listEnabledRulesFromWatcher:()=>uK,isRuleEnabled:()=>rZ,formatRulesForSystemPrompt:()=>H6});function rZ($){return $.disabled!==!0}function H6($){if($.length===0)return"";return`
|
|
201
|
+
${Q}`;return Z||Q}function Dq($,W){let Z=W?.["*"]??{},Q=W?.[$]??{};return{...Z,...Q}.enabled!==!1}function _q($,W){return $.filter((Z)=>Dq(Z.name,W))}function Lq($,W){return i1(_q($,W))}function fq($){let W=$.filter((Z)=>Z!==void 0);if(W.length===0)return{};return{beforeRun:async(Z)=>{for(let Q of W){let J=await Q.beforeRun?.(Z);if(J?.stop)return J}return},afterRun:async(Z)=>{for(let Q of W)await Q.afterRun?.(Z)},beforeModel:async(Z)=>{let Q=Z.request,J;for(let j of W){let X=await j.beforeModel?.({...Z,request:Q});if(!X)continue;if(X.stop)return X;J={...J,...X,options:yH(J?.options,X.options)},Q={...Q,...X.messages?{messages:X.messages}:{},...X.tools?{tools:X.tools}:{},...X.options?{options:yH(Q.options,X.options)}:{}}}return J},afterModel:async(Z)=>{for(let Q of W){let J=await Q.afterModel?.(Z);if(J?.stop)return J}return},beforeTool:async(Z)=>{let Q=Z.input,J;for(let j of W){let X=await j.beforeTool?.({...Z,input:Q});if(!X)continue;if(X.stop||X.skip)return X;if(J={...J,...X},Object.hasOwn(X,"input"))Q=X.input}return J},afterTool:async(Z)=>{let Q=Z.result,J;for(let j of W){let X=await j.afterTool?.({...Z,result:Q});if(!X)continue;if(X.stop)return X;if(J={...J,...X},X.result)Q=X.result}return J},onEvent:async(Z)=>{for(let Q of W)await Q.onEvent?.(Z)}}}class P${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 S3;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($,W={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=W.logger??$.logger,this.telemetry=W.telemetry??$.telemetry,this.createAgentRuntimeImpl=W.createAgentRuntimeImpl??Hq,this.conversation=new N3($.initialMessages),this.messageBuilder=new q3(EH()),this.contributionRegistry=Gq({extensions:$.extensions?[...$.extensions]:[],setupContext:{session:$.extensionContext?.session,client:$.extensionContext?.client,user:$.extensionContext?.user,workspaceInfo:$.extensionContext?.workspace,automation:$.extensionContext?.automation,logger:$.extensionContext?.logger??this.logger,telemetry:$.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let Z=$.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new P3({maxConsecutiveMistakes:Z,onLimitReached:$.onConsecutiveMistakeLimitReached,onLimitTelemetry:(j)=>{ZW(this.telemetry,{ulid:this.config.sessionId??this.conversation.getConversationId(),model:this.config.modelId,provider:this.config.providerId,reason:j.reason,consecutiveMistakes:j.consecutiveMistakes,maxConsecutiveMistakes:j.maxConsecutiveMistakes,agentId:this.agentId,conversationId:this.conversation.getConversationId(),parentAgentId:this.parentAgentId,isSubagent:Boolean(this.parentAgentId)})},emit:(j)=>this.emitLegacyEvent(j),log:(j,X,Y)=>Oq(this.logger,j,X,Y),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(j,X)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:j}]})}});let Q=$.execution?.loopDetection;this.loopDetectionDisabled=Q===!1;let J=Q===!1||Q===void 0?void 0:Q;this.loopTracker=new C3(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 W=new Set(this.config.tools.map((Q)=>Q.name)),Z=[...this.config.tools];for(let Q of $)if(!W.has(Q.name))Z.push(Q),W.add(Q.name);this.config={...this.config,tools:Z}}updateConnection($){let W=q2($),Z={...this.config};if(W.providerId!==void 0)Z.providerId=W.providerId;if(W.modelId!==void 0)Z.modelId=W.modelId;if(W.apiKey!==void 0)Z.apiKey=W.apiKey;if(W.baseUrl!==void 0)Z.baseUrl=W.baseUrl;if(W.headers!==void 0)Z.headers=W.headers;if(W.providerConfig!==void 0)Z.providerConfig=W.providerConfig;if(Object.hasOwn(W,"reasoningEffort"))Z.reasoningEffort=W.reasoningEffort??void 0;if(Object.hasOwn(W,"thinkingBudgetTokens"))Z.thinkingBudgetTokens=W.thinkingBudgetTokens??void 0;if(Object.hasOwn(W,"thinking")){if(Z.thinking=W.thinking??void 0,W.thinking===!1||W.thinking===null)Z.reasoningEffort=void 0,Z.thinkingBudgetTokens=void 0}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 W=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=W,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(W)}async shutdown($,W){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($,W,Z){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:W,userFiles:Z,isContinue:!1})}continue($,W,Z){return this.executeRun({userMessage:$,userImages:W,userFiles:Z,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let W of this.contributionRegistry.getRegisteredRules()){let Z=await Aq(W);if(Z)$.push(Z)}return Uq(this.config.systemPrompt,$)}executeRun($){let W;return W=this.executeRunWithAuthRetry($).finally(()=>{if(this.activeRunPromise===W)this.activeRunPromise=null}),this.activeRunPromise=W,W}async executeRunWithAuthRetry($){let W=await this.executeRunInternal($);if(W.finishReason!=="error"||!this.config.onAuthError||!Kq(W.text))return W;if(!await this.config.onAuthError().catch(()=>!1))return W;let Q=await this.executeRunInternal({isContinue:!0});return jV(this.telemetry,this.config.providerId,{recovered:Q.finishReason!=="error"}),Q}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 W=new Date,Z=$.userMessage;if(Z!==void 0){let _=await zq(Z,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:_})}let Q=await this.composeSystemPrompt(),J=LH(this.config,this.logger,this.telemetry),j=new Map;for(let _ of this.contributionRegistry.getRegisteredTools())j.set(_.name,_);let X=Lq([...j.values()],this.config.toolPolicies),Y=new Map;for(let _ of X)Y.set(_.name,_);for(let _ of this.config.tools)Y.set(_.name,_);let V=this.conversation.getConversationId(),B=hH(this.config),H=Array.from(Y.values()),G=lW(this.conversation.getMessages()),K=CH({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:J,logger:this.logger,telemetry:this.telemetry,tools:H,toolContextMetadata:{modelSupportsImages:B?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[NW]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(B,H),initialMessages:G,systemPrompt:Q}),F=this.createAgentRuntimeImpl(K);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let A=F.subscribe((_)=>{this.handleRuntimeEvent(_)}),D,U;try{if($.isContinue)D=await F.continue(void 0);else D=await F.run("")}catch(_){U=_ instanceof Error?_:Error(String(_))}finally{A();try{await this.activeTrackerWork}catch(_){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:_})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(D&&D.messages.length>0){let _=g8(D.messages);this.conversation.replaceMessages(_)}let L=new Date;try{return this.buildLegacyResult({runResult:D,thrownError:U,startedAt:W,endedAt:L})}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 $=fq([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((W)=>W.hooks)]);return{...$,beforeModel:async(W)=>{let Z=await $.beforeModel?.(W);if(Z?.stop)return Z;let Q=Z?.messages??W.request.messages,J=await this.prepareMessagesForModelRequest(Q);return{...Z,messages:J}}}}createRuntimePrepareTurn($,W){let Z=this.config.prepareTurn;if(!Z)return;return async(Q)=>{let J=g8(Q.messages),j=await this.prepareProviderMessagesForApi(J),X=await Z({agentId:Q.agentId,conversationId:Q.conversationId??this.conversation.getConversationId(),parentAgentId:Q.parentAgentId??null,iteration:Q.iteration,messages:J,apiMessages:j,abortSignal:Q.signal??new AbortController().signal,systemPrompt:Q.systemPrompt??"",tools:W,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:Q.emitStatusNotice});if(!X)return;return{...X.messages?{messages:lW(X.messages)}:{},...X.systemPrompt!==void 0?{systemPrompt:X.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let W=await this.prepareProviderMessagesForApi(pW($));return lW(W)}async prepareProviderMessagesForApi($){let W=$,Z=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let Q of Z)W=await Q.build(W);return this.messageBuilder.buildForApi(W)}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 W=this.toolStartedAt.get($.toolCall.toolCallId),Z=new Date,Q=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let J=$.message.content.find((V)=>V.type==="tool-result"),j=J?.type==="tool-result"&&J.isError===!0,X=j?Fq(J?.type==="tool-result"?J.output:void 0):void 0,Y={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:Q,output:J?.type==="tool-result"?J.output:void 0,error:X,durationMs:W===void 0?0:Z.getTime()-W.getTime(),startedAt:W??Z,endedAt:Z};if(this.currentRunToolCalls.push(Y),j){if(this.currentTurnFailedTools+=1,X)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${X}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let W=this.currentTurnFailedTools,Z=this.currentTurnSuccessfulTools;if(W>0&&Z===0){let Q=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${W} tool call(s) failed${Q?`: ${Q}`:""}`})}else if(Z>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let W of this.eventAdapter.translate($))this.emitLegacyEvent(W)}syncConversationFromRuntimeMessage($,W){if($.length>0){this.conversation.replaceMessages(g8($));return}if(W.length===0)return;let Z=new Set(this.conversation.getMessages().map((J)=>J.id).filter((J)=>typeof J==="string")),Q=g8(W).filter((J)=>!J.id||!Z.has(J.id));if(Q.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...Q])}emitLegacyEvent($){for(let W of this.listeners)try{W($)}catch(Z){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Z})}}inspectLoopForToolCall($,W,Z){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let Q=this.loopTracker.inspect({name:$,input:W});if(Q.kind==="ok")return;if(Q.kind==="soft"){if(Q.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:Q.message}]});return}this.enqueueMistakeRecord({iteration:Z,reason:"tool_execution_failed",forceAtLimit:!0,details:Q.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let W=await this.mistakeTracker.record($);if(W.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:W.message}]}),this.activeRuntime?.abort(W.reason??W.message)})}buildLegacyResult($){let{runResult:W,thrownError:Z,startedAt:Q,endedAt:J}=$,j=J.getTime()-Q.getTime(),X=Z?"error":Tq(W),Y=(W?.status==="failed"?W.error?.message:void 0)||W?.outputText||"",V=W?{inputTokens:W.usage.inputTokens,outputTokens:W.usage.outputTokens,cacheReadTokens:W.usage.cacheReadTokens>0?W.usage.cacheReadTokens:void 0,cacheWriteTokens:W.usage.cacheWriteTokens>0?W.usage.cacheWriteTokens:void 0,totalCost:W.usage.totalCost}:this.currentRunUsage,B=W?g8(W.messages):this.conversation.getMessages(),H=hH(this.config);if(Z)throw Z;return{text:Y,usage:V,messages:B,toolCalls:this.currentRunToolCalls,iterations:W?.iterations??0,finishReason:X,model:{id:this.config.modelId,provider:this.config.providerId,info:H},startedAt:Q,endedAt:J,durationMs:j}}}function Oq($,W,Z,Q){if(!$)return;if(W==="debug"){$.debug(Z,Q);return}if(W==="error"&&$.error){$.error(Z,Q);return}let J=W==="warn"?"warn":W==="error"?"error":"info";$.log(Z,{...Q,severity:J})}function Tq($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function zq($,W,Z,Q){let{buildInitialUserContent:J}=await Promise.resolve().then(() => bH);return J($,W,Z,Q)}function hH($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let W=O3($);if(W?.[$.modelId])return W[$.modelId];return}import{buildClineSystemPrompt as kH}from"@cline/shared";function IH($,W){let Z=$.trim();if(W.providerId.toLowerCase()!=="cline")return Z;return kH({ide:W.clineIdeName?.trim()||"Terminal",workspaceRoot:W.cwd?.trim()||"/",providerId:W.providerId,rules:`# Team Teammate Role
|
|
202
|
+
${Z}`,platform:W.clinePlatform,metadata:W.workspaceMetadata})}function xH($,W){let Z=$.trim();if(W.providerId.toLowerCase()!=="cline")return Z;return kH({ide:W.clineIdeName||"Terminal",workspaceRoot:W.cwd?.trim()||"/",providerId:W.providerId,overridePrompt:Z,metadata:W.workspaceMetadata,platform:W.clinePlatform})}function S$($){let W={...$};return{getRuntimeConfig:()=>W,getConnectionConfig:()=>({providerId:W.providerId,modelId:W.modelId,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,onAuthError:W.onAuthError,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking,reasoningEffort:W.reasoningEffort,thinkingBudgetTokens:W.thinkingBudgetTokens,maxTokensPerTurn:W.maxTokensPerTurn,temperature:W.temperature}),updateConnectionDefaults:(Z)=>{W={...W,...Z}}}}function M2($){let W=$.configProvider.getRuntimeConfig(),Z=$.kind==="teammate"?IH($.prompt,W):xH($.prompt,W);return{...$.configProvider.getConnectionConfig(),systemPrompt:Z,tools:$.tools,maxIterations:$.maxIterations??W.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:W.hooks,extensions:W.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:W.logger,role:$.role}}function b$($){let W=M2($),Z=new P$(W);if(W.onEvent)Z.subscribeEvents(W.onEvent);return Z}var Rq=b3.object({systemPrompt:b3.string().describe("System prompt defining the sub-agent's behavior"),task:b3.string().describe("Task for the sub-agent to complete")});function y$($){return qq({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:Mq(Rq),execute:async(W,Z)=>{let Q=$.createSubAgentTools?await $.createSubAgentTools(W,Z):$.subAgentTools??[],J=b$({kind:"subagent",prompt:W.systemPrompt,configProvider:$.configProvider,tools:Q,maxIterations:$.defaultMaxIterations,parentAgentId:Z.agentId,abortSignal:Z.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),j=J.getAgentId(),X=J.getConversationId(),Y=Z.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:j,conversationId:X,parentAgentId:Y,input:W})}catch{}try{let V=await J.run(W.task),B={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:j,conversationId:X,parentAgentId:Y,input:W,result:B,agentResult:V})}catch{}return B}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:j,conversationId:X,parentAgentId:Y,input:W,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as D0,TEAM_AWAIT_TIMEOUT_MS as Nq,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as Eq,TEAM_RUN_TEXT_PREVIEW_LIMIT as wq,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as Cq,TeamAttachOutcomeFragmentInputSchema as gH,TeamAwaitRunsInputSchema as mH,TeamBroadcastInputSchema as vH,TeamBroadcastToolResultSchema as Pq,TeamCancelRunInputSchema as cH,TeamCancelRunToolResultSchema as Sq,TeamCleanupInputSchema as uH,TeamCleanupToolResultSchema as bq,TeamCreateOutcomeInputSchema as dH,TeamCreateOutcomeToolResultSchema as yq,TeamFinalizeOutcomeInputSchema as lH,TeamFinalizeOutcomeToolResultSchema as hq,TeamListOutcomesInputSchema as pH,TeamListRunsInputSchema as rH,TeamMailboxMessageToolResultSchema as kq,TeamMissionLogInputSchema as iH,TeamMissionLogToolResultSchema as Iq,TeamOutcomeFragmentToolResultSchema as nH,TeamOutcomeToolResultSchema as xq,TeamReadMailboxInputSchema as aH,TeamReviewOutcomeFragmentInputSchema as oH,TeamRunTaskInputSchema as sH,TeamRunTaskToolResultSchema as y3,TeamRunToolSummarySchema as h3,TeamSendMessageInputSchema as tH,TeamSendMessageToolResultSchema as gq,TeamShutdownTeammateInputSchema as eH,TeamSimpleAgentStatusToolResultSchema as $G,TeamSpawnTeammateInputSchema as WG,TeamStatusInputSchema as ZG,TeamStatusToolResultSchema as mq,TeamTaskInputSchema as QG,TeamTaskToolResultSchema as p4,validateWithZod as x,zodToJsonSchema as _0}from"@cline/shared";function JG($,W){let Z=$.replace(/\s+/g," ").trim();if(Z.length<=W)return Z;return`${Z.slice(0,Math.max(0,W-3)).trimEnd()}...`}function R2($,W){if($===void 0)throw Error(`Missing required field: ${W}`);return $}function vq($){let W=$.result;if(!W)return;return{textPreview:JG(W.text,wq),iterations:W.iterations,finishReason:W.finishReason,durationMs:W.durationMs,usage:{inputTokens:W.usage.inputTokens,outputTokens:W.usage.outputTokens,cacheReadTokens:W.usage.cacheReadTokens,cacheWriteTokens:W.usage.cacheWriteTokens,totalCost:W.usage.totalCost}}}function aW($){return $?.toISOString()}function k3($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:JG($.message,Eq),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:aW($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:aW($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:aW($.heartbeatAt),lastProgressAt:aW($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:vq($)}}function cq($){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 v8=["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 jG($){let W=[];if($.createBaseTools)W.push(...$.createBaseTools());W.push(...N2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1,includeSpawnTool:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:M2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:W,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function c8($){let W=$.leadAgentId??"lead",Z=$.restoredFromPersistence===!0,Q=N2({runtime:$.runtime,requesterId:W,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),J=[];for(let j of $.restoredTeammates??[]){if($.runtime.isTeammateActive(j.agentId))continue;jG({runtime:$.runtime,requesterId:W,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:j}),J.push(j.agentId)}return{tools:Q,restoredFromPersistence:Z,restoredTeammates:J}}function N2($){let W=$.allowSpawn??!0,Z=$.includeSpawnTool??!0,Q=$.includeManagementTools??!0,J=[];if(Z)J.push(D0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:_0(WG),execute:async(X)=>{let Y=x(WG,X);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!W)throw Error("Spawning teammates is disabled in this context.");let V={agentId:Y.agentId,rolePrompt:Y.rolePrompt};if(jG({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!Q)$.onLeadToolsUnlocked?.(N2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return x($G,{agentId:Y.agentId,status:"spawned"})}}));if(!Q)return J;J.push(D0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:_0(eH),execute:async(X)=>{let Y=x(eH,X);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(Y.agentId,Y.reason),x($G,{agentId:Y.agentId,status:"stopped"})}})),J.push(D0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:_0(ZG),execute:async(X)=>{return x(ZG,X),x(mq,$.runtime.getSnapshot())}})),J.push(D0({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:_0(QG),execute:async(X)=>{let Y=x(QG,X);switch(Y.action){case"create":{let V=new Set(Cq.create??[]),B=Object.entries(X).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),H=$.runtime.createTask({title:R2(Y.title,"title"),description:R2(Y.description,"description"),dependsOn:Y.dependsOn,assignee:Y.assignee,createdBy:$.requesterId});return x(p4,{action:"create",taskId:H.id,status:H.status,...B.length>0?{ignoredFields:B,note:`Ignored fields for action=create: ${B.join(", ")}`}:{}})}case"list":return x(p4,{action:"list",tasks:$.runtime.listTaskItems({status:Y.status,assignee:Y.assignee})});case"claim":{let V=$.runtime.claimTask(R2(Y.taskId,"taskId"),$.requesterId);return x(p4,{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(R2(Y.taskId,"taskId"),$.requesterId,R2(Y.summary,"summary"));return x(p4,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(R2(Y.taskId,"taskId"),$.requesterId,R2(Y.reason,"reason"));return x(p4,{action:"block",taskId:V.id,status:V.status})}}}}));let j=new Map;return J.push(D0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:_0(sH),execute:async(X)=>{let Y=x(sH,X);if(Y.runMode==="async"){let H=$.runtime.startTeammateRun(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0});return x(y3,{agentId:Y.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${Y.agentId} and queued as ${H.id}.`,runId:H.id})}let V=j.get(Y.agentId);if(V){let H=await V;return x(y3,{...H,status:"joined",deduped:!0,message:`Task for ${Y.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let B=$.runtime.routeToTeammate(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0}).then((H)=>x(y3,{agentId:Y.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${Y.agentId} and completed in sync mode.`,text:H.text,iterations:H.iterations})).finally(()=>{j.delete(Y.agentId)});return j.set(Y.agentId,B),await B}})),J.push(D0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:_0(cH),execute:async(X)=>{let Y=x(cH,X),V=$.runtime.cancelRun(Y.runId,Y.reason);return x(Sq,{runId:V.id,status:V.status})}})),J.push(D0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:_0(rH),execute:async(X)=>x(h3.array(),$.runtime.listRuns(x(rH,X)).map(k3))})),J.push(D0({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:_0(mH),timeoutMs:Nq,execute:async(X)=>{let Y=x(mH,X);if(Y.runId){let H=await $.runtime.awaitRun(Y.runId);return cq(H),x(h3,k3(H))}let V=await $.runtime.awaitAllRuns(),B=V.filter((H)=>["failed","cancelled","interrupted"].includes(H.status));if(B.length>0){let H=B.map((G)=>`${G.id}:${G.status}${G.error?`(${G.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${H}`)}return x(h3.array(),V.map(k3))}})),J.push(D0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:_0(tH),execute:async(X)=>{let Y=x(tH,X),V=$.runtime.sendMessage($.requesterId,Y.toAgentId,Y.subject,Y.body,Y.taskId??void 0);return x(gq,{id:V.id,toAgentId:V.toAgentId})}})),J.push(D0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:_0(vH),execute:async(X)=>{let Y=x(vH,X),V=$.runtime.broadcast($.requesterId,Y.subject,Y.body,{taskId:Y.taskId??void 0});return x(Pq,{delivered:V.length})}})),J.push(D0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:_0(aH),execute:async(X)=>{let Y=x(aH,X);return x(kq.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:Y.unreadOnly,markRead:!0}))}})),J.push(D0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:_0(iH),execute:async(X)=>{let Y=x(iH,X),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:Y.taskId||void 0,kind:Y.kind,summary:Y.summary,evidence:Y.evidence?.length?Y.evidence:void 0,nextAction:Y.nextAction||void 0});return x(Iq,{id:V.id})}})),J.push(D0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:_0(uH),execute:async(X)=>{if(x(uH,X),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),x(bq,{status:"cleaned"})}})),J.push(D0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:_0(dH),execute:async(X)=>{let Y=x(dH,X),V=$.runtime.createOutcome({title:Y.title,requiredSections:Y.requiredSections,createdBy:$.requesterId});return x(yq,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),J.push(D0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:_0(gH),execute:async(X)=>{let Y=x(gH,X),V=$.runtime.attachOutcomeFragment({outcomeId:Y.outcomeId,section:Y.section,sourceAgentId:$.requesterId,sourceRunId:Y.sourceRunId||void 0,content:Y.content});return x(nH,{fragmentId:V.id,status:V.status})}})),J.push(D0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:_0(oH),execute:async(X)=>{let Y=x(oH,X),V=$.runtime.reviewOutcomeFragment({fragmentId:Y.fragmentId,reviewedBy:$.requesterId,approved:Y.approved});return x(nH,{fragmentId:V.id,status:V.status})}})),J.push(D0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:_0(lH),execute:async(X)=>{let Y=x(lH,X),V=$.runtime.finalizeOutcome(Y.outcomeId);return x(hq,{outcomeId:V.id,status:V.status})}})),J.push(D0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:_0(pH),execute:async(X)=>{return x(pH,X),x(xq.array(),$.runtime.listOutcomes())}})),J}function oW($){return{...$,tasks:$.tasks.map((W)=>({...W,createdAt:new Date(W.createdAt),updatedAt:new Date(W.updatedAt)})),mailbox:$.mailbox.map((W)=>({...W,sentAt:new Date(W.sentAt),readAt:W.readAt?new Date(W.readAt):void 0})),missionLog:$.missionLog.map((W)=>({...W,ts:new Date(W.ts)})),runs:($.runs??[]).map((W)=>({...W,startedAt:new Date(W.startedAt),endedAt:W.endedAt?new Date(W.endedAt):void 0,nextAttemptAt:W.nextAttemptAt?new Date(W.nextAttemptAt):void 0,heartbeatAt:W.heartbeatAt?new Date(W.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),finalizedAt:W.finalizedAt?new Date(W.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),reviewedAt:W.reviewedAt?new Date(W.reviewedAt):void 0}))}}function XG($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var uq=[{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:y$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...v8]}],dq={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function lq($){return $==="plan"||$==="yolo"?$:"act"}function VG($){let W=lq($.mode),Z=s0[r1({mode:W})],Q=x8($.providerId??"",$.modelId??"",W,I8);return{mode:W,flags:{...Z,...Q,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function YG($,W){if(W.disabledToolIds?.has($))return!1;let{flags:Z}=VG(W);if($==="spawn_agent")return Z.enableSpawnAgent===!0;if($==="teams")return Z.enableAgentTeams===!0;if($==="editor")return Z.enableEditor===!0||Z.enableApplyPatch===!0;let Q=dq[$];return Q?Z[Q]===!0:!1}function pq($,W){if($.id==="editor"){let{flags:Z}=VG(W),Q=Z.enableApplyPatch===!0&&Z.enableEditor!==!0;return{...$,defaultEnabled:YG($.id,W),headlessToolNames:[Q?"apply_patch":"editor"]}}return{...$,defaultEnabled:YG($.id,W)}}function E2($={}){return uq.map((W)=>pq(W,$))}function sW($={}){return E2($).filter((W)=>W.defaultEnabled).map((W)=>W.id)}function tW($){if(!$.enabled)return new Set;let W=E2($.availabilityContext),Z=new Set(W.map((Q)=>Q.id));if(!$.allowlist||$.allowlist.length===0)return new Set(W.filter((Q)=>Q.defaultEnabled).map((Q)=>Q.id));for(let Q of $.allowlist)if(!Z.has(Q))throw Error(`Unknown tool "${Q}". Available tools: ${W.map((J)=>J.id).join(", ")}`);return new Set($.allowlist)}function r4($,W={}){return E2(W).filter((Z)=>$.has(Z.id)).flatMap((Z)=>Z.headlessToolNames)}function eW($,W={}){return r4($,W)}import{getDefaultShell as rq}from"@cline/shared";function w2($={}){let{executorOptions:W={},executors:Z,...Q}=$,J=Q.shell??W.bash?.shell??rq(process.platform),j={...W,bash:{...W.bash,shell:J}},X={...k8(j),...Z??{}};return E$({...Q,shell:J,executors:X})}import{mkdirSync as tq,writeFileSync as eq}from"node:fs";import{dirname as $M}from"node:path";import{normalizeUserInput as WM,stripModeNotices as ZM}from"@cline/shared";import{nanoid as QM}from"nanoid";var HG={};w(HG,{sanitizeSessionToken:()=>C2,parseTeamTaskSubSessionId:()=>d8,parseSubSessionId:()=>n4,makeTeamTaskSubSessionId:()=>i4,makeSubSessionId:()=>u8,deriveSubsessionStatus:()=>a4});import{nanoid as aq}from"nanoid";function C2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function u8($,W){let Z=C2($),Q=C2(W),J=`${Z}__${Q}`;return J.length>180?J.slice(0,180):J}function i4($,W){let Z=C2($),Q=C2(W);return`${Z}__teamtask__${Q}__${aq(6)}`}function d8($){let Z=$.indexOf("__teamtask__");if(Z<=0)return null;let Q=$.slice(0,Z),J=$.slice(Z+12),j=J.lastIndexOf("__");if(j<=0)return null;let X=J.slice(0,j),Y=J.slice(j+2);if(!Q||!X||!Y)return null;return{rootSessionId:Q,agentId:X,teamTaskId:Y}}function n4($){if(d8($))return null;let W="__",Z=$.indexOf(W);if(Z<=0)return null;let Q=$.slice(0,Z),J=$.slice(Z+W.length);if(!Q||!J)return null;return{rootSessionId:Q,agentId:J}}function a4($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let W=String($.reason??"").toLowerCase();if(W.includes("cancel")||W.includes("abort")||W.includes("interrupt"))return"cancelled";if(W.includes("fail")||W.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as Q0}from"zod";var FG={};w(FG,{isTerminalSessionStatus:()=>KG,isNonTerminalSessionStatus:()=>K0,SessionSource:()=>F0,SESSION_STATUSES:()=>o4,NON_TERMINAL_SESSION_STATUSES:()=>GG});import{SESSION_STATUS_VALUES as oq}from"@cline/shared";var o4=oq,GG=["idle","running","pending"];function KG($){return!GG.includes($)}function K0($){return!KG($)}var F0={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 sq=Q0.enum(o4),m0=Q0.object({version:Q0.literal(1),session_id:Q0.string().min(1),source:Q0.string().min(1),pid:Q0.number().int(),started_at:Q0.string().min(1),ended_at:Q0.string().min(1).optional(),exit_code:Q0.number().int().nullable().optional(),status:sq,interactive:Q0.boolean(),provider:Q0.string().min(1),model:Q0.string().min(1),cwd:Q0.string().min(1),workspace_root:Q0.string().min(1),team_name:Q0.string().min(1).optional(),enable_tools:Q0.boolean(),enable_spawn:Q0.boolean(),enable_teams:Q0.boolean(),prompt:Q0.string().optional(),metadata:Q0.record(Q0.string(),Q0.unknown()).optional(),messages_path:Q0.string().min(1).optional(),compaction_path:Q0.string().min(1).optional()});function AG($){if(!$)return!1;return Object.values($).some((W)=>typeof W==="function")}function x3($,W){let Z=[...$??[],...W??[]];if(Z.length===0)return;let Q=[],J=new Set;for(let j of Z){if(J.has(j.name))continue;J.add(j.name),Q.push(j)}return Q}function UG($){return JSON.stringify($,(W,Z)=>{if(Z instanceof Error)return{name:Z.name,message:Z.message,stack:Z.stack};return Z})}function n1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function I3($,W){let Z={...$};Z.id=n1(Z.id)??QM();let Q=Z.modelInfo&&typeof Z.modelInfo==="object"?{...Z.modelInfo}:void 0,J={id:n1(Q?.id)??n1(Z.modelId)??n1(W?.id),provider:n1(Q?.provider)??n1(Z.providerId)??n1(W?.provider),family:n1(Q?.family)??n1(W?.family)};if(delete Z.providerId,delete Z.modelId,J.id&&J.provider)Z.modelInfo={id:J.id,provider:J.provider,...J.family?{family:J.family}:{}};else delete Z.modelInfo;return Z}function $Z($){return $.map((W)=>I3(W))}function WZ($,W,Z=[]){let Q=$.map((V,B)=>{let H=Z[B],K=H?.role===V.role&&JSON.stringify(H.content)===JSON.stringify(V.content)?{...H,...V}:{...V};return I3(K)}),J=Z.length,j=[];for(let V=J;V<Q.length;V+=1)if(Q[V]?.role==="assistant")j.push(V);if(j.length===0){let V=[...Q].reverse().findIndex((B)=>B.role==="assistant");if(V===-1)return Q;j.push(Q.length-1-V)}let X=j[j.length-1],Y=j.some((V)=>Q[V]?.metrics);for(let V of j){let B=Q[V],H=B.metrics;if(!H&&V===X&&!Y){let G=W.usage;H={inputTokens:G.inputTokens,outputTokens:G.outputTokens,cacheReadTokens:G.cacheReadTokens??0,cacheWriteTokens:G.cacheWriteTokens??0,cost:G.totalCost}}Q[V]={...I3(B,{id:W.model.id,provider:W.model.provider,family:W.model.info?.family}),...H?{metrics:H}:{},ts:B.ts??W.endedAt.getTime()}}return Q}function s4($){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 JM=120;function P2($){let W=$?.trim();return W?W.slice(0,JM):void 0}function g3($){let W=ZM(WM($??"")).trim();if(!W)return;return P2(W.split(`
|
|
203
|
+
`)[0]?.trim())}function h$($){if(!$)return;let W={...$},Z=P2(typeof W.title==="string"?W.title:void 0);if(Z)W.title=Z;else delete W.title;return Object.keys(W).length>0?W:void 0}function t4($){let W=h$($.metadata)??{},Z=$.title!==void 0?P2($.title):g3($.prompt);if(Z)W.title=Z;return Object.keys(W).length>0?W:void 0}function m3($){let W=d8($);if(W)return{agent:"teammate",sessionId:W.rootSessionId,taskType:"team"};let Z=n4($);if(Z)return{agent:"subagent",sessionId:Z.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function v3($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:$Z($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function DG($,W,Z){tq($M($),{recursive:!0}),eq($,`${JSON.stringify(v3({updatedAt:W,context:Z,messages:[]}),null,2)}
|
|
204
|
+
`,"utf8")}function _G($,W){return m0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:W?.endedAt??$.endedAt??void 0,exit_code:W?.exitCode??$.exitCode??void 0,status:W?.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:W?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function LG($,W,Z){let Q=0;while(!0){let J=await $();if(J===void 0)return{updated:!1};let j=await W(J);if(typeof j==="object"&&j!==null&&"updated"in j&&j.updated===!1){if(Q+=1,Q>=Z)return j;continue}return j}}U0();var fG={};w(fG,{summarizeUsageFromMessages:()=>p8,sumUsageTotals:()=>e4,getCurrentContextSize:()=>c3,createInitialAccumulatedUsage:()=>q0,accumulateUsageTotals:()=>L0});function q0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function L0($,W){return{inputTokens:$.inputTokens+Math.max(0,W.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,W.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,W.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,W.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,W.totalCost??0)}}function e4($){let W=q0();for(let Z of $)W=L0(W,Z);return W}function l8($){return typeof $==="number"&&Number.isFinite($)?$:0}function p8($){let W=q0();for(let Z of $){let Q=Z.metrics;if(!Q)continue;W=L0(W,{inputTokens:l8(Q.inputTokens),outputTokens:l8(Q.outputTokens),cacheReadTokens:l8(Q.cacheReadTokens),cacheWriteTokens:l8(Q.cacheWriteTokens),totalCost:l8(Q.cost)})}return W}function c3($){for(let W=$.length-1;W>=0;W-=1){let Z=$[W];if(Z?.role!=="assistant")continue;let Q=l8(Z.metrics?.inputTokens);return Q>0?Q:void 0}return}function jM($){if(!$||typeof $!=="object")return;let W=$,Z=W.skill??W.skill_name??W.skillName;if(typeof Z!=="string")return;let Q=Z.trim();return Q.length>0?Q:void 0}function u3($){if(!$||typeof $!=="object")return{};let W=$;return{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}}function a1($){let W=$.agentId?.trim();if(!W)return;let Z=$.parentAgentId?.trim()||void 0,Q=$.teamRole,J="root";if(Q==="teammate")J="team_teammate";else if(Q==="lead")J="team_lead";else if(Z)J="subagent";return{agentId:W,agentKind:J,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Z,createdByAgentId:$.createdByAgentId?.trim()||Z||void 0,isSubagent:Boolean(Z),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:Q,teamAgentId:$.teamAgentId?.trim()||void 0}}function XM($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function YM($){let W=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Z of W){let Q=Z?.trim();if(Q)return Q}return $.isPrimaryAgentEvent?"root":"unknown"}function d3($,W,Z){let{sessionId:Q,config:J,liveSession:j,emit:X}=$,Y=J.telemetry,V=j?.runtime.teamRuntime,B=Z?.isPrimaryAgentEvent??!0,H=u3(W),G=a1({agentId:Z?.agentId??H.agentId,conversationId:Z?.conversationId??H.conversationId,parentAgentId:Z?.parentAgentId??H.parentAgentId,createdByAgentId:Z?.createdByAgentId,teamId:Z?.teamId??V?.getTeamId(),teamName:Z?.teamName??V?.getTeamName(),teamRole:Z?.teamRole,teamAgentId:Z?.teamAgentId});if(W.type==="content_start"&&W.contentType==="tool"&&W.toolName==="skills"){let K=jM(W.input);if(K)$W(Y,{ulid:Q,skillName:K,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:J.providerId,modelId:J.modelId,...G})}if(W.type==="content_end"&&W.contentType==="tool"){let K=W.toolName??"unknown",F=!W.error;if(f8(Y,{ulid:Q,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))WW(Y,{ulid:Q,modelId:J.modelId,provider:J.providerId,errorType:W.error,...G})}if(W.type==="notice"&&W.reason==="api_error")Q4(Y,{ulid:Q,model:J.modelId,provider:J.providerId,errorMessage:W.message,...G});if(W.type==="error")Q4(Y,{ulid:Q,model:J.modelId,provider:J.providerId,errorMessage:W.error?.message??"unknown error",...G});if(W.type==="usage"&&j?.turnUsageBaseline){let K=XM(W);if(B){j.turnPrimaryUsage=L0(j.turnPrimaryUsage??q0(),K);let A=L0(j.turnUsageBaseline,j.turnPrimaryUsage);$.usageBySession.set(Q,A),L8(Y,{ulid:Q,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),t9(Y,{ulid:Q,tokensIn:W.inputTokens,tokensOut:W.outputTokens,cacheWriteTokens:W.cacheWriteTokens,cacheReadTokens:W.cacheReadTokens,totalCost:W.cost,model:J.modelId,...G})}else{let A=YM({isPrimaryAgentEvent:B,overrides:Z,eventMetadata:H}),D=j.turnUsageByAgent??new Map;j.turnUsageByAgent=D,D.set(A,L0(D.get(A)??q0(),K))}let F=L0(j.turnPrimaryUsage??q0(),e4(j.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(Q,L0(j.turnAggregateUsageBaseline??j.turnUsageBaseline,F))}if(W.type==="iteration_end"&&B)$.persistMessages(Q,j?.agent.getMessages()??[],j?.config.systemPrompt);X({type:"agent_event",payload:{sessionId:Q,event:W,teamAgentId:Z?.teamAgentId,teamRole:Z!==void 0?Z.teamRole??(B?"lead":void 0):void 0}}),X({type:"chunk",payload:{sessionId:Q,stream:"agent",chunk:UG(W),ts:Date.now()}})}function o1($){return $.workspaceRoot??$.cwd}import{resolveProviderRequestHeaders as _N}from"@cline/llms";import{hasRuntimeConfigExtension as LN}from"@cline/shared";var r8="0.0.65-nightly.1784603699";var $5={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:r8,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"]};U1();import{existsSync as YZ,readFileSync as nM,statSync as aM}from"node:fs";import{basename as oM,dirname as jZ,join as VZ,resolve as XZ}from"node:path";import{discoverPluginModulePaths as sM,resolveConfiguredPluginModulePaths as cG,resolvePluginConfigSearchPaths as tM,SKILLS_CONFIG_DIRECTORY_NAME as eM}from"@cline/shared/storage";import{resolve as EM}from"node:path";import{normalizePluginManifest as wM}from"@cline/shared";import{existsSync as E0,readFileSync as n8}from"node:fs";import{builtinModules as VM,createRequire as i3}from"node:module";import{dirname as k$,extname as Z5,isAbsolute as BM,resolve as a}from"node:path";import{fileURLToPath as zG}from"node:url";import{PLUGIN_FILE_EXTENSIONS as HM}from"@cline/shared";var qG=k$(zG(import.meta.url)),GM=i3(import.meta.url),KM=a(qG,"..","..","..","..",".."),l3=UM(KM),FM=["@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"],n3=new Set(VM.flatMap(($)=>[$,$.replace(/^node:/,"")])),W5=new Set(HM),AM=["development","node","import","require","default"];function UM($){let W={},Z={"@cline/sdk":a($,"packages/sdk/src/index.ts"),"@cline/agents":a($,"packages/agents/src/index.ts"),"@cline/core":a($,"packages/core/src/index.ts"),"@cline/llms":a($,"packages/llms/src/index.ts"),"@cline/shared":a($,"packages/shared/src/index.ts"),"@cline/shared/storage":a($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":a($,"packages/shared/src/db/index.ts")};for(let[Q,J]of Object.entries(Z))if(E0(J))W[Q]=J;for(let Q of["agents","core","llms","shared"]){let J=a($,"packages",Q),j=a(J,"package.json");if(!E0(j))continue;try{let X=JSON.parse(n8(j,"utf8"));if(typeof X.name!=="string"||!X.exports)continue;if(typeof X.exports==="string"){let Y=a(J,X.exports);if(E0(Y))W[X.name]=Y;continue}if(typeof X.exports!=="object")continue;for(let[Y,V]of Object.entries(X.exports)){let B=DM(J,V);if(!B)continue;let H=Y==="."?X.name:`${X.name}/${Y.replace(/^\.\//,"")}`;W[H]=B}}catch{}}return W}function DM($,W){let Z=a3(W);if(!Z)return null;let Q=MG($,Z);for(let J of Q)if(E0(J))return J;return null}function a3($,W=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(W.has($))return null;W.add($);let Z=$;for(let Q of AM){let J=a3(Z[Q],W);if(J)return J}return null}function MG($,W){let Z=W.replace(/^\.\//,""),Q=[a($,W)];if(Z.startsWith("dist/")){let J=Z.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[a($,`${J}.ts`),a($,`${J}.tsx`),a($,`${J}.mts`),a($,`${J}.cts`),...Q]}return Q}function _M($){return Object.fromEntries(Object.entries($).sort(([W],[Z])=>Z.length-W.length))}function ZZ($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function i8($){if($.startsWith("@")){let[W,Z]=$.split("/",3);return Z?`${W}/${Z}`:$}return $.split("/",1)[0]??$}function LM($){let W=i8($);if($===W)return".";return`.${$.slice(W.length)}`}function RG($){return i8($).startsWith("@cline/")}function p3($,W){let Z=i8(W),Q=k$($);while(!0){let J=a(Q,"node_modules",Z);if(E0(J)||E0(a(J,"package.json")))return!0;let j=a(Q,"..");if(j===Q)return!1;Q=j}}function TG($){return r3($)!==null}function r3($){try{return GM.resolve($)}catch{}return fM($)}function fM($){let W=i8($),Z=NG(W);if(!Z)return null;let Q=a(Z,"package.json");try{let J=JSON.parse(n8(Q,"utf8")),j=LM($),X=j==="."&&typeof J.exports==="string"?J.exports:J.exports&&typeof J.exports==="object"&&Object.hasOwn(J.exports,j)?J.exports[j]:void 0,Y=a3(X)??(j==="."&&typeof J.main==="string"?J.main:null);if(!Y)return null;let V=a(Z,Y),B=[V,...MG(Z,Y).filter((H)=>H!==V)];for(let H of B)if(E0(H))return H;return null}catch{return null}}function OM(){let $=[qG],W=process.env.CLINE_WRAPPER_PATH?.trim();if(W)$.push(k$(k$(W)));let Z=process.execPath?.trim();if(Z)$.push(k$(Z));return[...new Set($.map((Q)=>a(Q)))]}function TM($,W){let Z=$;while(!0){let Q=a(Z,"package.json");if(E0(Q))try{if(JSON.parse(n8(Q,"utf8")).name===W)return Z}catch{}let J=a(Z,"node_modules",W,"package.json");if(E0(J))return k$(J);let j=a(Z,"..");if(j===Z)return null;Z=j}}function NG($){for(let W of OM()){let Z=TM(W,$);if(Z)return Z}return null}function zM($){let Z=k$($);for(let Q=0;Q<4;Q++){let J=a(Z,"package.json");if(E0(J))try{let X=JSON.parse(n8(J,"utf8"));return X!=null&&typeof X==="object"&&"cline"in X}catch{return!1}let j=a(Z,"..");if(j===Z)return!1;Z=j}return!1}function EG($,W){let Z=W.startsWith("file:")?zG(W):BM(W)?W:a(k$($),W);if(E0(Z)&&W5.has(Z5(Z)))return Z;for(let Q of W5){let J=`${Z}${Q}`;if(E0(J))return J}for(let Q of W5){let J=a(Z,`index${Q}`);if(E0(J))return J}return null}function wG($){let W=new Set,Z=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let Q of Z)for(let J of $.matchAll(Q)){let j=J[1];if(j)W.add(j)}return[...W]}function qM($){return Z5($)!==".ts"}function CG($,W,Z=new Set){if(Z.has($)||!E0($))return;if(Z.add($),!W5.has(Z5($)))return;let Q=n8($,"utf8"),J=qM($);for(let j of wG(Q)){if(j.startsWith("node:")||n3.has(j))continue;if(ZZ(j)){if(!J)continue;if(Object.hasOwn(l3,j)||Object.hasOwn(l3,i8(j))||p3($,j)||RG(j)&&TG(j)||W&&TG(j))continue;throw Error(`Cannot find module '${i8(j)}'`)}let X=EG($,j);if(X)CG(X,W,Z)}}function PG($,W=new Set,Z=new Set){if(W.has($)||!E0($))return Z;if(W.add($),!W5.has(Z5($)))return Z;let Q=n8($,"utf8");for(let J of wG(Q)){if(Z.add(J),ZZ(J))continue;let j=EG($,J);if(j)PG(j,W,Z)}return Z}function MM($,W){let Z=i3($),Q={},J=PG($),j=new Set(FM);for(let[X,Y]of Object.entries(l3)){try{Z.resolve(X);continue}catch{}Q[X]=Y}for(let X of J)if(ZZ(X)&&(RG(X)||W))j.add(X);for(let X of j){if(Object.hasOwn(Q,X)||p3($,X))continue;let Y=r3(X);if(Y)Q[X]=Y}if(!W)return Q;for(let X of J){if(!ZZ(X)||Object.hasOwn(Q,X)||p3($,X)||X.startsWith("node:")||n3.has(X))continue;let Y=r3(X);if(Y)Q[X]=Y}return Q}function RM($){let W=Z5($);return W===".ts"||W===".tsx"||W===".mts"||W===".cts"}var S2;function NM(){if(S2!==void 0)return S2;let $=NG("jiti");if(!$)return S2=null,null;let W=a($,"dist","babel.cjs");if(!E0(W))return S2=null,null;try{let Q=i3(W)(W);S2=typeof Q==="function"?Q:null}catch{S2=null}return S2}async function SG($,W={}){let Z=!zM($);CG($,Z);let Q=MM($,Z),J=_M(Q),j=await import("jiti"),X=typeof j==="function"?j:typeof j.default==="function"?j.default:void 0;if(!X)throw Error("Unable to load jiti");let Y=Object.entries(J).filter(([,G])=>RM(G)).map(([G])=>G),V=NM(),B=V?(G)=>V({...G,interopDefault:!0}):void 0;return await X($,{alias:J,cache:W.useCache,requireCache:W.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...n3],transformModules:Y,tryNative:!1,...B?{transform:B}:{}}).import($,{})}function bG($,W){if(!$)return!0;if($.providerIds?.length){if(!W?.providerId||!$.providerIds.includes(W.providerId))return!1}if($.modelIds?.length){if(!W?.modelId||!$.modelIds.includes(W.modelId))return!1}return!0}function yG($){return typeof $==="object"&&$!==null}function o3($){return Array.isArray($)&&$.every((W)=>typeof W==="string")}function CM($,W){if(!yG($.manifest))throw Error(`Invalid plugin module at ${W}: missing required "manifest"`);if(!o3($.manifest.capabilities))throw Error(`Invalid plugin module at ${W}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${W}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!o3($.manifest.providerIds))throw Error(`Invalid plugin module at ${W}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!o3($.manifest.modelIds))throw Error(`Invalid plugin module at ${W}: manifest.modelIds must be a string array when provided`)}function PM($,W){if(!yG($))throw Error(`Invalid plugin module at ${W}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${W}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${W}: missing required "manifest"`);CM($,W)}async function Q5($,W={}){let Z=EM(W.cwd??process.cwd(),$),Q=await SG(Z,{useCache:W.useCache}),J=W.exportName??"plugin",j=Q.default??Q[J];PM(j,Z);let X=j,Y=X.setup,V=Y?(B,H)=>{let G={...W.session,...H.session},K={...H,session:Object.keys(G).length>0?G:void 0,client:W.client??H.client,user:W.user??H.user,workspaceInfo:W.workspaceInfo??H.workspaceInfo,automation:W.automation??H.automation,logger:W.logger??H.logger,telemetry:W.telemetry??H.telemetry};return Y(B,K)}:void 0;return{...X,manifest:wM(X.manifest),setup:V}}async function QZ($,W={}){return(await b2($,W)).plugins}async function b2($,W={}){let Z=[],Q=[],J=new Map,j=0;for(let Y of $)try{let V=await Q5(Y,W);if(!bG(V.manifest,W))continue;let B=J.get(V.name);if(B)Q.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:Y,overriddenPluginPath:B.pluginPath,message:`Plugin "${V.name}" from ${Y} overrides ${B.pluginPath}`});J.set(V.name,{plugin:V,pluginPath:Y,order:j++})}catch(V){let B=V instanceof Error?V.message:String(V);Z.push({pluginPath:Y,phase:"load",message:B,stack:V instanceof Error?V.stack:void 0})}let X=[...J.values()].sort((Y,V)=>Y.order-V.order);return{plugins:X.map((Y)=>Y.plugin),pluginPaths:X.map((Y)=>Y.pluginPath),failures:Z,warnings:Q}}import{existsSync as $J}from"node:fs";import{createRequire as vG}from"node:module";import{dirname as JZ,join as o8}from"node:path";import{fileURLToPath as kM}from"node:url";var gG={};w(gG,{resolveSubprocessRuntimeExecutable:()=>s3,buildSubprocessSandboxCommand:()=>xG,SubprocessSandbox:()=>a8,CLINE_JS_RUNTIME_PATH_ENV:()=>IG});import{spawn as SM}from"node:child_process";import{basename as bM}from"node:path";import{augmentNodeCommandForDebug as yM,withResolvedClineBuildEnv as hM}from"@cline/shared";function hG($){if($ instanceof Error)return $;return Error(String($))}var IG="CLINE_JS_RUNTIME_PATH";function kG($){let W=$?.trim();if(!W)return!1;let Z=bM(W).toLowerCase();return Z==="node"||Z==="node.exe"||Z==="bun"||Z==="bun.exe"}function s3($={}){let W=$.env??process.env,Z=$.runtimeExecutable?.trim()||W[IG]?.trim();if(Z)return Z;let Q=$.execPath?.trim()||process.execPath;if(kG(Q))return Q;for(let J of[W.BUN_EXEC_PATH,W.npm_node_execpath,W.NODE]){let j=J?.trim();if(j&&kG(j))return j}return"node"}function xG($,W={}){let Z=s3({env:W.env,execPath:W.execPath,runtimeExecutable:W.runtimeExecutable});return yM([Z,...$],{env:W.env,execArgv:W.execArgv,debugRole:W.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class a8{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let W=this.pending.get($);if(!W)return;if(this.pending.delete($),W.timeout)clearTimeout(W.timeout);return W}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],W=xG($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Z=SM(W[0]??s3(this.options),W.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:hM(process.env),windowsHide:!0});this.process=Z;let Q="",J=(j)=>{let X=Q+j;Q=X.length>4000?X.slice(-4000):X};Z.stderr?.setEncoding("utf8"),Z.stderr?.on("data",(j)=>{J(j)}),Z.on("message",(j)=>{this.onMessage(j)}),Z.on("error",(j)=>{this.failPending(Error(`${this.processLabel} process error: ${hG(j).message}`))}),Z.on("exit",(j,X)=>{this.process=null;let Y=Q.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(j)}, signal=${String(X)})${Y?`: ${Y}`:""}`))})}async call($,W,Z={}){this.start();let Q=this.process;if(!Q||Q.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let J=`req_${++this.requestCounter}`,j={type:"call",id:J,method:$,args:W};return await new Promise((X,Y)=>{let V={resolve:(B)=>X(B),reject:Y};if((Z.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(J),this.shutdown().catch(()=>{}),Y(Error(`${this.processLabel} call timed out after ${Z.timeoutMs}ms: ${$}`))},Z.timeoutMs);this.pending.set(J,V),Q.send(j,(B)=>{if(!B)return;let H=this.clearPendingRequest(J);if(!H)return;H.reject(Error(`${this.processLabel} failed to send call "${$}": ${hG(B).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((W)=>{let Z=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}W()},300);$.once("exit",()=>{clearTimeout(Z),W()});try{$.kill("SIGTERM")}catch{clearTimeout(Z),W()}}),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 W=this.clearPendingRequest($.id);if(!W)return;if($.ok){W.resolve($.result);return}W.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[W,Z]of this.pending.entries()){if(this.pending.delete(W),Z.timeout)clearTimeout(Z.timeout);Z.reject($)}}}function IM($){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 J5($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function xM(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function gM(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Z=vG($).resolve(`${xM()}/package.json`),Q=o8(JZ(Z),"extensions","plugin-sandbox-bootstrap.js");return $J(Q)?Q:void 0}catch{return}}function mM(){let $=process.execPath?.trim();if(!$)return;let W=o8(JZ(JZ($)),"extensions","plugin-sandbox-bootstrap.js");return $J(W)?W:void 0}function vM(){let $=JZ(kM(import.meta.url)),W=vG(import.meta.url),Z=[o8($,"plugin-sandbox-bootstrap.js"),o8($,"extensions","plugin-sandbox-bootstrap.js"),o8($,"agents","plugin-sandbox-bootstrap.js"),gM(),mM()];for(let j of Z.filter((X)=>typeof X==="string"))if($J(j))return{file:j};let Q=o8($,"plugin-sandbox-bootstrap.ts"),J="jiti";try{J=W.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(J)});`,`const jiti = createJiti(${JSON.stringify(Q)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(Q)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
|
|
205
|
+
`)}}var t3=vM();function e3($,W,Z){if(typeof $==="number"&&$>0)return $;if(Z){let Q=process.env[Z];if(Q){let J=Number(Q);if(Number.isInteger(J)&&J>0)return J}}return W}async function s8($){let W=new a8({name:"plugin-sandbox",..."file"in t3?{bootstrapFile:t3.file}:{bootstrapScript:t3.script},onEvent:$.onEvent}),Z=e3($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),Q=e3($.hookTimeoutMs,3000),J=e3($.contributionTimeoutMs,60000),j={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},X,Y=()=>{return X??=W.call("initialize",j,{timeoutMs:Z}).finally(()=>{X=void 0}),X},V;try{V=await W.call("initialize",j,{timeoutMs:Z})}catch(G){throw await W.shutdown().catch(()=>{}),G}let B=V.plugins.map(IM);return{extensions:B.map((G)=>{let K={name:G.name,__clinePluginPath:G.pluginPath,manifest:G.manifest,setup:(F)=>{cM(F,W,G,J,Y),uM(F,W,G,J,Y),dM(F,W,G,J,Y),pM(F,W,G,J,Y),lM(F,G)}};return K.hooks=iM(W,G,Q,Y),K}),failures:V.failures,pluginPaths:B.map((G)=>G.pluginPath),shutdown:async()=>{await W.shutdown()},warnings:V.warnings}}function cM($,W,Z,Q,J){for(let j of Z.contributions?.tools??[]){let X={name:j.name,description:j.description??"",inputSchema:j.inputSchema??{type:"object",properties:{}},timeoutMs:j.timeoutMs,retryable:j.retryable,execute:async(Y,V)=>{try{return await W.call("executeTool",{pluginId:Z.pluginId,contributionId:j.id,input:Y,context:V},{timeoutMs:Q})}catch(B){if(!J5(B))throw B;return await J(),await W.call("executeTool",{pluginId:Z.pluginId,contributionId:j.id,input:Y,context:V},{timeoutMs:Q})}}};$.registerTool(X)}}function uM($,W,Z,Q,J){for(let j of Z.contributions?.commands??[])$.registerCommand({name:j.name,description:j.description,handler:async(X)=>{try{return await W.call("executeCommand",{pluginId:Z.pluginId,contributionId:j.id,input:X},{timeoutMs:Q})}catch(Y){if(!J5(Y))throw Y;return await J(),await W.call("executeCommand",{pluginId:Z.pluginId,contributionId:j.id,input:X},{timeoutMs:Q})}}})}function dM($,W,Z,Q,J){for(let j of Z.contributions?.rules??[])$.registerRule({id:j.ruleId,source:j.source,content:j.hasContentHandler===!0?async()=>{try{return await W.call("resolveRuleContent",{pluginId:Z.pluginId,contributionId:j.id},{timeoutMs:Q})}catch(X){if(!J5(X))throw X;return await J(),await W.call("resolveRuleContent",{pluginId:Z.pluginId,contributionId:j.id},{timeoutMs:Q})}}:j.content??""})}function lM($,W){for(let Z of W.contributions?.providers??[])$.registerProvider({name:Z.name,description:Z.description,metadata:Z.metadata});for(let Z of W.contributions?.automationEventTypes??[])$.registerAutomationEventType({eventType:Z.eventType,source:Z.source,description:Z.description,attributesSchema:Z.attributesSchema,payloadSchema:Z.payloadSchema,examples:Z.examples,metadata:Z.metadata});for(let Z of W.contributions?.mcpServers??[])$.registerMcpServer(Z)}function pM($,W,Z,Q,J){for(let j of Z.contributions?.messageBuilders??[])$.registerMessageBuilder({name:j.name,async build(X){try{let Y=await W.call("buildMessages",{pluginId:Z.pluginId,contributionId:j.id,messages:X},{timeoutMs:Q});return mG(Y)?Y:X}catch(Y){if(!J5(Y))throw Y;await J();let V=await W.call("buildMessages",{pluginId:Z.pluginId,contributionId:j.id,messages:X},{timeoutMs:Q});return mG(V)?V:X}}})}function mG($){return Array.isArray($)&&$.every((W)=>typeof W==="object"&&W!==null&&("role"in W)&&("content"in W))}function rM($,W,Z,Q,J){return async(j)=>{try{return await $.call("invokeHook",{pluginId:W,hookName:Z,payload:j},{timeoutMs:Q})}catch(X){if(!J5(X))throw X;return await J(),await $.call("invokeHook",{pluginId:W,hookName:Z,payload:j},{timeoutMs:Q})}}}function iM($,W,Z,Q){let J={};for(let j of W.hooks??[])J[j]=rM($,W.pluginId,j,Z,Q);return Object.keys(J).length>0?J:void 0}var ZJ="package.json",$R="package";function j5($){return tM($)}function X5($){return sM($)}function WR($){try{return YZ($)&&aM($).isDirectory()}catch{return!1}}function QJ($){let W=[],Z=new Set;for(let Q of $){let J=XZ(Q);if(Z.has(J))continue;Z.add(J),W.push(J)}return W}function uG($){let W=QJ($);return uW(W)}function dG($){return j5($).flatMap((W)=>X5(W)).filter((W)=>YZ(W))}function ZR($,W){let Z=[];for(let Q of $)try{Z.push(...cG([Q],W))}catch{}return Z}function WJ($){return typeof $==="object"&&$!==null}function QR($){try{let W=JSON.parse(nM(VZ($,ZJ),"utf8"));if(!WJ(W)||!WJ(W.cline))return[];let Z=W.cline.plugins;if(!Array.isArray(Z))return[];let Q=[];for(let J of Z){if(typeof J==="string"){Q.push(J);continue}if(!WJ(J)||!Array.isArray(J.paths))continue;for(let j of J.paths)if(typeof j==="string")Q.push(j)}return Q}catch{return[]}}function lG($,W){let Z=XZ(W);return QR($).some((Q)=>XZ($,Q)===Z)}function JR($,W){return oM($)===$R&&YZ(VZ(jZ($),ZJ))&&lG(jZ($),W)}function jR($){let W=XZ($),Z=[],Q=jZ(W);while(!0){if(JR(Q,W)){Z.push(Q);break}if(YZ(VZ(Q,ZJ))){if(lG(Q,W))Z.push(Q);break}let J=jZ(Q);if(J===Q)break;Q=J}return QJ(Z)}function s1($={}){let W=$.cwd??process.cwd(),Z=dG($.workspacePath),Q=cG($.pluginPaths??[],W);return uG([...Q,...Z])}function XR($={}){let W=$.cwd??process.cwd(),Z=dG($.workspacePath),Q=ZR($.pluginPaths??[],W);return uG([...Q,...Z])}function t1($){let W=[];for(let Z of $)for(let Q of jR(Z)){let J=VZ(Q,eM);if(WR(J))W.push(J)}return QJ(W)}function pG($={}){return t1(XR($))}async function t8($={}){let W=s1($);if(W.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let Q=await b2(W,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:Q.plugins,failures:Q.failures,pluginPaths:Q.pluginPaths,warnings:Q.warnings}}let Z=await s8({pluginPaths:W,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:Z.extensions??[],shutdown:Z.shutdown,failures:Z.failures,pluginPaths:Z.pluginPaths,warnings:Z.warnings}}import{execFile as YR}from"node:child_process";import{promisify as VR}from"node:util";var BR=VR(YR);function JJ($,W){$?.log(W,{severity:"warn"})}function HR($){let W=$?.checkpoint;if(!W||typeof W!=="object"||Array.isArray(W))return;let Z=W;if(!Z.latest||!Array.isArray(Z.history))return;let Q=Z.latest,J=Z.history.filter((j)=>!!j&&typeof j==="object"&&typeof j.ref==="string"&&typeof j.createdAt==="number"&&typeof j.runCount==="number");if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")return;return{latest:Q,history:J}}async function y2($,W){let Z=await BR("git",["-C",$,...W],{windowsHide:!0});return{stdout:Z.stdout.trim(),stderr:Z.stderr.trim()}}async function jJ($,W){if(!$)return;let Z=`refs/cline/checkpoints/${W}/`;try{let{stdout:Q}=await y2($,["for-each-ref","--format=%(refname)",Z]),J=Q.trim().split(`
|
|
206
|
+
`).filter(Boolean);await Promise.allSettled(J.map((j)=>y2($,["update-ref","-d",j])))}catch{}}async function rG($,W,Z){if(!$||Z.length===0)return;await Promise.allSettled(Z.map((Q)=>y2($,["update-ref",`refs/cline/checkpoints/${W}/${Q.runCount}`,Q.ref])))}function GR($,W){let Z=$.findIndex((Q)=>Q.runCount===W.runCount);if(Z<0)return[...$,W];return $.map((Q,J)=>J===Z?W:Q)}function iG($){let W=$.initialRunCount??0,Z,Q=async()=>{if(Z!==void 0)return Z;try{Z=(await y2($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Z=!1}return Z},J=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:W});if(!await Q())return;let j=async(B)=>{try{let G=(await y2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:W,kind:"commit"}}catch(H){JJ($.logger,`${B}: ${H instanceof Error?H.message:String(H)}`);return}},X=`cline checkpoint session=${$.sessionId} run=${W}`,Y="";try{Y=(await y2($.cwd,["stash","create",X])).stdout.trim()}catch(B){return JJ($.logger,`Checkpoint snapshot failed: ${B instanceof Error?B.message:String(B)}`),j("Checkpoint HEAD fallback failed")}if(!Y)return j("Checkpoint HEAD fallback failed");let V=`refs/cline/checkpoints/${$.sessionId}/${W}`;try{await y2($.cwd,["update-ref",V,Y])}catch(B){JJ($.logger,`Checkpoint store failed: ${B instanceof Error?B.message:String(B)}`);return}return{ref:Y,createdAt:Date.now(),runCount:W,kind:"stash"}};return{beforeRun:async({snapshot:j})=>{if(j.parentAgentId!=null)return;W+=1;return},beforeModel:async({snapshot:j})=>{if(j.parentAgentId!=null||j.iteration!==1||W<1)return;let X=await J();if(!X)return;let Y=await $.readSessionMetadata(),V=HR(Y);if(V?.latest.ref===X.ref)return;let B=GR(V?.history??[],X);await $.writeSessionMetadata({...Y??{},checkpoint:{latest:X,history:B}});return}}}import{spawn as OR}from"node:child_process";import{appendFileSync as TR,readFileSync as zR}from"node:fs";import{join as qR}from"node:path";import{augmentNodeCommandForDebug as oG,withResolvedClineBuildEnv as VJ}from"@cline/shared";import{ensureHookLogDir as nG}from"@cline/shared/storage";function e8($,W){if(!W)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:W}}import{existsSync as KR,readdirSync as FR}from"node:fs";import{basename as AR,extname as UR,join as DR}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as BZ,resolveHooksConfigSearchPaths as _R}from"@cline/shared/storage";function Y5($){return _R($)}var $6;((H)=>{H.TaskStart="TaskStart";H.TaskResume="TaskResume";H.TaskCancel="TaskCancel";H.TaskComplete="TaskComplete";H.TaskError="TaskError";H.PreToolUse="PreToolUse";H.PostToolUse="PostToolUse";H.UserPromptSubmit="UserPromptSubmit";H.PreCompact="PreCompact";H.SessionShutdown="SessionShutdown"})($6||={});var V5={["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"},LR=new Map(Object.values($6).map(($)=>[$.toLowerCase(),$])),fR=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function B5($){let W=UR($).toLowerCase();if(!fR.has(W))return;let Z=AR($,W).trim().toLowerCase();return LR.get(Z)}function I$($){let W=[],Z=new Set,Q=Y5($).filter((J)=>KR(J));for(let J of Q)try{for(let j of FR(J,{withFileTypes:!0})){if(!j.isFile())continue;let X=B5(j.name);if(!X)continue;let Y=DR(J,j.name);if(Z.has(Y))continue;Z.add(Y),W.push({fileName:X,hookEventName:V5[X],path:Y})}}catch{}return W.sort((J,j)=>J.path.localeCompare(j.path))}function GZ($){if(!$||typeof $!=="object")return{};let W={};for(let[Z,Q]of Object.entries($))W[Z]=typeof Q==="string"?Q:JSON.stringify(Q);return W}function HZ($,W,Z){let Q=Z instanceof Error?`: ${Z.message}`:"",J=`${W}${Q}`;if($){try{$.log(J,{severity:"warn",...Z!==void 0?{error:Z}:{}})}catch{}return}console.warn(J)}function MR($,W){if(!W)return $;if(!$)return{...W};let Z=[$.context,W.context].filter((J)=>typeof J==="string"&&J.length>0).join(`
|
|
207
|
+
`),Q=[...$.appendMessages??[],...W.appendMessages??[]];return{cancel:$.cancel===!0||W.cancel===!0?!0:void 0,review:$.review===!0||W.review===!0?!0:void 0,context:Z||void 0,overrideInput:W.overrideInput!==void 0?W.overrideInput:$.overrideInput,systemPrompt:W.systemPrompt!==void 0?W.systemPrompt:$.systemPrompt,appendMessages:Q.length>0?Q:void 0}}function RR($){if(!$||typeof $!=="object")return;let W=$,Z=typeof W.context==="string"?W.context:typeof W.contextModification==="string"?W.contextModification:typeof W.errorMessage==="string"?W.errorMessage:void 0;return{cancel:typeof W.cancel==="boolean"?W.cancel:void 0,review:typeof W.review==="boolean"?W.review:void 0,context:Z,overrideInput:Object.hasOwn(W,"overrideInput")?W.overrideInput:void 0}}function XJ($){let W=String($??"").toLowerCase();return W.includes("cancel")||W.includes("abort")||W.includes("interrupt")}function w0($,W){let Z=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",Q={rootSessionId:W.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:Q,workspaceRoots:W.workspacePath?[W.workspacePath]:[],workspaceInfo:W.workspaceInfo,userId:Z,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function NR($){let W=$.trim();if(!W)return{};let Q=W.split(`
|
|
208
|
+
`).map((j)=>j.trim()).filter(Boolean).filter((j)=>j.startsWith("HOOK_CONTROL\t")).map((j)=>j.slice(13)),J=Q.length>0?Q[Q.length-1]:W;try{return{parsedJson:JSON.parse(J)}}catch(j){return{parseError:j instanceof Error?j.message:"Failed to parse hook stdout JSON"}}}async function ER($,W){let Z=$.stdin;if(!Z)throw Error("hook command failed to create stdin");await new Promise((Q,J)=>{let j=!1,X=()=>{Z.off("error",V),Z.off("finish",B),$.off("close",H)},Y=(G)=>{if(j)return;if(j=!0,X(),G){let K=G.code;if(K==="EPIPE"||K==="ERR_STREAM_DESTROYED"){Q();return}J(G);return}Q()},V=(G)=>Y(G),B=()=>Y(),H=()=>Y();Z.on("error",V),Z.once("finish",B),$.once("close",H);try{Z.end(W)}catch(G){Y(G)}})}async function sG($,W){if(W.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await aG($,W)}catch(Z){let Q=PR(W.command,process.platform,Z);if(!Q)throw Z;return await aG($,{...W,command:Q})}}async function aG($,W){let Z=oG(W.command,{env:W.env,debugRole:"hook"}),Q=OR(Z[0],Z.slice(1),{cwd:W.cwd,env:VJ(W.env),stdio:W.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:W.detached,windowsHide:!0}),J=new Promise((K)=>{Q.once("spawn",()=>K())}),j=new Promise((K,F)=>{Q.once("error",(A)=>F(A))}),X=JSON.stringify($);if(await Promise.race([J,j]),await ER(Q,X),W.detached){Q.unref();return}if(!Q.stdout||!Q.stderr)throw Error("hook command failed to create stdout/stderr");let Y="",V="",B=!1,H;Q.stdout.on("data",(K)=>{Y+=K.toString()}),Q.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((W.timeoutMs??0)>0)H=setTimeout(()=>{B=!0,Q.kill("SIGKILL")},W.timeoutMs);Q.once("close",(F)=>{if(H)clearTimeout(H);let{parsedJson:A,parseError:D}=NR(Y);K({exitCode:F,stdout:Y,stderr:V,parsedJson:A,parseError:D,timedOut:B})})});return await Promise.race([G,j])}function wR($){try{let Z=zR($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Z?.startsWith("#!"))return;let Q=Z.slice(2).trim();if(!Q)return;let J=Q.split(/\s+/).filter(Boolean);return J.length>0?J:void 0}catch{return}}function CR($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function PR($,W=process.platform,Z){if(W!=="win32"||!CR(Z))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function tG($){if($.length===0)return;let[W,...Z]=$,Q=W.replace(/\\/g,"/").toLowerCase(),J=Q.split("/").at(-1)??Q;if(J==="env")return tG(Z);if(J==="bash"||J==="sh"||J==="zsh")return[J,...Z];if(J==="python3"||J==="python")return process.platform==="win32"?["py","-3",...Z]:[J,...Z];return $}function SR($){let W=wR($);if(W&&W.length>0)return[...tG(W)??W,$];let Z=$.toLowerCase();if(Z.endsWith(".sh")||Z.endsWith(".bash")||Z.endsWith(".zsh"))return["bash",$];if(Z.endsWith(".js")||Z.endsWith(".mjs")||Z.endsWith(".cjs"))return oG(["node",$],{debugRole:"hook"});if(Z.endsWith(".ts")||Z.endsWith(".mts")||Z.endsWith(".cts"))return["bun","run",$];if(Z.endsWith(".py"))return process.platform==="win32"?["py","-3",$]:["python3",$];if(Z.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",$];return["bash",$]}function bR($){let W={};for(let Z of I$($)){if(!Z.hookEventName)continue;let Q=Z.hookEventName,J=W[Q]??[];J.push(SR(Z.path)),W[Q]=J}return W}async function yR($){let W;for(let Z of $.commands){let Q=Z.join(" ");try{let J=await sG($.payload,{command:Z,cwd:$.cwd,env:VJ(process.env),detached:!1,timeoutMs:$.timeoutMs});if(J?.timedOut){HZ($.logger,`hook command timed out: ${Q}`);continue}if(J?.parseError){HZ($.logger,`hook command returned invalid JSON control output: ${Q} (${J.parseError})`);continue}W=MR(W,RR(J?.parsedJson))}catch(J){HZ($.logger,`hook command failed: ${Q}`,J)}}return W}function h2($){for(let W of $.commands){let Z=W.join(" ");sG($.payload,{command:W,cwd:$.cwd,env:VJ(process.env),detached:!0}).catch((Q)=>{HZ($.logger,`hook command failed: ${Z}`,Q)})}}function x$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function YJ($,W){return{...x$($.snapshot),userMessage:W}}function eG($){return{...x$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function $K($){return{...x$($.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 WK($){return $.filter((W)=>W.type==="text"&&typeof W.text==="string").map((W)=>W.text).join("")}function hR($){if(!$)return;let W={};if($.cancel===!0)W.stop=!0;if($.overrideInput!==void 0)W.input=$.overrideInput;return Object.keys(W).length>0?W:void 0}function W6($){let W={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Z=(Q)=>{let J=`${JSON.stringify({ts:new Date().toISOString(),...Q})}
|
|
209
|
+
`,X=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??qR(nG(),"hooks.jsonl");nG(X),TR(X,J,"utf8")};return{beforeRun:async(Q)=>{let J=YJ(Q,"");Z({...w0(J,W),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Q)=>{let J=eG(Q);Z({...w0(J,W),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:GZ(J.call.input)}});return},afterTool:async(Q)=>{let J=$K(Q);Z({...w0(J,W),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:GZ(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:Q,result:J})=>{let j=x$(Q);if(J.status==="completed"){Z({...w0(j,W),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||XJ(J.error?.message)){Z({...w0(j,W),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Z({...w0(j,W),hookName:"agent_error",iteration:J.iterations,error:{name:J.error.name,message:J.error.message,stack:J.error.stack}})},onEvent:async(Q)=>{if(Q.type!=="message-added"||Q.message.role!=="user")return;let J=YJ({snapshot:Q.snapshot},WK(Q.message.content));Z({...w0(J,W),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function H5($){let W=bR($.workspacePath);if(!Object.values(W).some((G)=>G.length>0))return;let Q=async(G,K)=>{let F=W[K]??[];if(F.length===0)return;h2({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...w0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...w0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=W.prompt_submit??[];if(K.length>0)h2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...w0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},j=async(G)=>{let K=W.tool_call??[];if(K.length===0)return;return yR({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...w0(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:GZ(G.call.input)}}})},X=async(G)=>{let K=W.tool_result??[];if(K.length===0)return;h2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...w0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:GZ(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}}})},Y=async(G)=>{let K=W.agent_end??[];if(K.length===0)return;h2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...w0(G,$),hookName:"agent_end",iteration:G.iteration,turn:G.turn,taskComplete:{taskMetadata:{}}}})},V=async(G)=>{let K=W.agent_error??[];if(K.length===0)return;h2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...w0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},B=async(G)=>{if(XJ(G.reason)){let F=W.agent_abort??[];if(F.length>0)h2({commands:F,cwd:$.cwd,logger:$.logger,payload:{...w0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=W.session_shutdown??[];if(K.length===0)return;h2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...w0(G,$),hookName:"session_shutdown",reason:G.reason}})},H={};if((W.agent_start?.length??0)>0||(W.agent_resume?.length??0)>0||(W.prompt_submit?.length??0)>0){if((W.agent_start?.length??0)>0||(W.agent_resume?.length??0)>0)H.beforeRun=async(G)=>{let K=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await Q(x$(G.snapshot),K);return};if((W.prompt_submit?.length??0)>0)H.onEvent=async(G)=>{if(G.type!=="message-added"||G.message.role!=="user")return;await J(YJ({snapshot:G.snapshot},WK(G.message.content)))}}if((W.tool_call?.length??0)>0)H.beforeTool=async(G)=>{let K=await j(eG(G));return hR(K)};if((W.tool_result?.length??0)>0)H.afterTool=async(G)=>{await X($K(G));return};if((W.agent_end?.length??0)>0)H.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await Y({...x$(G),iteration:K.iterations,turn:{outputText:K.outputText,status:K.status}})};if((W.agent_error?.length??0)>0||(W.agent_abort?.length??0)>0||(W.session_shutdown?.length??0)>0){let G=H.afterRun;H.afterRun=async(K)=>{await G?.(K);let{snapshot:F,result:A}=K;if(A.status==="aborted"||XJ(A.error?.message)){await B({...x$(F),reason:A.error?.message});return}if(A.error)await V({...x$(F),iteration:A.iterations,error:A.error})}}return H}function Z6($){return e8("core.hook_config_files",H5($))}function k2($,W){let Z=$.map((Q)=>Q[W]).filter((Q)=>typeof Q==="function");if(Z.length===0)return;return async(Q)=>{let J;for(let j of Z){let X=await j(Q);if(!X||typeof X!=="object")continue;let Y=X;J={...J??{},...Y,stop:J?.stop===!0||Y.stop===!0?!0:Y.stop,options:J?.options||Y.options?{...J?.options??{},...Y.options??{}}:void 0}}return J}}function I2($){let W=$.filter((Z)=>Z!==void 0);if(W.length===0)return;return{beforeRun:k2(W,"beforeRun"),afterRun:k2(W,"afterRun"),beforeModel:k2(W,"beforeModel"),afterModel:k2(W,"afterModel"),beforeTool:k2(W,"beforeTool"),afterTool:k2(W,"afterTool"),onEvent:k2(W,"onEvent")}}var ZK={};w(ZK,{normalizeRuntimeCapabilities:()=>C0});function C0(...$){let W,Z;for(let J of $){if(!J)continue;if(J.toolExecutors)W={...W??{},...J.toolExecutors};if(J.requestToolApproval)Z=J.requestToolApproval}let Q=W&&Object.keys(W).length>0;if(!Q&&!Z)return;return{...Q?{toolExecutors:W}:{},...Z?{requestToolApproval:Z}:{}}}var GK={};w(GK,{toProviderConfig:()=>e0,emptyStoredProviderSettings:()=>v$,StoredProviderSettingsSchema:()=>X6,StoredProviderSettingsEntrySchema:()=>hZ,ProviderSettingsSchemaTyped:()=>j6});import{z as m$}from"zod";var HK={};w(HK,{toProviderConfig:()=>e0,safeParseSettings:()=>yZ,safeCreateProviderConfig:()=>LJ,parseSettings:()=>bZ,normalizeProviderId:()=>J6,isBuiltInProviderId:()=>DJ,createProviderConfig:()=>_J,SapSettingsSchema:()=>CZ,ReasoningSettingsSchema:()=>RZ,ProviderSettingsSchema:()=>g$,ProviderProtocolSchema:()=>zZ,ProviderIdSchema:()=>U5,ProviderClientSchema:()=>qZ,OcaSettingsSchema:()=>PZ,ModelCatalogSettingsSchema:()=>SZ,GcpSettingsSchema:()=>EZ,BUILT_IN_PROVIDER_IDS:()=>UJ,BUILT_IN_PROVIDER:()=>A5,AzureSettingsSchema:()=>wZ,AwsSettingsSchema:()=>NZ,AuthSettingsSchema:()=>MZ});import*as t0 from"@cline/llms";import{z as C}from"zod";var BK={};w(BK,{resolveProviderConfig:()=>F5,getProviderConfig:()=>TZ,getLiveModelsCatalog:()=>Q6,clearPublicModelsCatalogCache:()=>QN,clearPrivateModelsCatalogCache:()=>AJ,clearLiveModelsCatalogCache:()=>FJ,OPENAI_COMPATIBLE_PROVIDERS:()=>K5,DEFAULT_MODELS_CATALOG_URL:()=>_Z});import*as W0 from"@cline/llms";function BJ($){if(!Array.isArray($))return[];return $.map((W)=>{if(typeof W==="string")return W.trim();if(W&&typeof W==="object"){let Z=W;for(let Q of[Z.id,Z.name,Z.model])if(typeof Q==="string"&&Q.trim())return Q.trim()}return""}).filter((W)=>W.length>0)}function kR($,W){let Z=BJ($);if(Z.length>0)return Z;if(!$||typeof $!=="object")return[];let Q=$,J=BJ(Q.data??Q.models);if(J.length>0)return J;if(Q.models&&typeof Q.models==="object"&&!Array.isArray(Q.models)){let X=Object.keys(Q.models).filter((Y)=>Y.trim().length>0);if(X.length>0)return X}let j=Q.providers?.[W];if(j&&typeof j==="object"){let Y=BJ(j.models??j);if(Y.length>0)return Y}return[]}async function KZ($,W){let Z=await fetch($,{method:"GET"});if(!Z.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Z.status}`);return kR(await Z.json(),W)}function QK($){return $.replace(/\/+$/,"")}function FZ($,W,Z){let Q=Z?.trim();if(!Q)return;let J=$?.trim();if(!J||!W?.trim())return Q;try{let j=new URL(Q),X=new URL(W),Y=new URL(J);if(j.origin!==X.origin)return Q;let V=QK(X.pathname),B=QK(Y.pathname);if(V&&j.pathname.startsWith(`${V}/`)){let H=j.pathname.slice(V.length);Y.pathname=`${B}${H}`}else Y.pathname=j.pathname;return Y.search=j.search,Y.hash=j.hash,Y.toString()}catch{return Q}}function IR($){return Object.fromEntries(Object.entries($).map(([W,Z])=>[W,{...Z}]))}function xR($){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 gR=Object.values(W0.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:IR($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),jK=Object.fromEntries(gR.map(($)=>[$.id,$]));function mR($){return jK[$]}function vR(){return Object.fromEntries(Object.entries(jK).filter(([,$])=>xR($)))}function XK($=[]){let W=$.flatMap((Z)=>{switch(Z){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Z];default:return[]}});return W.length>0?W:void 0}var _Z="https://models.dev/api.json",cR=600000,YK=300000,uR=5000,DZ=new Map,G5=new Map,HJ=new Map,AZ=new Map;async function dR(){return W0.getGeneratedProviderModels()}async function lR($,W={},Z={},Q={},J={},j={}){if($==="litellm")return W0.sortModelsByReleaseDate(Q);let X=await dR(),Y=W0.resolveProviderModelCatalogKeys($),V=Object.assign({},...Y.map((G)=>X[G]??{}));if(Boolean(W0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl))return W0.sortModelsByReleaseDate({...J,...j});if($==="openai-codex")return W0.sortModelsByReleaseDate({...W,...W0.filterOpenAICodexModels(Z),...J,...j});if($==="cline-pass"&&Object.keys(Z).length>0)return{...Z,...j};let H=W0.sortModelsByReleaseDate({...V,...W,...Z,...Q,...J});if($==="cline")return W0.sortModelsByReleaseDate({...W0.preferCanonicalModelIds(H,W0.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...j});return W0.sortModelsByReleaseDate({...H,...j})}function pR($,W){let Z=W0.resolveProviderModelCatalogKeys($);return Object.assign({},...Z.map((Q)=>W[Q]??{}))}function LZ($){let W=$?.trim();return W&&W.length>0?W:""}function KJ($){let W=$.apiKey?.trim()||$.accessToken?.trim();return W&&W.length>0?W:void 0}function rR($){let W=2166136261;for(let Z=0;Z<$.length;Z+=1)W^=$.charCodeAt(Z),W+=(W<<1)+(W<<4)+(W<<7)+(W<<8)+(W<<24);return(W>>>0).toString(16)}function iR($,W){return`${$}:${LZ(W.baseUrl)}:${rR(KJ(W)??"")}`}async function fZ($,W,Z=uR){let Q=new AbortController,J=setTimeout(()=>Q.abort(),Z);try{return await fetch($,{...W,signal:Q.signal})}finally{clearTimeout(J)}}function x2($,W,Z){if(Z&&!$.includes(W))$.push(W)}function OZ($,W){let Z=["streaming","tools"];return x2(Z,"images",Boolean(W.supportsImages)),x2(Z,"prompt-cache",Boolean(W.supportsPromptCache)),x2(Z,"reasoning",Boolean(W.supportsReasoning)),{id:$,name:W.name??$,contextWindow:W.contextWindow,maxInputTokens:W.maxInputTokens,maxTokens:W.maxTokens,capabilities:Z,releaseDate:W.releaseDate,status:"active"}}async function nR($,W){let Z=await fZ("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${W}`,"Content-Type":"application/json"}});if(!Z.ok)throw Error(`Baseten model refresh failed: HTTP ${Z.status}`);let J=(await Z.json())?.data??[],j={};for(let X of J){let Y=X.id?.trim();if(!Y)continue;if(Y.includes("whisper")||Y.includes("tts")||Y.includes("embedding"))continue;let V=X.supported_features??[];j[Y]=OZ(Y,{name:Y,contextWindow:X.context_length,maxInputTokens:X.context_length,maxTokens:X.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return j}function JK($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let W=Number($);return Number.isFinite(W)?W:void 0}return}async function aR($,W){let Z=await fZ("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":W}});if(!Z.ok)throw Error(`Hicap model refresh failed: HTTP ${Z.status}`);let J=(await Z.json())?.data??[],j={};for(let X of J){let Y=X.id?.trim();if(!Y)continue;j[Y]=OZ(Y,{name:Y,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return j}async function oR($,W){let Q=`${(LZ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await fZ(Q,{method:"GET",headers:{Authorization:`Bearer ${W}`,accept:"application/json"}});if(!J.ok)throw Error(`Poolside model refresh failed: HTTP ${J.status}`);let X=(await J.json())?.data??[],Y={};for(let V of X){let B=V.id?.trim();if(!B)continue;let H=V.supported_features??[],G=V.supported_sampling_parameters??[],K=V.input_modalities??[],F=["streaming"];x2(F,"tools",H.includes("tools")),x2(F,"reasoning",H.includes("reasoning")),x2(F,"temperature",G.includes("temperature")),x2(F,"images",K.includes("image"));let A={input:JK(V.pricing?.prompt),output:JK(V.pricing?.completion)};Y[B]={id:B,name:V.name??B,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:A.input!==void 0||A.output!==void 0?A:void 0,status:"active"}}return Y}function sR($){let W=LZ($).replace(/\/+$/,"");if(!W)return"http://localhost:4000";return W.endsWith("/v1")?W.slice(0,-3):W}function tR($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function eR($){let W=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Z=500,Q=W?`: ${W.slice(0,500)}${W.length>500?"...":""}`:"";return`HTTP ${$.status}${Q}`}async function $N($,W){let Z=sR($.baseUrl),Q=[],J=[["x-litellm-api-key",{"x-litellm-api-key":W}],["Authorization",{Authorization:`Bearer ${W}`}]];for(let j of tR(Z))for(let[X,Y]of J)try{let V=await fZ(j,{method:"GET",headers:{accept:"application/json",...Y}});if(V.ok){let H=(await V.json())?.data??[],G={};for(let K of H){let F=K.model_name?.trim(),D=K.litellm_params?.model?.trim()||F;if(!D)continue;let U=K.model_info,L=OZ(D,{name:F??D,maxTokens:U?.max_output_tokens??U?.max_tokens,maxInputTokens:U?.max_input_tokens??U?.max_tokens,supportsImages:U?.supports_vision,supportsPromptCache:U?.supports_prompt_caching,supportsReasoning:U?.supports_reasoning});if(G[D]=L,F)G[F]={...L,id:F,name:F}}return G}Q.push(`${new URL(j).pathname} (${X}): ${await eR(V)}`)}catch(V){let B=V instanceof Error?V.message:String(V);Q.push(`${new URL(j).pathname} (${X}): ${B}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${Q.join("; ")}`)}var VK={baseten:nR,hicap:aR,litellm:$N,poolside:oR},GJ=new Map,UZ=new Map;function WN($,W){return`${$}:${LZ(W.baseUrl)}`}async function ZN($,W,Z){let Q=W0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=FZ(Z.baseUrl,Q?.provider.baseUrl,Q?.provider.modelsSourceUrl);if(!J)return{};let j=W?.cacheTtlMs??YK,X=WN($,Z),Y=Date.now(),V=GJ.get(X);if(V&&V.expiresAt>Y)return V.data;let B=UZ.get(X);if(B)return B;let H=KZ(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,OZ(F,{name:F})]));return GJ.set(X,{data:K,expiresAt:Y+j}),K}).finally(()=>{UZ.delete(X)});return UZ.set(X,H),H}function QN(){GJ.clear(),UZ.clear()}async function JN($,W){let Z=KJ(W);if(!Z)return{};let Q=VK[$];if(!Q)return{};return Q(W,Z)}function jN($,W,Z){if(!Z)return!1;if(!VK[$])return!1;if(W?.loadPrivateOnAuth===!1)return!1;return Boolean(KJ(Z))}async function XN($,W,Z){let Q=W?.cacheTtlMs??YK,J=iR($,Z),j=Date.now(),X=HJ.get(J);if(X&&X.expiresAt>j)return X.data;let Y=AZ.get(J);if(Y)return Y;let V=JN($,Z).then((B)=>{return HJ.set(J,{data:B,expiresAt:j+Q}),B}).finally(()=>{AZ.delete(J)});return AZ.set(J,V),V}async function YN($){return W0.fetchLiveProviderModels($,globalThis.fetch)}async function Q6($={}){let W=$.url??_Z,Z=$.cacheTtlMs??cR,Q=Date.now(),J=DZ.get(W);if(J&&J.expiresAt>Q)return J.data;let j=G5.get(W);if(j)return j;let X=YN(W).then((Y)=>{return DZ.set(W,{data:Y,expiresAt:Q+Z}),Y}).finally(()=>{G5.delete(W)});return G5.set(W,X),X}function FJ($){if($){DZ.delete($),G5.delete($);return}DZ.clear(),G5.clear()}function AJ(){HJ.clear(),AZ.clear()}function VN($){return Object.fromEntries(Object.entries($).map(([W,Z])=>[W,{baseUrl:Z.baseUrl,modelId:Z.modelId,capabilities:XK(Z.capabilities)}]))}var K5=VN(vR());function TZ($){let W=mR($);if(!W)return;return{baseUrl:W.baseUrl||void 0,modelId:W.modelId,knownModels:W.knownModels,capabilities:XK(W.capabilities)}}async function F5($,W,Z){let Q=TZ($);if(!Q)return;try{let J=W?.loadLatestOnInit?await Q6(W):void 0,j=J?pR($,J):{},X=Z&&jN($,W,Z)?await XN($,W,Z):{},V=Boolean(W0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Z??{providerId:$,modelId:Q.modelId,baseUrl:Q.baseUrl}:Z,B=V?await ZN($,W,V).catch(()=>({})):{},H=await lR($,Q.knownModels,j,X,B,Z?.knownModels);return{...Q,knownModels:H}}catch(J){if(W?.failOnError)throw J;if($==="litellm")return{...Q,knownModels:{}};return Q}}var A5=t0.BUILT_IN_PROVIDER,UJ=t0.BUILT_IN_PROVIDER_IDS,DJ=t0.isBuiltInProviderId,J6=t0.normalizeProviderId,U5=C.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),zZ=C.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),qZ=C.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),MZ=C.object({apiKey:C.string().optional(),accessToken:C.string().optional(),refreshToken:C.string().optional(),expiresAt:C.number().int().positive().optional(),accountId:C.string().optional(),organizationId:C.string().optional(),organizationName:C.string().optional(),memberId:C.string().optional(),metadata:C.record(C.string(),C.unknown()).optional()}),BN=C.enum(["none","low","medium","high","xhigh"]),RZ=C.object({enabled:C.boolean().optional(),effort:BN.optional(),budgetTokens:C.number().int().positive().optional()}),NZ=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()}),EZ=C.object({projectId:C.string().optional(),region:C.string().optional()}),wZ=C.object({apiVersion:C.string().optional(),useIdentity:C.boolean().optional()}),CZ=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()}),PZ=C.object({mode:C.enum(["internal","external"]).optional(),usePromptCache:C.boolean().optional()}),SZ=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()}),g$=C.object({provider:U5,apiKey:C.string().optional(),auth:MZ.optional(),model:C.string().optional(),protocol:zZ.optional(),client:qZ.optional(),routingProviderId:U5.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:RZ.optional(),aws:NZ.optional(),gcp:EZ.optional(),azure:wZ.optional(),sap:CZ.optional(),oca:PZ.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:SZ.optional()});function bZ($){return g$.parse($)}function yZ($){return g$.safeParse($)}function HN($){return $.protocol==="openai-responses"||$.client==="openai"}function e0($,W={}){let Z=$.provider,Q=J6(Z),J=W.includeKnownModels!==!1,j=$.reasoning?.effort||"none",X=j==="none"?void 0:j,Y=K5[Q],V=Object.assign({},...t0.resolveProviderModelCatalogKeys(Q).map((D)=>t0.getGeneratedModelsForProvider(D))),B=Object.keys(V)[0],H=R8(Q,$),G=$.baseUrl??(Q==="oca"?$.oca?.mode==="internal"?DW:_W:Y?.baseUrl),K=$.routingProviderId??(HN($)&&Q!==A5.OPENAI_NATIVE?A5.OPENAI_NATIVE:void 0),F=J?Y?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,A={providerId:Z,clientType:$.client,routingProviderId:K,modelId:$.model??Y?.modelId??B??"default",...J?{knownModels:F}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:X,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??Y?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(A).filter(([D,U])=>U!==void 0))}function _J($){let W=bZ($);return e0(W)}function LJ($){let W=yZ($);if(W.success)return{success:!0,config:e0(W.data)};return{success:!1,error:W.error}}var j6=g$;var hZ=m$.object({settings:g$,updatedAt:m$.string().datetime(),tokenSource:m$.enum(["manual","oauth","migration"]).default("manual")}),X6=m$.object({version:m$.literal(1),lastUsedProvider:m$.string().min(1).optional(),providers:m$.record(m$.string(),hZ)});function v$(){return{version:1,providers:{}}}U1();var fK={};w(fK,{InMemoryWorkspaceManager:()=>V6});import{upsertWorkspaceInfo as FN,WorkspaceManifestSchema as zJ}from"@cline/shared";var LK={};w(LK,{withSessionGitMetadata:()=>IZ,readSessionGitMetadata:()=>DK,readGitWorkspaceState:()=>OJ,normalizeWorkspacePath:()=>R1,hasCurrentSessionGitMetadata:()=>fJ,generateWorkspaceInfoWithDiagnostics:()=>D5,generateWorkspaceInfo:()=>Y6,buildWorkspaceMetadataWithInfo:()=>TJ,buildWorkspaceMetadata:()=>_5});import{basename as GN,resolve as KN}from"node:path";import{performance as KK}from"node:perf_hooks";import{processWorkspaceInfo as AK}from"@cline/shared";import UK from"simple-git";function DK($){let W=$?.git;if(!W||typeof W!=="object"||Array.isArray(W))return{};let Z=W;return{...typeof Z.url==="string"&&Z.url.trim()?{url:Z.url.trim()}:{},...typeof Z.branch==="string"&&Z.branch.trim()?{branch:Z.branch.trim()}:{}}}function IZ($,W){let Z={...$??{}};if(!W.url&&!W.branch)return delete Z.git,Object.keys(Z).length>0?Z:void 0;let J={...Z.git&&typeof Z.git==="object"&&!Array.isArray(Z.git)?Z.git:{}};if(W.url)J.url=W.url;else delete J.url;if(W.branch)J.branch=W.branch;else delete J.branch;return Z.git=J,Z}function fJ($,W){let Z=DK($);return Z.url===W.url&&Z.branch===W.branch}function _K($){let W=$.find(({name:Z})=>Z==="origin")??$[0];return(W?.refs.fetch||W?.refs.push)?.trim()||void 0}function R1($){return KN($)}async function Y6($){return(await D5($)).info}function FK($){let W=$ instanceof Error?$.message:String($);return/unknown revision|ambiguous argument|does not have any commits yet/i.test(W)}function kZ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function D5($){let W=R1($),Z={rootPath:W,hint:GN(W)},Q={},J;try{let j=UK({baseDir:W});if(!await j.checkIsRepo())return{info:Z,vcsType:"none",gitState:Q};try{let Y=await j.getRemotes(!0);if(Y.length>0){let V=Y.map((H)=>{let G=H.refs.fetch||H.refs.push;return`${H.name}: ${G}`});Z.associatedRemoteUrls=V;let B=_K(Y);if(B)Q.url=B}}catch(Y){J??=kZ(Y)}try{let Y=(await j.revparse(["HEAD"])).trim();if(Y.length>0)Z.latestGitCommitHash=Y}catch(Y){if(!FK(Y))J??=kZ(Y)}try{let Y=(await j.branch()).current.trim();if(Y.length>0)Z.latestGitBranchName=Y,Q.branch=Y}catch(Y){if(!FK(Y))J??=kZ(Y)}return{info:Z,vcsType:"git",gitState:Q,error:J}}catch(j){return{info:Z,vcsType:"none",gitState:Q,error:kZ(j)}}}async function OJ($){try{let W=UK({baseDir:R1($)});if(!await W.checkIsRepo())return{};let[Z,Q]=await Promise.all([W.getRemotes(!0),W.branch()]),J=_K(Z),j=Q.current.trim();return{...J?{url:J}:{},...j?{branch:j}:{}}}catch{return}}async function _5($){let W=await Y6($);return AK(W)}async function TJ($){let W=KK.now(),Z=await D5($),Q=KK.now()-W,J=Z.info;return{workspaceInfo:J,workspaceMetadata:AK(J),durationMs:Q,vcsType:Z.vcsType,gitState:Z.gitState,initError:Z.error}}class V6{manifest;listeners=new Set;constructor($){this.manifest=zJ.parse($??{workspaces:{}})}async addWorkspacePath($){let W=await Y6($);return this.manifest=FN(this.manifest,W),this.emit({type:"workspace_added",workspace:W}),W}async switchWorkspace($){let W=R1($),Z=this.manifest.workspaces[W];if(Z)return this.manifest=zJ.parse({...this.manifest,currentWorkspacePath:W}),this.emit({type:"workspace_switched",workspace:Z}),Z;let Q=await this.addWorkspacePath(W);return this.manifest=zJ.parse({...this.manifest,currentWorkspacePath:Q.rootPath}),this.emit({type:"workspace_switched",workspace:Q}),Q}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let W=R1($);return this.manifest.workspaces[W]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let W of this.listeners)W($)}}U0();import{createHash as AN}from"node:crypto";var OK=new Set,TK=new Set;function UN($){return AN("sha256").update($).digest("hex")}function DN($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function zK($){if(!$.telemetry)return;let W=UN($.rootPath),Z=$.rootCount??1;if(!OK.has(W))OK.add(W),n9($.telemetry,{root_count:Z,vcs_types:DN($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!TK.has(W)){TK.add(W);let Q=Error($.initError.message);Q.name=$.initError.errorType||"Error",a9($.telemetry,Q,{fallback_to_single_root:!0,workspace_count:Z})}}function fN($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function ON($,W,Z){if(W.length>0)for(let j of W)Z?.log(j.message,{severity:"warn"});if($.length===0)return;let Q=$.slice(0,3).map(fN).join("; "),J=$.length>3?`; and ${$.length-3} more`:"";Z?.log(`Some plugins failed to initialize. ${Q}${J}. Use --verbose for more details.`,{severity:"warn"});for(let j of $)Z?.log(`Plugin initialization failed (${j.phase}) for ${j.pluginPath}`,{severity:"warn",stack:j.stack,pluginPath:j.pluginPath,pluginName:j.pluginName})}function TN($,W){let Z=typeof $.thinking==="boolean",Q=typeof $.reasoningEffort==="string";if(!Z&&!Q)return W;return{...W??{},...Z?{enabled:$.thinking}:{},...Q?{effort:$.reasoningEffort}:{}}}function qK($,W){return LN($,W)}function zN($){let W=0;for(let Z of $??[]){if(Z.role!=="user")continue;if(("metadata"in Z&&Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0)?.kind==="recovery_notice")continue;W+=1}return W}function qN($,W,Z,Q,J,j){let X=Q.getProviderSettings($.providerId),Y=J||X?.modelCatalog?{...J??{},...X?.modelCatalog??{}}:void 0,V=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,B=_N({providerId:$.providerId,sessionId:W,source:Z,defaultSource:F0.CLI,client:{name:$.extensionContext?.client?.name,version:$.extensionContext?.client?.version,versionHeaderFallback:$.headers?.["X-CLIENT-VERSION"],platform:$.extensionContext?.client?.platform,platformVersion:$.extensionContext?.client?.platformVersion,isMultiRoot:$.extensionContext?.client?.isMultiRoot},coreVersion:r8,openAiCodex:{accountId:V?.accountId??X?.auth?.accountId,accessToken:V?.accessToken??$.apiKey??X?.auth?.accessToken??X?.apiKey,userAgentVersion:process.env.npm_package_version},headers:{stored:X?.headers,config:$.headers,session:V?.headers}}),H={...X??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??X?.apiKey,baseUrl:$.baseUrl??X?.baseUrl,headers:void 0,reasoning:TN($,X?.reasoning),modelCatalog:Y},G={...e0(H),...V??{}};if(B)G.headers=B;if($.knownModels)G.knownModels=$.knownModels;if($.extensionContext)G.extensionContext=$.extensionContext;let F=$.fetch??G.fetch??j;if(F)G.fetch=F;return G}async function MK($){let{input:W,sessionId:Z,providerSettingsManager:Q,defaultTelemetry:J,defaultLogger:j,defaultCapabilities:X,defaultToolPolicies:Y,defaultFetch:V,onPluginEvent:B,onTeamEvent:H,createSubAgentLifecycleCallbacks:G,createSpawnTool:K,localRuntime:F,readSessionMetadata:A,writeSessionMetadata:D}=$,U=o1(W.config),{modelCatalogDefaults:L,userInstructionService:_,configExtensions:M,onTeamRestored:T,...O}=F??{},f=Object.keys(O).length>0?O:void 0,{workspaceInfo:E,workspaceMetadata:N,gitState:l,durationMs:k,vcsType:P,initError:o}=await TJ(U),p=f?.extensionContext,O0={...p??{},workspace:{...E,...p?.workspace??{}},session:{...p?.session??{},sessionId:Z},logger:p?.logger??f?.logger??j,telemetry:p?.telemetry??f?.telemetry??J};zK({telemetry:O0.telemetry,rootPath:E.rootPath,workspaceInfo:E,rootCount:1,vcsType:P,durationMs:k,initError:o,featureFlagEnabled:!0});let F$=Z6({cwd:W.config.cwd,workspacePath:U,rootSessionId:Z,logger:f?.logger,workspaceInfo:E}),_8=AG(f?.hooks)?void 0:W6({rootSessionId:Z,workspacePath:U,workspaceInfo:E}),A$=I2([f?.hooks,_8]),Z0;if(qK(M,"plugins"))try{Z0=await t8({pluginPaths:f?.pluginPaths,workspacePath:U,cwd:W.config.cwd,onEvent:B,providerId:W.config.providerId,modelId:W.config.modelId,workspaceInfo:E,session:O0.session,client:O0.client,user:O0.user,logger:O0.logger,telemetry:O0.telemetry,automation:O0.automation}),ON(Z0.failures,Z0.warnings,f?.logger)}catch(_$){let S7=_$ instanceof Error?_$.message:String(_$);f?.logger?.log?.(`plugin loading failed; continuing without plugins (${S7})`)}let U$=x3(F$?[F$]:void 0,x3(f?.extensions,dW(Z0?.extensions))),D$=qK(M,"plugins")?t1(Z0?.pluginPaths??[]):void 0,T0={...W.config,...f??{},sessionId:Z,hooks:A$,extensions:U$,extensionContext:O0,telemetry:O0.telemetry,logger:O0.logger},g0=qN(T0,Z,W.source,Q,L,V),b0=I2([T0.hooks,T0.checkpoint?.enabled===!0?iG({cwd:T0.cwd,sessionId:Z,logger:T0.logger,createCheckpoint:T0.checkpoint?.createCheckpoint,initialRunCount:zN(W.initialMessages),readSessionMetadata:A,writeSessionMetadata:D}):void 0]),g={...T0,providerConfig:g0,workspaceMetadata:N,hooks:b0},r0=W.toolPolicies??T0.toolPolicies??Y,b=C0(X,W.capabilities),$0=b?.requestToolApproval,h0=b?.toolExecutors,M0=G?.(g),P7=new V6({currentWorkspacePath:E.rootPath,workspaces:{[E.rootPath]:E}});return{effectiveInput:W,config:g,providerConfig:g0,workspaceMetadata:N,workspaceInfo:E,gitState:l,extensions:U$,hooks:b0,toolPolicies:r0,requestToolApproval:$0,pluginSandboxShutdown:Z0?.shutdown,runtimeBuilderInput:{config:g,hooks:b0,extensions:U$,onTeamEvent:H,createSpawnTool:K,onTeamRestored:T,onSubAgentEvent:M0?.onSubAgentEvent,onSubAgentStart:M0?.onSubAgentStart,onSubAgentEnd:M0?.onSubAgentEnd,userInstructionService:_,pluginSkillDirectories:D$,configExtensions:M,toolExecutors:h0,toolPolicies:r0,workspaceManager:P7,logger:g.logger,telemetry:g.telemetry,requestToolApproval:$0}}}import{existsSync as xZ,mkdirSync as MN,readdirSync as RN,rmdirSync as NN,rmSync as EN,unlinkSync as wN}from"node:fs";import{dirname as RK,join as L5}from"node:path";function Y0(){return new Date().toISOString()}function f5($){if(!$||!xZ($))return;try{wN($)}catch{}}function CN($){let W=d8($);if(W)return{rootSessionId:W.rootSessionId,fileStem:`${W.agentId}__${W.teamTaskId}`};let Z=n4($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:Z.agentId};return{rootSessionId:$,fileStem:$}}class qJ{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return L5(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let W=this.sessionArtifactsDir($);if(!xZ(W))MN(W,{recursive:!0});return W}sessionMessagesPath($){return L5(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionCompactionPath($){return L5(this.sessionArtifactsDir($),`${$}.compaction.json`)}sessionManifestPath($,W=!1){let Z=W?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return L5(Z,`${$}.json`)}removeSessionDirIfEmpty($){let W=this.sessionArtifactsDir($),Z=this.ensureSessionsDir();while(W.startsWith(Z)&&W!==Z){if(!xZ(W)){W=RK(W);continue}try{if(RN(W).length>0)break;NN(W)}catch{break}W=RK(W)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!xZ($))return;try{EN($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,W,Z){let{rootSessionId:Q,fileStem:J}=CN($),j=this.sessionArtifactsDir(Q);return{messagesPath:L5(j,`${J}.messages.json`)}}}import{resolveDocumentsExtensionPath as PN}from"@cline/shared/storage";U0();function NK($,W,Z,Q,J){if(Z)s9($.telemetry,{ulid:W,apiProvider:$.providerId,...J});else o9($.telemetry,{ulid:W,apiProvider:$.providerId,...J});SN($.telemetry,{workspacePath:Q})}function SN($,W){let Z=PN("Hooks"),Q=I$(W.workspacePath),J=new Map;for(let j of Q){let X=j.hookEventName??"unknown",Y=J.get(X)??{global:0,workspace:0};if(j.path===Z||j.path.startsWith(`${Z}/`))Y.global+=1;else Y.workspace+=1;J.set(X,Y)}for(let[j,X]of J.entries())YW($,j,X.global,X.workspace)}function EK($,W){for(let Z of W.mentions)jW($,Z,W.matchedFiles.includes(Z)?1:0,"file",!W.matchedFiles.includes(Z));for(let Z of W.matchedFiles)QW($,"file",Z.length);for(let Z of W.ignoredMentions)JW($,"file","not_found",Z)}var NL={};w(NL,{ProviderSettingsManager:()=>Y1});import{chmodSync as wL,existsSync as gY,mkdirSync as qv,readFileSync as Mv,renameSync as Rv,rmSync as Nv,writeFileSync as Ev}from"node:fs";import{basename as CL,dirname as mY}from"node:path";import{resolveProviderSettingsPath as wv}from"@cline/shared/storage";var q={};w(q,{writeModelsFileSync:()=>g9,writeHubDiscovery:()=>KQ,writeGlobalSettings:()=>q1,withHubStartupLock:()=>FQ,verifyHubConnection:()=>E1,updateMcpSettingsFileSync:()=>D1,updateMcpSettingsFile:()=>U6,updateMcpServerOAuthStateAsync:()=>x5,updateMcpServerOAuthState:()=>u2,updateLocalProvider:()=>L7,uninstallPlugin:()=>P9,uninstallMarketplaceSkill:()=>Q7,uninstallMarketplacePlugin:()=>J7,uninstallMarketplaceMcpServerFromSettings:()=>W7,uninstallMarketplaceEntry:()=>tX,truncateNotificationBody:()=>O9,truncateCommandOutput:()=>F2,toggleDisabledTool:()=>cW,toTeamProgressLifecycleEvent:()=>P6,toProviderConfig:()=>e0,toHubStatusUrl:()=>Aj,toHubHealthUrl:()=>AQ,toHookConfigFileName:()=>B5,syncStoredProviderRegistration:()=>GY,syncPluginMcpServersToSettings:()=>w9,summarizeUsageFromMessages:()=>p8,stripUtf8Bom:()=>Ov,stopLocalHubServerGracefully:()=>Nj,startLocalOAuthServer:()=>G1,startHubWebSocketServer:()=>H8,startHubServer:()=>Z_,startClineDeviceAuth:()=>u7,splitCoreSessionConfig:()=>l5,spawnDetachedHubServerWithRetry:()=>z6,spawnDetachedHubServer:()=>Oj,setTelemetryOptOutGlobally:()=>JH,setSdkLogger:()=>k7,setMcpServerDisabled:()=>v2,setDisabledTools:()=>f3,setDisabledPlugin:()=>KH,setCompactionStrategyGlobally:()=>VH,setAutoUpdateEnabledGlobally:()=>XH,sendHubCommand:()=>aU,sdkDebug:()=>s,saveProviderOAuthCredentials:()=>Y2,saveLocalProviderSettings:()=>LY,saveLocalProviderOAuthCredentials:()=>zY,sanitizeSessionToken:()=>C2,safeParseSettings:()=>yZ,safeCreateProviderConfig:()=>LJ,runSubprocessEvent:()=>x6,runHook:()=>m6,reviveTeamStateDates:()=>oW,restartLocalHubIfIdleAfterStartupTimeout:()=>fQ,resolveWorkspaceHubOwnerContext:()=>qA,resolveWorkflowsConfigSearchPaths:()=>P5,resolveSkillsConfigSearchPaths:()=>w5,resolveSharedHubOwnerContext:()=>u0,resolveSessionBackend:()=>ij,resolveRulesConfigSearchPaths:()=>C5,resolveProviderConfig:()=>F5,resolveProviderApiKeyFromSettings:()=>a7,resolveProductionHubOwnerContext:()=>j1,resolvePluginSkillDirectoriesFromPaths:()=>t1,resolvePluginConfigSearchPaths:()=>j5,resolveModelsRegistryPath:()=>k1,resolveMcpServerRegistrations:()=>$1,resolveMarketplaceMcpServerName:()=>b9,resolveLocalClineAuthToken:()=>MY,resolveHubUrl:()=>QX,resolveHubOwnerContext:()=>Q$,resolveHubEndpointOptions:()=>J1,resolveHubBuildId:()=>GQ,resolveHooksConfigSearchPaths:()=>Y5,resolveDisabledToolNames:()=>M1,resolveDisabledPluginPaths:()=>v4,resolveDefaultMcpSettingsPath:()=>J0,resolveDefaultHubPort:()=>T6,resolveDefaultHubPathname:()=>fj,resolveDefaultHubHost:()=>Lj,resolveCoreSelectedToolIds:()=>tW,resolveCoreDistinctId:()=>d0,resolveCompatibleLocalHubUrl:()=>Q9,resolveClineDir:()=>fA,resolveClineDataDir:()=>o2,resolveAndLoadAgentPlugins:()=>t8,resolveAgentPluginPaths:()=>s1,requestHubShutdown:()=>Z9,requestDesktopToolApproval:()=>IX,removePluginMcpServersFromSettings:()=>C9,rememberRecoverableLocalHubUrl:()=>n$,registerRemoteConfigSessionBlobUpload:()=>rQ,registerMcpServersFromSettingsFile:()=>d2,registerDisposable:()=>Lv,refreshProviderModelsFromSource:()=>fY,refreshOpenAICodexToken:()=>UW,refreshOcaToken:()=>fW,refreshClineToken:()=>FW,readSessionCheckpointHistory:()=>j8,readRemoteConfigSessionBlobUploadMetadata:()=>EX,readModelsFileSync:()=>$4,readHubDiscovery:()=>f0,readGlobalSettings:()=>N0,readCompactionStrategyGlobally:()=>YH,readBearerToken:()=>mQ,projectSessionCompactionState:()=>V2,probeHubServer:()=>J$,probeHubConnection:()=>nU,prewarmFileIndex:()=>hW,prewarmDetachedHubServer:()=>DQ,prepareRemoteConfigCoreIntegration:()=>CX,parseWorkflowConfigFromMarkdown:()=>E5,parseUserCommandEnvelope:()=>_v,parseSkillConfigFromMarkdown:()=>R5,parseSettings:()=>bZ,parseSessionCompactionState:()=>K1,parseRuleConfigFromMarkdown:()=>N5,parsePluginSource:()=>F7,parseMcpInstallArgs:()=>E9,parseHookEventPayload:()=>g6,parseConfiguredAgentConfig:()=>Y9,normalizeWorkspacePath:()=>R1,normalizeUserInput:()=>Dv,normalizeSdkError:()=>Uv,normalizeRuntimeCapabilities:()=>C0,normalizeProviderId:()=>J6,normalizeOAuthProvider:()=>OY,normalizeHubWebSocketUrl:()=>a$,noopBasicLogger:()=>Av,migrateLegacyProviderSettings:()=>d9,mergeRulesForSystemPrompt:()=>F6,mergeAgentHooks:()=>I2,marketplaceEntryKey:()=>sX,markLocalProviderEnabled:()=>UY,makeTeamTaskSubSessionId:()=>i4,makeSubSessionId:()=>u8,loginOpenAICodex:()=>Y4,loginOcaOAuth:()=>G4,loginLocalProvider:()=>TY,loginClineOAuth:()=>j4,loginAndSaveProviderOAuthCredentials:()=>F4,loginAndSaveLocalProviderOAuthCredentials:()=>qY,loadOpenTelemetryAdapter:()=>cm,loadMcpSettingsFile:()=>m2,loadLlmsConfigFromFile:()=>kY,loadConfiguredAgentConfigs:()=>E6,loadAgentPluginsFromPathsWithDiagnostics:()=>b2,loadAgentPluginsFromPaths:()=>QZ,loadAgentPluginFromPath:()=>Q5,listSessionHistoryFromBackend:()=>Hj,listPluginToolsWithDiagnostics:()=>JQ,listPluginTools:()=>v5,listMcpServerOAuthStatuses:()=>g5,listLocalProviders:()=>DY,listHookConfigFiles:()=>I$,isToolDisabledGlobally:()=>BH,isTelemetryOptedOutGlobally:()=>vW,isSessionNotFoundError:()=>Z$,isRuleEnabled:()=>iZ,isPluginDisabledGlobally:()=>GH,isOfficialPluginSlug:()=>K7,isOAuthProvider:()=>z$,isMarketplaceSkillInstalled:()=>Z7,isLocalHubOrigin:()=>NX,isLocalHubHostName:()=>vQ,isHubReconnectableTransportError:()=>Mj,isHubCommandTimeoutError:()=>LQ,isDiscoveryFilePresent:()=>TA,isClinePassLimitMessage:()=>Wv,isClinePassLimitError:()=>$v,isClineOrgIndividualInferenceSubscriptionMessage:()=>em,isClineOrgIndividualInferenceSubscriptionError:()=>tm,isClineNotSubscribedMessage:()=>sm,isClineNotSubscribedError:()=>om,isClineAccountActionRequest:()=>gZ,isBuiltInProviderId:()=>DJ,isAutoUpdateEnabledGlobally:()=>jH,installPlugin:()=>JY,installMcpServer:()=>xX,identifyAccount:()=>H1,hashSecret:()=>R0,hasMcpSettingsFile:()=>$$,getValidOpenAICodexCredentials:()=>V4,getValidOcaCredentials:()=>K4,getValidClineCredentials:()=>X4,getProviderOAuthCredentialsFromSettings:()=>A4,getProviderConfigFields:()=>RY,getProviderConfig:()=>TZ,getProviderAuthStorageId:()=>n7,getProviderAuthHandler:()=>H0,getPersistedProviderApiKey:()=>R8,getMcpServerOAuthState:()=>c2,getMarketplaceSkillCandidates:()=>y9,getLocalProviderModels:()=>_Y,getLiveModelsCatalog:()=>Q6,getGlobalMarketplaceSkillPaths:()=>h9,getFileIndex:()=>p1,getCurrentContextSize:()=>c3,getCoreHeadlessToolNames:()=>r4,getCoreDefaultEnabledToolIds:()=>sW,getCoreBuiltinToolCatalog:()=>E2,getCoreAcpToolNames:()=>eW,getClinePassSubscriptionUrl:()=>am,getClineOrgIndividualInferenceSubscriptionMessage:()=>nm,getClineNotSubscribedMessage:()=>im,getClineDefaultSystemPrompt:()=>Zv,generateWorkspaceInfoWithDiagnostics:()=>D5,generateWorkspaceInfo:()=>Y6,formatRulesForSystemPrompt:()=>K6,formatProviderOAuthApiKey:()=>o7,formatDisplayUserInput:()=>Fv,findInstalledGlobalMarketplaceSkillName:()=>k9,findCheckpointForRun:()=>k6,filterExtensionToolRegistrations:()=>dW,filterDisabledTools:()=>i1,filterDisabledPluginPaths:()=>uW,fetchClineRecommendedModels:()=>yY,extractClinePassLimitMessage:()=>rm,executeClineAccountAction:()=>mZ,ensureHubWebSocketServer:()=>cQ,ensureHubServer:()=>Q_,ensureDetachedHubServer:()=>CA,ensureCustomProvidersLoadedSync:()=>c9,ensureCustomProvidersLoaded:()=>u9,ensureCompatibleLocalHubUrl:()=>e2,enrichPromptWithMentions:()=>h8,emptyWorkspaceManifest:()=>Hv,emptyStoredProviderSettings:()=>v$,discoverPluginModulePaths:()=>X5,disablePluginMcpServersInSettings:()=>cX,deriveSubsessionStatus:()=>a4,deleteLocalProvider:()=>f7,defineLlmsConfig:()=>hY,createWorkflowsConfigDefinition:()=>y5,createUserInstructionConfigService:()=>c$,createToolPoliciesWithPreset:()=>IW,createTool:()=>Bv,createTeamName:()=>aQ,createSubprocessHooks:()=>PQ,createSpawnAgentTool:()=>y$,createSkillsConfigDefinition:()=>S5,createShellTool:()=>h4,createShellExecutor:()=>A2,createSessionHost:()=>y6,createSessionCompactionState:()=>N8,createRuntimeHost:()=>y6,createRulesConfigDefinition:()=>b5,createRemoteConfigSessionMessagesArtifactUploader:()=>wX,createProviderConfig:()=>_J,createOpenTelemetryTelemetryService:()=>L9,createOAuthClientCallbacks:()=>B6,createMcpTools:()=>f6,createLocalHubScheduleRuntimeHandlers:()=>uQ,createLlmsSdk:()=>xY,createInitialAccumulatedUsage:()=>q0,createInMemoryHubOwnerContext:()=>OA,createHubServerUrl:()=>_1,createHubAuthToken:()=>HQ,createHookConfigFileHooks:()=>H5,createHookConfigFileExtension:()=>Z6,createHookAuditHooks:()=>W6,createEditorExecutor:()=>L2,createDisabledMcpToolPolicy:()=>m5,createDisabledMcpToolPolicies:()=>QQ,createDelegatedAgentConfigProvider:()=>S$,createDelegatedAgent:()=>b$,createDefaultToolsWithPreset:()=>xW,createDefaultTools:()=>E$,createDefaultShellExecutor:()=>g4,createDefaultMcpServerClientFactory:()=>_6,createDefaultExecutors:()=>k8,createCoreSettingsService:()=>p2,createCoreSessionSnapshot:()=>w1,createContributionRegistry:()=>Vv,createContextCompactionPrepareTurn:()=>q4,createConfiguredTelemetryService:()=>B$,createConfiguredTelemetryHandle:()=>t$,createConfiguredAgentTools:()=>w6,createCompactionStateAwarePrepareTurn:()=>M4,createClineTelemetryServiceMetadata:()=>Yv,createClineTelemetryServiceConfig:()=>Xv,createCheckpointComparePlan:()=>NQ,createBuiltinTools:()=>w2,createApplyPatchExecutor:()=>_2,createAgentTeamsTools:()=>N2,createAgentRuntime:()=>zv,createAgentHooksExtension:()=>e8,connectToHub:()=>yQ,computePatchChanges:()=>b8,completeClineDeviceAuth:()=>d7,compareCheckpointToWorkspace:()=>A9,collectPluginMcpOAuthCandidates:()=>A7,clearPrivateModelsCatalogCache:()=>AJ,clearLiveModelsCatalogCache:()=>FJ,clearHubDiscovery:()=>c0,captureWorkspacePathResolved:()=>JV,captureWorkspaceInitialized:()=>n9,captureWorkspaceInitError:()=>a9,captureToolUsage:()=>f8,captureTokenUsage:()=>t9,captureTaskRestarted:()=>s9,captureTaskCreated:()=>o9,captureTaskCompleted:()=>Z4,captureSubagentExecution:()=>J4,captureSkillUsed:()=>$W,captureSdkError:()=>jv,captureProviderConfigured:()=>XV,captureProviderApiError:()=>Q4,captureModeSwitch:()=>e9,captureMistakeLimitReached:()=>ZW,captureMentionUsed:()=>QW,captureMentionSearchResults:()=>jW,captureMentionFailed:()=>JW,captureHookDiscovery:()=>YW,captureExtensionActivated:()=>QV,captureDiffEditFailure:()=>WW,captureConversationTurnEvent:()=>L8,captureCompactionSkipped:()=>BW,captureCompactionExecuted:()=>VW,captureAuthSucceeded:()=>m1,captureAuthStarted:()=>g1,captureAuthLoggedOut:()=>f$,captureAuthFailed:()=>v1,captureAgentUnexpectedReasoningTokens:()=>ZV,captureAgentTeamCreated:()=>XW,captureAgentCreated:()=>O$,buildWorkspaceMetadata:()=>_5,buildTeamProgressSummary:()=>C6,buildSdkErrorProperties:()=>Qv,buildRemoteConfigSessionBlobUploadMetadata:()=>lQ,buildMcpInstallTransport:()=>oQ,buildDelegatedAgentConfig:()=>M2,buildConnectionUpdate:()=>E3,buildConfiguredAgentToolName:()=>V9,buildConfiguredAgentToolDescriptors:()=>B9,buildCheckpointWorkspaceDiff:()=>EQ,bootstrapAgentTeams:()=>c8,authorizeMcpServerOAuth:()=>eZ,addLocalProvider:()=>AY,accumulateUsageTotals:()=>L0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>M5,UnifiedConfigFileWatcher:()=>g2,ToolPresets:()=>s0,TelemetryService:()=>u6,TelemetryLoggerSink:()=>_9,TEAM_TOOL_NAMES:()=>v8,SubprocessSandbox:()=>a8,StructuredCommandInputSchema:()=>G2,StoredProviderSettingsSchema:()=>X6,StoredProviderSettingsEntrySchema:()=>hZ,SqliteTeamStore:()=>G8,SqliteSessionStore:()=>P1,SessionVersioningService:()=>W2,SessionVersioningError:()=>p0,SessionSource:()=>F0,SessionNotFoundError:()=>W$,SapSettingsSchema:()=>CZ,SKILLS_CONFIG_DIRECTORY_NAME:()=>q5,SESSION_STATUSES:()=>o4,SESSION_NOT_FOUND_ERROR_CODE:()=>r2,SDK_ERROR_TELEMETRY_EVENT:()=>fv,RuntimeOAuthTokenManager:()=>a6,RpcClineAccountService:()=>T5,RemoteRuntimeHost:()=>R6,ReasoningSettingsSchema:()=>RZ,RULES_CONFIG_DIRECTORY_NAME:()=>rZ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>pQ,ProviderSettingsSchema:()=>g$,ProviderSettingsManager:()=>Y1,ProviderProtocolSchema:()=>zZ,ProviderIdSchema:()=>U5,ProviderClientSchema:()=>qZ,PatchActionType:()=>D2,OpenTelemetryProvider:()=>d6,OcaSettingsSchema:()=>PZ,OPENAI_COMPATIBLE_PROVIDERS:()=>K5,OAuthReauthRequiredError:()=>K8,NodeHubClient:()=>L1,NoOpFeatureFlagsProvider:()=>J8,NativeHubTransportAdapter:()=>R9,ModelCatalogSettingsSchema:()=>SZ,McpSettingsUpdateSkippedError:()=>A6,McpSettingsMutatorPurityError:()=>u$,McpSettingsLockTimeoutError:()=>d$,MAX_COMMAND_OUTPUT_CHARS:()=>u1,LocalRuntimeHost:()=>y1,Llms:()=>um,InMemoryWorkspaceManager:()=>V6,InMemoryMcpManager:()=>l2,HubUIClient:()=>XX,HubTransportError:()=>k0,HubSessionClient:()=>jX,HubServerTransport:()=>p6,HubScheduleService:()=>c6,HubScheduleCommandService:()=>v6,HubRuntimeHost:()=>j$,HubCommandError:()=>q6,HookEventPayloadSchema:()=>CQ,HookEventNameSchema:()=>wQ,HookConfigFileName:()=>$6,HOOK_CONFIG_FILE_EVENT_MAP:()=>V5,HOOKS_CONFIG_DIRECTORY_NAME:()=>BZ,GlobalSettingsSchema:()=>m4,GcpSettingsSchema:()=>EZ,FileTeamPersistenceStore:()=>z7,FeatureFlagsService:()=>Q8,FeatureFlagDefaultValue:()=>Kv,FEATURE_FLAGS:()=>Gv,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>w7,DefaultToolNames:()=>z0,DefaultRuntimeBuilder:()=>n6,DefaultLlmsSdk:()=>p9,DEFAULT_MODELS_CATALOG_URL:()=>_Z,DEFAULT_HUB_PORT:()=>Dj,DEFAULT_HUB_PATHNAME:()=>_j,DEFAULT_HUB_HOST:()=>Uj,CoreSettingsService:()=>l$,CoreSessionService:()=>b1,ContributionRegistry:()=>Jv,CommandExitError:()=>d1,ClinePassLimitError:()=>pm,ClineOrgIndividualInferenceSubscriptionError:()=>lm,ClineNotSubscribedError:()=>dm,ClineCore:()=>U9,ClineAccountService:()=>O5,ChatViewStateSchema:()=>SY,ChatSummarySchema:()=>E7,ChatSessionStatusSchema:()=>M7,ChatSessionConfigSchema:()=>q7,ChatMessageSchema:()=>N7,ChatMessageRoleSchema:()=>R7,CORE_TELEMETRY_EVENTS:()=>v,CORE_BUILD_VERSION:()=>l9,BrowserWebSocketHubAdapter:()=>M9,BUILT_IN_PROVIDER_IDS:()=>UJ,BUILT_IN_PROVIDER:()=>A5,AzureSettingsSchema:()=>wZ,AwsSettingsSchema:()=>NZ,AuthSettingsSchema:()=>MZ,AgentTeamsRuntime:()=>Z8,AgentTeam:()=>b6,Agent:()=>Tv,ALL_DEFAULT_TOOL_NAMES:()=>q$});R(q,M20);import*as um from"@cline/llms";import{ClineNotSubscribedError as dm,ClineOrgIndividualInferenceSubscriptionError as lm,ClinePassLimitError as pm,extractClinePassLimitMessage as rm,getClineNotSubscribedMessage as im,getClineOrgIndividualInferenceSubscriptionMessage as nm,getClinePassSubscriptionUrl as am,isClineNotSubscribedError as om,isClineNotSubscribedMessage as sm,isClineOrgIndividualInferenceSubscriptionError as tm,isClineOrgIndividualInferenceSubscriptionMessage as em,isClinePassLimitError as $v,isClinePassLimitMessage as Wv}from"@cline/llms";import{buildClineSystemPrompt as Zv,buildSdkErrorProperties as Qv,ContributionRegistry as Jv,captureSdkError as jv,createClineTelemetryServiceConfig as Xv,createClineTelemetryServiceMetadata as Yv,createContributionRegistry as Vv,createTool as Bv,emptyWorkspaceManifest as Hv,FEATURE_FLAGS as Gv,FeatureFlagDefaultValue as Kv,formatDisplayUserInput as Fv,noopBasicLogger as Av,normalizeSdkError as Uv,normalizeUserInput as Dv,parseUserCommandEnvelope as _v,registerDisposable as Lv,SDK_ERROR_TELEMETRY_EVENT as fv,stripUtf8Bom as Ov}from"@cline/shared";import"@cline/shared/storage";var CK={};w(CK,{isClineAccountActionRequest:()=>gZ,executeClineAccountAction:()=>mZ,RpcClineAccountService:()=>T5,ClineAccountService:()=>O5});function bN($){if(typeof $!=="object"||$===null||!("error"in $))return;let W=$.error;return typeof W==="string"&&W.trim()?W:void 0}function wK($,W,Z){let Q=bN(Z);if(Q)return Q;let J=W.trim();if(J){let j=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${j}`}return`Cline account request failed with status ${$}`}class O5{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let W=$.apiBaseUrl.trim();if(!W)throw Error("apiBaseUrl is required");this.apiBaseUrl=W,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 W=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(W)}/balance`)}async fetchUsageTransactions($){let W=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(W)}/usages`)).items??[]}async fetchPaymentTransactions($){let W=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(W)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let W=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)W.searchParams.set("type",$.type);return this.request(`${W.pathname}${W.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let W=$.trim();if(!W)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(W)}`)}async fetchOrganizationBalance($){let W=$.trim();if(!W)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(W)}/balance`)}async fetchOrganizationUsageTransactions($){let W=$.organizationId.trim();if(!W)throw Error("organizationId is required");let Z=await this.resolveOrganizationMemberId(W,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(W)}/members/${encodeURIComponent(Z)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let W=$?.trim();if(W)return W;let Q=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(Q)return Q;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,W){let Z=W?.trim();if(Z)return Z;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let X=(await this.fetchUserOrganizations()).find((Y)=>Y.organizationId===$)?.memberId;if(!X?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return X}async request($,W){let Z=(await this.getAuthTokenFn())?.trim();if(!Z)throw Error("No Cline account auth token found");let Q=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,j=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let X=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:W?.method??"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json",...Q??{}},body:W?.body!==void 0?JSON.stringify(W.body):void 0,signal:J.signal});if(X.status===204||W?.expectNoContent){if(!X.ok)throw Error(`Cline account request failed with status ${X.status}`);return}let Y=await X.text(),V;if(Y.trim())try{V=JSON.parse(Y)}catch{if(!X.ok)throw Error(wK(X.status,Y,void 0));throw Error("Cline account response was not valid JSON")}if(!X.ok)throw Error(wK(X.status,Y,V));if(typeof V==="object"&&V!==null){let B=V;if(typeof B.success==="boolean"){if(!B.success)throw Error(B.error||"Cline account request failed");return B.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(j)}}}function gZ($){return $.action==="clineAccount"}async function mZ($,W){switch($.operation){case"fetchMe":return W.fetchMe();case"fetchBalance":return W.fetchBalance($.userId);case"fetchUsageTransactions":return W.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return W.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return W.fetchUserOrganizations();case"fetchOrganizationBalance":return W.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return W.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await W.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return W.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class T5{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 W=$.trim();if(!W)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:W})}async fetchOrganizationUsageTransactions($){let W=$.organizationId.trim();if(!W)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:W,...$.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 PK={};w(PK,{createOAuthClientCallbacks:()=>B6});function B6($){return{onAuth:({url:W,instructions:Z})=>{if($.onOutput?.(Z??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(W)).catch((Q)=>{$.onOpenUrlError?.({url:W,error:Q})})}catch(Q){$.onOpenUrlError?.({url:W,error:Q})}$.onOutput?.(W)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var mU={};w(mU,{ClineCore:()=>U9});function SK($){if($===!0)return{};if(!$)return;return $}function bK($){if($==="user")return"global";return $}class MJ{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let W=this.getService().ingestEvent($);return{event:W.event,duplicate:W.duplicate,matchedSpecIds:W.matchedSpecs.map((Z)=>Z.specId),queuedRuns:W.queuedRuns,suppressions:W.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function yK($){let{host:W}=$;return{async startSession(Z){let Q=(Z.cwd?.trim()||Z.workspaceRoot).trim(),J=await W.startSession({source:Z.source?.trim()||F0.CLI,interactive:!1,config:{providerId:J6(Z.provider),modelId:Z.model,apiKey:Z.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:kN(Z),maxIterations:Z.maxIterations,enableTools:Z.enableTools!==!1,enableSpawnAgent:Z.enableSpawn!==!1,enableAgentTeams:Z.enableTeams!==!1,disableMcpSettingsTools:Z.disableMcpSettingsTools,missionLogIntervalSteps:Z.missionStepInterval,missionLogIntervalMs:Z.missionTimeIntervalMs},toolPolicies:Z.toolPolicies??{"*":{autoApprove:Z.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Z.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Z,Q){let J=await W.runTurn({sessionId:Z,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((j)=>j.content),delivery:Q.delivery});if(!J)throw Error("ClineCore automation runtime returned no result");return{result:hN(J)}},async abortSession(Z){return await W.abort(Z,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Z){return await W.stopSession(Z),{applied:!0}}}}function vZ($){let W=yN($.automationService,$.automation),Z=$.context?.client??($.clientName?{name:$.clientName}:void 0),Q=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),J=$.context?.logger??$.logger,j=$.context?.telemetry??$.telemetry;if(!W&&!Z&&!Q&&!J&&!j)return $.context;return{...$.context??{},...Z?{client:Z}:{},...Q?{user:Q}:{},...J?{logger:J}:{},...j?{telemetry:j}:{},...W?{automation:W}:{}}}function yN($,W){if(!$)return;return{ingestEvent:(Z)=>{W.ingestEvent(Z)}}}function hN($){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((W)=>({name:W.name,input:W.input,output:W.output,error:W.error,durationMs:W.durationMs}))}}function kN($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var xF={};w(xF,{createCoreSettingsService:()=>p2,CoreSettingsService:()=>l$});import{existsSync as u5,readFileSync as zw}from"node:fs";import{basename as cJ,dirname as PF,extname as qw,isAbsolute as yF,join as Mw,relative as hF,resolve as SF}from"node:path";var nK={};w(nK,{resolveWorkflowsConfigSearchPaths:()=>P5,resolveSkillsConfigSearchPaths:()=>w5,resolveRulesConfigSearchPaths:()=>C5,parseWorkflowConfigFromMarkdown:()=>E5,parseSkillConfigFromMarkdown:()=>R5,parseRuleConfigFromMarkdown:()=>N5,createWorkflowsConfigDefinition:()=>y5,createUserInstructionConfigService:()=>c$,createSkillsConfigDefinition:()=>S5,createRulesConfigDefinition:()=>b5,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>M5,UnifiedConfigFileWatcher:()=>g2,SKILLS_CONFIG_DIRECTORY_NAME:()=>q5,RULES_CONFIG_DIRECTORY_NAME:()=>rZ});import{createHash as IN}from"node:crypto";import{watch as xN}from"node:fs";import{readdir as gN,readFile as mN}from"node:fs/promises";import{join as vN}from"node:path";function cN($){return IN("sha1").update($).digest("hex")}function IK($){return Boolean($&&typeof $==="object"&&"code"in $)}function hK($){return IK($)&&$.code==="ENOENT"}function kK($){return IK($)&&($.code==="EACCES"||$.code==="EPERM")}class g2{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($,W){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=W?.debounceMs??75,this.emitParseErrors=W?.emitParseErrors??!1;for(let Z of $){if(this.definitionsByType.has(Z.type))throw Error(`Duplicate unified config definition type '${Z.type}'.`);this.definitionsByType.set(Z.type,Z),this.recordsByType.set(Z.type,new Map),this.discoveredDirectoriesByType.set(Z.type,new Set);for(let Q of Z.directories){let J=this.baseTypesByDirectory.get(Q);if(J)J.add(Z.type);else this.baseTypesByDirectory.set(Q,new Set([Z.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let W=this.definitionsByType.get($);if(!W)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(W)})}getSnapshot($){let W=this.recordsByType.get($);return new Map([...W?.entries()??[]].map(([Z,Q])=>[Z,{...Q}]))}getAllSnapshots(){let $=new Map;for(let[W,Z]of this.recordsByType.entries())$.set(W,new Map([...Z.entries()].map(([Q,J])=>[Q,{...J}])));return $}emit($){for(let W of this.listeners)W($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[W,Z]of this.watchersByDirectory.entries()){if($.has(W))continue;Z.close(),this.watchersByDirectory.delete(W)}this.watchedTypesByDirectory=$;for(let W of $.keys()){if(this.watchersByDirectory.has(W))continue;try{let Z=xN(W,()=>{let Q=this.watchedTypesByDirectory.get(W);if(!Q)return;for(let J of Q)this.pendingTypes.add(J);this.scheduleFlush()});this.watchersByDirectory.set(W,Z),Z.on("error",(Q)=>{let J=this.watchedTypesByDirectory.get(W);if(!J)return;for(let j of J)this.emit({kind:"error",type:j,error:Q,filePath:W})})}catch(Z){if(!hK(Z)&&!kK(Z)){let Q=$.get(W);if(!Q)continue;for(let J of Q)this.emit({kind:"error",type:J,error:Z,filePath:W})}}}}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 W of $){let Z=this.definitionsByType.get(W);if(!Z)continue;await this.refreshTypeInternal(Z)}})},this.debounceMs)}async refreshTypeInternal($){let{records:W,discoveredDirectories:Z}=await this.loadDefinition($),Q=this.recordsByType.get($.type)??new Map;for(let[J,j]of Q.entries()){if(W.has(J))continue;this.emit({kind:"remove",type:$.type,id:J,filePath:j.filePath})}for(let[J,j]of W.entries()){let X=Q.get(J);if(X&&X.filePath===j.filePath&&X.fingerprint===j.fingerprint)continue;this.emit({kind:"upsert",record:{type:j.type,id:J,item:j.item,filePath:j.filePath}})}if(this.recordsByType.set($.type,W),this.discoveredDirectoriesByType.set($.type,Z),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let W=new Map,Z=new Set;for(let Q of $.directories){Z.add(Q);let J=$.discoverFiles?await $.discoverFiles(Q):await this.readDirectoryFileCandidates(Q);for(let j of J){let{fileName:X,filePath:Y}=j;if(Z.add(j.directoryPath),$.includeFile&&!$.includeFile(X,Y))continue;try{let V=await mN(Y,"utf8"),B={type:$.type,directoryPath:j.directoryPath,fileName:X,filePath:Y,content:V},H=$.parseFile(B),G=$.resolveId(H,B).trim();if(!G)continue;W.set(G,{type:$.type,id:G,item:H,filePath:Y,fingerprint:cN(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:Y})}}}return{records:W,discoveredDirectories:Z}}buildDesiredTypesByDirectory(){let $=new Map;for(let[W,Z]of this.baseTypesByDirectory.entries())$.set(W,new Set(Z));for(let[W,Z]of this.discoveredDirectoriesByType.entries())for(let Q of Z){let J=$.get(Q);if(J)J.add(W);else $.set(Q,new Set([W]))}return $}async readDirectoryFileCandidates($){try{return(await gN($,{withFileTypes:!0})).filter((Z)=>Z.isFile()).map((Z)=>({directoryPath:$,fileName:Z.name,filePath:vN($,Z.name)})).sort((Z,Q)=>Z.fileName.localeCompare(Q.fileName))}catch(W){if(hK(W)||kK(W))return[];throw W}}}import{readdir as NJ,readFile as uN,stat as RJ}from"node:fs/promises";import{basename as e1,dirname as dN,extname as uZ,join as v0,resolve as z5}from"node:path";import{stripUtf8Bom as lN}from"@cline/shared";import{AGENTS_RULES_FILE_NAME as xK,RULES_CONFIG_DIRECTORY_NAME as rZ,resolveGlobalAgentsRulesPath as pN,resolveRulesConfigSearchPaths as rN,resolveSkillsConfigSearchPaths as iN,resolveWorkflowsConfigSearchPaths as nN,SKILLS_CONFIG_DIRECTORY_NAME as q5,WORKFLOWS_CONFIG_DIRECTORY_NAME as M5}from"@cline/shared/storage";import aN from"yaml";var cZ="SKILL.md",oN="managed.json",sN=new Set([".md",".markdown",".txt"]);function EJ($){return $.trim().toLowerCase()}function H6($){let W=$;return W?.code==="ENOENT"||W?.code==="EACCES"||W?.code==="EPERM"||W?.code==="ELOOP"}function dZ($){return sN.has(uZ($).toLowerCase())}function gK($){let W=[],Z=new Set;for(let Q of $){let J=z5(Q);if(Z.has(J))continue;Z.add(J),W.push(Q)}return W}function tN($){let W=[...$?.directories??w5($?.workspacePath)];if($?.pluginSkillDirectories)W.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)W.push(...pG({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return gK(W)}async function wJ($){try{let W=await NJ($,{withFileTypes:!0}),Z=[];for(let Q of W){if(!Q.isDirectory())continue;let J=v0($,Q.name),j=v0(J,oN);try{let X=await uN(j,"utf8"),Y=JSON.parse(X);if(Y&&typeof Y==="object")Z.push(J)}catch(X){if(H6(X))continue;if(X?.name==="SyntaxError")continue;throw X}}return Z.sort((Q,J)=>Q.localeCompare(J))}catch(W){if(H6(W))return[];throw W}}function CJ($){let W=lN($),Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=W.match(Z);if(!Q)return{data:{},body:W,hadFrontmatter:!1};let[,J,j]=Q;try{let X=aN.parse(J);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:W,hadFrontmatter:!0,parseError:Y}}}function lZ($,W,Z){if($===void 0||$===null){if(Z)throw Error(`Missing required frontmatter field '${W}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${W}' must be a string.`);let Q=$.trim();if(!Q&&Z)throw Error(`Frontmatter field '${W}' cannot be empty.`);return Q||void 0}function G6($,W){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${W}' must be a boolean.`);return $}function eN($,W){if(e1($.filePath).toLowerCase()!==xK.toLowerCase())return e1($.filePath,uZ($.filePath));if(W&&z5($.filePath)===z5(W,xK))return"Workspace AGENTS.md";if(z5($.filePath)===z5(pN()))return"Global AGENTS.md";return e1($.filePath,uZ($.filePath))}function R5($,W){let{data:Z,body:Q,parseError:J}=CJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let j=Q.trim();if(!j)throw Error("Missing instructions body in skill file.");let Y=lZ(Z.name,"name",!1)??W.trim();if(!Y)throw Error("Missing skill name.");return{name:Y,description:lZ(Z.description,"description",!1),disabled:G6(Z.disabled,"disabled")??(G6(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function N5($,W){let{data:Z,body:Q,parseError:J}=CJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let j=Q.trim();if(!j)throw Error("Missing instructions body in rule file.");let X=lZ(Z.name,"name",!1)??W.trim();if(!X)throw Error("Missing rule name.");return{name:X,disabled:G6(Z.disabled,"disabled")??(G6(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function E5($,W){let{data:Z,body:Q,parseError:J}=CJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let j=Q.trim();if(!j)throw Error("Missing instructions body in workflow file.");let X=lZ(Z.name,"name",!1)??W.trim();if(!X)throw Error("Missing workflow name.");return{name:X,disabled:G6(Z.disabled,"disabled")??(G6(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function w5($){return iN($)}function C5($){return rN($)}function P5($){return nN($)}async function mK($){if(e1($)===".cline"){let W=await wJ($);return(await Promise.all(W.map((Q)=>mK(v0(Q,q5))))).flat()}try{let W=await NJ($,{withFileTypes:!0}),Z=[];for(let Q of W){if(Q.isFile()&&Q.name===cZ){Z.push({directoryPath:$,fileName:Q.name,filePath:v0($,Q.name)});continue}let J=v0($,Q.name);if(Q.isDirectory()||Q.isSymbolicLink()&&await RJ(J).then((X)=>X.isDirectory()).catch((X)=>{if(H6(X))return!1;throw X}))Z.push({directoryPath:J,fileName:cZ,filePath:v0(J,cZ)})}return Z}catch(W){if(H6(W))return[];throw W}}async function pZ($){if(e1($)===".cline"){let W=await wJ($);return(await Promise.all(W.map((Q)=>pZ(v0(Q,"rules.md"))))).flat()}try{if((await RJ($)).isFile())return[{directoryPath:dN($),fileName:e1($),filePath:$}]}catch(W){if(!H6(W))throw W}try{let Z=(await NJ($,{withFileTypes:!0})).filter((J)=>J.isFile()&&dZ(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:v0($,J.name)})),Q=v0($,"AGENTS.md");try{if((await RJ(Q)).isFile()){if(!Z.some((X)=>X.fileName==="AGENTS.md"))Z.push({directoryPath:$,fileName:"AGENTS.md",filePath:Q})}}catch{}return Z}catch(W){if(H6(W))return[];throw W}}async function $E($){if(e1($)===".cline"){let W=await wJ($);return(await Promise.all(W.map((Q)=>pZ(v0(Q,M5))))).flat()}return pZ($)}function S5($){let W=tN($),Z=$?.workspacePath?v0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Z?gK([...W,Z]):W,discoverFiles:mK,includeFile:(Q)=>Q===cZ,parseFile:(Q)=>R5(Q.content,e1(Q.directoryPath)),resolveId:(Q)=>EJ(Q.name)}}function b5($){let W=$?.directories??C5($?.workspacePath),Z=$?.workspacePath?v0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Z?[...W,Z]:W,discoverFiles:pZ,includeFile:(Q,J)=>Q===".clinerules"||dZ(Q)||dZ(J),parseFile:(Q)=>N5(Q.content,eN(Q,$?.workspacePath)),resolveId:(Q)=>EJ(Q.name)}}function y5($){let W=$?.directories??P5($?.workspacePath),Z=$?.workspacePath?v0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Z?[...W,Z]:W,discoverFiles:$E,includeFile:(Q)=>dZ(Q),parseFile:(Q)=>E5(Q.content,e1(Q.filePath,uZ(Q.filePath))),resolveId:(Q)=>EJ(Q.name)}}function vK($){let W=[S5($?.skills),b5($?.rules),y5($?.workflows)];return new g2(W,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as cK}from"@cline/shared";function WE($,W){if($.description?.trim())return cK($.description,".");if(W==="workflow")return;return cK($.instructions,".")}function ZE($){return $.disabled!==!0}function uK($,W){return[...$.getSnapshot(W).entries()].map(([Z,Q])=>({id:Z,record:Q})).filter(({record:Z})=>ZE(Z.item)).map(({id:Z,record:Q})=>({id:Z,name:Q.item.name,instructions:Q.item.instructions,description:WE(Q.item,W),kind:W})).sort((Z,Q)=>Z.name.localeCompare(Q.name))}function h5($){let W=new Map;for(let Z of[...uK($,"workflow"),...uK($,"skill")])if(!W.has(Z.name))W.set(Z.name,Z);return[...W.values()].sort((Z,Q)=>Z.name.localeCompare(Q.name))}function dK($,W){if(!$.startsWith("/")||$.length<2)return $;let Z=$.match(/^\/(\S+)/);if(!Z)return $;let Q=Z[1];if(!Q)return $;let J=Q.length+1,j=$.slice(J),X=h5(W).find((Y)=>Y.name===Q);return X?`${X.instructions}${j}`:$}var pK={};w(pK,{mergeRulesForSystemPrompt:()=>F6,loadRulesForSystemPromptFromWatcher:()=>PJ,listEnabledRulesFromWatcher:()=>lK,isRuleEnabled:()=>iZ,formatRulesForSystemPrompt:()=>K6});function iZ($){return $.disabled!==!0}function K6($){if($.length===0)return"";return`
|
|
210
210
|
|
|
211
211
|
# Rules
|
|
212
212
|
${$.map((Z)=>`## ${Z.name}
|
|
213
213
|
${Z.instructions}`).join(`
|
|
214
214
|
|
|
215
|
-
`)}`}function
|
|
215
|
+
`)}`}function F6($,W){let Z=$?.trim(),Q=W?.trim();if(Z&&Q)return`${Z}
|
|
216
216
|
|
|
217
|
-
${Q}`;return Z||Q||void 0}function
|
|
217
|
+
${Q}`;return Z||Q||void 0}function lK($){return[...$.getSnapshot("rule").values()].map((Z)=>Z.item).filter(iZ).sort((Z,Q)=>Z.name.localeCompare(Q.name))}function PJ($){return K6(lK($))}function nZ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function QE($){if(!$||$.length===0)return;let W=$.map(nZ).filter((Z)=>Z.length>0);return W.length>0?new Set(W):void 0}function JE($,W,Z){if(!Z)return!0;let Q=nZ($),J=nZ(W),j=Q.includes(":")?Q.split(":").at(-1)??Q:Q,X=J.includes(":")?J.split(":").at(-1)??J:J;return Z.has(Q)||Z.has(J)||Z.has(j)||Z.has(X)}function k5($,W){let Z=QE(W);return[...$.getSnapshot("skill").entries()].map(([J,j])=>{let X=j.item;return{id:J,name:X.name.trim(),description:X.description?.trim(),disabled:X.disabled===!0,skill:X}}).filter((J)=>JE(J.id,J.name,Z))}function jE($,W){return k5($,W).filter((Z)=>!Z.disabled).map((Z)=>Z.name.trim()).filter((Z)=>Z.length>0).sort((Z,Q)=>Z.localeCompare(Q))}function XE($,W,Z){let Q=nZ(W);if(!Q)return{error:"Missing skill name."};let J=k5($,Z),j=J.find((H)=>H.id===Q);if(j){let{skill:H}=j;if(H.disabled===!0)return{error:`Skill "${H.name}" is configured but disabled.`};return{id:j.id,skill:H}}let X=Q.includes(":")?Q.split(":").at(-1)??Q:Q,Y=J.filter(({id:H})=>{if(H===X)return!0;return H.endsWith(`:${X}`)}),V=Y.filter(({skill:H})=>H.disabled!==!0);if(V.length===1){let{id:H,skill:G}=V[0];return{id:H,skill:G}}if(V.length>1)return{error:`Skill "${W}" is ambiguous. Use one of: ${V.map(({id:H})=>H).join(", ")}`};if(Y.length===1){let{skill:H}=Y[0];return{error:`Skill "${H.name}" is configured but disabled.`}}if(Y.length>1)return{error:`Skill "${W}" is ambiguous, and all matches are disabled: ${Y.map(({id:H})=>H).join(", ")}`};let B=jE($,Z);return{error:B.length>0?`Skill "${W}" not found. Available skills: ${B.join(", ")}`:"No skills are currently available."}}function SJ($,W=Promise.resolve(),Z){let Q=new Set,J=async(j,X)=>{await W;let Y=XE($,j,Z);if("error"in Y)return Y.error;let{id:V,skill:B}=Y;if(Q.has(V))return`Skill "${B.name}" is already running.`;Q.add(V);try{let H=X?.trim(),G=H?`
|
|
218
218
|
<command-args>${H}</command-args>`:"",K=B.description?.trim()?`Description: ${B.description.trim()}
|
|
219
219
|
|
|
220
220
|
`:"";return`<command-name>${B.name}</command-name>${G}
|
|
221
221
|
<command-instructions>
|
|
222
222
|
${K}${B.instructions}
|
|
223
|
-
</command-instructions>`}finally{Q.delete(V)}};return Object.defineProperty(J,"configuredSkills",{get:()=>
|
|
223
|
+
</command-instructions>`}finally{Q.delete(V)}};return Object.defineProperty(J,"configuredSkills",{get:()=>k5($,Z).map(({skill:j,...X})=>X),enumerable:!0,configurable:!1}),J}function rK($){let W=$.watcherReady??Promise.resolve();return{name:"cline-user-instructions",manifest:{capabilities:[$.includeRules?"rules":void 0,$.registerSkillsTool?"tools":void 0,$.includeSkills||$.includeWorkflows?"commands":void 0].filter((Q)=>Boolean(Q))},async setup(Q){if(await W,$.includeRules)Q.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>PJ($.watcher)});if($.registerSkillsTool)Q.registerTool(U2(SJ($.watcher,W,$.allowedSkillNames)));for(let J of h5($.watcher).filter((j)=>j.kind==="skill"&&$.includeSkills||j.kind==="workflow"&&$.includeWorkflows))Q.registerCommand({name:J.name,description:J.description,handler:(j)=>{let X=j.trim();return X?`${J.instructions}
|
|
224
224
|
|
|
225
|
-
${X}`:J.instructions}})}}}class
|
|
226
|
-
${
|
|
225
|
+
${X}`:J.instructions}})}}}class iK{watcher;ready;stopped=!1;constructor($){this.watcher=vK($)}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(([W,Z])=>({type:$,id:W,filePath:Z.filePath,item:Z.item}))}listRuntimeCommands(){return h5(this.watcher)}resolveRuntimeSlashCommand($){return dK($,this.watcher)}hasConfiguredSkills($){return k5(this.watcher,$).some((W)=>!W.disabled)}createSkillsExecutor($){return SJ(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return rK({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function c$($){return new iK($)}import{readFile as YE,writeFile as VE}from"node:fs/promises";import{stripUtf8Bom as BE}from"@cline/shared";import oK from"yaml";function HE($){let W=BE($),Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=W.match(Z);if(!Q)return{data:{},body:W,hadFrontmatter:!1};let[,J,j]=Q,X=oK.parse(J);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:j,hadFrontmatter:!0}}function aK($,W){return`---
|
|
226
|
+
${oK.stringify($).trimEnd()}
|
|
227
227
|
---
|
|
228
|
-
${W}`}function
|
|
228
|
+
${W}`}function GE($,W){let{data:Z,body:Q,hadFrontmatter:J}=HE($);if(!J&&W)return $;if(W){if(delete Z.disabled,Z.enabled===!1)delete Z.enabled;if(Object.keys(Z).length===0)return Q;return aK(Z,Q)}return Z.disabled=!0,aK(Z,Q)}async function sK({filePath:$,enabled:W}){let Z=await YE($,"utf8"),Q=GE(Z,W);return await VE($,Q),{filePath:$,enabled:W,disabled:!W}}var NF={};w(NF,{updateMcpSettingsFileSync:()=>D1,updateMcpSettingsFile:()=>U6,updateMcpServerOAuthStateAsync:()=>x5,updateMcpServerOAuthState:()=>u2,setMcpServerDisabled:()=>v2,resolvePluginMcpServerRegistrations:()=>WQ,resolveMcpServerRegistrations:()=>$1,resolveDefaultMcpSettingsPath:()=>J0,registerMcpServersFromSettingsFile:()=>d2,normalizePluginMcpServerRegistration:()=>vJ,loadMcpSettingsFile:()=>m2,listMcpServerOAuthStatuses:()=>g5,hasMcpSettingsFile:()=>$$,getMcpServerOAuthState:()=>c2,createMcpTools:()=>f6,createDisabledMcpToolPolicy:()=>m5,createDisabledMcpToolPolicies:()=>QQ,createDefaultMcpServerClientFactory:()=>_6,authorizeMcpServerOAuth:()=>eZ,McpSettingsUpdateSkippedError:()=>A6,McpSettingsMutatorPurityError:()=>u$,McpSettingsLockTimeoutError:()=>d$,InMemoryMcpManager:()=>l2});import{spawn as oE}from"node:child_process";import{StringDecoder as OF}from"node:string_decoder";import{UnauthorizedError as DF}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as sE}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as vE}from"node:crypto";import{UnauthorizedError as cE}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as uE}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as dE}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as lE}from"@modelcontextprotocol/sdk/client/streamableHttp.js";oZ();var pE="/mcp/oauth/callback",rE=[1456,1457,1458],iE=300000;function nE($){if($ instanceof Error){let W=$.message.trim();if(W.length>0)return W}return String($)}function aE($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function tZ($){let W={};try{W=c2($.serverName,{filePath:$.settingsPath})??{}}catch{W={}}let Z,Q,J=async(X)=>{let Y=D6(X(W))??{};try{W=u2($.serverName,()=>Y,{filePath:$.settingsPath})}catch{W=Y}};return{provider:{get redirectUrl(){return W.redirectUrl??$.redirectUrl},get clientMetadata(){return aE(W.redirectUrl??$.redirectUrl)},state:()=>{return Q=vE(),Q},clientInformation:()=>W.clientInformation,saveClientInformation:async(X)=>{await J((Y)=>({...Y,clientInformation:X,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>W.tokens,saveTokens:async(X)=>{let Y=Date.now();await J((V)=>({...V,tokens:X,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:Y}))},redirectToAuthorization:async(X)=>{Z=X.toString(),await $.onAuthorizationUrl?.(Z)},saveCodeVerifier:async(X)=>{await J((Y)=>({...Y,codeVerifier:X,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!W.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return W.codeVerifier},invalidateCredentials:async(X)=>{await J((Y)=>{if(X==="all")return{lastError:Y.lastError,redirectUrl:Y.redirectUrl};return{...Y,...X==="client"?{clientInformation:void 0}:{},...X==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...X==="verifier"?{codeVerifier:void 0}:{},...X==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(X)=>{await J((Y)=>({...Y,discoveryState:X}))},discoveryState:()=>W.discoveryState},getLastAuthorizationUrl:()=>Z,getLastOAuthState:()=>Q,resetInteractiveState:async()=>{await J((X)=>({...X,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(X)=>{await J((Y)=>({...Y,lastError:X}))},clearError:async()=>{await J((X)=>({...X,lastError:void 0}))}}}function sZ($){let W=$.registration.transport;if(W.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let Z=W.headers?{headers:W.headers}:void 0;if(W.type==="sse")return new dE(new URL(W.url),{authProvider:$.oauthProvider,requestInit:Z,fetch:$.fetch});return new lE(new URL(W.url),{authProvider:$.oauthProvider,requestInit:Z,fetch:$.fetch})}function UF($){return new uE({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function eZ($){let W=$.serverName.trim();if(!W)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Z}=await Promise.resolve().then(() => (oZ(),AF)),Q=Z({filePath:$.filePath}).find((V)=>V.name===W);if(!Q)throw Error(`MCP server "${W}" is not configured.`);if(Q.disabled)throw Error(`MCP server "${W}" is disabled. Enable it before running OAuth.`);if(Q.transport.type==="stdio")throw Error(`MCP server "${W}" uses stdio transport and does not support OAuth browser flow.`);let J=await G1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:rE,callbackPath:$.callbackPath??pE,timeoutMs:$.timeoutMs??iE,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!J.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let j=tZ({settingsPath:$.filePath,serverName:W,redirectUrl:J.callbackUrl,onAuthorizationUrl:async(V)=>{await $.openUrl?.(V)}});await j.resetInteractiveState();let X=UF($),Y;try{let V=sZ({registration:Q,oauthProvider:j.provider,fetch:$.fetch});try{return await X.connect(V),await X.listTools(),await j.clearError(),{serverName:W,authorized:!0,message:`MCP server "${W}" is already authorized.`}}catch(B){if(!(B instanceof cE))throw B;if(!j.getLastAuthorizationUrl())throw Error(`MCP server "${W}" 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=j.getLastOAuthState();if(!K)throw Error(`MCP server "${W}" did not start an OAuth stateful authorization flow.`);if(G.state!==K)throw Error("OAuth authorization failed: state mismatch.");await V.finishAuth(G.code),Y=UF($);let F=sZ({registration:Q,oauthProvider:j.provider,fetch:$.fetch});return await Y.connect(F),await Y.listTools(),await j.clearError(),{serverName:W,authorized:!0,message:`MCP server "${W}" OAuth authorization completed.`}}}catch(V){let B=nE(V);throw await j.markError(B),Error(B)}finally{await X.close().catch(()=>{return}),await Y?.close().catch(()=>{return}),J.close()}}var tE="2024-11-05",eE=5000,$w=1500,_F="http://127.0.0.1:1456/mcp/oauth/callback";function $Q($){return $ instanceof Error?$.message:String($)}function LF($){let W=Buffer.from(JSON.stringify($),"utf8"),Z=Buffer.from(`Content-Length: ${W.byteLength}\r
|
|
229
229
|
\r
|
|
230
|
-
`,"utf8");return Buffer.concat([Z,W])}function
|
|
231
|
-
`,"utf8")}class
|
|
230
|
+
`,"utf8");return Buffer.concat([Z,W])}function fF($){return Buffer.from(`${JSON.stringify($)}
|
|
231
|
+
`,"utf8")}class gJ{buffer="";decoder=new OF("utf8");push($){this.buffer+=this.decoder.write($);let W=[];while(!0){let Z=this.buffer.indexOf(`\r
|
|
232
232
|
\r
|
|
233
|
-
`);if(Z<0)break;let J=this.buffer.slice(0,Z).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!J)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let j=Number.parseInt(J[1],10),X=Z+4,Y=X+j;if(this.buffer.length<Y)break;W.push(this.buffer.slice(X,Y)),this.buffer=this.buffer.slice(Y)}return W}}class
|
|
234
|
-
`);if(Z<0)break;let Q=this.buffer.slice(0,Z).trim();if(this.buffer=this.buffer.slice(Z+1),Q.length>0)W.push(Q)}return W}}class LF{registration;process;nextRequestId=1;pending=new Map;framedParser=new IJ;newlineParser=new xJ;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"],W;for(let Z of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Z);try{await this.request("initialize",{protocolVersion:vE,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},uE),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Z;return}catch(Q){W=Q instanceof Error?Q:Error(String(Q))}}throw W??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((W)=>typeof W?.name==="string"&&typeof W.inputSchema==="object"&&W.inputSchema!==null).map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let W=this.registration.transport;if(W.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${W.type}`);this.framedParser=new IJ,this.newlineParser=new xJ,this.stderrBuffer="",this.protocolMode=$;let Z=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},Q=gE(W.command,W.args??[],{cwd:W.cwd,env:{...process.env,...W.env??{}},stdio:["pipe","pipe","pipe"],...Z});this.process=Q,Q.stdout.on("data",(J)=>this.handleStdout(J)),Q.stderr.on("data",(J)=>{if(this.process!==Q)return;if(this.stderrBuffer+=J.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),Q.once("error",(J)=>{if(this.process!==Q)return;this.failAllPending(Error(`MCP process error: ${eZ(J)}`))}),Q.once("exit",(J,j)=>{if(this.process!==Q)return;this.connected=!1,this.process=void 0;let X=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${J??"null"}, signal=${j??"null"}).${X}`))})}handleStdout($){try{let W=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Z of W){let Q=JSON.parse(Z);if(typeof Q.id!=="number")continue;let J=this.pending.get(Q.id);if(!J)continue;if(this.pending.delete(Q.id),clearTimeout(J.timeout),Q.error){let j=Q.error.message||`MCP request failed with code ${Q.error.code??"unknown"}`;J.reject(Error(j));continue}J.resolve(Q.result)}}catch(W){this.handleProtocolFailure(W)}}handleProtocolFailure($){let W=this.process;if(!W)return;this.connected=!1,this.process=void 0;let Z=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${eZ($)}.${Z}`)),W.kill()}async request($,W,Z=cE){let Q=this.process;if(!Q?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let J=this.nextRequestId++,j={jsonrpc:"2.0",id:J,method:$,...W?{params:W}:{}},X=new Promise((Y,V)=>{let B=setTimeout(()=>{this.pending.delete(J),V(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Z);this.pending.set(J,{resolve:Y,reject:V,timeout:B})});try{Q.stdin.write(this.protocolMode==="framed"?DF(j):_F(j))}catch(Y){let V=this.pending.get(J);if(V)clearTimeout(V.timeout),this.pending.delete(J);throw Y}return X}notify($,W){let Z=this.process;if(!Z?.stdin.writable)return;let Q={jsonrpc:"2.0",method:$,...W?{params:W}:{}};Z.stdin.write(this.protocolMode==="framed"?DF(Q):_F(Q))}failAllPending($){for(let[W,Z]of this.pending)clearTimeout(Z.timeout),this.pending.delete(W),Z.reject($)}}class OF{registration;options;client;authContext;constructor($,W){this.registration=$;this.options=W}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 $=sZ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??UF});this.authContext=$;try{let W=new mE({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Z=oZ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await W.connect(Z),await $.clearError(),this.client=W}catch(W){let Z=W instanceof AF?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):eZ(W);throw await $.markError(Z),Error(Z)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema&&typeof Z.inputSchema==="object"&&!Array.isArray(Z.inputSchema)?Z.inputSchema:{}}))}catch(W){return await this.handleOperationError(W)}}async callTool($){let W=await this.ensureConnectedClient();try{return await W.callTool({name:$.name,arguments:$.arguments??{}})}catch(Z){return await this.handleOperationError(Z)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let W=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${W} Run authorizeMcpServerOAuth for this server.`;return`${W} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let W=this.authContext??sZ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??UF}),Z=$ instanceof AF?this.formatUnauthorizedMessage(W.getLastAuthorizationUrl()):eZ($);throw await W.markError(Z),Error(Z)}}function U6($={}){return(W)=>W.transport.type==="stdio"?new LF(W):new OF(W,$)}aZ();function e0(){return Date.now()}function dE($){return $.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema}))}class u2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let W=this.servers.get($.name);if(!W){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:e0()});return}let Z=JSON.stringify(W.registration.transport)!==JSON.stringify($.transport);if(W.registration={...$},W.updatedAt=e0(),Z)await this.disconnectState(W),W.client=void 0,W.toolCache=void 0,W.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let W=this.requireServer($);await this.disconnectState(W),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let W=this.requireServer($);await this.connectState(W)})}async disconnectServer($){await this.runExclusive($,async()=>{let W=this.requireServer($);await this.disconnectState(W)})}async setServerDisabled($,W){await this.runExclusive($,async()=>{let Z=this.requireServer($);if(Z.registration={...Z.registration,disabled:W},Z.updatedAt=e0(),W)await this.disconnectState(Z)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,W)=>$.name.localeCompare(W.name))}async listTools($){let W=this.requireServer($),Z=W.toolCacheUpdatedAt??0;if(W.toolCache&&e0()-Z<=this.toolsCacheTtlMs)return W.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let W=this.requireServer($),Q=await(await this.ensureConnectedClient(W)).listTools(),J=dE(Q);return W.toolCache=J,W.toolCacheUpdatedAt=e0(),W.updatedAt=e0(),J})}async callTool($){return this.runExclusive($.serverName,async()=>{let W=this.requireServer($.serverName),Z=await this.ensureConnectedClient(W);return W.updatedAt=e0(),Z.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let W of $)await this.unregisterServer(W)}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=e0();try{let W=$.client??await this.clientFactory($.registration);await W.connect(),$.client=W,$.status="connected",$.lastError=void 0,$.updatedAt=e0()}catch(W){throw $.status="disconnected",$.lastError=W instanceof Error?W.message:String(W),$.updatedAt=e0(),W}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=e0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=e0()}}requireServer($){let W=this.servers.get($);if(!W)throw Error(`Unknown MCP server: ${$}`);return W}async runExclusive($,W){let Z=this.operationLocks.get($)??Promise.resolve(),Q,J=new Promise((X)=>{Q=X}),j=Z.catch(()=>{return}).then(()=>J);this.operationLocks.set($,j),await Z.catch(()=>{return});try{return await W()}finally{if(Q?.(),this.operationLocks.get($)===j)this.operationLocks.delete($)}}}function D6($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function TF($){return D6($)&&Object.values($).every((W)=>typeof W==="string")}function lE($){return Array.isArray($)&&$.every((W)=>typeof W==="string")}function pE($){if(!D6($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function rE($){let W=$.env?Object.entries($.env):[];if(W.length===0)return{ok:!0};let Z={};for(let[Q,J]of W){if(typeof J==="string"){Z[Q]=J;continue}let j=J.fromEnv?.trim()||Q,X=process.env[j];if(typeof X==="string"&&X.length>0){Z[Q]=X;continue}if(typeof J.value==="string"){Z[Q]=J.value;continue}if(J.required===!0)return{ok:!1,reason:`required environment variable "${j}" is not set`}}return{ok:!0,env:Object.keys(Z).length>0?Z:void 0}}function gJ($){if(!D6($))return{name:"",loadError:"invalid MCP server registration"};let W=typeof $.name==="string"?$.name.trim():"";if(!W)return{name:W,loadError:"empty MCP server name"};let Z=$.env,Q=Z===void 0?void 0:Z;if(Q!==void 0){if(!D6(Q))return{name:W,loadError:"invalid env"};for(let[V,B]of Object.entries(Q))if(typeof B!=="string"&&!pE(B))return{name:W,loadError:`invalid env "${V}"`}}let J=$.transport;if(!D6(J))return{name:W,loadError:"invalid MCP transport"};let j=J.type;if(j!=="stdio"&&j!=="sse"&&j!=="streamableHttp")return{name:W,loadError:"invalid MCP transport type"};if(j!=="stdio"&&Q!==void 0)return{name:W,loadError:"top-level env is only supported for stdio MCP transports"};let X=D6($.metadata)?$.metadata:void 0;if(j==="stdio"){let V=J.command;if(typeof V!=="string"||!V.trim())return{name:W,loadError:"stdio MCP transport requires command"};let B=J.args;if(B!==void 0&&!lE(B))return{name:W,loadError:"stdio MCP transport args must be strings"};let H=J.cwd;if(H!==void 0&&typeof H!=="string")return{name:W,loadError:"stdio MCP transport cwd must be a string"};let G=J.env;if(G!==void 0&&!TF(G))return{name:W,loadError:"stdio MCP transport env must be strings"};let K=rE({name:W,transport:{type:"stdio",command:V,args:B,cwd:H,env:G},env:Q,metadata:X});if(!K.ok)return{name:W,loadError:K.reason};let F=G||K.env?{...G??{},...K.env??{}}:void 0;return{name:W,registration:{name:W,transport:{type:"stdio",command:V,args:B,cwd:H,env:F},metadata:X}}}if(typeof J.url!=="string"||!J.url.trim())return{name:W,loadError:`${j} MCP transport requires url`};let Y=J.headers;if(Y!==void 0&&!TF(Y))return{name:W,loadError:`${j} MCP transport headers must be strings`};return{name:W,registration:{name:W,transport:j==="sse"?{type:"sse",url:J.url,headers:Y}:{type:"streamableHttp",url:J.url,headers:Y},metadata:X}}}function $Q($){let W=new Map;return $.map(({server:Z,owner:Q,ownerLabel:J})=>{let j=gJ(Z);if(!j.registration)return{owner:Q,name:j.name,loadError:j.loadError??"invalid MCP server registration"};let X=W.get(j.registration.name);if(W.has(j.registration.name)){let Y=X?` already registered by ${X}`:"";return{owner:Q,name:j.registration.name,loadError:`duplicate MCP server name "${j.registration.name}"${Y}`}}return W.set(j.registration.name,J),{owner:Q,name:j.registration.name,registration:j.registration}})}import{createHash as iE}from"node:crypto";var zF=64,nE=/[^a-zA-Z0-9_-]+/g,qF=8,aE=1,oE="mcp_tool";function sE($){return iE("sha1").update($).digest("hex").slice(0,qF)}function tE($){return $.replace(nE,"_")}var WQ=({serverName:$,toolName:W})=>{let Z=`${$}__${W}`,Q=tE(Z);if(Q===Z&&Z.length<=zF)return Z;let J=sE(Z),j=zF-aE-qF;return`${Q.slice(0,j)||oE}_${J}`};function x5($){return{[($.nameTransform??WQ)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function ZQ($){let W={};for(let Z of $.toolNames)Object.assign(W,x5({serverName:$.serverName,toolName:Z,nameTransform:$.nameTransform}));return W}import{createTool as eE}from"@cline/shared";function $w($,W){let Z=W.description?.trim();if(Z)return Z;return`Execute MCP tool "${W.name}" from server "${$}".`}async function _6($){let W=await $.provider.listTools($.serverName),Z=$.nameTransform??WQ;return W.map((Q)=>{let J=Z({serverName:$.serverName,toolName:Q.name});return eE({name:J,description:$w($.serverName,Q),inputSchema:Q.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(j,X)=>$.provider.callTool({serverName:$.serverName,toolName:Q.name,arguments:j&&typeof j==="object"&&!Array.isArray(j)?j:void 0,context:X})})})}U1();var EF={};w(EF,{listPluginToolsWithDiagnostics:()=>QQ,listPluginTools:()=>g5});import{stat as Ww}from"node:fs/promises";import{isAbsolute as Zw,relative as Qw,resolve as RF}from"node:path";U1();function Jw($,W){let Z=Qw(RF($),RF(W));return Z===""||!Z.startsWith("..")&&!Zw(Z)}var jw=32,f6=new Map;function Xw($,W){if(!f6.has($)&&f6.size>=jw){let Z=f6.keys().next().value;if(Z)f6.delete(Z)}f6.set($,W)}async function Yw($){let W=await Promise.all($.pluginPaths.map(async(Z)=>{try{let Q=await Ww(Z);return`${Z}:${Q.mtimeMs}:${Q.size}`}catch{return`${Z}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:W})}function NF($,W){return $.map((Z)=>({...Z,enabled:!W.has(Z.name)}))}function Vw($){return $.sort((W,Z)=>{let Q=W.name.localeCompare(Z.name);if(Q!==0)return Q;return W.path.localeCompare(Z.path)})}async function Bw($,W){if(!$.setup)return{tools:[]};let Z=[],Q={registerTool:(J)=>Z.push(J),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(J)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(Q,{workspaceInfo:W}),{tools:Z}}async function QQ($){let W=t1({workspacePath:$.workspacePath,cwd:$.cwd}),Z=R1($.disabledToolNames);if(W.length===0)return{tools:[],failures:[],warnings:[]};let Q=await Yw({pluginPaths:W,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),J=f6.get(Q);if(J)return{tools:NF(J.tools,Z),failures:J.failures,warnings:J.warnings};let j=[],X=[],Y=[],V;try{V=await a8({pluginPaths:W,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),X=[...V.failures],Y=[...V.warnings];for(let H of V.extensions??[]){let G=H.__clinePluginPath;if(!G)continue;let K=Jw($.workspacePath,G)?"workspace-plugin":"global-plugin",F;try{F=await Bw(H,{rootPath:$.workspacePath})}catch(A){X.push({pluginPath:G,pluginName:H.name,phase:"setup",message:A instanceof Error?A.message:String(A),stack:A instanceof Error?A.stack:void 0});continue}for(let A of F.tools)j.push({name:A.name,pluginName:H.name,path:G,source:K,description:A.description?.trim()||void 0})}}catch(H){X=W.map((G)=>({pluginPath:G,phase:"load",message:H instanceof Error?H.message:String(H),stack:H instanceof Error?H.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let B=Vw(j);return Xw(Q,{tools:B,failures:X,warnings:Y}),{tools:NF(B,Z),failures:X,warnings:Y}}async function g5($){return(await QQ($)).tools}function c5($,W){if(!W)return"global";let Z=bF(W,$);return!Z.startsWith("..")&&!SF(Z)?"workspace":"global"}function Fw($,W){return c5($,W)==="workspace"?"workspace-plugin":"global-plugin"}function Aw($,W){let Z=bF(CF($),CF(W));return Z===""||!Z.startsWith("..")&&!SF(Z)}function Uw($){try{let W=JSON.parse(Hw($,"utf8"));return typeof W.name==="string"&&W.name.trim()?W.name.trim():void 0}catch{return}}function Dw($){let W=wF($);while(!0){let Z=Kw(W,"package.json");if(v5(Z)){let J=Uw(Z);if(J)return J;break}let Q=wF(W);if(Q===W)break;W=Q}return mJ($,Gw($))}function _w($){let W=[];for(let Z of t1({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let Q of e1([Z]))W.push({directory:Q,pluginName:Dw(Z),pluginPath:Z,source:$.workspaceRoot?Fw(Z,$.workspaceRoot):"global-plugin"});return W.sort((Z,Q)=>Q.directory.length-Z.directory.length)}function fw($,W){return W.find((Z)=>Aw(Z.directory,$))}function m5($){return[...$].sort((W,Z)=>{let Q=(J)=>{switch(J){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(W.source!==Z.source)return Q(W.source)-Q(Z.source);return W.name.localeCompare(Z.name)})}function yF($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function hF($,W){return $.cwd?.trim()||W||process.cwd()}async function PF($,W){if($.userInstructionService)return await W($.userInstructionService);let Z=yF($),Q=hF($,Z),J=x$({skills:{workspacePath:Z||void 0,includePluginSkills:!0,cwd:Q},rules:{workspacePath:Z||void 0},workflows:{workspacePath:Z||void 0}});try{return await J.start(),await W(J)}finally{J.stop()}}function Lw($,W){if(!$)return;let Z=$.listRecords("skill");if(W.id){let Q=Z.find((J)=>J.id===W.id);if(Q)return Q}for(let Q of Z)if(Q.filePath===W.path||Q.item.name===W.name||Q.id===W.name)return Q;return}class v${async list($={}){return await PF($,async(W)=>{let Z=yF($),Q=_w({workspaceRoot:Z,cwd:hF($,Z)}),J=[],j=[],X=[],Y=[],V=[];if(W){for(let H of W.listRecords("workflow")){let G=H.item;J.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"workflow",source:c5(H.filePath,Z),description:G.instructions,toggleable:!1})}for(let H of W.listRecords("rule")){let G=H.item;j.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"rule",source:c5(H.filePath,Z),description:G.instructions,toggleable:!1})}for(let H of W.listRecords("skill")){let G=H.item,K=fw(H.filePath,Q);X.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"skill",source:K?.source??c5(H.filePath,Z),description:G.description,pluginName:K?.pluginName,pluginPath:K?.pluginPath,toggleable:!0})}}if(Z)try{for(let H of await g5({workspacePath:Z,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))Y.push({id:`${H.pluginName}:${H.name}:${H.path}`,name:H.name,path:H.path,enabled:H.enabled,kind:"tool",source:H.source,description:H.description,toggleable:!0})}catch{}let B=Q0();if(W$({filePath:B}))try{for(let H of t0({filePath:B}))V.push({id:H.name,name:H.name,path:B,enabled:H.disabled!==!0,kind:"mcp",source:c5(B,Z),description:H.transport.type,toggleable:!0})}catch{}return{workflows:m5(J.filter((H)=>v5(H.path))),rules:m5(j.filter((H)=>v5(H.path))),skills:m5(X.filter((H)=>v5(H.path))),tools:m5(Y),mcp:m5(V.filter((H)=>v5(H.path)))}})}async toggle($){if($.type==="skills")return await PF($,async(W)=>{let Z=Lw(W,$),Q=Z?.filePath;if(!Q)throw Error(`Unable to resolve skill setting '${$.id??$.name??mJ($.path??"")}'.`);let J=Z?.item&&"disabled"in Z.item?Z.item.disabled!==!0:void 0,j=$.enabled??(J!==void 0?!J:void 0);if(j===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??mJ($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await aK({filePath:Q,enabled:j}),await W?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:W}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)v9($.name);else VH($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let W=$.name?.trim()||$.id?.trim();if(!W)throw Error("MCP server settings toggle requires a server name.");let Z=$.path?.trim()||Q0(),Q=$.enabled;if(Q===void 0){let J=t0({filePath:Z}).find((j)=>j.name===W);if(!J)throw Error(`Unknown MCP server: ${W}`);Q=J.disabled===!0}return g2({filePath:Z,name:W,disabled:!Q}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function d2(){return new v$}function IF($){return{async list(W){let Z=$;if(Z.listSettings)return await Z.listSettings(W);return await d2().list(W)},async toggle(W){let Z=$;if(Z.toggleSetting)return await Z.toggleSetting(W);return await d2().toggle(W)}}}function xF($){function W(){let Z=$.pendingPrompts;if(!Z)throw Error("Pending prompt service is not available.");return Z}return{list(Z){return W().list(Z)},update(Z){return W().update(Z)},delete(Z){return W().delete(Z)}}}var gF={};w(gF,{splitCoreSessionConfig:()=>u5,isSessionNotFoundError:()=>Q$,SessionNotFoundError:()=>Z$,SESSION_NOT_FOUND_ERROR_CODE:()=>l2});var l2="session_not_found";class Z$ extends Error{sessionId;code="session_not_found";constructor($,W){super(W??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function Q$($){return $ instanceof Z$||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function u5($){let{hooks:W,logger:Z,telemetry:Q,extensionContext:J,extraTools:j,extensions:X,onTeamEvent:Y,onConsecutiveMistakeLimitReached:V,checkpoint:B,compaction:H,...G}=$,K={};if(W)K.hooks=W;if(Z)K.logger=Z;if(Q)K.telemetry=Q;if(J)K.extensionContext=J;if(j)K.extraTools=j;if(X)K.extensions=X;if(Y)K.onTeamEvent=Y;if(V)K.onConsecutiveMistakeLimitReached=V;if(B?.createCheckpoint)K.checkpoint=B;if(H?.compact)K.compaction=H;let F=Object.keys(K).length>0?K:void 0;return{config:{...G,...B?{checkpoint:{enabled:B.enabled}}:{},...H?{compaction:{enabled:H.enabled,strategy:H.strategy,preserveRecentTokens:H.preserveRecentTokens,summarizer:H.summarizer}}:{}},...F?{localRuntime:F}:{}}}function mF($){let W=$.config;return"providerId"in W?{...$,config:{...W,...Ow($.localRuntime)},localRuntime:$.localRuntime}:$}function vJ($,W={}){let Z=u5($.config),Q=C0(W.defaultCapabilities,$.capabilities),J=Tw(Z.localRuntime,$.localRuntime),j=W.withExtensionContext?.(J?.extensionContext);if(j)J={...J??{},extensionContext:j};return{...$,...Z,...J?{localRuntime:J}:{},...Q?{capabilities:Q}:{}}}function Ow($){if(!$)return{};let{modelCatalogDefaults:W,userInstructionService:Z,configExtensions:Q,onTeamRestored:J,...j}=$;return j}function Tw(...$){let W={};for(let Z of $)if(Z)Object.assign(W,Z);return Object.keys(W).length>0?W:void 0}D0();function vF($){let W=$.input.config.telemetry??$.telemetry;if(!W)return;W.capture({event:v.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??F0.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 cJ($){let W=$?.trim();return W?W:void 0}function zw($,W){let Z=$?.trim();if(!Z)return W;let Q=Date.parse(Z);if(!Number.isFinite(Q))return W;return new Date(Q).toISOString()}function cF($,W){return new Date(new Date($).getTime()+Math.max(0,Math.floor(W))*1000).toISOString()}function uF($,W){return new Date(new Date($).getTime()-Math.max(0,Math.floor(W))*1000).toISOString()}function qw($,W){if(!$)return W;return new Date($).getTime()>=new Date(W).getTime()?$:W}function Mw($,W){let Z=$.eventId.trim(),Q=$.eventType.trim(),J=$.source.trim(),j=cJ($.subject),X=cJ($.dedupeKey)??`${Q}:${J}:${j??Z}`;return{eventId:Z,eventType:Q,source:J,subject:j,occurredAt:zw($.occurredAt,W),workspaceRoot:cJ($.workspaceRoot),payload:d5($.payload)?$.payload:void 0,attributes:d5($.attributes)?$.attributes:void 0,dedupeKey:X}}function uJ($,W){if(!W)return;let Z=W.split("."),Q=$;for(let J of Z){if(!d5(Q))return;Q=Q[J]}return Q}function Rw($,W){if($.attributes&&Object.hasOwn($.attributes,W))return $.attributes[W];if($.payload&&Object.hasOwn($.payload,W))return $.payload[W];let Z={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},Q=uJ(Z,W);if(Q!==void 0)return Q;if($.attributes){let J=uJ($.attributes,W);if(J!==void 0)return J}if($.payload)return uJ($.payload,W);return}function JQ($,W){if(Array.isArray(W))return W.some((Z)=>JQ($,Z));if(Array.isArray($))return $.some((Z)=>JQ(Z,W));if(d5(W)){if(!d5($))return!1;return Object.entries(W).every(([Z,Q])=>JQ($[Z],Q))}return Object.is($,W)}function Nw($,W){if(!W||Object.keys(W).length===0)return!0;return Object.entries(W).every(([Z,Q])=>JQ(Rw($,Z),Q))}class dJ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let W=new Date(this.nowFn()).toISOString(),Z=Mw($,W),Q=this.store.insertEventLog(Z,{receivedAtIso:W});if(!Q.created)return this.logger?.debug("cron.event.duplicate",{eventId:Q.record.eventId,eventType:Q.record.eventType,source:Q.record.source}),{event:Q.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:Q.record.dedupeKey}]};try{let J=this.store.listEventSpecsForType(Z.eventType),j=[],X=[],Y=[];for(let H of J){if(!Nw(Z,H.filters)){j.push({specId:H.specId,externalId:H.externalId,reason:"filter_mismatch",dedupeKey:Z.dedupeKey});continue}X.push(H);let G=this.materializeForSpec(H,Z,Q.record.receivedAt);if(G.run)Y.push(G.run);else j.push({specId:H.specId,externalId:H.externalId,reason:G.reason,dedupeKey:Z.dedupeKey})}let V=X.length===0?"unmatched":Y.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(Q.record.eventId,{status:V,matchedSpecCount:X.length,queuedRunCount:Y.length,suppressedCount:j.filter((H)=>H.reason!=="filter_mismatch").length});let B=this.store.getEventLog(Q.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:Q.record.eventId,eventType:Q.record.eventType,status:V,matchedSpecCount:X.length,queuedRunCount:Y.length}),{event:B??Q.record,duplicate:!1,matchedSpecs:X,queuedRuns:Y,suppressions:j}}catch(J){if(this.store.updateEventLogProcessing(Q.record.eventId,{status:"failed",error:J instanceof Error?J.message:String(J)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:Q.record.eventId,eventType:Q.record.eventType,error:J});throw J}}materializeForSpec($,W,Z){let Q=W.dedupeKey??W.eventId,J=$.debounceSeconds??0;if(J>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:Q});if(V){let B=qw(V.scheduledFor,cF(Z,J)),H=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:W.eventId,scheduledFor:B});if(H)return{run:H,reason:"dedupe_window"}}}let j=$.dedupeWindowSeconds??0;if(j>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:Q,sinceIso:uF(Z,j)}))return{reason:"dedupe_window"};let X=$.cooldownSeconds??0;if(X>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:uF(Z,X)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:W.eventId,scheduledFor:J>0?cF(Z,J):Z}),reason:"dedupe_window"}}}class l5{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},W=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let Q of W)if(this.materializeOneOff(Q))$.oneOffQueued+=1;let Z=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Q of Z)try{if(this.materializeSchedule(Q))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as yw}from"node:path";import{buildClineSystemPrompt as hw}from"@cline/shared";import{nowIso as dF}from"@cline/shared/db";import{mkdirSync as Ew,writeFileSync as ww}from"node:fs";import{join as Cw}from"node:path";import{resolveCronReportsDir as Pw}from"@cline/shared/storage";function c$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function p2($,W){if(W===void 0||W===null)return;return`${$}: ${c$(W)}`}function Sw($,W,Z){let Q=[`runId: ${c$($.runId)}`,`specId: ${c$(W.specId)}`,`externalId: ${c$(W.externalId)}`,`title: ${c$(W.title)}`,`triggerKind: ${c$($.triggerKind)}`,`status: ${c$($.status)}`,`sourcePath: ${c$(W.sourcePath)}`],J=[p2("sessionId",$.sessionId),p2("startedAt",$.startedAt),p2("completedAt",$.completedAt),p2("triggerEventId",$.triggerEventId),p2("triggerEventType",Z?.eventType),p2("triggerEventSource",Z?.source),p2("triggerEventSubject",Z?.subject)];for(let j of J)if(j)Q.push(j);return`---
|
|
233
|
+
`);if(Z<0)break;let J=this.buffer.slice(0,Z).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!J)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let j=Number.parseInt(J[1],10),X=Z+4,Y=X+j;if(this.buffer.length<Y)break;W.push(this.buffer.slice(X,Y)),this.buffer=this.buffer.slice(Y)}return W}}class mJ{buffer="";decoder=new OF("utf8");push($){this.buffer+=this.decoder.write($);let W=[];while(!0){let Z=this.buffer.indexOf(`
|
|
234
|
+
`);if(Z<0)break;let Q=this.buffer.slice(0,Z).trim();if(this.buffer=this.buffer.slice(Z+1),Q.length>0)W.push(Q)}return W}}class TF{registration;process;nextRequestId=1;pending=new Map;framedParser=new gJ;newlineParser=new mJ;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"],W;for(let Z of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Z);try{await this.request("initialize",{protocolVersion:tE,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},$w),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Z;return}catch(Q){W=Q instanceof Error?Q:Error(String(Q))}}throw W??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((W)=>typeof W?.name==="string"&&typeof W.inputSchema==="object"&&W.inputSchema!==null).map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let W=this.registration.transport;if(W.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${W.type}`);this.framedParser=new gJ,this.newlineParser=new mJ,this.stderrBuffer="",this.protocolMode=$;let Z=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},Q=oE(W.command,W.args??[],{cwd:W.cwd,env:{...process.env,...W.env??{}},stdio:["pipe","pipe","pipe"],...Z});this.process=Q,Q.stdout.on("data",(J)=>this.handleStdout(J)),Q.stderr.on("data",(J)=>{if(this.process!==Q)return;if(this.stderrBuffer+=J.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),Q.once("error",(J)=>{if(this.process!==Q)return;this.failAllPending(Error(`MCP process error: ${$Q(J)}`))}),Q.once("exit",(J,j)=>{if(this.process!==Q)return;this.connected=!1,this.process=void 0;let X=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${J??"null"}, signal=${j??"null"}).${X}`))})}handleStdout($){try{let W=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Z of W){let Q=JSON.parse(Z);if(typeof Q.id!=="number")continue;let J=this.pending.get(Q.id);if(!J)continue;if(this.pending.delete(Q.id),clearTimeout(J.timeout),Q.error){let j=Q.error.message||`MCP request failed with code ${Q.error.code??"unknown"}`;J.reject(Error(j));continue}J.resolve(Q.result)}}catch(W){this.handleProtocolFailure(W)}}handleProtocolFailure($){let W=this.process;if(!W)return;this.connected=!1,this.process=void 0;let Z=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${$Q($)}.${Z}`)),W.kill()}async request($,W,Z=eE){let Q=this.process;if(!Q?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let J=this.nextRequestId++,j={jsonrpc:"2.0",id:J,method:$,...W?{params:W}:{}},X=new Promise((Y,V)=>{let B=setTimeout(()=>{this.pending.delete(J),V(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Z);this.pending.set(J,{resolve:Y,reject:V,timeout:B})});try{Q.stdin.write(this.protocolMode==="framed"?LF(j):fF(j))}catch(Y){let V=this.pending.get(J);if(V)clearTimeout(V.timeout),this.pending.delete(J);throw Y}return X}notify($,W){let Z=this.process;if(!Z?.stdin.writable)return;let Q={jsonrpc:"2.0",method:$,...W?{params:W}:{}};Z.stdin.write(this.protocolMode==="framed"?LF(Q):fF(Q))}failAllPending($){for(let[W,Z]of this.pending)clearTimeout(Z.timeout),this.pending.delete(W),Z.reject($)}}class zF{registration;options;client;authContext;constructor($,W){this.registration=$;this.options=W}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 $=tZ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??_F});this.authContext=$;try{let W=new sE({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Z=sZ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await W.connect(Z),await $.clearError(),this.client=W}catch(W){let Z=W instanceof DF?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):$Q(W);throw await $.markError(Z),Error(Z)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema&&typeof Z.inputSchema==="object"&&!Array.isArray(Z.inputSchema)?Z.inputSchema:{}}))}catch(W){return await this.handleOperationError(W)}}async callTool($){let W=await this.ensureConnectedClient();try{return await W.callTool({name:$.name,arguments:$.arguments??{}})}catch(Z){return await this.handleOperationError(Z)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let W=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${W} Run authorizeMcpServerOAuth for this server.`;return`${W} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let W=this.authContext??tZ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??_F}),Z=$ instanceof DF?this.formatUnauthorizedMessage(W.getLastAuthorizationUrl()):$Q($);throw await W.markError(Z),Error(Z)}}function _6($={}){return(W)=>W.transport.type==="stdio"?new TF(W):new zF(W,$)}oZ();function W1(){return Date.now()}function Ww($){return $.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema}))}class l2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let W=this.servers.get($.name);if(!W){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:W1()});return}let Z=JSON.stringify(W.registration.transport)!==JSON.stringify($.transport);if(W.registration={...$},W.updatedAt=W1(),Z)await this.disconnectState(W),W.client=void 0,W.toolCache=void 0,W.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let W=this.requireServer($);await this.disconnectState(W),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let W=this.requireServer($);await this.connectState(W)})}async disconnectServer($){await this.runExclusive($,async()=>{let W=this.requireServer($);await this.disconnectState(W)})}async setServerDisabled($,W){await this.runExclusive($,async()=>{let Z=this.requireServer($);if(Z.registration={...Z.registration,disabled:W},Z.updatedAt=W1(),W)await this.disconnectState(Z)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,W)=>$.name.localeCompare(W.name))}async listTools($){let W=this.requireServer($),Z=W.toolCacheUpdatedAt??0;if(W.toolCache&&W1()-Z<=this.toolsCacheTtlMs)return W.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let W=this.requireServer($),Q=await(await this.ensureConnectedClient(W)).listTools(),J=Ww(Q);return W.toolCache=J,W.toolCacheUpdatedAt=W1(),W.updatedAt=W1(),J})}async callTool($){return this.runExclusive($.serverName,async()=>{let W=this.requireServer($.serverName),Z=await this.ensureConnectedClient(W);return W.updatedAt=W1(),Z.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let W of $)await this.unregisterServer(W)}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=W1();try{let W=$.client??await this.clientFactory($.registration);await W.connect(),$.client=W,$.status="connected",$.lastError=void 0,$.updatedAt=W1()}catch(W){throw $.status="disconnected",$.lastError=W instanceof Error?W.message:String(W),$.updatedAt=W1(),W}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=W1();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=W1()}}requireServer($){let W=this.servers.get($);if(!W)throw Error(`Unknown MCP server: ${$}`);return W}async runExclusive($,W){let Z=this.operationLocks.get($)??Promise.resolve(),Q,J=new Promise((X)=>{Q=X}),j=Z.catch(()=>{return}).then(()=>J);this.operationLocks.set($,j),await Z.catch(()=>{return});try{return await W()}finally{if(Q?.(),this.operationLocks.get($)===j)this.operationLocks.delete($)}}}function L6($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function qF($){return L6($)&&Object.values($).every((W)=>typeof W==="string")}function Zw($){return Array.isArray($)&&$.every((W)=>typeof W==="string")}function Qw($){if(!L6($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function Jw($){let W=$.env?Object.entries($.env):[];if(W.length===0)return{ok:!0};let Z={};for(let[Q,J]of W){if(typeof J==="string"){Z[Q]=J;continue}let j=J.fromEnv?.trim()||Q,X=process.env[j];if(typeof X==="string"&&X.length>0){Z[Q]=X;continue}if(typeof J.value==="string"){Z[Q]=J.value;continue}if(J.required===!0)return{ok:!1,reason:`required environment variable "${j}" is not set`}}return{ok:!0,env:Object.keys(Z).length>0?Z:void 0}}function vJ($){if(!L6($))return{name:"",loadError:"invalid MCP server registration"};let W=typeof $.name==="string"?$.name.trim():"";if(!W)return{name:W,loadError:"empty MCP server name"};let Z=$.env,Q=Z===void 0?void 0:Z;if(Q!==void 0){if(!L6(Q))return{name:W,loadError:"invalid env"};for(let[V,B]of Object.entries(Q))if(typeof B!=="string"&&!Qw(B))return{name:W,loadError:`invalid env "${V}"`}}let J=$.transport;if(!L6(J))return{name:W,loadError:"invalid MCP transport"};let j=J.type;if(j!=="stdio"&&j!=="sse"&&j!=="streamableHttp")return{name:W,loadError:"invalid MCP transport type"};if(j!=="stdio"&&Q!==void 0)return{name:W,loadError:"top-level env is only supported for stdio MCP transports"};let X=L6($.metadata)?$.metadata:void 0;if(j==="stdio"){let V=J.command;if(typeof V!=="string"||!V.trim())return{name:W,loadError:"stdio MCP transport requires command"};let B=J.args;if(B!==void 0&&!Zw(B))return{name:W,loadError:"stdio MCP transport args must be strings"};let H=J.cwd;if(H!==void 0&&typeof H!=="string")return{name:W,loadError:"stdio MCP transport cwd must be a string"};let G=J.env;if(G!==void 0&&!qF(G))return{name:W,loadError:"stdio MCP transport env must be strings"};let K=Jw({name:W,transport:{type:"stdio",command:V,args:B,cwd:H,env:G},env:Q,metadata:X});if(!K.ok)return{name:W,loadError:K.reason};let F=G||K.env?{...G??{},...K.env??{}}:void 0;return{name:W,registration:{name:W,transport:{type:"stdio",command:V,args:B,cwd:H,env:F},metadata:X}}}if(typeof J.url!=="string"||!J.url.trim())return{name:W,loadError:`${j} MCP transport requires url`};let Y=J.headers;if(Y!==void 0&&!qF(Y))return{name:W,loadError:`${j} MCP transport headers must be strings`};return{name:W,registration:{name:W,transport:j==="sse"?{type:"sse",url:J.url,headers:Y}:{type:"streamableHttp",url:J.url,headers:Y},metadata:X}}}function WQ($){let W=new Map;return $.map(({server:Z,owner:Q,ownerLabel:J})=>{let j=vJ(Z);if(!j.registration)return{owner:Q,name:j.name,loadError:j.loadError??"invalid MCP server registration"};let X=W.get(j.registration.name);if(W.has(j.registration.name)){let Y=X?` already registered by ${X}`:"";return{owner:Q,name:j.registration.name,loadError:`duplicate MCP server name "${j.registration.name}"${Y}`}}return W.set(j.registration.name,J),{owner:Q,name:j.registration.name,registration:j.registration}})}import{createHash as jw}from"node:crypto";var MF=64,Xw=/[^a-zA-Z0-9_-]+/g,RF=8,Yw=1,Vw="mcp_tool";function Bw($){return jw("sha1").update($).digest("hex").slice(0,RF)}function Hw($){return $.replace(Xw,"_")}var ZQ=({serverName:$,toolName:W})=>{let Z=`${$}__${W}`,Q=Hw(Z);if(Q===Z&&Z.length<=MF)return Z;let J=Bw(Z),j=MF-Yw-RF;return`${Q.slice(0,j)||Vw}_${J}`};function m5($){return{[($.nameTransform??ZQ)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function QQ($){let W={};for(let Z of $.toolNames)Object.assign(W,m5({serverName:$.serverName,toolName:Z,nameTransform:$.nameTransform}));return W}import{createTool as Gw}from"@cline/shared";function Kw($,W){let Z=W.description?.trim();if(Z)return Z;return`Execute MCP tool "${W.name}" from server "${$}".`}async function f6($){let W=await $.provider.listTools($.serverName),Z=$.nameTransform??ZQ;return W.map((Q)=>{let J=Z({serverName:$.serverName,toolName:Q.name});return Gw({name:J,description:Kw($.serverName,Q),inputSchema:Q.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(j,X)=>$.provider.callTool({serverName:$.serverName,toolName:Q.name,arguments:j&&typeof j==="object"&&!Array.isArray(j)?j:void 0,context:X})})})}U1();var CF={};w(CF,{listPluginToolsWithDiagnostics:()=>JQ,listPluginTools:()=>v5});import{stat as Fw}from"node:fs/promises";import{isAbsolute as Aw,relative as Uw,resolve as EF}from"node:path";U1();function Dw($,W){let Z=Uw(EF($),EF(W));return Z===""||!Z.startsWith("..")&&!Aw(Z)}var _w=32,O6=new Map;function Lw($,W){if(!O6.has($)&&O6.size>=_w){let Z=O6.keys().next().value;if(Z)O6.delete(Z)}O6.set($,W)}async function fw($){let W=await Promise.all($.pluginPaths.map(async(Z)=>{try{let Q=await Fw(Z);return`${Z}:${Q.mtimeMs}:${Q.size}`}catch{return`${Z}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:W})}function wF($,W){return $.map((Z)=>({...Z,enabled:!W.has(Z.name)}))}function Ow($){return $.sort((W,Z)=>{let Q=W.name.localeCompare(Z.name);if(Q!==0)return Q;return W.path.localeCompare(Z.path)})}async function Tw($,W){if(!$.setup)return{tools:[]};let Z=[],Q={registerTool:(J)=>Z.push(J),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(J)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(Q,{workspaceInfo:W}),{tools:Z}}async function JQ($){let W=s1({workspacePath:$.workspacePath,cwd:$.cwd}),Z=M1($.disabledToolNames);if(W.length===0)return{tools:[],failures:[],warnings:[]};let Q=await fw({pluginPaths:W,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),J=O6.get(Q);if(J)return{tools:wF(J.tools,Z),failures:J.failures,warnings:J.warnings};let j=[],X=[],Y=[],V;try{V=await s8({pluginPaths:W,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),X=[...V.failures],Y=[...V.warnings];for(let H of V.extensions??[]){let G=H.__clinePluginPath;if(!G)continue;let K=Dw($.workspacePath,G)?"workspace-plugin":"global-plugin",F;try{F=await Tw(H,{rootPath:$.workspacePath})}catch(A){X.push({pluginPath:G,pluginName:H.name,phase:"setup",message:A instanceof Error?A.message:String(A),stack:A instanceof Error?A.stack:void 0});continue}for(let A of F.tools)j.push({name:A.name,pluginName:H.name,path:G,source:K,description:A.description?.trim()||void 0})}}catch(H){X=W.map((G)=>({pluginPath:G,phase:"load",message:H instanceof Error?H.message:String(H),stack:H instanceof Error?H.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let B=Ow(j);return Lw(Q,{tools:B,failures:X,warnings:Y}),{tools:wF(B,Z),failures:X,warnings:Y}}async function v5($){return(await JQ($)).tools}function d5($,W){if(!W)return"global";let Z=hF(W,$);return!Z.startsWith("..")&&!yF(Z)?"workspace":"global"}function Rw($,W){return d5($,W)==="workspace"?"workspace-plugin":"global-plugin"}function Nw($,W){let Z=hF(SF($),SF(W));return Z===""||!Z.startsWith("..")&&!yF(Z)}function Ew($){try{let W=JSON.parse(zw($,"utf8"));return typeof W.name==="string"&&W.name.trim()?W.name.trim():void 0}catch{return}}function ww($){let W=PF($);while(!0){let Z=Mw(W,"package.json");if(u5(Z)){let J=Ew(Z);if(J)return J;break}let Q=PF(W);if(Q===W)break;W=Q}return cJ($,qw($))}function Cw($){let W=[];for(let Z of s1({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let Q of t1([Z]))W.push({directory:Q,pluginName:ww(Z),pluginPath:Z,source:$.workspaceRoot?Rw(Z,$.workspaceRoot):"global-plugin"});return W.sort((Z,Q)=>Q.directory.length-Z.directory.length)}function Pw($,W){return W.find((Z)=>Nw(Z.directory,$))}function c5($){return[...$].sort((W,Z)=>{let Q=(J)=>{switch(J){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(W.source!==Z.source)return Q(W.source)-Q(Z.source);return W.name.localeCompare(Z.name)})}function kF($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function IF($,W){return $.cwd?.trim()||W||process.cwd()}async function bF($,W){if($.userInstructionService)return await W($.userInstructionService);let Z=kF($),Q=IF($,Z),J=c$({skills:{workspacePath:Z||void 0,includePluginSkills:!0,cwd:Q},rules:{workspacePath:Z||void 0},workflows:{workspacePath:Z||void 0}});try{return await J.start(),await W(J)}finally{J.stop()}}function Sw($,W){if(!$)return;let Z=$.listRecords("skill");if(W.id){let Q=Z.find((J)=>J.id===W.id);if(Q)return Q}for(let Q of Z)if(Q.filePath===W.path||Q.item.name===W.name||Q.id===W.name)return Q;return}class l${async list($={}){return await bF($,async(W)=>{let Z=kF($),Q=Cw({workspaceRoot:Z,cwd:IF($,Z)}),J=[],j=[],X=[],Y=[],V=[];if(W){for(let H of W.listRecords("workflow")){let G=H.item;J.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"workflow",source:d5(H.filePath,Z),description:G.instructions,toggleable:!1})}for(let H of W.listRecords("rule")){let G=H.item;j.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"rule",source:d5(H.filePath,Z),description:G.instructions,toggleable:!1})}for(let H of W.listRecords("skill")){let G=H.item,K=Pw(H.filePath,Q);X.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"skill",source:K?.source??d5(H.filePath,Z),description:G.description,pluginName:K?.pluginName,pluginPath:K?.pluginPath,toggleable:!0})}}if(Z)try{for(let H of await v5({workspacePath:Z,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))Y.push({id:`${H.pluginName}:${H.name}:${H.path}`,name:H.name,path:H.path,enabled:H.enabled,kind:"tool",source:H.source,description:H.description,toggleable:!0})}catch{}let B=J0();if($$({filePath:B}))try{for(let H of $1({filePath:B}))V.push({id:H.name,name:H.name,path:B,enabled:H.disabled!==!0,kind:"mcp",source:d5(B,Z),description:H.transport.type,toggleable:!0})}catch{}return{workflows:c5(J.filter((H)=>u5(H.path))),rules:c5(j.filter((H)=>u5(H.path))),skills:c5(X.filter((H)=>u5(H.path))),tools:c5(Y),mcp:c5(V.filter((H)=>u5(H.path)))}})}async toggle($){if($.type==="skills")return await bF($,async(W)=>{let Z=Sw(W,$),Q=Z?.filePath;if(!Q)throw Error(`Unable to resolve skill setting '${$.id??$.name??cJ($.path??"")}'.`);let J=Z?.item&&"disabled"in Z.item?Z.item.disabled!==!0:void 0,j=$.enabled??(J!==void 0?!J:void 0);if(j===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??cJ($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await sK({filePath:Q,enabled:j}),await W?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:W}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)cW($.name);else HH($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let W=$.name?.trim()||$.id?.trim();if(!W)throw Error("MCP server settings toggle requires a server name.");let Z=$.path?.trim()||J0(),Q=$.enabled;if(Q===void 0){let J=$1({filePath:Z}).find((j)=>j.name===W);if(!J)throw Error(`Unknown MCP server: ${W}`);Q=J.disabled===!0}return v2({filePath:Z,name:W,disabled:!Q}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function p2(){return new l$}function gF($){return{async list(W){let Z=$;if(Z.listSettings)return await Z.listSettings(W);return await p2().list(W)},async toggle(W){let Z=$;if(Z.toggleSetting)return await Z.toggleSetting(W);return await p2().toggle(W)}}}function mF($){function W(){let Z=$.pendingPrompts;if(!Z)throw Error("Pending prompt service is not available.");return Z}return{list(Z){return W().list(Z)},update(Z){return W().update(Z)},delete(Z){return W().delete(Z)}}}var vF={};w(vF,{splitCoreSessionConfig:()=>l5,isSessionNotFoundError:()=>Z$,SessionNotFoundError:()=>W$,SESSION_NOT_FOUND_ERROR_CODE:()=>r2});var r2="session_not_found";class W$ extends Error{sessionId;code="session_not_found";constructor($,W){super(W??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function Z$($){return $ instanceof W$||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function l5($){let{hooks:W,logger:Z,telemetry:Q,extensionContext:J,extraTools:j,extensions:X,onTeamEvent:Y,onConsecutiveMistakeLimitReached:V,checkpoint:B,compaction:H,...G}=$,K={};if(W)K.hooks=W;if(Z)K.logger=Z;if(Q)K.telemetry=Q;if(J)K.extensionContext=J;if(j)K.extraTools=j;if(X)K.extensions=X;if(Y)K.onTeamEvent=Y;if(V)K.onConsecutiveMistakeLimitReached=V;if(B?.createCheckpoint)K.checkpoint=B;if(H?.compact)K.compaction=H;let F=Object.keys(K).length>0?K:void 0;return{config:{...G,...B?{checkpoint:{enabled:B.enabled}}:{},...H?{compaction:{enabled:H.enabled,strategy:H.strategy,preserveRecentTokens:H.preserveRecentTokens,summarizer:H.summarizer}}:{}},...F?{localRuntime:F}:{}}}function cF($){let W=$.config;return"providerId"in W?{...$,config:{...W,...bw($.localRuntime)},localRuntime:$.localRuntime}:$}function uJ($,W={}){let Z=l5($.config),Q=C0(W.defaultCapabilities,$.capabilities),J=yw(Z.localRuntime,$.localRuntime),j=W.withExtensionContext?.(J?.extensionContext);if(j)J={...J??{},extensionContext:j};return{...$,...Z,...J?{localRuntime:J}:{},...Q?{capabilities:Q}:{}}}function bw($){if(!$)return{};let{modelCatalogDefaults:W,userInstructionService:Z,configExtensions:Q,onTeamRestored:J,...j}=$;return j}function yw(...$){let W={};for(let Z of $)if(Z)Object.assign(W,Z);return Object.keys(W).length>0?W:void 0}U0();function uF($){let W=$.input.config.telemetry??$.telemetry;if(!W)return;W.capture({event:v.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??F0.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 p5($){return!!$&&typeof $==="object"&&!Array.isArray($)}function dJ($){let W=$?.trim();return W?W:void 0}function hw($,W){let Z=$?.trim();if(!Z)return W;let Q=Date.parse(Z);if(!Number.isFinite(Q))return W;return new Date(Q).toISOString()}function dF($,W){return new Date(new Date($).getTime()+Math.max(0,Math.floor(W))*1000).toISOString()}function lF($,W){return new Date(new Date($).getTime()-Math.max(0,Math.floor(W))*1000).toISOString()}function kw($,W){if(!$)return W;return new Date($).getTime()>=new Date(W).getTime()?$:W}function Iw($,W){let Z=$.eventId.trim(),Q=$.eventType.trim(),J=$.source.trim(),j=dJ($.subject),X=dJ($.dedupeKey)??`${Q}:${J}:${j??Z}`;return{eventId:Z,eventType:Q,source:J,subject:j,occurredAt:hw($.occurredAt,W),workspaceRoot:dJ($.workspaceRoot),payload:p5($.payload)?$.payload:void 0,attributes:p5($.attributes)?$.attributes:void 0,dedupeKey:X}}function lJ($,W){if(!W)return;let Z=W.split("."),Q=$;for(let J of Z){if(!p5(Q))return;Q=Q[J]}return Q}function xw($,W){if($.attributes&&Object.hasOwn($.attributes,W))return $.attributes[W];if($.payload&&Object.hasOwn($.payload,W))return $.payload[W];let Z={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},Q=lJ(Z,W);if(Q!==void 0)return Q;if($.attributes){let J=lJ($.attributes,W);if(J!==void 0)return J}if($.payload)return lJ($.payload,W);return}function jQ($,W){if(Array.isArray(W))return W.some((Z)=>jQ($,Z));if(Array.isArray($))return $.some((Z)=>jQ(Z,W));if(p5(W)){if(!p5($))return!1;return Object.entries(W).every(([Z,Q])=>jQ($[Z],Q))}return Object.is($,W)}function gw($,W){if(!W||Object.keys(W).length===0)return!0;return Object.entries(W).every(([Z,Q])=>jQ(xw($,Z),Q))}class pJ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let W=new Date(this.nowFn()).toISOString(),Z=Iw($,W),Q=this.store.insertEventLog(Z,{receivedAtIso:W});if(!Q.created)return this.logger?.debug("cron.event.duplicate",{eventId:Q.record.eventId,eventType:Q.record.eventType,source:Q.record.source}),{event:Q.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:Q.record.dedupeKey}]};try{let J=this.store.listEventSpecsForType(Z.eventType),j=[],X=[],Y=[];for(let H of J){if(!gw(Z,H.filters)){j.push({specId:H.specId,externalId:H.externalId,reason:"filter_mismatch",dedupeKey:Z.dedupeKey});continue}X.push(H);let G=this.materializeForSpec(H,Z,Q.record.receivedAt);if(G.run)Y.push(G.run);else j.push({specId:H.specId,externalId:H.externalId,reason:G.reason,dedupeKey:Z.dedupeKey})}let V=X.length===0?"unmatched":Y.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(Q.record.eventId,{status:V,matchedSpecCount:X.length,queuedRunCount:Y.length,suppressedCount:j.filter((H)=>H.reason!=="filter_mismatch").length});let B=this.store.getEventLog(Q.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:Q.record.eventId,eventType:Q.record.eventType,status:V,matchedSpecCount:X.length,queuedRunCount:Y.length}),{event:B??Q.record,duplicate:!1,matchedSpecs:X,queuedRuns:Y,suppressions:j}}catch(J){if(this.store.updateEventLogProcessing(Q.record.eventId,{status:"failed",error:J instanceof Error?J.message:String(J)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:Q.record.eventId,eventType:Q.record.eventType,error:J});throw J}}materializeForSpec($,W,Z){let Q=W.dedupeKey??W.eventId,J=$.debounceSeconds??0;if(J>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:Q});if(V){let B=kw(V.scheduledFor,dF(Z,J)),H=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:W.eventId,scheduledFor:B});if(H)return{run:H,reason:"dedupe_window"}}}let j=$.dedupeWindowSeconds??0;if(j>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:Q,sinceIso:lF(Z,j)}))return{reason:"dedupe_window"};let X=$.cooldownSeconds??0;if(X>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:lF(Z,X)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:W.eventId,scheduledFor:J>0?dF(Z,J):Z}),reason:"dedupe_window"}}}class r5{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},W=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let Q of W)if(this.materializeOneOff(Q))$.oneOffQueued+=1;let Z=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Q of Z)try{if(this.materializeSchedule(Q))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as pw}from"node:path";import{buildClineSystemPrompt as rw}from"@cline/shared";import{nowIso as pF}from"@cline/shared/db";import{mkdirSync as mw,writeFileSync as vw}from"node:fs";import{join as cw}from"node:path";import{resolveCronReportsDir as uw}from"@cline/shared/storage";function p$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function i2($,W){if(W===void 0||W===null)return;return`${$}: ${p$(W)}`}function dw($,W,Z){let Q=[`runId: ${p$($.runId)}`,`specId: ${p$(W.specId)}`,`externalId: ${p$(W.externalId)}`,`title: ${p$(W.title)}`,`triggerKind: ${p$($.triggerKind)}`,`status: ${p$($.status)}`,`sourcePath: ${p$(W.sourcePath)}`],J=[i2("sessionId",$.sessionId),i2("startedAt",$.startedAt),i2("completedAt",$.completedAt),i2("triggerEventId",$.triggerEventId),i2("triggerEventType",Z?.eventType),i2("triggerEventSource",Z?.source),i2("triggerEventSubject",Z?.subject)];for(let j of J)if(j)Q.push(j);return`---
|
|
235
235
|
${Q.join(`
|
|
236
236
|
`)}
|
|
237
237
|
---
|
|
238
|
-
`}function
|
|
238
|
+
`}function lw($){let W=[];if($.triggerEvent){let Z=$.triggerEvent,Q=[`- eventId: ${Z.eventId}`,`- eventType: ${Z.eventType}`,`- source: ${Z.source}`,Z.subject?`- subject: ${Z.subject}`:"",`- occurredAt: ${Z.occurredAt}`,Z.dedupeKey?`- dedupeKey: ${Z.dedupeKey}`:"",Z.attributes?`- attributes: ${JSON.stringify(Z.attributes)}`:""].filter((J)=>J.length>0);W.push(`## Trigger Event
|
|
239
239
|
|
|
240
240
|
${Q.join(`
|
|
241
241
|
`)}
|
|
@@ -254,17 +254,17 @@ ${Q.join(`
|
|
|
254
254
|
${Z.join(`
|
|
255
255
|
`)}
|
|
256
256
|
`)}return W.join(`
|
|
257
|
-
`)}function
|
|
258
|
-
${
|
|
259
|
-
`)}class
|
|
257
|
+
`)}function rJ($){let W=uw($.specs);mw(W,{recursive:!0});let Z=cw(W,`${$.run.runId}.md`),Q=`${dw($.run,$.spec,$.data.triggerEvent)}
|
|
258
|
+
${lw($.data)}`;return vw(Z,Q,"utf8"),Z}class iJ{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,W,Z){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let Q=Math.max(1,Math.floor(Z)),J=this.activeExecutions.get($)??new Set;if(J.size>=Q)return!1;return J.add(W),this.activeExecutions.set($,J),!0}release($,W){let Z=this.activeExecutions.get($);if(!Z)return;if(Z.delete(W),Z.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let W of this.activeExecutions.values())$+=W.size;return $}}var iw=15000,nw=90,rF=["rules","skills","plugins"];function aw($,W){return new Set($.extensions??rF).has(W)}function ow($,W){if($.tools===void 0)return{"*":{autoApprove:!0}};let Z={"*":{enabled:!1,autoApprove:!0}};for(let Q of $.tools)Z[Q]={enabled:!0,autoApprove:!0};if(W==="yolo")Z[z0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Z}function sw($){let W=$?.trim();if(!W)return;return["# Notes Directory",`Use ${W} 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(`
|
|
259
|
+
`)}class nJ extends Error{constructor($){super($);this.name="TimeoutError"}}async function tw($,W){if(W<=0)return $;let Z,Q=new Promise((J,j)=>{Z=setTimeout(()=>{j(new nJ("cron run timed out"))},W)});try{return await Promise.race([$,Q])}finally{if(Z)clearTimeout(Z)}}class i5{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 iJ($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??nw)*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??iw);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 W=[...this.activeRuns.entries()];await Promise.all(W.map(async([Z,Q])=>{if(Q.sessionId)try{await this.options.runtimeHandlers.abortSession(Q.sessionId)}catch{}try{this.store.requeueRun({runId:Z,claimToken:Q.claimToken,error:"runner stopped before completion"})}catch{}}))}async dispose(){if(this.disposed)return;this.disposed=!0,await this.stop()}async tick(){if(this.ticking)return;this.ticking=!0;try{this.materializer.materializeAll();let $=this.store.claimDueRuns({nowIso:pF(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((W)=>this.executeClaim(W)))}catch($){let W=this.options.logger;if(W)if(W.error)W.error("cron.runner.tick.failed",{error:$});else W.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,W])=>{let Z=this.store.getRun($);return Z?[{...Z,...W}]:[]})}async executeClaim($){let W=$.run,Z=this.store.getSpec(W.specId);if(!Z){this.store.completeRun(W.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!Z.enabled||Z.removed){this.store.completeRun(W.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let Q=Z.maxParallel&&Z.maxParallel>0?Z.maxParallel:1;if(!this.limiter.acquire(Z.specId,W.runId,Q)){this.store.requeueRun({runId:W.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(Z.specId,W.runId),this.store.requeueRun({runId:W.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(W.runId,{claimToken:$.claimToken});let j=W.triggerEventId?this.store.getEventLog(W.triggerEventId):void 0,X,Y,V=Date.now(),B;if(Z.timeoutSeconds&&Z.timeoutSeconds>0)B=V+Z.timeoutSeconds*1000;try{Y=this.startClaimLeaseHeartbeat($);let H=await this.buildStartRequest(Z);if(X=(await this.options.runtimeHandlers.startSession(H)).sessionId.trim(),!X)throw Error("runtime returned empty sessionId");this.activeRuns.set(W.runId,{claimToken:$.claimToken,sessionId:X}),this.store.attachSessionIdToRun(W.runId,X);let K={config:H,prompt:this.buildPrompt(Z,j)},F=this.options.runtimeHandlers.sendSession(X,K),A=B?Math.max(1,B-Date.now()):0,U=(await tw(F,A)).result,L=Date.now(),_=rJ({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...W,sessionId:X,status:"done"},spec:Z,data:{finalText:U.text,usage:U.usage,toolCalls:U.toolCalls,durationMs:L-V,triggerEvent:j}});this.store.completeRun(W.runId,{status:"done",sessionId:X,reportPath:_,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",Z,W.runId),this.store.updateSpecLastRunAt(Z.specId,pF())}catch(H){let G=H instanceof nJ;if(X&&G)try{await this.options.runtimeHandlers.abortSession(X)}catch{}let K=H instanceof Error?H.message:String(H),F=Date.now(),A=rJ({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...W,sessionId:X,status:"failed"},spec:Z,data:{error:K,durationMs:F-V,triggerEvent:j}});this.store.completeRun(W.runId,{status:"failed",sessionId:X,reportPath:A,error:K,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.failed",Z,W.runId)}finally{if(Y?.(),X)try{await this.options.runtimeHandlers.stopSession(X)}catch{}this.activeRuns.delete(W.runId),this.limiter.release(Z.specId,W.runId)}}publishScheduleExecutionEvent($,W,Z){if(W.source!=="hub-schedule"||!this.options.eventPublisher)return;let Q=this.store.getRun(Z);if(!Q)return;let J=Q.status==="done"?"success":Q.status==="cancelled"?"aborted":Q.status==="running"?"running":Q.status==="queued"?"pending":"failed";this.options.eventPublisher($,{scheduleId:W.externalId,executionId:Q.runId,sessionId:Q.sessionId,triggeredAt:new Date(Q.scheduledFor??Q.createdAt).getTime(),startedAt:Q.startedAt?new Date(Q.startedAt).getTime():void 0,endedAt:Q.completedAt?new Date(Q.completedAt).getTime():void 0,status:J,errorMessage:Q.error})}buildPrompt($,W){let Z=$.prompt??"";if(!W)return Z;let Q={eventId:W.eventId,eventType:W.eventType,source:W.source,subject:W.subject,occurredAt:W.occurredAt,workspaceRoot:W.workspaceRoot,dedupeKey:W.dedupeKey,attributes:W.attributes,payload:W.payload};return`${Z}
|
|
260
260
|
|
|
261
261
|
Trigger event:
|
|
262
|
-
${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Z=setInterval(()=>{let Q=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,Q))clearInterval(Z)},W);return()=>clearInterval(Z)}async buildSystemPrompt($,W,Z,Q){let J=
|
|
262
|
+
${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Z=setInterval(()=>{let Q=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,Q))clearInterval(Z)},W);return()=>clearInterval(Z)}async buildSystemPrompt($,W,Z,Q){let J=sw($.notesDirectory),j=F6(void 0,J),X=await _5(W),Y=rw({ide:"Cline Cron",workspaceRoot:W,workspaceName:pw(W),metadata:X,rules:$.systemPrompt?void 0:j,mode:Z,providerId:Q,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?F6(Y,j)??Y:Y}async buildStartRequest($){let W=($.workspaceRoot??"").trim(),Z=($.providerId??"").trim(),Q=($.modelId??"").trim(),J=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,j=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():W;if(!W)throw Error("cron spec requires workspaceRoot");let X=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:W,cwd:j,provider:Z,model:Q,mode:X,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,W,X,Z),maxIterations:$.maxIterations,enableTools:J?.enableTools??!0,enableSpawn:J?.enableSpawn??!0,enableTeams:J?.enableTeams??!0,autoApproveTools:J?.autoApproveTools??!0,toolPolicies:ow($,X),configExtensions:rF.filter((Y)=>aw($,Y))}}}import{existsSync as TC,readdirSync as zC,readFileSync as qC,statSync as MC}from"node:fs";import{relative as RC}from"node:path";import{resolveCronSpecsDir as NC}from"@cline/shared/storage";function n5($,W,Z,Q){let J=new Set;function j(X){let Y=X.toLowerCase();if(Q){let B=Q.indexOf(Y);if(B!==-1)return B+W}let V=Number(X);if(!Number.isInteger(V)||V<W||V>Z)throw Error(`Invalid cron value "${X}" for range [${W}-${Z}]`);return V}for(let X of $.split(",")){if(X==="*"){for(let B=W;B<=Z;B+=1)J.add(B);continue}let Y=X.indexOf("/");if(Y!==-1){let B=X.slice(0,Y),H=Number(X.slice(Y+1));if(!Number.isInteger(H)||H<1)throw Error(`Invalid step "${X.slice(Y+1)}"`);let G=W,K=Z;if(B!=="*"){let F=B.indexOf("-");if(F!==-1)G=j(B.slice(0,F)),K=j(B.slice(F+1));else G=j(B)}if(G>K)throw Error(`Invalid cron range "${B}"`);for(let F=G;F<=K;F+=H)J.add(F);continue}let V=X.indexOf("-");if(V!==-1){let B=j(X.slice(0,V)),H=j(X.slice(V+1));if(B>H)throw Error(`Invalid cron range "${X}"`);for(let G=B;G<=H;G+=1)J.add(G);continue}J.add(j(X))}return[...J].sort((X,Y)=>X-Y)}var ew=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],nF=["sun","mon","tue","wed","thu","fri","sat"];function a5($,W,Z){let Q=$[W];if(typeof Q!=="string")throw Error(`Invalid cron pattern "${Z}": missing field ${W+1}`);return Q}function aJ($,W){let Z=$[0];if(typeof Z!=="number")throw Error(`Invalid cron pattern: no values parsed for ${W}`);return Z}function oJ($){let W=$.trim().split(/\s+/);if(W.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${W.length}`);return{minutes:n5(a5(W,0,$),0,59),hours:n5(a5(W,1,$),0,23),daysOfMonth:n5(a5(W,2,$),1,31),months:n5(a5(W,3,$),1,12,ew),daysOfWeek:n5(a5(W,4,$),0,6,nF)}}function sJ($){oJ($)}function aF($,W,Z=Date.now()){n2($,Z,W)}var iF=new Map,$C=new Map(nF.map(($,W)=>[$,W]));function oF($){let W=$?.trim();return W?W:void 0}function sF($){let W=iF.get($);if(W)return W;let Z=new Intl.DateTimeFormat("en-US",{timeZone:$,calendar:"gregory",numberingSystem:"latn",year:"numeric",month:"2-digit",day:"2-digit",weekday:"short",hour:"2-digit",minute:"2-digit",hourCycle:"h23"});return iF.set($,Z),Z}function WC($){let W=oF($);if(!W)return;sF(W).format(new Date)}function ZC($,W){let Z=sF(W).formatToParts(new Date($)),Q=new Map(Z.map((X)=>[X.type,X.value])),J=Q.get("weekday")?.toLowerCase().slice(0,3)??"",j=$C.get(J);if(j===void 0)throw Error(`Unable to resolve weekday for timezone "${W}"`);return{month:Number(Q.get("month")),dayOfMonth:Number(Q.get("day")),dayOfWeek:j,hour:Number(Q.get("hour")),minute:Number(Q.get("minute"))}}function QC($){let W=new Date($);return{month:W.getMonth()+1,dayOfMonth:W.getDate(),dayOfWeek:W.getDay(),hour:W.getHours(),minute:W.getMinutes()}}function JC($,W){return $.months.includes(W.month)&&$.daysOfMonth.includes(W.dayOfMonth)&&$.daysOfWeek.includes(W.dayOfWeek)&&$.hours.includes(W.hour)&&$.minutes.includes(W.minute)}function jC($,W,Z){let Q=oJ($),J=new Date(W);J.setSeconds(0,0);let j=J.getTime()+60000,X=new Date(W);X.setFullYear(X.getFullYear()+4);let Y=X.getTime();while(j<=Y){if(JC(Q,ZC(j,Z)))return j;j+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Z}"`)}function n2($,W,Z){let Q=oF(Z);if(Q)return WC(Q),jC($,W,Q);let J=oJ($),j=new Date(W);j.setSeconds(0,0),j=new Date(j.getTime()+60000);let X=new Date(W);X.setFullYear(X.getFullYear()+4);while(j<=X){let{month:Y,dayOfMonth:V,dayOfWeek:B,hour:H,minute:G}=QC(j.getTime());if(!J.months.includes(Y)){let K=J.months.find((A)=>A>Y)??aJ(J.months,"months"),F=K<=Y?1:0;j=new Date(j.getFullYear()+F,K-1,1,0,0,0,0);continue}if(!J.daysOfMonth.includes(V)||!J.daysOfWeek.includes(B)){j=new Date(j.getFullYear(),j.getMonth(),V+1,0,0,0,0);continue}if(!J.hours.includes(H)){let K=J.hours.find((A)=>A>H)??aJ(J.hours,"hours"),F=K<=H?1:0;j=new Date(j.getFullYear(),j.getMonth(),j.getDate()+F,K,0,0,0);continue}if(!J.minutes.includes(G)){let K=J.minutes.find((A)=>A>G)??aJ(J.minutes,"minutes"),F=K<=G?1:0;j=new Date(j.getFullYear(),j.getMonth(),j.getDate(),j.getHours()+F,K,0,0);continue}return j.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{createHash as XC}from"node:crypto";import YC from"yaml";function VC($){let W=$.replace(/\\/g,"/");if(W.startsWith("events/")&&W.endsWith(".event.md"))return"event";if(W.endsWith(".cron.md"))return"schedule";return"one_off"}function BC($){let W=$.replace(/\r\n/g,`
|
|
263
263
|
`);if(!W.startsWith(`---
|
|
264
264
|
`))return{frontmatter:void 0,body:$};let Z=W.slice(4),Q=Z.indexOf(`
|
|
265
265
|
---`);if(Q===-1)return{frontmatter:void 0,body:$};let J=Z.slice(0,Q),j=Z.slice(Q+4);if(j.startsWith(`
|
|
266
|
-
`))j=j.slice(1);return{frontmatter:J,body:j}}function
|
|
267
|
-
`),Z.update(W),Z.digest("hex")}function
|
|
266
|
+
`))j=j.slice(1);return{frontmatter:J,body:j}}function Z1($){if(typeof $!=="string")return;let W=$.trim();return W.length>0?W:void 0}function HC($){if(!Array.isArray($))return;let W=$.map((Z)=>typeof Z==="string"?Z.trim():"").filter((Z)=>Z.length>0);return W.length>0?W:void 0}function $j($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function GC($){let W=$j($);if(!W)return;let Z=Z1(W.providerId),Q=Z1(W.modelId);if(Z===void 0&&Q===void 0)return;return{providerId:Z,modelId:Q}}function KC($){if(typeof $!=="string")return;let W=$.trim().toLowerCase();if(W==="act"||W==="plan"||W==="yolo")return W;return}function eF($,W={}){let Z=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!Z)return;let Q=[...new Set(Z.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0))];if(Array.isArray($)&&W.preserveEmptyArray)return Q;return Q.length>0?Q:void 0}var FC=new Set(q$);function AC($){let W=eF($,{preserveEmptyArray:!0});if(!W)return;let Z=W.filter((Q)=>!FC.has(Q));if(Z.length>0)throw Error(`unknown tool(s): ${Z.join(", ")}`);return W}var UC=new Set(["rules","skills","plugins"]);function DC($){let W=eF($,{preserveEmptyArray:!0});if(!W)return;let Z=W.filter((Q)=>!UC.has(Q));if(Z.length>0)throw Error(`unknown extension(s): ${Z.join(", ")}`);return W}function tJ($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function eJ($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function Wj($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Z)=>Wj(Z)).join(",")}]`;let W=Object.entries($).filter(([,Z])=>Z!==void 0);return W.sort(([Z],[Q])=>Z<Q?-1:Z>Q?1:0),`{${W.map(([Z,Q])=>`${JSON.stringify(Z)}:${Wj(Q)}`).join(",")}}`}function $A($,W){let Z=XC("sha256");return Z.update(Wj($)),Z.update(`
|
|
267
|
+
`),Z.update(W),Z.digest("hex")}function _C($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var LC=["schedule","timezone"],fC=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],OC=["cwd"];function tF($,W,Z,Q,J){return{externalId:$,relativePath:$,triggerKind:W,body:Z,contentHash:$A(Q,Z),error:J}}function N1($,W,Z,Q,J,j){return{externalId:$,relativePath:W,triggerKind:Z,body:Q,contentHash:J,error:j}}function WA($){let W=$.relativePath.replace(/\\/g,"/"),Z=VC(W),{frontmatter:Q,body:J}=BC($.raw),j={};if(Q!==void 0&&Q.trim().length>0)try{let _=YC.parse(Q);if(_&&typeof _==="object"&&!Array.isArray(_))j=_;else if(_!==null&&_!==void 0)return tF(W,Z,J,{},"frontmatter must be a YAML mapping")}catch(_){return tF(W,Z,J,{},_ instanceof Error?`failed to parse frontmatter: ${_.message}`:"failed to parse frontmatter")}let X=$A(j,J),Y=Z1(j.id),V=Y??W;if(Z!=="schedule"){for(let _ of LC)if(j[_]!==void 0)return N1(V,W,Z,J,X,`field "${_}" is only allowed on *.cron.md specs`)}for(let _ of OC)if(j[_]!==void 0)return N1(V,W,Z,J,X,`field "${_}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Z!=="event"){for(let _ of fC)if(j[_]!==void 0)return N1(V,W,Z,J,X,`field "${_}" is only allowed on .event.md specs`)}let B=Z1(j.prompt),H=J.trim(),G=B??(H.length>0?H:void 0);if(!G)return N1(V,W,Z,J,X,"prompt is required (frontmatter `prompt` or markdown body)");let K=Z1(j.workspaceRoot);if(!K)return N1(V,W,Z,J,X,"workspaceRoot is required");let F,A;try{F=AC(j.tools),A=DC(j.extensions)}catch(_){return N1(V,W,Z,J,X,_ instanceof Error?_.message:String(_))}let D=KC(j.mode);if(j.mode!==void 0&&D===void 0)return N1(V,W,Z,J,X,"mode must be one of: act, plan, yolo");let U={id:Y,title:Z1(j.title)??Y??_C(W),prompt:G,workspaceRoot:K,mode:D??"yolo",systemPrompt:Z1(j.systemPrompt),modelSelection:GC(j.modelSelection),maxIterations:tJ(j.maxIterations),timeoutSeconds:tJ(j.timeoutSeconds),tools:F,notesDirectory:Z1(j.notesDirectory),extensions:A,source:Z1(j.source)??"user",tags:HC(j.tags),enabled:typeof j.enabled==="boolean"?j.enabled:!0,metadata:$j(j.metadata)},L;if(Z==="schedule"){let _=Z1(j.schedule);if(!_)return N1(V,W,Z,J,X,"schedule is required for *.cron.md specs");let M=Z1(j.timezone);try{aF(_,M)}catch(O){return N1(V,W,Z,J,X,O instanceof Error?O.message:String(O))}L={...U,triggerKind:"schedule",schedule:_,timezone:M}}else if(Z==="event"){let _=Z1(j.event);if(!_)return N1(V,W,Z,J,X,"event is required for .event.md specs");L={...U,triggerKind:"event",event:_,filters:$j(j.filters),debounceSeconds:eJ(j.debounceSeconds),dedupeWindowSeconds:eJ(j.dedupeWindowSeconds),cooldownSeconds:eJ(j.cooldownSeconds),maxParallel:tJ(j.maxParallel)}}else L={...U,triggerKind:"one_off"};return{externalId:V,relativePath:W,triggerKind:Z,body:J,contentHash:X,spec:L}}function EC($,W){return RC($,W).replace(/\\/g,"/")}function wC($){if(!TC($))return[];let W=[],Z=[$];while(Z.length>0){let Q=Z.pop();if(!Q)continue;let J;try{J=zC(Q,{withFileTypes:!0})}catch{continue}for(let j of J){let X=`${Q}/${j.name}`;if(j.isDirectory()){if(j.name==="reports")continue;Z.push(X);continue}if(!j.isFile())continue;if(!j.name.endsWith(".md"))continue;W.push(X)}}return W}class Zj{store;cronDir;constructor($){this.store=$.store,this.cronDir=NC($.specs??($.workspaceRoot?{scope:"workspace",workspaceRoot:$.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let $={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},W=wC(this.cronDir),Z=new Set;for(let J of W){let j=EC(this.cronDir,J);Z.add(j),$.scanned+=1;let X=await this.reconcileFile(j,J);if(X){if($.changes.push(X),$.upserted+=1,X.parse.error)$.invalidParses+=1}}let Q=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let J of Q)if(!Z.has(J.sourcePath))this.handleFileDeleted(J),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,W){let Z=this.store.getSpecBySourcePath($),Q,J;try{Q=qC(W,"utf8"),J=MC(W).mtimeMs}catch{return}let X=WA({relativePath:$,raw:Q}),Y=this.store.upsertSpec({externalId:X.externalId,sourcePath:$,triggerKind:X.triggerKind,sourceMtimeMs:J,sourceHash:X.contentHash,parseStatus:X.error?"invalid":"valid",parseError:X.error,spec:X.spec});if(!X.error&&X.triggerKind==="schedule"&&Y.record.enabled)this.applyScheduleNextRunAt(Y.record,{forceReset:!Z||Z.removed||!Z.enabled||Z.scheduleExpr!==Y.record.scheduleExpr||Z.timezone!==Y.record.timezone});return{relativePath:$,result:Y,parse:X}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let W of $)this.applyScheduleNextRunAt(W,{forceReset:!1})}applyScheduleNextRunAt($,W){if(!$.scheduleExpr)return;if(!W.forceReset&&$.nextRunAt)return;try{let Z=Date.now(),Q=$.lastRunAt?Math.max(Z,new Date($.lastRunAt).getTime()):Z,J=n2($.scheduleExpr,Q,$.timezone),j=new Date(J).toISOString();if($.nextRunAt!==j)this.store.updateSpecNextRunAt($.specId,j)}catch{}}}import{existsSync as CC,mkdirSync as PC,watch as SC}from"node:fs";import{relative as bC,resolve as yC}from"node:path";var hC=250;class Qj{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??hC),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{PC($,{recursive:!0}),this.watcher=SC($,{recursive:!0},(W,Z)=>{if(!Z)return;let Q=String(Z).replace(/\\/g,"/");if(!Q.endsWith(".md"))return;if(Q.startsWith("reports/"))return;this.scheduleReconcile(Q)}),this.watcher.on("error",this.onError)}catch(W){this.onError(W)}}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 W=this.pending.get($);if(W)clearTimeout(W);let Z=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,Z)}async reconcileNow($){try{let W=yC(this.reconciler.getCronDir(),$);if(!CC(W)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Z=bC(this.reconciler.getCronDir(),W).replace(/\\/g,"/");await this.reconciler.reconcileFile(Z,W),await this.onReconciled()}catch(W){this.onError(W)}}}import{randomUUID as o5}from"node:crypto";import{asOptionalString as c,asString as j0,loadSqliteDb as IC,nowIso as P0}from"@cline/shared/db";import{resolveCronDbPath as xC}from"@cline/shared/storage";var kC=[`CREATE TABLE IF NOT EXISTS cron_specs (
|
|
268
268
|
spec_id TEXT PRIMARY KEY,
|
|
269
269
|
external_id TEXT NOT NULL,
|
|
270
270
|
source_path TEXT NOT NULL UNIQUE,
|
|
@@ -355,17 +355,17 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
|
|
|
355
355
|
ON cron_specs(trigger_kind, enabled, next_run_at);`,`CREATE INDEX IF NOT EXISTS cron_specs_event_match_idx
|
|
356
356
|
ON cron_specs(trigger_kind, event_type, enabled);`,`CREATE INDEX IF NOT EXISTS cron_specs_parse_status_idx
|
|
357
357
|
ON cron_specs(parse_status, updated_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_source_path_idx
|
|
358
|
-
ON cron_specs(source_path);`];function
|
|
358
|
+
ON cron_specs(source_path);`];function ZA($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let W of kC)$.exec(W)}function XQ($){if(!$)return;try{let W=JSON.parse($);if(W&&typeof W==="object"&&!Array.isArray(W))return W}catch{}return}function Jj($,W={}){if(!$)return;try{let Z=JSON.parse($);if(!Array.isArray(Z))return;let Q=Z.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0);if(W.preserveEmpty)return Q;return Q.length>0?Q:void 0}catch{return}}function a2($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function r$($){return{specId:j0($.spec_id),externalId:j0($.external_id),sourcePath:j0($.source_path),triggerKind:j0($.trigger_kind),sourceMtimeMs:a2($.source_mtime_ms),sourceHash:c($.source_hash),parseStatus:j0($.parse_status)==="invalid"?"invalid":"valid",parseError:c($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:j0($.title),prompt:c($.prompt),workspaceRoot:c($.workspace_root),scheduleExpr:c($.schedule_expr),timezone:c($.timezone),eventType:c($.event_type),filters:XQ(c($.filters_json)),debounceSeconds:a2($.debounce_seconds),dedupeWindowSeconds:a2($.dedupe_window_seconds),cooldownSeconds:a2($.cooldown_seconds),mode:c($.mode),systemPrompt:c($.system_prompt),providerId:c($.provider_id),modelId:c($.model_id),maxIterations:a2($.max_iterations),timeoutSeconds:a2($.timeout_seconds),maxParallel:a2($.max_parallel),tools:Jj(c($.tools_json),{preserveEmpty:!0}),notesDirectory:c($.notes_directory),extensions:Jj(c($.extensions_json),{preserveEmpty:!0}),source:c($.source),tags:Jj(c($.tags_json)),metadata:XQ(c($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:c($.last_materialized_run_id),lastRunAt:c($.last_run_at),nextRunAt:c($.next_run_at),createdAt:j0($.created_at),updatedAt:j0($.updated_at)}}function jj($){return{runId:j0($.run_id),specId:j0($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:j0($.trigger_kind),status:j0($.status),claimToken:c($.claim_token),claimStartedAt:c($.claim_started_at),claimUntilAt:c($.claim_until_at),scheduledFor:c($.scheduled_for),triggerEventId:c($.trigger_event_id),startedAt:c($.started_at),completedAt:c($.completed_at),sessionId:c($.session_id),reportPath:c($.report_path),error:c($.error),attemptCount:Number($.attempt_count??0),createdAt:j0($.created_at),updatedAt:j0($.updated_at)}}function QA($){return{eventId:j0($.event_id),eventType:j0($.event_type),source:j0($.source),subject:c($.subject),occurredAt:j0($.occurred_at),receivedAt:j0($.received_at),workspaceRoot:c($.workspace_root),dedupeKey:c($.dedupe_key),payload:XQ(c($.payload_json)),attributes:XQ(c($.attributes_json)),processingStatus:j0($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:c($.error),createdAt:j0($.created_at),updatedAt:j0($.updated_at)}}function JA($){return $?JSON.stringify($):null}var gC=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function jA($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function mC($,W,Z,Q){for(let J of gC){let j=$[J],X=W[J];if(jA(j)!==jA(X))return!0}if(Z===!1&&Q===!0)return!0;return!1}function vC($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function cC($){return`hub/schedules/${$}.cron.md`}function uC($){let W={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(W).length>0?W:void 0}function Xj($){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((W)=>W.trim().length>0),enabled:$.enabled!==!1,metadata:uC($)}}function XA($){return JSON.stringify(Xj($))}function dC($,W){let Z=$.metadata?{...$.metadata}:{},Q=W.createdBy===null?void 0:W.createdBy!==void 0?W.createdBy:typeof Z.__hubScheduleCreatedBy==="string"?Z.__hubScheduleCreatedBy:void 0,J=W.cwd!==void 0?W.cwd:typeof Z.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,j=W.runtimeOptions!==void 0?W.runtimeOptions:Z.__hubRuntimeOptions&&typeof Z.__hubRuntimeOptions==="object"&&!Array.isArray(Z.__hubRuntimeOptions)?Z.__hubRuntimeOptions:void 0;return delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions,{name:W.name??$.title,cronPattern:W.cronPattern??$.scheduleExpr??"",prompt:W.prompt??$.prompt??"",workspaceRoot:W.workspaceRoot??$.workspaceRoot??"",cwd:J,modelSelection:W.modelSelection!==void 0?W.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:W.enabled??$.enabled,mode:W.mode??($.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"),systemPrompt:W.systemPrompt===null?void 0:W.systemPrompt!==void 0?W.systemPrompt:$.systemPrompt,maxIterations:W.maxIterations===null?void 0:W.maxIterations!==void 0?W.maxIterations:$.maxIterations,timeoutSeconds:W.timeoutSeconds===null?void 0:W.timeoutSeconds!==void 0?W.timeoutSeconds:$.timeoutSeconds,maxParallel:W.maxParallel??$.maxParallel??1,createdBy:Q,tags:W.tags??$.tags,runtimeOptions:j,metadata:W.metadata!==void 0?W.metadata:Object.keys(Z).length>0?Z:void 0}}class s5{db;constructor($={}){let W=$.dbPath??xC();this.db=IC(W),ZA(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let W=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return W?r$(W):void 0}getSpec($){let W=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return W?r$(W):void 0}getSpecByExternalId($){let W=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return W?r$(W):void 0}listSpecs($={}){let W=[],Z=[];if($.triggerKind)W.push("trigger_kind = ?"),Z.push($.triggerKind);if(typeof $.enabled==="boolean")W.push("enabled = ?"),Z.push($.enabled?1:0);if($.parseStatus)W.push("parse_status = ?"),Z.push($.parseStatus);if(!$.includeRemoved)W.push("removed = 0");let Q=W.length>0?`WHERE ${W.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${Q} ORDER BY created_at DESC LIMIT ?`).all(...Z,J).map((X)=>r$(X))}createHubSchedule($){let W=`sched_${o5()}`,Z=this.upsertSpec({externalId:W,sourcePath:cC(W),triggerKind:"schedule",sourceHash:XA($),parseStatus:"valid",spec:Xj($)});this.initializeScheduleNextRun(Z.record.specId);let Q=this.getSpec(Z.record.specId);if(!Q)throw Error("failed to create hub schedule");return Q}getHubSchedule($){let W=this.db.prepare(`SELECT * FROM cron_specs
|
|
359
359
|
WHERE external_id = ? AND source = 'hub-schedule' AND removed = 0
|
|
360
|
-
ORDER BY created_at ASC LIMIT 1`).get($);return W?
|
|
360
|
+
ORDER BY created_at ASC LIMIT 1`).get($);return W?r$(W):void 0}listHubSchedules($={}){let W=["source = 'hub-schedule'","trigger_kind = 'schedule'","removed = 0"],Z=[];if(typeof $.enabled==="boolean")W.push("enabled = ?"),Z.push($.enabled?1:0);if($.tags&&$.tags.length>0)for(let j of $.tags)W.push("tags_json LIKE ?"),Z.push(`%"${j.trim()}"%`);let Q=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_specs
|
|
361
361
|
WHERE ${W.join(" AND ")}
|
|
362
|
-
ORDER BY created_at DESC LIMIT ?`).all(...Z,Q).map((j)=>
|
|
362
|
+
ORDER BY created_at DESC LIMIT ?`).all(...Z,Q).map((j)=>r$(j))}updateHubSchedule($,W){let Z=this.getHubSchedule($);if(!Z)return;let Q=dC(Z,W),J=this.upsertSpec({externalId:$,sourcePath:Z.sourcePath,triggerKind:"schedule",sourceHash:XA(Q),parseStatus:"valid",spec:Xj(Q)});if(W.cronPattern!==void 0||W.enabled!==void 0)this.initializeScheduleNextRun(J.record.specId);return this.getSpec(J.record.specId)}deleteHubSchedule($){let W=this.getHubSchedule($);if(!W)return!1;return this.markSpecRemoved(W.specId),this.cancelQueuedRunsForSpec(W.specId),!0}enqueueHubScheduleRun($,W="manual"){let Z=this.getHubSchedule($);if(!Z||!Z.enabled||Z.removed||Z.parseStatus!=="valid")return;return this.enqueueRun({specId:Z.specId,specRevision:Z.revision,triggerKind:W,scheduledFor:P0()})}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
|
|
363
363
|
WHERE trigger_kind = 'event'
|
|
364
364
|
AND event_type = ?
|
|
365
365
|
AND enabled = 1
|
|
366
366
|
AND removed = 0
|
|
367
367
|
AND parse_status = 'valid'
|
|
368
|
-
ORDER BY created_at ASC`).all($).map((Z)=>
|
|
368
|
+
ORDER BY created_at ASC`).all($).map((Z)=>r$(Z))}upsertSpec($){let W=P0(),Z=this.getSpecBySourcePath($.sourcePath),Q=$.spec,J={title:Q?.title??Z?.title??vC($.sourcePath),prompt:Q?.prompt,workspaceRoot:Q?.workspaceRoot,scheduleExpr:Q?.triggerKind==="schedule"?Q.schedule:void 0,timezone:Q?.triggerKind==="schedule"?Q.timezone:void 0,eventType:Q?.triggerKind==="event"?Q.event:void 0,filters:Q?.triggerKind==="event"?Q.filters:void 0,debounceSeconds:Q?.triggerKind==="event"?Q.debounceSeconds:void 0,dedupeWindowSeconds:Q?.triggerKind==="event"?Q.dedupeWindowSeconds:void 0,cooldownSeconds:Q?.triggerKind==="event"?Q.cooldownSeconds:void 0,mode:Q?.mode,systemPrompt:Q?.systemPrompt,providerId:Q?.modelSelection?.providerId,modelId:Q?.modelSelection?.modelId,maxIterations:Q?.maxIterations,timeoutSeconds:Q?.timeoutSeconds,maxParallel:Q&&"maxParallel"in Q?Q.maxParallel:void 0,tools:Q?.tools,notesDirectory:Q?.notesDirectory,extensions:Q?.extensions,source:Q?.source},j=$.parseStatus==="valid"&&(Q?.enabled??!0);if(!Z){let H=`cspec_${o5()}`;this.insertSpecRow(H,$,J,j,W);let G=this.getSpec(H);if(!G)throw Error("failed to insert cron_spec row");return{record:G,created:!0,revisionChanged:!0}}let Y=Z.sourceHash!==$.sourceHash&&mC(Z,J,Z.enabled,j),V=Y?Z.revision+1:Z.revision;this.updateSpecRow(Z.specId,$,J,j,V,W);let B=this.getSpec(Z.specId);if(!B)throw Error("failed to reload cron_spec after update");return{record:B,created:!1,revisionChanged:Y}}insertSpecRow($,W,Z,Q,J){let j=W.spec;this.db.prepare(`INSERT INTO cron_specs (
|
|
369
369
|
spec_id, external_id, source_path, trigger_kind,
|
|
370
370
|
source_mtime_ms, source_hash, parse_status, parse_error,
|
|
371
371
|
enabled, removed, title, prompt, workspace_root,
|
|
@@ -388,7 +388,7 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
|
|
|
388
388
|
tools_json = ?, notes_directory = ?, extensions_json = ?, source = ?,
|
|
389
389
|
tags_json = ?, metadata_json = ?,
|
|
390
390
|
revision = ?, updated_at = ?
|
|
391
|
-
WHERE spec_id = ?`).run(W.externalId,W.triggerKind,W.sourceMtimeMs??null,W.sourceHash,W.parseStatus,W.parseError??null,Q?1:0,Z.title??"",Z.prompt??null,Z.workspaceRoot??null,Z.scheduleExpr??null,Z.timezone??null,Z.eventType??null,Z.filters?JSON.stringify(Z.filters):null,Z.debounceSeconds??null,Z.dedupeWindowSeconds??null,Z.cooldownSeconds??null,Z.mode??null,Z.systemPrompt??null,Z.providerId??null,Z.modelId??null,Z.maxIterations??null,Z.timeoutSeconds??null,Z.maxParallel??null,Z.tools?JSON.stringify(Z.tools):null,Z.notesDirectory??null,Z.extensions?JSON.stringify(Z.extensions):null,Z.source??null,X?.tags?JSON.stringify(X.tags):null,X?.metadata?JSON.stringify(X.metadata):null,J,j,$)}markSpecRemoved($){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(P0(),$)}updateSpecNextRunAt($,W){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(W??null,P0(),$)}updateSpecLastRunAt($,W){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(W,P0(),$)}updateLastMaterializedRunId($,W){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(W,P0(),$)}initializeScheduleNextRun($){let W=this.getSpec($);if(!W||W.triggerKind!=="schedule"||!W.enabled||!W.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let Z=new Date(
|
|
391
|
+
WHERE spec_id = ?`).run(W.externalId,W.triggerKind,W.sourceMtimeMs??null,W.sourceHash,W.parseStatus,W.parseError??null,Q?1:0,Z.title??"",Z.prompt??null,Z.workspaceRoot??null,Z.scheduleExpr??null,Z.timezone??null,Z.eventType??null,Z.filters?JSON.stringify(Z.filters):null,Z.debounceSeconds??null,Z.dedupeWindowSeconds??null,Z.cooldownSeconds??null,Z.mode??null,Z.systemPrompt??null,Z.providerId??null,Z.modelId??null,Z.maxIterations??null,Z.timeoutSeconds??null,Z.maxParallel??null,Z.tools?JSON.stringify(Z.tools):null,Z.notesDirectory??null,Z.extensions?JSON.stringify(Z.extensions):null,Z.source??null,X?.tags?JSON.stringify(X.tags):null,X?.metadata?JSON.stringify(X.metadata):null,J,j,$)}markSpecRemoved($){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(P0(),$)}updateSpecNextRunAt($,W){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(W??null,P0(),$)}updateSpecLastRunAt($,W){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(W,P0(),$)}updateLastMaterializedRunId($,W){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(W,P0(),$)}initializeScheduleNextRun($){let W=this.getSpec($);if(!W||W.triggerKind!=="schedule"||!W.enabled||!W.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let Z=new Date(n2(W.scheduleExpr,Date.now(),W.timezone)).toISOString();this.updateSpecNextRunAt($,Z)}materializeDueScheduleRun($){let W=$.nowMs,Z=new Date(W).toISOString();this.db.exec("BEGIN IMMEDIATE;");try{let Q=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($.specId);if(!Q)return this.db.exec("COMMIT;"),{queued:!1};let J=r$(Q);if(J.triggerKind!=="schedule"||!J.enabled||J.removed||J.parseStatus!=="valid"||!J.scheduleExpr)return this.db.exec("COMMIT;"),{queued:!1};let j=J.nextRunAt;if(!j){let V=new Date(n2(J.scheduleExpr,W,J.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(V,Z,J.specId),this.db.exec("COMMIT;"),{queued:!1,nextRunAt:V}}if(new Date(j).getTime()>W)return this.db.exec("COMMIT;"),{queued:!1,nextRunAt:j};let X=`crun_${o5()}`,Y;try{Y=new Date(n2(J.scheduleExpr,W,J.timezone)).toISOString()}catch{Y=void 0}return this.db.prepare(`INSERT INTO cron_runs (
|
|
392
392
|
run_id, spec_id, spec_revision, trigger_kind, status,
|
|
393
393
|
scheduled_for, trigger_event_id, attempt_count,
|
|
394
394
|
created_at, updated_at
|
|
@@ -397,22 +397,22 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
|
|
|
397
397
|
last_run_at = ?,
|
|
398
398
|
next_run_at = ?,
|
|
399
399
|
updated_at = ?
|
|
400
|
-
WHERE spec_id = ?`).run(X,Z,Y??null,Z,J.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(X),nextRunAt:Y}}catch(Q){throw this.db.exec("ROLLBACK;"),Q}}getRun($){let W=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get($);return W?
|
|
400
|
+
WHERE spec_id = ?`).run(X,Z,Y??null,Z,J.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(X),nextRunAt:Y}}catch(Q){throw this.db.exec("ROLLBACK;"),Q}}getRun($){let W=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get($);return W?jj(W):void 0}insertEventLog($,W={}){let Z=P0(),Q=W.receivedAtIso??Z,J=$.eventId.trim();if(!J)throw Error("automation event requires eventId");let j=$.eventType.trim();if(!j)throw Error("automation event requires eventType");let X=$.source.trim();if(!X)throw Error("automation event requires source");let Y=$.occurredAt.trim()||Q,V=this.db.prepare(`INSERT OR IGNORE INTO cron_event_log (
|
|
401
401
|
event_id, event_type, source, subject,
|
|
402
402
|
occurred_at, received_at, workspace_root, dedupe_key,
|
|
403
403
|
payload_json, attributes_json, processing_status,
|
|
404
404
|
matched_spec_count, queued_run_count, suppressed_count,
|
|
405
405
|
error, created_at, updated_at
|
|
406
|
-
) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(J,j,X,$.subject?.trim()||null,Y,Q,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,
|
|
406
|
+
) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(J,j,X,$.subject?.trim()||null,Y,Q,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,JA($.payload),JA($.attributes),"received",0,0,0,null,Z,Z).changes??0,B=this.getEventLog(J);if(!B)throw Error("failed to insert cron_event_log row");return{record:B,created:V===1}}getEventLog($){let W=this.db.prepare("SELECT * FROM cron_event_log WHERE event_id = ?").get($);return W?QA(W):void 0}listEventLogs($={}){let W=[],Z=[];if($.eventType)W.push("event_type = ?"),Z.push($.eventType);if($.source)W.push("source = ?"),Z.push($.source);if($.processingStatus)W.push("processing_status = ?"),Z.push($.processingStatus);let Q=W.length>0?`WHERE ${W.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_event_log ${Q}
|
|
407
407
|
ORDER BY received_at DESC, created_at DESC
|
|
408
|
-
LIMIT ?`).all(...Z,J).map((X)=>
|
|
408
|
+
LIMIT ?`).all(...Z,J).map((X)=>QA(X))}updateEventLogProcessing($,W){return(this.db.prepare(`UPDATE cron_event_log SET
|
|
409
409
|
processing_status = ?,
|
|
410
410
|
matched_spec_count = COALESCE(?, matched_spec_count),
|
|
411
411
|
queued_run_count = COALESCE(?, queued_run_count),
|
|
412
412
|
suppressed_count = COALESCE(?, suppressed_count),
|
|
413
413
|
error = ?,
|
|
414
414
|
updated_at = ?
|
|
415
|
-
WHERE event_id = ?`).run(W.status,W.matchedSpecCount??null,W.queuedRunCount??null,W.suppressedCount??null,W.error??null,P0(),$).changes??0)===1}listRuns($={}){let W=[],Z=[];if($.specId)W.push("spec_id = ?"),Z.push($.specId);if($.status){let X=Array.isArray($.status)?$.status:[$.status];if(X.length>0){let Y=X.map(()=>"?").join(",");W.push(`status IN (${Y})`);for(let V of X)Z.push(V)}}let Q=W.length>0?`WHERE ${W.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${Q} ORDER BY created_at DESC LIMIT ?`).all(...Z,J).map((X)=>
|
|
415
|
+
WHERE event_id = ?`).run(W.status,W.matchedSpecCount??null,W.queuedRunCount??null,W.suppressedCount??null,W.error??null,P0(),$).changes??0)===1}listRuns($={}){let W=[],Z=[];if($.specId)W.push("spec_id = ?"),Z.push($.specId);if($.status){let X=Array.isArray($.status)?$.status:[$.status];if(X.length>0){let Y=X.map(()=>"?").join(",");W.push(`status IN (${Y})`);for(let V of X)Z.push(V)}}let Q=W.length>0?`WHERE ${W.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${Q} ORDER BY created_at DESC LIMIT ?`).all(...Z,J).map((X)=>jj(X))}hasRecentEventRunForDedupe($){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
|
|
416
416
|
INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
|
|
417
417
|
WHERE r.spec_id = ?
|
|
418
418
|
AND r.trigger_kind = 'event'
|
|
@@ -430,7 +430,7 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
|
|
|
430
430
|
AND r.status = 'queued'
|
|
431
431
|
AND e.dedupe_key = ?
|
|
432
432
|
ORDER BY COALESCE(r.scheduled_for, r.created_at) DESC
|
|
433
|
-
LIMIT 1`).get($.specId,$.dedupeKey);return W?
|
|
433
|
+
LIMIT 1`).get($.specId,$.dedupeKey);return W?jj(W):void 0}updateQueuedEventRunForDebounce($){let W=P0();if((this.db.prepare(`UPDATE cron_runs SET
|
|
434
434
|
trigger_event_id = ?,
|
|
435
435
|
scheduled_for = ?,
|
|
436
436
|
updated_at = ?
|
|
@@ -439,7 +439,7 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
|
|
|
439
439
|
AND status = 'queued'`).run($.triggerEventId,$.scheduledFor,W,$.runId).changes??0)!==1)return;return this.getRun($.runId)}hasOneOffRunForRevision($,W){return!!this.db.prepare(`SELECT run_id FROM cron_runs
|
|
440
440
|
WHERE spec_id = ? AND spec_revision = ?
|
|
441
441
|
AND trigger_kind = 'one_off'
|
|
442
|
-
LIMIT 1`).get($,W)}enqueueRun($){let W=`crun_${
|
|
442
|
+
LIMIT 1`).get($,W)}enqueueRun($){let W=`crun_${o5()}`,Z=P0();this.db.prepare(`INSERT INTO cron_runs (
|
|
443
443
|
run_id, spec_id, spec_revision, trigger_kind, status,
|
|
444
444
|
scheduled_for, trigger_event_id, attempt_count,
|
|
445
445
|
created_at, updated_at
|
|
@@ -456,7 +456,7 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
|
|
|
456
456
|
)
|
|
457
457
|
AND (scheduled_for IS NULL OR scheduled_for <= ?)
|
|
458
458
|
ORDER BY COALESCE(scheduled_for, created_at) ASC
|
|
459
|
-
LIMIT ?`).all(W,W,J);for(let Y of X){let V=
|
|
459
|
+
LIMIT ?`).all(W,W,J);for(let Y of X){let V=j0(Y.run_id);if(!V)continue;let B=`cclaim_${o5()}`;if((this.db.prepare(`UPDATE cron_runs SET
|
|
460
460
|
status = 'running',
|
|
461
461
|
claim_token = ?,
|
|
462
462
|
claim_started_at = ?,
|
|
@@ -500,41 +500,41 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
|
|
|
500
500
|
error = ?,
|
|
501
501
|
scheduled_for = COALESCE(?, scheduled_for),
|
|
502
502
|
updated_at = ?
|
|
503
|
-
WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,W,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,W){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(W,P0(),$)}attachReportPathToRun($,W){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(W,P0(),$)}}class
|
|
504
|
-
`).trim()}function
|
|
505
|
-
`)[0]??J);return
|
|
506
|
-
`,{encoding:"utf8",mode:384}),await
|
|
507
|
-
`,"utf8");try{return await W()}finally{await FA(Z)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let X=await FP(Z),Y=X?Date.now()-Date.parse(X.acquiredAt):KA+1;if(!X||!HP(X.pid)||Y>KA){await FA(Z);continue}if(Date.now()>=Q)throw Error(`Timed out waiting for hub startup lock ${Z}`);await GP(YP)}}async function j$($,W){try{let Z=await fetch(W?.authToken?Kj($):FQ($),{headers:W?.authToken?{authorization:`Bearer ${W.authToken}`}:void 0});if(!Z.ok)return;let Q=await Z.json();if(typeof Q.protocolVersion!=="string"||typeof Q.host!=="string"||typeof Q.port!=="number"||typeof Q.url!=="string")return;return{protocolVersion:Q.protocolVersion,minClientProtocolVersion:typeof Q.minClientProtocolVersion==="string"?Q.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Q.maxClientProtocolVersion==="string"?Q.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Q.capabilities)?Q.capabilities.filter((J)=>typeof J==="string"):void 0,coreVersion:typeof Q.coreVersion==="string"?Q.coreVersion:void 0,buildId:typeof Q.buildId==="string"?Q.buildId:void 0,host:Q.host,port:Q.port,url:Q.url,hubId:typeof Q.hubId==="string"?Q.hubId:void 0,authToken:typeof Q.authToken==="string"?Q.authToken:void 0,pid:typeof Q.pid==="number"?Q.pid:void 0,startedAt:typeof Q.startedAt==="string"?Q.startedAt:void 0,updatedAt:typeof Q.updatedAt==="string"?Q.updatedAt:void 0}}catch{return}}function _1($,W,Z="/hub"){return new URL(`ws://${$}:${W}${Z}`).toString()}function FQ($){let W=new URL($);return W.protocol=W.protocol==="wss:"?"https:":"http:",W.pathname="/health",W.search="",W.toString()}function Kj($){let W=new URL(FQ($));return W.pathname="/status",W.toString()}function LA($){return ZP($)}import{CLINE_HUB_DEV_PORT as AP,CLINE_HUB_PORT as UP,resolveClineBuildEnv as DP}from"@cline/shared";var _P="CLINE_HUB_HOST",fP="CLINE_HUB_PORT",LP="CLINE_HUB_PATHNAME",Fj="127.0.0.1",Aj=UP,Uj="/hub";function OA($){return DP($)==="development"?AP:Aj}function Dj($={}){return($.env??process.env)[_P]?.trim()||Fj}function L6($={}){let Z=($.env??process.env)[fP]?.trim();if(!Z)return OA($);let Q=Number.parseInt(Z,10);if(!Number.isInteger(Q)||Q<1||Q>65535)return OA($);return Q}function _j($={}){return($.env??process.env)[LP]?.trim()||Uj}function Z1($={},W={}){return{host:$.host??Dj(W),port:$.port??L6(W),pathname:$.pathname??_j(W)}}import{join as OP}from"node:path";var TP="shared:cline",zP="CLINE_HUB_DISCOVERY_PATH",qP="hub-production";function TA($){let W=N1($.trim());return J$(`workspace:${W||$.trim()}`)}function v0($=TP){return J$($)}function Q1(){return{ownerId:qP,discoveryPath:process.env[zP]?.trim()||OP(n2(),"locks","hub","production.json")}}var kP=8000,IP=200,xP=3000,gP=100,mP=[100,250,500,1000,2000],vP="--cline-hub-daemon";function cP($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function uP(){try{let $=PP(n2(),"logs","hub-daemon.log");return NP(CP($),{recursive:!0}),{fd:EP($,"a"),logPath:$}}catch{return}}function RA(){return MA()==="production"?Q1():v0()}function a2($){return yP($).compatible}function zA($,W,Z){if(!W||W.url!==Z)return $;return{...$,authToken:$.authToken??W.authToken,pid:$.pid??W.pid}}async function o2($,W){try{return await j$($,{authToken:W})}catch{return}}async function dP($,W){let Z=Date.now()+W;while(Date.now()<Z){if(!(await o2($))?.url)return!0;await new Promise((J)=>setTimeout(J,gP))}return!1}async function AQ($,W){if(await $W($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Z=await dP($.url,xP);return await m0(W).catch(()=>{return}),Z}async function e5($,W){if(a2($))return!0;return AQ($,W)}async function NA($){if(MA()!=="production")return;let W=v0();if(W.discoveryPath===$.discoveryPath)return;let Z=await O0(W.discoveryPath);if(Z?.url)await AQ(Z,W.discoveryPath);else await m0(W.discoveryPath).catch(()=>{return})}function lP(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return SP(new URL(`./entry.${$}`,import.meta.url))}function pP($,W){let Z=lP(),Q=process.execPath?.trim();if(!Q)throw Error("unable to resolve runtime executable for hub daemon");let J=wP(Q).toLowerCase().includes("bun"),j=Z.startsWith("/$bunfs/"),X=J&&Z.toLowerCase().endsWith(".ts"),Y=j?[vP]:[...X?["--conditions=development"]:[],Z];return{launcher:Q,args:[...Y,"--cwd",$,...cP(W)],cwd:$,env:{...hP(process.env),CLINE_NO_INTERACTIVE:"1",[bP]:"1"}}}function rP($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Z="message"in $?$.message:void 0;return typeof Z==="string"&&Z.includes("ETXTBSY")}function fj($,W={}){if(qA())return;let Z=pP($,W),Q=uP();try{MP(Z.launcher,Z.args,{detached:!0,stdio:Q?["ignore",Q.fd,Q.fd]:"ignore",env:Z.env,cwd:Z.cwd,windowsHide:!0}).unref()}finally{if(Q)RP(Q.fd)}}async function O6($,W={}){for(let Z=0;;Z++)try{fj($,W);return}catch(Q){let J=mP[Z];if(!rP(Q)||J===void 0)throw Q;await new Promise((j)=>setTimeout(j,J))}}function UQ($,W={}){if(qA())return;let Z=RA(),Q=Z1(W),J=_1(Q.host,Q.port,Q.pathname),j=W.allowPortFallback===!0&&Q.port!==0;NA(Z).catch(()=>{return}).then(()=>O0(Z.discoveryPath)).then(async(X)=>{let Y=!1;if(X?.url)if(!X.authToken){if(Y=!0,!await AQ(X,Z.discoveryPath)&&!j)return}else{let H=await o2(X.url,X.authToken);if(H?.url&&a2(H)&&await w1(H.url,{authToken:X.authToken}))return;if(H?.url)await e5({...H,authToken:X.authToken},Z.discoveryPath);else await m0(Z.discoveryPath).catch(()=>{return})}let V=await o2(J);if(V?.url){if(a2(V)){if(!j||!Y)return}else if(!await e5({...V,authToken:void 0},Z.discoveryPath)&&!j)return}let B=j?{...Q,port:0}:Q;await O6($,B)}).catch(()=>{})}async function EA($,W={}){let Z=RA(),Q=W.host!==void 0||W.port!==void 0||W.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=Z1(W),j=_1(J.host,J.port,J.pathname),X=(F)=>{if(!Q)l$(F.url,F.authToken);return F};await NA(Z).catch(()=>{return});let Y=await O0(Z.discoveryPath),V=!1;if(Y?.url){let F=Y.authToken;if(!F)V=!0,await AQ(Y,Z.discoveryPath);else{let A=await o2(Y.url,F);if(A?.url&&a2(A)&&await w1(A.url,{authToken:F}))return X({url:A.url,authToken:F});if(A?.url)await e5({...A,authToken:F},Z.discoveryPath);else await m0(Z.discoveryPath).catch(()=>{return})}}let B=await o2(j);if(B?.url){let F=zA(B,Y,j);if(a2(B))throw Error(`A compatible Cline Hub is already running at ${j}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${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 e5(F,Z.discoveryPath)&&W.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is already running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let G=W.allowPortFallback===!0&&J.port!==0?{...J,port:0}:J;await O6($,G);let K=Date.now()+kP;while(Date.now()<K){let F=await O0(Z.discoveryPath);if(F?.url&&F.authToken){let D=await o2(F.url,F.authToken);if(D?.url&&a2(D)&&await w1(D.url,{authToken:F.authToken}))return X({url:D.url,authToken:F.authToken})}let A=await o2(j);if(A?.url&&!a2(A)){let D=zA(A,F,j);if(!await e5(D,Z.discoveryPath)&&W.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is still running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((D)=>setTimeout(D,IP))}throw Error("Timed out waiting for detached hub startup.")}function DQ(){return aP()==="production"?Q1():v0()}function sP(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function bA($){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((W)=>Buffer.from(W))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return bA($.data);return String($)}function tP($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function wA($){let W=$,Z=tP(W.reason);return new y0("hub_connection_closed",W.code||Z?`Hub connection closed (code=${W.code??0}${Z?`, reason=${Z}`:""})`:Lj,{closeCode:W.code,closeReason:Z||void 0})}function eP($,W){if($ instanceof y0)return $;if($ instanceof Error)return new y0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new y0("hub_connect_failed",$.error.message);let Z=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Z)return new y0("hub_connect_failed",Z);let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new y0("hub_connect_failed",Q?`Failed to connect to hub at ${W.toString()} (${Q} event before socket open).`:`Failed to connect to hub at ${W.toString()}.`)}var $S=8000,WS=200,CA="*",PA=8000,ZS="cline-hub-auth.",yA=new Map,hA=new Set,QS=3000,JS=3000,jS=100,Lj="Hub connection closed",XS=250,YS=5000,SA=0.5;class y0 extends Error{code;details;constructor($,W,Z){super(W);this.code=$;this.details=Z;this.name="HubTransportError"}}function zj($){return $ instanceof y0}class T6 extends Error{command;code;constructor($,W,Z){super(Z);this.command=$;this.code=W;this.name="HubCommandError"}}function _Q($,W){return $ instanceof T6&&$.code==="hub_command_timeout"&&(W===void 0||$.command===W)}function kA($){let W=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),W)return W;let Z=qj($.toString());return Z?yA.get(Z):void 0}function VS($){try{let Z=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"}catch{return!1}}function qj($){if(!VS($))return;let W=new URL(p$($));return W.search="",W.hash="",W.toString()}function Oj($){let W=qj($);return!!W&&hA.has(W)}function l$($,W){let Z=qj($);if(Z){if(hA.add(Z),W?.trim())yA.set(Z,W)}return $}class f1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new y0("hub_connection_closed",Lj);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),W=this.options.authToken?.trim()||kA($);$.hash="";let Q=new(sP())($.toString(),W?[`${ZS}${W}`]:void 0);this.socket=Q;let J=!1;this.connectPromise=new Promise((j,X)=>{let Y=!1,V=setTimeout(()=>{if(Y)return;Y=!0,J=!0,this.lastCloseError=new y0("hub_connect_timeout",`Timed out connecting to hub after ${PA}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Q.close()}catch{}X(this.lastCloseError)},PA);Q.addEventListener("open",()=>{if(Y)return;Y=!0,clearTimeout(V),j()}),Q.addEventListener("error",(B)=>{if(Y)return;Y=!0,clearTimeout(V),this.lastCloseError=eP(B,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,X(this.lastCloseError)}),Q.addEventListener("close",(B)=>{if(Y)return;if(Y=!0,clearTimeout(V),!J)this.lastCloseError=wA(B),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,X(this.lastCloseError)})}),Q.addEventListener("message",(j)=>{this.handleFrame(JSON.parse(bA(j)))}),Q.addEventListener("close",(j)=>{if(this.socket!==Q)return;if(!J)this.lastCloseError=wA(j),this.sawSocketClose=!0;this.registered=!1;for(let X of this.pendingReplies.values())X.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let j of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(j));this.reconnectAttempt=0}subscribe($,W){let Z=W?.sessionId?.trim()||void 0,Q={listener:$,sessionId:Z};return this.listeners.add(Q),this.adjustSubscriptionCount(Z,1),()=>{if(!this.listeners.delete(Q))return;this.adjustSubscriptionCount(Z,-1)}}async command($,W,Z,Q){let J=0,j=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,W,Z,Q)}catch(X){if(!j||J>=1||!await this.recoverLocalHubTransport(X))throw X;J+=1}}async commandOnce($,W,Z,Q){await this.connect();let J=iP("hubreq_"),j=oP($,Q?.timeoutMs),X=new Promise((V,B)=>{let H=j===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;B(new T6($,"hub_command_timeout",`Hub command ${$} timed out after ${j}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.`))},j);this.pendingReplies.set(J,{resolve:(G)=>{if(H)clearTimeout(H);V(G)},reject:(G)=>{if(H)clearTimeout(H);B(G)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:J,clientId:this.clientId,sessionId:Z,timeoutMs:j,payload:W}})}catch(V){throw this.pendingReplies.delete(J),V}let Y=await X;if(!Y.ok){if(Y.error?.code===l2){let V=Z??(typeof W?.sessionId==="string"?W.sessionId:void 0);throw new Z$(V,Y.error.message)}throw new T6($,Y.error?.code,Y.error?.message??`Hub command ${$} failed`)}return Y}async recoverLocalHubTransport($){if(!Oj(this.currentUrl)||!zj($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let W=await s2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!W)return!1;return this.currentUrl=W,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(XS*2**this.reconnectAttempt,YS),W=Math.round($*(1-SA)+Math.random()*$*SA);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},W)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!Oj(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await s2({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 y0("hub_connection_closed",Lj),this.sawSocketClose=!1;for(let W of this.pendingReplies.values())W.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 y0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,W){this.sendFrame({kind:$,clientId:this.clientId,...W?{sessionId:W}:{}})}adjustSubscriptionCount($,W){let Z=this.subscriptionKeyForSessionId($),Q=(this.subscriptionCounts.get(Z)??0)+W;if(Q<=0){if(this.subscriptionCounts.delete(Z),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(W<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Z,Q),W>0&&Q===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??CA}subscriptionSessionIdFromKey($){return $===CA?void 0:$}handleFrame($){switch($.kind){case"reply":{let W=$.envelope.requestId;if(!W)return;let Z=this.pendingReplies.get(W);if(!Z)return;this.pendingReplies.delete(W),Z.resolve($.envelope);return}case"event":for(let W of this.listeners){if(W.sessionId&&W.sessionId!==$.envelope.sessionId?.trim())continue;W.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function p$($){let W=new URL($);if(W.protocol==="http:")W.protocol="ws:";else if(W.protocol==="https:")W.protocol="wss:";return W.toString()}async function w1($,W){let Z=new f1({url:$,authToken:W?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:W?.workspaceRoot,cwd:W?.cwd});try{return await Z.connect(),!0}catch{return!1}finally{Z.close()}}async function Tj($,W){let Z=p$($),Q=await j$(Z,{authToken:W?.authToken});if(!Q)return{status:"unreachable",url:Z};if(!nP(Q).compatible)return{status:"protocol_mismatch",url:Z};if(W?.verifyConnection===!0&&!await w1(Z,{workspaceRoot:W.workspaceRoot,cwd:W.cwd,authToken:W.authToken}))return{status:"unreachable",url:Z};return{status:"compatible",url:Z}}async function BS($){let W=Date.now()+$S;while(Date.now()<W){let Z=await O0($.discoveryPath);if(Z?.url){let Q=await Tj(Z.url,{verifyConnection:!0,authToken:Z.authToken});if(Q.status==="compatible")return l$(Q.url,Z.authToken)}await new Promise((Q)=>setTimeout(Q,WS))}return}async function HS($){let W=Date.now()+JS;while(Date.now()<W){if(!(await j$($).catch(()=>{return}))?.url)return!0;await new Promise((Q)=>setTimeout(Q,jS))}return!1}function GS($,W){try{return p$($)===p$(W)}catch{return!1}}function KS($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Z)=>{if(!Z||typeof Z!=="object")return!1;let Q=Z;if(Q.status==="running"||Q.status==="idle"||Q.status==="pending")return!0;return Array.isArray(Q.participants)&&Q.participants.length>0})}async function FS($,W,Z){let Q=new f1({url:$,authToken:W,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{let J=await Q.command("session.list",{limit:500},void 0,{timeoutMs:QS});return!KS(J.payload)}catch{return!1}finally{await Q.dispose().catch(()=>{return})}}async function WW($={}){if($.endpoint?.trim()){let J=await Tj($.endpoint);return J.status==="compatible"?J.url:void 0}let W=DQ(),Z=await O0(W.discoveryPath);if(!Z?.url)return;let Q=await Tj(Z.url,{authToken:Z.authToken});if(Q.status==="compatible")return l$(Q.url,Z.authToken);if(Q.status==="protocol_mismatch")await m0(W.discoveryPath).catch(()=>{return});return}async function s2($={}){let W=await WW($);if(W&&await w1(W,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return W;if($.endpoint?.trim())return;let Z=DQ();return await O6($.workspaceRoot??process.cwd()),await BS(Z)}async function $W($,W){let Z=new URL($),Q=W?.trim()||kA(Z);if(Z.protocol==="ws:")Z.protocol="http:";else if(Z.protocol==="wss:")Z.protocol="https:";return Z.pathname="/shutdown",Z.hash="",(await fetch(Z,{method:"POST",headers:Q?{authorization:`Bearer ${Q}`}:void 0})).ok}async function Mj($=DQ()){let W=await O0($.discoveryPath);if(!W?.url)return!1;try{if(await $W(W.url,W.authToken))return!0}catch{}return!1}async function fQ($){if(!Oj($.url))return;let W=DQ(),Z=await O0(W.discoveryPath);if(!Z?.url||!GS(Z.url,$.url))return;if(!await FS(Z.url,Z.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await Mj())return;if(!await HS(Z.url))return;return await m0(W.discoveryPath).catch(()=>{return}),await s2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var nA={};w(nA,{HubRuntimeHost:()=>X$});import{resolveProviderRequestHeaders as _S}from"@cline/llms";import{captureSdkError as Rj,createSessionId as xA,HUB_CHECKPOINT_CAPABILITY as fS,HUB_COMPACTION_CAPABILITY as LS,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as OS,HUB_HOOK_CAPABILITY_PREFIX as TS,HUB_MISTAKE_LIMIT_CAPABILITY as zS,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as qS,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as MS,isHubToolExecutorName as RS}from"@cline/shared";var IA={};w(IA,{createCoreSessionSnapshot:()=>C1,coreSessionSnapshotToRecord:()=>LQ});function AS($){return $?JSON.parse(JSON.stringify($)):void 0}function US($){return $?JSON.parse(JSON.stringify($)):void 0}function DS($){let W=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,Q=(Array.isArray(W?.history)?W.history:[]).filter((X)=>!!X&&typeof X==="object"&&!Array.isArray(X)).flatMap((X)=>{let Y=typeof X.ref==="string"?X.ref.trim():"",V=Number(X.createdAt),B=Number(X.runCount);if(!Y||!Number.isFinite(V)||!Number.isInteger(B))return[];return[{ref:Y,createdAt:V,runCount:B,...X.kind==="stash"||X.kind==="commit"?{kind:X.kind}:{}}]}),J=Q.at(-1),j=$?.checkpointEnabled===!0?!0:void 0;if(!j&&Q.length===0)return;return{...j?{enabled:j}:{},...J?{latest:J}:{},history:Q}}function C1($){let{session:W}=$,Z=AS(W.metadata);return{version:1,sessionId:W.sessionId,source:W.source,status:W.status,createdAt:W.startedAt,updatedAt:W.updatedAt,endedAt:W.endedAt??null,exitCode:W.exitCode??null,interactive:W.interactive,workspace:{cwd:W.cwd,root:W.workspaceRoot},model:{providerId:W.provider,modelId:W.model},capabilities:{enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams},lineage:{...W.parentSessionId?{parentSessionId:W.parentSessionId}:{},...W.parentAgentId?{parentAgentId:W.parentAgentId}:{},...W.agentId?{agentId:W.agentId}:{},...W.conversationId?{conversationId:W.conversationId}:{},isSubagent:W.isSubagent},...W.teamName?{team:{name:W.teamName}}:{},...W.prompt?{prompt:W.prompt}:{},...Z?{metadata:Z}:{},...W.messagesPath?{artifacts:{messagesPath:W.messagesPath}}:{},...$.messages?{messages:US($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Q=DS(Z);return Q?{checkpoint:Q}:{}})()}}function LQ($){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 z6($){if(!$)return;return JSON.parse(JSON.stringify($))}var NS=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function gA($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function mA($){if(!$)return;let{userInstructionService:W,...Z}=$;return JSON.parse(JSON.stringify(Z))}function vA($,W){let Z={...$.config,sessionId:W},Q=_S({providerId:$.config.providerId,sessionId:W,source:$.source,defaultSource:F0.CORE,client:{name:$.localRuntime?.extensionContext?.client?.name,version:$.localRuntime?.extensionContext?.client?.version,versionHeaderFallback:$.config.headers?.["X-CLIENT-VERSION"],platform:$.localRuntime?.extensionContext?.client?.platform,platformVersion:$.localRuntime?.extensionContext?.client?.platformVersion,isMultiRoot:$.localRuntime?.extensionContext?.client?.isMultiRoot},coreVersion:l8,openAiCodex:{accessToken:$.config.apiKey,userAgentVersion:process.env.npm_package_version},headers:{config:$.config.headers}});if(Q)Z.headers=Q;return Z}function cA($){let W=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof W.agentId==="string"?W.agentId:"",conversationId:typeof W.conversationId==="string"?W.conversationId:"",iteration:typeof W.iteration==="number"?W.iteration:0,metadata:W.metadata&&typeof W.metadata==="object"&&!Array.isArray(W.metadata)?W.metadata:void 0}}function t2($,W,Z){$.manifest.push(W),$.handlers.set(W.capabilityName,Z)}function uA($,W){let Z={manifest:[],handlers:new Map};for(let J of Object.keys(W.toolExecutors??{}).filter(RS)){let j=W.toolExecutors?.[J];if(typeof j!=="function")continue;t2(Z,{kind:"toolExecutor",executor:J,capabilityName:`${qS}${J}`},async({payload:X,abortSignal:Y})=>{let V=Array.isArray(X.args)?[...X.args]:[],B={...cA(X.context),signal:Y};return{result:await j(...V,B)}})}for(let J of $?.extraTools??[])t2(Z,{kind:"tool",name:J.name,description:J.description,inputSchema:z6(J.inputSchema)??{},...J.lifecycle?{lifecycle:z6(J.lifecycle)}:{},capabilityName:`${OS}${J.name}`},async({payload:j,abortSignal:X,progress:Y})=>{let V={...cA(j.context),signal:X};return{result:await J.execute(j.input,{...V,emitUpdate:(H)=>{Y({update:H})}})}});let Q=$?.hooks;if(Q)for(let J of NS){let j=Q[J];if(typeof j!=="function")continue;t2(Z,{kind:"hook",name:J,capabilityName:`${TS}${J}`},async({payload:X})=>({control:await j(X.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;t2(Z,{kind:"compaction",capabilityName:LS,config:gA($.compaction)},async({payload:j})=>({result:await J(j.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;t2(Z,{kind:"checkpoint",capabilityName:fS,config:gA($.checkpoint)},async({payload:j})=>({result:await J(j.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;t2(Z,{kind:"mistakeLimit",capabilityName:zS},async({payload:j})=>({result:await J(j.context)}))}if($?.userInstructionService){let J=$.userInstructionService;t2(Z,{kind:"userInstructionService",capabilityName:MS},async()=>{return await J.start().catch(()=>{}),{snapshot:{records:{skill:J.listRecords("skill"),rule:J.listRecords("rule"),workflow:J.listRecords("workflow")},runtimeCommands:J.listRuntimeCommands()}}})}return Z}function rA($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let W=$.message;if(typeof W==="string"&&W.trim())return W.trim()}return}function ES($){return rA($)??"Capability request was cancelled."}function wS($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function CS($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function PS($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=$,Z=typeof W.inputTokens==="number"?W.inputTokens:void 0,Q=typeof W.outputTokens==="number"?W.outputTokens:void 0;if(Z===void 0||Q===void 0)return;return{inputTokens:Z,outputTokens:Q,cacheReadTokens:typeof W.cacheReadTokens==="number"?W.cacheReadTokens:0,cacheWriteTokens:typeof W.cacheWriteTokens==="number"?W.cacheWriteTokens:0,totalCost:typeof W.totalCost==="number"?W.totalCost:0}}function dA($){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 Nj($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function r$($,W){return Nj($?.[W])??0}function SS($){let W=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Z=$?.totals&&typeof $.totals==="object"?$.totals:void 0,Q=$?.agent&&typeof $.agent==="object"?$.agent:void 0,J=Q?.teamRole==="teammate"||Q?.teamRole==="lead"?Q.teamRole:void 0;return{event:{type:"usage",agentId:typeof Q?.agentId==="string"?Q.agentId:void 0,conversationId:typeof Q?.conversationId==="string"?Q.conversationId:void 0,parentAgentId:typeof Q?.parentAgentId==="string"?Q.parentAgentId:void 0,inputTokens:r$(W,"inputTokens"),outputTokens:r$(W,"outputTokens"),cacheReadTokens:r$(W,"cacheReadTokens"),cacheWriteTokens:r$(W,"cacheWriteTokens"),cost:Nj(W?.totalCost),totalInputTokens:r$(Z,"inputTokens"),totalOutputTokens:r$(Z,"outputTokens"),totalCacheReadTokens:r$(Z,"cacheReadTokens"),totalCacheWriteTokens:r$(Z,"cacheWriteTokens"),totalCost:Nj(Z?.totalCost)},teamAgentId:typeof Q?.teamAgentId==="string"?Q.teamAgentId:void 0,teamRole:J}}function bS($){let W=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Z=$?.reason??W?.finishReason,Q=CS(Z)?Z:Z==="failed"?"error":"completed",J=PS($?.usage??W?.usage);return{type:"done",reason:Q,text:typeof $?.text==="string"?$.text:typeof W?.text==="string"?W.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof W?.iterations==="number"?W.iterations:0,usage:J}}function e2($,W){return $.error?.message??`hub command failed: ${W}`}function ZW($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function iA($){let W=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof W?.parentSessionId==="string"?W.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof W?.agentId==="string"?W.agentId:void 0),parentAgentId:typeof W?.parentAgentId==="string"?W.parentAgentId:void 0,conversationId:typeof W?.conversationId==="string"?W.conversationId:void 0,isSubagent:typeof W?.isSubagent==="boolean"?W.isSubagent:!1,source:typeof W?.source==="string"?W.source:F0.CORE,pid:typeof W?.pid==="number"?W.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:ZW($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:ZW($.status)==="completed"?0:ZW($.status)==="failed"?1:void 0,status:ZW($.status),interactive:W?.interactive===!0,provider:typeof W?.provider==="string"?W.provider:"hub",model:typeof W?.model==="string"?W.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof W?.teamName==="string"?W.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??W?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??W?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??W?.enableTeams===!0,prompt:typeof W?.prompt==="string"?W.prompt:void 0,metadata:W,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof W?.messagesPath==="string"?W.messagesPath:void 0,hookPath:typeof W?.hookPath==="string"?W.hookPath:void 0}}function i$($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=$;return W.version===1&&typeof W.sessionId==="string"?JSON.parse(JSON.stringify(W)):void 0}function yS($){let W=i$($?.snapshot);if(W)return LQ(W);let Z=$?.session;return Z?iA(Z):void 0}function lA($,W,Z){let Q=Z?.workspaceRoot?.trim()||W.config.workspaceRoot||W.config.cwd;return x0.parse({version:1,session_id:$,source:W.source??F0.CORE,pid:process.pid,started_at:new Date(Z?.createdAt??Date.now()).toISOString(),status:ZW(Z?.status),interactive:W.interactive===!0,provider:W.config.providerId,model:W.config.modelId,cwd:Z?.cwd?.trim()||W.config.cwd,workspace_root:Q,team_name:W.config.teamName,enable_tools:W.config.enableTools,enable_spawn:W.config.enableSpawnAgent,enable_teams:W.config.enableAgentTeams,prompt:W.prompt?.trim()||void 0,metadata:W.sessionMetadata&&Object.keys(W.sessionMetadata).length>0?W.sessionMetadata:void 0})}function pA($,W){return x0.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??W.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class X${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new s5;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,W){this.clientContext=W,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:W?.workspaceRoot,cwd:W?.cwd},this.defaultCapabilities=C0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Z)=>this.requestPendingPromptsList(Z),update:(Z)=>this.requestPendingPromptUpdate(Z),delete:(Z)=>this.requestPendingPromptDelete(Z)},this.client=this.createClient($.url)}createClient($){return new f1({...this.clientOptions,url:$})}async replaceClient($){let W=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(W.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!_Q($,"session.create"))return!1;let W=await fQ({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!W)return!1;return await this.replaceClient(W),!0}registerPlannedSession($,W,Z){if(this.sessionCapabilities.set($,W),Z.size>0)this.sessionClientContributionHandlers.set($,Z);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let W=this.resolveCapabilities($),Z=uA($.localRuntime,W),Q=$.config.sessionId?.trim()||xA(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:z6(vA($,Q)),metadata:{...$.sessionMetadata??{},source:$.source??F0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Z.manifest.length>0?{clientContributions:Z.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:z6($.toolPolicies),initialMessages:$.initialMessages,...$.initialCompactionState?{initialCompactionState:$.initialCompactionState}:{}});this.registerPlannedSession(Q,W,Z.handlers);let j;try{j=await J()}catch(B){if(this.cleanupPlannedSession(Q),await this.recoverLocalHubStartupDeadlock(B)){this.registerPlannedSession(Q,W,Z.handlers);try{j=await J()}catch(H){throw this.cleanupPlannedSession(Q),H}}else throw B}let X=i$(j.payload?.snapshot),Y=j.payload?.session,V=(X?.sessionId??Y?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(Q),Error("Hub runtime did not return a session id.");if(V!==Q)this.cleanupPlannedSession(Q),this.registerPlannedSession(V,W,Z.handlers);return{sessionId:V,manifest:X?pA(X,$):lA(V,$,Y),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let W=$.sessionId.trim();if(!W)throw Error("sessionId is required");let Z=$.restore?.messages!==!1;if(Z&&!$.start)throw Error("start is required when restore.messages is true");let Q=$.start,J=Q?this.resolveCapabilities(Q):void 0,j=Q?uA(Q.localRuntime,J??{}):{manifest:[],handlers:new Map},X,Y;if(Q)X=Q.config.sessionId?.trim()||xA(),Y=vA(Q,X);if(X&&J)this.sessionCapabilities.set(X,J);if(X&&j.handlers.size>0)this.sessionClientContributionHandlers.set(X,j.handlers),this.ensureSessionSubscription(X);let V;try{V=await this.client.command("session.restore",{sessionId:W,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Q?{workspaceRoot:Q.config.workspaceRoot?.trim()||Q.config.cwd,cwd:Q.config.cwd??$.cwd,sessionConfig:z6(Y),metadata:{...Q.sessionMetadata??{},source:Q.source??F0.CORE,provider:Q.config.providerId,model:Q.config.modelId,enableTools:Q.config.enableTools,enableSpawn:Q.config.enableSpawnAgent,enableTeams:Q.config.enableAgentTeams,teamName:Q.config.teamName,prompt:Q.prompt,interactive:Q.interactive===!0},runtimeOptions:{...j.manifest.length>0?{clientContributions:j.manifest}:{},...Q.localRuntime?.configExtensions?{configExtensions:Q.localRuntime.configExtensions}:{}},toolPolicies:z6(Q.toolPolicies),...Q.initialCompactionState?{initialCompactionState:Q.initialCompactionState}:{}}:{}},W)}catch(A){if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw A}if(!V.ok){let A=typeof V.payload?.error==="string"?V.payload.error:"session.restore failed";if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw Error(A)}let B=i$(V.payload?.snapshot),H=V.payload?.session,G=(B?.sessionId??H?.sessionId)?.trim();if(Z&&!G){if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw Error("Hub checkpoint restore returned no session id")}if(G&&X&&G!==X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);if(G&&J)this.sessionCapabilities.set(G,J);if(G&&j.handlers.size>0)this.sessionClientContributionHandlers.set(G,j.handlers);if(G)this.ensureSessionSubscription(G);let K=Array.isArray(V.payload?.messages)?V.payload.messages:void 0,F=V.payload?.checkpoint;if(!F)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:G,startResult:G?{sessionId:G,manifest:B?pA(B,Q??{}):lA(G,Q??{},H),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:K,checkpoint:F}}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 W=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(W.payload?.prompts)?W.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let W=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(W.payload?.prompts)?W.payload.prompts:[],prompt:W.payload?.prompt,updated:W.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let W=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(W.payload?.prompts)?W.payload.prompts:[],prompt:W.payload?.prompt,removed:W.payload?.removed===!0}}async getAccumulatedUsage($){let W=await this.client.command("session.get",{includeSnapshot:!0},$),Z=i$(W.payload?.snapshot);if(Z){let X=Z.usage?{...Z.usage}:void 0,Y=Z.aggregateUsage?{...Z.aggregateUsage}:void 0;return X||Y?{usage:X,aggregateUsage:Y}:void 0}let Q=W.payload?.session,J=dA(Q?.usage),j=dA(Q?.aggregateUsage);return J||j?{usage:J,aggregateUsage:j}:void 0}async abort($,W){await this.client.command("run.abort",{sessionId:$,reason:rA(W)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,W]of this.sessionSubscriptions){W();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 W;try{W=await this.client.command("session.get",void 0,$)}catch(Z){if(Q$(Z))return;throw Z}return yS(W.payload)}async listSessions($=100){let W=await this.client.command("session.list",{limit:$}),Z=Array.isArray(W.payload?.snapshots)?W.payload.snapshots.flatMap((J)=>{let j=i$(J);return j?[LQ(j)]:[]}):[];if(Z.length>0)return Z;return(W.payload?.sessions??[]).map(iA)}async listSettings($){let W=await this.client.command("settings.list",mA($));if(!W.ok)throw Error(e2(W,"settings.list"));return W.payload?.snapshot}async toggleSetting($){let W=await this.client.command("settings.toggle",mA($));if(!W.ok)throw Error(e2(W,"settings.toggle"));return{snapshot:W.payload?.snapshot,changedTypes:Array.isArray(W.payload?.changedTypes)?W.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,W){let Z={...W.metadata??{}};if(typeof W.prompt==="string")Z.prompt=W.prompt;if(typeof W.title==="string")Z.title=W.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Z})).ok}}async updateSessionConnection($,W){let Z=$.trim();if(!Z)return;let Q=await this.client.command("session.update_connection",{sessionId:Z,updates:W},Z);if(!Q.ok)throw Error(e2(Q,"session.update_connection"))}async updateSessionCompactionState($,W){let Z=$.trim();if(!Z)return{updated:!1};let Q=await this.client.command("session.compaction.update",{sessionId:Z,state:W},Z);if(!Q.ok)Rj(this.telemetry,{component:"core",operation:"hub.runtime_host.update_session_compaction_state",error:Error(e2(Q,"session.compaction.update")),severity:"warn",handled:!0,context:{command:"session.compaction.update",sessionId:Z,errorCode:Q.error?.code}});return{updated:Q.ok&&Q.payload?.updated===!0}}async readSessionCompactionState($){let W=$.trim();if(!W)return;let Z=await this.client.command("session.compaction.get",{sessionId:W},W);if(!Z.ok)throw Error(e2(Z,"session.compaction.get"));return K1(Z.payload?.state)}async readSessionMessages($){let W=$.trim();if(!W)return[];let Z=await this.client.command("session.messages",{sessionId:W},W);if(!Z.ok)throw Rj(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(e2(Z,"session.messages")),severity:Z.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:W,errorCode:Z.error?.code,runtimeAddress:this.runtimeAddress}}),Error(e2(Z,"session.messages"));let Q=Z.payload?.messages;return Array.isArray(Q)?Q:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,W){return this.events.subscribe($,W)}ensureSessionSubscription($){let W=$.trim();if(!W||this.sessionSubscriptions.has(W))return;let Z=this.client.subscribe((Q)=>{this.handleHubEvent(Q)},{sessionId:W});this.sessionSubscriptions.set(W,typeof Z==="function"?Z:()=>{})}disposeSessionSubscription($){let W=$.trim();if(!W)return;this.sessionSubscriptions.get(W)?.(),this.sessionSubscriptions.delete(W),this.agentDoneEmittedForCurrentRunBySession.delete(W)}resolveCapabilities($){return C0(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:bS($.payload)}})}handleHubEvent($){let W=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Z)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Z,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Z)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Z,$)});return}if(!W)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(W);let Z=i$($.payload?.snapshot),Q=$.payload?.session;if(Z)this.events.emit({type:"session_snapshot",payload:{sessionId:W,snapshot:Z}});this.events.emit({type:"status",payload:{sessionId:W,status:Q?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"session.notice":{let Z=$.payload?.noticeType,Q=$.payload?.displayRole,J=$.payload?.reason,j=$.payload?.agent&&typeof $.payload.agent==="object"?$.payload.agent:void 0,X=j?.teamRole==="lead"||j?.teamRole==="teammate"?j.teamRole:void 0;this.events.emit({type:"agent_event",payload:{sessionId:W,...X?{teamRole:X}:{},...typeof j?.teamAgentId==="string"?{teamAgentId:j.teamAgentId}:{},event:{type:"notice",...typeof j?.agentId==="string"?{agentId:j.agentId}:{},...typeof j?.conversationId==="string"?{conversationId:j.conversationId}:{},...typeof j?.parentAgentId==="string"?{parentAgentId:j.parentAgentId}:{},noticeType:Z==="recovery"||Z==="stop"?Z:"status",message:typeof $.payload?.message==="string"?$.payload.message:"",...Q==="system"||Q==="status"?{displayRole:Q}:{},...typeof J==="string"?{reason:J}:{},...$.payload?.metadata&&typeof $.payload.metadata==="object"?{metadata:$.payload.metadata}:{}}}});return}case"assistant.delta":{let Z=typeof $.payload?.text==="string"?$.payload.text:"";if(!Z)return;this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"content_start",contentType:"text",text:Z}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Z=typeof $.payload?.text==="string"?$.payload.text:"",Q=$.payload?.redacted===!0;if(!Z&&!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"content_start",contentType:"reasoning",reasoning:Z,redacted:Q}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:W,payload:$.payload});return}case"usage.updated":{let Z=SS($.payload);this.events.emit({type:"agent_event",payload:{sessionId:W,event:Z.event,teamAgentId:Z.teamAgentId,teamRole:Z.teamRole}});return}case"tool.started":{let Z=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Z&&this.pendingApprovalToolCallIds.delete(Z))return;this.emitToolCallContentStart({sessionId:W,toolCallId:Z,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Z=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Z)this.pendingApprovalToolCallIds.delete(Z);this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"content_end",contentType:"tool",toolCallId:Z,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Z=i$($.payload?.snapshot),Q=$.payload?.session;if(Z)this.events.emit({type:"session_snapshot",payload:{sessionId:W,snapshot:Z}});this.events.emit({type:"status",payload:{sessionId:W,status:Q?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:W,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Z=$.payload?.prompt;if(!Z)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:W,id:Z.id,prompt:Z.prompt,delivery:Z.delivery,attachmentCount:Z.attachmentCount,userImages:Z.userImages,userFiles:Z.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Z=i$($.payload?.snapshot),Q=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:W,payload:{...$.payload,reason:Q}}),Z?.interactive===!0&&K0(Z.status))return;this.events.emit({type:"ended",payload:{sessionId:W,reason:Q,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,W,Z){try{Rj(this.telemetry,{component:"core",operation:$,error:W,severity:"warn",handled:!0,context:{event:Z.event,sessionId:Z.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let W=$.sessionId?.trim();if(!W)return;let Z=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Z&&Z!==this.client.getClientId())return;let Q=typeof $.payload?.requestId==="string"?$.payload.requestId:"",J=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!Q)return;let j=this.sessionClientContributionHandlers.get(W)?.get(J);if(!j){await this.client.command("capability.respond",{requestId:Q,ok:!1,error:`No client contribution handler registered for capability ${J} in session ${W}.`},W).catch(()=>{});return}let X=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},Y=new AbortController;this.activeCapabilityAbortControllers.set(Q,Y);let V=(B)=>{this.client.command("capability.progress",{requestId:Q,payload:B},W).catch((H)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",H,$)})};try{let B=await j({payload:X,abortSignal:Y.signal,progress:V});if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:Q,ok:!0,payload:B},W)}catch(B){if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:Q,ok:!1,error:B instanceof Error?B.message:String(B)},W)}finally{this.activeCapabilityAbortControllers.delete(Q)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let W=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!W)return;let Z=this.activeCapabilityAbortControllers.get(W);if(!Z)return;Z.abort(ES($.payload.error))}async handleApprovalRequested($){let W=$.sessionId?.trim();if(!W)return;let Z=this.sessionCapabilities.get(W)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Z)return;let Q=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",j=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!Q||!J||!j)return;let X=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},Y=wS($.payload?.inputJson);this.pendingApprovalToolCallIds.add(J),this.emitToolCallContentStart({sessionId:W,toolCallId:J,toolName:j,toolInput:Y});let V=await Promise.resolve(Z({sessionId:W,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:W,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:J,toolName:j,input:Y,policy:X})).catch((B)=>({approved:!1,reason:B instanceof Error?B.message:`Tool approval request failed: ${String(B)}`}));await this.client.command("approval.respond",{approvalId:Q,approved:V.approved,reason:V.reason},W).catch(()=>{})}}var aA={};w(aA,{RemoteRuntimeHost:()=>q6});class q6 extends X${constructor($){super({url:p$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var oA={};w(oA,{SqliteSessionStore:()=>S1});import{existsSync as hS,mkdirSync as kS}from"node:fs";import{join as IS}from"node:path";import{asBool as QW,asOptionalString as P1,asString as Y$,ensureSessionSchema as xS,loadSqliteDb as gS,nowIso as OQ,toBoolInt as JW}from"@cline/shared/db";import{resolveDbDataDir as mS}from"@cline/shared/storage";class S1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??mS()}init(){this.getRawDb()}ensureSessionsDir(){if(!hS(this.sessionsDirPath))kS(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return IS(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=gS(this.sessionDbPath());return xS($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,W=[]){return this.getRawDb().prepare($).run(...W)}queryOne($,W=[]){return this.getRawDb().prepare($).get(...W)??void 0}queryAll($,W=[]){return this.getRawDb().prepare($).all(...W)}create($){let W=OQ();this.run(`INSERT OR REPLACE INTO sessions (
|
|
503
|
+
WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,W,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,W){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(W,P0(),$)}attachReportPathToRun($,W){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(W,P0(),$)}}class t5{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new s5({dbPath:$.dbPath});let W=$.specs;this.reconciler=new Zj({store:this.store,specs:W}),this.materializer=new r5({store:this.store}),this.eventIngress=new pJ({store:this.store,logger:$.logger}),this.runner=new i5({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:W,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new Qj({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Z)=>{let Q=$.logger;if(Q)if(Q.error)Q.error("cron.watcher.failed",{error:Z});else Q.log("cron.watcher.failed",{error:Z})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}var FA={};w(FA,{manifestToSessionRecord:()=>VQ,listSessionHistoryFromBackend:()=>Hj,listSessionHistory:()=>BQ,hydrateSessionHistory:()=>KA});import{readdir as rC,readFile as BA}from"node:fs/promises";import{join as HA}from"node:path";import{formatDisplayUserInput as iC,normalizeUserInput as nC}from"@cline/shared";import{resolveSessionDataDir as GA}from"@cline/shared/storage";import{existsSync as lC}from"node:fs";import{readFile as pC}from"node:fs/promises";class e5{listeners=new Set;subscribe($,W){let Z={listener:$,sessionId:W?.sessionId?.trim()||void 0};return this.listeners.add(Z),()=>{this.listeners.delete(Z)}}emit($){let W=$.payload.sessionId?.trim();for(let Z of this.listeners){if(Z.sessionId&&Z.sessionId!==W)continue;Z.listener($)}}get size(){return this.listeners.size}}async function i$($){let W=$?.trim();if(!W||!lC(W))return[];try{let Z=(await pC(W,"utf8")).trim();if(!Z)return[];let Q=JSON.parse(Z);if(Array.isArray(Q))return Q;if(Q&&typeof Q==="object"&&!Array.isArray(Q)){let J=Q.messages;if(Array.isArray(J))return J}return[]}catch{return[]}}function Yj($){return $?{...$}:void 0}async function YA($,W){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await W.queueSpawnRequest($);let Q=await W.upsertSubagentSessionFromHook($);if(!Q)return;await W.appendSubagentHookAudit(Q,$),await W.applySubagentStatus(Q,$)}function $9($){if(typeof $!=="string")return;let W=$.trim();return W.length>0?W:void 0}function Q1($){let W=$9($);if(!W)return;return W.toLowerCase()==="unknown"?void 0:W}function YQ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function aC($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function Bj($){let W=$??200;return Number.isFinite(W)?Math.max(0,Math.floor(W)):200}function oC($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function sC($){return $.isSubagent!==!0&&!$9($.parentSessionId)}function tC($){let W=$.match(/\d{13,}/g);if(!W||W.length===0)return 0;let Z=0;for(let Q of W){let J=Number.parseInt(Q,10);if(Number.isFinite(J)&&J>Z)Z=J}return Z}function VQ($){return{sessionId:$.session_id,source:$.source,pid:$.pid,startedAt:$.started_at,endedAt:$.ended_at??null,exitCode:$.exit_code??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspace_root,teamName:$.team_name,enableTools:$.enable_tools,enableSpawn:$.enable_spawn,enableTeams:$.enable_teams,isSubagent:!1,prompt:$.prompt,metadata:$.metadata,messagesPath:$.messages_path,updatedAt:$.ended_at??$.started_at}}async function eC($){let W=Bj($);if(W===0)return[];let Z=GA(),J=(await rC(Z,{withFileTypes:!0}).catch(()=>[])).filter((X)=>X.isDirectory()).map((X)=>({entry:X,recency:tC(X.name.trim())})).sort((X,Y)=>Y.recency-X.recency||Y.entry.name.localeCompare(X.entry.name));return(await Promise.all(J.map(async({entry:X})=>{let Y=X.name.trim();if(!Y)return;let V=HA(Z,Y,`${Y}.json`),B=await BA(V,"utf8").catch(()=>{return});if(!B)return;let H;try{H=JSON.parse(B)}catch{return}let G=m0.safeParse(H);if(!G.success)return;return VQ(G.data)}))).filter((X)=>Boolean(X)).sort((X,Y)=>Y.startedAt.localeCompare(X.startedAt)).slice(0,W)}async function $P($,W,Z){let Q=Bj(W);if(Q===0)return await $.listSessions(0),[];let J=Z.includeSubagents?Q:oC(Q),j=await $.listSessions(J);return(Z.includeSubagents?j:j.filter(sC)).slice(0,Q)}function WP($){if(typeof $==="string")return $.trim();let W=[];for(let Z of $){if(!Z||typeof Z!=="object")continue;let Q=Z;if(Q.type!=="text")continue;let J=Q.text?.trim();if(J)W.push(J)}return W.join(`
|
|
504
|
+
`).trim()}function VA($){return $.replace(/\s+/g," ").trim()}function ZP($,W){if($.length<=W)return $;return`${$.slice(0,Math.max(0,W-3)).trimEnd()}...`}function QP($){for(let W of["user","assistant"])for(let Z of $){if(Z.role!==W)continue;let Q=VA(WP(Z.content));if(!Q)continue;let J=W==="user"?VA(iC(Q)):Q,j=nC(J.split(`
|
|
505
|
+
`)[0]??J);return ZP(j,50)}return}function JP($){let W=0;for(let Z of $)W+=YQ(Z.metrics?.cost)??0;return W}function jP($){let W,Z;for(let Q=$.length-1;Q>=0;Q-=1){let J=$[Q];if(!W)W=Q1(J.modelInfo?.provider);if(!Z)Z=Q1(J.modelInfo?.id);if(W&&Z)break}return{provider:W,model:Z}}function XP($){return Q1($?.provider)??Q1($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function YP($){return Q1($?.model)??Q1($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function Vj($,W){let Z=aC($.metadata),Q=$9(W?.title)??$9(Z?.title),J=YQ(W?.totalCost)??YQ(Z?.totalCost),j=Z||Q!==void 0||J!==void 0?{...Z??{},...Q!==void 0?{title:Q}:{},...J!==void 0?{totalCost:J}:{}}:void 0;return{...$,provider:Q1(W?.provider)??Q1($.provider)??XP(Z)??"",model:Q1(W?.model)??Q1($.model)??YP(Z)??"",metadata:j}}function VP($){let W=$.content;if(!Array.isArray(W))return!1;return W.some((Z)=>!!Z&&typeof Z==="object"&&Z.type==="tool-call")}function BP($,W){if($.status!=="running"||$.interactive!==!0)return!1;let Z=W.at(-1);return Z?.role==="assistant"&&!VP(Z)}async function HP($,W){return await Promise.all(W.map(async(Z)=>{if(Z.status!=="running"||Z.interactive!==!0)return Z;let Q=await $.readSessionMessages(Z.sessionId);return BP(Z,Q)?{...Z,status:"idle"}:Z}))}async function KA($,W){return await Promise.all(W.map(async(Z)=>{let Q=Vj(Z),J=Boolean($9(Q.metadata?.title)),j=Boolean(Q1(Q.provider)),X=Boolean(Q1(Q.model)),Y=YQ(Q.metadata?.totalCost),V=Y!==void 0&&Y>0;if(J&&j&&X&&V)return Q;let B=await $.readSessionMessages(Z.sessionId);if(B.length===0)return Q;let H=jP(B),G=JP(B);return Vj(Z,{title:J?void 0:QP(B),provider:j?void 0:H.provider,model:X?void 0:H.model,totalCost:V||G<=0?void 0:G})}))}async function BQ($,W={}){let Z=Bj(W.limit),Q=W.includeSubagents===!0,J=await $P($,Z,{includeSubagents:Q}),j=W.includeManifestFallback===!0&&J.length<Z?await eC(Math.min(Math.max(Z*2,100),500)):[],X=new Map;for(let B of[...J,...j]){if(X.has(B.sessionId))continue;X.set(B.sessionId,B)}let Y=j.length===0?J:Array.from(X.values()).sort((B,H)=>H.startedAt.localeCompare(B.startedAt)).slice(0,Z),V=await HP($,Y);if(W.hydrate===!1)return V.map((B)=>Vj(B));return await KA($,V)}async function GP($){let W=$.trim();if(!W)return;let Z=HA(GA(),W,`${W}.json`),Q=await BA(Z,"utf8").catch(()=>{return});if(!Q)return;try{let J=m0.safeParse(JSON.parse(Q));return J.success?J.data.messages_path:void 0}catch{return}}async function Hj($,W={}){let Z=new Map;return await BQ({listSessions:async(J)=>{let j=await $.listSessions(J);Z.clear();for(let X of j)Z.set(X.sessionId,X);return j.map(s4)},readSessionMessages:async(J)=>{let j=Z.get(J)?.messagesPath??await GP(J);return await i$(j)}},W)}var wU={};w(wU,{resolveSessionBackend:()=>ij,createRuntimeHost:()=>y6});import{captureSdkError as NU}from"@cline/shared";import{createSessionId as jS,isHubProtocolCompatible as XS,resolveClineBuildEnv as YS,resolveHubCommandTimeoutMs as VS}from"@cline/shared";import{spawn as IP}from"node:child_process";import{closeSync as xP,mkdirSync as gP,openSync as mP}from"node:fs";import{basename as vP,dirname as cP,join as uP}from"node:path";import{fileURLToPath as dP}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as lP,isHubDaemonProcess as RA,isHubProtocolCompatible as pP,resolveClineBuildEnv as NA,withResolvedClineBuildEnv as rP}from"@cline/shared";import{createHash as KP,randomBytes as FP}from"node:crypto";import{existsSync as AP}from"node:fs";import{chmod as UP,mkdir as Gj,readFile as DA,rm as Kj,writeFile as _A}from"node:fs/promises";import{dirname as LA,join as Fj}from"node:path";import{resolveClineDataDir as o2,resolveClineDir as fA}from"@cline/shared/storage";var DP="CLINE_HUB_DISCOVERY_PATH",_P="CLINE_HUB_BUILD_ID",AA=30000,LP=15000,fP=100;function OP($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function TP($){return KP("sha256").update($).digest("hex").slice(0,12)}function zP($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(W){return W instanceof Error&&"code"in W?String(W.code)==="EPERM":!1}}function HQ(){return FP(32).toString("hex")}function qP($){return new Promise((W)=>setTimeout(W,$))}function MP($){return`${$}.lock`}async function RP($){try{let W=JSON.parse(await DA(Fj($,"owner.json"),"utf8"));if(typeof W.pid!=="number"||typeof W.acquiredAt!=="string")return;return{pid:W.pid,acquiredAt:W.acquiredAt}}catch{return}}async function UA($){await Kj($,{recursive:!0,force:!0}).catch(()=>{return})}function GQ(){return process.env[_P]?.trim()||String($5.version)}function Q$($=process.argv[1]?.trim()||process.cwd()){let W=`hub-${TP($)}`,Z=process.env[DP]?.trim()||Fj(o2(),"locks","hub","owners",`${OP(W)}.json`);return{ownerId:W,discoveryPath:Z}}function OA($=`hub-${Date.now().toString(36)}`){return Q$($)}async function f0($){try{let W=JSON.parse(await DA($,"utf8"));if(typeof W.hubId!=="string"||typeof W.protocolVersion!=="string"||typeof W.authToken!=="string"||typeof W.host!=="string"||typeof W.port!=="number"||typeof W.url!=="string"||typeof W.startedAt!=="string"||typeof W.updatedAt!=="string")return;return{hubId:W.hubId,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((Z)=>typeof Z==="string"):void 0,coreVersion:typeof W.coreVersion==="string"?W.coreVersion:void 0,buildId:typeof W.buildId==="string"?W.buildId:void 0,authToken:W.authToken,host:W.host,port:W.port,url:W.url,pid:typeof W.pid==="number"?W.pid:void 0,startedAt:W.startedAt,updatedAt:W.updatedAt}}catch{return}}async function KQ($,W){await Gj(LA($),{recursive:!0}),await Kj($,{force:!0}).catch(()=>{return}),await _A($,`${JSON.stringify(W,null,2)}
|
|
506
|
+
`,{encoding:"utf8",mode:384}),await UP($,384)}async function c0($){await Kj($,{force:!0}).catch(()=>{return})}async function FQ($,W){let Z=MP($);await Gj(LA(Z),{recursive:!0});let Q=Date.now()+LP;while(!0)try{await Gj(Z,{recursive:!1}),await _A(Fj(Z,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
|
|
507
|
+
`,"utf8");try{return await W()}finally{await UA(Z)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let X=await RP(Z),Y=X?Date.now()-Date.parse(X.acquiredAt):AA+1;if(!X||!zP(X.pid)||Y>AA){await UA(Z);continue}if(Date.now()>=Q)throw Error(`Timed out waiting for hub startup lock ${Z}`);await qP(fP)}}async function J$($,W){try{let Z=await fetch(W?.authToken?Aj($):AQ($),{headers:W?.authToken?{authorization:`Bearer ${W.authToken}`}:void 0});if(!Z.ok)return;let Q=await Z.json();if(typeof Q.protocolVersion!=="string"||typeof Q.host!=="string"||typeof Q.port!=="number"||typeof Q.url!=="string")return;return{protocolVersion:Q.protocolVersion,minClientProtocolVersion:typeof Q.minClientProtocolVersion==="string"?Q.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Q.maxClientProtocolVersion==="string"?Q.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Q.capabilities)?Q.capabilities.filter((J)=>typeof J==="string"):void 0,coreVersion:typeof Q.coreVersion==="string"?Q.coreVersion:void 0,buildId:typeof Q.buildId==="string"?Q.buildId:void 0,host:Q.host,port:Q.port,url:Q.url,hubId:typeof Q.hubId==="string"?Q.hubId:void 0,authToken:typeof Q.authToken==="string"?Q.authToken:void 0,pid:typeof Q.pid==="number"?Q.pid:void 0,startedAt:typeof Q.startedAt==="string"?Q.startedAt:void 0,updatedAt:typeof Q.updatedAt==="string"?Q.updatedAt:void 0}}catch{return}}function _1($,W,Z="/hub"){return new URL(`ws://${$}:${W}${Z}`).toString()}function AQ($){let W=new URL($);return W.protocol=W.protocol==="wss:"?"https:":"http:",W.pathname="/health",W.search="",W.toString()}function Aj($){let W=new URL(AQ($));return W.pathname="/status",W.toString()}function TA($){return AP($)}import{CLINE_HUB_DEV_PORT as NP,CLINE_HUB_PORT as EP,resolveClineBuildEnv as wP}from"@cline/shared";var CP="CLINE_HUB_HOST",PP="CLINE_HUB_PORT",SP="CLINE_HUB_PATHNAME",Uj="127.0.0.1",Dj=EP,_j="/hub";function zA($){return wP($)==="development"?NP:Dj}function Lj($={}){return($.env??process.env)[CP]?.trim()||Uj}function T6($={}){let Z=($.env??process.env)[PP]?.trim();if(!Z)return zA($);let Q=Number.parseInt(Z,10);if(!Number.isInteger(Q)||Q<1||Q>65535)return zA($);return Q}function fj($={}){return($.env??process.env)[SP]?.trim()||_j}function J1($={},W={}){return{host:$.host??Lj(W),port:$.port??T6(W),pathname:$.pathname??fj(W)}}import{join as bP}from"node:path";var yP="shared:cline",hP="CLINE_HUB_DISCOVERY_PATH",kP="hub-production";function qA($){let W=R1($.trim());return Q$(`workspace:${W||$.trim()}`)}function u0($=yP){return Q$($)}function j1(){return{ownerId:kP,discoveryPath:process.env[hP]?.trim()||bP(o2(),"locks","hub","production.json")}}var iP=8000,nP=200,aP=3000,oP=100,sP=[100,250,500,1000,2000],tP="--cline-hub-daemon";function eP($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function $S(){try{let $=uP(o2(),"logs","hub-daemon.log");return gP(cP($),{recursive:!0}),{fd:mP($,"a"),logPath:$}}catch{return}}function EA(){return NA()==="production"?j1():u0()}function s2($){return pP($).compatible}function MA($,W,Z){if(!W||W.url!==Z)return $;return{...$,authToken:$.authToken??W.authToken,pid:$.pid??W.pid}}async function t2($,W){try{return await J$($,{authToken:W})}catch{return}}async function WS($,W){let Z=Date.now()+W;while(Date.now()<Z){if(!(await t2($))?.url)return!0;await new Promise((J)=>setTimeout(J,oP))}return!1}async function UQ($,W){if(await Z9($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Z=await WS($.url,aP);return await c0(W).catch(()=>{return}),Z}async function W9($,W){if(s2($))return!0;return UQ($,W)}async function wA($){if(NA()!=="production")return;let W=u0();if(W.discoveryPath===$.discoveryPath)return;let Z=await f0(W.discoveryPath);if(Z?.url)await UQ(Z,W.discoveryPath);else await c0(W.discoveryPath).catch(()=>{return})}function ZS(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return dP(new URL(`./entry.${$}`,import.meta.url))}function QS($,W){let Z=ZS(),Q=process.execPath?.trim();if(!Q)throw Error("unable to resolve runtime executable for hub daemon");let J=vP(Q).toLowerCase().includes("bun"),j=Z.startsWith("/$bunfs/"),X=J&&Z.toLowerCase().endsWith(".ts"),Y=j?[tP]:[...X?["--conditions=development"]:[],Z];return{launcher:Q,args:[...Y,"--cwd",$,...eP(W)],cwd:$,env:{...rP(process.env),CLINE_NO_INTERACTIVE:"1",[lP]:"1"}}}function JS($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Z="message"in $?$.message:void 0;return typeof Z==="string"&&Z.includes("ETXTBSY")}function Oj($,W={}){if(RA())return;let Z=QS($,W),Q=$S();try{IP(Z.launcher,Z.args,{detached:!0,stdio:Q?["ignore",Q.fd,Q.fd]:"ignore",env:Z.env,cwd:Z.cwd,windowsHide:!0}).unref()}finally{if(Q)xP(Q.fd)}}async function z6($,W={}){for(let Z=0;;Z++)try{Oj($,W);return}catch(Q){let J=sP[Z];if(!JS(Q)||J===void 0)throw Q;await new Promise((j)=>setTimeout(j,J))}}function DQ($,W={}){if(RA())return;let Z=EA(),Q=J1(W),J=_1(Q.host,Q.port,Q.pathname),j=W.allowPortFallback===!0&&Q.port!==0;wA(Z).catch(()=>{return}).then(()=>f0(Z.discoveryPath)).then(async(X)=>{let Y=!1;if(X?.url)if(!X.authToken){if(Y=!0,!await UQ(X,Z.discoveryPath)&&!j)return}else{let H=await t2(X.url,X.authToken);if(H?.url&&s2(H)&&await E1(H.url,{authToken:X.authToken}))return;if(H?.url)await W9({...H,authToken:X.authToken},Z.discoveryPath);else await c0(Z.discoveryPath).catch(()=>{return})}let V=await t2(J);if(V?.url){if(s2(V)){if(!j||!Y)return}else if(!await W9({...V,authToken:void 0},Z.discoveryPath)&&!j)return}let B=j?{...Q,port:0}:Q;await z6($,B)}).catch(()=>{})}async function CA($,W={}){let Z=EA(),Q=W.host!==void 0||W.port!==void 0||W.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=J1(W),j=_1(J.host,J.port,J.pathname),X=(F)=>{if(!Q)n$(F.url,F.authToken);return F};await wA(Z).catch(()=>{return});let Y=await f0(Z.discoveryPath),V=!1;if(Y?.url){let F=Y.authToken;if(!F)V=!0,await UQ(Y,Z.discoveryPath);else{let A=await t2(Y.url,F);if(A?.url&&s2(A)&&await E1(A.url,{authToken:F}))return X({url:A.url,authToken:F});if(A?.url)await W9({...A,authToken:F},Z.discoveryPath);else await c0(Z.discoveryPath).catch(()=>{return})}}let B=await t2(j);if(B?.url){let F=MA(B,Y,j);if(s2(B))throw Error(`A compatible Cline Hub is already running at ${j}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${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 W9(F,Z.discoveryPath)&&W.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is already running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let G=W.allowPortFallback===!0&&J.port!==0?{...J,port:0}:J;await z6($,G);let K=Date.now()+iP;while(Date.now()<K){let F=await f0(Z.discoveryPath);if(F?.url&&F.authToken){let D=await t2(F.url,F.authToken);if(D?.url&&s2(D)&&await E1(D.url,{authToken:F.authToken}))return X({url:D.url,authToken:F.authToken})}let A=await t2(j);if(A?.url&&!s2(A)){let D=MA(A,F,j);if(!await W9(D,Z.discoveryPath)&&W.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is still running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((D)=>setTimeout(D,nP))}throw Error("Timed out waiting for detached hub startup.")}function _Q(){return YS()==="production"?j1():u0()}function BS(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function hA($){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((W)=>Buffer.from(W))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return hA($.data);return String($)}function HS($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function PA($){let W=$,Z=HS(W.reason);return new k0("hub_connection_closed",W.code||Z?`Hub connection closed (code=${W.code??0}${Z?`, reason=${Z}`:""})`:Tj,{closeCode:W.code,closeReason:Z||void 0})}function GS($,W){if($ instanceof k0)return $;if($ instanceof Error)return new k0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new k0("hub_connect_failed",$.error.message);let Z=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Z)return new k0("hub_connect_failed",Z);let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new k0("hub_connect_failed",Q?`Failed to connect to hub at ${W.toString()} (${Q} event before socket open).`:`Failed to connect to hub at ${W.toString()}.`)}var KS=8000,FS=200,SA="*",bA=8000,AS="cline-hub-auth.",kA=new Map,IA=new Set,US=3000,DS=3000,_S=100,Tj="Hub connection closed",LS=250,fS=5000,yA=0.5;class k0 extends Error{code;details;constructor($,W,Z){super(W);this.code=$;this.details=Z;this.name="HubTransportError"}}function Mj($){return $ instanceof k0}class q6 extends Error{command;code;constructor($,W,Z){super(Z);this.command=$;this.code=W;this.name="HubCommandError"}}function LQ($,W){return $ instanceof q6&&$.code==="hub_command_timeout"&&(W===void 0||$.command===W)}function xA($){let W=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),W)return W;let Z=Rj($.toString());return Z?kA.get(Z):void 0}function OS($){try{let Z=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"}catch{return!1}}function Rj($){if(!OS($))return;let W=new URL(a$($));return W.search="",W.hash="",W.toString()}function zj($){let W=Rj($);return!!W&&IA.has(W)}function n$($,W){let Z=Rj($);if(Z){if(IA.add(Z),W?.trim())kA.set(Z,W)}return $}class L1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new k0("hub_connection_closed",Tj);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),W=this.options.authToken?.trim()||xA($);$.hash="";let Q=new(BS())($.toString(),W?[`${AS}${W}`]:void 0);this.socket=Q;let J=!1;this.connectPromise=new Promise((j,X)=>{let Y=!1,V=setTimeout(()=>{if(Y)return;Y=!0,J=!0,this.lastCloseError=new k0("hub_connect_timeout",`Timed out connecting to hub after ${bA}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Q.close()}catch{}X(this.lastCloseError)},bA);Q.addEventListener("open",()=>{if(Y)return;Y=!0,clearTimeout(V),j()}),Q.addEventListener("error",(B)=>{if(Y)return;Y=!0,clearTimeout(V),this.lastCloseError=GS(B,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,X(this.lastCloseError)}),Q.addEventListener("close",(B)=>{if(Y)return;if(Y=!0,clearTimeout(V),!J)this.lastCloseError=PA(B),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,X(this.lastCloseError)})}),Q.addEventListener("message",(j)=>{this.handleFrame(JSON.parse(hA(j)))}),Q.addEventListener("close",(j)=>{if(this.socket!==Q)return;if(!J)this.lastCloseError=PA(j),this.sawSocketClose=!0;this.registered=!1;for(let X of this.pendingReplies.values())X.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let j of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(j));this.reconnectAttempt=0}subscribe($,W){let Z=W?.sessionId?.trim()||void 0,Q={listener:$,sessionId:Z};return this.listeners.add(Q),this.adjustSubscriptionCount(Z,1),()=>{if(!this.listeners.delete(Q))return;this.adjustSubscriptionCount(Z,-1)}}async command($,W,Z,Q){let J=0,j=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,W,Z,Q)}catch(X){if(!j||J>=1||!await this.recoverLocalHubTransport(X))throw X;J+=1}}async commandOnce($,W,Z,Q){await this.connect();let J=jS("hubreq_"),j=VS($,Q?.timeoutMs),X=new Promise((V,B)=>{let H=j===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;B(new q6($,"hub_command_timeout",`Hub command ${$} timed out after ${j}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.`))},j);this.pendingReplies.set(J,{resolve:(G)=>{if(H)clearTimeout(H);V(G)},reject:(G)=>{if(H)clearTimeout(H);B(G)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:J,clientId:this.clientId,sessionId:Z,timeoutMs:j,payload:W}})}catch(V){throw this.pendingReplies.delete(J),V}let Y=await X;if(!Y.ok){if(Y.error?.code===r2){let V=Z??(typeof W?.sessionId==="string"?W.sessionId:void 0);throw new W$(V,Y.error.message)}throw new q6($,Y.error?.code,Y.error?.message??`Hub command ${$} failed`)}return Y}async recoverLocalHubTransport($){if(!zj(this.currentUrl)||!Mj($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let W=await e2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!W)return!1;return this.currentUrl=W,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(LS*2**this.reconnectAttempt,fS),W=Math.round($*(1-yA)+Math.random()*$*yA);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},W)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!zj(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await e2({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 k0("hub_connection_closed",Tj),this.sawSocketClose=!1;for(let W of this.pendingReplies.values())W.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 k0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,W){this.sendFrame({kind:$,clientId:this.clientId,...W?{sessionId:W}:{}})}adjustSubscriptionCount($,W){let Z=this.subscriptionKeyForSessionId($),Q=(this.subscriptionCounts.get(Z)??0)+W;if(Q<=0){if(this.subscriptionCounts.delete(Z),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(W<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Z,Q),W>0&&Q===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??SA}subscriptionSessionIdFromKey($){return $===SA?void 0:$}handleFrame($){switch($.kind){case"reply":{let W=$.envelope.requestId;if(!W)return;let Z=this.pendingReplies.get(W);if(!Z)return;this.pendingReplies.delete(W),Z.resolve($.envelope);return}case"event":for(let W of this.listeners){if(W.sessionId&&W.sessionId!==$.envelope.sessionId?.trim())continue;W.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function a$($){let W=new URL($);if(W.protocol==="http:")W.protocol="ws:";else if(W.protocol==="https:")W.protocol="wss:";return W.toString()}async function E1($,W){let Z=new L1({url:$,authToken:W?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:W?.workspaceRoot,cwd:W?.cwd});try{return await Z.connect(),!0}catch{return!1}finally{Z.close()}}async function qj($,W){let Z=a$($),Q=await J$(Z,{authToken:W?.authToken});if(!Q)return{status:"unreachable",url:Z};if(!XS(Q).compatible)return{status:"protocol_mismatch",url:Z};if(W?.verifyConnection===!0&&!await E1(Z,{workspaceRoot:W.workspaceRoot,cwd:W.cwd,authToken:W.authToken}))return{status:"unreachable",url:Z};return{status:"compatible",url:Z}}async function TS($){let W=Date.now()+KS;while(Date.now()<W){let Z=await f0($.discoveryPath);if(Z?.url){let Q=await qj(Z.url,{verifyConnection:!0,authToken:Z.authToken});if(Q.status==="compatible")return n$(Q.url,Z.authToken)}await new Promise((Q)=>setTimeout(Q,FS))}return}async function zS($){let W=Date.now()+DS;while(Date.now()<W){if(!(await J$($).catch(()=>{return}))?.url)return!0;await new Promise((Q)=>setTimeout(Q,_S))}return!1}function qS($,W){try{return a$($)===a$(W)}catch{return!1}}function MS($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Z)=>{if(!Z||typeof Z!=="object")return!1;let Q=Z;if(Q.status==="running"||Q.status==="idle"||Q.status==="pending")return!0;return Array.isArray(Q.participants)&&Q.participants.length>0})}async function RS($,W,Z){let Q=new L1({url:$,authToken:W,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{let J=await Q.command("session.list",{limit:500},void 0,{timeoutMs:US});return!MS(J.payload)}catch{return!1}finally{await Q.dispose().catch(()=>{return})}}async function Q9($={}){if($.endpoint?.trim()){let J=await qj($.endpoint);return J.status==="compatible"?J.url:void 0}let W=_Q(),Z=await f0(W.discoveryPath);if(!Z?.url)return;let Q=await qj(Z.url,{authToken:Z.authToken});if(Q.status==="compatible")return n$(Q.url,Z.authToken);if(Q.status==="protocol_mismatch")await c0(W.discoveryPath).catch(()=>{return});return}async function e2($={}){let W=await Q9($);if(W&&await E1(W,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return W;if($.endpoint?.trim())return;let Z=_Q();return await z6($.workspaceRoot??process.cwd()),await TS(Z)}async function Z9($,W){let Z=new URL($),Q=W?.trim()||xA(Z);if(Z.protocol==="ws:")Z.protocol="http:";else if(Z.protocol==="wss:")Z.protocol="https:";return Z.pathname="/shutdown",Z.hash="",(await fetch(Z,{method:"POST",headers:Q?{authorization:`Bearer ${Q}`}:void 0})).ok}async function Nj($=_Q()){let W=await f0($.discoveryPath);if(!W?.url)return!1;try{if(await Z9(W.url,W.authToken))return!0}catch{}return!1}async function fQ($){if(!zj($.url))return;let W=_Q(),Z=await f0(W.discoveryPath);if(!Z?.url||!qS(Z.url,$.url))return;if(!await RS(Z.url,Z.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await Nj())return;if(!await zS(Z.url))return;return await c0(W.discoveryPath).catch(()=>{return}),await e2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var oA={};w(oA,{HubRuntimeHost:()=>j$});import{resolveProviderRequestHeaders as CS}from"@cline/llms";import{captureSdkError as Ej,createSessionId as mA,HUB_CHECKPOINT_CAPABILITY as PS,HUB_COMPACTION_CAPABILITY as SS,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as bS,HUB_HOOK_CAPABILITY_PREFIX as yS,HUB_MISTAKE_LIMIT_CAPABILITY as hS,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as kS,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as IS,isHubToolExecutorName as xS}from"@cline/shared";var gA={};w(gA,{createCoreSessionSnapshot:()=>w1,coreSessionSnapshotToRecord:()=>OQ});function NS($){return $?JSON.parse(JSON.stringify($)):void 0}function ES($){return $?JSON.parse(JSON.stringify($)):void 0}function wS($){let W=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,Q=(Array.isArray(W?.history)?W.history:[]).filter((X)=>!!X&&typeof X==="object"&&!Array.isArray(X)).flatMap((X)=>{let Y=typeof X.ref==="string"?X.ref.trim():"",V=Number(X.createdAt),B=Number(X.runCount);if(!Y||!Number.isFinite(V)||!Number.isInteger(B))return[];return[{ref:Y,createdAt:V,runCount:B,...X.kind==="stash"||X.kind==="commit"?{kind:X.kind}:{}}]}),J=Q.at(-1),j=$?.checkpointEnabled===!0?!0:void 0;if(!j&&Q.length===0)return;return{...j?{enabled:j}:{},...J?{latest:J}:{},history:Q}}function w1($){let{session:W}=$,Z=NS(W.metadata);return{version:1,sessionId:W.sessionId,source:W.source,status:W.status,createdAt:W.startedAt,updatedAt:W.updatedAt,endedAt:W.endedAt??null,exitCode:W.exitCode??null,interactive:W.interactive,workspace:{cwd:W.cwd,root:W.workspaceRoot},model:{providerId:W.provider,modelId:W.model},capabilities:{enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams},lineage:{...W.parentSessionId?{parentSessionId:W.parentSessionId}:{},...W.parentAgentId?{parentAgentId:W.parentAgentId}:{},...W.agentId?{agentId:W.agentId}:{},...W.conversationId?{conversationId:W.conversationId}:{},isSubagent:W.isSubagent},...W.teamName?{team:{name:W.teamName}}:{},...W.prompt?{prompt:W.prompt}:{},...Z?{metadata:Z}:{},...W.messagesPath?{artifacts:{messagesPath:W.messagesPath}}:{},...$.messages?{messages:ES($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Q=wS(Z);return Q?{checkpoint:Q}:{}})()}}function OQ($){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 M6($){if(!$)return;return JSON.parse(JSON.stringify($))}var gS=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function vA($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function cA($){if(!$)return;let{userInstructionService:W,...Z}=$;return JSON.parse(JSON.stringify(Z))}function uA($,W){let Z={...$.config,sessionId:W},Q=CS({providerId:$.config.providerId,sessionId:W,source:$.source,defaultSource:F0.CORE,client:{name:$.localRuntime?.extensionContext?.client?.name,version:$.localRuntime?.extensionContext?.client?.version,versionHeaderFallback:$.config.headers?.["X-CLIENT-VERSION"],platform:$.localRuntime?.extensionContext?.client?.platform,platformVersion:$.localRuntime?.extensionContext?.client?.platformVersion,isMultiRoot:$.localRuntime?.extensionContext?.client?.isMultiRoot},coreVersion:r8,openAiCodex:{accessToken:$.config.apiKey,userAgentVersion:process.env.npm_package_version},headers:{config:$.config.headers}});if(Q)Z.headers=Q;return Z}function dA($){let W=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof W.agentId==="string"?W.agentId:"",conversationId:typeof W.conversationId==="string"?W.conversationId:"",iteration:typeof W.iteration==="number"?W.iteration:0,metadata:W.metadata&&typeof W.metadata==="object"&&!Array.isArray(W.metadata)?W.metadata:void 0}}function $8($,W,Z){$.manifest.push(W),$.handlers.set(W.capabilityName,Z)}function lA($,W){let Z={manifest:[],handlers:new Map};for(let J of Object.keys(W.toolExecutors??{}).filter(xS)){let j=W.toolExecutors?.[J];if(typeof j!=="function")continue;$8(Z,{kind:"toolExecutor",executor:J,capabilityName:`${kS}${J}`},async({payload:X,abortSignal:Y})=>{let V=Array.isArray(X.args)?[...X.args]:[],B={...dA(X.context),signal:Y};return{result:await j(...V,B)}})}for(let J of $?.extraTools??[])$8(Z,{kind:"tool",name:J.name,description:J.description,inputSchema:M6(J.inputSchema)??{},...J.lifecycle?{lifecycle:M6(J.lifecycle)}:{},capabilityName:`${bS}${J.name}`},async({payload:j,abortSignal:X,progress:Y})=>{let V={...dA(j.context),signal:X};return{result:await J.execute(j.input,{...V,emitUpdate:(H)=>{Y({update:H})}})}});let Q=$?.hooks;if(Q)for(let J of gS){let j=Q[J];if(typeof j!=="function")continue;$8(Z,{kind:"hook",name:J,capabilityName:`${yS}${J}`},async({payload:X})=>({control:await j(X.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;$8(Z,{kind:"compaction",capabilityName:SS,config:vA($.compaction)},async({payload:j})=>({result:await J(j.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;$8(Z,{kind:"checkpoint",capabilityName:PS,config:vA($.checkpoint)},async({payload:j})=>({result:await J(j.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;$8(Z,{kind:"mistakeLimit",capabilityName:hS},async({payload:j})=>({result:await J(j.context)}))}if($?.userInstructionService){let J=$.userInstructionService;$8(Z,{kind:"userInstructionService",capabilityName:IS},async()=>{return await J.start().catch(()=>{}),{snapshot:{records:{skill:J.listRecords("skill"),rule:J.listRecords("rule"),workflow:J.listRecords("workflow")},runtimeCommands:J.listRuntimeCommands()}}})}return Z}function nA($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let W=$.message;if(typeof W==="string"&&W.trim())return W.trim()}return}function mS($){return nA($)??"Capability request was cancelled."}function vS($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function cS($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function uS($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=$,Z=typeof W.inputTokens==="number"?W.inputTokens:void 0,Q=typeof W.outputTokens==="number"?W.outputTokens:void 0;if(Z===void 0||Q===void 0)return;return{inputTokens:Z,outputTokens:Q,cacheReadTokens:typeof W.cacheReadTokens==="number"?W.cacheReadTokens:0,cacheWriteTokens:typeof W.cacheWriteTokens==="number"?W.cacheWriteTokens:0,totalCost:typeof W.totalCost==="number"?W.totalCost:0}}function pA($){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 wj($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function o$($,W){return wj($?.[W])??0}function dS($){let W=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Z=$?.totals&&typeof $.totals==="object"?$.totals:void 0,Q=$?.agent&&typeof $.agent==="object"?$.agent:void 0,J=Q?.teamRole==="teammate"||Q?.teamRole==="lead"?Q.teamRole:void 0;return{event:{type:"usage",agentId:typeof Q?.agentId==="string"?Q.agentId:void 0,conversationId:typeof Q?.conversationId==="string"?Q.conversationId:void 0,parentAgentId:typeof Q?.parentAgentId==="string"?Q.parentAgentId:void 0,inputTokens:o$(W,"inputTokens"),outputTokens:o$(W,"outputTokens"),cacheReadTokens:o$(W,"cacheReadTokens"),cacheWriteTokens:o$(W,"cacheWriteTokens"),cost:wj(W?.totalCost),totalInputTokens:o$(Z,"inputTokens"),totalOutputTokens:o$(Z,"outputTokens"),totalCacheReadTokens:o$(Z,"cacheReadTokens"),totalCacheWriteTokens:o$(Z,"cacheWriteTokens"),totalCost:wj(Z?.totalCost)},teamAgentId:typeof Q?.teamAgentId==="string"?Q.teamAgentId:void 0,teamRole:J}}function lS($){let W=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Z=$?.reason??W?.finishReason,Q=cS(Z)?Z:Z==="failed"?"error":"completed",J=uS($?.usage??W?.usage);return{type:"done",reason:Q,text:typeof $?.text==="string"?$.text:typeof W?.text==="string"?W.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof W?.iterations==="number"?W.iterations:0,usage:J}}function W8($,W){return $.error?.message??`hub command failed: ${W}`}function J9($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function aA($){let W=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof W?.parentSessionId==="string"?W.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof W?.agentId==="string"?W.agentId:void 0),parentAgentId:typeof W?.parentAgentId==="string"?W.parentAgentId:void 0,conversationId:typeof W?.conversationId==="string"?W.conversationId:void 0,isSubagent:typeof W?.isSubagent==="boolean"?W.isSubagent:!1,source:typeof W?.source==="string"?W.source:F0.CORE,pid:typeof W?.pid==="number"?W.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:J9($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:J9($.status)==="completed"?0:J9($.status)==="failed"?1:void 0,status:J9($.status),interactive:W?.interactive===!0,provider:typeof W?.provider==="string"?W.provider:"hub",model:typeof W?.model==="string"?W.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof W?.teamName==="string"?W.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??W?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??W?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??W?.enableTeams===!0,prompt:typeof W?.prompt==="string"?W.prompt:void 0,metadata:W,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof W?.messagesPath==="string"?W.messagesPath:void 0,hookPath:typeof W?.hookPath==="string"?W.hookPath:void 0}}function s$($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=$;return W.version===1&&typeof W.sessionId==="string"?JSON.parse(JSON.stringify(W)):void 0}function pS($){let W=s$($?.snapshot);if(W)return OQ(W);let Z=$?.session;return Z?aA(Z):void 0}function rA($,W,Z){let Q=Z?.workspaceRoot?.trim()||W.config.workspaceRoot||W.config.cwd;return m0.parse({version:1,session_id:$,source:W.source??F0.CORE,pid:process.pid,started_at:new Date(Z?.createdAt??Date.now()).toISOString(),status:J9(Z?.status),interactive:W.interactive===!0,provider:W.config.providerId,model:W.config.modelId,cwd:Z?.cwd?.trim()||W.config.cwd,workspace_root:Q,team_name:W.config.teamName,enable_tools:W.config.enableTools,enable_spawn:W.config.enableSpawnAgent,enable_teams:W.config.enableAgentTeams,prompt:W.prompt?.trim()||void 0,metadata:W.sessionMetadata&&Object.keys(W.sessionMetadata).length>0?W.sessionMetadata:void 0})}function iA($,W){return m0.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??W.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class j${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new e5;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,W){this.clientContext=W,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:W?.workspaceRoot,cwd:W?.cwd},this.defaultCapabilities=C0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Z)=>this.requestPendingPromptsList(Z),update:(Z)=>this.requestPendingPromptUpdate(Z),delete:(Z)=>this.requestPendingPromptDelete(Z)},this.client=this.createClient($.url)}createClient($){return new L1({...this.clientOptions,url:$})}async replaceClient($){let W=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(W.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!LQ($,"session.create"))return!1;let W=await fQ({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!W)return!1;return await this.replaceClient(W),!0}registerPlannedSession($,W,Z){if(this.sessionCapabilities.set($,W),Z.size>0)this.sessionClientContributionHandlers.set($,Z);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let W=this.resolveCapabilities($),Z=lA($.localRuntime,W),Q=$.config.sessionId?.trim()||mA(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:M6(uA($,Q)),metadata:{...$.sessionMetadata??{},source:$.source??F0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Z.manifest.length>0?{clientContributions:Z.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:M6($.toolPolicies),initialMessages:$.initialMessages,...$.initialCompactionState?{initialCompactionState:$.initialCompactionState}:{}});this.registerPlannedSession(Q,W,Z.handlers);let j;try{j=await J()}catch(B){if(this.cleanupPlannedSession(Q),await this.recoverLocalHubStartupDeadlock(B)){this.registerPlannedSession(Q,W,Z.handlers);try{j=await J()}catch(H){throw this.cleanupPlannedSession(Q),H}}else throw B}let X=s$(j.payload?.snapshot),Y=j.payload?.session,V=(X?.sessionId??Y?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(Q),Error("Hub runtime did not return a session id.");if(V!==Q)this.cleanupPlannedSession(Q),this.registerPlannedSession(V,W,Z.handlers);return{sessionId:V,manifest:X?iA(X,$):rA(V,$,Y),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let W=$.sessionId.trim();if(!W)throw Error("sessionId is required");let Z=$.restore?.messages!==!1;if(Z&&!$.start)throw Error("start is required when restore.messages is true");let Q=$.start,J=Q?this.resolveCapabilities(Q):void 0,j=Q?lA(Q.localRuntime,J??{}):{manifest:[],handlers:new Map},X,Y;if(Q)X=Q.config.sessionId?.trim()||mA(),Y=uA(Q,X);if(X&&J)this.sessionCapabilities.set(X,J);if(X&&j.handlers.size>0)this.sessionClientContributionHandlers.set(X,j.handlers),this.ensureSessionSubscription(X);let V;try{V=await this.client.command("session.restore",{sessionId:W,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Q?{workspaceRoot:Q.config.workspaceRoot?.trim()||Q.config.cwd,cwd:Q.config.cwd??$.cwd,sessionConfig:M6(Y),metadata:{...Q.sessionMetadata??{},source:Q.source??F0.CORE,provider:Q.config.providerId,model:Q.config.modelId,enableTools:Q.config.enableTools,enableSpawn:Q.config.enableSpawnAgent,enableTeams:Q.config.enableAgentTeams,teamName:Q.config.teamName,prompt:Q.prompt,interactive:Q.interactive===!0},runtimeOptions:{...j.manifest.length>0?{clientContributions:j.manifest}:{},...Q.localRuntime?.configExtensions?{configExtensions:Q.localRuntime.configExtensions}:{}},toolPolicies:M6(Q.toolPolicies),...Q.initialCompactionState?{initialCompactionState:Q.initialCompactionState}:{}}:{}},W)}catch(A){if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw A}if(!V.ok){let A=typeof V.payload?.error==="string"?V.payload.error:"session.restore failed";if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw Error(A)}let B=s$(V.payload?.snapshot),H=V.payload?.session,G=(B?.sessionId??H?.sessionId)?.trim();if(Z&&!G){if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw Error("Hub checkpoint restore returned no session id")}if(G&&X&&G!==X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);if(G&&J)this.sessionCapabilities.set(G,J);if(G&&j.handlers.size>0)this.sessionClientContributionHandlers.set(G,j.handlers);if(G)this.ensureSessionSubscription(G);let K=Array.isArray(V.payload?.messages)?V.payload.messages:void 0,F=V.payload?.checkpoint;if(!F)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:G,startResult:G?{sessionId:G,manifest:B?iA(B,Q??{}):rA(G,Q??{},H),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:K,checkpoint:F}}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 W=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(W.payload?.prompts)?W.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let W=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(W.payload?.prompts)?W.payload.prompts:[],prompt:W.payload?.prompt,updated:W.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let W=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(W.payload?.prompts)?W.payload.prompts:[],prompt:W.payload?.prompt,removed:W.payload?.removed===!0}}async getAccumulatedUsage($){let W=await this.client.command("session.get",{includeSnapshot:!0},$),Z=s$(W.payload?.snapshot);if(Z){let X=Z.usage?{...Z.usage}:void 0,Y=Z.aggregateUsage?{...Z.aggregateUsage}:void 0;return X||Y?{usage:X,aggregateUsage:Y}:void 0}let Q=W.payload?.session,J=pA(Q?.usage),j=pA(Q?.aggregateUsage);return J||j?{usage:J,aggregateUsage:j}:void 0}async abort($,W){await this.client.command("run.abort",{sessionId:$,reason:nA(W)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,W]of this.sessionSubscriptions){W();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 W;try{W=await this.client.command("session.get",void 0,$)}catch(Z){if(Z$(Z))return;throw Z}return pS(W.payload)}async listSessions($=100){let W=await this.client.command("session.list",{limit:$}),Z=Array.isArray(W.payload?.snapshots)?W.payload.snapshots.flatMap((J)=>{let j=s$(J);return j?[OQ(j)]:[]}):[];if(Z.length>0)return Z;return(W.payload?.sessions??[]).map(aA)}async listSettings($){let W=await this.client.command("settings.list",cA($));if(!W.ok)throw Error(W8(W,"settings.list"));return W.payload?.snapshot}async toggleSetting($){let W=await this.client.command("settings.toggle",cA($));if(!W.ok)throw Error(W8(W,"settings.toggle"));return{snapshot:W.payload?.snapshot,changedTypes:Array.isArray(W.payload?.changedTypes)?W.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,W){let Z={...W.metadata??{}};if(typeof W.prompt==="string")Z.prompt=W.prompt;if(typeof W.title==="string")Z.title=W.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Z})).ok}}async updateSessionConnection($,W){let Z=$.trim();if(!Z)return;let Q=await this.client.command("session.update_connection",{sessionId:Z,updates:W},Z);if(!Q.ok)throw Error(W8(Q,"session.update_connection"))}async updateSessionCompactionState($,W){let Z=$.trim();if(!Z)return{updated:!1};let Q=await this.client.command("session.compaction.update",{sessionId:Z,state:W},Z);if(!Q.ok)Ej(this.telemetry,{component:"core",operation:"hub.runtime_host.update_session_compaction_state",error:Error(W8(Q,"session.compaction.update")),severity:"warn",handled:!0,context:{command:"session.compaction.update",sessionId:Z,errorCode:Q.error?.code}});return{updated:Q.ok&&Q.payload?.updated===!0}}async readSessionCompactionState($){let W=$.trim();if(!W)return;let Z=await this.client.command("session.compaction.get",{sessionId:W},W);if(!Z.ok)throw Error(W8(Z,"session.compaction.get"));return K1(Z.payload?.state)}async readSessionMessages($){let W=$.trim();if(!W)return[];let Z=await this.client.command("session.messages",{sessionId:W},W);if(!Z.ok)throw Ej(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(W8(Z,"session.messages")),severity:Z.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:W,errorCode:Z.error?.code,runtimeAddress:this.runtimeAddress}}),Error(W8(Z,"session.messages"));let Q=Z.payload?.messages;return Array.isArray(Q)?Q:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,W){return this.events.subscribe($,W)}ensureSessionSubscription($){let W=$.trim();if(!W||this.sessionSubscriptions.has(W))return;let Z=this.client.subscribe((Q)=>{this.handleHubEvent(Q)},{sessionId:W});this.sessionSubscriptions.set(W,typeof Z==="function"?Z:()=>{})}disposeSessionSubscription($){let W=$.trim();if(!W)return;this.sessionSubscriptions.get(W)?.(),this.sessionSubscriptions.delete(W),this.agentDoneEmittedForCurrentRunBySession.delete(W)}resolveCapabilities($){return C0(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:lS($.payload)}})}handleHubEvent($){let W=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Z)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Z,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Z)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Z,$)});return}if(!W)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(W);let Z=s$($.payload?.snapshot),Q=$.payload?.session;if(Z)this.events.emit({type:"session_snapshot",payload:{sessionId:W,snapshot:Z}});this.events.emit({type:"status",payload:{sessionId:W,status:Q?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"session.notice":{let Z=$.payload?.noticeType,Q=$.payload?.displayRole,J=$.payload?.reason,j=$.payload?.agent&&typeof $.payload.agent==="object"?$.payload.agent:void 0,X=j?.teamRole==="lead"||j?.teamRole==="teammate"?j.teamRole:void 0;this.events.emit({type:"agent_event",payload:{sessionId:W,...X?{teamRole:X}:{},...typeof j?.teamAgentId==="string"?{teamAgentId:j.teamAgentId}:{},event:{type:"notice",...typeof j?.agentId==="string"?{agentId:j.agentId}:{},...typeof j?.conversationId==="string"?{conversationId:j.conversationId}:{},...typeof j?.parentAgentId==="string"?{parentAgentId:j.parentAgentId}:{},noticeType:Z==="recovery"||Z==="stop"?Z:"status",message:typeof $.payload?.message==="string"?$.payload.message:"",...Q==="system"||Q==="status"?{displayRole:Q}:{},...typeof J==="string"?{reason:J}:{},...$.payload?.metadata&&typeof $.payload.metadata==="object"?{metadata:$.payload.metadata}:{}}}});return}case"assistant.delta":{let Z=typeof $.payload?.text==="string"?$.payload.text:"";if(!Z)return;this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"content_start",contentType:"text",text:Z}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Z=typeof $.payload?.text==="string"?$.payload.text:"",Q=$.payload?.redacted===!0;if(!Z&&!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"content_start",contentType:"reasoning",reasoning:Z,redacted:Q}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:W,payload:$.payload});return}case"usage.updated":{let Z=dS($.payload);this.events.emit({type:"agent_event",payload:{sessionId:W,event:Z.event,teamAgentId:Z.teamAgentId,teamRole:Z.teamRole}});return}case"tool.started":{let Z=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Z&&this.pendingApprovalToolCallIds.delete(Z))return;this.emitToolCallContentStart({sessionId:W,toolCallId:Z,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Z=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Z)this.pendingApprovalToolCallIds.delete(Z);this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"content_end",contentType:"tool",toolCallId:Z,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Z=s$($.payload?.snapshot),Q=$.payload?.session;if(Z)this.events.emit({type:"session_snapshot",payload:{sessionId:W,snapshot:Z}});this.events.emit({type:"status",payload:{sessionId:W,status:Q?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:W,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Z=$.payload?.prompt;if(!Z)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:W,id:Z.id,prompt:Z.prompt,delivery:Z.delivery,attachmentCount:Z.attachmentCount,userImages:Z.userImages,userFiles:Z.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Z=s$($.payload?.snapshot),Q=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:W,payload:{...$.payload,reason:Q}}),Z?.interactive===!0&&K0(Z.status))return;this.events.emit({type:"ended",payload:{sessionId:W,reason:Q,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,W,Z){try{Ej(this.telemetry,{component:"core",operation:$,error:W,severity:"warn",handled:!0,context:{event:Z.event,sessionId:Z.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let W=$.sessionId?.trim();if(!W)return;let Z=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Z&&Z!==this.client.getClientId())return;let Q=typeof $.payload?.requestId==="string"?$.payload.requestId:"",J=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!Q)return;let j=this.sessionClientContributionHandlers.get(W)?.get(J);if(!j){await this.client.command("capability.respond",{requestId:Q,ok:!1,error:`No client contribution handler registered for capability ${J} in session ${W}.`},W).catch(()=>{});return}let X=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},Y=new AbortController;this.activeCapabilityAbortControllers.set(Q,Y);let V=(B)=>{this.client.command("capability.progress",{requestId:Q,payload:B},W).catch((H)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",H,$)})};try{let B=await j({payload:X,abortSignal:Y.signal,progress:V});if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:Q,ok:!0,payload:B},W)}catch(B){if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:Q,ok:!1,error:B instanceof Error?B.message:String(B)},W)}finally{this.activeCapabilityAbortControllers.delete(Q)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let W=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!W)return;let Z=this.activeCapabilityAbortControllers.get(W);if(!Z)return;Z.abort(mS($.payload.error))}async handleApprovalRequested($){let W=$.sessionId?.trim();if(!W)return;let Z=this.sessionCapabilities.get(W)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Z)return;let Q=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",j=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!Q||!J||!j)return;let X=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},Y=vS($.payload?.inputJson);this.pendingApprovalToolCallIds.add(J),this.emitToolCallContentStart({sessionId:W,toolCallId:J,toolName:j,toolInput:Y});let V=await Promise.resolve(Z({sessionId:W,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:W,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:J,toolName:j,input:Y,policy:X})).catch((B)=>({approved:!1,reason:B instanceof Error?B.message:`Tool approval request failed: ${String(B)}`}));await this.client.command("approval.respond",{approvalId:Q,approved:V.approved,reason:V.reason},W).catch(()=>{})}}var sA={};w(sA,{RemoteRuntimeHost:()=>R6});class R6 extends j${constructor($){super({url:a$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var tA={};w(tA,{SqliteSessionStore:()=>P1});import{existsSync as rS,mkdirSync as iS}from"node:fs";import{join as nS}from"node:path";import{asBool as j9,asOptionalString as C1,asString as X$,ensureSessionSchema as aS,loadSqliteDb as oS,nowIso as TQ,toBoolInt as X9}from"@cline/shared/db";import{resolveDbDataDir as sS}from"@cline/shared/storage";class P1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??sS()}init(){this.getRawDb()}ensureSessionsDir(){if(!rS(this.sessionsDirPath))iS(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return nS(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=oS(this.sessionDbPath());return aS($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,W=[]){return this.getRawDb().prepare($).run(...W)}queryOne($,W=[]){return this.getRawDb().prepare($).get(...W)??void 0}queryAll($,W=[]){return this.getRawDb().prepare($).all(...W)}create($){let W=TQ();this.run(`INSERT OR REPLACE INTO sessions (
|
|
508
508
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
509
509
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
510
510
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
511
511
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
512
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,
|
|
512
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,X9($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,X9($.enableTools),X9($.enableSpawn),X9($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,X9($.isSubagent),$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"",$.hookPath??"",$.messagesPath??null,W])}update($){let W=[],Z=[];if($.endedAt!==void 0)W.push("ended_at = ?"),Z.push($.endedAt);if($.exitCode!==void 0)W.push("exit_code = ?"),Z.push($.exitCode);if($.status!==void 0)W.push("status = ?"),Z.push($.status);if($.prompt!==void 0)W.push("prompt = ?"),Z.push($.prompt);if($.metadata!==void 0)W.push("metadata_json = ?"),Z.push($.metadata?JSON.stringify($.metadata):null);if($.parentSessionId!==void 0)W.push("parent_session_id = ?"),Z.push($.parentSessionId);if($.parentAgentId!==void 0)W.push("parent_agent_id = ?"),Z.push($.parentAgentId);if($.agentId!==void 0)W.push("agent_id = ?"),Z.push($.agentId);if($.conversationId!==void 0)W.push("conversation_id = ?"),Z.push($.conversationId);if(W.length===0)return;W.push("updated_at = ?"),Z.push(TQ()),Z.push($.sessionId),this.run(`UPDATE sessions SET ${W.join(", ")} WHERE session_id = ?`,Z)}updateStatus($,W,Z){this.update({sessionId:$,status:W,endedAt:K0(W)?null:TQ(),exitCode:K0(W)?null:Z??(W==="failed"?1:0)})}get($){let W=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
|
|
513
513
|
provider, model, cwd, workspace_root, team_name,
|
|
514
514
|
enable_tools, enable_spawn, enable_teams,
|
|
515
515
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
|
|
516
516
|
prompt, metadata_json, hook_path, messages_path, updated_at
|
|
517
|
-
FROM sessions WHERE session_id = ?`,[$]);if(!W)return;return{sessionId:
|
|
518
|
-
`,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}async readSessionManifestTitle($){let W=this.artifacts.sessionManifestPath($,!1),Z;try{Z=await
|
|
519
|
-
`;if(
|
|
520
|
-
`),this.updateCompactionPath($,Z)}async deleteSessionCompactionState($){await
|
|
521
|
-
`,"utf8")}}import{appendFileSync as
|
|
522
|
-
`,"utf8")}}import{formatUserInputBlock as
|
|
523
|
-
|
|
524
|
-
${$.message}`}class
|
|
517
|
+
FROM sessions WHERE session_id = ?`,[$]);if(!W)return;return{sessionId:X$(W.session_id),source:X$(W.source),pid:Number(W.pid??0),startedAt:X$(W.started_at),endedAt:W.ended_at??null,exitCode:W.exit_code??null,status:X$(W.status),interactive:j9(W.interactive),provider:X$(W.provider),model:X$(W.model),cwd:X$(W.cwd),workspaceRoot:X$(W.workspace_root),teamName:C1(W.team_name),enableTools:j9(W.enable_tools),enableSpawn:j9(W.enable_spawn),enableTeams:j9(W.enable_teams),parentSessionId:C1(W.parent_session_id),parentAgentId:C1(W.parent_agent_id),agentId:C1(W.agent_id),conversationId:C1(W.conversation_id),isSubagent:j9(W.is_subagent),prompt:C1(W.prompt),metadata:(()=>{let Z=C1(W.metadata_json);if(!Z)return;try{let Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return})(),hookPath:C1(W.hook_path),messagesPath:C1(W.messages_path),updatedAt:C1(W.updated_at)??TQ()}}list($=200){let W=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Z=[];for(let Q of W){let J=this.get(X$(Q.session_id));if(J)Z.push(J)}return Z}delete($,W=!1){let Z=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(W)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Z>0}}N6();import{existsSync as cj,mkdirSync as sb,readFileSync as LU,renameSync as tb,writeFileSync as eb}from"node:fs";import{join as fU}from"node:path";import{resolveSessionDataDir as $y}from"@cline/shared/storage";import{dirname as ab}from"node:path";import{nanoid as ob}from"nanoid";import{appendFileSync as Ub,existsSync as Db,mkdirSync as ZU,readFileSync as _b,writeFileSync as QU}from"node:fs";import{readFile as JU,rm as Lb}from"node:fs/promises";import{dirname as jU,join as fb}from"node:path";import{ensureHookLogDir as Ob}from"@cline/shared/storage";import{randomUUID as Hb}from"node:crypto";import{mkdir as Gb,open as $U,rename as Kb,rm as Fb}from"node:fs/promises";import{dirname as eA}from"node:path";async function Ab($){let W;try{W=await $U($,"r"),await W.sync()}catch{}finally{if(W!==void 0)try{await W.close()}catch{}}}async function WU($,W){await Gb(eA($),{recursive:!0});let Z=`${$}.${process.pid}.${Hb()}.tmp`,Q;try{Q=await $U(Z,"wx"),await Q.writeFile(W,"utf8"),await Q.sync(),await Q.close(),Q=void 0,await Kb(Z,$),await Ab(eA($))}catch(J){if(Q!==void 0)try{await Q.close()}catch{}try{await Fb(Z,{force:!0})}catch{}throw J}}function Tb($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="ENOENT"}class Cj{adapter;messagesArtifactUploader;logger;artifacts;constructor($,W,Z){this.adapter=$;this.messagesArtifactUploader=W;this.logger=Z;this.artifacts=new qJ(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,W,Z){DG(W,Z,m3($))}writeSessionManifest($,W){ZU(jU($),{recursive:!0}),QU($,`${JSON.stringify(m0.parse(W),null,2)}
|
|
518
|
+
`,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}async readSessionManifestTitle($){let W=this.artifacts.sessionManifestPath($,!1),Z;try{Z=await JU(W,"utf8")}catch{return}try{let Q=JSON.parse(Z);if(!Q||typeof Q!=="object"||Array.isArray(Q))return;let J=Q.metadata;if(!J||typeof J!=="object"||Array.isArray(J))return;let j=J.title;return typeof j==="string"?j:void 0}catch{return}}readManifestFile($){let W=this.artifacts.sessionManifestPath($,!1);if(!Db(W))return{path:W};try{return{path:W,manifest:m0.parse(JSON.parse(_b(W,"utf8")))}}catch{return{path:W}}}async resolveArtifactPath($,W,Z){let J=(await this.adapter.getSession($))?.[W];return typeof J==="string"&&J.trim().length>0?J:Z($)}async persistSessionMessages($,W,Z){let Q=await this.resolveArtifactPath($,"messagesPath",(X)=>this.artifacts.sessionMessagesPath(X)),J=v3({updatedAt:Y0(),context:m3($),messages:W,systemPrompt:Z}),j=`${JSON.stringify(J,null,2)}
|
|
519
|
+
`;if(ZU(jU(Q),{recursive:!0}),QU(Q,j,"utf8"),!this.messagesArtifactUploader)return;try{let X=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:Q,contents:j,row:X})}catch(X){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:X})}}resolveCompactionPath($){let{manifest:W}=this.readManifestFile($);return W?.compaction_path?.trim()||this.artifacts.sessionCompactionPath($)}updateCompactionPath($,W){let Z=this.readManifestFile($);if(!Z.manifest)return;if(Z.manifest.compaction_path===W)return;this.writeSessionManifest(Z.path,{...Z.manifest,compaction_path:W})}async readSessionCompactionState($){let W=this.resolveCompactionPath($);try{return K1(JSON.parse(await JU(W,"utf8")))}catch(Z){if(Tb(Z))return;this.logger?.debug("Ignoring invalid session compaction state",{sessionId:$,path:W,error:Z,recovery:"Canonical history is unchanged; deleting the sidecar is safe."});return}}async persistSessionCompactionState($,W){let Z=this.resolveCompactionPath($),Q=U4.parse(W);await WU(Z,`${JSON.stringify(Q,null,2)}
|
|
520
|
+
`),this.updateCompactionPath($,Z)}async deleteSessionCompactionState($){await Lb(this.resolveCompactionPath($),{force:!0}),this.updateCompactionPath($,void 0)}appendStaleSessionHookLog($,W,Z,Q,J){let X=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??fb(Ob(),"hooks.jsonl");Ub(X,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:Q,sessionId:W,pid:Z,source:J})}
|
|
521
|
+
`,"utf8")}}import{appendFileSync as zb}from"node:fs";import{join as qb}from"node:path";import{resolveRootSessionId as XU}from"@cline/shared";import{ensureHookLogDir as Mb}from"@cline/shared/storage";import{z as Pj}from"zod";var Rb="subagent",Nb=Pj.looseObject({task:Pj.string().optional(),systemPrompt:Pj.string().optional()});class zQ{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,W,Z,Q){this.adapter=$;this.manifestStore=W;this.toPersistedMessages=Z;this.heartbeatLogIntervalMs=Q}teamTaskQueueKey($,W){return`${$}::${W}`}activeTeamTaskSessionId($,W){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,W))?.at(-1)}buildSubsessionRow($,W){return{sessionId:W.sessionId,source:Rb,pid:process.ppid,startedAt:W.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:W.parentSessionId,parentAgentId:W.parentAgentId,agentId:W.agentId,conversationId:W.conversationId??null,isSubagent:!0,prompt:W.prompt,metadata:t4({prompt:W.prompt}),hookPath:"",messagesPath:W.messagesPath,updatedAt:W.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let W=XU($.sessionContext);if(!W)return;let Z=Nb.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:W,parentAgentId:$.agent_id,task:Z.success?Z.data.task:void 0,systemPrompt:Z.success?Z.data.systemPrompt:void 0})}async upsertSubagentSession($){let W=$.rootSessionId;if(!W)return;let Z=await this.adapter.getSession(W);if(!Z)return;let Q=u8(W,$.agentId),J=await this.adapter.getSession(Q),j=Y0(),X=this.manifestStore.artifacts.subagentArtifactPaths(Q,$.agentId,this.activeTeamTaskSessionId(W,$.parentAgentId)),Y=$.prompt??J?.prompt??void 0;if(!Y)Y=await this.adapter.claimSpawnRequest(W,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!J)return await this.adapter.upsertSession(this.buildSubsessionRow(Z,{sessionId:Q,parentSessionId:W,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:Y,startedAt:j,...X})),this.manifestStore.initializeMessagesFile(Q,X.messagesPath,j),Q;return await this.adapter.updateSession({sessionId:Q,setRunning:!0,parentSessionId:W,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:J.prompt??Y??null,metadata:t4({metadata:J.metadata??void 0,prompt:J.prompt??Y??null}),expectedStatusLock:J.statusLock}),Q}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let W=XU($.sessionContext);if(!W)return;if($.hookName==="session_shutdown"){let Z=u8(W,$.agent_id);return await this.adapter.getSession(Z)?Z:void 0}return await this.upsertSubagentSession({agentId:$.agent_id,parentAgentId:$.parent_agent_id,conversationId:$.taskId,rootSessionId:W})}async applySubagentStatus($,W){await this.applySubagentStatusBySessionId($,a4(W))}async applySubagentStatusBySessionId($,W){let Z=await this.adapter.getSession($);if(!Z)return;let Q=K0(W)?null:Y0(),J=K0(W)?null:W==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:W,endedAt:Q,exitCode:J,expectedStatusLock:Z.statusLock})}async applyStatusToRunningChildSessions($,W){if(!$)return;let Z=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let Q of Z)await this.applySubagentStatusBySessionId(Q.sessionId,W)}async onTeamTaskStart($,W,Z){let Q=await this.adapter.getSession($);if(!Q)return;let J=i4($,W),j=Y0(),{messagesPath:X}=this.manifestStore.artifacts.subagentArtifactPaths(J,W);await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:J,parentSessionId:$,parentAgentId:"lead",agentId:W,prompt:Z||`Team task for ${W}`,startedAt:j,messagesPath:X})),this.manifestStore.initializeMessagesFile(J,X,j);let Y=this.teamTaskQueueKey($,W),V=this.teamTaskSessionsByAgent.get(Y)??[];V.push(J),this.teamTaskSessionsByAgent.set(Y,V)}async onTeamTaskEnd($,W,Z,Q,J,j){let X=this.teamTaskQueueKey($,W),Y=this.teamTaskSessionsByAgent.get(X);if(!Y||Y.length===0)return;let V=Y.shift();if(Y.length===0)this.teamTaskSessionsByAgent.delete(X);if(!V)return;let B=J?.messages??j,H=this.toPersistedMessages(B,J,j);if(H)await this.manifestStore.persistSessionMessages(V,H);await this.applySubagentStatusBySessionId(V,Z),this.teamTaskLastHeartbeatBySession.delete(V),this.teamTaskLastProgressLineBySession.delete(V)}async onTeamTaskProgress($,W,Z,Q){let J=this.teamTaskQueueKey($,W),j=this.teamTaskSessionsByAgent.get(J)?.[0];if(!j)return;let X=Z.trim();if(!X)return;let Y=Q?.kind??"progress";if(Y==="heartbeat"){let B=Date.now(),H=this.teamTaskLastHeartbeatBySession.get(j)??0;if(B-H<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(j,B)}let V=Y==="heartbeat"?"[progress] heartbeat":Y==="text"?`[progress] text: ${X}`:`[progress] ${X}`;if(this.teamTaskLastProgressLineBySession.get(j)===V)return;this.teamTaskLastProgressLineBySession.set(j,V)}async handleSubAgentStart($,W){let Z=await this.upsertSubagentSession({agentId:W.subAgentId,parentAgentId:W.parentAgentId,conversationId:W.conversationId,prompt:W.input.task,rootSessionId:$});if(!Z)return;await this.applySubagentStatusBySessionId(Z,"running")}async handleSubAgentEnd($,W){let Z=await this.upsertSubagentSession({agentId:W.subAgentId,parentAgentId:W.parentAgentId,conversationId:W.conversationId,prompt:W.input.task,rootSessionId:$});if(!Z)return;if(W.error){await this.applySubagentStatusBySessionId(Z,"failed");return}let Q=this.toPersistedMessages(W.agentResult?.messages,W.agentResult);if(Q)await this.manifestStore.persistSessionMessages(Z,Q);let J=W.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Z,J==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Z=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??qb(Mb(),"hooks.jsonl");zb(Z,`${JSON.stringify({ts:Y0(),...$})}
|
|
522
|
+
`,"utf8")}}import{formatUserInputBlock as nb}from"@cline/shared";var _U={};w(_U,{toTeamProgressLifecycleEvent:()=>P6,sanitizeTeamName:()=>XG,reviveTeamStateDates:()=>oW,parseConfiguredAgentConfig:()=>Y9,loadConfiguredAgentConfigs:()=>E6,createWorkerReviewerTeam:()=>DU,createSpawnAgentTool:()=>y$,createDelegatedAgentConfigProvider:()=>S$,createDelegatedAgent:()=>b$,createConfiguredAgentTools:()=>w6,createAgentTeamsTools:()=>N2,createAgentTeam:()=>yj,buildTeamProgressSummary:()=>C6,buildDelegatedAgentConfig:()=>M2,buildConfiguredAgentToolName:()=>V9,buildConfiguredAgentToolDescriptors:()=>B9,bootstrapAgentTeams:()=>c8,AgentTeamsRuntime:()=>Z8,AgentTeam:()=>b6});import{existsSync as Eb,readdirSync as wb,readFileSync as Cb}from"node:fs";import{basename as YU,extname as Pb,join as Sb}from"node:path";import{stripUtf8Bom as bb}from"@cline/shared";import{resolveAgentConfigSearchPaths as yb}from"@cline/shared/storage";import BU from"yaml";import{z as I0}from"zod";var HU=I0.object({name:I0.string().trim().min(1),description:I0.string().trim().min(1),tools:I0.union([I0.string(),I0.array(I0.string())]).optional(),skills:I0.union([I0.string(),I0.array(I0.string())]).optional(),providerId:I0.string().trim().min(1).optional(),modelId:I0.string().trim().min(1).optional(),maxIterations:I0.number().int().positive().optional()});function hb($){$=bb($);let W=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!W)throw Error("Missing YAML frontmatter block in agent config file.");let Z=W[0].length,Q=/^---[^\S\r\n]*(?:\r?\n|$)/gm;Q.lastIndex=Z;let J,j=Array.from($.matchAll(Q)).filter((X)=>X.index>=Z);for(let X of j){let Y=X.index,V=$.slice(Z,Y);try{let B=BU.parse(V);if(!B||typeof B!=="object"||Array.isArray(B))continue;HU.parse(B);let H=$.slice(Y+X[0].length);J={frontmatter:V,body:H}}catch{}}if(J)return J;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function VU($){if($===void 0)return;let W=Array.isArray($)?$:$.split(",");return Array.from(new Set(W.map((Z)=>Z.trim()).filter((Z)=>Z.length>0)))}function kb($){return $.trim().toLowerCase()}function Ib($){let W=Pb($).toLowerCase();return W===".yml"||W===".yaml"}function Y9($,W={}){let{frontmatter:Z,body:Q}=hb($),J=BU.parse(Z);if(!J||typeof J!=="object"||Array.isArray(J))throw Error("Agent config frontmatter must be a YAML mapping.");let j=HU.parse(J),X=Q.trim();if(!X)throw Error("Missing system prompt body in agent config file.");return{name:j.name,description:j.description,tools:VU(j.tools),skills:VU(j.skills),providerId:j.providerId,modelId:j.modelId,maxIterations:j.maxIterations,systemPrompt:X,path:W.path}}function E6($){let W=$.searchPaths??yb($.workspaceRoot),Z=new Map,Q=[];for(let j of W.filter(Boolean)){if(!Eb(j))continue;let X;try{X=wb(j,{withFileTypes:!0})}catch(Y){Q.push({path:j,error:Y instanceof Error?Y:Error(String(Y))});continue}for(let Y of X){if(!Y.isFile()||!Ib(Y.name))continue;let V=Sb(j,Y.name);try{let B=Cb(V,"utf8"),H=Y9(B,{path:V}),G=kb(H.name);if(!Z.has(G))Z.set(G,H)}catch(B){Q.push({path:V,error:B instanceof Error?B:Error(String(B))})}}}return{configs:Array.from(Z.values()).sort((j,X)=>(j.path?YU(j.path):j.name).localeCompare(X.path?YU(X.path):X.name)),errors:Q}}import{createTool as xb,zodToJsonSchema as gb}from"@cline/shared";import{z as GU}from"zod";var Sj="subagent_",qQ=64,mb=GU.object({prompt:GU.string().trim().min(1).describe("Task for the subagent to perform")});function vb($){let W="",Z=!0;for(let Q of $.trim().toLowerCase()){let J=Q.charCodeAt(0);if(!(J>=97&&J<=122||J>=48&&J<=57||Q==="_")||Q==="_"){if(!Z)W+="_",Z=!0;continue}W+=Q,Z=!1}return Z?W.slice(0,-1):W}function cb($){let W=2166136261;for(let Z=0;Z<$.length;Z++)W^=$.charCodeAt(Z),W=Math.imul(W,16777619);return(W>>>0).toString(36)}function V9($){let W=vb($)||"agent",Z=cb($).slice(0,6),Q=`${Sj}${W}`;if(Q.length<=qQ)return Q;let J=qQ-Sj.length-Z.length-1,j=W.slice(0,Math.max(1,J));return`${Sj}${j}_${Z}`.slice(0,qQ)}function B9($){let W=new Set,Z=[];for(let Q of[...$].sort((J,j)=>J.name.localeCompare(j.name))){let J=V9(Q.name),j=J,X=2;while(W.has(j)){let Y=`_${X++}`,V=Math.max(1,qQ-Y.length);j=`${J.slice(0,V)}${Y}`}W.add(j),Z.push({toolName:j,config:Q})}return Z}function ub($,W){return{...$,providerId:W.providerId??$.providerId,modelId:W.modelId??$.modelId,maxIterations:W.maxIterations??$.maxIterations}}function w6($){return B9($.agents).map(({toolName:W,config:Z})=>{return xb({name:W,description:`Use the "${Z.name}" subagent: ${Z.description}`,inputSchema:gb(mb),execute:async(J,j)=>{let X=$.configProvider.getRuntimeConfig(),Y=S$(ub(X,Z)),V=$.createSubAgentTools?await $.createSubAgentTools(Z,J,j):[],B=b$({kind:"subagent",prompt:Z.systemPrompt,configProvider:Y,tools:V,maxIterations:Z.maxIterations,parentAgentId:j.agentId,abortSignal:j.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),H=B.getAgentId(),G=B.getConversationId(),K=j.agentId,F={systemPrompt:Z.systemPrompt,task:J.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:H,conversationId:G,parentAgentId:K,input:F})}catch{}try{let A=await B.run(J.prompt),D={text:A.text,iterations:A.iterations,finishReason:A.finishReason,usage:{inputTokens:A.usage.inputTokens,outputTokens:A.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:G,parentAgentId:K,input:F,result:D,agentResult:A})}catch{}return D}catch(A){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:G,parentAgentId:K,input:F,error:A instanceof Error?A:Error(String(A))})}catch{}throw A}},timeoutMs:300000,retryable:!1})})}function S1(){return new Date().toISOString()}function KU($,W){if(W<=0)return 0;return Math.round($/W*100)}function db($,W){let Z=new Set;for(let J of W)if(J.status==="reviewed")Z.add(`${J.outcomeId}:${J.section}`);let Q=new Set;for(let J of $){if(J.status==="finalized")continue;for(let j of J.requiredSections)if(!Z.has(`${J.id}:${j}`))Q.add(`${J.id}:${j}`)}return[...Q].sort((J,j)=>J.localeCompare(j))}function C6($,W){let Z={idle:0,running:0,stopped:0},Q={pending:0,in_progress:0,blocked:0,completed:0},J={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},j={draft:0,in_review:0,finalized:0},X={draft:0,reviewed:0,rejected:0},Y=0,V=0;for(let U of W.members)if(Z[U.status]+=1,U.role==="lead")Y+=1;else V+=1;let B=[],H=[],G=W.tasks.filter((U)=>U.status==="completed").length,K=new Map(W.tasks.map((U)=>[U.id,U]));for(let U of W.tasks){if(Q[U.status]+=1,U.status==="blocked"){B.push(U.id);continue}if(U.status!=="pending")continue;if(U.dependsOn.every((_)=>{return K.get(_)?.status==="completed"}))H.push(U.id)}let F=[],A,D=0;for(let U of W.runs){if(J[U.status]+=1,U.status==="queued"||U.status==="running")F.push(U.id);let L=U.startedAt.getTime();if(L>=D)D=L,A=U.id}for(let U of W.outcomes)j[U.status]+=1;for(let U of W.outcomeFragments)X[U.status]+=1;return{teamName:$,updatedAt:S1(),members:{total:W.members.length,byStatus:Z,leadCount:Y,teammateCount:V},tasks:{total:W.tasks.length,byStatus:Q,blockedTaskIds:B,readyTaskIds:H,completionPct:KU(G,W.tasks.length)},runs:{total:W.runs.length,byStatus:J,activeRunIds:F,latestRunId:A},outcomes:{total:W.outcomes.length,byStatus:j,finalizedPct:KU(j.finalized,W.outcomes.length),missingRequiredSections:db(W.outcomes,W.outcomeFragments)},fragments:{total:W.outcomeFragments.length,byStatus:X}}}function P6($){let{event:W}=$;switch(W.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:S1(),taskId:W.task.id,agentId:W.task.assignee??W.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:W.type,ts:S1(),runId:W.run.id,taskId:W.run.taskId,agentId:W.run.agentId,message:W.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:S1(),runId:W.run.id,taskId:W.run.taskId,agentId:W.run.agentId,message:W.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:S1(),outcomeId:W.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:S1(),outcomeId:W.fragment.outcomeId,fragmentId:W.fragment.id,agentId:W.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:S1(),taskId:W.message.taskId,agentId:W.message.fromAgentId,message:W.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:S1(),taskId:W.entry.taskId,agentId:W.entry.agentId,message:W.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:S1(),agentId:W.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:S1()}}import{sanitizeFileName as lb,TeamMessageType as m}from"@cline/shared";import{nanoid as pb}from"nanoid";import{TeamMessageType as to}from"@cline/shared";function bj($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function FU($,W){return $?.status==="stopped"&&bj(W)}var rb=600000,AU="recovered_queued";function ib($){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.
|
|
523
|
+
|
|
524
|
+
${$.message}`}class b6{agents=new Map;configs=new Map;onTeamEvent;constructor($,W){if(this.onTeamEvent=W,$)for(let[Z,Q]of Object.entries($))this.addAgent(Z,Q)}addAgent($,W){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let Z={...W,onEvent:(J)=>{W.onEvent?.(J),this.emitEvent({type:m.AgentEvent,agentId:$,event:J})}},Q=new P$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);this.agents.set($,Q),this.configs.set($,W)}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($,W){let Z=this.agents.get($);if(!Z)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:m.TaskStart,agentId:$,message:W});try{let Q=await Z.run(W);return this.emitEvent({type:m.TaskEnd,agentId:$,result:Q}),Q}catch(Q){let J=Q instanceof Error?Q:Error(String(Q));throw this.emitEvent({type:m.TaskEnd,agentId:$,error:J,messages:Z.getMessages()}),Q}}async continueTo($,W){let Z=this.agents.get($);if(!Z)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:m.TaskStart,agentId:$,message:W});try{let Q=await Z.continue(W);return this.emitEvent({type:m.TaskEnd,agentId:$,result:Q}),Q}catch(Q){let J=Q instanceof Error?Q:Error(String(Q));throw this.emitEvent({type:m.TaskEnd,agentId:$,error:J,messages:Z.getMessages()}),Q}}async runParallel($){let W=$.map(async(Z)=>{let Q=this.agents.get(Z.agentId);if(!Q)return{agentId:Z.agentId,result:void 0,error:Error(`Agent "${Z.agentId}" not found in team`),metadata:Z.metadata};this.emitEvent({type:m.TaskStart,agentId:Z.agentId,message:Z.message});try{let J=await Q.run(Z.message);return this.emitEvent({type:m.TaskEnd,agentId:Z.agentId,result:J}),{agentId:Z.agentId,result:J,metadata:Z.metadata}}catch(J){let j=J instanceof Error?J:Error(String(J));return this.emitEvent({type:m.TaskEnd,agentId:Z.agentId,error:j,messages:Q.getMessages()}),{agentId:Z.agentId,result:void 0,error:j,metadata:Z.metadata}}});return Promise.all(W)}async runSequential($){let W=[];for(let Z of $){let Q=this.agents.get(Z.agentId);if(!Q){W.push({agentId:Z.agentId,result:void 0,error:Error(`Agent "${Z.agentId}" not found in team`),metadata:Z.metadata});continue}this.emitEvent({type:m.TaskStart,agentId:Z.agentId,message:Z.message});try{let J=await Q.run(Z.message);this.emitEvent({type:m.TaskEnd,agentId:Z.agentId,result:J}),W.push({agentId:Z.agentId,result:J,metadata:Z.metadata})}catch(J){let j=J instanceof Error?J:Error(String(J));this.emitEvent({type:m.TaskEnd,agentId:Z.agentId,error:j,messages:Q.getMessages()}),W.push({agentId:Z.agentId,result:void 0,error:j,metadata:Z.metadata})}}return W}async runPipeline($,W,Z){let Q=[],J=W;for(let j of $){let X=this.agents.get(j);if(!X){Q.push({agentId:j,result:void 0,error:Error(`Agent "${j}" not found in team`)});break}this.emitEvent({type:m.TaskStart,agentId:j,message:J});try{let Y=await X.run(J);this.emitEvent({type:m.TaskEnd,agentId:j,result:Y}),Q.push({agentId:j,result:Y});let V=$.indexOf(j)+1;if(V<$.length){let B=$[V];J=Z?Z(Y,B):`Previous agent output:
|
|
525
525
|
${Y.text}
|
|
526
526
|
|
|
527
|
-
Please continue from here.`}}catch(Y){let V=Y instanceof Error?Y:Error(String(Y));this.emitEvent({type:m.TaskEnd,agentId:j,error:V,messages:X.getMessages()}),Q.push({agentId:j,result:void 0,error:V});break}}return Q}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function
|
|
527
|
+
Please continue from here.`}}catch(Y){let V=Y instanceof Error?Y:Error(String(Y));this.emitEvent({type:m.TaskEnd,agentId:j,error:V,messages:X.getMessages()}),Q.push({agentId:j,result:void 0,error:V});break}}return Q}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function yj($,W){return new b6($,W)}function DU($){let W=yj({worker:$.worker,reviewer:$.reviewer}),Z=W;return Z.doAndReview=async(Q)=>{let J=await W.routeTo("worker",Q),j=await W.routeTo("reviewer",`Please review this work:
|
|
528
528
|
|
|
529
|
-
${J.text}`);return{workerResult:J,reviewResult:j}},Z}class
|
|
529
|
+
${J.text}`);return{workerResult:J,reviewResult:j}},Z}class Z8{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_${lb(pb(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 W=$.leadAgentId??"lead";this.members.set(W,{agentId:W,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((W)=>{let Z=this.getUnresolvedDependencies(W);return{...W,blockedBy:Z,isReady:W.status==="pending"&&!W.assignee&&Z.length===0}}).filter((W)=>{if($?.status&&W.status!==$.status)return!1;if($?.assignee&&W.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,W){let Z=W?.unreadOnly??!0,Q=W?.markRead??!0,J=W?.limit,j=this.mailbox.filter((Y)=>Y.toAgentId===$&&(!Z||!Y.readAt)),X=typeof J==="number"&&J>0?j.slice(Math.max(0,j.length-J)):j;if(Q){let Y=new Date;for(let V of X)if(!V.readAt)V.readAt=Y}return X.map((Y)=>({...Y}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let Z of this.tasks.values())$[Z.status]++;let W={draft:0,in_review:0,finalized:0};for(let Z of this.outcomes.values())W[Z.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((Z)=>({agentId:Z.agentId,role:Z.role,description:Z.description,status:Z.status})),taskCounts:$,unreadMessages:this.mailbox.filter((Z)=>!Z.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((Z)=>Z.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((Z)=>Z.status==="queued").length,outcomeCounts:W}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map(($)=>({agentId:$.agentId,role:$.role,description:$.description,status:$.status})),tasks:Array.from(this.tasks.values()).map(($)=>({...$})),mailbox:this.mailbox.map(($)=>({...$})),missionLog:this.missionLog.map(($)=>({...$})),runs:Array.from(this.runs.values()).map(($)=>({...$})),outcomes:Array.from(this.outcomes.values()).map(($)=>({...$})),outcomeFragments:Array.from(this.outcomeFragments.values()).map(($)=>({...$}))}}hydrateState($){this.clearQueuedRunDispatchTimer(),this.tasks.clear();for(let Z of $.tasks)this.tasks.set(Z.id,{...Z});this.mailbox.length=0,this.mailbox.push(...$.mailbox.map((Z)=>({...Z}))),this.missionLog.length=0,this.missionLog.push(...$.missionLog.map((Z)=>({...Z}))),this.runs.clear();for(let Z of $.runs??[])this.runs.set(Z.id,{...Z});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((Z)=>Z.status==="queued").map((Z)=>Z.id)),this.outcomes.clear();for(let Z of $.outcomes??[])this.outcomes.set(Z.id,{...Z});this.outcomeFragments.clear();for(let Z of $.outcomeFragments??[])this.outcomeFragments.set(Z.id,{...Z});let W=Array.from(this.members.values()).filter((Z)=>Z.role==="lead");this.members.clear();for(let Z of W)this.members.set(Z.agentId,{...Z,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let Z of $.members){if(Z.role!=="teammate")continue;this.members.set(Z.agentId,{agentId:Z.agentId,role:"teammate",description:Z.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,S6($.tasks.map((Z)=>Z.id),"task_")),this.messageCounter=Math.max(this.messageCounter,S6($.mailbox.map((Z)=>Z.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,S6($.missionLog.map((Z)=>Z.id),"log_")),this.runCounter=Math.max(this.runCounter,S6(($.runs??[]).map((Z)=>Z.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,S6(($.outcomes??[]).map((Z)=>Z.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,S6(($.outcomeFragments??[]).map((Z)=>Z.id),"frag_"))}isTeammateActive($){let W=this.members.get($);return!!W&&W.role==="teammate"&&!!W.agent}spawnTeammate({agentId:$,config:W}){let Z=this.members.get($);if(Z&&Z.role!=="teammate")throw Error(`Team member "${$}" already exists and is not a teammate`);if(Z&&Z.runningCount>0)throw Error(`Teammate "${$}" is currently running and cannot be respawned`);let Q={...W,apiTimeoutMs:rb,consumePendingUserMessage:()=>{let X=this.members.get($);if(!X||!X.pendingSteerMessage)return;let Y=X.pendingSteerMessage;return X.pendingSteerMessage=void 0,Y},onEvent:(X)=>{W.onEvent?.(X),this.emitEvent({type:m.AgentEvent,agentId:$,event:X}),this.trackMeaningfulEvent($,X)}},J=new P$(Q);if(Q.onEvent)J.subscribeEvents(Q.onEvent);let j={agentId:$,role:"teammate",description:W.role,status:"idle",agent:J,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,j),this.emitEvent({type:m.TeammateSpawned,agentId:$,role:W.role,teammate:{rolePrompt:W.systemPrompt,modelId:W.modelId,maxIterations:W.maxIterations,runtimeAgentId:J.getAgentId(),conversationId:J.getConversationId(),parentAgentId:null}}),{agentId:j.agentId,role:j.role,description:j.description,status:j.status}}shutdownTeammate($,W){let Z=this.members.get($);if(!Z||Z.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{Z.agent?.abort()}catch(Q){if(!bj(Q))throw Q}Z.status="stopped",this.emitEvent({type:m.TeammateShutdown,agentId:$,reason:W})}updateTeammateConnections($){for(let W of this.members.values()){if(W.role!=="teammate"||!W.agent)continue;W.agent.updateConnection($)}}createTask($){let W=`task_${String(++this.taskCounter).padStart(4,"0")}`,Z=new Date,Q={id:W,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:Z,updatedAt:Z,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(W,Q),this.emitEvent({type:m.TeamTaskUpdated,task:{...Q}}),{...Q}}claimTask($,W){let Z=this.requireTask($);return this.assertDependenciesResolved(Z),Z.status="in_progress",Z.assignee=W,Z.updatedAt=new Date,this.emitEvent({type:m.TeamTaskUpdated,task:{...Z}}),this.appendMissionLog({agentId:W,taskId:$,kind:"progress",summary:`Claimed task "${Z.title}"`}),{...Z}}blockTask($,W,Z){let Q=this.requireTask($);return Q.status="blocked",Q.updatedAt=new Date,Q.summary=Z,this.emitEvent({type:m.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:W,taskId:$,kind:"blocked",summary:Z}),{...Q}}completeTask($,W,Z){let Q=this.requireTask($);if(Q.status="completed",Q.updatedAt=new Date,Q.summary=Z,!Q.assignee)Q.assignee=W;return this.emitEvent({type:m.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:W,taskId:$,kind:"done",summary:Z}),{...Q}}async routeToTeammate($,W,Z){let Q=this.members.get($);if(!Q||Q.role!=="teammate"||!Q.agent)throw Error(`Teammate "${$}" was not found`);if(!Q.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");Q.runningCount++,Q.status="running",this.emitEvent({type:m.TaskStart,agentId:$,message:W});try{let J=this.listMailbox($,{unreadOnly:!0,markRead:!0}),j=J.length>0?`${this.buildMailboxNotification(J)}
|
|
530
530
|
|
|
531
|
-
${W}`:W,X=Z?.continueConversation?await Q.agent.continue(j):await Q.agent.run(j);return this.emitEvent({type:m.TaskEnd,agentId:$,result:X}),this.recordProgressStep($,`Completed a delegated run (${X.iterations} iterations)`,Z?.taskId,!0),X}catch(J){let j=J instanceof Error?J:Error(String(J));if(this.emitEvent({type:m.TaskEnd,agentId:$,error:j,messages:Q.agent.getMessages()}),!GU(Q,j))this.appendMissionLog({agentId:$,taskId:Z?.taskId,kind:"error",summary:j.message});throw j}finally{if(Q.runningCount--,Q.runningCount<=0&&this.members.get($)?.status!=="stopped")Q.status="idle"}}startTeammateRun($,W,Z){let Q=`run_${String(++this.runCounter).padStart(5,"0")}`,J={id:Q,agentId:$,taskId:Z?.taskId,status:"queued",message:W,priority:Z?.priority??0,retryCount:0,maxRetries:Math.max(0,Z?.maxRetries??0),continueConversation:Z?.continueConversation,startedAt:new Date(0),leaseOwner:Z?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(Q,J),this.runQueue.push(Q),this.emitEvent({type:m.RunQueued,run:{...J}}),this.dispatchQueuedRuns(),{...J}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let W=this.selectNextDispatchableQueuedRun();$=W.nextDelayedAttemptAt;let Z=W.index;if(Z<0){this.scheduleQueuedRunDispatch($);return}let[Q]=this.runQueue.splice(Z,1),J=Q?this.runs.get(Q):void 0;if(!J||J.status!=="queued")continue;this.executeQueuedRun(J)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,W=Number.NEGATIVE_INFINITY,Z,Q=Date.now();for(let J=0;J<this.runQueue.length;J++){let j=this.runs.get(this.runQueue[J]);if(!j||j.status!=="queued")continue;if(j.nextAttemptAt&&j.nextAttemptAt.getTime()>Q){if(!Z||j.nextAttemptAt<Z)Z=j.nextAttemptAt;continue}if(j.priority>W)W=j.priority,$=J}return{index:$,nextDelayedAttemptAt:Z}}scheduleQueuedRunDispatch($){if(!$)return;let W=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},W)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let W of this.runs.values())if(W.status==="running")$++;return $}async executeQueuedRun($){let W=$.currentActivity===KU;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:m.RunStarted,run:{...$}});let Z=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let Q=W?kb($):$.message,J=await this.routeToTeammate($.agentId,Q,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=J,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:m.RunCompleted,run:{...$}})}catch(Q){let J=Q instanceof Error?Q.message:String(Q??"Unknown error");$.error=J,$.endedAt=new Date;let j=this.members.get($.agentId);if(GU(j,Q))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:m.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:m.RunFailed,run:{...$}})}finally{clearInterval(Z),this.dispatchQueuedRuns()}}listRuns($){let W=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Z)=>{if(!W&&!["running","queued"].includes(Z.status))return!1;if($?.status&&Z.status!==$.status)return!1;if($?.agentId&&Z.agentId!==$.agentId)return!1;return!0}).map((Z)=>({...Z}))}getRun($){let W=this.runs.get($);return W?{...W}:void 0}async awaitRun($,W=250){let Z=this.runs.get($);if(!Z)throw Error(`Run "${$}" was not found`);while(Z.status==="queued"||Z.status==="running")await FU(W);return{...Z}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((W)=>["queued","running"].includes(W.status)))await FU($);return this.listRuns()}cancelRun($,W){let Z=this.runs.get($);if(!Z)throw Error(`Run "${$}" was not found`);if(Z.status==="completed"||Z.status==="failed")return{...Z};Z.status="cancelled",Z.error=W,Z.endedAt=new Date,Z.currentActivity="cancelled";let Q=this.runQueue.indexOf($);if(Q>=0)this.runQueue.splice(Q,1);return this.emitEvent({type:m.RunCancelled,run:{...Z},reason:W}),{...Z}}recoverActiveRuns($="runtime_recovered"){let W=[];for(let Z of this.runs.values()){if(!["queued","running"].includes(Z.status))continue;let Q=this.members.get(Z.agentId);if(!Q||Q.role!=="teammate"||!Q.agent){Z.status="interrupted",Z.error="teammate_unavailable_after_recovery",Z.endedAt=new Date,Z.currentActivity="interrupted",this.emitEvent({type:m.RunInterrupted,run:{...Z},reason:Z.error});continue}let J=new Date;if(Z.status="queued",Z.error=void 0,Z.endedAt=void 0,Z.heartbeatAt=J,Z.lastProgressAt=J,Z.lastProgressMessage=$,Z.currentActivity=KU,!this.runQueue.includes(Z.id))this.runQueue.push(Z.id);W.push({...Z}),this.emitEvent({type:m.RunQueued,run:{...Z}})}return this.dispatchQueuedRuns(),W}markStaleRunsInterrupted($="runtime_recovered"){let W=[];for(let Z of this.runs.values()){if(!["queued","running"].includes(Z.status))continue;Z.status="interrupted",Z.error=$,Z.endedAt=new Date,Z.currentActivity="interrupted",W.push({...Z}),this.emitEvent({type:m.RunInterrupted,run:{...Z},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),W}sendMessage($,W,Z,Q,J){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let j=this.members.get(W);if(!j)throw Error(`Unknown recipient "${W}"`);let X={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:W,subject:Z,body:Q,taskId:J,sentAt:new Date};if(this.mailbox.push(X),this.emitEvent({type:m.TeamMessage,message:{...X}}),j.role==="teammate"&&j.runningCount>0&&j.agent)j.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Z}". Use the team_read_mailbox tool to read it at your convenience.`;return{...X}}broadcast($,W,Z,Q){let J=[];for(let j of this.members.values()){if(j.agentId===$)continue;if(j.role==="lead")continue;J.push(this.sendMessage($,j.agentId,W,Z,Q?.taskId))}return J}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let W={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(W);let Z=this.members.get($.agentId);if(Z)Z.lastMissionAt=Date.now(),Z.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:m.TeamMissionLog,entry:{...W}}),{...W}}createOutcome($){let W={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(W.id,W),this.emitEvent({type:m.OutcomeCreated,outcome:{...W}}),{...W}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let W=this.outcomes.get($.outcomeId);if(!W)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!W.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Z={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(Z.id,Z),W.status==="draft")W.status="in_review";return this.emitEvent({type:m.OutcomeFragmentAttached,fragment:{...Z}}),{...Z}}reviewOutcomeFragment($){let W=this.outcomeFragments.get($.fragmentId);if(!W)throw Error(`Fragment "${$.fragmentId}" was not found`);return W.status=$.approved?"reviewed":"rejected",W.reviewedBy=$.reviewedBy,W.reviewedAt=new Date,this.emitEvent({type:m.OutcomeFragmentReviewed,fragment:{...W}}),{...W}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((W)=>W.outcomeId===$).map((W)=>({...W}))}finalizeOutcome($){let W=this.outcomes.get($);if(!W)throw Error(`Outcome "${$}" was not found`);let Z=this.listOutcomeFragments($);for(let Q of W.requiredSections)if(!Z.some((j)=>j.section===Q&&j.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${Q}" is missing a reviewed fragment.`);return W.status="finalized",W.finalizedAt=new Date,this.emitEvent({type:m.OutcomeFinalized,outcome:{...W}}),{...W}}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(W){if(!Pj(W))throw W}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[$,W]of this.members.entries())if(W.role==="teammate")this.members.delete($)}requireTask($){let W=this.tasks.get($);if(!W)throw Error(`Task "${$}" was not found`);return W}assertDependenciesResolved($){let W=this.getUnresolvedDependencies($);if(W.length>0)throw Error(`Task "${$.id}" is blocked by "${W[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((W)=>{let Z=this.tasks.get(W);return!Z||Z.status!=="completed"})}trackMeaningfulEvent($,W){if(this.recordRunActivityFromAgentEvent($,W),W.type==="iteration_end"&&W.hadToolCalls){this.recordProgressStep($,`Completed iteration ${W.iteration} with ${W.toolCallCount} tool call(s)`);return}if(W.type==="content_end"&&W.contentType==="tool"&&!W.error){this.recordProgressStep($,`Finished tool "${W.toolName??"unknown"}"`);return}if(W.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${W.iterations} iterations)`});return}if(W.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:W.error.message})}recordRunActivityFromAgentEvent($,W){let Z;switch(W.type){case"iteration_start":Z=`iteration_${W.iteration}_started`;break;case"content_start":if(W.contentType==="tool")Z=`running_tool_${W.toolName??"unknown"}`;break;case"content_end":if(W.contentType==="tool")Z=W.error?this.formatProgressErrorActivity(`tool_${W.toolName??"unknown"}_error`,W.error):`finished_tool_${W.toolName??"unknown"}`;break;case"done":Z="finalizing_response";break;case"error":Z=this.formatProgressErrorActivity("run_error",W.error.message);break;default:break}if(!Z)return;for(let Q of this.runs.values()){if(Q.agentId!==$||Q.status!=="running")continue;this.recordRunProgress(Q,Z)}}recordRunProgress($,W){let Z=new Date;$.heartbeatAt=Z,$.lastProgressAt=Z,$.lastProgressMessage=W,$.currentActivity=W,this.emitEvent({type:m.RunProgress,run:{...$},message:W})}formatProgressErrorActivity($,W){let Z=W.replace(/\s+/g," ").trim();if(Z.length===0)return $;let Q=Z.length>240?`${Z.slice(0,237).trimEnd()}...`:Z;return`${$}: ${Q}`}recordProgressStep($,W,Z,Q=!1){this.missionStepCounter++;let J=this.members.get($);if(!J)return;let j=this.missionStepCounter-J.lastMissionStep,X=Date.now()-J.lastMissionAt;if(!Q&&j<this.missionLogIntervalSteps&&X<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Z,kind:"progress",summary:W})}buildMailboxNotification($){if($.length===0)return"";let W=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Z of $)W.push(`--- Message from ${Z.fromAgentId} | subject: ${Z.subject} ---`),W.push(Z.body);return W.push("---"),W.join(`
|
|
532
|
-
`)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function
|
|
531
|
+
${W}`:W,X=Z?.continueConversation?await Q.agent.continue(j):await Q.agent.run(j);return this.emitEvent({type:m.TaskEnd,agentId:$,result:X}),this.recordProgressStep($,`Completed a delegated run (${X.iterations} iterations)`,Z?.taskId,!0),X}catch(J){let j=J instanceof Error?J:Error(String(J));if(this.emitEvent({type:m.TaskEnd,agentId:$,error:j,messages:Q.agent.getMessages()}),!FU(Q,j))this.appendMissionLog({agentId:$,taskId:Z?.taskId,kind:"error",summary:j.message});throw j}finally{if(Q.runningCount--,Q.runningCount<=0&&this.members.get($)?.status!=="stopped")Q.status="idle"}}startTeammateRun($,W,Z){let Q=`run_${String(++this.runCounter).padStart(5,"0")}`,J={id:Q,agentId:$,taskId:Z?.taskId,status:"queued",message:W,priority:Z?.priority??0,retryCount:0,maxRetries:Math.max(0,Z?.maxRetries??0),continueConversation:Z?.continueConversation,startedAt:new Date(0),leaseOwner:Z?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(Q,J),this.runQueue.push(Q),this.emitEvent({type:m.RunQueued,run:{...J}}),this.dispatchQueuedRuns(),{...J}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let W=this.selectNextDispatchableQueuedRun();$=W.nextDelayedAttemptAt;let Z=W.index;if(Z<0){this.scheduleQueuedRunDispatch($);return}let[Q]=this.runQueue.splice(Z,1),J=Q?this.runs.get(Q):void 0;if(!J||J.status!=="queued")continue;this.executeQueuedRun(J)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,W=Number.NEGATIVE_INFINITY,Z,Q=Date.now();for(let J=0;J<this.runQueue.length;J++){let j=this.runs.get(this.runQueue[J]);if(!j||j.status!=="queued")continue;if(j.nextAttemptAt&&j.nextAttemptAt.getTime()>Q){if(!Z||j.nextAttemptAt<Z)Z=j.nextAttemptAt;continue}if(j.priority>W)W=j.priority,$=J}return{index:$,nextDelayedAttemptAt:Z}}scheduleQueuedRunDispatch($){if(!$)return;let W=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},W)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let W of this.runs.values())if(W.status==="running")$++;return $}async executeQueuedRun($){let W=$.currentActivity===AU;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:m.RunStarted,run:{...$}});let Z=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let Q=W?ib($):$.message,J=await this.routeToTeammate($.agentId,Q,{taskId:$.taskId,continueConversation:$.continueConversation});if(J.finishReason==="error")throw Error(J.text||"Teammate run failed");$.status="completed",$.result=J,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:m.RunCompleted,run:{...$}})}catch(Q){let J=Q instanceof Error?Q.message:String(Q??"Unknown error");$.error=J,$.endedAt=new Date;let j=this.members.get($.agentId);if(FU(j,Q))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:m.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:m.RunFailed,run:{...$}})}finally{clearInterval(Z),this.dispatchQueuedRuns()}}listRuns($){let W=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Z)=>{if(!W&&!["running","queued"].includes(Z.status))return!1;if($?.status&&Z.status!==$.status)return!1;if($?.agentId&&Z.agentId!==$.agentId)return!1;return!0}).map((Z)=>({...Z}))}getRun($){let W=this.runs.get($);return W?{...W}:void 0}async awaitRun($,W=250){let Z=this.runs.get($);if(!Z)throw Error(`Run "${$}" was not found`);while(Z.status==="queued"||Z.status==="running")await UU(W);return{...Z}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((W)=>["queued","running"].includes(W.status)))await UU($);return this.listRuns()}cancelRun($,W){let Z=this.runs.get($);if(!Z)throw Error(`Run "${$}" was not found`);if(Z.status==="completed"||Z.status==="failed")return{...Z};Z.status="cancelled",Z.error=W,Z.endedAt=new Date,Z.currentActivity="cancelled";let Q=this.runQueue.indexOf($);if(Q>=0)this.runQueue.splice(Q,1);return this.emitEvent({type:m.RunCancelled,run:{...Z},reason:W}),{...Z}}recoverActiveRuns($="runtime_recovered"){let W=[];for(let Z of this.runs.values()){if(!["queued","running"].includes(Z.status))continue;let Q=this.members.get(Z.agentId);if(!Q||Q.role!=="teammate"||!Q.agent){Z.status="interrupted",Z.error="teammate_unavailable_after_recovery",Z.endedAt=new Date,Z.currentActivity="interrupted",this.emitEvent({type:m.RunInterrupted,run:{...Z},reason:Z.error});continue}let J=new Date;if(Z.status="queued",Z.error=void 0,Z.endedAt=void 0,Z.heartbeatAt=J,Z.lastProgressAt=J,Z.lastProgressMessage=$,Z.currentActivity=AU,!this.runQueue.includes(Z.id))this.runQueue.push(Z.id);W.push({...Z}),this.emitEvent({type:m.RunQueued,run:{...Z}})}return this.dispatchQueuedRuns(),W}markStaleRunsInterrupted($="runtime_recovered"){let W=[];for(let Z of this.runs.values()){if(!["queued","running"].includes(Z.status))continue;Z.status="interrupted",Z.error=$,Z.endedAt=new Date,Z.currentActivity="interrupted",W.push({...Z}),this.emitEvent({type:m.RunInterrupted,run:{...Z},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),W}sendMessage($,W,Z,Q,J){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let j=this.members.get(W);if(!j)throw Error(`Unknown recipient "${W}"`);let X={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:W,subject:Z,body:Q,taskId:J,sentAt:new Date};if(this.mailbox.push(X),this.emitEvent({type:m.TeamMessage,message:{...X}}),j.role==="teammate"&&j.runningCount>0&&j.agent)j.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Z}". Use the team_read_mailbox tool to read it at your convenience.`;return{...X}}broadcast($,W,Z,Q){let J=[];for(let j of this.members.values()){if(j.agentId===$)continue;if(j.role==="lead")continue;J.push(this.sendMessage($,j.agentId,W,Z,Q?.taskId))}return J}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let W={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(W);let Z=this.members.get($.agentId);if(Z)Z.lastMissionAt=Date.now(),Z.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:m.TeamMissionLog,entry:{...W}}),{...W}}createOutcome($){let W={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(W.id,W),this.emitEvent({type:m.OutcomeCreated,outcome:{...W}}),{...W}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let W=this.outcomes.get($.outcomeId);if(!W)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!W.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Z={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(Z.id,Z),W.status==="draft")W.status="in_review";return this.emitEvent({type:m.OutcomeFragmentAttached,fragment:{...Z}}),{...Z}}reviewOutcomeFragment($){let W=this.outcomeFragments.get($.fragmentId);if(!W)throw Error(`Fragment "${$.fragmentId}" was not found`);return W.status=$.approved?"reviewed":"rejected",W.reviewedBy=$.reviewedBy,W.reviewedAt=new Date,this.emitEvent({type:m.OutcomeFragmentReviewed,fragment:{...W}}),{...W}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((W)=>W.outcomeId===$).map((W)=>({...W}))}finalizeOutcome($){let W=this.outcomes.get($);if(!W)throw Error(`Outcome "${$}" was not found`);let Z=this.listOutcomeFragments($);for(let Q of W.requiredSections)if(!Z.some((j)=>j.section===Q&&j.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${Q}" is missing a reviewed fragment.`);return W.status="finalized",W.finalizedAt=new Date,this.emitEvent({type:m.OutcomeFinalized,outcome:{...W}}),{...W}}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(W){if(!bj(W))throw W}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[$,W]of this.members.entries())if(W.role==="teammate")this.members.delete($)}requireTask($){let W=this.tasks.get($);if(!W)throw Error(`Task "${$}" was not found`);return W}assertDependenciesResolved($){let W=this.getUnresolvedDependencies($);if(W.length>0)throw Error(`Task "${$.id}" is blocked by "${W[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((W)=>{let Z=this.tasks.get(W);return!Z||Z.status!=="completed"})}trackMeaningfulEvent($,W){if(this.recordRunActivityFromAgentEvent($,W),W.type==="iteration_end"&&W.hadToolCalls){this.recordProgressStep($,`Completed iteration ${W.iteration} with ${W.toolCallCount} tool call(s)`);return}if(W.type==="content_end"&&W.contentType==="tool"&&!W.error){this.recordProgressStep($,`Finished tool "${W.toolName??"unknown"}"`);return}if(W.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${W.iterations} iterations)`});return}if(W.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:W.error.message})}recordRunActivityFromAgentEvent($,W){let Z;switch(W.type){case"iteration_start":Z=`iteration_${W.iteration}_started`;break;case"content_start":if(W.contentType==="tool")Z=`running_tool_${W.toolName??"unknown"}`;break;case"content_end":if(W.contentType==="tool")Z=W.error?this.formatProgressErrorActivity(`tool_${W.toolName??"unknown"}_error`,W.error):`finished_tool_${W.toolName??"unknown"}`;break;case"done":Z="finalizing_response";break;case"error":Z=this.formatProgressErrorActivity("run_error",W.error.message);break;default:break}if(!Z)return;for(let Q of this.runs.values()){if(Q.agentId!==$||Q.status!=="running")continue;this.recordRunProgress(Q,Z)}}recordRunProgress($,W){let Z=new Date;$.heartbeatAt=Z,$.lastProgressAt=Z,$.lastProgressMessage=W,$.currentActivity=W,this.emitEvent({type:m.RunProgress,run:{...$},message:W})}formatProgressErrorActivity($,W){let Z=W.replace(/\s+/g," ").trim();if(Z.length===0)return $;let Q=Z.length>240?`${Z.slice(0,237).trimEnd()}...`:Z;return`${$}: ${Q}`}recordProgressStep($,W,Z,Q=!1){this.missionStepCounter++;let J=this.members.get($);if(!J)return;let j=this.missionStepCounter-J.lastMissionStep,X=Date.now()-J.lastMissionAt;if(!Q&&j<this.missionLogIntervalSteps&&X<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Z,kind:"progress",summary:W})}buildMailboxNotification($){if($.length===0)return"";let W=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Z of $)W.push(`--- Message from ${Z.fromAgentId} | subject: ${Z.subject} ---`),W.push(Z.body);return W.push("---"),W.join(`
|
|
532
|
+
`)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function UU($){return new Promise((W)=>setTimeout(W,$))}function S6($,W){let Z=0;for(let Q of $){if(!Q.startsWith(W))continue;let J=Number.parseInt(Q.slice(W.length),10);if(Number.isFinite(J))Z=Math.max(Z,J)}return Z}function hj($,W){switch(W.type){case"run_queued":case"run_started":$.activeTeamRunIds.add(W.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let Z;if(W.type==="run_failed")Z=W.run.error;else if(W.type==="run_cancelled"||W.type==="run_interrupted")Z=W.run.error??W.reason;$.activeTeamRunIds.delete(W.run.id),$.pendingTeamRunUpdates.push({runId:W.run.id,agentId:W.run.agentId,taskId:W.run.taskId,status:W.type.replace("run_",""),error:Z,iterations:W.run.result?.iterations}),MQ($);break}default:break}}async function kj($,W,Z){switch(W.type){case"run_progress":await Z("onTeamTaskProgress",$,W.run.agentId,W.message,{kind:W.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(W.event.type==="content_start"&&W.event.contentType==="text"&&typeof W.event.text==="string"){let Q=W.event.text.replace(/\s+/g," ").trim().slice(0,120);if(Q)await Z("onTeamTaskProgress",$,W.agentId,Q,{kind:"text"})}break;case"task_start":await Z("onTeamTaskStart",$,W.agentId,W.message);break;case"task_end":{if(W.error)await Z("onTeamTaskEnd",$,W.agentId,"failed",`[error] ${W.error.message}`,void 0,W.messages);else if(W.result?.finishReason==="aborted")await Z("onTeamTaskEnd",$,W.agentId,"cancelled","[done] aborted",W.result,W.result.messages);else await Z("onTeamTaskEnd",$,W.agentId,"completed",`[done] ${W.result?.finishReason??"completed"}`,W.result,W.result?.messages);break}default:break}}function Ij($,W,Z,Q){if(!$.runtime.teamRuntime)return;let J=$.runtime.teamRuntime.getTeamName();Q({type:"team_progress",payload:{sessionId:W,teamName:J,lifecycle:P6({teamName:J,sessionId:W,event:Z}),summary:C6(J,$.runtime.teamRuntime.exportState())}})}function H9($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function xj($,W){if($.aborting)return!1;if(!(W==="completed"||W==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&H9($)}function MQ($){let W=$.teamRunWaiters.splice(0);for(let Z of W)Z()}async function gj($){while(!0){if($.aborting)return[];if($.pendingTeamRunUpdates.length>0){let W=[...$.pendingTeamRunUpdates];return $.pendingTeamRunUpdates.length=0,W}if($.activeTeamRunIds.size===0)return[];await new Promise((W)=>{$.teamRunWaiters.push(W)})}}function mj($,W){let Z=W.map((j)=>{let X=[`- ${j.runId} (${j.agentId}) -> ${j.status}`];if(j.taskId)X.push(` task=${j.taskId}`);if(typeof j.iterations==="number")X.push(` iterations=${j.iterations}`);if(j.error)X.push(` error=${j.error}`);return X.join("")}),Q=$.activeTeamRunIds.size,J=Q>0?`There are still ${Q} teammate run(s) in progress. Continue coordination and decide whether to wait for more updates.`:"No teammate runs are currently in progress. Continue coordination using these updates.";return G9(`System-delivered teammate async run updates:
|
|
533
533
|
${Z.join(`
|
|
534
534
|
`)}
|
|
535
535
|
|
|
536
|
-
${J}`,$.config.mode)}function
|
|
537
|
-
`,"utf8"),
|
|
536
|
+
${J}`,$.config.mode)}function G9($,W){return nb($,W==="plan"?"plan":W==="yolo"?"yolo":"act")}var vj=4;class Y${adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor($,W={}){this.adapter=$;this.manifestStore=new Cj($,W.messagesArtifactUploader,W.logger),this.teamChildren=new zQ($,this.manifestStore,(Z,Q,J)=>this.toPersistedMessages(Z,Q,J),Y$.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,W,Z){if(!$)return;return W?WZ(W.messages,W,Z):$Z($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,W){this.manifestStore.writeSessionManifest($,W)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let W=$.startedAt??Y0(),Z=$.sessionId.trim(),Q=Z.length>0?Z:`${Date.now()}_${ob(5)}`,J=this.manifestStore.artifacts.sessionMessagesPath(Q),j=this.manifestStore.artifacts.sessionCompactionPath(Q),X=this.manifestStore.artifacts.sessionManifestPath(Q),Y=t4({metadata:$.metadata,prompt:$.prompt}),V={version:1,session_id:Q,source:$.source,pid:$.pid,started_at:W,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:Q,source:$.source,pid:$.pid,startedAt:W,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:null,parentAgentId:null,agentId:null,conversationId:null,isSubagent:!1,prompt:V.prompt??null,metadata:h$(V.metadata),hookPath:"",messagesPath:J,updatedAt:Y0()}),this.manifestStore.initializeMessagesFile(Q,J,W),this.manifestStore.writeSessionManifest(X,V),{manifestPath:X,messagesPath:J,compactionPath:j,manifest:V}}async updateSessionStatus($,W,Z){let Q;if((await LG(()=>this.adapter.getSession($),async(j)=>{return Q=K0(W)?void 0:Y0(),this.adapter.updateSession({sessionId:$,status:W,endedAt:Q??null,exitCode:K0(W)?null:typeof Z==="number"?Z:null,expectedStatusLock:j.statusLock})},vj)).updated){if(W==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:Q}}return{updated:!1}}async updateSession($){for(let W=0;W<vj;W++){let Z=await this.adapter.getSession($.sessionId);if(!Z)return{updated:!1};let Q=Z.metadata??void 0,J=$.metadata!==void 0?h$($.metadata)??{}:h$(Q)??{},j=P2(typeof Q?.title==="string"?Q.title:void 0),X=$.title!==void 0?P2($.title):j??g3($.prompt);if(X)J.title=X;else delete J.title;let Y=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:Y?Object.keys(J).length>0?J:null:void 0,title:X,expectedStatusLock:Z.statusLock})).updated)continue;let{path:B,manifest:H}=this.manifestStore.readManifestFile($.sessionId);if(H){if($.prompt!==void 0)H.prompt=$.prompt??void 0;let G=$.metadata!==void 0?h$($.metadata)??{}:h$(H.metadata)??{};if(X)G.title=X;H.metadata=Object.keys(G).length>0?G:void 0,this.manifestStore.writeSessionManifest(B,H)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,W){return this.teamChildren.appendSubagentHookAudit(W),Promise.resolve()}persistSessionMessages($,W,Z){let Q=$Z(W);return this.manifestStore.persistSessionMessages($,Q,Z)}async readSessionCompactionState($){return await this.manifestStore.readSessionCompactionState($)}async persistSessionCompactionState($,W){await this.manifestStore.persistSessionCompactionState($,W)}async deleteSessionCompactionState($){await this.manifestStore.deleteSessionCompactionState($)}applySubagentStatus($,W){return this.teamChildren.applySubagentStatus($,W)}applySubagentStatusBySessionId($,W){return this.teamChildren.applySubagentStatusBySessionId($,W)}applyStatusToRunningChildSessions($,W){return this.teamChildren.applyStatusToRunningChildSessions($,W)}onTeamTaskStart($,W,Z){return this.teamChildren.onTeamTaskStart($,W,Z)}onTeamTaskEnd($,W,Z,Q,J,j){return this.teamChildren.onTeamTaskEnd($,W,Z,Q,J,j)}onTeamTaskProgress($,W,Z,Q){return this.teamChildren.onTeamTaskProgress($,W,Z,Q)}handleSubAgentStart($,W){return this.teamChildren.handleSubAgentStart($,W)}handleSubAgentEnd($,W){return this.teamChildren.handleSubAgentEnd($,W)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(W){return typeof W==="object"&&W!==null&&"code"in W&&W.code==="EPERM"}}async reconcileDeadRunningSession($){if(K0($.status)===!1||this.isPidAlive($.pid))return $;let W=Y0(),Z=Y$.STALE_REASON;for(let Q=0;Q<vj;Q++){let J=await this.adapter.getSession($.sessionId);if(!J)return;if(K0(J.status)===!1)return J;let j={...J.metadata??{},terminal_marker:Z,terminal_marker_at:W,terminal_marker_pid:J.pid,terminal_marker_source:Y$.STALE_SOURCE},X=await this.adapter.updateSession({sessionId:J.sessionId,status:"failed",endedAt:W,exitCode:1,metadata:j,expectedStatusLock:J.statusLock});if(!X.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(J.sessionId,"failed");let Y=_G(J,{status:"failed",endedAt:W,exitCode:1,metadata:j}),{path:V}=this.manifestStore.readManifestFile(J.sessionId);return this.manifestStore.writeSessionManifest(V,Y),this.manifestStore.appendStaleSessionHookLog(W,J.sessionId,J.pid,Z,Y$.STALE_SOURCE),{...J,status:"failed",endedAt:W,exitCode:1,metadata:j,statusLock:X.statusLock,updatedAt:W}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let W=Math.max(1,Math.floor($)),Z=Math.min(W*5,2000);await this.reconcileDeadSessions(Z);let Q=(await this.adapter.listSessions({limit:Z})).slice(0,W),J=await Promise.all(Q.map((j)=>this.manifestStore.readSessionManifestTitle(j.sessionId)));return Q.map((j,X)=>{let Y=h$(j.metadata??void 0),V=P2(J[X]),B=V?{...Y??{},title:V}:Y;return{...j,metadata:B}})}async reconcileDeadSessions($=2000){let W=Math.max(1,Math.floor($)),Z=(await Promise.all(["idle","running","pending"].map((J)=>this.adapter.listSessions({limit:W,status:J})))).flat(),Q=0;for(let J of Z){let j=await this.reconcileDeadRunningSession(J);if(j&&j.status!==J.status)Q++}return Q}async deleteSession($){let W=$.trim();if(!W)throw Error("session id is required");let Z=await this.adapter.getSession(W);if(!Z)return{deleted:!1};if(await this.adapter.deleteSession(W,!1),!Z.isSubagent){let Q=await this.adapter.listSessions({limit:2000,parentSessionId:W});await this.adapter.deleteSession(W,!0),await Promise.allSettled(Q.map(async(J)=>{await jJ(J.cwd,J.sessionId),f5(J.messagesPath),await this.deleteSessionCompactionStateIfExists(J.sessionId),f5(this.manifestStore.artifacts.sessionManifestPath(J.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(J.sessionId)}))}if(await jJ(Z.cwd,W),f5(Z.messagesPath),await this.deleteSessionCompactionStateIfExists(W),f5(this.manifestStore.artifacts.sessionManifestPath(W,!1)),Z.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(W);else{let Q=new Set([this.manifestStore.artifacts.sessionArtifactsDir(W)]);for(let J of[Z.messagesPath])if(typeof J==="string"&&J.trim().length>0)Q.add(ab(J));for(let J of Q)this.manifestStore.artifacts.removeDir(J)}return{deleted:!0}}async deleteSessionCompactionStateIfExists($){try{await this.manifestStore.deleteSessionCompactionState($)}catch{}}}function uj(){return new Date().toISOString()}function OU($,W){let Z=`${$}.tmp`;eb(Z,`${JSON.stringify(W,null,2)}
|
|
537
|
+
`,"utf8"),tb(Z,$)}class TU{sessionsDirPath;constructor($=$y()){this.sessionsDirPath=$}ensureSessionsDir(){if(!cj(this.sessionsDirPath))sb(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return fU(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return fU(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!cj($))return{version:1,sessions:{}};try{let W=JSON.parse(LU($,"utf8"));if(W?.version===1&&W.sessions)return W}catch{}return{version:1,sessions:{}}}writeIndex($){OU(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!cj($))return{version:1,nextId:1,requests:[]};try{let W=JSON.parse(LU($,"utf8"));if(W?.version===1&&typeof W.nextId==="number"&&Array.isArray(W.requests))return W}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){OU(this.spawnQueuePath(),$)}async upsertSession($){let W=this.readIndex();W.sessions[$.sessionId]=$,this.writeIndex(W)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((W)=>$.parentSessionId!==void 0?W.parentSessionId===$.parentSessionId:!0).filter((W)=>$.status!==void 0?W.status===$.status:!0).sort((W,Z)=>Z.startedAt.localeCompare(W.startedAt)).slice(0,$.limit)}async updateSession($){let W=this.readIndex(),Z=W.sessions[$.sessionId];if(!Z)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&Z.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:Z.statusLock};let Q=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:Z.statusLock,J={...Z,status:$.status??Z.status,endedAt:$.endedAt!==void 0?$.endedAt:Z.endedAt??null,exitCode:$.exitCode!==void 0?$.exitCode:Z.exitCode??null,prompt:$.prompt!==void 0?$.prompt:Z.prompt??null,metadata:$.metadata!==void 0?$.metadata??null:Z.metadata??null,parentSessionId:$.parentSessionId!==void 0?$.parentSessionId??null:Z.parentSessionId??null,parentAgentId:$.parentAgentId!==void 0?$.parentAgentId??null:Z.parentAgentId??null,agentId:$.agentId!==void 0?$.agentId??null:Z.agentId??null,conversationId:$.conversationId!==void 0?$.conversationId??null:Z.conversationId??null,statusLock:Q,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:Z.isSubagent,updatedAt:uj()};if($.setRunning)J.status="running",J.endedAt=null,J.exitCode=null;return W.sessions[$.sessionId]=J,this.writeIndex(W),{updated:!0,statusLock:J.statusLock}}async deleteSession($,W){let Z=this.readIndex();if(!Z.sessions[$])return!1;if(delete Z.sessions[$],W){for(let J of Object.values(Z.sessions))if(J.parentSessionId===$)delete Z.sessions[J.sessionId]}return this.writeIndex(Z),!0}async enqueueSpawnRequest($){let W=this.readQueue();W.requests.push({id:W.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:uj()}),W.nextId+=1,this.writeQueue(W)}async claimSpawnRequest($,W){let Z=this.readQueue(),Q=Z.requests.find((J)=>J.rootSessionId===$&&J.parentAgentId===W&&!J.consumedAt);if(!Q)return;return Q.consumedAt=uj(),this.writeQueue(Z),Q.task}}class dj extends Y${constructor($,W={}){super(new TU($),W)}ensureSessionsDir(){return super.ensureSessionsDir()}}var MU={};w(MU,{CoreSessionService:()=>b1});import{existsSync as Wy,mkdirSync as Zy}from"node:fs";import{resolveSessionDataDir as Qy}from"@cline/shared/storage";var lj=`
|
|
538
538
|
session_id AS sessionId,
|
|
539
539
|
source,
|
|
540
540
|
pid,
|
|
@@ -561,52 +561,52 @@ ${J}`,$.config.mode)}function BW($,W){return Ib($,W==="plan"?"plan":W==="yolo"?"
|
|
|
561
561
|
metadata_json AS metadata,
|
|
562
562
|
hook_path AS hookPath,
|
|
563
563
|
messages_path AS messagesPath,
|
|
564
|
-
updated_at AS updatedAt`;function
|
|
564
|
+
updated_at AS updatedAt`;function pj($){$.interactive=$.interactive===1,$.enableTools=$.enableTools===1,$.enableSpawn=$.enableSpawn===1,$.enableTeams=$.enableTeams===1,$.isSubagent=$.isSubagent===1;let W=$.metadata;if(typeof W==="string"&&W.trim())try{let Z=JSON.parse(W);$.metadata=Z&&typeof Z==="object"&&!Array.isArray(Z)?Z:null}catch{$.metadata=null}else $.metadata=null;return $}function rj($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function zU($){return{...$,tasks:$.tasks.map((W)=>({...W,createdAt:new Date(W.createdAt),updatedAt:new Date(W.updatedAt)})),mailbox:$.mailbox.map((W)=>({...W,sentAt:new Date(W.sentAt),readAt:W.readAt?new Date(W.readAt):void 0})),missionLog:$.missionLog.map((W)=>({...W,ts:new Date(W.ts)})),runs:($.runs??[]).map((W)=>({...W,startedAt:new Date(W.startedAt),endedAt:W.endedAt?new Date(W.endedAt):void 0,nextAttemptAt:W.nextAttemptAt?new Date(W.nextAttemptAt):void 0,heartbeatAt:W.heartbeatAt?new Date(W.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),finalizedAt:W.finalizedAt?new Date(W.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),reviewedAt:W.reviewedAt?new Date(W.reviewedAt):void 0}))}}class qU{store;sessionsDirPath;constructor($,W=Qy()){this.store=$;this.sessionsDirPath=W}ensureSessionsDir(){if(!Wy(this.sessionsDirPath))Zy(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
|
|
565
565
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
566
566
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
567
567
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
568
568
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
569
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,$.statusLock,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.isSubagent?1:0,$.prompt??null,
|
|
569
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,$.statusLock,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.isSubagent?1:0,$.prompt??null,rj($.metadata),"",$.hookPath??"",$.messagesPath??null,$.updatedAt])}async getSession($){let W=this.store.queryOne(`SELECT ${lj} FROM sessions WHERE session_id = ?`,[$]);return W?pj(W):void 0}async listSessions($){let W=[],Z=[];if($.parentSessionId)W.push("parent_session_id = ?"),Z.push($.parentSessionId);if($.status)W.push("status = ?"),Z.push($.status);let Q=W.length>0?`WHERE ${W.join(" AND ")}`:"";return this.store.queryAll(`SELECT ${lj}
|
|
570
570
|
FROM sessions
|
|
571
571
|
${Q}
|
|
572
572
|
ORDER BY started_at DESC
|
|
573
|
-
LIMIT ?`,[...Z,$.limit]).map(
|
|
573
|
+
LIMIT ?`,[...Z,$.limit]).map(pj)}async updateSession($){if($.setRunning){if($.expectedStatusLock===void 0)return{updated:!1,statusLock:0};return{updated:(this.store.run(`UPDATE sessions
|
|
574
574
|
SET status = 'running', ended_at = NULL, exit_code = NULL, updated_at = ?, status_lock = ?,
|
|
575
575
|
parent_session_id = ?, parent_agent_id = ?, agent_id = ?, conversation_id = ?, is_subagent = 1,
|
|
576
576
|
prompt = COALESCE(prompt, ?)
|
|
577
|
-
WHERE session_id = ? AND status_lock = ?`,[
|
|
578
|
-
VALUES (?, ?, ?, ?, ?, NULL)`,[$.rootSessionId,$.parentAgentId,$.task??null,$.systemPrompt??null,
|
|
577
|
+
WHERE session_id = ? AND status_lock = ?`,[Y0(),$.expectedStatusLock+1,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.prompt??null,$.sessionId,$.expectedStatusLock]).changes??0)>0,statusLock:$.expectedStatusLock+1}}let W=[],Z=[];if($.status!==void 0)W.push("status = ?"),Z.push($.status);if($.endedAt!==void 0)W.push("ended_at = ?"),Z.push($.endedAt);if($.exitCode!==void 0)W.push("exit_code = ?"),Z.push($.exitCode);if($.prompt!==void 0)W.push("prompt = ?"),Z.push($.prompt??null);if($.metadata!==void 0)W.push("metadata_json = ?"),Z.push(rj($.metadata));if($.parentSessionId!==void 0)W.push("parent_session_id = ?"),Z.push($.parentSessionId??null);if($.parentAgentId!==void 0)W.push("parent_agent_id = ?"),Z.push($.parentAgentId??null);if($.agentId!==void 0)W.push("agent_id = ?"),Z.push($.agentId??null);if($.conversationId!==void 0)W.push("conversation_id = ?"),Z.push($.conversationId??null);if(W.length===0){let X=await this.getSession($.sessionId);return{updated:!!X,statusLock:X?.statusLock??0}}let Q=0;if($.expectedStatusLock!==void 0)Q=$.expectedStatusLock+1,W.push("status_lock = ?"),Z.push(Q);W.push("updated_at = ?"),Z.push(Y0());let J=`UPDATE sessions SET ${W.join(", ")} WHERE session_id = ?`;if(Z.push($.sessionId),$.expectedStatusLock!==void 0)J+=" AND status_lock = ?",Z.push($.expectedStatusLock);if((this.store.run(J,Z).changes??0)===0)return{updated:!1,statusLock:0};if($.expectedStatusLock===void 0)Q=(await this.getSession($.sessionId))?.statusLock??0;return{updated:!0,statusLock:Q}}async deleteSession($,W){let Z=this.store.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(W)this.store.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Z>0}async enqueueSpawnRequest($){this.store.run(`INSERT INTO subagent_spawn_queue (root_session_id, parent_agent_id, task, system_prompt, created_at, consumed_at)
|
|
578
|
+
VALUES (?, ?, ?, ?, ?, NULL)`,[$.rootSessionId,$.parentAgentId,$.task??null,$.systemPrompt??null,Y0()])}async claimSpawnRequest($,W){let Z=this.store.queryOne(`SELECT id, task FROM subagent_spawn_queue
|
|
579
579
|
WHERE root_session_id = ? AND parent_agent_id = ? AND consumed_at IS NULL
|
|
580
|
-
ORDER BY id ASC LIMIT 1`,[$,W]);if(!Z||typeof Z.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[
|
|
580
|
+
ORDER BY id ASC LIMIT 1`,[$,W]);if(!Z||typeof Z.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[Y0(),Z.id]),Z.task??void 0}}class b1 extends Y${store;constructor($,W={}){super(new qU($,W.sessionArtifactsDir),W);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
|
|
581
581
|
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
582
582
|
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
583
583
|
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
584
584
|
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
585
|
-
) 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,
|
|
586
|
-
`,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let W=new Map;for(let Z of this.getReturnedFlagKeys($)){let Q=this.getFeatureFlag(Z);W.set(Z,Q??!1)}this.cache=W}getFeatureFlag($){try{let W=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Z=this.cacheInfo.flagsPayload?.featureFlags?.[$],Q=W??Z??rj[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==Q)this.telemetry?.capture({event:v.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Z}});return Q}catch(W){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:W}),rj[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??rj[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,W){if(process.env.IS_TEST==="true")this.cache.set($,W)}async dispose(){await this.provider.dispose()}}class Z8{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}M6();var IU={};w(IU,{createCheckpointComparePlan:()=>RQ,compareCheckpointToWorkspace:()=>KW,buildCheckpointWorkspaceDiff:()=>NQ});import{execFile as Jy}from"node:child_process";import*as hU from"node:fs/promises";import*as h6 from"node:path";import{promisify as jy}from"node:util";var bU={};w(bU,{trimMessagesToCheckpoint:()=>SU,trimMessagesBeforeCheckpoint:()=>nj,readSessionCheckpointHistory:()=>Q8,findCheckpointForRun:()=>y6,createRestoredCheckpointMetadata:()=>ij,createCheckpointRestorePlan:()=>aj,applyCheckpointToWorktree:()=>oj});import{execFile as Zy}from"node:child_process";import{promisify as Qy}from"node:util";var b6=Qy(Zy);function Q8($){let W=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(W?.history)?W.history:[]).filter((Q)=>!!Q&&typeof Q==="object"&&!Array.isArray(Q)).flatMap((Q)=>{let J=String(Q.ref??"").trim(),j=Number(Q.createdAt??0),X=Number(Q.runCount??0);if(J.length===0||!Number.isFinite(j)||!Number.isInteger(X)||X<1)return[];let Y=Q.kind==="stash"||Q.kind==="commit"?Q.kind:void 0;return[{ref:J,createdAt:j,runCount:X,...Y?{kind:Y}:{}}]})}function ij($,W){let Z=Q8($).filter((J)=>J.runCount<=W),Q=Z.at(-1);return Q?{latest:Q,history:Z}:void 0}function y6($,W){return $.reduce((Z,Q)=>{if(Q.runCount>W)return Z;if(!Z||Q.runCount>Z.runCount)return Q;return Z},void 0)}function PU($,W){let Z=0;for(let Q=0;Q<$.length;Q+=1){let J=$[Q];if(J?.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"?J.metadata:void 0)?.kind==="recovery_notice")continue;if(Z+=1,Z===W)return Q}throw Error(`Could not find user message for checkpoint run ${W}`)}function SU($,W){let Z=PU($,W);return $.slice(0,Z+1)}function nj($,W){let Z=PU($,W);return $.slice(0,Z)}function aj($){let W=$.checkpointRunCount;if(!Number.isInteger(W)||W<1)throw Error("checkpointRunCount must be a positive integer");let Z=y6(Q8($.session),W);if(!Z)throw Error(`No checkpoint found at or before run ${W} in session ${$.session.sessionId}`);let Q=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!Q)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Z,cwd:Q,...$.restoreMessages!==!1?{messages:SU($.messages??[],W)}:{}}}async function oj($,W){if((await b6("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await b6("git",["-C",$,"cat-file","-e",`${W.ref}^{commit}`],{windowsHide:!0}),await b6("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await b6("git",["-C",$,"clean","-fd"],{windowsHide:!0}),W.kind==="commit"){await b6("git",["-C",$,"reset","--hard",W.ref],{windowsHide:!0});return}await b6("git",["-C",$,"stash","apply",W.ref],{windowsHide:!0})}var Xy=jy(Jy),Yy=52428800;async function MQ($,W){let{stdout:Z}=await Xy("git",["-C",$,...W],{windowsHide:!0,maxBuffer:Yy,encoding:"utf8"});return Z}function yU($){return $.split("\x00").filter(Boolean)}function kU($,W){let Z=h6.resolve($,W),Q=h6.relative($,Z);if(Q.startsWith("..")||h6.isAbsolute(Q))throw Error(`Checkpoint diff path escapes workspace: ${W}`);return Z}async function Vy($,W,Z){try{return await MQ($,["show",`${W}:${Z}`])}catch{return""}}async function By($,W){try{return await hU.readFile(kU($,W),"utf8")}catch{return""}}async function Hy($,W){await MQ($,["cat-file","-e",`${W.ref}^{tree}`]);let[Z,Q]=await Promise.all([MQ($,["diff","--name-only","-z",W.ref,"--"]),MQ($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...yU(Z),...yU(Q)])].sort((j,X)=>j.localeCompare(X))}function RQ($){let W=$.checkpointRunCount;if(!Number.isInteger(W)||W<1)throw Error("checkpointRunCount must be a positive integer");let Z=y6(Q8($.session),W);if(!Z)throw Error(`No checkpoint found at or before run ${W} in session ${$.session.sessionId}`);let Q=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!Q)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Z,cwd:Q}}async function NQ($,W){let Z=await Hy($,W);return(await Promise.all(Z.map(async(J)=>{let[j,X]=await Promise.all([Vy($,W.ref,J),By($,J)]);return{filePath:kU($,J),leftContent:j,rightContent:X}}))).filter((J)=>J.leftContent!==J.rightContent)}async function KW($){let W=RQ($),Z=await NQ(W.cwd,W.checkpoint);return{...W,diffs:Z}}class FW{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,W,Z,Q,J,j,X,Y,V,B){this.clientName=W,this.runtimeAddress=Z,this.host=$,this.prepare=Q,this.capabilities=J,this.logger=j,this.telemetry=X,this.distinctId=Y,this.featureFlags=V,this.settings=IF($),this.pendingPrompts=xF($),this.automation=new zJ(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=B?new o5({workspaceRoot:B.workspaceRoot??process.cwd(),specs:{cronSpecsDir:B.cronSpecsDir??B.cronDir,scope:PK(B.cronScope),workspaceRoot:B.workspaceRoot},runtimeHandlers:SK({host:$,getExtensionContext:()=>mZ({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:B.dbPath,logger:B.logger,pollIntervalMs:B.pollIntervalMs,claimLeaseSeconds:B.claimLeaseSeconds,globalMaxConcurrency:B.globalMaxConcurrency,watcherDebounceMs:B.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((H)=>{if(H.type!=="ended")return;this.disposeSessionBootstrap(H.payload.sessionId)})}static async create($={}){let W=c0($.distinctId),Z=C0($.capabilities),Q={...$,capabilities:Z,distinctId:W},J=await S6(Q),j=CK($.automation),X=$.featureFlags||new W8({provider:new Z8,telemetry:$.telemetry,logger:$.logger,context:{distinctId:W,clientName:$.clientName}}),Y=new FW(J,$.clientName,J.runtimeAddress,$.prepare,Z,$.logger,$.telemetry,W,X,j?{...j,logger:$.logger}:void 0);if(j&&j.autoStart!==!1)await Y.automation.start();return Y}async disposeSessionBootstrap($){let W=this.activeSessionBootstraps.get($);if(!W)return;this.activeSessionBootstraps.delete($),await Promise.resolve(W.dispose?.())}async start($){let W=mF($),Z=await this.prepare?.(W);try{let Q=Z?await Z.applyToStartSessionInput(W):W,J=await this.host.startSession(vJ(Q,{defaultCapabilities:this.capabilities,withExtensionContext:(j)=>mZ({automationService:this.automationService,automation:this.automation,context:j,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Z)if(await this.host.getSession(J.sessionId))this.activeSessionBootstraps.set(J.sessionId,Z);else await Promise.resolve(Z.dispose?.());return vF({input:Q,sessionId:J.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),J}catch(Q){throw await Promise.resolve(Z?.dispose?.()),Q}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let W=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(W.map((Z)=>this.disposeSessionBootstrap(Z)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await VQ(this.host,$);list=async($=200,W={})=>await this.listHistory({...W,limit:$});delete=async($)=>{let W=await this.host.deleteSession($);if(W)await this.disposeSessionBootstrap($);return W};update=(...$)=>this.host.updateSession(...$);updateSessionCompactionState=(...$)=>this.host.updateSessionCompactionState(...$);readSessionCompactionState=(...$)=>this.host.readSessionCompactionState(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let W=$.start?vJ($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Z)=>mZ({automationService:this.automationService,automation:this.automation,context:Z,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:$.sessionId,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restore:$.restore,start:W})}async compareCheckpoint($){let W=$.sessionId.trim();if(!W)throw Error("sessionId is required");let Z=await this.host.getSession(W);if(!Z)throw Error(`Session ${W} not found`);return KW({session:Z,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,W){return this.host.subscribe($,W)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()};updateSessionConnection=(...$)=>{return this.host.updateSessionConnection?.(...$)??Promise.resolve()}}var gU={};w(gU,{resolvePluginSkillDirectoriesFromPaths:()=>e1,resolvePluginConfigSearchPaths:()=>Q5,resolveAndLoadAgentPlugins:()=>o8,resolveAgentPluginPaths:()=>t1,loadAgentPluginsFromPathsWithDiagnostics:()=>P2,loadAgentPluginsFromPaths:()=>ZZ,loadAgentPluginFromPath:()=>W5,discoverPluginModulePaths:()=>J5});var cU={};w(cU,{toHookConfigFileName:()=>Y5,runSubprocessEvent:()=>k6,runHook:()=>x6,resolveHooksConfigSearchPaths:()=>j5,parseHookEventPayload:()=>I6,mergeAgentHooks:()=>h2,listHookConfigFiles:()=>b$,createSubprocessHooks:()=>CQ,createHookConfigFileHooks:()=>V5,createHookConfigFileExtension:()=>$6,createHookAuditHooks:()=>e8,createAgentHooksExtension:()=>s8,HookEventPayloadSchema:()=>wQ,HookEventNameSchema:()=>EQ,HookConfigFileName:()=>t8,HOOK_CONFIG_FILE_EVENT_MAP:()=>X5,HOOKS_CONFIG_DIRECTORY_NAME:()=>VZ});import{HookEventNameSchema as EQ,HookEventPayloadSchema as wQ,parseHookEventPayload as I6,resolveHookSessionContext as _y}from"@cline/shared";import{z as J8}from"zod";import{spawn as Gy}from"node:child_process";import{augmentNodeCommandForDebug as Ky,withResolvedClineBuildEnv as Fy}from"@cline/shared";function Ay($){let W=$.trim();if(!W)return{};let Q=W.split(`
|
|
587
|
-
`).map((j)=>j.trim()).filter(Boolean).filter((j)=>j.startsWith("HOOK_CONTROL\t")).map((j)=>j.slice(13)),J=Q.length>0?Q[Q.length-1]:W;try{return{parsedJson:JSON.parse(J)}}catch(j){return{parseError:j instanceof Error?j.message:"Failed to parse subprocess stdout JSON"}}}function Uy($,W){let Z=$ instanceof Error?$:Error(String($)),Q=Z,J=W.join(" ");if(Q.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}": ${Z.message}`)}async function Dy($,W){let Z=$.stdin;if(!Z)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((Q,J)=>{let j=(X)=>{Z.off("error",j);let Y=X.code;if(Y==="EPIPE"||Y==="ERR_STREAM_DESTROYED"){Q();return}J(X)};Z.once("error",j),Z.end(W,(X)=>{if(Z.off("error",j),X){let Y=X.code;if(Y==="EPIPE"||Y==="ERR_STREAM_DESTROYED"){Q();return}J(X);return}Q()})})}async function k6($,W){let Z=Ky(W.command,{env:W.env,debugRole:"hook"});if(!Array.isArray(Z)||Z.length===0)throw Error("runSubprocessEvent requires a non-empty command");let Q=!!W.detached,J=Gy(Z[0],Z.slice(1),{cwd:W.cwd,env:Fy(W.env),stdio:Q?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Q,windowsHide:!0}),j=new Promise((K)=>{J.once("spawn",()=>{try{W.onSpawn?.({command:Z,pid:J.pid??void 0,detached:Q})}catch{}K()})}),X=new Promise((K,F)=>{J.once("error",(A)=>{F(Uy(A,Z))})});if(await Dy(J,JSON.stringify($)),Q){await Promise.race([j,X]),J.unref();return}if(!J.stdout||!J.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let Y="",V="",B=!1,H;J.stdout.on("data",(K)=>{Y+=K.toString()}),J.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((W.timeoutMs??0)>0)H=setTimeout(()=>{B=!0,J.kill("SIGKILL")},W.timeoutMs);J.once("close",(F)=>{if(H)clearTimeout(H);let{parsedJson:A,parseError:D}=Ay(Y);K({exitCode:F,stdout:Y,stderr:V,parsedJson:A,parseError:D,timedOut:B})})});return await Promise.race([G,X])}var fy=J8.object({contextModification:J8.string().optional(),cancel:J8.boolean().optional(),review:J8.boolean().optional(),errorMessage:J8.string().optional(),context:J8.string().optional(),overrideInput:J8.unknown().optional()}).passthrough();var Ly=["agent","hook"];async function x6($,W={}){let Z=W.command??Ly;return await k6($,{command:Z,cwd:W.cwd,env:W.env,detached:W.detached,timeoutMs:W.timeoutMs,onSpawn:W.onSpawn})}function vU($){return $ instanceof Error?$:Error(String($))}function Oy($){if(!$||typeof $!=="object")return;let W=fy.safeParse($);if(!W.success)return;let Z=W.data;if(!(("cancel"in Z)||("review"in Z)||("context"in Z)||("contextModification"in Z)||("overrideInput"in Z)||("errorMessage"in Z)))return;let J=typeof Z.context==="string"?Z.context:typeof Z.contextModification==="string"?Z.contextModification:typeof Z.errorMessage==="string"&&Z.errorMessage.length>0?Z.errorMessage:void 0;return{cancel:typeof Z.cancel==="boolean"?Z.cancel:void 0,review:typeof Z.review==="boolean"?Z.review:void 0,context:J,overrideInput:Object.hasOwn(Z,"overrideInput")?Z.overrideInput:void 0}}function mU($){if(!$||typeof $!=="object")return{};let W={};for(let[Z,Q]of Object.entries($))if(typeof Q==="string")W[Z]=Q;else W[Z]=JSON.stringify(Q);return W}function B$($,W,Z){let Q=Z.env??process.env,J=Q.CLINE_USER_ID?.trim()||Q.USER?.trim()||"unknown",j=Z.cwd||process.cwd();return{clineVersion:Q.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:W.conversationId,sessionContext:_y(Z.sessionContext,{hookName:$,conversationId:W.conversationId,agentId:W.agentId,parentAgentId:W.parentAgentId}),workspaceRoots:j?[j]:[],workspaceInfo:Z.workspaceInfo,userId:J,agent_id:W.agentId,parent_agent_id:W.parentAgentId}}function Ty($){return{name:$.name,message:$.message,stack:$.stack}}function zy($){let W=String($??"").toLowerCase();return W.includes("cancel")||W.includes("abort")||W.includes("interrupt")}function qy($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function My($){return $.filter((W)=>W.type==="text"&&typeof W.text==="string").map((W)=>W.text).join("")}function Ry($){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 Ny($){if(!$)return;let W={};if($.cancel===!0)W.stop=!0;if($.overrideInput!==void 0)W.input=$.overrideInput;return Object.keys(W).length>0?W:void 0}async function j8($,W){try{let Z=await x6($,{command:W.command,cwd:W.cwd,env:W.env,detached:!0,onSpawn:W.onSpawn});W.onDispatch?.({payload:$,result:Z,detached:!0})}catch(Z){W.onDispatchError?.(vU(Z),$)}}function CQ($={}){return{hooks:{beforeRun:async(Y)=>{let V=qy(Y);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...B$("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await j8(H,$)}else{let H={...B$("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await j8(H,$)}return},beforeTool:async(Y)=>{let V={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},B={...B$("tool_call",V,$),hookName:"tool_call",iteration:Y.snapshot.iteration,tool_call:{id:Y.toolCall.toolCallId,name:Y.toolCall.toolName,input:Y.input},preToolUse:{toolName:Y.toolCall.toolName,parameters:mU(Y.input)}};try{let H=await x6(B,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:B,result:H,detached:!1}),H?.timedOut)throw Error("tool_call hook command timed out");if(H?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${H.parseError}`);return Ny(Oy(H?.parsedJson))}catch(H){$.onDispatchError?.(vU(H),B);return}},afterTool:async(Y)=>{let V=Ry(Y),B={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},H={...B$("tool_result",B,$),hookName:"tool_result",iteration:Y.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:mU(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await j8(H,$);return},afterRun:async({snapshot:Y,result:V})=>{let B={agentId:Y.agentId,conversationId:Y.conversationId??Y.runId??Y.agentId,parentAgentId:Y.parentAgentId??null};if(V.status==="completed"){let K={...B$("agent_end",B,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await j8(K,$);return}let H=V.status==="aborted"||zy(V.error?.message)?"agent_abort":"agent_error",G=H==="agent_error"?{...B$(H,B,$),hookName:H,iteration:V.iterations,error:Ty(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...B$(H,B,$),hookName:H,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await j8(G,$)},onEvent:async(Y)=>{if(Y.type!=="message-added"||Y.message.role!=="user")return;let V={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},B={...B$("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:My(Y.message.content),attachments:[]}};await j8(B,$)}},shutdown:async({agentId:Y,conversationId:V,parentAgentId:B,reason:H})=>{let G={...B$("session_shutdown",{agentId:Y,conversationId:V,parentAgentId:B},$),hookName:"session_shutdown",reason:H};await j8(G,$)}}}var Z_={};w(Z_,{writeHubDiscovery:()=>GQ,withHubStartupLock:()=>KQ,verifyHubConnection:()=>w1,truncateNotificationBody:()=>fW,toHubStatusUrl:()=>Kj,toHubHealthUrl:()=>FQ,stopLocalHubServerGracefully:()=>Mj,startHubWebSocketServer:()=>V8,startHubServer:()=>$_,spawnDetachedHubServerWithRetry:()=>O6,spawnDetachedHubServer:()=>fj,sendHubCommand:()=>iU,restartLocalHubIfIdleAfterStartupTimeout:()=>fQ,resolveWorkspaceHubOwnerContext:()=>TA,resolveSharedHubOwnerContext:()=>v0,resolveProductionHubOwnerContext:()=>Q1,resolveHubUrl:()=>WX,resolveHubOwnerContext:()=>J$,resolveHubEndpointOptions:()=>Z1,resolveHubBuildId:()=>HQ,resolveDefaultHubPort:()=>L6,resolveDefaultHubPathname:()=>_j,resolveDefaultHubHost:()=>Dj,resolveCompatibleLocalHubUrl:()=>WW,resolveClineDir:()=>_A,resolveClineDataDir:()=>n2,requestHubShutdown:()=>$W,rememberRecoverableLocalHubUrl:()=>l$,readHubDiscovery:()=>O0,readBearerToken:()=>gQ,probeHubServer:()=>j$,probeHubConnection:()=>rU,prewarmDetachedHubServer:()=>UQ,normalizeHubWebSocketUrl:()=>p$,isLocalHubOrigin:()=>MX,isLocalHubHostName:()=>mQ,isHubReconnectableTransportError:()=>zj,isHubCommandTimeoutError:()=>_Q,isDiscoveryFilePresent:()=>LA,ensureHubWebSocketServer:()=>vQ,ensureHubServer:()=>W_,ensureDetachedHubServer:()=>EA,ensureCompatibleLocalHubUrl:()=>s2,createLocalHubScheduleRuntimeHandlers:()=>cQ,createInMemoryHubOwnerContext:()=>fA,createHubServerUrl:()=>_1,createHubAuthToken:()=>BQ,createConfiguredTelemetryService:()=>H$,createConfiguredTelemetryHandle:()=>n$,connectToHub:()=>bQ,clearHubDiscovery:()=>m0,NodeHubClient:()=>f1,NativeHubTransportAdapter:()=>qW,HubUIClient:()=>JX,HubTransportError:()=>y0,HubSessionClient:()=>QX,HubServerTransport:()=>d6,HubScheduleService:()=>m6,HubScheduleCommandService:()=>g6,HubCommandError:()=>T6,DEFAULT_HUB_PORT:()=>Aj,DEFAULT_HUB_PATHNAME:()=>Uj,DEFAULT_HUB_HOST:()=>Fj,BrowserWebSocketHubAdapter:()=>zW});import{createSessionId as Ey}from"@cline/shared";function J1($,W){return{version:$.version,requestId:$.requestId,ok:!0,payload:W}}function uU($,W,Z){return{version:$.version,requestId:$.requestId??Ey("hubreq_"),ok:!1,error:{code:W,message:Z}}}class g6{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return J1($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return J1($,{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 J1($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return J1($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return J1($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return J1($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return J1($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return J1($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return J1($,{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 J1($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return J1($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return J1($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return uU($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(W){return uU($,"schedule_command_failed",W instanceof Error?W.message:String(W))}}toCreateInput($){let W=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:W}}toUpdateInput($){let W=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:W}}}function SQ($){return $?new Date($).getTime():void 0}function wy($){let W=$.metadata?{...$.metadata}:void 0;if(W)delete W.__hubScheduleCreatedBy,delete W.__hubScheduleCwd,delete W.__hubRuntimeOptions;return W}function PQ($){let W=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof W?.__hubScheduleCwd==="string"?W.__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 W?.__hubScheduleCreatedBy==="string"?W.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:W?.__hubRuntimeOptions&&typeof W.__hubRuntimeOptions==="object"&&!Array.isArray(W.__hubRuntimeOptions)?W.__hubRuntimeOptions:void 0,metadata:wy($)}}function Cy($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function sj($,W){return{executionId:$.runId,scheduleId:W,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:SQ($.startedAt),endedAt:SQ($.completedAt),status:Cy($.status),errorMessage:$.error}}class m6{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new a5({dbPath:$.dbPath}),this.materializer=new l5({store:this.store}),this.runner=new p5({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(aJ($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return PQ(this.store.createHubSchedule($))}getSchedule($){let W=this.store.getHubSchedule($);return W?PQ(W):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((W)=>PQ(W))}updateSchedule($,W){if(W.cronPattern!==void 0)aJ(W.cronPattern);let Z=this.store.getHubSchedule($);if(!Z)return;let Q=W.workspaceRoot!==void 0?W.workspaceRoot.trim():Z.workspaceRoot;if((W.enabled??Z.enabled)&&!Q)throw Error("workspaceRoot is required for enabled schedules");let j=this.store.updateHubSchedule($,{...W,scheduleId:$});return j?PQ(j):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let W=this.store.enqueueHubScheduleRun($,"manual");if(!W)return;await this.runner.tick();let Z=this.store.getRun(W.runId)??W;return sj(Z,$)}triggerScheduleNowDetached($){let W=this.store.enqueueHubScheduleRun($,"manual");if(!W)return;return this.runner.tick().catch(()=>{return}),sj(W,$)}listScheduleExecutions($){let W=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Z={specId:W?.specId,limit:$.limit};return this.store.listRuns(Z).map((J)=>{let j=W??this.store.getSpec(J.specId);if(!j||j.source!=="hub-schedule")return;return sj(J,j.externalId)}).filter((J)=>{if(!J)return!1;return!$.status||J.status===$.status})}getScheduleStats($){let W=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(W.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Z=0,Q=0,J=0,j;for(let X of W){if(X.status==="success"||X.status==="completed")Z+=1;if(!j&&X.status!=="success"&&X.status!=="completed")j=X;if(X.startedAt&&X.endedAt)J+=X.endedAt-X.startedAt,Q+=1}return{totalRuns:W.length,successRate:Z/W.length,avgDurationSeconds:Q>0?J/Q/1000:0,lastFailure:j}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let W=this.store.getSpec($.specId);if(!W||W.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:W.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:W.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+W.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let W={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(W).flatMap((Z)=>Z.source==="hub-schedule"&&Z.nextRunAt?[{spec:Z,nextRunAt:Z.nextRunAt}]:[]).sort((Z,Q)=>String(Z.nextRunAt).localeCompare(String(Q.nextRunAt))).slice(0,$).map(({spec:Z,nextRunAt:Q})=>({scheduleId:Z.externalId,name:Z.title,nextRunAt:Q}))}}_W();import{resolveClineBuildEnv as ty}from"@cline/shared";function ey($,W){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Z=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Z?`Failed to connect to hub at ${W} (${Z} event before socket open).`:`Failed to connect to hub at ${W}.`)}var $h="cline-hub-auth.";function Wh($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function Zh($,W){let Z=new URL($),Q=new URL(W);return Z.search="",Z.hash="",Q.search="",Q.hash="",Z.toString()===Q.toString()}function pU(){return ty()==="production"?Q1():v0()}async function Qh($){let W=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),W)return W;let Z=pU(),Q=await O0(Z.discoveryPath);if(Q?.url&&Zh($.toString(),Q.url))return Q.authToken;return}async function WX($={}){let W=Z1($);if(!Wh($)){let Z=pU(),Q=await O0(Z.discoveryPath);if(Q?.url)return Q.url}return _1(W.host,W.port,W.pathname)}async function bQ($){return await new Promise((W,Z)=>{(async()=>{let Q=new URL($),J=await Qh(Q);Q.hash="";let j=new WebSocket(Q.toString(),J?[`${$h}${J}`]:void 0),X=new Map,Y=0;j.addEventListener("open",()=>{W({send(V){let B=V.requestId??`hub-client-${++Y}`;return new Promise((H,G)=>{X.set(B,{resolve:H,reject:G});let K={kind:"command",envelope:{...V,requestId:B}};j.send(JSON.stringify(K))})},close(){j.close()}})}),j.addEventListener("message",(V)=>{let B=JSON.parse(String(V.data));if(B.kind==="reply"&&B.envelope.requestId){let H=X.get(B.envelope.requestId);if(H)X.delete(B.envelope.requestId),H.resolve(B.envelope)}}),j.addEventListener("close",()=>{for(let V of X.values())V.reject(Error("Hub connection closed"));X.clear()}),j.addEventListener("error",(V)=>{Z(ey(V,$))})})().catch(Z)})}async function rU($){try{return(await bQ($)).close(),!0}catch{return!1}}async function iU($,W){let Z=await WX($),Q=await bQ(Z);try{return await Q.send({version:W.version??"v1",clientId:W.clientId??"hub-client",...W})}finally{Q.close()}}function ZX($){return $?JSON.parse(JSON.stringify($)):{}}function yQ($){let W=$?.session&&typeof $.session==="object"?$.session:void 0;if(!W)return;let Z=W.metadata&&typeof W.metadata==="object"?ZX(W.metadata):void 0;return{sessionId:typeof W.sessionId==="string"?W.sessionId:"",parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,metadata:Z}}function nU($,W){return $.error?.message??`hub command failed: ${W}`}function Jh($){let W=ZX($);if(typeof W.error==="string"&&W.error.trim())return{...W,error:W.error.trim()};let Z=W.result&&typeof W.result==="object"?W.result:void 0;if(typeof Z?.text==="string"&&Z.text.trim())return{...W,error:Z.text.trim()};let Q=Z?.error&&typeof Z.error==="object"?Z.error:void 0;if(typeof Q?.message==="string"&&Q.message.trim())return{...W,error:Q.message.trim()};return W}function aU($){let W=$?.sessionId;return typeof W==="string"&&W.trim()?W.trim():void 0}function jh($){let W=$?.checkpoint;if(!W||typeof W!=="object"||Array.isArray(W))throw Error("hub checkpoint restore returned no checkpoint");let Z=W;if(typeof Z.ref!=="string"||typeof Z.createdAt!=="number"||typeof Z.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Z}function Xh($){let W=ZX($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||aU(W)||"",eventType:"schedule.execution.completed",payload:W};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||aU(W)||"",eventType:"schedule.execution.failed",payload:W};let Z=$.sessionId?.trim();if(!Z)return;switch($.event){case"iteration.started":return{sessionId:Z,eventType:"runtime.chat.iteration_start",payload:W};case"iteration.finished":return{sessionId:Z,eventType:"runtime.chat.iteration_end",payload:W};case"assistant.delta":return{sessionId:Z,eventType:"runtime.chat.text_delta",payload:W};case"usage.updated":return{sessionId:Z,eventType:"runtime.chat.usage",payload:W};case"session.notice":return{sessionId:Z,eventType:"runtime.chat.notice",payload:W};case"tool.started":return{sessionId:Z,eventType:"runtime.chat.tool_call_start",payload:W};case"tool.finished":return{sessionId:Z,eventType:"runtime.chat.tool_call_end",payload:W};case"approval.requested":return{sessionId:Z,eventType:"approval.requested",payload:W};case"run.aborted":return{sessionId:Z,eventType:"runtime.chat.aborted",payload:W};case"run.failed":return{sessionId:Z,eventType:"runtime.chat.failed",payload:Jh($.payload)};case"run.completed":return{sessionId:Z,eventType:"runtime.chat.completed",payload:W};default:return}}class QX{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new f1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-session-client",displayName:$.displayName??"hub session client",workspaceRoot:$.workspaceRoot,cwd:$.cwd})}async ensureMetadataApplied(){if(this.metadataApplied||!this.options.metadata){if(!this.options.metadata)await this.client.connect();return}await this.client.connect(),await this.client.command("client.update",{metadata:this.options.metadata}),this.metadataApplied=!0}async connect(){await this.ensureMetadataApplied()}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession($){await this.ensureMetadataApplied();let W=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),Z=yQ(W.payload);if(!Z?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Z.sessionId,startResult:{sessionId:Z.sessionId,manifestPath:"",messagesPath:Z.messagesPath??""}}}async sendRuntimeSession($,W,Z){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:W.prompt,mode:W.config.mode,attachments:W.attachments,delivery:W.delivery,timeoutSeconds:W.config.timeoutSeconds},$,Z)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let W;try{W=await this.client.command("session.get",void 0,$)}catch(Z){if(Q$(Z))return;throw Z}return yQ(W.payload)}async readMessages($){let W=$.trim();if(!W)return[];await this.ensureMetadataApplied();let Z=await this.client.command("session.messages",{sessionId:W},W);if(!Z.ok)throw Error(nU(Z,"session.messages"));let Q=Z.payload?.messages;return Array.isArray(Q)?Q:[]}async restore($){let W=$.sessionId.trim();if(!W)throw Error("sessionId is required");let Z=$.restore?.messages!==!1;if(Z&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let Q=$.config,J=await this.client.command("session.restore",{sessionId:W,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Q?{workspaceRoot:Q.workspaceRoot,cwd:Q.cwd,sessionConfig:{providerId:Q.provider,modelId:Q.model,apiKey:Q.apiKey,cwd:Q.cwd??Q.workspaceRoot,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:Q.mode??"act",rules:Q.rules,maxIterations:Q.maxIterations,enableTools:Q.enableTools,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},metadata:{source:Q.source??"cli",provider:Q.provider,model:Q.model,enableTools:Q.enableTools,enableSpawn:Q.enableSpawn,enableTeams:Q.enableTeams,prompt:void 0,interactive:Q.interactive!==!1},runtimeOptions:{mode:Q.mode,systemPrompt:Q.systemPrompt,maxIterations:Q.maxIterations,enableTools:Q.enableTools,enableSpawn:Q.enableSpawn,enableTeams:Q.enableTeams,autoApproveTools:Q.autoApproveTools,configExtensions:Q.configExtensions},modelSelection:{provider:Q.provider,model:Q.model,apiKey:Q.apiKey},toolPolicies:Q.toolPolicies}:{}},W);if(!J.ok)throw Error(nU(J,"session.restore"));let j=yQ(J.payload);if(Z&&!j?.sessionId)throw Error("hub checkpoint restore returned no session id");let X=Array.isArray(J.payload?.messages)?J.payload.messages:void 0,Y=jh(J.payload);return{sessionId:j?.sessionId,startResult:j?.sessionId?{sessionId:j.sessionId,manifestPath:"",messagesPath:j.messagesPath??""}:void 0,...X?{messages:X}:{},checkpoint:Y}}async listSessions($){await this.ensureMetadataApplied();let W=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(W.payload?.sessions)?W.payload?.sessions:[]).map((Q)=>yQ({session:Q})).filter((Q)=>Boolean(Q?.sessionId))}async deleteSession($,W=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:W})).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($,W){let Z=new Set(($.sessionIds??[]).map((J)=>J.trim()).filter(Boolean)),Q=this.client.subscribe((J)=>{let j=Xh(J);if(!j)return;if(Z.size>0&&!Z.has(j.sessionId))return;W.onEvent?.(j)});return this.ensureMetadataApplied().catch((J)=>{W.onError?.(J instanceof Error?J:Error(String(J)))}),Q}streamTeamProgress($,W){let Z=this.client.subscribe((Q)=>{if(Q.event!=="team.progress"||!Q.payload)return;W.onProjection?.(Q.payload)});return this.ensureMetadataApplied().catch((Q)=>{W.onError?.(Q instanceof Error?Q:Error(String(Q)))}),Z}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let W=await this.client.command("schedule.list");return Array.isArray(W.payload?.schedules)?W.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,W){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...W})).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($,W){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list_executions",{scheduleId:$,limit:W});return Array.isArray(Z.payload?.executions)?Z.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let W=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(W.payload?.upcoming)?W.payload?.upcoming:[]}}class JX{client;constructor($){this.client=new f1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let W=await this.client.command("session.list",{limit:$});return Array.isArray(W.payload?.sessions)?W.payload.sessions:[]}subscribeUI($){return this.client.subscribe((W)=>{switch(W.event){case"ui.notify":$.onNotify?.(W.payload);break;case"ui.show_window":$.onShowWindow?.(W.payload);break;case"hub.client.registered":$.onClientRegistered?.(W.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(W.payload??{});break;case"session.created":$.onSessionCreated?.(W.payload??{});break;case"session.updated":$.onSessionUpdated?.(W.payload??{});break;case"session.detached":$.onSessionDetached?.(W.payload??{});break}})}}import{resolveClineBuildEnv as tD}from"@cline/shared";function Yh($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Z)=>{if(Z&&typeof Z==="object"&&"type"in Z&&Z.type==="text"&&"text"in Z&&typeof Z.text==="string")return Z.text.trim();return""}).filter(Boolean).join(`
|
|
588
|
-
`).trim()||void 0}var oU=120,jX="...";function fW($){let W=$.trim();if(!W)return"";if(Buffer.byteLength(W,"utf8")<=oU)return W;let Z=oU-Buffer.byteLength(jX,"utf8");if(Z<=0)return jX;let Q="";for(let J of W){if(Buffer.byteLength(Q+J,"utf8")>Z)break;Q+=J}return`${Q}${jX}`}async function sU($){let W=$?.sessionId?.trim()||"unknown",Z=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await d$(Z)].reverse().find((V)=>V.role==="assistant"),j=J?Yh(J.content):void 0,X=$?.workspaceRoot?.trim()||"workspace",Y=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():X;return{title:`Task completed (${W})`,body:fW(j&&j.length>0?j:Y.length>0?Y:X),severity:"info"}}import{captureSdkError as xQ,createSessionId as Bk}from"@cline/shared";import{createSessionId as Gh}from"@cline/shared";import{createSessionId as Hh}from"@cline/shared";function Vh($){switch($){case"idle":return"idle";case"pending":return"pending";case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function Bh($){let W=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())W.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())W.parentAgentId=$.parentAgentId;if($.agentId?.trim())W.agentId=$.agentId;if($.conversationId?.trim())W.conversationId=$.conversationId;if($.messagesPath?.trim())W.messagesPath=$.messagesPath;if($.prompt?.trim())W.prompt=$.prompt;if($.provider?.trim())W.provider=$.provider;if($.model?.trim())W.model=$.model;if($.source?.trim())W.source=$.source;if(typeof $.pid==="number")W.pid=$.pid;return Object.keys(W).length>0?W:void 0}function hQ($,W,Z,Q){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:W?.createdByClientId??"hub",status:Vh($.status),participants:W?[...W.participants.values()]:[],metadata:Bh($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Z?{usage:{...Z}}:{},...Q?{aggregateUsage:{...Q}}:{}}}function u($,W){return{version:$.version,requestId:$.requestId,ok:!0,...W!==void 0?{payload:W}:{}}}function h($,W,Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:W,message:Z}}}function u6($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function S0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function X8($,W,Z){return{version:"v1",event:$,eventId:Hh("hevt_"),sessionId:Z,timestamp:Date.now(),payload:W}}async function b0($,W){let Z=await $.sessionHost.getSession(W);if(!Z)return;let Q=await $.sessionHost.getAccumulatedUsage?.(W);return hQ(Z,$.sessionState.get(W),Q?.usage,Q?.aggregateUsage)}async function u0($,W){let Z=await $.sessionHost.getSession(W);if(!Z)return;let[Q,J]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(W):[],$.sessionHost.getAccumulatedUsage?.(W)]);return C1({session:Z,messages:Q,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function XX($,W,Z,Q,J={}){let j=$.sessionState.get(W);if(j){if(J.interactive!==void 0)j.interactive=J.interactive;if(Q==="creator"&&!j.createdByClientId)j.createdByClientId=Z;if(!j.participants.has(Z))j.participants.set(Z,{clientId:Z,attachedAt:Date.now(),role:Q});return j}let X={createdByClientId:Z,interactive:J.interactive??!0,participants:new Map([[Z,{clientId:Z,attachedAt:Date.now(),role:Q}]])};return $.sessionState.set(W,X),X}function tU($,W,Z,Q,J={}){let j=$.sessionState.get(W);if(j){if(J.interactive!==void 0)j.interactive=J.interactive;if(!j.participants.has(Z))j.participants.set(Z,{clientId:Z,attachedAt:Date.now(),role:Q});return j}let X={interactive:J.interactive??!0,participants:new Map([[Z,{clientId:Z,attachedAt:Date.now(),role:Q}]])};return $.sessionState.set(W,X),X}async function YX($,W){let Z=Gh("approval_"),Q=W.sessionId;if($.sessionState.get(Q)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((j)=>{$.pendingApprovals.set(Z,{sessionId:Q,resolve:j}),$.publish($.buildEvent("approval.requested",{approvalId:Z,sessionId:W.sessionId,agentId:W.agentId,conversationId:W.conversationId,iteration:W.iteration,toolCallId:W.toolCallId,toolName:W.toolName,inputJson:JSON.stringify(W.input??null),policy:W.policy},Q))})}function VX($,W,Z){let Q=$.pendingApprovals.get(W);if(!Q)return;return $.pendingApprovals.delete(W),Q.resolve(Z),{sessionId:Q.sessionId}}function BX($,W,Z){let Q=0;for(let[J,j]of[...$.pendingApprovals.entries()]){if(!W({approvalId:J,sessionId:j.sessionId}))continue;$.pendingApprovals.delete(J),j.resolve({approved:!1,reason:Z}),$.publish($.buildEvent("approval.resolved",{approvalId:J,approved:!1,cancelled:!0,reason:Z},j.sessionId)),Q+=1}return Q}async function eU($,W){let Z=typeof W.payload?.approvalId==="string"?W.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Z))return h(W,"approval_not_found",`Unknown approval: ${Z}`);let J=typeof W.payload?.reason==="string"?W.payload.reason:W.payload?.payload&&typeof W.payload.payload==="object"&&!Array.isArray(W.payload.payload)&&typeof W.payload.payload.reason==="string"?W.payload.payload.reason:void 0,j=W.payload?.approved===!0,X=VX($,Z,{approved:j,reason:J});if(!X)return h(W,"approval_not_found",`Unknown approval: ${Z}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Z,approved:j,reason:J},X.sessionId)),u(W,{approvalId:Z,approved:j})}import{createSessionId as Ah}from"@cline/shared";function Kh($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var $D={debug:10,info:20,warn:30,error:40,silent:50};function Fh(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function i($,W,Z={}){if($D[$]<$D[Fh()])return;let Q=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:W,...Object.fromEntries(Object.entries(Z).map(([J,j])=>[J,Kh(j)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${Q}`);return}console.log(`[hub] ${Q}`)}function HX($,W){let Z=W instanceof Error?W.stack||W.message:String(W);i("error",$,{error:Z})}async function WD($,W,Z,Q,J,j){let X=Ah("capreq_"),Y=performance.now();return i("info","capability.request.start",{requestId:X,sessionId:W,capabilityName:Z,targetClientId:J}),await new Promise((V,B)=>{$.pendingCapabilityRequests.set(X,{sessionId:W,targetClientId:J,capabilityName:Z,onProgress:j,resolve:(H)=>{if(i(H.ok?"info":"warn","capability.request.end",{requestId:X,sessionId:W,capabilityName:Z,targetClientId:J,ok:H.ok,error:H.error,durationMs:Math.round(performance.now()-Y)}),!H.ok){B(Error(H.error||`Capability ${Z} was rejected by ${J}.`));return}V(H.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:X,targetClientId:J,capabilityName:Z,payload:Q},W)),i("info","capability.request.published",{requestId:X,sessionId:W,capabilityName:Z,targetClientId:J})})}function ZD($,W){let Z=typeof W.payload?.requestId==="string"?W.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(Z);if(!Q)return h(W,"capability_not_found",`Unknown capability request: ${Z}`);if((W.clientId?.trim()||"")!==Q.targetClientId)return h(W,"capability_wrong_client",`Capability request ${Z} is owned by ${Q.targetClientId}`);if(W.sessionId?.trim()&&W.sessionId.trim()!==Q.sessionId)return h(W,"capability_wrong_session",`Capability request ${Z} belongs to session ${Q.sessionId}`);let j=W.payload?.payload&&typeof W.payload.payload==="object"&&!Array.isArray(W.payload.payload)?W.payload.payload:{};return Q.onProgress?.(j),u(W,{requestId:Z})}function a$($,W,Z){let Q=0;for(let[J,j]of[...$.pendingCapabilityRequests.entries()]){if(!W({requestId:J,...j}))continue;$.pendingCapabilityRequests.delete(J),i("warn","capability.request.cancelled",{requestId:J,sessionId:j.sessionId,capabilityName:j.capabilityName,targetClientId:j.targetClientId,reason:Z}),j.resolve({ok:!1,error:Z}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:j.capabilityName,targetClientId:j.targetClientId,ok:!1,cancelled:!0,error:Z},j.sessionId)),Q+=1}return Q}async function QD($,W){let Z=typeof W.payload?.sessionId==="string"?W.payload.sessionId.trim():W.sessionId?.trim()||"",Q=typeof W.payload?.capabilityName==="string"?W.payload.capabilityName.trim():"",J=typeof W.payload?.targetClientId==="string"?W.payload.targetClientId.trim():"";if(!Z||!Q||!J)return h(W,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let j=W.payload?.payload&&typeof W.payload.payload==="object"&&!Array.isArray(W.payload.payload)?W.payload.payload:{},X=await $.requestCapability(Z,Q,j,J);return u(W,X)}catch(j){return h(W,"capability_request_failed",j instanceof Error?j.message:String(j))}}function JD($,W){let Z=typeof W.payload?.requestId==="string"?W.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(Z);if(!Q)return h(W,"capability_not_found",`Unknown capability request: ${Z}`);let J=W.clientId?.trim()||"";if(J!==Q.targetClientId)return h(W,"capability_wrong_client",`Capability request ${Z} is owned by ${Q.targetClientId}`);if(W.sessionId?.trim()&&W.sessionId.trim()!==Q.sessionId)return h(W,"capability_wrong_session",`Capability request ${Z} belongs to session ${Q.sessionId}`);$.pendingCapabilityRequests.delete(Z);let j=W.payload?.payload&&typeof W.payload.payload==="object"&&!Array.isArray(W.payload.payload)?W.payload.payload:void 0,X=typeof W.payload?.error==="string"?W.payload.error:void 0,Y=W.payload?.ok===!0;return i(Y?"info":"warn","capability.respond",{requestId:Z,sessionId:Q.sessionId,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,respondedByClientId:J,ok:Y,error:X}),Q.resolve({ok:Y,payload:j,error:X}),$.publish($.buildEvent("capability.resolved",{requestId:Z,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,respondedByClientId:J,ok:Y,payload:j,error:X},Q.sessionId)),u(W,{requestId:Z,ok:Y})}import{createSessionId as Uh}from"@cline/shared";function jD($,W){let Z=W.payload,Q=Z?.clientId?.trim()||W.clientId?.trim()||Uh("client_");return $.clients.set(Q,{clientId:Q,clientType:Z?.clientType??"unknown",displayName:Z?.displayName,actorKind:Z?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Z?.transport??"native",capabilities:Z?.capabilities??[],metadata:Z?.metadata,workspaceContext:Z?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:Q,clientType:Z?.clientType??"unknown",displayName:Z?.displayName,connectedAt:Date.now()})),u(W,{clientId:Q})}function XD($,W){let Z=W.clientId?.trim(),Q=Z?$.clients.get(Z):void 0;if(!Z||!Q)return h(W,"client_not_found","Client is not registered with this hub.");let J=u6(W.payload?.metadata);if(Q.lastSeenAt=Date.now(),J)Q.metadata=JSON.parse(JSON.stringify(J));return u(W)}function YD($,W,Z){let Q=W.clientId?.trim();if(Q)$.clients.delete(Q),Z(Q),$.publish($.buildEvent("hub.client.disconnected",{clientId:Q}));return u(W)}function VD($,W){return u(W,{clients:[...$.clients.values()]})}D0();import{existsSync as GD,mkdirSync as Dh,readdirSync as _h,readFileSync as fh,rmSync as Lh,writeFileSync as Oh}from"node:fs";import{dirname as Th,join as BD}from"node:path";import{CONNECTOR_PLATFORMS as zh,connectorChannelsFromPlatforms as qh,listConnectorCatalog as KD,shouldIncludeConnectorField as Mh}from"@cline/shared";import{resolveConnectorDataDir as Rh,resolveConnectorSettingsPath as KX}from"@cline/shared/storage";var Nh=1,HD={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},Eh={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 o$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function LW($){return typeof $==="string"?$.trim():void 0}function FD($){if(!GD($))return;try{let W=JSON.parse(fh($,"utf8"));return o$(W)?W:void 0}catch{return}}function FX(){let $=FD(KX()),W=o$($?.connectors)?$.connectors:{},Z={};for(let[Q,J]of Object.entries(W)){if(!o$(J))continue;let j=LW(J.type),X=LW(J.configuredAt),Y=LW(J.updatedAt);if(!j||!X||!Y)continue;let V=kQ(J.values),B=o$(J.security)?{enabled:J.security.enabled===!0,values:kQ(J.security.values)}:void 0;Z[Q]={type:j,values:V,security:B,configuredAt:X,updatedAt:Y}}return{version:Nh,connectors:Z}}function AD($){let W=KX();Dh(Th(W),{recursive:!0}),Oh(W,`${JSON.stringify($,null,2)}
|
|
589
|
-
`,"utf8")}function kQ($){if(!o$($))return{};let W={};for(let[Z,Q]of Object.entries($))if(typeof Q==="string")W[Z]=Q.trim();return W}function wh($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function Ch($){let W=BD(Rh(),$);if(!GD(W))return[];return _h(W).filter((Z)=>Z.endsWith(".json")&&!Z.endsWith(".threads.json")).map((Z)=>BD(W,Z))}function Ph($,W,Z){let Q=W.botUsername??W.userName??W.applicationId??W.phoneNumberId??String(Z);return`${$}:${Q}`}function Sh($,W){let Z=FD(W);if(!Z)return;let Q=typeof Z.pid==="number"?Z.pid:void 0,J=typeof Z.hubUrl==="string"?Z.hubUrl:typeof Z.rpcAddress==="string"?Z.rpcAddress:void 0;if(!Q||!J||!wh(Q))return;let j=Eh[$];if(!j)return;let X={};for(let Y of j.required){let V=HD[Y](Z);if(!V||typeof V==="string"&&!V.trim())return;X[Y]=V}for(let Y of j.optional){let V=HD[Y](Z);if(V!==void 0)X[Y]=V}return{id:Ph($,X,Q),type:$,pid:Q,hubUrl:J,...X}}function bh(){let $=[];for(let{name:W}of KD())for(let Z of Ch(W)){let Q=Sh(W,Z);if(Q)$.push(Q)}return $.sort((W,Z)=>{if(W.type!==Z.type)return W.type.localeCompare(Z.type);let Q=W.botUsername??W.userName??"",J=Z.botUsername??Z.userName??"";return Q.localeCompare(J)})}function yh(){let $=FX();return Object.entries($.connectors).map(([W,Z])=>({id:W,type:Z.type,configuredAt:Z.configuredAt,updatedAt:Z.updatedAt})).sort((W,Z)=>W.type.localeCompare(Z.type))}function AX(){return{available:qh(),active:bh(),configured:yh()}}function hh($,W){if($.required&&!W[$.flag]?.trim())throw Error(`${$.label} is required`)}function kh($,W){let Z={};for(let J of $.fields)Z[J.flag]=W[J.flag]??J.initialValue??"";let Q={};for(let J of $.fields){if(!Mh(J,Z))continue;hh(J,Z),Q[J.flag]=Z[J.flag]}return Q}function Ih($){if(!o$($))throw Error("connector.configure payload must be an object.");let W=LW($.channel);if(!W)throw Error("channel is required");let Z=zh.find((K)=>K.id===W);if(!Z)throw Error(`unknown connector channel: ${W}`);if(!new Set(KD().map((K)=>K.name)).has(Z.id))throw Error(`connector channel is not available: ${W}`);let J=kQ($.values),j=kh(Z,J),X=o$($.security)?$.security:{},Y=X.enabled===!0,V=kQ(X.values);if(Y&&Z.security)for(let K of Z.security.fields){let F=V[K.key];if(!F)throw Error(K.requiredMessage);let A=K.validate?.(F);if(A)throw Error(A)}let B=FX(),H=new Date().toISOString(),G=B.connectors[W];return B.connectors[W]={type:W,values:j,security:Y?{enabled:!0,values:V}:{enabled:!1,values:{}},configuredAt:G?.configuredAt??H,updatedAt:H},AD(B),AX()}function xh($){if(!o$($))throw Error("connector.delete_config payload must be an object.");let W=LW($.channel);if(!W)throw Error("channel is required");let Z=FX();if(delete Z.connectors[W],Object.keys(Z.connectors).length>0)AD(Z);else Lh(KX(),{force:!0});return AX()}function gh($){return $==="connector.configure"||$==="connector.delete_config"}function GX($,W,Z){if(!gh(W.command))return;_8($.telemetry,{ulid:W.sessionId??W.requestId??"hub",tool:W.command,success:Z})}async function UD($,W){try{if(W.command==="connector.channels")return u(W,AX());if(W.command==="connector.configure"){let Z=Ih(W.payload);return GX($,W,!0),u(W,Z)}if(W.command==="connector.delete_config"){let Z=xh(W.payload);return GX($,W,!0),u(W,Z)}return h(W,"unsupported_connector_command",`unsupported connector command: ${W.command}`)}catch(Z){return GX($,W,!1),h(W,"connector_command_failed",Z instanceof Error?Z.message:String(Z))}}var mh=30000;function vh($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function ch($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function uh($,W,Z){let Q=Z instanceof Error&&Z.message.trim()?Z.message:`Unknown session: ${W}`;return h($,l2,Q)}function dh($){return $?$:void 0}function lh($){let W=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(W&&Number.isFinite(W)&&W>0)return Math.floor(W);let Z=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(Z&&Number.isFinite(Z)&&Z>0)return Math.floor(Z*1000);return}async function ph($,W,Z,Q){let J=performance.now(),j=!1,X={command:W.command,requestId:W.requestId,clientId:W.clientId,sessionId:Z.sessionId,timeoutMs:Q},Y=setInterval(()=>{if(j)return;let H=Math.round(performance.now()-J);i("warn","run.heartbeat",{...X,elapsedMs:H}),$.publish($.buildEvent("run.heartbeat",{requestId:W.requestId,elapsedMs:H,...Q?{timeoutMs:Q}:{}},Z.sessionId))},mh),V=$.sessionHost.runTurn(Z);V.then((H)=>{if(!j)return;i("warn","run.late_end",{...X,elapsedMs:Math.round(performance.now()-J),finishReason:H?.finishReason})},(H)=>{if(!j)return;i("error","run.late_error",{...X,elapsedMs:Math.round(performance.now()-J),error:H})});let B;try{if(!Q)return await V;return await Promise.race([V,new Promise((H,G)=>{B=setTimeout(()=>{let K=`Hub run ${W.command} timed out after ${Q}ms.`;j=!0,clearInterval(Y),G(Error(K)),i("error","run.timeout",{...X,elapsedMs:Math.round(performance.now()-J)}),BX($,(F)=>F.sessionId===Z.sessionId,K),a$($,(F)=>F.sessionId===Z.sessionId,K),$.sessionHost.abort(Z.sessionId,K).catch((F)=>{i("error","run.timeout_abort_failed",{...X,error:F})})},Q)})])}finally{if(j=!0,clearInterval(Y),B)clearTimeout(B)}}async function DD($,W){let Z=S0(W),Q=W.payload&&typeof W.payload==="object"?W.payload:{},J=typeof Q.prompt==="string"?Q.prompt:typeof Q.input==="string"?Q.input:"";if(!J.trim())return h(W,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Z));let j=Q.attachments&&typeof Q.attachments==="object"&&!Array.isArray(Q.attachments)?Q.attachments:void 0,X=Array.isArray(j?.userFiles)?j.userFiles.filter((H)=>typeof H==="string"):void 0,Y=lh(Q);$.suppressNextTerminalEventBySession.set(Z,"run.start.reply");let V;try{V=await ph($,W,{sessionId:Z,prompt:J,mode:dh(Q.mode),delivery:Q.delivery==="queue"||Q.delivery==="steer"?Q.delivery:void 0,userImages:Array.isArray(j?.userImages)?j.userImages:void 0,userFiles:X,timeoutMs:Y},Y)}catch(H){if($.suppressNextTerminalEventBySession.get(Z)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Z);if(Q$(H))return uh(W,Z,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Z)),H}if(V){let H=await u0($,Z),G=ch(V);if($.publish($.buildEvent(vh(V.finishReason),{reason:V.finishReason,...G?{error:G}:{},result:V,...H?{snapshot:H}:{}},Z)),$.suppressNextTerminalEventBySession.get(Z)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Z)}else $.suppressNextTerminalEventBySession.delete(Z);let B=await u0($,Z);return u(W,V||B?{...V?{result:V}:{},...B?{snapshot:B}:{}}:void 0)}async function _D($,W){let Z=S0(W),Q=typeof W.payload?.reason==="string"?W.payload.reason:"Run was aborted before pending approval or capability request was resolved.";BX($,(J)=>J.sessionId===Z,Q);try{await $.sessionHost.abort(Z,W.payload?.reason)}catch(J){i("warn","run.abort_failed",{command:W.command,requestId:W.requestId,clientId:W.clientId,sessionId:Z,error:J})}finally{a$($,(J)=>J.sessionId===Z,Q)}return u(W,{applied:!0})}async function fD($,W){let Z=I6(W.payload?.payload);if(!Z)return h(W,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Z),u(W,{applied:!0})}async function LD($,W){switch(W.type){case"chunk":return;case"agent_event":await rh($,W);return;case"hook":if(W.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:W.payload.toolName},W.payload.sessionId));else if(W.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:W.payload.toolName},W.payload.sessionId));return;case"team_progress":{let Z={type:"team_progress_projection",version:1,sessionId:W.payload.sessionId,summary:W.payload.summary,lastEvent:W.payload.lifecycle};$.publish($.buildEvent("team.progress",Z,W.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:W.payload.sessionId,prompts:W.payload.prompts},W.payload.sessionId));return;case"pending_prompt_submitted":{let Z={id:W.payload.id,prompt:W.payload.prompt,delivery:W.payload.delivery,attachmentCount:W.payload.attachmentCount,userImages:W.payload.userImages,userFiles:W.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:W.payload.sessionId,prompt:Z},W.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:W.payload.sessionId,snapshot:W.payload.snapshot},W.payload.sessionId));return;case"status":{let[Z,Q]=await Promise.all([b0($,W.payload.sessionId),u0($,W.payload.sessionId)]);if(Z)$.publish($.buildEvent("session.updated",{session:Z,...Q?{snapshot:Q}:{}},W.payload.sessionId));return}case"ended":await ih($,W);return;default:return}}async function rh($,W){let{sessionId:Z,event:Q}=W.payload;if(Q.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:Q.iteration},Z));return}if(Q.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:Q.iteration,hadToolCalls:Q.hadToolCalls,toolCallCount:Q.toolCallCount},Z));return}if(Q.type==="content_start"){if(Q.contentType==="text"&&typeof Q.text==="string"&&Q.text.length>0){$.publish($.buildEvent("assistant.delta",{text:Q.text},Z));return}if(Q.contentType==="reasoning"){if(Q.redacted&&!Q.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Z));return}if(typeof Q.reasoning==="string"&&Q.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:Q.reasoning,redacted:Q.redacted===!0},Z));return}if(Q.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:Q.toolCallId,toolName:Q.toolName,input:Q.input},Z));return}}if(Q.type==="content_end"){switch(Q.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:Q.text},Z));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:Q.reasoning},Z));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:Q.toolCallId,toolName:Q.toolName,output:Q.output,error:Q.error},Z));break}return}if(Q.type==="notice"){$.publish($.buildEvent("session.notice",{sessionId:Z,message:Q.message,noticeType:Q.noticeType,...Q.displayRole?{displayRole:Q.displayRole}:{},...Q.reason?{reason:Q.reason}:{},...Q.metadata?{metadata:Q.metadata}:{},agent:{kind:W.payload.teamRole==="teammate"?"teammate":Q.parentAgentId?"subagent":"lead",agentId:Q.agentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamAgentId:W.payload.teamAgentId,teamRole:W.payload.teamRole}},Z));return}if(Q.type==="usage"){let J;try{J=await $.sessionHost.getAccumulatedUsage?.(Z)}catch{J=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Z,delta:{inputTokens:Q.inputTokens,outputTokens:Q.outputTokens,cacheReadTokens:Q.cacheReadTokens??0,cacheWriteTokens:Q.cacheWriteTokens??0,totalCost:Q.cost??0},totals:{inputTokens:Q.totalInputTokens,outputTokens:Q.totalOutputTokens,cacheReadTokens:Q.totalCacheReadTokens??0,cacheWriteTokens:Q.totalCacheWriteTokens??0,totalCost:Q.totalCost??0},usage:J?.usage,aggregateUsage:J?.aggregateUsage,agent:{kind:W.payload.teamRole==="teammate"?"teammate":Q.parentAgentId?"subagent":"lead",agentId:Q.agentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamAgentId:W.payload.teamAgentId,teamRole:W.payload.teamRole}},Z));return}if(Q.type==="done")$.publish($.buildEvent("agent.done",{reason:Q.reason,text:Q.text,iterations:Q.iterations,usage:Q.usage},Z))}async function ih($,W){let Z=$.suppressNextTerminalEventBySession.get(W.payload.sessionId),Q=Z===W.payload.reason||Z==="run.start.reply";if(Q)$.suppressNextTerminalEventBySession.delete(W.payload.sessionId);let[J,j]=await Promise.all([b0($,W.payload.sessionId),u0($,W.payload.sessionId)]);if(W.payload.reason==="completed"){let X=await sU(J);$.publish($.buildEvent("ui.notify",X,W.payload.sessionId))}if(Q)return;$.publish($.buildEvent(W.payload.reason==="aborted"?"run.aborted":W.payload.reason==="error"||W.payload.reason==="failed"?"run.failed":"run.completed",{reason:W.payload.reason,...j?{snapshot:j}:{}},W.payload.sessionId))}import{createSessionId as MD,parseRuntimeConfigExtensions as RD}from"@cline/shared";var OD={};w(OD,{SessionVersioningService:()=>s$,SessionVersioningError:()=>d0});class d0 extends Error{code;constructor($,W){super(W);this.code=$;this.name="SessionVersioningError"}}function nh($){let W=$.sessionId.trim();if(!W)throw new d0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new d0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new d0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new d0("invalid_restore","checkpointRunCount must be a positive integer");return W}class s${async restoreCheckpoint($){let W=$.restore?.messages!==!1,Z=$.restore?.workspace!==!1,Q=nh({sessionId:$.sessionId,restoreMessages:W,restoreWorkspace:Z,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(Q);if(!J)throw new d0("session_not_found",`Session ${Q} not found`);let j=W?await $.readMessages(Q):void 0;if(W&&j?.length===0)throw new d0("session_messages_not_found",`No messages found for session ${Q}`);let X=aj({session:J,messages:j,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:W});if(Z)await($.applyWorkspaceCheckpoint??oj)(X.cwd,X.checkpoint);let Y=C1({session:J,messages:j});if(!W)return{checkpoint:X.checkpoint,sourceSnapshot:Y};let V=ij(J,$.checkpointRunCount),B=$.restore?.omitCheckpointMessageFromSession?nj(j??[],$.checkpointRunCount):X.messages??[],H={sourceSession:J,sourceMessages:j,sourceSnapshot:Y,plan:X,restoredCheckpointMetadata:V,initialMessages:B,restoreMessages:W,restoreWorkspace:Z,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new d0("invalid_restore","start is required when restore.messages is true");let G=$.buildStartInput?await $.buildStartInput(H,$.start):$.start,K=await $.startSession(G),F=$.getStartedSessionId?.(K);if(F)await($.retainCheckpointRefs??lG)(X.cwd,F,V?.history??[]);let A=F&&$.readRestoredSession?await $.readRestoredSession(F):void 0;return{sessionId:F,startResult:K,messages:X.messages,checkpoint:X.checkpoint,sourceSnapshot:Y,...A?{restoredSnapshot:C1({session:A,messages:B})}:{}}}}import{HUB_CHECKPOINT_CAPABILITY as Ie,HUB_COMPACTION_CAPABILITY as xe,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as ge,HUB_HOOK_CAPABILITY_PREFIX as me,HUB_MISTAKE_LIMIT_CAPABILITY as ve,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as ce,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as ue,isHubToolExecutorName as ah}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as ne,HUB_COMPACTION_CAPABILITY as ae,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as oe,HUB_HOOK_CAPABILITY_PREFIX as se,HUB_MISTAKE_LIMIT_CAPABILITY as te,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as ee,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as $00}from"@cline/shared";var oh=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function Y8($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function sh($,W){let Z=typeof $.name==="string"?$.name.trim():"",Q=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",j=Y8($.inputSchema);if(!Z||!Q||!j||!J||W.has(J))return;return W.add(J),{kind:"tool",capabilityName:J,name:Z,description:Q,inputSchema:j,...Y8($.lifecycle)?{lifecycle:Y8($.lifecycle)}:{}}}function DX($){if(!Array.isArray($))return[];let W=[],Z=new Set;for(let Q of $){if(!Q||typeof Q!=="object"||Array.isArray(Q))continue;let J=Q,j=J.kind,X=typeof J.capabilityName==="string"?J.capabilityName.trim():"";if(!X||Z.has(X))continue;if(j==="tool"){let Y=sh(J,Z);if(Y)W.push(Y);continue}if(j==="toolExecutor"){let Y=J.executor;if(!ah(Y))continue;Z.add(X),W.push({kind:"toolExecutor",capabilityName:X,executor:Y});continue}if(j==="hook"){let Y=typeof J.name==="string"?J.name.trim():"";if(!Y)continue;Z.add(X),W.push({kind:"hook",capabilityName:X,name:Y});continue}if(j==="compaction"){Z.add(X),W.push({kind:"compaction",capabilityName:X,...Y8(J.config)?{config:Y8(J.config)}:{}});continue}if(j==="checkpoint"){Z.add(X),W.push({kind:"checkpoint",capabilityName:X,...Y8(J.config)?{config:Y8(J.config)}:{}});continue}if(j==="mistakeLimit"){Z.add(X),W.push({kind:"mistakeLimit",capabilityName:X});continue}if(j==="userInstructionService")Z.add(X),W.push({kind:"userInstructionService",capabilityName:X})}return W}function zD($){let W=$.metadata?{...$.metadata}:void 0;if(W)delete W[R9];return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:W&&Object.keys(W).length>0?W:void 0}}function th($){return Object.hasOwn($,"update")?$.update:$}function OW($){return $.trim().replace(/^\/+/,"").toLowerCase()}function eh($){let W=($??[]).map(OW).filter(Boolean);return W.length>0?new Set(W):void 0}function $k($,W,Z){if(!Z)return!0;let Q=OW($),J=OW(W),j=Q.includes(":")?Q.split(":").at(-1)??Q:Q,X=J.includes(":")?J.split(":").at(-1)??J:J;return Z.has(Q)||Z.has(J)||Z.has(j)||Z.has(X)}function UX($,W){let Z=eh(W);return $.records.skill.map((Q)=>({id:Q.id,name:Q.item.name,description:"description"in Q.item&&typeof Q.item.description==="string"?Q.item.description:void 0,disabled:Q.item.disabled===!0,skill:Q.item})).filter((Q)=>$k(Q.id,Q.name,Z))}function TD($,W){let Z=async(Q,J)=>{let j=OW(Q),Y=UX($,W).filter((K)=>K.id===j||OW(K.name)===j||K.id.endsWith(`:${j}`)).filter((K)=>!K.disabled);if(Y.length!==1)return Y.length>1?`Skill "${Q}" is ambiguous. Use one of: ${Y.map((K)=>K.id).join(", ")}`:`Skill "${Q}" not found.`;let V=Y[0].skill,B=J?.trim(),H=B?`
|
|
585
|
+
) 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,Y0()])}}function Jy($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let W=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(W==="local"||W==="hub"||W==="remote")return W;return"auto"}var K9,F9;function jy($,W){if($!=="auto"&&$!=="hub")return;if(W.hub?.endpoint?.trim())return;DQ(W.hub?.workspaceRoot?.trim()||W.hub?.cwd?.trim()||process.cwd())}async function Xy($){await $.reconcileDeadSessions?.().catch(()=>{})}function EU($){try{let W=new P1;return W.init(),new b1(W,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(W){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),NU($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:W,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new dj(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function RU($,W,Z){return new y1({sessionService:Z??$.sessionService??EU($),capabilities:$.capabilities,logger:$.logger,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:W,fetch:$.fetch})}async function ij($){if(K9)return K9;if(F9)return await F9;return F9=(async()=>{return K9=EU($),await Xy(K9),K9})().finally(()=>{F9=void 0}),await F9}async function y6($){let W=d0($.distinctId);$.telemetry?.setDistinctId(W);let Z=Jy($);if(jy(Z,$),Z==="remote"){let Q=$.remote?.endpoint?.trim();if(!Q)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:Q}),new R6({endpoint:Q,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Z==="hub"){let Q=$.hub?.endpoint?.trim(),J=Q||await e2({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:Q||void 0}),new j$({url:J,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Z==="auto"){let Q=await Q9({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(Q){$.logger?.log("Using discovered local hub runtime host",{url:Q});let J=new j$({url:Q,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(j){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:j}),NU($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:j,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),RU($,W)}return RU($,W)}var SU={};w(SU,{NoOpFeatureFlagsProvider:()=>J8,FeatureFlagsService:()=>Q8});import{existsSync as Yy,mkdirSync as Vy,readFileSync as By,writeFileSync as Hy}from"node:fs";import{dirname as Gy}from"node:path";import{FEATURE_FLAGS as CU,FeatureFlagDefaultValue as nj}from"@cline/shared";var Ky=3600000,Fy=604800000,PU=1;class Q8{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??Ky,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??Fy,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 W=$??this.context.userId??null,Z=Date.now();if(Z-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===W)return}let Q=this.cacheInfo;this.cacheInfo={updateTime:Z,userId:W||null};try{let J=await this.provider.getAllFlagsAndPayloads({flagKeys:CU.length>0?CU:void 0,context:{...this.context,userId:W}});if(this.cacheInfo.userId!==W)return;this.cacheInfo.flagsPayload=J,this.rebuildCacheFromSnapshot(J),this.writePersistentCache()}catch(J){if(this.cacheInfo.userId!==W)return;throw this.cacheInfo=Q.updateTime?Q:{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((W)=>this.isFeatureFlagPayload(W));if(typeof $==="object")return Object.values($).every((W)=>this.isFeatureFlagPayload(W));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=Object.entries($).filter(([,Q])=>this.isFeatureFlagPayload(Q));if(W.length===0)return;let Z={};for(let[Q,J]of W)Z[Q]=J;return Z}readPersistentCache(){try{if(!this.cacheFilePath||!Yy(this.cacheFilePath))return;let $=JSON.parse(By(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let W=$;if(W.version!==PU||typeof W.updatedAt!=="number"||!Number.isFinite(W.updatedAt)||Date.now()-W.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:W.updatedAt,userId:W.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(W.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(W.flagsPayload?.featureFlagPayloads)}}}catch($){this.logger?.error?.("Error reading SDK feature flags cache",{error:$});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;Vy(Gy(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),W={version:PU,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};Hy(this.cacheFilePath,`${JSON.stringify(W,null,2)}
|
|
586
|
+
`,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let W=new Map;for(let Z of this.getReturnedFlagKeys($)){let Q=this.getFeatureFlag(Z);W.set(Z,Q??!1)}this.cache=W}getFeatureFlag($){try{let W=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Z=this.cacheInfo.flagsPayload?.featureFlags?.[$],Q=W??Z??nj[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==Q)this.telemetry?.capture({event:v.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Z}});return Q}catch(W){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:W}),nj[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??nj[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,W){if(process.env.IS_TEST==="true")this.cache.set($,W)}async dispose(){await this.provider.dispose()}}class J8{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}N6();var gU={};w(gU,{createCheckpointComparePlan:()=>NQ,compareCheckpointToWorkspace:()=>A9,buildCheckpointWorkspaceDiff:()=>EQ});import{execFile as Dy}from"node:child_process";import*as IU from"node:fs/promises";import*as I6 from"node:path";import{promisify as _y}from"node:util";var hU={};w(hU,{trimMessagesToCheckpoint:()=>yU,trimMessagesBeforeCheckpoint:()=>oj,readSessionCheckpointHistory:()=>j8,findCheckpointForRun:()=>k6,createRestoredCheckpointMetadata:()=>aj,createCheckpointRestorePlan:()=>sj,applyCheckpointToWorktree:()=>tj});import{execFile as Ay}from"node:child_process";import{promisify as Uy}from"node:util";var h6=Uy(Ay);function j8($){let W=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(W?.history)?W.history:[]).filter((Q)=>!!Q&&typeof Q==="object"&&!Array.isArray(Q)).flatMap((Q)=>{let J=String(Q.ref??"").trim(),j=Number(Q.createdAt??0),X=Number(Q.runCount??0);if(J.length===0||!Number.isFinite(j)||!Number.isInteger(X)||X<1)return[];let Y=Q.kind==="stash"||Q.kind==="commit"?Q.kind:void 0;return[{ref:J,createdAt:j,runCount:X,...Y?{kind:Y}:{}}]})}function aj($,W){let Z=j8($).filter((J)=>J.runCount<=W),Q=Z.at(-1);return Q?{latest:Q,history:Z}:void 0}function k6($,W){return $.reduce((Z,Q)=>{if(Q.runCount>W)return Z;if(!Z||Q.runCount>Z.runCount)return Q;return Z},void 0)}function bU($,W){let Z=0;for(let Q=0;Q<$.length;Q+=1){let J=$[Q];if(J?.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"?J.metadata:void 0)?.kind==="recovery_notice")continue;if(Z+=1,Z===W)return Q}throw Error(`Could not find user message for checkpoint run ${W}`)}function yU($,W){let Z=bU($,W);return $.slice(0,Z+1)}function oj($,W){let Z=bU($,W);return $.slice(0,Z)}function sj($){let W=$.checkpointRunCount;if(!Number.isInteger(W)||W<1)throw Error("checkpointRunCount must be a positive integer");let Z=k6(j8($.session),W);if(!Z)throw Error(`No checkpoint found at or before run ${W} in session ${$.session.sessionId}`);let Q=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!Q)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Z,cwd:Q,...$.restoreMessages!==!1?{messages:yU($.messages??[],W)}:{}}}async function tj($,W){if((await h6("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await h6("git",["-C",$,"cat-file","-e",`${W.ref}^{commit}`],{windowsHide:!0}),await h6("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await h6("git",["-C",$,"clean","-fd"],{windowsHide:!0}),W.kind==="commit"){await h6("git",["-C",$,"reset","--hard",W.ref],{windowsHide:!0});return}await h6("git",["-C",$,"stash","apply",W.ref],{windowsHide:!0})}var Ly=_y(Dy),fy=52428800;async function RQ($,W){let{stdout:Z}=await Ly("git",["-C",$,...W],{windowsHide:!0,maxBuffer:fy,encoding:"utf8"});return Z}function kU($){return $.split("\x00").filter(Boolean)}function xU($,W){let Z=I6.resolve($,W),Q=I6.relative($,Z);if(Q.startsWith("..")||I6.isAbsolute(Q))throw Error(`Checkpoint diff path escapes workspace: ${W}`);return Z}async function Oy($,W,Z){try{return await RQ($,["show",`${W}:${Z}`])}catch{return""}}async function Ty($,W){try{return await IU.readFile(xU($,W),"utf8")}catch{return""}}async function zy($,W){await RQ($,["cat-file","-e",`${W.ref}^{tree}`]);let[Z,Q]=await Promise.all([RQ($,["diff","--name-only","-z",W.ref,"--"]),RQ($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...kU(Z),...kU(Q)])].sort((j,X)=>j.localeCompare(X))}function NQ($){let W=$.checkpointRunCount;if(!Number.isInteger(W)||W<1)throw Error("checkpointRunCount must be a positive integer");let Z=k6(j8($.session),W);if(!Z)throw Error(`No checkpoint found at or before run ${W} in session ${$.session.sessionId}`);let Q=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!Q)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Z,cwd:Q}}async function EQ($,W){let Z=await zy($,W);return(await Promise.all(Z.map(async(J)=>{let[j,X]=await Promise.all([Oy($,W.ref,J),Ty($,J)]);return{filePath:xU($,J),leftContent:j,rightContent:X}}))).filter((J)=>J.leftContent!==J.rightContent)}async function A9($){let W=NQ($),Z=await EQ(W.cwd,W.checkpoint);return{...W,diffs:Z}}class U9{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,W,Z,Q,J,j,X,Y,V,B){this.clientName=W,this.runtimeAddress=Z,this.host=$,this.prepare=Q,this.capabilities=J,this.logger=j,this.telemetry=X,this.distinctId=Y,this.featureFlags=V,this.settings=gF($),this.pendingPrompts=mF($),this.automation=new MJ(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=B?new t5({workspaceRoot:B.workspaceRoot??process.cwd(),specs:{cronSpecsDir:B.cronSpecsDir??B.cronDir,scope:bK(B.cronScope),workspaceRoot:B.workspaceRoot},runtimeHandlers:yK({host:$,getExtensionContext:()=>vZ({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:B.dbPath,logger:B.logger,pollIntervalMs:B.pollIntervalMs,claimLeaseSeconds:B.claimLeaseSeconds,globalMaxConcurrency:B.globalMaxConcurrency,watcherDebounceMs:B.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((H)=>{if(H.type!=="ended")return;this.disposeSessionBootstrap(H.payload.sessionId)})}static async create($={}){let W=d0($.distinctId),Z=C0($.capabilities),Q={...$,capabilities:Z,distinctId:W},J=await y6(Q),j=SK($.automation),X=$.featureFlags||new Q8({provider:new J8,telemetry:$.telemetry,logger:$.logger,context:{distinctId:W,clientName:$.clientName}}),Y=new U9(J,$.clientName,J.runtimeAddress,$.prepare,Z,$.logger,$.telemetry,W,X,j?{...j,logger:$.logger}:void 0);if(j&&j.autoStart!==!1)await Y.automation.start();return Y}async disposeSessionBootstrap($){let W=this.activeSessionBootstraps.get($);if(!W)return;this.activeSessionBootstraps.delete($),await Promise.resolve(W.dispose?.())}async start($){let W=cF($),Z=await this.prepare?.(W);try{let Q=Z?await Z.applyToStartSessionInput(W):W,J=await this.host.startSession(uJ(Q,{defaultCapabilities:this.capabilities,withExtensionContext:(j)=>vZ({automationService:this.automationService,automation:this.automation,context:j,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Z)if(await this.host.getSession(J.sessionId))this.activeSessionBootstraps.set(J.sessionId,Z);else await Promise.resolve(Z.dispose?.());return uF({input:Q,sessionId:J.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),J}catch(Q){throw await Promise.resolve(Z?.dispose?.()),Q}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let W=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(W.map((Z)=>this.disposeSessionBootstrap(Z)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await BQ(this.host,$);list=async($=200,W={})=>await this.listHistory({...W,limit:$});delete=async($)=>{let W=await this.host.deleteSession($);if(W)await this.disposeSessionBootstrap($);return W};update=(...$)=>this.host.updateSession(...$);updateSessionCompactionState=(...$)=>this.host.updateSessionCompactionState(...$);readSessionCompactionState=(...$)=>this.host.readSessionCompactionState(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let W=$.start?uJ($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Z)=>vZ({automationService:this.automationService,automation:this.automation,context:Z,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:$.sessionId,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restore:$.restore,start:W})}async compareCheckpoint($){let W=$.sessionId.trim();if(!W)throw Error("sessionId is required");let Z=await this.host.getSession(W);if(!Z)throw Error(`Session ${W} not found`);return A9({session:Z,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,W){return this.host.subscribe($,W)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()};updateSessionConnection=(...$)=>{return this.host.updateSessionConnection?.(...$)??Promise.resolve()}}var vU={};w(vU,{resolvePluginSkillDirectoriesFromPaths:()=>t1,resolvePluginConfigSearchPaths:()=>j5,resolveAndLoadAgentPlugins:()=>t8,resolveAgentPluginPaths:()=>s1,loadAgentPluginsFromPathsWithDiagnostics:()=>b2,loadAgentPluginsFromPaths:()=>QZ,loadAgentPluginFromPath:()=>Q5,discoverPluginModulePaths:()=>X5});var dU={};w(dU,{toHookConfigFileName:()=>B5,runSubprocessEvent:()=>x6,runHook:()=>m6,resolveHooksConfigSearchPaths:()=>Y5,parseHookEventPayload:()=>g6,mergeAgentHooks:()=>I2,listHookConfigFiles:()=>I$,createSubprocessHooks:()=>PQ,createHookConfigFileHooks:()=>H5,createHookConfigFileExtension:()=>Z6,createHookAuditHooks:()=>W6,createAgentHooksExtension:()=>e8,HookEventPayloadSchema:()=>CQ,HookEventNameSchema:()=>wQ,HookConfigFileName:()=>$6,HOOK_CONFIG_FILE_EVENT_MAP:()=>V5,HOOKS_CONFIG_DIRECTORY_NAME:()=>BZ});import{HookEventNameSchema as wQ,HookEventPayloadSchema as CQ,parseHookEventPayload as g6,resolveHookSessionContext as Cy}from"@cline/shared";import{z as X8}from"zod";import{spawn as qy}from"node:child_process";import{augmentNodeCommandForDebug as My,withResolvedClineBuildEnv as Ry}from"@cline/shared";function Ny($){let W=$.trim();if(!W)return{};let Q=W.split(`
|
|
587
|
+
`).map((j)=>j.trim()).filter(Boolean).filter((j)=>j.startsWith("HOOK_CONTROL\t")).map((j)=>j.slice(13)),J=Q.length>0?Q[Q.length-1]:W;try{return{parsedJson:JSON.parse(J)}}catch(j){return{parseError:j instanceof Error?j.message:"Failed to parse subprocess stdout JSON"}}}function Ey($,W){let Z=$ instanceof Error?$:Error(String($)),Q=Z,J=W.join(" ");if(Q.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}": ${Z.message}`)}async function wy($,W){let Z=$.stdin;if(!Z)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((Q,J)=>{let j=(X)=>{Z.off("error",j);let Y=X.code;if(Y==="EPIPE"||Y==="ERR_STREAM_DESTROYED"){Q();return}J(X)};Z.once("error",j),Z.end(W,(X)=>{if(Z.off("error",j),X){let Y=X.code;if(Y==="EPIPE"||Y==="ERR_STREAM_DESTROYED"){Q();return}J(X);return}Q()})})}async function x6($,W){let Z=My(W.command,{env:W.env,debugRole:"hook"});if(!Array.isArray(Z)||Z.length===0)throw Error("runSubprocessEvent requires a non-empty command");let Q=!!W.detached,J=qy(Z[0],Z.slice(1),{cwd:W.cwd,env:Ry(W.env),stdio:Q?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Q,windowsHide:!0}),j=new Promise((K)=>{J.once("spawn",()=>{try{W.onSpawn?.({command:Z,pid:J.pid??void 0,detached:Q})}catch{}K()})}),X=new Promise((K,F)=>{J.once("error",(A)=>{F(Ey(A,Z))})});if(await wy(J,JSON.stringify($)),Q){await Promise.race([j,X]),J.unref();return}if(!J.stdout||!J.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let Y="",V="",B=!1,H;J.stdout.on("data",(K)=>{Y+=K.toString()}),J.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((W.timeoutMs??0)>0)H=setTimeout(()=>{B=!0,J.kill("SIGKILL")},W.timeoutMs);J.once("close",(F)=>{if(H)clearTimeout(H);let{parsedJson:A,parseError:D}=Ny(Y);K({exitCode:F,stdout:Y,stderr:V,parsedJson:A,parseError:D,timedOut:B})})});return await Promise.race([G,X])}var Py=X8.object({contextModification:X8.string().optional(),cancel:X8.boolean().optional(),review:X8.boolean().optional(),errorMessage:X8.string().optional(),context:X8.string().optional(),overrideInput:X8.unknown().optional()}).passthrough();var Sy=["agent","hook"];async function m6($,W={}){let Z=W.command??Sy;return await x6($,{command:Z,cwd:W.cwd,env:W.env,detached:W.detached,timeoutMs:W.timeoutMs,onSpawn:W.onSpawn})}function uU($){return $ instanceof Error?$:Error(String($))}function by($){if(!$||typeof $!=="object")return;let W=Py.safeParse($);if(!W.success)return;let Z=W.data;if(!(("cancel"in Z)||("review"in Z)||("context"in Z)||("contextModification"in Z)||("overrideInput"in Z)||("errorMessage"in Z)))return;let J=typeof Z.context==="string"?Z.context:typeof Z.contextModification==="string"?Z.contextModification:typeof Z.errorMessage==="string"&&Z.errorMessage.length>0?Z.errorMessage:void 0;return{cancel:typeof Z.cancel==="boolean"?Z.cancel:void 0,review:typeof Z.review==="boolean"?Z.review:void 0,context:J,overrideInput:Object.hasOwn(Z,"overrideInput")?Z.overrideInput:void 0}}function cU($){if(!$||typeof $!=="object")return{};let W={};for(let[Z,Q]of Object.entries($))if(typeof Q==="string")W[Z]=Q;else W[Z]=JSON.stringify(Q);return W}function V$($,W,Z){let Q=Z.env??process.env,J=Q.CLINE_USER_ID?.trim()||Q.USER?.trim()||"unknown",j=Z.cwd||process.cwd();return{clineVersion:Q.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:W.conversationId,sessionContext:Cy(Z.sessionContext,{hookName:$,conversationId:W.conversationId,agentId:W.agentId,parentAgentId:W.parentAgentId}),workspaceRoots:j?[j]:[],workspaceInfo:Z.workspaceInfo,userId:J,agent_id:W.agentId,parent_agent_id:W.parentAgentId}}function yy($){return{name:$.name,message:$.message,stack:$.stack}}function hy($){let W=String($??"").toLowerCase();return W.includes("cancel")||W.includes("abort")||W.includes("interrupt")}function ky($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function Iy($){return $.filter((W)=>W.type==="text"&&typeof W.text==="string").map((W)=>W.text).join("")}function xy($){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 gy($){if(!$)return;let W={};if($.cancel===!0)W.stop=!0;if($.overrideInput!==void 0)W.input=$.overrideInput;return Object.keys(W).length>0?W:void 0}async function Y8($,W){try{let Z=await m6($,{command:W.command,cwd:W.cwd,env:W.env,detached:!0,onSpawn:W.onSpawn});W.onDispatch?.({payload:$,result:Z,detached:!0})}catch(Z){W.onDispatchError?.(uU(Z),$)}}function PQ($={}){return{hooks:{beforeRun:async(Y)=>{let V=ky(Y);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...V$("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await Y8(H,$)}else{let H={...V$("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await Y8(H,$)}return},beforeTool:async(Y)=>{let V={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},B={...V$("tool_call",V,$),hookName:"tool_call",iteration:Y.snapshot.iteration,tool_call:{id:Y.toolCall.toolCallId,name:Y.toolCall.toolName,input:Y.input},preToolUse:{toolName:Y.toolCall.toolName,parameters:cU(Y.input)}};try{let H=await m6(B,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:B,result:H,detached:!1}),H?.timedOut)throw Error("tool_call hook command timed out");if(H?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${H.parseError}`);return gy(by(H?.parsedJson))}catch(H){$.onDispatchError?.(uU(H),B);return}},afterTool:async(Y)=>{let V=xy(Y),B={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},H={...V$("tool_result",B,$),hookName:"tool_result",iteration:Y.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:cU(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await Y8(H,$);return},afterRun:async({snapshot:Y,result:V})=>{let B={agentId:Y.agentId,conversationId:Y.conversationId??Y.runId??Y.agentId,parentAgentId:Y.parentAgentId??null};if(V.status==="completed"){let K={...V$("agent_end",B,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await Y8(K,$);return}let H=V.status==="aborted"||hy(V.error?.message)?"agent_abort":"agent_error",G=H==="agent_error"?{...V$(H,B,$),hookName:H,iteration:V.iterations,error:yy(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...V$(H,B,$),hookName:H,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await Y8(G,$)},onEvent:async(Y)=>{if(Y.type!=="message-added"||Y.message.role!=="user")return;let V={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},B={...V$("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:Iy(Y.message.content),attachments:[]}};await Y8(B,$)}},shutdown:async({agentId:Y,conversationId:V,parentAgentId:B,reason:H})=>{let G={...V$("session_shutdown",{agentId:Y,conversationId:V,parentAgentId:B},$),hookName:"session_shutdown",reason:H};await Y8(G,$)}}}var J_={};w(J_,{writeHubDiscovery:()=>KQ,withHubStartupLock:()=>FQ,verifyHubConnection:()=>E1,truncateNotificationBody:()=>O9,toHubStatusUrl:()=>Aj,toHubHealthUrl:()=>AQ,stopLocalHubServerGracefully:()=>Nj,startHubWebSocketServer:()=>H8,startHubServer:()=>Z_,spawnDetachedHubServerWithRetry:()=>z6,spawnDetachedHubServer:()=>Oj,sendHubCommand:()=>aU,restartLocalHubIfIdleAfterStartupTimeout:()=>fQ,resolveWorkspaceHubOwnerContext:()=>qA,resolveSharedHubOwnerContext:()=>u0,resolveProductionHubOwnerContext:()=>j1,resolveHubUrl:()=>QX,resolveHubOwnerContext:()=>Q$,resolveHubEndpointOptions:()=>J1,resolveHubBuildId:()=>GQ,resolveDefaultHubPort:()=>T6,resolveDefaultHubPathname:()=>fj,resolveDefaultHubHost:()=>Lj,resolveCompatibleLocalHubUrl:()=>Q9,resolveClineDir:()=>fA,resolveClineDataDir:()=>o2,requestHubShutdown:()=>Z9,rememberRecoverableLocalHubUrl:()=>n$,readHubDiscovery:()=>f0,readBearerToken:()=>mQ,probeHubServer:()=>J$,probeHubConnection:()=>nU,prewarmDetachedHubServer:()=>DQ,normalizeHubWebSocketUrl:()=>a$,isLocalHubOrigin:()=>NX,isLocalHubHostName:()=>vQ,isHubReconnectableTransportError:()=>Mj,isHubCommandTimeoutError:()=>LQ,isDiscoveryFilePresent:()=>TA,ensureHubWebSocketServer:()=>cQ,ensureHubServer:()=>Q_,ensureDetachedHubServer:()=>CA,ensureCompatibleLocalHubUrl:()=>e2,createLocalHubScheduleRuntimeHandlers:()=>uQ,createInMemoryHubOwnerContext:()=>OA,createHubServerUrl:()=>_1,createHubAuthToken:()=>HQ,createConfiguredTelemetryService:()=>B$,createConfiguredTelemetryHandle:()=>t$,connectToHub:()=>yQ,clearHubDiscovery:()=>c0,NodeHubClient:()=>L1,NativeHubTransportAdapter:()=>R9,HubUIClient:()=>XX,HubTransportError:()=>k0,HubSessionClient:()=>jX,HubServerTransport:()=>p6,HubScheduleService:()=>c6,HubScheduleCommandService:()=>v6,HubCommandError:()=>q6,DEFAULT_HUB_PORT:()=>Dj,DEFAULT_HUB_PATHNAME:()=>_j,DEFAULT_HUB_HOST:()=>Uj,BrowserWebSocketHubAdapter:()=>M9});import{createSessionId as my}from"@cline/shared";function X1($,W){return{version:$.version,requestId:$.requestId,ok:!0,payload:W}}function lU($,W,Z){return{version:$.version,requestId:$.requestId??my("hubreq_"),ok:!1,error:{code:W,message:Z}}}class v6{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return X1($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return X1($,{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 X1($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return X1($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return X1($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return X1($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return X1($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return X1($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return X1($,{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 X1($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return X1($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return X1($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return lU($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(W){return lU($,"schedule_command_failed",W instanceof Error?W.message:String(W))}}toCreateInput($){let W=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:W}}toUpdateInput($){let W=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:W}}}function bQ($){return $?new Date($).getTime():void 0}function vy($){let W=$.metadata?{...$.metadata}:void 0;if(W)delete W.__hubScheduleCreatedBy,delete W.__hubScheduleCwd,delete W.__hubRuntimeOptions;return W}function SQ($){let W=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof W?.__hubScheduleCwd==="string"?W.__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:bQ($.nextRunAt),lastRunAt:bQ($.lastRunAt),createdBy:typeof W?.__hubScheduleCreatedBy==="string"?W.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:W?.__hubRuntimeOptions&&typeof W.__hubRuntimeOptions==="object"&&!Array.isArray(W.__hubRuntimeOptions)?W.__hubRuntimeOptions:void 0,metadata:vy($)}}function cy($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function ej($,W){return{executionId:$.runId,scheduleId:W,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:bQ($.startedAt),endedAt:bQ($.completedAt),status:cy($.status),errorMessage:$.error}}class c6{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new s5({dbPath:$.dbPath}),this.materializer=new r5({store:this.store}),this.runner=new i5({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(sJ($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return SQ(this.store.createHubSchedule($))}getSchedule($){let W=this.store.getHubSchedule($);return W?SQ(W):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((W)=>SQ(W))}updateSchedule($,W){if(W.cronPattern!==void 0)sJ(W.cronPattern);let Z=this.store.getHubSchedule($);if(!Z)return;let Q=W.workspaceRoot!==void 0?W.workspaceRoot.trim():Z.workspaceRoot;if((W.enabled??Z.enabled)&&!Q)throw Error("workspaceRoot is required for enabled schedules");let j=this.store.updateHubSchedule($,{...W,scheduleId:$});return j?SQ(j):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let W=this.store.enqueueHubScheduleRun($,"manual");if(!W)return;await this.runner.tick();let Z=this.store.getRun(W.runId)??W;return ej(Z,$)}triggerScheduleNowDetached($){let W=this.store.enqueueHubScheduleRun($,"manual");if(!W)return;return this.runner.tick().catch(()=>{return}),ej(W,$)}listScheduleExecutions($){let W=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Z={specId:W?.specId,limit:$.limit};return this.store.listRuns(Z).map((J)=>{let j=W??this.store.getSpec(J.specId);if(!j||j.source!=="hub-schedule")return;return ej(J,j.externalId)}).filter((J)=>{if(!J)return!1;return!$.status||J.status===$.status})}getScheduleStats($){let W=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(W.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Z=0,Q=0,J=0,j;for(let X of W){if(X.status==="success"||X.status==="completed")Z+=1;if(!j&&X.status!=="success"&&X.status!=="completed")j=X;if(X.startedAt&&X.endedAt)J+=X.endedAt-X.startedAt,Q+=1}return{totalRuns:W.length,successRate:Z/W.length,avgDurationSeconds:Q>0?J/Q/1000:0,lastFailure:j}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let W=this.store.getSpec($.specId);if(!W||W.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:W.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:W.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+W.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let W={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(W).flatMap((Z)=>Z.source==="hub-schedule"&&Z.nextRunAt?[{spec:Z,nextRunAt:Z.nextRunAt}]:[]).sort((Z,Q)=>String(Z.nextRunAt).localeCompare(String(Q.nextRunAt))).slice(0,$).map(({spec:Z,nextRunAt:Q})=>({scheduleId:Z.externalId,name:Z.title,nextRunAt:Q}))}}f9();import{resolveClineBuildEnv as Hh}from"@cline/shared";function Gh($,W){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Z=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Z?`Failed to connect to hub at ${W} (${Z} event before socket open).`:`Failed to connect to hub at ${W}.`)}var Kh="cline-hub-auth.";function Fh($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function Ah($,W){let Z=new URL($),Q=new URL(W);return Z.search="",Z.hash="",Q.search="",Q.hash="",Z.toString()===Q.toString()}function iU(){return Hh()==="production"?j1():u0()}async function Uh($){let W=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),W)return W;let Z=iU(),Q=await f0(Z.discoveryPath);if(Q?.url&&Ah($.toString(),Q.url))return Q.authToken;return}async function QX($={}){let W=J1($);if(!Fh($)){let Z=iU(),Q=await f0(Z.discoveryPath);if(Q?.url)return Q.url}return _1(W.host,W.port,W.pathname)}async function yQ($){return await new Promise((W,Z)=>{(async()=>{let Q=new URL($),J=await Uh(Q);Q.hash="";let j=new WebSocket(Q.toString(),J?[`${Kh}${J}`]:void 0),X=new Map,Y=0;j.addEventListener("open",()=>{W({send(V){let B=V.requestId??`hub-client-${++Y}`;return new Promise((H,G)=>{X.set(B,{resolve:H,reject:G});let K={kind:"command",envelope:{...V,requestId:B}};j.send(JSON.stringify(K))})},close(){j.close()}})}),j.addEventListener("message",(V)=>{let B=JSON.parse(String(V.data));if(B.kind==="reply"&&B.envelope.requestId){let H=X.get(B.envelope.requestId);if(H)X.delete(B.envelope.requestId),H.resolve(B.envelope)}}),j.addEventListener("close",()=>{for(let V of X.values())V.reject(Error("Hub connection closed"));X.clear()}),j.addEventListener("error",(V)=>{Z(Gh(V,$))})})().catch(Z)})}async function nU($){try{return(await yQ($)).close(),!0}catch{return!1}}async function aU($,W){let Z=await QX($),Q=await yQ(Z);try{return await Q.send({version:W.version??"v1",clientId:W.clientId??"hub-client",...W})}finally{Q.close()}}function JX($){return $?JSON.parse(JSON.stringify($)):{}}function hQ($){let W=$?.session&&typeof $.session==="object"?$.session:void 0;if(!W)return;let Z=W.metadata&&typeof W.metadata==="object"?JX(W.metadata):void 0;return{sessionId:typeof W.sessionId==="string"?W.sessionId:"",parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,metadata:Z}}function oU($,W){return $.error?.message??`hub command failed: ${W}`}function Dh($){let W=JX($);if(typeof W.error==="string"&&W.error.trim())return{...W,error:W.error.trim()};let Z=W.result&&typeof W.result==="object"?W.result:void 0;if(typeof Z?.text==="string"&&Z.text.trim())return{...W,error:Z.text.trim()};let Q=Z?.error&&typeof Z.error==="object"?Z.error:void 0;if(typeof Q?.message==="string"&&Q.message.trim())return{...W,error:Q.message.trim()};return W}function sU($){let W=$?.sessionId;return typeof W==="string"&&W.trim()?W.trim():void 0}function _h($){let W=$?.checkpoint;if(!W||typeof W!=="object"||Array.isArray(W))throw Error("hub checkpoint restore returned no checkpoint");let Z=W;if(typeof Z.ref!=="string"||typeof Z.createdAt!=="number"||typeof Z.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Z}function Lh($){let W=JX($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||sU(W)||"",eventType:"schedule.execution.completed",payload:W};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||sU(W)||"",eventType:"schedule.execution.failed",payload:W};let Z=$.sessionId?.trim();if(!Z)return;switch($.event){case"iteration.started":return{sessionId:Z,eventType:"runtime.chat.iteration_start",payload:W};case"iteration.finished":return{sessionId:Z,eventType:"runtime.chat.iteration_end",payload:W};case"assistant.delta":return{sessionId:Z,eventType:"runtime.chat.text_delta",payload:W};case"usage.updated":return{sessionId:Z,eventType:"runtime.chat.usage",payload:W};case"session.notice":return{sessionId:Z,eventType:"runtime.chat.notice",payload:W};case"tool.started":return{sessionId:Z,eventType:"runtime.chat.tool_call_start",payload:W};case"tool.finished":return{sessionId:Z,eventType:"runtime.chat.tool_call_end",payload:W};case"approval.requested":return{sessionId:Z,eventType:"approval.requested",payload:W};case"run.aborted":return{sessionId:Z,eventType:"runtime.chat.aborted",payload:W};case"run.failed":return{sessionId:Z,eventType:"runtime.chat.failed",payload:Dh($.payload)};case"run.completed":return{sessionId:Z,eventType:"runtime.chat.completed",payload:W};default:return}}class jX{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new L1({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 W=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),Z=hQ(W.payload);if(!Z?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Z.sessionId,startResult:{sessionId:Z.sessionId,manifestPath:"",messagesPath:Z.messagesPath??""}}}async sendRuntimeSession($,W,Z){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:W.prompt,mode:W.config.mode,attachments:W.attachments,delivery:W.delivery,timeoutSeconds:W.config.timeoutSeconds},$,Z)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let W;try{W=await this.client.command("session.get",void 0,$)}catch(Z){if(Z$(Z))return;throw Z}return hQ(W.payload)}async readMessages($){let W=$.trim();if(!W)return[];await this.ensureMetadataApplied();let Z=await this.client.command("session.messages",{sessionId:W},W);if(!Z.ok)throw Error(oU(Z,"session.messages"));let Q=Z.payload?.messages;return Array.isArray(Q)?Q:[]}async restore($){let W=$.sessionId.trim();if(!W)throw Error("sessionId is required");let Z=$.restore?.messages!==!1;if(Z&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let Q=$.config,J=await this.client.command("session.restore",{sessionId:W,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Q?{workspaceRoot:Q.workspaceRoot,cwd:Q.cwd,sessionConfig:{providerId:Q.provider,modelId:Q.model,apiKey:Q.apiKey,cwd:Q.cwd??Q.workspaceRoot,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:Q.mode??"act",rules:Q.rules,maxIterations:Q.maxIterations,enableTools:Q.enableTools,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},metadata:{source:Q.source??"cli",provider:Q.provider,model:Q.model,enableTools:Q.enableTools,enableSpawn:Q.enableSpawn,enableTeams:Q.enableTeams,prompt:void 0,interactive:Q.interactive!==!1},runtimeOptions:{mode:Q.mode,systemPrompt:Q.systemPrompt,maxIterations:Q.maxIterations,enableTools:Q.enableTools,enableSpawn:Q.enableSpawn,enableTeams:Q.enableTeams,autoApproveTools:Q.autoApproveTools,configExtensions:Q.configExtensions},modelSelection:{provider:Q.provider,model:Q.model,apiKey:Q.apiKey},toolPolicies:Q.toolPolicies}:{}},W);if(!J.ok)throw Error(oU(J,"session.restore"));let j=hQ(J.payload);if(Z&&!j?.sessionId)throw Error("hub checkpoint restore returned no session id");let X=Array.isArray(J.payload?.messages)?J.payload.messages:void 0,Y=_h(J.payload);return{sessionId:j?.sessionId,startResult:j?.sessionId?{sessionId:j.sessionId,manifestPath:"",messagesPath:j.messagesPath??""}:void 0,...X?{messages:X}:{},checkpoint:Y}}async listSessions($){await this.ensureMetadataApplied();let W=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(W.payload?.sessions)?W.payload?.sessions:[]).map((Q)=>hQ({session:Q})).filter((Q)=>Boolean(Q?.sessionId))}async deleteSession($,W=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:W})).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($,W){let Z=new Set(($.sessionIds??[]).map((J)=>J.trim()).filter(Boolean)),Q=this.client.subscribe((J)=>{let j=Lh(J);if(!j)return;if(Z.size>0&&!Z.has(j.sessionId))return;W.onEvent?.(j)});return this.ensureMetadataApplied().catch((J)=>{W.onError?.(J instanceof Error?J:Error(String(J)))}),Q}streamTeamProgress($,W){let Z=this.client.subscribe((Q)=>{if(Q.event!=="team.progress"||!Q.payload)return;W.onProjection?.(Q.payload)});return this.ensureMetadataApplied().catch((Q)=>{W.onError?.(Q instanceof Error?Q:Error(String(Q)))}),Z}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let W=await this.client.command("schedule.list");return Array.isArray(W.payload?.schedules)?W.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,W){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...W})).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($,W){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list_executions",{scheduleId:$,limit:W});return Array.isArray(Z.payload?.executions)?Z.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let W=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(W.payload?.upcoming)?W.payload?.upcoming:[]}}class XX{client;constructor($){this.client=new L1({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 W=await this.client.command("session.list",{limit:$});return Array.isArray(W.payload?.sessions)?W.payload.sessions:[]}subscribeUI($){return this.client.subscribe((W)=>{switch(W.event){case"ui.notify":$.onNotify?.(W.payload);break;case"ui.show_window":$.onShowWindow?.(W.payload);break;case"hub.client.registered":$.onClientRegistered?.(W.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(W.payload??{});break;case"session.created":$.onSessionCreated?.(W.payload??{});break;case"session.updated":$.onSessionUpdated?.(W.payload??{});break;case"session.detached":$.onSessionDetached?.(W.payload??{});break}})}}import{resolveClineBuildEnv as $_}from"@cline/shared";function fh($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Z)=>{if(Z&&typeof Z==="object"&&"type"in Z&&Z.type==="text"&&"text"in Z&&typeof Z.text==="string")return Z.text.trim();return""}).filter(Boolean).join(`
|
|
588
|
+
`).trim()||void 0}var tU=120,YX="...";function O9($){let W=$.trim();if(!W)return"";if(Buffer.byteLength(W,"utf8")<=tU)return W;let Z=tU-Buffer.byteLength(YX,"utf8");if(Z<=0)return YX;let Q="";for(let J of W){if(Buffer.byteLength(Q+J,"utf8")>Z)break;Q+=J}return`${Q}${YX}`}async function eU($){let W=$?.sessionId?.trim()||"unknown",Z=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await i$(Z)].reverse().find((V)=>V.role==="assistant"),j=J?fh(J.content):void 0,X=$?.workspaceRoot?.trim()||"workspace",Y=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():X;return{title:`Task completed (${W})`,body:O9(j&&j.length>0?j:Y.length>0?Y:X),severity:"info"}}import{captureSdkError as gQ,createSessionId as Tk}from"@cline/shared";import{createSessionId as qh}from"@cline/shared";import{createSessionId as zh}from"@cline/shared";function Oh($){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 Th($){let W=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())W.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())W.parentAgentId=$.parentAgentId;if($.agentId?.trim())W.agentId=$.agentId;if($.conversationId?.trim())W.conversationId=$.conversationId;if($.messagesPath?.trim())W.messagesPath=$.messagesPath;if($.prompt?.trim())W.prompt=$.prompt;if($.provider?.trim())W.provider=$.provider;if($.model?.trim())W.model=$.model;if($.source?.trim())W.source=$.source;if(typeof $.pid==="number")W.pid=$.pid;return Object.keys(W).length>0?W:void 0}function kQ($,W,Z,Q){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:W?.createdByClientId??"hub",status:Oh($.status),participants:W?[...W.participants.values()]:[],metadata:Th($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Z?{usage:{...Z}}:{},...Q?{aggregateUsage:{...Q}}:{}}}function u($,W){return{version:$.version,requestId:$.requestId,ok:!0,...W!==void 0?{payload:W}:{}}}function h($,W,Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:W,message:Z}}}function l6($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function S0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function V8($,W,Z){return{version:"v1",event:$,eventId:zh("hevt_"),sessionId:Z,timestamp:Date.now(),payload:W}}async function y0($,W){let Z=await $.sessionHost.getSession(W);if(!Z)return;let Q=await $.sessionHost.getAccumulatedUsage?.(W);return kQ(Z,$.sessionState.get(W),Q?.usage,Q?.aggregateUsage)}async function l0($,W){let Z=await $.sessionHost.getSession(W);if(!Z)return;let[Q,J]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(W):[],$.sessionHost.getAccumulatedUsage?.(W)]);return w1({session:Z,messages:Q,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function VX($,W,Z,Q,J={}){let j=$.sessionState.get(W);if(j){if(J.interactive!==void 0)j.interactive=J.interactive;if(Q==="creator"&&!j.createdByClientId)j.createdByClientId=Z;if(!j.participants.has(Z))j.participants.set(Z,{clientId:Z,attachedAt:Date.now(),role:Q});return j}let X={createdByClientId:Z,interactive:J.interactive??!0,participants:new Map([[Z,{clientId:Z,attachedAt:Date.now(),role:Q}]])};return $.sessionState.set(W,X),X}function $D($,W,Z,Q,J={}){let j=$.sessionState.get(W);if(j){if(J.interactive!==void 0)j.interactive=J.interactive;if(!j.participants.has(Z))j.participants.set(Z,{clientId:Z,attachedAt:Date.now(),role:Q});return j}let X={interactive:J.interactive??!0,participants:new Map([[Z,{clientId:Z,attachedAt:Date.now(),role:Q}]])};return $.sessionState.set(W,X),X}async function BX($,W){let Z=qh("approval_"),Q=W.sessionId;if($.sessionState.get(Q)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((j)=>{$.pendingApprovals.set(Z,{sessionId:Q,resolve:j}),$.publish($.buildEvent("approval.requested",{approvalId:Z,sessionId:W.sessionId,agentId:W.agentId,conversationId:W.conversationId,iteration:W.iteration,toolCallId:W.toolCallId,toolName:W.toolName,inputJson:JSON.stringify(W.input??null),policy:W.policy},Q))})}function HX($,W,Z){let Q=$.pendingApprovals.get(W);if(!Q)return;return $.pendingApprovals.delete(W),Q.resolve(Z),{sessionId:Q.sessionId}}function GX($,W,Z){let Q=0;for(let[J,j]of[...$.pendingApprovals.entries()]){if(!W({approvalId:J,sessionId:j.sessionId}))continue;$.pendingApprovals.delete(J),j.resolve({approved:!1,reason:Z}),$.publish($.buildEvent("approval.resolved",{approvalId:J,approved:!1,cancelled:!0,reason:Z},j.sessionId)),Q+=1}return Q}async function WD($,W){let Z=typeof W.payload?.approvalId==="string"?W.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Z))return h(W,"approval_not_found",`Unknown approval: ${Z}`);let J=typeof W.payload?.reason==="string"?W.payload.reason:W.payload?.payload&&typeof W.payload.payload==="object"&&!Array.isArray(W.payload.payload)&&typeof W.payload.payload.reason==="string"?W.payload.payload.reason:void 0,j=W.payload?.approved===!0,X=HX($,Z,{approved:j,reason:J});if(!X)return h(W,"approval_not_found",`Unknown approval: ${Z}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Z,approved:j,reason:J},X.sessionId)),u(W,{approvalId:Z,approved:j})}import{createSessionId as Nh}from"@cline/shared";function Mh($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var ZD={debug:10,info:20,warn:30,error:40,silent:50};function Rh(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function i($,W,Z={}){if(ZD[$]<ZD[Rh()])return;let Q=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:W,...Object.fromEntries(Object.entries(Z).map(([J,j])=>[J,Mh(j)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${Q}`);return}console.log(`[hub] ${Q}`)}function KX($,W){let Z=W instanceof Error?W.stack||W.message:String(W);i("error",$,{error:Z})}async function QD($,W,Z,Q,J,j){let X=Nh("capreq_"),Y=performance.now();return i("info","capability.request.start",{requestId:X,sessionId:W,capabilityName:Z,targetClientId:J}),await new Promise((V,B)=>{$.pendingCapabilityRequests.set(X,{sessionId:W,targetClientId:J,capabilityName:Z,onProgress:j,resolve:(H)=>{if(i(H.ok?"info":"warn","capability.request.end",{requestId:X,sessionId:W,capabilityName:Z,targetClientId:J,ok:H.ok,error:H.error,durationMs:Math.round(performance.now()-Y)}),!H.ok){B(Error(H.error||`Capability ${Z} was rejected by ${J}.`));return}V(H.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:X,targetClientId:J,capabilityName:Z,payload:Q},W)),i("info","capability.request.published",{requestId:X,sessionId:W,capabilityName:Z,targetClientId:J})})}function JD($,W){let Z=typeof W.payload?.requestId==="string"?W.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(Z);if(!Q)return h(W,"capability_not_found",`Unknown capability request: ${Z}`);if((W.clientId?.trim()||"")!==Q.targetClientId)return h(W,"capability_wrong_client",`Capability request ${Z} is owned by ${Q.targetClientId}`);if(W.sessionId?.trim()&&W.sessionId.trim()!==Q.sessionId)return h(W,"capability_wrong_session",`Capability request ${Z} belongs to session ${Q.sessionId}`);let j=W.payload?.payload&&typeof W.payload.payload==="object"&&!Array.isArray(W.payload.payload)?W.payload.payload:{};return Q.onProgress?.(j),u(W,{requestId:Z})}function e$($,W,Z){let Q=0;for(let[J,j]of[...$.pendingCapabilityRequests.entries()]){if(!W({requestId:J,...j}))continue;$.pendingCapabilityRequests.delete(J),i("warn","capability.request.cancelled",{requestId:J,sessionId:j.sessionId,capabilityName:j.capabilityName,targetClientId:j.targetClientId,reason:Z}),j.resolve({ok:!1,error:Z}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:j.capabilityName,targetClientId:j.targetClientId,ok:!1,cancelled:!0,error:Z},j.sessionId)),Q+=1}return Q}async function jD($,W){let Z=typeof W.payload?.sessionId==="string"?W.payload.sessionId.trim():W.sessionId?.trim()||"",Q=typeof W.payload?.capabilityName==="string"?W.payload.capabilityName.trim():"",J=typeof W.payload?.targetClientId==="string"?W.payload.targetClientId.trim():"";if(!Z||!Q||!J)return h(W,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let j=W.payload?.payload&&typeof W.payload.payload==="object"&&!Array.isArray(W.payload.payload)?W.payload.payload:{},X=await $.requestCapability(Z,Q,j,J);return u(W,X)}catch(j){return h(W,"capability_request_failed",j instanceof Error?j.message:String(j))}}function XD($,W){let Z=typeof W.payload?.requestId==="string"?W.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(Z);if(!Q)return h(W,"capability_not_found",`Unknown capability request: ${Z}`);let J=W.clientId?.trim()||"";if(J!==Q.targetClientId)return h(W,"capability_wrong_client",`Capability request ${Z} is owned by ${Q.targetClientId}`);if(W.sessionId?.trim()&&W.sessionId.trim()!==Q.sessionId)return h(W,"capability_wrong_session",`Capability request ${Z} belongs to session ${Q.sessionId}`);$.pendingCapabilityRequests.delete(Z);let j=W.payload?.payload&&typeof W.payload.payload==="object"&&!Array.isArray(W.payload.payload)?W.payload.payload:void 0,X=typeof W.payload?.error==="string"?W.payload.error:void 0,Y=W.payload?.ok===!0;return i(Y?"info":"warn","capability.respond",{requestId:Z,sessionId:Q.sessionId,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,respondedByClientId:J,ok:Y,error:X}),Q.resolve({ok:Y,payload:j,error:X}),$.publish($.buildEvent("capability.resolved",{requestId:Z,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,respondedByClientId:J,ok:Y,payload:j,error:X},Q.sessionId)),u(W,{requestId:Z,ok:Y})}import{createSessionId as Eh}from"@cline/shared";function YD($,W){let Z=W.payload,Q=Z?.clientId?.trim()||W.clientId?.trim()||Eh("client_");return $.clients.set(Q,{clientId:Q,clientType:Z?.clientType??"unknown",displayName:Z?.displayName,actorKind:Z?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Z?.transport??"native",capabilities:Z?.capabilities??[],metadata:Z?.metadata,workspaceContext:Z?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:Q,clientType:Z?.clientType??"unknown",displayName:Z?.displayName,connectedAt:Date.now()})),u(W,{clientId:Q})}function VD($,W){let Z=W.clientId?.trim(),Q=Z?$.clients.get(Z):void 0;if(!Z||!Q)return h(W,"client_not_found","Client is not registered with this hub.");let J=l6(W.payload?.metadata);if(Q.lastSeenAt=Date.now(),J)Q.metadata=JSON.parse(JSON.stringify(J));return u(W)}function BD($,W,Z){let Q=W.clientId?.trim();if(Q)$.clients.delete(Q),Z(Q),$.publish($.buildEvent("hub.client.disconnected",{clientId:Q}));return u(W)}function HD($,W){return u(W,{clients:[...$.clients.values()]})}U0();import{existsSync as FD,mkdirSync as wh,readdirSync as Ch,readFileSync as Ph,rmSync as Sh,writeFileSync as bh}from"node:fs";import{dirname as yh,join as GD}from"node:path";import{CONNECTOR_PLATFORMS as hh,connectorChannelsFromPlatforms as kh,listConnectorCatalog as AD,shouldIncludeConnectorField as Ih}from"@cline/shared";import{resolveConnectorDataDir as xh,resolveConnectorSettingsPath as AX}from"@cline/shared/storage";var gh=1,KD={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},mh={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 $2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function T9($){return typeof $==="string"?$.trim():void 0}function UD($){if(!FD($))return;try{let W=JSON.parse(Ph($,"utf8"));return $2(W)?W:void 0}catch{return}}function UX(){let $=UD(AX()),W=$2($?.connectors)?$.connectors:{},Z={};for(let[Q,J]of Object.entries(W)){if(!$2(J))continue;let j=T9(J.type),X=T9(J.configuredAt),Y=T9(J.updatedAt);if(!j||!X||!Y)continue;let V=IQ(J.values),B=$2(J.security)?{enabled:J.security.enabled===!0,values:IQ(J.security.values)}:void 0;Z[Q]={type:j,values:V,security:B,configuredAt:X,updatedAt:Y}}return{version:gh,connectors:Z}}function DD($){let W=AX();wh(yh(W),{recursive:!0}),bh(W,`${JSON.stringify($,null,2)}
|
|
589
|
+
`,"utf8")}function IQ($){if(!$2($))return{};let W={};for(let[Z,Q]of Object.entries($))if(typeof Q==="string")W[Z]=Q.trim();return W}function vh($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function ch($){let W=GD(xh(),$);if(!FD(W))return[];return Ch(W).filter((Z)=>Z.endsWith(".json")&&!Z.endsWith(".threads.json")).map((Z)=>GD(W,Z))}function uh($,W,Z){let Q=W.botUsername??W.userName??W.applicationId??W.phoneNumberId??String(Z);return`${$}:${Q}`}function dh($,W){let Z=UD(W);if(!Z)return;let Q=typeof Z.pid==="number"?Z.pid:void 0,J=typeof Z.hubUrl==="string"?Z.hubUrl:typeof Z.rpcAddress==="string"?Z.rpcAddress:void 0;if(!Q||!J||!vh(Q))return;let j=mh[$];if(!j)return;let X={};for(let Y of j.required){let V=KD[Y](Z);if(!V||typeof V==="string"&&!V.trim())return;X[Y]=V}for(let Y of j.optional){let V=KD[Y](Z);if(V!==void 0)X[Y]=V}return{id:uh($,X,Q),type:$,pid:Q,hubUrl:J,...X}}function lh(){let $=[];for(let{name:W}of AD())for(let Z of ch(W)){let Q=dh(W,Z);if(Q)$.push(Q)}return $.sort((W,Z)=>{if(W.type!==Z.type)return W.type.localeCompare(Z.type);let Q=W.botUsername??W.userName??"",J=Z.botUsername??Z.userName??"";return Q.localeCompare(J)})}function ph(){let $=UX();return Object.entries($.connectors).map(([W,Z])=>({id:W,type:Z.type,configuredAt:Z.configuredAt,updatedAt:Z.updatedAt})).sort((W,Z)=>W.type.localeCompare(Z.type))}function DX(){return{available:kh(),active:lh(),configured:ph()}}function rh($,W){if($.required&&!W[$.flag]?.trim())throw Error(`${$.label} is required`)}function ih($,W){let Z={};for(let J of $.fields)Z[J.flag]=W[J.flag]??J.initialValue??"";let Q={};for(let J of $.fields){if(!Ih(J,Z))continue;rh(J,Z),Q[J.flag]=Z[J.flag]}return Q}function nh($){if(!$2($))throw Error("connector.configure payload must be an object.");let W=T9($.channel);if(!W)throw Error("channel is required");let Z=hh.find((K)=>K.id===W);if(!Z)throw Error(`unknown connector channel: ${W}`);if(!new Set(AD().map((K)=>K.name)).has(Z.id))throw Error(`connector channel is not available: ${W}`);let J=IQ($.values),j=ih(Z,J),X=$2($.security)?$.security:{},Y=X.enabled===!0,V=IQ(X.values);if(Y&&Z.security)for(let K of Z.security.fields){let F=V[K.key];if(!F)throw Error(K.requiredMessage);let A=K.validate?.(F);if(A)throw Error(A)}let B=UX(),H=new Date().toISOString(),G=B.connectors[W];return B.connectors[W]={type:W,values:j,security:Y?{enabled:!0,values:V}:{enabled:!1,values:{}},configuredAt:G?.configuredAt??H,updatedAt:H},DD(B),DX()}function ah($){if(!$2($))throw Error("connector.delete_config payload must be an object.");let W=T9($.channel);if(!W)throw Error("channel is required");let Z=UX();if(delete Z.connectors[W],Object.keys(Z.connectors).length>0)DD(Z);else Sh(AX(),{force:!0});return DX()}function oh($){return $==="connector.configure"||$==="connector.delete_config"}function FX($,W,Z){if(!oh(W.command))return;f8($.telemetry,{ulid:W.sessionId??W.requestId??"hub",tool:W.command,success:Z})}async function _D($,W){try{if(W.command==="connector.channels")return u(W,DX());if(W.command==="connector.configure"){let Z=nh(W.payload);return FX($,W,!0),u(W,Z)}if(W.command==="connector.delete_config"){let Z=ah(W.payload);return FX($,W,!0),u(W,Z)}return h(W,"unsupported_connector_command",`unsupported connector command: ${W.command}`)}catch(Z){return FX($,W,!1),h(W,"connector_command_failed",Z instanceof Error?Z.message:String(Z))}}var sh=30000;function th($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function eh($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function $k($,W,Z){let Q=Z instanceof Error&&Z.message.trim()?Z.message:`Unknown session: ${W}`;return h($,r2,Q)}function Wk($){return $?$:void 0}function Zk($){let W=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(W&&Number.isFinite(W)&&W>0)return Math.floor(W);let Z=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(Z&&Number.isFinite(Z)&&Z>0)return Math.floor(Z*1000);return}async function Qk($,W,Z,Q){let J=performance.now(),j=!1,X={command:W.command,requestId:W.requestId,clientId:W.clientId,sessionId:Z.sessionId,timeoutMs:Q},Y=setInterval(()=>{if(j)return;let H=Math.round(performance.now()-J);i("warn","run.heartbeat",{...X,elapsedMs:H}),$.publish($.buildEvent("run.heartbeat",{requestId:W.requestId,elapsedMs:H,...Q?{timeoutMs:Q}:{}},Z.sessionId))},sh),V=$.sessionHost.runTurn(Z);V.then((H)=>{if(!j)return;i("warn","run.late_end",{...X,elapsedMs:Math.round(performance.now()-J),finishReason:H?.finishReason})},(H)=>{if(!j)return;i("error","run.late_error",{...X,elapsedMs:Math.round(performance.now()-J),error:H})});let B;try{if(!Q)return await V;return await Promise.race([V,new Promise((H,G)=>{B=setTimeout(()=>{let K=`Hub run ${W.command} timed out after ${Q}ms.`;j=!0,clearInterval(Y),G(Error(K)),i("error","run.timeout",{...X,elapsedMs:Math.round(performance.now()-J)}),GX($,(F)=>F.sessionId===Z.sessionId,K),e$($,(F)=>F.sessionId===Z.sessionId,K),$.sessionHost.abort(Z.sessionId,K).catch((F)=>{i("error","run.timeout_abort_failed",{...X,error:F})})},Q)})])}finally{if(j=!0,clearInterval(Y),B)clearTimeout(B)}}async function LD($,W){let Z=S0(W),Q=W.payload&&typeof W.payload==="object"?W.payload:{},J=typeof Q.prompt==="string"?Q.prompt:typeof Q.input==="string"?Q.input:"";if(!J.trim())return h(W,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Z));let j=Q.attachments&&typeof Q.attachments==="object"&&!Array.isArray(Q.attachments)?Q.attachments:void 0,X=Array.isArray(j?.userFiles)?j.userFiles.filter((H)=>typeof H==="string"):void 0,Y=Zk(Q);$.suppressNextTerminalEventBySession.set(Z,"run.start.reply");let V;try{V=await Qk($,W,{sessionId:Z,prompt:J,mode:Wk(Q.mode),delivery:Q.delivery==="queue"||Q.delivery==="steer"?Q.delivery:void 0,userImages:Array.isArray(j?.userImages)?j.userImages:void 0,userFiles:X,timeoutMs:Y},Y)}catch(H){if($.suppressNextTerminalEventBySession.get(Z)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Z);if(Z$(H))return $k(W,Z,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Z)),H}if(V){let H=await l0($,Z),G=eh(V);if($.publish($.buildEvent(th(V.finishReason),{reason:V.finishReason,...G?{error:G}:{},result:V,...H?{snapshot:H}:{}},Z)),$.suppressNextTerminalEventBySession.get(Z)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Z)}else $.suppressNextTerminalEventBySession.delete(Z);let B=await l0($,Z);return u(W,V||B?{...V?{result:V}:{},...B?{snapshot:B}:{}}:void 0)}async function fD($,W){let Z=S0(W),Q=typeof W.payload?.reason==="string"?W.payload.reason:"Run was aborted before pending approval or capability request was resolved.";GX($,(J)=>J.sessionId===Z,Q);try{await $.sessionHost.abort(Z,W.payload?.reason)}catch(J){i("warn","run.abort_failed",{command:W.command,requestId:W.requestId,clientId:W.clientId,sessionId:Z,error:J})}finally{e$($,(J)=>J.sessionId===Z,Q)}return u(W,{applied:!0})}async function OD($,W){let Z=g6(W.payload?.payload);if(!Z)return h(W,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Z),u(W,{applied:!0})}async function TD($,W){switch(W.type){case"chunk":return;case"agent_event":await Jk($,W);return;case"hook":if(W.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:W.payload.toolName},W.payload.sessionId));else if(W.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:W.payload.toolName},W.payload.sessionId));return;case"team_progress":{let Z={type:"team_progress_projection",version:1,sessionId:W.payload.sessionId,summary:W.payload.summary,lastEvent:W.payload.lifecycle};$.publish($.buildEvent("team.progress",Z,W.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:W.payload.sessionId,prompts:W.payload.prompts},W.payload.sessionId));return;case"pending_prompt_submitted":{let Z={id:W.payload.id,prompt:W.payload.prompt,delivery:W.payload.delivery,attachmentCount:W.payload.attachmentCount,userImages:W.payload.userImages,userFiles:W.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:W.payload.sessionId,prompt:Z},W.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:W.payload.sessionId,snapshot:W.payload.snapshot},W.payload.sessionId));return;case"status":{let[Z,Q]=await Promise.all([y0($,W.payload.sessionId),l0($,W.payload.sessionId)]);if(Z)$.publish($.buildEvent("session.updated",{session:Z,...Q?{snapshot:Q}:{}},W.payload.sessionId));return}case"ended":await jk($,W);return;default:return}}async function Jk($,W){let{sessionId:Z,event:Q}=W.payload;if(Q.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:Q.iteration},Z));return}if(Q.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:Q.iteration,hadToolCalls:Q.hadToolCalls,toolCallCount:Q.toolCallCount},Z));return}if(Q.type==="content_start"){if(Q.contentType==="text"&&typeof Q.text==="string"&&Q.text.length>0){$.publish($.buildEvent("assistant.delta",{text:Q.text},Z));return}if(Q.contentType==="reasoning"){if(Q.redacted&&!Q.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Z));return}if(typeof Q.reasoning==="string"&&Q.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:Q.reasoning,redacted:Q.redacted===!0},Z));return}if(Q.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:Q.toolCallId,toolName:Q.toolName,input:Q.input},Z));return}}if(Q.type==="content_end"){switch(Q.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:Q.text},Z));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:Q.reasoning},Z));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:Q.toolCallId,toolName:Q.toolName,output:Q.output,error:Q.error},Z));break}return}if(Q.type==="notice"){$.publish($.buildEvent("session.notice",{sessionId:Z,message:Q.message,noticeType:Q.noticeType,...Q.displayRole?{displayRole:Q.displayRole}:{},...Q.reason?{reason:Q.reason}:{},...Q.metadata?{metadata:Q.metadata}:{},agent:{kind:W.payload.teamRole==="teammate"?"teammate":Q.parentAgentId?"subagent":"lead",agentId:Q.agentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamAgentId:W.payload.teamAgentId,teamRole:W.payload.teamRole}},Z));return}if(Q.type==="usage"){let J;try{J=await $.sessionHost.getAccumulatedUsage?.(Z)}catch{J=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Z,delta:{inputTokens:Q.inputTokens,outputTokens:Q.outputTokens,cacheReadTokens:Q.cacheReadTokens??0,cacheWriteTokens:Q.cacheWriteTokens??0,totalCost:Q.cost??0},totals:{inputTokens:Q.totalInputTokens,outputTokens:Q.totalOutputTokens,cacheReadTokens:Q.totalCacheReadTokens??0,cacheWriteTokens:Q.totalCacheWriteTokens??0,totalCost:Q.totalCost??0},usage:J?.usage,aggregateUsage:J?.aggregateUsage,agent:{kind:W.payload.teamRole==="teammate"?"teammate":Q.parentAgentId?"subagent":"lead",agentId:Q.agentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamAgentId:W.payload.teamAgentId,teamRole:W.payload.teamRole}},Z));return}if(Q.type==="done")$.publish($.buildEvent("agent.done",{reason:Q.reason,text:Q.text,iterations:Q.iterations,usage:Q.usage},Z))}async function jk($,W){let Z=$.suppressNextTerminalEventBySession.get(W.payload.sessionId),Q=Z===W.payload.reason||Z==="run.start.reply";if(Q)$.suppressNextTerminalEventBySession.delete(W.payload.sessionId);let[J,j]=await Promise.all([y0($,W.payload.sessionId),l0($,W.payload.sessionId)]);if(W.payload.reason==="completed"){let X=await eU(J);$.publish($.buildEvent("ui.notify",X,W.payload.sessionId))}if(Q)return;$.publish($.buildEvent(W.payload.reason==="aborted"?"run.aborted":W.payload.reason==="error"||W.payload.reason==="failed"?"run.failed":"run.completed",{reason:W.payload.reason,...j?{snapshot:j}:{}},W.payload.sessionId))}import{createSessionId as ND,parseRuntimeConfigExtensions as ED}from"@cline/shared";var zD={};w(zD,{SessionVersioningService:()=>W2,SessionVersioningError:()=>p0});class p0 extends Error{code;constructor($,W){super(W);this.code=$;this.name="SessionVersioningError"}}function Xk($){let W=$.sessionId.trim();if(!W)throw new p0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new p0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new p0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new p0("invalid_restore","checkpointRunCount must be a positive integer");return W}class W2{async restoreCheckpoint($){let W=$.restore?.messages!==!1,Z=$.restore?.workspace!==!1,Q=Xk({sessionId:$.sessionId,restoreMessages:W,restoreWorkspace:Z,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(Q);if(!J)throw new p0("session_not_found",`Session ${Q} not found`);let j=W?await $.readMessages(Q):void 0;if(W&&j?.length===0)throw new p0("session_messages_not_found",`No messages found for session ${Q}`);let X=sj({session:J,messages:j,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:W});if(Z)await($.applyWorkspaceCheckpoint??tj)(X.cwd,X.checkpoint);let Y=w1({session:J,messages:j});if(!W)return{checkpoint:X.checkpoint,sourceSnapshot:Y};let V=aj(J,$.checkpointRunCount),B=$.restore?.omitCheckpointMessageFromSession?oj(j??[],$.checkpointRunCount):X.messages??[],H={sourceSession:J,sourceMessages:j,sourceSnapshot:Y,plan:X,restoredCheckpointMetadata:V,initialMessages:B,restoreMessages:W,restoreWorkspace:Z,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new p0("invalid_restore","start is required when restore.messages is true");let G=$.buildStartInput?await $.buildStartInput(H,$.start):$.start,K=await $.startSession(G),F=$.getStartedSessionId?.(K);if(F)await($.retainCheckpointRefs??rG)(X.cwd,F,V?.history??[]);let A=F&&$.readRestoredSession?await $.readRestoredSession(F):void 0;return{sessionId:F,startResult:K,messages:X.messages,checkpoint:X.checkpoint,sourceSnapshot:Y,...A?{restoredSnapshot:w1({session:A,messages:B})}:{}}}}import{HUB_CHECKPOINT_CAPABILITY as oe,HUB_COMPACTION_CAPABILITY as se,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as te,HUB_HOOK_CAPABILITY_PREFIX as ee,HUB_MISTAKE_LIMIT_CAPABILITY as $00,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as W00,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Z00,isHubToolExecutorName as Yk}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as V00,HUB_COMPACTION_CAPABILITY as B00,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as H00,HUB_HOOK_CAPABILITY_PREFIX as G00,HUB_MISTAKE_LIMIT_CAPABILITY as K00,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as F00,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as A00}from"@cline/shared";var Vk=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function B8($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function Bk($,W){let Z=typeof $.name==="string"?$.name.trim():"",Q=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",j=B8($.inputSchema);if(!Z||!Q||!j||!J||W.has(J))return;return W.add(J),{kind:"tool",capabilityName:J,name:Z,description:Q,inputSchema:j,...B8($.lifecycle)?{lifecycle:B8($.lifecycle)}:{}}}function LX($){if(!Array.isArray($))return[];let W=[],Z=new Set;for(let Q of $){if(!Q||typeof Q!=="object"||Array.isArray(Q))continue;let J=Q,j=J.kind,X=typeof J.capabilityName==="string"?J.capabilityName.trim():"";if(!X||Z.has(X))continue;if(j==="tool"){let Y=Bk(J,Z);if(Y)W.push(Y);continue}if(j==="toolExecutor"){let Y=J.executor;if(!Yk(Y))continue;Z.add(X),W.push({kind:"toolExecutor",capabilityName:X,executor:Y});continue}if(j==="hook"){let Y=typeof J.name==="string"?J.name.trim():"";if(!Y)continue;Z.add(X),W.push({kind:"hook",capabilityName:X,name:Y});continue}if(j==="compaction"){Z.add(X),W.push({kind:"compaction",capabilityName:X,...B8(J.config)?{config:B8(J.config)}:{}});continue}if(j==="checkpoint"){Z.add(X),W.push({kind:"checkpoint",capabilityName:X,...B8(J.config)?{config:B8(J.config)}:{}});continue}if(j==="mistakeLimit"){Z.add(X),W.push({kind:"mistakeLimit",capabilityName:X});continue}if(j==="userInstructionService")Z.add(X),W.push({kind:"userInstructionService",capabilityName:X})}return W}function MD($){let W=$.metadata?{...$.metadata}:void 0;if(W)delete W[NW];return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:W&&Object.keys(W).length>0?W:void 0}}function Hk($){return Object.hasOwn($,"update")?$.update:$}function z9($){return $.trim().replace(/^\/+/,"").toLowerCase()}function Gk($){let W=($??[]).map(z9).filter(Boolean);return W.length>0?new Set(W):void 0}function Kk($,W,Z){if(!Z)return!0;let Q=z9($),J=z9(W),j=Q.includes(":")?Q.split(":").at(-1)??Q:Q,X=J.includes(":")?J.split(":").at(-1)??J:J;return Z.has(Q)||Z.has(J)||Z.has(j)||Z.has(X)}function _X($,W){let Z=Gk(W);return $.records.skill.map((Q)=>({id:Q.id,name:Q.item.name,description:"description"in Q.item&&typeof Q.item.description==="string"?Q.item.description:void 0,disabled:Q.item.disabled===!0,skill:Q.item})).filter((Q)=>Kk(Q.id,Q.name,Z))}function qD($,W){let Z=async(Q,J)=>{let j=z9(Q),Y=_X($,W).filter((K)=>K.id===j||z9(K.name)===j||K.id.endsWith(`:${j}`)).filter((K)=>!K.disabled);if(Y.length!==1)return Y.length>1?`Skill "${Q}" is ambiguous. Use one of: ${Y.map((K)=>K.id).join(", ")}`:`Skill "${Q}" not found.`;let V=Y[0].skill,B=J?.trim(),H=B?`
|
|
590
590
|
<command-args>${B}</command-args>`:"",G=V.description?.trim()?`Description: ${V.description.trim()}
|
|
591
591
|
|
|
592
592
|
`:"";return`<command-name>${V.name}</command-name>${H}
|
|
593
593
|
<command-instructions>
|
|
594
594
|
${G}${V.instructions}
|
|
595
|
-
</command-instructions>`};return Object.defineProperty(Z,"configuredSkills",{get:()=>
|
|
595
|
+
</command-instructions>`};return Object.defineProperty(Z,"configuredSkills",{get:()=>_X($,W).map(({skill:Q,...J})=>J),enumerable:!0}),Z}function Fk($,W,Z,Q){let J={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},j=async()=>{let X=await Q($,Z.capabilityName,{},W);if(X?.snapshot)J=X.snapshot};return{start:j,stop:()=>{},refreshType:async()=>{await j()},listRecords:(X)=>[...J.records[X]],listRuntimeCommands:()=>[...J.runtimeCommands],resolveRuntimeSlashCommand:(X)=>{if(!X.startsWith("/")||X.length<2)return X;let V=X.match(/^\/(\S+)/)?.[1];if(!V)return X;let B=J.runtimeCommands.find((H)=>H.name===V);return B?`${B.instructions}${X.slice(V.length+1)}`:X},hasConfiguredSkills:(X)=>_X(J,X).some((Y)=>!Y.disabled),createSkillsExecutor:(X)=>qD(J,X),createExtension:(X)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[X.includeRules?"rules":void 0,X.registerSkillsTool?"tools":void 0,X.includeSkills||X.includeWorkflows?"commands":void 0].filter((Y)=>Boolean(Y))},setup(Y){if(X.includeRules)Y.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>K6(J.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(X.registerSkillsTool)Y.registerTool(U2(qD(J,X.allowedSkillNames)));for(let V of J.runtimeCommands.filter((B)=>B.kind==="skill"&&X.includeSkills||B.kind==="workflow"&&X.includeWorkflows))Y.registerCommand({name:V.name,description:V.description,handler:(B)=>{let H=B.trim();return H?`${V.instructions}
|
|
596
596
|
|
|
597
|
-
${H}`:V.instructions}})}})}}function Zk($,W,Z,Q){let J=Z.map((j)=>[j.executor,async(...X)=>{let Y=X.at(-1),V=X.slice(0,-1);return(await Q($,j.capabilityName,{executor:j.executor,args:V,context:zD(Y)},W))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function Qk($,W,Z,Q){if(Z.length===0)return;return Z.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema,lifecycle:J.lifecycle,async execute(j,X){return(await Q($,J.capabilityName,{toolName:J.name,input:j,context:zD(X)},W,X.emitUpdate?(V)=>{X.emitUpdate?.(th(V))}:void 0))?.result}}))}function Jk($,W,Z,Q){let J=new Map(Z.map((X)=>[X.name,X])),j={};for(let X of oh){let Y=J.get(X);if(!Y)continue;j[X]=async(V)=>{return(await Q($,Y.capabilityName,{context:V},W))?.control}}return Object.keys(j).length>0?j:void 0}function _X($){let W=$.contributions.filter((V)=>V.kind==="toolExecutor"),Z=$.contributions.filter((V)=>V.kind==="tool"),Q=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),j=$.contributions.find((V)=>V.kind==="checkpoint"),X=$.contributions.find((V)=>V.kind==="mistakeLimit"),Y=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:Zk($.sessionId,$.targetClientId,W,$.requestCapability),localRuntime:{...Q.length>0?{hooks:Jk($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...Z.length>0?{extraTools:Qk($.sessionId,$.targetClientId,Z,$.requestCapability)}:{},...J?{compaction:{...$.sessionConfig?.compaction??{},...J.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,J.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...j?{checkpoint:{...$.sessionConfig?.checkpoint??{},...j.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}:{},...Y?{userInstructionService:Wk($.sessionId,$.targetClientId,Y,$.requestCapability)}:{}}}}var qD="hubCapabilityOwnerClientId";function IQ($){return typeof $==="string"&&$.trim().length>0?$.trim():void 0}function jk($){if($==="low"||$==="medium"||$==="high"||$==="xhigh"||$===null)return $;return}function Xk($){let W=u6($)??{},Z={},Q=IQ(W.providerId);if(Q)Z.providerId=Q;let J=IQ(W.modelId);if(J)Z.modelId=J;let j=IQ(W.apiKey);if(j!==void 0)Z.apiKey=j;let X=IQ(W.baseUrl);if(X!==void 0)Z.baseUrl=X;if(W.headers&&typeof W.headers==="object")Z.headers=W.headers;if(W.providerConfig&&typeof W.providerConfig==="object")Z.providerConfig=W.providerConfig;if(Object.hasOwn(W,"thinking")){if(typeof W.thinking==="boolean"||W.thinking===null)Z.thinking=W.thinking}if(Object.hasOwn(W,"reasoningEffort")){let Y=jk(W.reasoningEffort);if(Y!==void 0)Z.reasoningEffort=Y}if(Object.hasOwn(W,"thinkingBudgetTokens")){if(typeof W.thinkingBudgetTokens==="number"&&Number.isFinite(W.thinkingBudgetTokens)&&W.thinkingBudgetTokens>0)Z.thinkingBudgetTokens=Math.trunc(W.thinkingBudgetTokens);else if(W.thinkingBudgetTokens===null)Z.thinkingBudgetTokens=null}return T2(Z)}function Yk($,W){return $.sessionState.get(W)?.createdByClientId}function Vk($){if(!$||!(qD in $))return $;let W={...$};return delete W[qD],W}function ND($){let W=Yk($.ctx,$.sessionId);if(!W)return h($.envelope,"session_wrong_client",`Session ${$.sessionId} has no owner`);if(W!==$.clientId)return h($.envelope,"session_wrong_client",`Session ${$.sessionId} is owned by ${W}`);return}async function ED($,W,Z){let Q=performance.now(),J={command:W.command,requestId:W.requestId,clientId:W.clientId,sessionId:W.sessionId};i("info","session.create.begin",J);let j=W.payload&&typeof W.payload==="object"?W.payload:{},X=j.metadata&&typeof j.metadata==="object"?JSON.parse(JSON.stringify(j.metadata)):{},Y=j.sessionConfig&&typeof j.sessionConfig==="object"?JSON.parse(JSON.stringify(j.sessionConfig)):void 0,V=j.runtimeOptions&&typeof j.runtimeOptions==="object"?j.runtimeOptions:{},B=K1(j.initialCompactionState);if(typeof Y?.mode==="string")X.mode=Y.mode;else if(typeof V.mode==="string")X.mode=V.mode;if(typeof Y?.systemPrompt==="string")X.systemPrompt=Y.systemPrompt;else if(typeof V.systemPrompt==="string")X.systemPrompt=V.systemPrompt;if(Y?.checkpoint?.enabled===!0)X.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)X.checkpointEnabled=!0;let H=j.modelSelection&&typeof j.modelSelection==="object"?j.modelSelection:{},G=typeof j.workspaceRoot==="string"&&j.workspaceRoot.trim()?j.workspaceRoot.trim():typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():"";if(!G)return i("warn","session.create.invalid",{...J,reason:"missing_workspace_root"}),h(W,"invalid_session_create","session.create requires workspaceRoot or cwd");let K=W.clientId?.trim()||"hub-client",F=DX(V.clientContributions);i("info","session.create.contributions_parsed",{...J,clientId:K,workspaceRoot:G,cwd:typeof j.cwd==="string"?j.cwd:void 0,contributionCount:F.length});let D=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||MD(),U=RD(V.configExtensions);i("info","session.create.runtime_build.begin",{...J,sessionId:D,configExtensionCount:U?.length??0});let f=_X({sessionId:D,targetClientId:K,contributions:F,sessionConfig:Y,requestCapability:$.requestCapability});i("info","session.create.start_session.begin",{...J,sessionId:D,provider:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof X.provider==="string"?X.provider:"hub"),model:Y?.modelId??(typeof H.model==="string"?H.model:typeof X.model==="string"?X.model:"hub")});let _=await $.sessionHost.startSession({source:typeof X.source==="string"?X.source:void 0,interactive:X.interactive!==!1,sessionMetadata:Object.keys(X).length>0?X:void 0,initialMessages:Array.isArray(j.initialMessages)?j.initialMessages:void 0,initialCompactionState:B,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:U,...f.localRuntime},capabilities:{toolExecutors:f.toolExecutors,requestToolApproval:Z},config:{...Y??{},sessionId:D,providerId:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof X.provider==="string"?X.provider:"hub"),modelId:Y?.modelId??(typeof H.model==="string"?H.model:typeof X.model==="string"?X.model:"hub"),apiKey:Y?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:Y?.cwd??(typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():G),workspaceRoot:Y?.workspaceRoot??G,systemPrompt:Y?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:Y?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:Y?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:Y?.enableTools??V.enableTools!==!1,enableSpawnAgent:Y?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:Y?.enableAgentTeams??V.enableTeams!==!1,checkpoint:Y?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:Y?.teamName??(typeof X.teamName==="string"?X.teamName:void 0)},toolPolicies:j.toolPolicies&&typeof j.toolPolicies==="object"&&!Array.isArray(j.toolPolicies)?JSON.parse(JSON.stringify(j.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});i("info","session.create.start_session.end",{...J,sessionId:_.sessionId,elapsedMs:Math.round(performance.now()-Q),hasImmediateResult:!!_.result}),XX($,_.sessionId,K,"creator",{interactive:X.interactive!==!1}),i("info","session.create.read_records.begin",{...J,sessionId:_.sessionId});let[R,T]=await Promise.all([b0($,_.sessionId),u0($,_.sessionId)]);if(i("info","session.create.read_records.end",{...J,sessionId:_.sessionId,hasSession:!!R,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-Q)}),R)$.publish($.buildEvent("session.created",{session:R,...T?{snapshot:T}:{}},_.sessionId));return i("info","session.create.reply",{...J,sessionId:_.sessionId,elapsedMs:Math.round(performance.now()-Q)}),u(W,{session:R,...T?{snapshot:T}:{}})}async function wD($,W,Z){let Q=W.payload&&typeof W.payload==="object"?W.payload:{},J=typeof Q.sessionId==="string"?Q.sessionId.trim():W.sessionId?.trim()||"",j=Q.checkpointRunCount;if(!J)return h(W,"invalid_restore","session.restore requires a session id");let X=Q.restore&&typeof Q.restore==="object"?Q.restore:{},Y=X.messages!==!1;if(typeof j!=="number")return h(W,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=Q.sessionConfig&&typeof Q.sessionConfig==="object"?JSON.parse(JSON.stringify(Q.sessionConfig)):void 0;if(Y&&!V)return h(W,"invalid_restore","sessionConfig is required when restore.messages is true");let B=Q.runtimeOptions&&typeof Q.runtimeOptions==="object"?Q.runtimeOptions:{},H=K1(Q.initialCompactionState),G=Q.metadata&&typeof Q.metadata==="object"?JSON.parse(JSON.stringify(Q.metadata)):{};if(typeof V?.mode==="string")G.mode=V.mode;else if(typeof B.mode==="string")G.mode=B.mode;if(typeof V?.systemPrompt==="string")G.systemPrompt=V.systemPrompt;else if(typeof B.systemPrompt==="string")G.systemPrompt=B.systemPrompt;if(V?.checkpoint?.enabled===!0)G.checkpointEnabled=!0;else if(B.checkpointEnabled===!0)G.checkpointEnabled=!0;let K=Q.modelSelection&&typeof Q.modelSelection==="object"?Q.modelSelection:{},F=W.clientId?.trim()||"hub-client",A=DX(B.clientContributions),U=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||MD(),f=RD(B.configExtensions),_=_X({sessionId:U,targetClientId:F,contributions:A,sessionConfig:V,requestCapability:$.requestCapability}),T=await new s$().restoreCheckpoint({sessionId:J,checkpointRunCount:j,restore:{messages:X.messages,workspace:X.workspace,omitCheckpointMessageFromSession:X.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(N)=>$.sessionHost.getSession(N),readMessages:(N)=>$.sessionHost.readSessionMessages(N),buildStartInput:(N)=>{if(N.restoredCheckpointMetadata)G.checkpoint=N.restoredCheckpointMetadata;let p=typeof Q.workspaceRoot==="string"&&Q.workspaceRoot.trim()?Q.workspaceRoot.trim():typeof Q.cwd==="string"&&Q.cwd.trim()?Q.cwd.trim():N.sourceSession.workspaceRoot||N.sourceSession.cwd;return{source:typeof G.source==="string"?G.source:void 0,interactive:G.interactive!==!1,sessionMetadata:{...G,restoredFromSessionId:J,restoredCheckpointRunCount:j},initialMessages:N.initialMessages,initialCompactionState:H,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:f,..._.localRuntime},capabilities:{toolExecutors:_.toolExecutors,requestToolApproval:Z},config:{...V??{},sessionId:U,providerId:V?.providerId??(typeof K.provider==="string"?K.provider:N.sourceSession.provider),modelId:V?.modelId??(typeof K.model==="string"?K.model:N.sourceSession.model),apiKey:V?.apiKey??(typeof K.apiKey==="string"?K.apiKey:""),cwd:V?.cwd??N.plan.cwd,workspaceRoot:V?.workspaceRoot??p,systemPrompt:V?.systemPrompt??(typeof B.systemPrompt==="string"?B.systemPrompt:""),mode:V?.mode??(B.mode==="plan"||B.mode==="yolo"?B.mode:"act"),maxIterations:V?.maxIterations??(typeof B.maxIterations==="number"?B.maxIterations:void 0),enableTools:V?.enableTools??B.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??B.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??B.enableTeams!==!1,checkpoint:V?.checkpoint??(B.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof G.teamName==="string"?G.teamName:void 0)},toolPolicies:Q.toolPolicies&&typeof Q.toolPolicies==="object"&&!Array.isArray(Q.toolPolicies)?JSON.parse(JSON.stringify(Q.toolPolicies)):B.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(N)=>$.sessionHost.startSession(N),getStartedSessionId:(N)=>N.sessionId,readRestoredSession:(N)=>$.sessionHost.getSession(N)});if(!Y)return u(W,{checkpoint:T.checkpoint});let O=T.startResult;if(!O)return h(W,"restore_failed","Checkpoint restore did not start a session");XX($,O.sessionId,F,"creator",{interactive:G.interactive!==!1});let[L,C]=await Promise.all([b0($,O.sessionId),u0($,O.sessionId)]);if(L)$.publish($.buildEvent("session.created",{session:L,...C?{snapshot:C}:{}},O.sessionId));return u(W,{session:L,...C?{snapshot:C}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof d0)return h(W,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return h(W,"restore_failed",V instanceof Error?V.message:String(V))}}async function CD($,W){let Z=S0(W);if(!Z)return h(W,"invalid_session_attach","session.attach requires a session id");let Q=await b0($,Z);if(!Q)return h(W,"session_not_found",`Unknown session: ${Z}`);tU($,Z,W.clientId?.trim()||"hub-client","participant");let J=await b0($,Z);return $.publish($.buildEvent("session.attached",{session:J??Q},Z)),u(W,{session:J??Q})}async function PD($,W){let Z=S0(W);if(!Z)return h(W,"invalid_session_detach","session.detach requires a session id");let Q=W.clientId?.trim()||"hub-client",J=$.sessionState.get(Z);if(J){if(J.participants.delete(Q),J.createdByClientId===Q)J.createdByClientId=void 0;if(J.participants.size===0)$.sessionState.delete(Z)}a$($,(Y)=>Y.sessionId===Z&&Y.targetClientId===Q,`Capability owner client ${Q} detached before request was resolved.`);let[j,X]=await Promise.all([b0($,Z),u0($,Z)]);return $.publish($.buildEvent("session.detached",j?{session:j,...X?{snapshot:X}:{},clientId:Q}:{clientId:Q},Z)),u(W)}async function SD($,W){let Z=S0(W),Q=W.payload?.includeSnapshot===!0,[J,j]=await Promise.all([b0($,Z),Q?u0($,Z):Promise.resolve(void 0)]);return J?u(W,{session:J,...j?{snapshot:j}:{}}):h(W,"session_not_found",`Unknown session: ${Z}`)}async function bD($,W){let Z=S0(W);if(!Z)return h(W,"invalid_session_id","session.messages requires a session id");if(!await b0($,Z))return h(W,"session_not_found",`Unknown session: ${Z}`);let J=await $.sessionHost.readSessionMessages(Z);return u(W,{sessionId:Z,messages:J})}async function yD($,W){let Z=S0(W);if(!Z)return h(W,"invalid_session_id","session.compaction.get requires a session id");if(!await b0($,Z))return h(W,"session_not_found",`Unknown session: ${Z}`);let J=W.clientId?.trim()||"hub-client",j=ND({sessionId:Z,ctx:$,clientId:J,envelope:W});if(j)return j;let X=await $.sessionHost.readSessionCompactionState(Z);return u(W,{sessionId:Z,state:X})}async function hD($,W){let Z=typeof W.payload?.limit==="number"?W.payload.limit:200,J=(await $.sessionHost.listSessions(Z)).map((j)=>hQ(j,$.sessionState.get(j.sessionId)));return u(W,{sessions:J})}async function kD($,W){let Z=S0(W),Q=Vk(u6(W.payload?.metadata)),J=await $.sessionHost.updateSession(Z,{metadata:Q}),[j,X]=await Promise.all([b0($,Z),u0($,Z)]);if(j)$.publish($.buildEvent("session.updated",{session:j,...X?{snapshot:X}:{}},Z));return{version:W.version,requestId:W.requestId,ok:J.updated,payload:{updated:J.updated,session:j,...X?{snapshot:X}:{}}}}async function ID($,W){let Z=S0(W);if(!Z)return h(W,"invalid_session_update_connection","session.update_connection requires a session id");let Q=$.sessionHost.updateSessionConnection;if(!Q)return h(W,"unsupported_session_update_connection","runtime host does not support session connection updates");let J=u6(W.payload),j=Xk(J?.updates);return await Q.call($.sessionHost,Z,j),u(W,{sessionId:Z,updated:!0})}async function xD($,W){let Z=S0(W);if(!Z)return h(W,"invalid_session_id","session.compaction.update requires a session id");let Q=W.clientId?.trim()||"hub-client",J=await b0($,Z);if(!J)return h(W,"session_not_found",`Unknown session: ${Z}`);let j=ND({sessionId:Z,ctx:$,clientId:Q,envelope:W});if(j)return j;let X=W.payload&&typeof W.payload==="object"?W.payload:{},Y=K1(X.state);if(!Y)return h(W,"invalid_compaction_state","session.compaction.update requires a valid compaction state");let V=await $.sessionHost.updateSessionCompactionState(Z,Y),[B,H]=V.updated?await Promise.all([b0($,Z),u0($,Z)]):[J,void 0];if(V.updated)$.publish($.buildEvent("session.updated",{session:B??J,...H?{snapshot:H}:{}},Z));return{version:W.version,requestId:W.requestId,ok:!0,payload:{updated:V.updated,session:B??J,...H?{snapshot:H}:{}}}}async function gD($,W){let Z=S0(W),Q=await $.sessionHost.deleteSession(Z);return $.sessionState.delete(Z),u(W,{deleted:Q})}async function mD($,W){let Z=S0(W),Q=$.sessionHost.pendingPrompts;if(!Q)return h(W,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await Q.list({sessionId:Z});return u(W,{sessionId:Z,prompts:J})}async function vD($,W){let Z=S0(W),Q=typeof W.payload?.promptId==="string"?W.payload.promptId.trim():"",J=typeof W.payload?.prompt==="string"?W.payload.prompt:void 0,j=W.payload?.delivery==="queue"||W.payload?.delivery==="steer"?W.payload.delivery:void 0,X=$.sessionHost.pendingPrompts;if(!X)return h(W,"pending_prompts_unavailable","Pending prompt service is not available.");let Y=await X.update({sessionId:Z,promptId:Q,prompt:J,delivery:j});return u(W,Y)}async function cD($,W){let Z=S0(W),Q=typeof W.payload?.promptId==="string"?W.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return h(W,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await J.delete({sessionId:Z,promptId:Q});return u(W,j)}function uD($){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 Hk=new Set(["skills","workflows","rules","tools","mcp"]);function fX($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function TW($,W){let Z=$[W];if(Z===void 0)return;if(typeof Z!=="string")throw Error(`settings payload '${W}' must be a string.`);return Z}function Gk($,W){let Z=$[W];if(Z===void 0)return;if(typeof Z!=="boolean")throw Error(`settings payload '${W}' must be a boolean.`);return Z}function dD($){if($===void 0)return{};if(!fX($))throw Error("settings.list payload must be an object.");return{cwd:TW($,"cwd"),workspaceRoot:TW($,"workspaceRoot"),availabilityContext:fX($.availabilityContext)?$.availabilityContext:void 0}}function Kk($){if(!fX($))throw Error("settings.toggle payload must be an object.");let{type:W}=$;if(typeof W!=="string"||!Hk.has(W))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...dD($),type:W,id:TW($,"id"),path:TW($,"path"),name:TW($,"name"),enabled:Gk($,"enabled")}}class d6{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=Bk("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new h1({sessionService:new y1(new S1),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:(W)=>this.publish(W),buildEvent:X8,requestCapability:(W,Z,Q,J,j)=>WD(this.ctx,W,Z,Q,J,j)},this.schedules=new m6({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(W,Z)=>{let Q=W==="schedule.execution.completed"?"schedule.execution_completed":W==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!Q)return;this.publish(X8(Q,Z&&typeof Z==="object"?Z:void 0))}}),this.scheduleCommands=new g6(this.schedules),this.settings=$.settingsService??new v$,$.cronOptions)this.cronService=new o5({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((W)=>{LD(this.ctx,W).catch((Z)=>{HX("session event handling failed",Z),xQ(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Z,severity:"error",handled:!0,context:{eventType:W.type,sessionId:W.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())VX(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(a$(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 W=await this.dispatchCommand($);return this.captureFailedReply($,W),W}catch(W){throw xQ(this.options.telemetry,{component:"core",operation:"hub.command",error:W,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),W}}async dispatchCommand($){switch($.command){case"client.register":return jD(this.ctx,$);case"client.update":return XD(this.ctx,$);case"client.unregister":return YD(this.ctx,$,(W)=>{this.listeners.delete(W),this.detachClientFromSessions(W)});case"client.list":return VD(this.ctx,$);case"session.create":return await ED(this.ctx,$,(W)=>YX(this.ctx,W));case"session.restore":return await wD(this.ctx,$,(W)=>YX(this.ctx,W));case"session.attach":return await CD(this.ctx,$);case"session.detach":return await PD(this.ctx,$);case"session.get":return await SD(this.ctx,$);case"session.messages":return await bD(this.ctx,$);case"session.compaction.get":return await yD(this.ctx,$);case"session.list":return await hD(this.ctx,$);case"session.update":return await kD(this.ctx,$);case"session.update_connection":return await ID(this.ctx,$);case"session.compaction.update":return await xD(this.ctx,$);case"session.pending_prompts":return await mD(this.ctx,$);case"session.update_pending_prompt":return await vD(this.ctx,$);case"session.remove_pending_prompt":return await cD(this.ctx,$);case"session.delete":return await gD(this.ctx,$);case"session.hook":return await fD(this.ctx,$);case"run.start":case"session.send_input":return await DD(this.ctx,$);case"run.abort":return await _D(this.ctx,$);case"capability.request":return await QD(this.ctx,$);case"approval.respond":return await eU(this.ctx,$);case"capability.respond":return JD(this.ctx,$);case"capability.progress":return ZD(this.ctx,$);case"ui.notify":return this.publish(X8("ui.notify",$.payload??{})),u($);case"ui.show_window":return this.publish(X8("ui.show_window",$.payload??{})),u($);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 UD(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 W=await this.scheduleCommands.handleCommand($);if(W.ok){let Z=uD($.command);if(Z)this.publish(X8(Z,W.payload))}return W}}}captureFailedReply($,W){if(W.ok||!W.error||!Fk(W.error.code))return;xQ(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(W.error.message),severity:W.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:W.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let W=await this.settings.list(dD($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:W}}}catch(W){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:W instanceof Error?W.message:String(W)}}}}async handleSettingsToggle($){try{let W=await this.settings.toggle(Kk($.payload));return this.publish(X8("settings.changed",{types:W.changedTypes,snapshot:W.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:W.snapshot,changedTypes:W.changedTypes}}}catch(W){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:W instanceof Error?W.message:String(W)}}}}subscribe($,W,Z){let Q=this.listeners.get($)??new Set,J={sessionId:Z?.sessionId,listener:W};return Q.add(J),this.listeners.set($,Q),()=>{let j=this.listeners.get($);if(!j)return;if(j.delete(J),j.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[W,Z]of this.sessionState.entries()){if(Z.participants.delete($),Z.createdByClientId===$)Z.createdByClientId=void 0;if(Z.participants.size===0)this.sessionState.delete(W)}a$(this.ctx,(W)=>W.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let W of this.listeners.values())for(let Z of W){if(Z.sessionId&&Z.sessionId!==$.sessionId)continue;try{Z.listener($)}catch(Q){HX(`listener threw while publishing ${$.event}`,Q),xQ(this.options.telemetry,{component:"core",operation:"hub.publish",error:Q,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function Fk($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as _k}from"node:crypto";import fk from"node:http";import Lk from"node:net";import{URL as zX}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as rD,HUB_CAPABILITIES as Ok,isHubProtocolCompatible as Tk,MAX_CLIENT_HUB_PROTOCOL_VERSION as iD,MIN_CLIENT_HUB_PROTOCOL_VERSION as nD}from"@cline/shared";import{WebSocketServer as zk}from"ws";import{captureSdkError as lD,HUB_COMMAND_SLOW_LOG_MS as Ak,resolveHubCommandTimeoutMs as Uk,safeJsonParse as Dk}from"@cline/shared";function LX($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function pD($,W,Z){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:W,message:Z}}}class zW{transport;telemetry;constructor($,W){this.transport=$;this.telemetry=W}attach($){let W=new Map,Z=new Set,Q=!1,J=(V)=>{try{$.send(JSON.stringify(V))}catch(B){console.error(`[hub] failed to send websocket frame: ${B instanceof Error?B.stack||B.message:String(B)}`)}},j=(V)=>{J({kind:"event",envelope:V})},X=async(V)=>{try{let B=JSON.parse(V.data);switch(B.kind){case"command":{let H=performance.now(),G=!1,K=LX(B);i("info","command.start",K);let F=setTimeout(()=>{if(G)return;i("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-H)})},Ak),A=this.transport.command(B.envelope);A.then((T)=>{if(!G)return;i(T.ok?"warn":"error","command.late_end",{...K,elapsedMs:Math.round(performance.now()-H),ok:T.ok,errorCode:T.error?.code,errorMessage:T.error?.message})},(T)=>{if(!G)return;i("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-H),error:T})});let D=!1,U,f,_=Uk(B.envelope.command,B.envelope.timeoutMs);try{f=_===null?await A:await Promise.race([A,new Promise((T)=>{U=setTimeout(()=>{D=!0,lD(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${B.envelope.command} did not complete within ${_}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:_}}),T(pD(B,"hub_command_timeout",`Hub command ${B.envelope.command} did not complete within ${_}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${B.envelope.requestId}.`))},_)})])}catch(T){if(clearTimeout(F),U)clearTimeout(U);throw T}if(G=D,clearTimeout(F),U)clearTimeout(U);let R=Math.round(performance.now()-H);if(D)i("error","command.timeout",{...K,durationMs:R,timeoutMs:_});else i(f.ok?"info":"warn","command.end",{...K,durationMs:R,ok:f.ok,errorCode:f.error?.code,errorMessage:f.error?.message});if(B.envelope.command==="client.register"&&f.ok){let O=(B.envelope.payload??{}).clientId?.trim()||B.envelope.clientId?.trim();if(O)Z.add(O)}else if(B.envelope.command==="client.unregister"&&f.ok){let T=B.envelope.clientId?.trim();if(T)Z.delete(T)}J({kind:"reply",envelope:f});break}case"stream.subscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;if(W.has(H))break;let G=await this.transport.subscribe(B.clientId,j,{sessionId:B.sessionId});W.set(H,G);break}case"stream.unsubscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;W.get(H)?.(),W.delete(H);break}case"reply":case"event":break}}catch(B){let H=typeof V.data==="string"?Dk(V.data):void 0;if(!H||H.kind!=="command"){i("error","rejected malformed websocket frame",{error:B});return}i("error","command.error",{...LX(H),error:B}),lD(this.telemetry,{component:"core",operation:"hub.websocket_command",error:B,severity:"error",handled:!0,context:LX(H)}),J({kind:"reply",envelope:pD(H,"command_failed",B instanceof Error?B.message:"Unknown hub error")})}},Y=()=>{if(Q)return;Q=!0;for(let V of W.values())V();W.clear();for(let V of Z)this.transport.command({version:"v1",command:"client.unregister",clientId:V});Z.clear(),$.removeEventListener("message",X),$.removeEventListener("close",Y)};return $.addEventListener("message",X),$.addEventListener("close",Y),Y}}class qW{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,W,Z){return this.transport.subscribe($,W,Z)}}function qk($){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((W)=>Buffer.from(W))).toString();return String($)}function Mk($){return{send(W){$.send(W)},addEventListener(W,Z){if(W==="message"){$.on("message",(Q)=>{Z({data:qk(Q)})});return}$.on("close",Z)},removeEventListener(){}}}function Rk($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
597
|
+
${H}`:V.instructions}})}})}}function Ak($,W,Z,Q){let J=Z.map((j)=>[j.executor,async(...X)=>{let Y=X.at(-1),V=X.slice(0,-1);return(await Q($,j.capabilityName,{executor:j.executor,args:V,context:MD(Y)},W))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function Uk($,W,Z,Q){if(Z.length===0)return;return Z.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema,lifecycle:J.lifecycle,async execute(j,X){return(await Q($,J.capabilityName,{toolName:J.name,input:j,context:MD(X)},W,X.emitUpdate?(V)=>{X.emitUpdate?.(Hk(V))}:void 0))?.result}}))}function Dk($,W,Z,Q){let J=new Map(Z.map((X)=>[X.name,X])),j={};for(let X of Vk){let Y=J.get(X);if(!Y)continue;j[X]=async(V)=>{return(await Q($,Y.capabilityName,{context:V},W))?.control}}return Object.keys(j).length>0?j:void 0}function fX($){let W=$.contributions.filter((V)=>V.kind==="toolExecutor"),Z=$.contributions.filter((V)=>V.kind==="tool"),Q=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),j=$.contributions.find((V)=>V.kind==="checkpoint"),X=$.contributions.find((V)=>V.kind==="mistakeLimit"),Y=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:Ak($.sessionId,$.targetClientId,W,$.requestCapability),localRuntime:{...Q.length>0?{hooks:Dk($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...Z.length>0?{extraTools:Uk($.sessionId,$.targetClientId,Z,$.requestCapability)}:{},...J?{compaction:{...$.sessionConfig?.compaction??{},...J.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,J.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...j?{checkpoint:{...$.sessionConfig?.checkpoint??{},...j.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}:{},...Y?{userInstructionService:Fk($.sessionId,$.targetClientId,Y,$.requestCapability)}:{}}}}var RD="hubCapabilityOwnerClientId";function xQ($){return typeof $==="string"&&$.trim().length>0?$.trim():void 0}function _k($){if($==="low"||$==="medium"||$==="high"||$==="xhigh"||$===null)return $;return}function Lk($){let W=l6($)??{},Z={},Q=xQ(W.providerId);if(Q)Z.providerId=Q;let J=xQ(W.modelId);if(J)Z.modelId=J;let j=xQ(W.apiKey);if(j!==void 0)Z.apiKey=j;let X=xQ(W.baseUrl);if(X!==void 0)Z.baseUrl=X;if(W.headers&&typeof W.headers==="object")Z.headers=W.headers;if(W.providerConfig&&typeof W.providerConfig==="object")Z.providerConfig=W.providerConfig;if(Object.hasOwn(W,"thinking")){if(typeof W.thinking==="boolean"||W.thinking===null)Z.thinking=W.thinking}if(Object.hasOwn(W,"reasoningEffort")){let Y=_k(W.reasoningEffort);if(Y!==void 0)Z.reasoningEffort=Y}if(Object.hasOwn(W,"thinkingBudgetTokens")){if(typeof W.thinkingBudgetTokens==="number"&&Number.isFinite(W.thinkingBudgetTokens)&&W.thinkingBudgetTokens>0)Z.thinkingBudgetTokens=Math.trunc(W.thinkingBudgetTokens);else if(W.thinkingBudgetTokens===null)Z.thinkingBudgetTokens=null}return q2(Z)}function fk($,W){return $.sessionState.get(W)?.createdByClientId}function Ok($){if(!$||!(RD in $))return $;let W={...$};return delete W[RD],W}function wD($){let W=fk($.ctx,$.sessionId);if(!W)return h($.envelope,"session_wrong_client",`Session ${$.sessionId} has no owner`);if(W!==$.clientId)return h($.envelope,"session_wrong_client",`Session ${$.sessionId} is owned by ${W}`);return}async function CD($,W,Z){let Q=performance.now(),J={command:W.command,requestId:W.requestId,clientId:W.clientId,sessionId:W.sessionId};i("info","session.create.begin",J);let j=W.payload&&typeof W.payload==="object"?W.payload:{},X=j.metadata&&typeof j.metadata==="object"?JSON.parse(JSON.stringify(j.metadata)):{},Y=j.sessionConfig&&typeof j.sessionConfig==="object"?JSON.parse(JSON.stringify(j.sessionConfig)):void 0,V=j.runtimeOptions&&typeof j.runtimeOptions==="object"?j.runtimeOptions:{},B=K1(j.initialCompactionState);if(typeof Y?.mode==="string")X.mode=Y.mode;else if(typeof V.mode==="string")X.mode=V.mode;if(typeof Y?.systemPrompt==="string")X.systemPrompt=Y.systemPrompt;else if(typeof V.systemPrompt==="string")X.systemPrompt=V.systemPrompt;if(Y?.checkpoint?.enabled===!0)X.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)X.checkpointEnabled=!0;let H=j.modelSelection&&typeof j.modelSelection==="object"?j.modelSelection:{},G=typeof j.workspaceRoot==="string"&&j.workspaceRoot.trim()?j.workspaceRoot.trim():typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():"";if(!G)return i("warn","session.create.invalid",{...J,reason:"missing_workspace_root"}),h(W,"invalid_session_create","session.create requires workspaceRoot or cwd");let K=W.clientId?.trim()||"hub-client",F=LX(V.clientContributions);i("info","session.create.contributions_parsed",{...J,clientId:K,workspaceRoot:G,cwd:typeof j.cwd==="string"?j.cwd:void 0,contributionCount:F.length});let D=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||ND(),U=ED(V.configExtensions);i("info","session.create.runtime_build.begin",{...J,sessionId:D,configExtensionCount:U?.length??0});let L=fX({sessionId:D,targetClientId:K,contributions:F,sessionConfig:Y,requestCapability:$.requestCapability});i("info","session.create.start_session.begin",{...J,sessionId:D,provider:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof X.provider==="string"?X.provider:"hub"),model:Y?.modelId??(typeof H.model==="string"?H.model:typeof X.model==="string"?X.model:"hub")});let _=await $.sessionHost.startSession({source:typeof X.source==="string"?X.source:void 0,interactive:X.interactive!==!1,sessionMetadata:Object.keys(X).length>0?X:void 0,initialMessages:Array.isArray(j.initialMessages)?j.initialMessages:void 0,initialCompactionState:B,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:U,...L.localRuntime},capabilities:{toolExecutors:L.toolExecutors,requestToolApproval:Z},config:{...Y??{},sessionId:D,providerId:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof X.provider==="string"?X.provider:"hub"),modelId:Y?.modelId??(typeof H.model==="string"?H.model:typeof X.model==="string"?X.model:"hub"),apiKey:Y?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:Y?.cwd??(typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():G),workspaceRoot:Y?.workspaceRoot??G,systemPrompt:Y?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:Y?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:Y?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:Y?.enableTools??V.enableTools!==!1,enableSpawnAgent:Y?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:Y?.enableAgentTeams??V.enableTeams!==!1,checkpoint:Y?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:Y?.teamName??(typeof X.teamName==="string"?X.teamName:void 0)},toolPolicies:j.toolPolicies&&typeof j.toolPolicies==="object"&&!Array.isArray(j.toolPolicies)?JSON.parse(JSON.stringify(j.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});i("info","session.create.start_session.end",{...J,sessionId:_.sessionId,elapsedMs:Math.round(performance.now()-Q),hasImmediateResult:!!_.result}),VX($,_.sessionId,K,"creator",{interactive:X.interactive!==!1}),i("info","session.create.read_records.begin",{...J,sessionId:_.sessionId});let[M,T]=await Promise.all([y0($,_.sessionId),l0($,_.sessionId)]);if(i("info","session.create.read_records.end",{...J,sessionId:_.sessionId,hasSession:!!M,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-Q)}),M)$.publish($.buildEvent("session.created",{session:M,...T?{snapshot:T}:{}},_.sessionId));return i("info","session.create.reply",{...J,sessionId:_.sessionId,elapsedMs:Math.round(performance.now()-Q)}),u(W,{session:M,...T?{snapshot:T}:{}})}async function PD($,W,Z){let Q=W.payload&&typeof W.payload==="object"?W.payload:{},J=typeof Q.sessionId==="string"?Q.sessionId.trim():W.sessionId?.trim()||"",j=Q.checkpointRunCount;if(!J)return h(W,"invalid_restore","session.restore requires a session id");let X=Q.restore&&typeof Q.restore==="object"?Q.restore:{},Y=X.messages!==!1;if(typeof j!=="number")return h(W,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=Q.sessionConfig&&typeof Q.sessionConfig==="object"?JSON.parse(JSON.stringify(Q.sessionConfig)):void 0;if(Y&&!V)return h(W,"invalid_restore","sessionConfig is required when restore.messages is true");let B=Q.runtimeOptions&&typeof Q.runtimeOptions==="object"?Q.runtimeOptions:{},H=K1(Q.initialCompactionState),G=Q.metadata&&typeof Q.metadata==="object"?JSON.parse(JSON.stringify(Q.metadata)):{};if(typeof V?.mode==="string")G.mode=V.mode;else if(typeof B.mode==="string")G.mode=B.mode;if(typeof V?.systemPrompt==="string")G.systemPrompt=V.systemPrompt;else if(typeof B.systemPrompt==="string")G.systemPrompt=B.systemPrompt;if(V?.checkpoint?.enabled===!0)G.checkpointEnabled=!0;else if(B.checkpointEnabled===!0)G.checkpointEnabled=!0;let K=Q.modelSelection&&typeof Q.modelSelection==="object"?Q.modelSelection:{},F=W.clientId?.trim()||"hub-client",A=LX(B.clientContributions),U=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||ND(),L=ED(B.configExtensions),_=fX({sessionId:U,targetClientId:F,contributions:A,sessionConfig:V,requestCapability:$.requestCapability}),T=await new W2().restoreCheckpoint({sessionId:J,checkpointRunCount:j,restore:{messages:X.messages,workspace:X.workspace,omitCheckpointMessageFromSession:X.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(N)=>$.sessionHost.getSession(N),readMessages:(N)=>$.sessionHost.readSessionMessages(N),buildStartInput:(N)=>{if(N.restoredCheckpointMetadata)G.checkpoint=N.restoredCheckpointMetadata;let l=typeof Q.workspaceRoot==="string"&&Q.workspaceRoot.trim()?Q.workspaceRoot.trim():typeof Q.cwd==="string"&&Q.cwd.trim()?Q.cwd.trim():N.sourceSession.workspaceRoot||N.sourceSession.cwd;return{source:typeof G.source==="string"?G.source:void 0,interactive:G.interactive!==!1,sessionMetadata:{...G,restoredFromSessionId:J,restoredCheckpointRunCount:j},initialMessages:N.initialMessages,initialCompactionState:H,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:L,..._.localRuntime},capabilities:{toolExecutors:_.toolExecutors,requestToolApproval:Z},config:{...V??{},sessionId:U,providerId:V?.providerId??(typeof K.provider==="string"?K.provider:N.sourceSession.provider),modelId:V?.modelId??(typeof K.model==="string"?K.model:N.sourceSession.model),apiKey:V?.apiKey??(typeof K.apiKey==="string"?K.apiKey:""),cwd:V?.cwd??N.plan.cwd,workspaceRoot:V?.workspaceRoot??l,systemPrompt:V?.systemPrompt??(typeof B.systemPrompt==="string"?B.systemPrompt:""),mode:V?.mode??(B.mode==="plan"||B.mode==="yolo"?B.mode:"act"),maxIterations:V?.maxIterations??(typeof B.maxIterations==="number"?B.maxIterations:void 0),enableTools:V?.enableTools??B.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??B.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??B.enableTeams!==!1,checkpoint:V?.checkpoint??(B.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof G.teamName==="string"?G.teamName:void 0)},toolPolicies:Q.toolPolicies&&typeof Q.toolPolicies==="object"&&!Array.isArray(Q.toolPolicies)?JSON.parse(JSON.stringify(Q.toolPolicies)):B.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(N)=>$.sessionHost.startSession(N),getStartedSessionId:(N)=>N.sessionId,readRestoredSession:(N)=>$.sessionHost.getSession(N)});if(!Y)return u(W,{checkpoint:T.checkpoint});let O=T.startResult;if(!O)return h(W,"restore_failed","Checkpoint restore did not start a session");VX($,O.sessionId,F,"creator",{interactive:G.interactive!==!1});let[f,E]=await Promise.all([y0($,O.sessionId),l0($,O.sessionId)]);if(f)$.publish($.buildEvent("session.created",{session:f,...E?{snapshot:E}:{}},O.sessionId));return u(W,{session:f,...E?{snapshot:E}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof p0)return h(W,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return h(W,"restore_failed",V instanceof Error?V.message:String(V))}}async function SD($,W){let Z=S0(W);if(!Z)return h(W,"invalid_session_attach","session.attach requires a session id");let Q=await y0($,Z);if(!Q)return h(W,"session_not_found",`Unknown session: ${Z}`);$D($,Z,W.clientId?.trim()||"hub-client","participant");let J=await y0($,Z);return $.publish($.buildEvent("session.attached",{session:J??Q},Z)),u(W,{session:J??Q})}async function bD($,W){let Z=S0(W);if(!Z)return h(W,"invalid_session_detach","session.detach requires a session id");let Q=W.clientId?.trim()||"hub-client",J=$.sessionState.get(Z);if(J){if(J.participants.delete(Q),J.createdByClientId===Q)J.createdByClientId=void 0;if(J.participants.size===0)$.sessionState.delete(Z)}e$($,(Y)=>Y.sessionId===Z&&Y.targetClientId===Q,`Capability owner client ${Q} detached before request was resolved.`);let[j,X]=await Promise.all([y0($,Z),l0($,Z)]);return $.publish($.buildEvent("session.detached",j?{session:j,...X?{snapshot:X}:{},clientId:Q}:{clientId:Q},Z)),u(W)}async function yD($,W){let Z=S0(W),Q=W.payload?.includeSnapshot===!0,[J,j]=await Promise.all([y0($,Z),Q?l0($,Z):Promise.resolve(void 0)]);return J?u(W,{session:J,...j?{snapshot:j}:{}}):h(W,"session_not_found",`Unknown session: ${Z}`)}async function hD($,W){let Z=S0(W);if(!Z)return h(W,"invalid_session_id","session.messages requires a session id");if(!await y0($,Z))return h(W,"session_not_found",`Unknown session: ${Z}`);let J=await $.sessionHost.readSessionMessages(Z);return u(W,{sessionId:Z,messages:J})}async function kD($,W){let Z=S0(W);if(!Z)return h(W,"invalid_session_id","session.compaction.get requires a session id");if(!await y0($,Z))return h(W,"session_not_found",`Unknown session: ${Z}`);let J=W.clientId?.trim()||"hub-client",j=wD({sessionId:Z,ctx:$,clientId:J,envelope:W});if(j)return j;let X=await $.sessionHost.readSessionCompactionState(Z);return u(W,{sessionId:Z,state:X})}async function ID($,W){let Z=typeof W.payload?.limit==="number"?W.payload.limit:200,J=(await $.sessionHost.listSessions(Z)).map((j)=>kQ(j,$.sessionState.get(j.sessionId)));return u(W,{sessions:J})}async function xD($,W){let Z=S0(W),Q=Ok(l6(W.payload?.metadata)),J=await $.sessionHost.updateSession(Z,{metadata:Q}),[j,X]=await Promise.all([y0($,Z),l0($,Z)]);if(j)$.publish($.buildEvent("session.updated",{session:j,...X?{snapshot:X}:{}},Z));return{version:W.version,requestId:W.requestId,ok:J.updated,payload:{updated:J.updated,session:j,...X?{snapshot:X}:{}}}}async function gD($,W){let Z=S0(W);if(!Z)return h(W,"invalid_session_update_connection","session.update_connection requires a session id");let Q=$.sessionHost.updateSessionConnection;if(!Q)return h(W,"unsupported_session_update_connection","runtime host does not support session connection updates");let J=l6(W.payload),j=Lk(J?.updates);return await Q.call($.sessionHost,Z,j),u(W,{sessionId:Z,updated:!0})}async function mD($,W){let Z=S0(W);if(!Z)return h(W,"invalid_session_id","session.compaction.update requires a session id");let Q=W.clientId?.trim()||"hub-client",J=await y0($,Z);if(!J)return h(W,"session_not_found",`Unknown session: ${Z}`);let j=wD({sessionId:Z,ctx:$,clientId:Q,envelope:W});if(j)return j;let X=W.payload&&typeof W.payload==="object"?W.payload:{},Y=K1(X.state);if(!Y)return h(W,"invalid_compaction_state","session.compaction.update requires a valid compaction state");let V=await $.sessionHost.updateSessionCompactionState(Z,Y),[B,H]=V.updated?await Promise.all([y0($,Z),l0($,Z)]):[J,void 0];if(V.updated)$.publish($.buildEvent("session.updated",{session:B??J,...H?{snapshot:H}:{}},Z));return{version:W.version,requestId:W.requestId,ok:!0,payload:{updated:V.updated,session:B??J,...H?{snapshot:H}:{}}}}async function vD($,W){let Z=S0(W),Q=await $.sessionHost.deleteSession(Z);return $.sessionState.delete(Z),u(W,{deleted:Q})}async function cD($,W){let Z=S0(W),Q=$.sessionHost.pendingPrompts;if(!Q)return h(W,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await Q.list({sessionId:Z});return u(W,{sessionId:Z,prompts:J})}async function uD($,W){let Z=S0(W),Q=typeof W.payload?.promptId==="string"?W.payload.promptId.trim():"",J=typeof W.payload?.prompt==="string"?W.payload.prompt:void 0,j=W.payload?.delivery==="queue"||W.payload?.delivery==="steer"?W.payload.delivery:void 0,X=$.sessionHost.pendingPrompts;if(!X)return h(W,"pending_prompts_unavailable","Pending prompt service is not available.");let Y=await X.update({sessionId:Z,promptId:Q,prompt:J,delivery:j});return u(W,Y)}async function dD($,W){let Z=S0(W),Q=typeof W.payload?.promptId==="string"?W.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return h(W,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await J.delete({sessionId:Z,promptId:Q});return u(W,j)}function lD($){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 zk=new Set(["skills","workflows","rules","tools","mcp"]);function OX($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function q9($,W){let Z=$[W];if(Z===void 0)return;if(typeof Z!=="string")throw Error(`settings payload '${W}' must be a string.`);return Z}function qk($,W){let Z=$[W];if(Z===void 0)return;if(typeof Z!=="boolean")throw Error(`settings payload '${W}' must be a boolean.`);return Z}function pD($){if($===void 0)return{};if(!OX($))throw Error("settings.list payload must be an object.");return{cwd:q9($,"cwd"),workspaceRoot:q9($,"workspaceRoot"),availabilityContext:OX($.availabilityContext)?$.availabilityContext:void 0}}function Mk($){if(!OX($))throw Error("settings.toggle payload must be an object.");let{type:W}=$;if(typeof W!=="string"||!zk.has(W))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...pD($),type:W,id:q9($,"id"),path:q9($,"path"),name:q9($,"name"),enabled:qk($,"enabled")}}class p6{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=Tk("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new y1({sessionService:new b1(new P1),fetch:$.fetch,logger:$.logger,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(W)=>this.publish(W),buildEvent:V8,requestCapability:(W,Z,Q,J,j)=>QD(this.ctx,W,Z,Q,J,j)},this.schedules=new c6({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(W,Z)=>{let Q=W==="schedule.execution.completed"?"schedule.execution_completed":W==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!Q)return;this.publish(V8(Q,Z&&typeof Z==="object"?Z:void 0))}}),this.scheduleCommands=new v6(this.schedules),this.settings=$.settingsService??new l$,$.cronOptions)this.cronService=new t5({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((W)=>{TD(this.ctx,W).catch((Z)=>{KX("session event handling failed",Z),gQ(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Z,severity:"error",handled:!0,context:{eventType:W.type,sessionId:W.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())HX(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(e$(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 W=await this.dispatchCommand($);return this.captureFailedReply($,W),W}catch(W){throw gQ(this.options.telemetry,{component:"core",operation:"hub.command",error:W,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),W}}async dispatchCommand($){switch($.command){case"client.register":return YD(this.ctx,$);case"client.update":return VD(this.ctx,$);case"client.unregister":return BD(this.ctx,$,(W)=>{this.listeners.delete(W),this.detachClientFromSessions(W)});case"client.list":return HD(this.ctx,$);case"session.create":return await CD(this.ctx,$,(W)=>BX(this.ctx,W));case"session.restore":return await PD(this.ctx,$,(W)=>BX(this.ctx,W));case"session.attach":return await SD(this.ctx,$);case"session.detach":return await bD(this.ctx,$);case"session.get":return await yD(this.ctx,$);case"session.messages":return await hD(this.ctx,$);case"session.compaction.get":return await kD(this.ctx,$);case"session.list":return await ID(this.ctx,$);case"session.update":return await xD(this.ctx,$);case"session.update_connection":return await gD(this.ctx,$);case"session.compaction.update":return await mD(this.ctx,$);case"session.pending_prompts":return await cD(this.ctx,$);case"session.update_pending_prompt":return await uD(this.ctx,$);case"session.remove_pending_prompt":return await dD(this.ctx,$);case"session.delete":return await vD(this.ctx,$);case"session.hook":return await OD(this.ctx,$);case"run.start":case"session.send_input":return await LD(this.ctx,$);case"run.abort":return await fD(this.ctx,$);case"capability.request":return await jD(this.ctx,$);case"approval.respond":return await WD(this.ctx,$);case"capability.respond":return XD(this.ctx,$);case"capability.progress":return JD(this.ctx,$);case"ui.notify":return this.publish(V8("ui.notify",$.payload??{})),u($);case"ui.show_window":return this.publish(V8("ui.show_window",$.payload??{})),u($);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 _D(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 W=await this.scheduleCommands.handleCommand($);if(W.ok){let Z=lD($.command);if(Z)this.publish(V8(Z,W.payload))}return W}}}captureFailedReply($,W){if(W.ok||!W.error||!Rk(W.error.code))return;gQ(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(W.error.message),severity:W.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:W.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let W=await this.settings.list(pD($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:W}}}catch(W){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:W instanceof Error?W.message:String(W)}}}}async handleSettingsToggle($){try{let W=await this.settings.toggle(Mk($.payload));return this.publish(V8("settings.changed",{types:W.changedTypes,snapshot:W.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:W.snapshot,changedTypes:W.changedTypes}}}catch(W){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:W instanceof Error?W.message:String(W)}}}}subscribe($,W,Z){let Q=this.listeners.get($)??new Set,J={sessionId:Z?.sessionId,listener:W};return Q.add(J),this.listeners.set($,Q),()=>{let j=this.listeners.get($);if(!j)return;if(j.delete(J),j.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[W,Z]of this.sessionState.entries()){if(Z.participants.delete($),Z.createdByClientId===$)Z.createdByClientId=void 0;if(Z.participants.size===0)this.sessionState.delete(W)}e$(this.ctx,(W)=>W.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let W of this.listeners.values())for(let Z of W){if(Z.sessionId&&Z.sessionId!==$.sessionId)continue;try{Z.listener($)}catch(Q){KX(`listener threw while publishing ${$.event}`,Q),gQ(this.options.telemetry,{component:"core",operation:"hub.publish",error:Q,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function Rk($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as Ck}from"node:crypto";import Pk from"node:http";import Sk from"node:net";import{URL as MX}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as nD,HUB_CAPABILITIES as bk,isHubProtocolCompatible as yk,MAX_CLIENT_HUB_PROTOCOL_VERSION as aD,MIN_CLIENT_HUB_PROTOCOL_VERSION as oD}from"@cline/shared";import{WebSocketServer as hk}from"ws";import{captureSdkError as rD,HUB_COMMAND_SLOW_LOG_MS as Nk,resolveHubCommandTimeoutMs as Ek,safeJsonParse as wk}from"@cline/shared";function TX($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function iD($,W,Z){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:W,message:Z}}}class M9{transport;telemetry;constructor($,W){this.transport=$;this.telemetry=W}attach($){let W=new Map,Z=new Set,Q=!1,J=(V)=>{try{$.send(JSON.stringify(V))}catch(B){console.error(`[hub] failed to send websocket frame: ${B instanceof Error?B.stack||B.message:String(B)}`)}},j=(V)=>{J({kind:"event",envelope:V})},X=async(V)=>{try{let B=JSON.parse(V.data);switch(B.kind){case"command":{let H=performance.now(),G=!1,K=TX(B);i("info","command.start",K);let F=setTimeout(()=>{if(G)return;i("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-H)})},Nk),A=this.transport.command(B.envelope);A.then((T)=>{if(!G)return;i(T.ok?"warn":"error","command.late_end",{...K,elapsedMs:Math.round(performance.now()-H),ok:T.ok,errorCode:T.error?.code,errorMessage:T.error?.message})},(T)=>{if(!G)return;i("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-H),error:T})});let D=!1,U,L,_=Ek(B.envelope.command,B.envelope.timeoutMs);try{L=_===null?await A:await Promise.race([A,new Promise((T)=>{U=setTimeout(()=>{D=!0,rD(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${B.envelope.command} did not complete within ${_}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:_}}),T(iD(B,"hub_command_timeout",`Hub command ${B.envelope.command} did not complete within ${_}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${B.envelope.requestId}.`))},_)})])}catch(T){if(clearTimeout(F),U)clearTimeout(U);throw T}if(G=D,clearTimeout(F),U)clearTimeout(U);let M=Math.round(performance.now()-H);if(D)i("error","command.timeout",{...K,durationMs:M,timeoutMs:_});else i(L.ok?"info":"warn","command.end",{...K,durationMs:M,ok:L.ok,errorCode:L.error?.code,errorMessage:L.error?.message});if(B.envelope.command==="client.register"&&L.ok){let O=(B.envelope.payload??{}).clientId?.trim()||B.envelope.clientId?.trim();if(O)Z.add(O)}else if(B.envelope.command==="client.unregister"&&L.ok){let T=B.envelope.clientId?.trim();if(T)Z.delete(T)}J({kind:"reply",envelope:L});break}case"stream.subscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;if(W.has(H))break;let G=await this.transport.subscribe(B.clientId,j,{sessionId:B.sessionId});W.set(H,G);break}case"stream.unsubscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;W.get(H)?.(),W.delete(H);break}case"reply":case"event":break}}catch(B){let H=typeof V.data==="string"?wk(V.data):void 0;if(!H||H.kind!=="command"){i("error","rejected malformed websocket frame",{error:B});return}i("error","command.error",{...TX(H),error:B}),rD(this.telemetry,{component:"core",operation:"hub.websocket_command",error:B,severity:"error",handled:!0,context:TX(H)}),J({kind:"reply",envelope:iD(H,"command_failed",B instanceof Error?B.message:"Unknown hub error")})}},Y=()=>{if(Q)return;Q=!0;for(let V of W.values())V();W.clear();for(let V of Z)this.transport.command({version:"v1",command:"client.unregister",clientId:V});Z.clear(),$.removeEventListener("message",X),$.removeEventListener("close",Y)};return $.addEventListener("message",X),$.addEventListener("close",Y),Y}}class R9{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,W,Z){return this.transport.subscribe($,W,Z)}}function kk($){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((W)=>Buffer.from(W))).toString();return String($)}function Ik($){return{send(W){$.send(W)},addEventListener(W,Z){if(W==="message"){$.on("message",(Q)=>{Z({data:kk(Q)})});return}$.on("close",Z)},removeEventListener(){}}}function xk($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
598
598
|
Connection: close\r
|
|
599
599
|
Content-Length: 0\r
|
|
600
600
|
\r
|
|
601
|
-
`),$.end()}catch{$.destroy()}}function
|
|
601
|
+
`),$.end()}catch{$.destroy()}}function gk($){try{$.write(`HTTP/1.1 401 Unauthorized\r
|
|
602
602
|
Connection: close\r
|
|
603
603
|
Content-Length: 0\r
|
|
604
604
|
\r
|
|
605
|
-
`),$.end()}catch{$.destroy()}}function
|
|
606
|
-
Caused by: ${$.stack}`;return j}async function
|
|
607
|
-
`).map((Q)=>Q.trim()).filter(Boolean).map((Q)=>{try{return JSON.parse(Q)}catch{return}}).filter((Q)=>Q!==void 0).reverse().slice(0,W)}loadRuntime($){let W=this.readEnvelope($);return{state:W?.teamState?
|
|
608
|
-
`,"utf8")}persistRuntime($,W,Z){this.ensureTeamSubdir($);let Q={version:1,updatedAt:
|
|
609
|
-
`,"utf8"),
|
|
605
|
+
`),$.end()}catch{$.destroy()}}function zX($,W){if(!$||!W)return!1;let Z=Buffer.from($,"utf8"),Q=Buffer.from(W,"utf8");return Z.length===Q.length&&Ck(Z,Q)}function sD($,W){let Z=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,Q=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",J=`Failed to start hub server on ${W.host}:${W.port}${W.pathname}: ${Q}`,j=Error(Z?`${J} (${Z})`:J);if(Z)$.code=Z,j.code=Z;if($ instanceof Error&&$.stack)j.stack=`${j.name}: ${j.message}
|
|
606
|
+
Caused by: ${$.stack}`;return j}async function mk($){return await new Promise((W,Z)=>{let Q=Sk.createServer();Q.once("error",Z),Q.listen(0,$,()=>{let J=Q.address();if(!J||typeof J==="string"){Q.close(()=>Z(Error("Failed to resolve free port")));return}let j=J.port;Q.close((X)=>{if(X){Z(X);return}W(j)})})})}function vk($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var qX=new Map,tD="cline-hub-auth.",ck=30000;function RX($){return Array.isArray($)?$.join(","):$??""}function eD($){return $===32||$===9}function mQ($){let W=RX($).trim(),Z="bearer";if(W.length<=6||W.slice(0,6).toLowerCase()!=="bearer"||!eD(W.charCodeAt(6)))return null;let Q=7;while(Q<W.length&&eD(W.charCodeAt(Q)))Q+=1;return W.slice(Q).trim()||null}function uk($){for(let W of RX($).split(",")){let Z=W.trim();if(Z.startsWith(tD))return Z.slice(tD.length).trim()||null}return null}function vQ($){let W=$.trim().toLowerCase();return W==="localhost"||W==="127.0.0.1"||W==="::1"||W==="[::1]"}function NX($){let W=RX($).trim();if(!W)return!1;try{return vQ(new MX(W).hostname)}catch{return!1}}async function H8($){let W=$.owner??Q$(),Z=$.host??"127.0.0.1",Q=$.pathname??"/hub",J=$.port??T6(),j=J===0?await mk(Z):J,X=j,Y=_1(Z,j,Q),V=GQ(),B=HQ(),H=new p6($);await H.start();let G=new M9(new R9(H),$.telemetry),K=new Set,F=new Date().toISOString(),A={protocolVersion:nD,minClientProtocolVersion:oD,maxClientProtocolVersion:aD,capabilities:bk,coreVersion:$5.version,buildId:V,pid:process.pid,startedAt:F},D=new Set,U,L,_=async()=>{if(L)return L;return L=(async()=>{if(U)clearInterval(U),U=void 0;for(let f of D)f.terminate?.();D.clear();for(let f of K)f();if(K.clear(),await new Promise((f,E)=>{T.close((N)=>{if(N){E(N);return}f()})}),await new Promise((f,E)=>{M.close((N)=>{if(N){E(N);return}f()})}),await H.stop(),(await f0(W.discoveryPath))?.url===Y)await c0(W.discoveryPath)})(),L},M=Pk.createServer((O,f)=>{if((O.url??"/")==="/health"){let N=JSON.stringify({ok:!0,protocolVersion:A.protocolVersion,minClientProtocolVersion:A.minClientProtocolVersion,maxClientProtocolVersion:A.maxClientProtocolVersion,coreVersion:A.coreVersion,host:Z,port:X,url:Y});f.statusCode=200,f.setHeader("content-type","application/json"),f.end(N);return}if((O.url??"/")==="/status"){if(!zX(mQ(O.headers.authorization),B)){f.statusCode=401,f.end("Unauthorized");return}let N=JSON.stringify({hubId:H.getHubId(),...A,authToken:B,host:Z,port:X,url:Y,updatedAt:new Date().toISOString()});f.statusCode=200,f.setHeader("content-type","application/json"),f.end(N);return}if((O.url??"/")==="/version"){f.statusCode=200,f.setHeader("content-type","application/json"),f.end(JSON.stringify(A));return}if(new MX(O.url??"/",`http://${Z}:${X}`).pathname==="/shutdown"&&O.method==="POST"){if(!zX(mQ(O.headers.authorization),B)){f.statusCode=401,f.end("Unauthorized");return}f.statusCode=202,f.setHeader("content-type","application/json"),f.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{_()});return}f.statusCode=404,f.end("Not found")}),T=new hk({noServer:!0});U=setInterval(()=>{for(let O of D){if(O.isAlive===!1){try{O.terminate?.()}catch{}D.delete(O);continue}O.isAlive=!1;try{O.ping?.()}catch{try{O.terminate?.()}catch{}D.delete(O)}}},ck),M.on("upgrade",(O,f,E)=>{if(new MX(O.url??"/",`http://${Z}:${X}`).pathname!==Q){f.destroy();return}if(!(zX(uk(O.headers["sec-websocket-protocol"]),B)||vQ(Z)&&NX(O.headers.origin))){gk(f);return}try{T.handleUpgrade(O,f,E,(k)=>{let P=k;P.isAlive=!0,P.on("pong",()=>{P.isAlive=!0}),D.add(P);let o=G.attach(Ik(k));K.add(o),k.once("close",()=>{D.delete(P),o(),K.delete(o)})})}catch{xk(f)}});try{await new Promise((O,f)=>{M.once("error",(E)=>{f(sD(E,{host:Z,port:j,pathname:Q}))}),M.listen(j,Z,()=>{let E=M.address();if(!E||typeof E==="string"){f(sD(Error("Failed to resolve hub port"),{host:Z,port:j,pathname:Q}));return}X=E.port,Y=_1(Z,X,Q),O()})})}catch(O){if(U)clearInterval(U),U=void 0;throw await H.stop().catch(()=>{return}),O}return await KQ(W.discoveryPath,{hubId:H.getHubId(),protocolVersion:nD,minClientProtocolVersion:oD,maxClientProtocolVersion:aD,capabilities:[...A.capabilities],coreVersion:$5.version,buildId:V,authToken:B,host:Z,port:X,url:Y,pid:process.pid,startedAt:F,updatedAt:F}),{host:Z,port:X,url:Y,authToken:B,close:_}}async function cQ($){let W=$.owner??Q$(),Z=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=$.host??"127.0.0.1",J=$.port??T6(),j=$.pathname??"/hub",X=_1(Q,J,j),Y=W.discoveryPath,V=(H)=>{if(!Z)n$(H.url,H.authToken);return H},B=qX.get(Y);if(B){let H=await B;if(H.url===X)return V({server:H,url:H.url,authToken:H.authToken,action:"reuse"})}return await FQ(W.discoveryPath,async()=>{let H=await f0(W.discoveryPath);if(H?.url&&(H.url===X||$.allowPortFallback===!0)){let F=await J$(H.url,{authToken:H.authToken});if(F?.url&&yk(F).compatible&&await E1(F.url,{authToken:H.authToken}))return V({url:F.url,authToken:H.authToken,action:"reuse"})}if(H?.url)await c0(W.discoveryPath);let K=async(F)=>{let A=H8({...F,owner:W});qX.set(Y,A);try{let D=await A;return V({server:D,url:D.url,authToken:D.authToken,action:"started"})}catch(D){throw qX.delete(Y),D}};try{return await K($)}catch(F){if(!$.allowPortFallback||!vk(F))throw F;return await K({...$,port:0})}})}function W_(){return $_()==="production"?j1():u0()}function dk($){return $_()!=="production"&&!$}async function Z_($){let W=J1({host:$.host,port:$.port,pathname:$.pathname});return await H8({...$,...W,owner:W_()})}async function Q_($){let W=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=J1({host:$.host,port:$.port,pathname:$.pathname});return await cQ({...$,...Z,allowPortFallback:$.allowPortFallback??dk(W),owner:W_()})}dQ();var X_={};w(X_,{registerRemoteConfigSessionBlobUpload:()=>rQ,readRemoteConfigSessionBlobUploadMetadata:()=>EX,prepareRemoteConfigCoreIntegration:()=>CX,createRemoteConfigSessionMessagesArtifactUploader:()=>wX,buildRemoteConfigSessionBlobUploadMetadata:()=>lQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>pQ});import{buildRemoteConfigSessionBlobUploadMetadata as lQ,clearRemoteConfigSessionBlobUpload as lk,createClineTelemetryServiceConfig as pk,createSessionId as rk,createRemoteConfigSessionMessagesArtifactUploader as ik,prepareRemoteConfigRuntime as nk,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as pQ,readRemoteConfigSessionBlobUploadMetadata as EX,registerRemoteConfigSessionBlobUpload as rQ}from"@cline/shared";function ak($,W){let Z=$.telemetry||W.telemetryService?{...W.telemetryService??{},...$.telemetry??{}}:void 0;if(!Z)return;return B$(pk(Z)).telemetry}function wX(){let $=ik();return{async uploadMessagesFile(W){await $.uploadMessagesFile(W)}}}async function CX($){let W=await nk($),Z=ak(W,$),Q=[W.pluginDefinition],J=W.claims?.subject,j=lQ(W.bundle?.remoteConfig,J),X;return{prepared:W,extensions:Q,telemetry:Z,applyToStartSessionInput(Y){let V=Y.config.extensions??[],B=Y.config.telemetry,H=j?Y.config.sessionId?.trim()||rk():Y.config.sessionId;if(H&&j)X=H;let G=H&&j?rQ(H,W.bundle?.remoteConfig,J):void 0,K=G?{...Y.sessionMetadata??{},[pQ]:G}:Y.sessionMetadata;return{...Y,...K?{sessionMetadata:K}:{},config:{...Y.config,...H?{sessionId:H}:{},extensions:[...V,...Q],telemetry:Z??B}}},async dispose(){if(X)lk(X)}}}var F_={};w(F_,{createTeamName:()=>aQ,DefaultRuntimeBuilder:()=>n6});import{hasRuntimeConfigExtension as BI}from"@cline/shared";import{nanoid as HI}from"nanoid";U1();var K_={};w(K_,{createLocalTeamStore:()=>yX,SqliteTeamStore:()=>G8,FileTeamStore:()=>N9});import{appendFileSync as ok,existsSync as r6,mkdirSync as Y_,readdirSync as sk,readFileSync as V_,renameSync as tk,writeFileSync as ek}from"node:fs";import{join as PX}from"node:path";import{resolveTeamDataDir as $I}from"@cline/shared/storage";function B_(){return new Date().toISOString()}function SX($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function H_($){return{...$,tasks:$.tasks.map((W)=>({...W,createdAt:new Date(W.createdAt),updatedAt:new Date(W.updatedAt)})),mailbox:$.mailbox.map((W)=>({...W,sentAt:new Date(W.sentAt),readAt:W.readAt?new Date(W.readAt):void 0})),missionLog:$.missionLog.map((W)=>({...W,ts:new Date(W.ts)})),runs:($.runs??[]).map((W)=>({...W,startedAt:new Date(W.startedAt),endedAt:W.endedAt?new Date(W.endedAt):void 0,nextAttemptAt:W.nextAttemptAt?new Date(W.nextAttemptAt):void 0,heartbeatAt:W.heartbeatAt?new Date(W.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),finalizedAt:W.finalizedAt?new Date(W.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),reviewedAt:W.reviewedAt?new Date(W.reviewedAt):void 0}))}}class N9{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??$I()}init(){this.ensureTeamDir()}listTeamNames(){if(!r6(this.teamDirPath))return[];return sk(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>r6(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let W=this.readEnvelope($);return W?.teamState?H_(W.teamState):void 0}readHistory($,W=200){let Z=this.historyPath($);if(!r6(Z))return[];return V_(Z,"utf8").split(`
|
|
607
|
+
`).map((Q)=>Q.trim()).filter(Boolean).map((Q)=>{try{return JSON.parse(Q)}catch{return}}).filter((Q)=>Q!==void 0).reverse().slice(0,W)}loadRuntime($){let W=this.readEnvelope($);return{state:W?.teamState?H_(W.teamState):void 0,teammates:W?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,W){this.ensureTeamSubdir($),ok(this.historyPath($),`${JSON.stringify({ts:B_(),eventType:W.type,payload:W})}
|
|
608
|
+
`,"utf8")}persistRuntime($,W,Z){this.ensureTeamSubdir($);let Q={version:1,updatedAt:B_(),teamState:W,teammates:Z},J=this.statePath($),j=`${J}.tmp`;ek(j,`${JSON.stringify(Q,null,2)}
|
|
609
|
+
`,"utf8"),tk(j,J)}markInProgressRunsInterrupted($,W){let Z=this.readEnvelope($);if(!Z?.teamState?.runs?.length)return[];let Q=Z.teamState.runs.filter((j)=>j.status==="queued"||j.status==="running").map((j)=>j.id);if(Q.length===0)return[];let J=new Date;return Z.teamState={...Z.teamState,runs:Z.teamState.runs.map((j)=>j.status==="queued"||j.status==="running"?{...j,status:"interrupted",error:W,endedAt:J}:j)},this.persistRuntime($,Z.teamState,Z.teammates),Q}ensureTeamDir(){if(!r6(this.teamDirPath))Y_(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let W=PX(this.ensureTeamDir(),SX($));if(!r6(W))Y_(W,{recursive:!0});return W}statePath($){return PX(this.ensureTeamDir(),SX($),"state.json")}historyPath($){return PX(this.ensureTeamDir(),SX($),"task-history.jsonl")}readEnvelope($){let W=this.statePath($);if(!r6(W))return;try{let Z=JSON.parse(V_(W,"utf8"));if(Z?.version===1&&Z.teamState)return Z}catch{}return}}import{existsSync as WI,mkdirSync as ZI}from"node:fs";import{join as QI}from"node:path";import{safeJsonParse as G_}from"@cline/shared";import{loadSqliteDb as JI,nowIso as bX}from"@cline/shared/db";import{resolveDbDataDir as jI}from"@cline/shared/storage";function XI(){return jI()}function i6($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function YI($){let W=G_($);if(!Array.isArray(W))return[];let Z=[];for(let Q of W){if(!Q||typeof Q!=="object")continue;let J=Q,j=J.agentId,X=J.rolePrompt;if(typeof j!=="string"||!j.trim())continue;if(typeof X!=="string"||!X.trim())continue;let Y={agentId:j.trim(),rolePrompt:X};if(typeof J.modelId==="string"&&J.modelId.trim())Y.modelId=J.modelId.trim();if(typeof J.maxIterations==="number"&&Number.isFinite(J.maxIterations))Y.maxIterations=Math.max(1,Math.floor(J.maxIterations));Z.push(Y)}return Z}function VI($){return{...$,tasks:$.tasks.map((W)=>({...W,createdAt:new Date(W.createdAt),updatedAt:new Date(W.updatedAt)})),mailbox:$.mailbox.map((W)=>({...W,sentAt:new Date(W.sentAt),readAt:W.readAt?new Date(W.readAt):void 0})),missionLog:$.missionLog.map((W)=>({...W,ts:new Date(W.ts)})),runs:($.runs??[]).map((W)=>({...W,startedAt:new Date(W.startedAt),endedAt:W.endedAt?new Date(W.endedAt):void 0,nextAttemptAt:W.nextAttemptAt?new Date(W.nextAttemptAt):void 0,heartbeatAt:W.heartbeatAt?new Date(W.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),finalizedAt:W.finalizedAt?new Date(W.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),reviewedAt:W.reviewedAt?new Date(W.reviewedAt):void 0}))}}class G8{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??XI()}init(){this.getRawDb()}ensureTeamDir(){if(!WI(this.teamDirPath))ZI(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return QI(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=JI(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
|
|
610
610
|
CREATE TABLE IF NOT EXISTS team_store_schema_version (
|
|
611
611
|
lock INTEGER PRIMARY KEY CHECK (lock = 1),
|
|
612
612
|
version INTEGER NOT NULL
|
|
@@ -690,8 +690,8 @@ Caused by: ${$.stack}`;return j}async function Ek($){return await new Promise((W
|
|
|
690
690
|
version INTEGER NOT NULL DEFAULT 1,
|
|
691
691
|
PRIMARY KEY(team_name, fragment_id)
|
|
692
692
|
);
|
|
693
|
-
`)}run($,W=[]){return this.getRawDb().prepare($).run(...W)}queryOne($,W=[]){return this.getRawDb().prepare($).get(...W)??void 0}queryAll($,W=[]){return this.getRawDb().prepare($).all(...W)}withTransaction($){let W=this.getRawDb();W.exec("BEGIN IMMEDIATE;");try{$(),W.exec("COMMIT;")}catch(Z){try{W.exec("ROLLBACK;")}catch{}throw Z}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let W=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[
|
|
694
|
-
VALUES (?, ?, ?, ?, NULL, ?)`,[
|
|
693
|
+
`)}run($,W=[]){return this.getRawDb().prepare($).run(...W)}queryOne($,W=[]){return this.getRawDb().prepare($).get(...W)??void 0}queryAll($,W=[]){return this.getRawDb().prepare($).all(...W)}withTransaction($){let W=this.getRawDb();W.exec("BEGIN IMMEDIATE;");try{$(),W.exec("COMMIT;")}catch(Z){try{W.exec("ROLLBACK;")}catch{}throw Z}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let W=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[i6($)]);if(!W)return;let Z=G_(W.state_json);if(!Z)return;try{return VI(Z)}catch{return}}readHistory($,W=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[i6($),W]).flatMap((Z)=>{try{return[{eventType:Z.event_type,payload:JSON.parse(Z.payload_json),ts:Z.ts}]}catch{return[]}})}loadRuntime($){let W=i6($),Z=this.readState(W),Q=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[W]),J=Q?YI(Q.teammates_json):[];return{state:Z,teammates:J,interruptedRunIds:[]}}appendTeamEvent($,W,Z,Q){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
|
|
694
|
+
VALUES (?, ?, ?, ?, NULL, ?)`,[i6($),bX(),W,JSON.stringify(Z),Q??null])}persistRuntime($,W,Z){let Q=i6($),J=bX();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
|
|
695
695
|
VALUES (?, ?, ?, ?)
|
|
696
696
|
ON CONFLICT(team_name) DO UPDATE SET
|
|
697
697
|
state_json = excluded.state_json,
|
|
@@ -736,29 +736,29 @@ Caused by: ${$.stack}`;return j}async function Ek($){return await new Promise((W
|
|
|
736
736
|
status = excluded.status,
|
|
737
737
|
reviewed_by = excluded.reviewed_by,
|
|
738
738
|
reviewed_at = excluded.reviewed_at,
|
|
739
|
-
version = team_outcome_fragments.version + 1`,[Q,j.outcomeId,j.id,j.section,j.sourceAgentId,j.sourceRunId??null,j.content,j.status,j.reviewedBy??null,j.reviewedAt?j.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,W){let Z=
|
|
740
|
-
WHERE team_name = ? AND status IN ('queued', 'running')`,[W,J,Z]),Q.map((j)=>j.run_id)}handleTeamEvent($,W){this.appendTeamEvent($,W.type,W)}}function SX($={}){try{let W=new B8($);return W.init(),W}catch{let W=new MW({teamDir:$.teamDir});return W.init(),W}}function rQ($,W){return sk($,W)}function ek($,W){let Z=W?.["*"]??{},Q=W?.[$]??{};return{...Z,...Q}.enabled!==!1}function $I($,W){return $.filter((Z)=>ek(Z.name,W))}function bX($,W){return n1($I($,W))}var WI={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 ZI($){let W=$.trim().toLowerCase();return WI[W]??W}function QI($,W){if(W.tools===void 0)return $;let Z=new Set(W.tools.map(ZI));if(W.skills!==void 0)Z.add("skills");return $.filter((Q)=>Z.has(Q.name))}function nQ(){return`team-${tk(5)}`}function iQ($,W,Z,Q,J,j,X,Y){let V=a0[i1({mode:Z})],B=k8(W,Q,Z,J??h8);return bX(N2({cwd:$,...V,enableSkills:!!X,...B,executors:{...X?{skills:X}:{},...Y??{}}}),j)}function JI($){return iQ($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,jI,$.toolExecutors).some((W)=>W.name==="skills")}var jI=async()=>"";async function XI($){let W=Q0();if(!W$({filePath:W}))return{tools:[]};let Z=new u2({clientFactory:U6({settingsPath:W})}),Q;try{Q=await c2(Z,{filePath:W})}catch(Y){await Z.dispose().catch(()=>{});let V=Y instanceof Error?Y.message:String(Y);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let J=Q.filter((Y)=>Y.disabled!==!0),j=await Promise.allSettled(J.map((Y)=>_6({serverName:Y.name,provider:Z}))),X=[];for(let[Y,V]of j.entries())if(V.status==="fulfilled")X.push(...V.value);else{let B=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${J[Y].name}", skipping: ${B}`)}return{tools:X,shutdown:async()=>{await Z.dispose()}}}function YI($,W){if(!$)return;for(let Z of $.getTeammateIds())try{$.shutdownTeammate(Z,W)}catch{}}function VI($){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 BI($){let W=a0[i1({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??W.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??W.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 r6{teamRuntimeEntries=new Map;async build($){let{config:W,hooks:Z,extensions:Q,logger:J,telemetry:j,createSpawnTool:X,onTeamRestored:Y,userInstructionService:V,configExtensions:B,toolExecutors:H}=$,G=$.onTeamEvent??(()=>{}),K=BI(W),F=W.workspaceRoot??W.cwd,A=$.toolPolicies??W.toolPolicies,D=R1(),U=[],f=W.teamName?.trim()||nQ(),_=W.sessionId?.trim()||f,R=K.enableSpawnAgent?R6({workspaceRoot:F}):{configs:[],errors:[]},T=R.configs.some((l)=>l.skills!==void 0),O=rQ(B,"rules"),L=rQ(B,"skills"),C=L||T,N=rQ(B,"workflows"),p=rQ(B,"plugins"),x=O||L||N,P=!1,r=Boolean(V),d=V,x1;for(let l of R.errors)(J??W.logger)?.log?.(`[agents] Failed to load agent config at ${l.path}: ${l.error.message}`);if(!d&&(x||T))d=x$({skills:C?{workspacePath:F,includePluginSkills:p,pluginSkillDirectories:p?$.pluginSkillDirectories:void 0,pluginPaths:W.pluginPaths,cwd:W.cwd}:{workspacePath:F},rules:{workspacePath:W.cwd},workflows:{workspacePath:W.cwd}});if(d)await d.start().catch(()=>{});let W2=K.enableTools&&L&&Boolean(d)&&d?.hasConfiguredSkills(W.skills)===!0&&JI({cwd:W.cwd,providerId:W.providerId,mode:K.mode,modelId:W.modelId,toolRoutingRules:W.toolRoutingRules,toolPolicies:A,toolExecutors:H}),A$=d&&x?d.createExtension({includeRules:O,includeSkills:L,includeWorkflows:N,registerSkillsTool:W2,allowedSkillNames:W.skills}):void 0,I0=A$?[...Q??W.extensions??[],A$]:Q??W.extensions;if(K.enableTools){if(U.push(...iQ(W.cwd,W.providerId,K.mode,W.modelId,W.toolRoutingRules,A,void 0,H)),!K.disableMcpSettingsTools){let l=await XI(W.logger);U.push(...l.tools),x1=l.shutdown}}let U0,O1=K.enableAgentTeams?SX():void 0,A8=O1?.loadRuntime(_),V0=A8?.state,l0=A8?.teammates??[],V1=new Map(l0.map((l)=>[l.agentId,l])),y=W.sessionId||f,B1,k=[],W0=!1,T0=E$({providerId:W.providerId,modelId:W.modelId,cwd:W.cwd,apiKey:W.apiKey??"",baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking,reasoningEffort:W.reasoningEffort,thinkingBudgetTokens:W.thinkingBudgetTokens,maxTokensPerTurn:W.maxTokensPerTurn,temperature:W.temperature,maxIterations:W.maxIterations,hooks:Z,extensions:I0,logger:J??W.logger,telemetry:$.telemetry??W.telemetry,workspaceMetadata:W.workspaceMetadata});if(K.enableSpawnAgent){if(R.configs.length>0)U.push(...bX(N6({configProvider:T0,agents:R.configs,createSubAgentTools:(l)=>K.enableTools?QI(iQ(W.cwd,l.providerId??W.providerId,K.mode,l.modelId??W.modelId,W.toolRoutingRules,A,l.skills!==void 0&&d?.createSkillsExecutor?d.createSkillsExecutor(l.skills):void 0,H),l):[],hookErrorMode:W.hookErrorMode,toolPolicies:A,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),A))}if(!this.teamRuntimeEntries.has(y))this.teamRuntimeEntries.set(y,{delegatedAgentConfigProvider:T0});let M0=()=>{if(!K.enableAgentTeams)return;let l=this.teamRuntimeEntries.get(y)??{delegatedAgentConfigProvider:T0};if(this.teamRuntimeEntries.set(y,l),U0=l.runtime,!U0){if(U0=new $8({teamName:f,leadAgentId:W.sessionId||"lead",missionLogIntervalSteps:K.missionLogIntervalSteps,missionLogIntervalMs:K.missionLogIntervalMs,onTeamEvent:(B0)=>{if(G(B0),U0&&O1){if(B0.type==="teammate_spawned"&&B0.teammate?.rolePrompt){let g1={agentId:B0.agentId,rolePrompt:B0.teammate.rolePrompt,modelId:B0.teammate.modelId,maxIterations:B0.teammate.maxIterations};V1.set(g1.agentId,g1)}if(B0.type==="teammate_shutdown"&&!VI(B0.reason))V1.delete(B0.agentId);O1.handleTeamEvent(_,B0),O1.persistRuntime(_,U0.exportState(),Array.from(V1.values()))}}}),V0)U0.hydrateState(V0),W0=!0;l.runtime=U0}if(!P){if(!U0)return;P=!0;let B0=m8({runtime:U0,leadAgentId:W.sessionId||"lead",restoredFromPersistence:Boolean(V0),restoredTeammates:l0,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(g1)=>{k=g1,B1?.addTools(g1)},createBaseTools:K.enableTools?()=>iQ(W.cwd,W.providerId,K.mode,W.modelId,W.toolRoutingRules,A,void 0,H):void 0,teammateConfigProvider:T0});if(W0)U0.recoverActiveRuns("runtime_recovered");if(B0.restoredFromPersistence)Y?.();U.push(...B0.tools)}return U0};if(K.enableSpawnAgent&&X){let l=X();U.push({...l,execute:async(B0,g1)=>{return M0(),l.execute(B0,g1)}})}if(K.enableAgentTeams)M0();let pW=bX(U,A),e6=pW.some((l)=>l.name==="submit_and_exit"&&l.lifecycle?.completesRun===!0),U8=K.enableAgentTeams?()=>{let l=this.teamRuntimeEntries.get(y)?.runtime;if(!l)return;let B0=l.listTasks(),g1=B0.some((U$)=>U$.status==="in_progress"||U$.status==="pending"),nY=l.listRuns({}),If=nY.some((U$)=>U$.status==="running"||U$.status==="queued");if(g1||If){let U$=B0.filter((p0)=>p0.status==="in_progress"||p0.status==="pending").map((p0)=>`${p0.id} (${p0.status}): ${p0.title}`).join(", "),aY=nY.filter((p0)=>p0.status==="running"||p0.status==="queued").map((p0)=>`${p0.id} (${p0.status})`).join(", "),P7=[];if(U$)P7.push(`Unfinished tasks: ${U$}`);if(aY)P7.push(`Active runs: ${aY}`);return`[SYSTEM] You still have team obligations. ${P7.join(". ")}. Use team_run_task to delegate work, or team_task with action=complete to mark tasks done, or team_await_runs to wait for active runs. Do NOT stop until all tasks are completed.`}return}:void 0,kf=e6?{requireCompletionTool:!0,...U8?{completionGuard:U8}:{}}:U8?{completionGuard:U8}:void 0;return{tools:pW,logger:J??W.logger,telemetry:j??W.telemetry,teamRuntime:U0,teamRestoredFromPersistence:Boolean(V0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(y)?.delegatedAgentConfigProvider??T0,extensions:I0,completionPolicy:kf,registerLeadAgent:(l)=>{if(B1=l,k.length>0)l.addTools(n1(k,[...D]))},shutdown:async(l)=>{if(YI(U0,l),this.teamRuntimeEntries.delete(y),await x1?.(),!r)d?.stop()}}}}var F_={};w(F_,{requestDesktopToolApproval:()=>hX});import{mkdir as HI,readFile as GI,unlink as KI,writeFile as FI}from"node:fs/promises";import{join as K_}from"node:path";function AI($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function UI($){return new Promise((W)=>setTimeout(W,$))}async function yX($){try{await KI($)}catch{}}async function hX($,W={}){let Z=W.approvalDir?.trim(),Q=W.sessionId?.trim();if(!Z||!Q)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await HI(Z,{recursive:!0});let J=AI(`${$.toolCallId}`),j=K_(Z,`${Q}.request.${J}.json`),X=K_(Z,`${Q}.decision.${J}.json`),Y=W.nowIso??(()=>new Date().toISOString());await FI(j,`${JSON.stringify({requestId:J,sessionId:Q,createdAt:Y(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
|
|
741
|
-
`,"utf8");let V=W.timeoutMs??300000,B=W.pollIntervalMs??200,H=Date.now();while(Date.now()-H<V){try{let G=await
|
|
742
|
-
`,"utf8")}function f_($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((W)=>W.trim()).filter((W)=>W.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((W)=>W.trim()).filter((W)=>W.length>0))]}}function tQ($){if(!H8($))return;let W=$.metadata;return H8(W)?W:void 0}function sQ($,W){let Z=tQ($);if(!Z||Z.source!=="plugin")return!1;let Q=typeof Z.pluginName==="string"?Z.pluginName:typeof Z.plugin==="string"?Z.plugin:void 0,J=typeof Z.pluginPath==="string"?Z.pluginPath:void 0;if(W.pluginName&&Q===W.pluginName){if(!W.pluginPath||J===W.pluginPath)return!0}if(J&&W.pluginPath&&(J===W.pluginPath||oQ(W.pluginPath,J)||oQ(J,W.pluginPath)))return!0;if(Q&&W.pluginNames?.some((j)=>j===Q))return!0;if(J&&W.pluginPaths?.some((j)=>J===j||oQ(j,J)||oQ(J,j)))return!0;return!1}function wI($){let W=H8($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:__($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...W,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function CI($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let W=await a8({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Z=[],Q=[],J=(W.failures??[]).map((j)=>({pluginPath:j.pluginPath,pluginName:j.pluginName,message:j.message}));for(let j of W.extensions??[]){let X=j.__clinePluginPath;if(!X)continue;if(!j.setup){Z.push({pluginName:j.name,pluginPath:X});continue}let Y=[],V={registerTool:(B)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(B)=>{if(!j.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');Y.push(B)}};try{await j.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(B){J.push({pluginPath:X,pluginName:j.name,message:B instanceof Error?B.message:String(B)});continue}Z.push({pluginName:j.name,pluginPath:X});for(let B of Y)Q.push({pluginName:j.name,pluginPath:X,server:{...B,metadata:{...B.metadata??{},source:"plugin",pluginName:j.name,pluginPath:X}}})}return{plugins:Z,servers:Q,failures:J}}finally{await W.shutdown().catch(()=>{})}}async function NW($){let W=$.settingsPath??Q0(),Z={mutations:[],failures:[]},Q;try{Q=await CI($)}catch(B){for(let H of $.pluginPaths)Z.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Z}Z.failures.push(...Q.failures);let J;try{J=IX(W)}catch(B){for(let H of $.pluginPaths)Z.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Z}let j=xX(J),X=new Map,Y=new Map;for(let B of Q.plugins)X.set(B.pluginPath,new Set),Y.set(B.pluginPath,B.pluginName);let V=$Q(Q.servers.map((B)=>({server:B.server,owner:B,ownerLabel:B.pluginName})));for(let B of V){let H=B.owner;if(!X.has(H.pluginPath))X.set(H.pluginPath,new Set);if(B.name)X.get(H.pluginPath)?.add(B.name);if(!B.registration){Z.mutations.push({name:B.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:B.loadError??"invalid MCP server registration"});continue}let G=j[B.registration.name];if(G!==void 0){if(!sQ(G,{pluginName:H.pluginName,pluginPath:H.pluginPath})){Z.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}j[B.registration.name]=wI({registration:B.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:H8(G)?G:void 0}),Z.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:G===void 0?"created":"updated"})}for(let[B,H]of Object.entries(j)){let G=tQ(H),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=X.get(K);if(F&&sQ(H,{pluginPath:K})&&!F.has(B))delete j[B],Z.mutations.push({name:B,pluginName:typeof G?.pluginName==="string"?G.pluginName:Y.get(K)??"plugin",pluginPath:K,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Z.mutations.some((B)=>B.action!=="skipped"))try{gX(W,J,j)}catch(B){for(let H of $.pluginPaths)Z.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)})}return Z}function mX($){let W=$.settingsPath??Q0(),Z;try{Z=IX(W)}catch{return[]}let Q=xX(Z),J=f_($),j=[];for(let[X,Y]of Object.entries(Q)){if(!H8(Y)||!sQ(Y,J))continue;let V=tQ(Y);Q[X]={...Y,disabled:!0},j.push({name:X,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(j.length>0)gX(W,Z,Q);return j}function EW($){let W=$.settingsPath??Q0(),Z;try{Z=IX(W)}catch{return[]}let Q=xX(Z),J=f_($),j=[];for(let[X,Y]of Object.entries(Q)){if(!sQ(Y,J))continue;let V=tQ(Y);delete Q[X],j.push({name:X,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(j.length>0)gX(W,Z,Q);return j}var pX="_installed",vI="package",cI=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function cX($){return $.trim().toLowerCase()}function L1($,W){let Z=W?.trim();if(!Z)return;$.add(Z)}function uI($){return $.replace(/-[0-9a-f]{12}$/i,"")}function uX($){let W=kI($);return W?$.slice(0,-W.length):$}function dX($){if(!n6($))return;try{let W=JSON.parse(SI($,"utf8"));return typeof W.name==="string"?W.name.trim():void 0}catch{return}}function rX($,W){let Z=xI(W,$);return Z===""||!Z.startsWith("..")&&!II(Z)}function O_($){let Z=i6($).split(vX),Q=Z.lastIndexOf(pX);if(Q<0)return;let J=Z[Q+1];if(!J)return;let j=cI.get(J)??1,X=Q+2+j;if(Z.length<X)return;let Y=Z.slice(0,X).join(vX)||vX;return n6(Y)?Y:void 0}function eQ($){try{return PI($,{withFileTypes:!0})}catch{return[]}}function dI($){let W=G$($,pX);if(!n6(W))return[];let Z=[];for(let Q of eQ(W)){if(!Q.isDirectory())continue;let J=G$(W,Q.name);if(Q.name==="git"){for(let j of eQ(J)){if(!j.isDirectory())continue;let X=G$(J,j.name);for(let Y of eQ(X))if(Y.isDirectory())Z.push(G$(X,Y.name))}continue}for(let j of eQ(J))if(j.isDirectory())Z.push(G$(J,j.name))}return Z.sort((Q,J)=>Q.localeCompare(J))}function T_($){try{return gI($)}catch{return[]}}function lX($){let W=T_($),Z=new Set;L1(Z,j1($)),L1(Z,uI(j1($))),L1(Z,dX(G$($,"package.json"))),L1(Z,dX(G$($,vI,"package.json")));for(let Q of W)L1(Z,j1(Q)),L1(Z,uX(j1(Q)));return{installPath:$,entryPaths:W,names:[...Z].sort((Q,J)=>Q.localeCompare(J)),installed:!0}}function lI($,W){let Z=i6($),Q=W.find((X)=>rX(Z,X));if(!Q)return;let J=t$(Z);while(J!==Q&&J!==t$(J)){if(n6(G$(J,"package.json")))return J;J=t$(J)}let j=j1(Z);if((j==="index.ts"||j==="index.js")&&t$(Z)!==Q)return t$(Z);return Z}function z_($,W){let Z=lI($,W);if(!Z)return;let Q=new Set;return L1(Q,j1($)),L1(Q,uX(j1($))),L1(Q,j1(Z)),L1(Q,uX(j1(Z))),L1(Q,dX(G$(Z,"package.json"))),{installPath:Z,entryPaths:[$],names:[...Q].sort((J,j)=>J.localeCompare(j)),installed:!1}}function pI($){let W=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return mI(W).filter((Z)=>n6(Z))}function rI($){let W=new Map;for(let Z of $){for(let Q of dI(Z))W.set(Q,lX(Q));for(let Q of T_(Z)){let J=O_(Q);if(J){if(!W.has(J))W.set(J,lX(J));continue}let j=z_(Q,$);if(j)W.set(j.installPath,j)}}return[...W.values()].sort((Z,Q)=>Z.installPath.localeCompare(Q.installPath))}function iI($,W){let Z=cX(W);if(!Z)return!1;if(cX($.installPath)===Z)return!0;return $.names.some((Q)=>cX(Q)===Z)}function nI($,W,Z){let Q=i6($);for(let j of W){if(rX(Q,j.installPath))return j;if(j.entryPaths.some((X)=>i6(X)===Q))return j}let J=O_(Q);if(J)return lX(J);if(n6(Q))return z_(Q,Z);return}function aI($){let W=N0(),Z=W.disabledPlugins;if(!Z?.length)return;let Q=Z.filter((J)=>{let j=i6(J);if(rX(j,$.installPath))return!1;return!$.entryPaths.some((X)=>i6(X)===j)});if(Q.length===Z.length)return;M1({...W,disabledPlugins:Q})}function oI($){let W=t$($);while(W!==t$(W)&&j1(W)!==pX){try{bI(W)}catch{return}W=t$(W)}}function sI($){return`${$.names[0]??j1($.installPath)} at ${$.installPath}`}async function wW($){let W=pI($),Z=rI(W),Q=$.path?.trim(),J=$.name?.trim(),j;if(Q){if(j=nI(Q,Z,W),!j)throw Error(`No plugin found at ${Q}`)}else{if(!J)throw Error("plugin uninstall requires a plugin name");let Y=Z.filter((V)=>iI(V,J));if(Y.length===0)throw Error(`No plugin found matching "${J}"`);if(Y.length>1)throw Error(`Multiple plugins match "${J}": ${Y.map(sI).join(", ")}`);j=Y[0]}let X=hI(j.installPath,{throwIfNoEntry:!1});if(!X)throw Error(`Plugin install path does not exist: ${j.installPath}`);if(EW({pluginPaths:[j.installPath,...j.entryPaths],pluginNames:j.names}),yI(j.installPath,{recursive:X.isDirectory(),force:!0}),aI(j),j.installed)oI(j.installPath);return{name:J||j.names[0]||j1(j.installPath),installPath:j.installPath,removedPaths:[j.installPath],entryPaths:j.entryPaths}}var iX=120000,CW=12000,jx=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,Xx=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,Yx=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,Vx=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function nX($){return $.install?.args??[]}function Bx(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||$x()}function Hx($){let W=0,Z=$.length;while(W<Z&&($[W]==="."||$[W]==="-"))W++;while(Z>W&&($[Z-1]==="."||$[Z-1]==="-"))Z--;return $.slice(W,Z)}function Gx($){return Hx($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function N_($){return $.split(/\r?\n/).map((W)=>{if(!jx.test(W))return W;return W.replace(Xx,"$1[redacted]").replace(Yx,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(Vx,"$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(`
|
|
743
|
-
`).slice(-
|
|
744
|
-
`)).trim();return W.length>0?W:void 0}function
|
|
745
|
-
Timed out after ${
|
|
739
|
+
version = team_outcome_fragments.version + 1`,[Q,j.outcomeId,j.id,j.section,j.sourceAgentId,j.sourceRunId??null,j.content,j.status,j.reviewedBy??null,j.reviewedAt?j.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,W){let Z=i6($),Q=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[Z]);if(Q.length===0)return[];let J=bX();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
|
|
740
|
+
WHERE team_name = ? AND status IN ('queued', 'running')`,[W,J,Z]),Q.map((j)=>j.run_id)}handleTeamEvent($,W){this.appendTeamEvent($,W.type,W)}}function yX($={}){try{let W=new G8($);return W.init(),W}catch{let W=new N9({teamDir:$.teamDir});return W.init(),W}}function iQ($,W){return BI($,W)}function GI($,W){let Z=W?.["*"]??{},Q=W?.[$]??{};return{...Z,...Q}.enabled!==!1}function KI($,W){return $.filter((Z)=>GI(Z.name,W))}function hX($,W){return i1(KI($,W))}var FI={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 AI($){let W=$.trim().toLowerCase();return FI[W]??W}function UI($,W){if(W.tools===void 0)return $;let Z=new Set(W.tools.map(AI));if(W.skills!==void 0)Z.add("skills");return $.filter((Q)=>Z.has(Q.name))}function aQ(){return`team-${HI(5)}`}function nQ($,W,Z,Q,J,j,X,Y){let V=s0[r1({mode:Z})],B=x8(W,Q,Z,J??I8);return hX(w2({cwd:$,...V,enableSkills:!!X,...B,executors:{...X?{skills:X}:{},...Y??{}}}),j)}function DI($){return nQ($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,_I,$.toolExecutors).some((W)=>W.name==="skills")}var _I=async()=>"";async function LI($){let W=J0();if(!$$({filePath:W}))return{tools:[]};let Z=new l2({clientFactory:_6({settingsPath:W})}),Q;try{Q=await d2(Z,{filePath:W})}catch(Y){await Z.dispose().catch(()=>{});let V=Y instanceof Error?Y.message:String(Y);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let J=Q.filter((Y)=>Y.disabled!==!0),j=await Promise.allSettled(J.map((Y)=>f6({serverName:Y.name,provider:Z}))),X=[];for(let[Y,V]of j.entries())if(V.status==="fulfilled")X.push(...V.value);else{let B=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${J[Y].name}", skipping: ${B}`)}return{tools:X,shutdown:async()=>{await Z.dispose()}}}function fI($,W){if(!$)return;for(let Z of $.getTeammateIds())try{$.shutdownTeammate(Z,W)}catch{}}function OI($){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 TI($){let W=s0[r1({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??W.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??W.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 n6{teamRuntimeEntries=new Map;async build($){let{config:W,hooks:Z,extensions:Q,logger:J,telemetry:j,createSpawnTool:X,onTeamRestored:Y,userInstructionService:V,configExtensions:B,toolExecutors:H}=$,G=$.onTeamEvent??(()=>{}),K=TI(W),F=W.workspaceRoot??W.cwd,A=$.toolPolicies??W.toolPolicies,D=M1(),U=[],L=W.teamName?.trim()||aQ(),_=W.sessionId?.trim()||L,M=K.enableSpawnAgent?E6({workspaceRoot:F}):{configs:[],errors:[]},T=M.configs.some((d)=>d.skills!==void 0),O=iQ(B,"rules"),f=iQ(B,"skills"),E=f||T,N=iQ(B,"workflows"),l=iQ(B,"plugins"),k=O||f||N,P=!1,o=Boolean(V),p=V,O0;for(let d of M.errors)(J??W.logger)?.log?.(`[agents] Failed to load agent config at ${d.path}: ${d.error.message}`);if(!p&&(k||T))p=c$({skills:E?{workspacePath:F,includePluginSkills:l,pluginSkillDirectories:l?$.pluginSkillDirectories:void 0,pluginPaths:W.pluginPaths,cwd:W.cwd}:{workspacePath:F},rules:{workspacePath:W.cwd},workflows:{workspacePath:W.cwd}});if(p)await p.start().catch(()=>{});let F$=K.enableTools&&f&&Boolean(p)&&p?.hasConfiguredSkills(W.skills)===!0&&DI({cwd:W.cwd,providerId:W.providerId,mode:K.mode,modelId:W.modelId,toolRoutingRules:W.toolRoutingRules,toolPolicies:A,toolExecutors:H}),_8=p&&k?p.createExtension({includeRules:O,includeSkills:f,includeWorkflows:N,registerSkillsTool:F$,allowedSkillNames:W.skills}):void 0,A$=_8?[...Q??W.extensions??[],_8]:Q??W.extensions;if(K.enableTools){if(U.push(...nQ(W.cwd,W.providerId,K.mode,W.modelId,W.toolRoutingRules,A,void 0,H)),!K.disableMcpSettingsTools){let d=await LI(W.logger);U.push(...d.tools),O0=d.shutdown}}let Z0,I1=K.enableAgentTeams?yX():void 0,U$=I1?.loadRuntime(_),D$=U$?.state,T0=U$?.teammates??[],g0=new Map(T0.map((d)=>[d.agentId,d])),b0=W.sessionId||L,g,r0=[],b=!1,$0=S$({providerId:W.providerId,modelId:W.modelId,cwd:W.cwd,apiKey:W.apiKey??"",baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking,reasoningEffort:W.reasoningEffort,thinkingBudgetTokens:W.thinkingBudgetTokens,maxTokensPerTurn:W.maxTokensPerTurn,temperature:W.temperature,maxIterations:W.maxIterations,hooks:Z,extensions:A$,logger:J??W.logger,telemetry:$.telemetry??W.telemetry,workspaceMetadata:W.workspaceMetadata});if(K.enableSpawnAgent){if(M.configs.length>0)U.push(...hX(w6({configProvider:$0,agents:M.configs,createSubAgentTools:(d)=>K.enableTools?UI(nQ(W.cwd,d.providerId??W.providerId,K.mode,d.modelId??W.modelId,W.toolRoutingRules,A,d.skills!==void 0&&p?.createSkillsExecutor?p.createSkillsExecutor(d.skills):void 0,H),d):[],hookErrorMode:W.hookErrorMode,toolPolicies:A,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),A))}if(!this.teamRuntimeEntries.has(b0))this.teamRuntimeEntries.set(b0,{delegatedAgentConfigProvider:$0});let h0=()=>{if(!K.enableAgentTeams)return;let d=this.teamRuntimeEntries.get(b0)??{delegatedAgentConfigProvider:$0};if(this.teamRuntimeEntries.set(b0,d),Z0=d.runtime,!Z0){if(Z0=new Z8({teamName:L,leadAgentId:W.sessionId||"lead",missionLogIntervalSteps:K.missionLogIntervalSteps,missionLogIntervalMs:K.missionLogIntervalMs,onTeamEvent:(B0)=>{if(G(B0),Z0&&I1){if(B0.type==="teammate_spawned"&&B0.teammate?.rolePrompt){let x1={agentId:B0.agentId,rolePrompt:B0.teammate.rolePrompt,modelId:B0.teammate.modelId,maxIterations:B0.teammate.maxIterations};g0.set(x1.agentId,x1)}if(B0.type==="teammate_shutdown"&&!OI(B0.reason))g0.delete(B0.agentId);I1.handleTeamEvent(_,B0),I1.persistRuntime(_,Z0.exportState(),Array.from(g0.values()))}}}),D$)Z0.hydrateState(D$),b=!0;d.runtime=Z0}if(!P){if(!Z0)return;P=!0;let B0=c8({runtime:Z0,leadAgentId:W.sessionId||"lead",restoredFromPersistence:Boolean(D$),restoredTeammates:T0,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(x1)=>{r0=x1,g?.addTools(x1)},createBaseTools:K.enableTools?()=>nQ(W.cwd,W.providerId,K.mode,W.modelId,W.toolRoutingRules,A,void 0,H):void 0,teammateConfigProvider:$0});if(b)Z0.recoverActiveRuns("runtime_recovered");if(B0.restoredFromPersistence)Y?.();U.push(...B0.tools)}return Z0};if(K.enableSpawnAgent&&X){let d=X();U.push({...d,execute:async(B0,x1)=>{return h0(),d.execute(B0,x1)}})}if(K.enableAgentTeams)h0();let M0=hX(U,A),P7=M0.some((d)=>d.name==="submit_and_exit"&&d.lifecycle?.completesRun===!0),_$=K.enableAgentTeams?()=>{let d=this.teamRuntimeEntries.get(b0)?.runtime;if(!d)return;let B0=d.listTasks(),x1=B0.some((L$)=>L$.status==="in_progress"||L$.status==="pending"),aY=d.listRuns({}),gL=aY.some((L$)=>L$.status==="running"||L$.status==="queued");if(x1||gL){let L$=B0.filter((i0)=>i0.status==="in_progress"||i0.status==="pending").map((i0)=>`${i0.id} (${i0.status}): ${i0.title}`).join(", "),oY=aY.filter((i0)=>i0.status==="running"||i0.status==="queued").map((i0)=>`${i0.id} (${i0.status})`).join(", "),b7=[];if(L$)b7.push(`Unfinished tasks: ${L$}`);if(oY)b7.push(`Active runs: ${oY}`);return`[SYSTEM] You still have team obligations. ${b7.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,S7=P7?{requireCompletionTool:!0,..._$?{completionGuard:_$}:{}}:_$?{completionGuard:_$}:void 0;return{tools:M0,logger:J??W.logger,telemetry:j??W.telemetry,teamRuntime:Z0,teamRestoredFromPersistence:Boolean(D$),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(b0)?.delegatedAgentConfigProvider??$0,extensions:A$,completionPolicy:S7,registerLeadAgent:(d)=>{if(g=d,r0.length>0)d.addTools(i1(r0,[...D]))},shutdown:async(d)=>{if(fI(Z0,d),this.teamRuntimeEntries.delete(b0),await O0?.(),!o)p?.stop()}}}}var A_={};w(A_,{RuntimeOAuthTokenManager:()=>a6,OAuthReauthRequiredError:()=>K8});function zI($,W){let Z=$?.expiresAt,Q=W?.expiresAt;return $?.accessToken===W?.accessToken&&$?.refreshToken===W?.refreshToken&&$?.accountId===W?.accountId&&Z===Q}class K8 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 a6{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new Y1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let W=H0($.providerId);if(!W)return null;return this.resolveWithSingleFlight(W.providerId,W.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,W,Z=!1){let Q=this.refreshInFlight.get(W);if(Q)return Q;let J=this.resolveProviderApiKeyInternal($,W,Z).catch((j)=>{throw j}).finally(()=>{this.refreshInFlight.delete(W)});return this.refreshInFlight.set(W,J),J}async resolveProviderApiKeyInternal($,W,Z){let Q=H0($);if(!Q)return null;let J=this.providerSettingsManager.getProviderSettings(W);if(!J)return s(`oauth.resolve providerId=${$} storageProviderId=${W} outcome=no_settings`),null;let j=A4($,J);if(!j)return s(`oauth.resolve providerId=${$} storageProviderId=${W} outcome=no_credentials`),null;s(`oauth.resolve.start providerId=${$} storageProviderId=${W} forceRefresh=${Z} accessTokenHash=${R0(j.access)} refreshTokenHash=${R0(j.refresh)}`);let X=await Q.refresh({settings:J,credentials:j,forceRefresh:Z,telemetry:this.telemetry});if(!X)throw s(`oauth.resolve providerId=${$} outcome=refresh_returned_null`),new K8($);let Y=Y2({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:X,setLastUsed:!1,save:!1}),V=!zI(J.auth,Y.auth);if(V)s(`oauth.resolve.refreshed providerId=${$} newAccessTokenHash=${R0(X.access)} newRefreshTokenHash=${R0(X.refresh)} savingToDisk=true`),this.providerSettingsManager.saveProviderSettings(Y,{setLastUsed:!1,tokenSource:"oauth"});else s(`oauth.resolve providerId=${$} outcome=not_refreshed`);return{apiKey:Q.getApiKey(Y)??X.access,accountId:X.accountId,refreshed:V}}}var D_={};w(D_,{requestDesktopToolApproval:()=>IX});import{mkdir as qI,readFile as MI,unlink as RI,writeFile as NI}from"node:fs/promises";import{join as U_}from"node:path";function EI($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function wI($){return new Promise((W)=>setTimeout(W,$))}async function kX($){try{await RI($)}catch{}}async function IX($,W={}){let Z=W.approvalDir?.trim(),Q=W.sessionId?.trim();if(!Z||!Q)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await qI(Z,{recursive:!0});let J=EI(`${$.toolCallId}`),j=U_(Z,`${Q}.request.${J}.json`),X=U_(Z,`${Q}.decision.${J}.json`),Y=W.nowIso??(()=>new Date().toISOString());await NI(j,`${JSON.stringify({requestId:J,sessionId:Q,createdAt:Y(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
|
|
741
|
+
`,"utf8");let V=W.timeoutMs??300000,B=W.pollIntervalMs??200,H=Date.now();while(Date.now()-H<V){try{let G=await MI(X,"utf8"),K=JSON.parse(G),F={approved:K.approved===!0,reason:typeof K.reason==="string"?K.reason:void 0};return await Promise.all([kX(X),kX(j)]),F}catch{}await wI(B)}return await kX(j),{approved:!1,reason:"Tool approval request timed out"}}U1();var P_={};w(P_,{uninstallMarketplaceSkill:()=>Q7,uninstallMarketplacePlugin:()=>J7,uninstallMarketplaceMcpServerFromSettings:()=>W7,uninstallMarketplaceEntry:()=>tX,resolveMarketplaceMcpServerName:()=>b9,marketplaceEntryKey:()=>sX,isMarketplaceSkillInstalled:()=>Z7,getMarketplaceSkillCandidates:()=>y9,getGlobalMarketplaceSkillPaths:()=>h9,findInstalledGlobalMarketplaceSkillName:()=>k9});import{spawn as Gx}from"node:child_process";import{existsSync as w_,rmSync as Kx}from"node:fs";import{homedir as Fx,platform as Ax}from"node:os";import{dirname as Ux,join as E_}from"node:path";import{resolveClineDir as Dx,resolveMcpSettingsPath as _x}from"@cline/shared/storage";var L_={};w(L_,{parseMcpInstallArgs:()=>E9,installMcpServer:()=>xX,buildMcpInstallTransport:()=>oQ});function CI($){let W=($??"stdio").trim();if(W==="http"||W==="streamable-http")return"streamableHttp";if(W==="stdio"||W==="sse"||W==="streamableHttp")return W;throw Error(`Unsupported MCP transport "${W}". Expected stdio, sse, http, streamable-http, or streamableHttp.`)}function PI($){let W;try{W=new URL($)}catch{throw Error(`Invalid MCP server URL: ${$}`)}if(W.protocol!=="http:"&&W.protocol!=="https:")throw Error(`Invalid MCP server URL: ${$} (only http and https are supported)`)}function SI($){let W=$.indexOf(":");if(W<=0)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);let Z=$.slice(0,W).trim(),Q=$.slice(W+1).trim();if(!Z||!Q)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);if(!/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(Z))throw Error(`Invalid MCP header name "${Z}".`);return[Z,Q]}function bI($){let W=$.indexOf("<");return W>=0&&$.indexOf(">",W+1)>W+1}function __($){let W=[...$.headers??[]],Z=[],Q=$.transport,J=$.targetArgs??[];for(let j=0;j<J.length;j++){let X=J[j];if($.parseTransport&&X==="--transport"){let Y=J[j+1];if(!Y)throw Error("--transport requires a value");Q=Y,j++;continue}if($.parseTransport&&X?.startsWith("--transport=")){Q=X.slice(12);continue}if(X==="--header"){let Y=J[j+1];if(!Y)throw Error("--header requires a value");W.push(Y),j++;continue}if(X?.startsWith("--header=")){W.push(X.slice(9));continue}Z.push(X)}return{headers:W,targetArgs:Z,transport:Q}}function yI($){if($.length===0)return{warnings:[]};let W={},Z=[];for(let Q of $){let[J,j]=SI(Q);if(W[J]=j,bI(j))Z.push(`Header "${J}" looks like it contains a placeholder. Update it in MCP settings before using this server.`)}return{headers:W,warnings:Z}}function oQ($){let W=$.name.trim();if(!W)throw Error("MCP server name is required");let{headers:Z,targetArgs:Q,transport:J}=__({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),j=CI(J),{headers:X,warnings:Y}=yI(Z);if(j==="stdio"){if(Z.length>0)throw Error("Stdio MCP installs do not support request headers.");let[B,...H]=Q;if(!B?.trim())throw Error("Stdio MCP install requires a command after the server name, for example: cline mcp install fs --yes -- npx -y @modelcontextprotocol/server-filesystem /tmp");return{name:W,transport:{type:j,command:B,args:H.length>0?H:void 0},warnings:Y}}if(Q.length!==1)throw Error("Remote MCP install requires exactly one URL argument after the server name.");let V=Q[0]?.trim()??"";return PI(V),{name:W,transport:X?{type:j,url:V,headers:X}:{type:j,url:V},warnings:Y}}function E9($){let[W,...Z]=$;if(!W)throw Error("Marketplace MCP install args must start with a server name.");return{name:W,...__({parseTransport:!0,targetArgs:Z})}}function hI($,W,Z){D1(Z,(Q)=>{let J=Q.mcpServers,j=J&&typeof J==="object"&&!Array.isArray(J)?{...J}:{};j[$]={transport:W},Q.mcpServers=j})}function xX($){let{name:W,transport:Z,warnings:Q}=oQ($);return hI(W,Z,$.settingsPath??J0()),{name:W,status:"installed",transport:Z,warnings:Q}}U1();var N_={};w(N_,{uninstallPlugin:()=>P9});import{existsSync as s6,readdirSync as dI,readFileSync as lI,rmdirSync as pI,rmSync as rI,statSync as iI}from"node:fs";import{basename as V1,dirname as Z2,extname as nI,isAbsolute as aI,join as H$,relative as oI,resolve as o6,sep as uX}from"node:path";import{discoverPluginModulePaths as sI,resolvePluginConfigSearchPaths as tI}from"@cline/shared/storage";var z_={};w(z_,{syncPluginMcpServersToSettings:()=>w9,removePluginMcpServersFromSettings:()=>C9,disablePluginMcpServersInSettings:()=>cX});import{existsSync as kI,mkdirSync as II,readFileSync as xI,writeFileSync as gI}from"node:fs";import{dirname as O_,isAbsolute as mI,relative as vI,resolve as f_}from"node:path";function F8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function sQ($,W){let Z=vI(f_($),f_(W));return Z===""||!Z.startsWith("..")&&!mI(Z)}function gX($){if(!kI($))return{mcpServers:{}};try{let W=JSON.parse(xI($,"utf8"));if(F8(W))return W}catch(W){throw Error(`Invalid MCP settings at "${$}": ${W instanceof Error?W.message:String(W)}`)}throw Error(`Invalid MCP settings at "${$}": expected an object`)}function mX($){if(F8($.mcpServers))return{...$.mcpServers};return{}}function vX($,W,Z){II(O_($),{recursive:!0}),gI($,`${JSON.stringify({...W,mcpServers:Z},null,2)}
|
|
742
|
+
`,"utf8")}function T_($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((W)=>W.trim()).filter((W)=>W.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((W)=>W.trim()).filter((W)=>W.length>0))]}}function eQ($){if(!F8($))return;let W=$.metadata;return F8(W)?W:void 0}function tQ($,W){let Z=eQ($);if(!Z||Z.source!=="plugin")return!1;let Q=typeof Z.pluginName==="string"?Z.pluginName:typeof Z.plugin==="string"?Z.plugin:void 0,J=typeof Z.pluginPath==="string"?Z.pluginPath:void 0;if(W.pluginName&&Q===W.pluginName){if(!W.pluginPath||J===W.pluginPath)return!0}if(J&&W.pluginPath&&(J===W.pluginPath||sQ(W.pluginPath,J)||sQ(J,W.pluginPath)))return!0;if(Q&&W.pluginNames?.some((j)=>j===Q))return!0;if(J&&W.pluginPaths?.some((j)=>J===j||sQ(j,J)||sQ(J,j)))return!0;return!1}function cI($){let W=F8($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:O_($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...W,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function uI($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let W=await s8({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Z=[],Q=[],J=(W.failures??[]).map((j)=>({pluginPath:j.pluginPath,pluginName:j.pluginName,message:j.message}));for(let j of W.extensions??[]){let X=j.__clinePluginPath;if(!X)continue;if(!j.setup){Z.push({pluginName:j.name,pluginPath:X});continue}let Y=[],V={registerTool:(B)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(B)=>{if(!j.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');Y.push(B)}};try{await j.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(B){J.push({pluginPath:X,pluginName:j.name,message:B instanceof Error?B.message:String(B)});continue}Z.push({pluginName:j.name,pluginPath:X});for(let B of Y)Q.push({pluginName:j.name,pluginPath:X,server:{...B,metadata:{...B.metadata??{},source:"plugin",pluginName:j.name,pluginPath:X}}})}return{plugins:Z,servers:Q,failures:J}}finally{await W.shutdown().catch(()=>{})}}async function w9($){let W=$.settingsPath??J0(),Z={mutations:[],failures:[]},Q;try{Q=await uI($)}catch(B){for(let H of $.pluginPaths)Z.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Z}Z.failures.push(...Q.failures);let J;try{J=gX(W)}catch(B){for(let H of $.pluginPaths)Z.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Z}let j=mX(J),X=new Map,Y=new Map;for(let B of Q.plugins)X.set(B.pluginPath,new Set),Y.set(B.pluginPath,B.pluginName);let V=WQ(Q.servers.map((B)=>({server:B.server,owner:B,ownerLabel:B.pluginName})));for(let B of V){let H=B.owner;if(!X.has(H.pluginPath))X.set(H.pluginPath,new Set);if(B.name)X.get(H.pluginPath)?.add(B.name);if(!B.registration){Z.mutations.push({name:B.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:B.loadError??"invalid MCP server registration"});continue}let G=j[B.registration.name];if(G!==void 0){if(!tQ(G,{pluginName:H.pluginName,pluginPath:H.pluginPath})){Z.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}j[B.registration.name]=cI({registration:B.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:F8(G)?G:void 0}),Z.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:G===void 0?"created":"updated"})}for(let[B,H]of Object.entries(j)){let G=eQ(H),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=X.get(K);if(F&&tQ(H,{pluginPath:K})&&!F.has(B))delete j[B],Z.mutations.push({name:B,pluginName:typeof G?.pluginName==="string"?G.pluginName:Y.get(K)??"plugin",pluginPath:K,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Z.mutations.some((B)=>B.action!=="skipped"))try{vX(W,J,j)}catch(B){for(let H of $.pluginPaths)Z.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)})}return Z}function cX($){let W=$.settingsPath??J0(),Z;try{Z=gX(W)}catch{return[]}let Q=mX(Z),J=T_($),j=[];for(let[X,Y]of Object.entries(Q)){if(!F8(Y)||!tQ(Y,J))continue;let V=eQ(Y);Q[X]={...Y,disabled:!0},j.push({name:X,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(j.length>0)vX(W,Z,Q);return j}function C9($){let W=$.settingsPath??J0(),Z;try{Z=gX(W)}catch{return[]}let Q=mX(Z),J=T_($),j=[];for(let[X,Y]of Object.entries(Q)){if(!tQ(Y,J))continue;let V=eQ(Y);delete Q[X],j.push({name:X,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(j.length>0)vX(W,Z,Q);return j}var iX="_installed",eI="package",$x=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function dX($){return $.trim().toLowerCase()}function f1($,W){let Z=W?.trim();if(!Z)return;$.add(Z)}function Wx($){return $.replace(/-[0-9a-f]{12}$/i,"")}function lX($){let W=nI($);return W?$.slice(0,-W.length):$}function pX($){if(!s6($))return;try{let W=JSON.parse(lI($,"utf8"));return typeof W.name==="string"?W.name.trim():void 0}catch{return}}function nX($,W){let Z=oI(W,$);return Z===""||!Z.startsWith("..")&&!aI(Z)}function q_($){let Z=o6($).split(uX),Q=Z.lastIndexOf(iX);if(Q<0)return;let J=Z[Q+1];if(!J)return;let j=$x.get(J)??1,X=Q+2+j;if(Z.length<X)return;let Y=Z.slice(0,X).join(uX)||uX;return s6(Y)?Y:void 0}function $7($){try{return dI($,{withFileTypes:!0})}catch{return[]}}function Zx($){let W=H$($,iX);if(!s6(W))return[];let Z=[];for(let Q of $7(W)){if(!Q.isDirectory())continue;let J=H$(W,Q.name);if(Q.name==="git"){for(let j of $7(J)){if(!j.isDirectory())continue;let X=H$(J,j.name);for(let Y of $7(X))if(Y.isDirectory())Z.push(H$(X,Y.name))}continue}for(let j of $7(J))if(j.isDirectory())Z.push(H$(J,j.name))}return Z.sort((Q,J)=>Q.localeCompare(J))}function M_($){try{return sI($)}catch{return[]}}function rX($){let W=M_($),Z=new Set;f1(Z,V1($)),f1(Z,Wx(V1($))),f1(Z,pX(H$($,"package.json"))),f1(Z,pX(H$($,eI,"package.json")));for(let Q of W)f1(Z,V1(Q)),f1(Z,lX(V1(Q)));return{installPath:$,entryPaths:W,names:[...Z].sort((Q,J)=>Q.localeCompare(J)),installed:!0}}function Qx($,W){let Z=o6($),Q=W.find((X)=>nX(Z,X));if(!Q)return;let J=Z2(Z);while(J!==Q&&J!==Z2(J)){if(s6(H$(J,"package.json")))return J;J=Z2(J)}let j=V1(Z);if((j==="index.ts"||j==="index.js")&&Z2(Z)!==Q)return Z2(Z);return Z}function R_($,W){let Z=Qx($,W);if(!Z)return;let Q=new Set;return f1(Q,V1($)),f1(Q,lX(V1($))),f1(Q,V1(Z)),f1(Q,lX(V1(Z))),f1(Q,pX(H$(Z,"package.json"))),{installPath:Z,entryPaths:[$],names:[...Q].sort((J,j)=>J.localeCompare(j)),installed:!1}}function Jx($){let W=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return tI(W).filter((Z)=>s6(Z))}function jx($){let W=new Map;for(let Z of $){for(let Q of Zx(Z))W.set(Q,rX(Q));for(let Q of M_(Z)){let J=q_(Q);if(J){if(!W.has(J))W.set(J,rX(J));continue}let j=R_(Q,$);if(j)W.set(j.installPath,j)}}return[...W.values()].sort((Z,Q)=>Z.installPath.localeCompare(Q.installPath))}function Xx($,W){let Z=dX(W);if(!Z)return!1;if(dX($.installPath)===Z)return!0;return $.names.some((Q)=>dX(Q)===Z)}function Yx($,W,Z){let Q=o6($);for(let j of W){if(nX(Q,j.installPath))return j;if(j.entryPaths.some((X)=>o6(X)===Q))return j}let J=q_(Q);if(J)return rX(J);if(s6(Q))return R_(Q,Z);return}function Vx($){let W=N0(),Z=W.disabledPlugins;if(!Z?.length)return;let Q=Z.filter((J)=>{let j=o6(J);if(nX(j,$.installPath))return!1;return!$.entryPaths.some((X)=>o6(X)===j)});if(Q.length===Z.length)return;q1({...W,disabledPlugins:Q})}function Bx($){let W=Z2($);while(W!==Z2(W)&&V1(W)!==iX){try{pI(W)}catch{return}W=Z2(W)}}function Hx($){return`${$.names[0]??V1($.installPath)} at ${$.installPath}`}async function P9($){let W=Jx($),Z=jx(W),Q=$.path?.trim(),J=$.name?.trim(),j;if(Q){if(j=Yx(Q,Z,W),!j)throw Error(`No plugin found at ${Q}`)}else{if(!J)throw Error("plugin uninstall requires a plugin name");let Y=Z.filter((V)=>Xx(V,J));if(Y.length===0)throw Error(`No plugin found matching "${J}"`);if(Y.length>1)throw Error(`Multiple plugins match "${J}": ${Y.map(Hx).join(", ")}`);j=Y[0]}let X=iI(j.installPath,{throwIfNoEntry:!1});if(!X)throw Error(`Plugin install path does not exist: ${j.installPath}`);if(C9({pluginPaths:[j.installPath,...j.entryPaths],pluginNames:j.names}),rI(j.installPath,{recursive:X.isDirectory(),force:!0}),Vx(j),j.installed)Bx(j.installPath);return{name:J||j.names[0]||V1(j.installPath),installPath:j.installPath,removedPaths:[j.installPath],entryPaths:j.entryPaths}}var aX=120000,S9=12000,Lx=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,fx=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,Ox=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,Tx=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function oX($){return $.install?.args??[]}function zx(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||Fx()}function qx($){let W=0,Z=$.length;while(W<Z&&($[W]==="."||$[W]==="-"))W++;while(Z>W&&($[Z-1]==="."||$[Z-1]==="-"))Z--;return $.slice(W,Z)}function Mx($){return qx($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function C_($){return $.split(/\r?\n/).map((W)=>{if(!Lx.test(W))return W;return W.replace(fx,"$1[redacted]").replace(Ox,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(Tx,"$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(`
|
|
743
|
+
`).slice(-S9)}function Rx($){let W=C_([$.stdout,$.stderr].filter(Boolean).join(`
|
|
744
|
+
`)).trim();return W.length>0?W:void 0}function Nx($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function Ex($,W){return[$,...W].map((Z)=>Nx(C_(Z).trim())).join(" ")}var wx=async($,W)=>new Promise((Z,Q)=>{let J=!1,j=!1,X=Gx($,W,{env:process.env,shell:Ax()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),Y="",V="",B=setTimeout(()=>{if(!J)X.kill("SIGKILL")},aX+5000),H=setTimeout(()=>{j=!0,V+=`
|
|
745
|
+
Timed out after ${aX/1000}s.`,X.kill("SIGTERM")},aX);B.unref?.(),H.unref?.(),X.stdout?.on("data",(G)=>{if(Y+=String(G),Y.length>S9*2)Y=Y.slice(-S9)}),X.stderr?.on("data",(G)=>{if(V+=String(G),V.length>S9*2)V=V.slice(-S9)}),X.once("error",(G)=>{clearTimeout(H),clearTimeout(B),Q(G)}),X.once("close",(G,K)=>{J=!0,clearTimeout(H),clearTimeout(B),Z({exitCode:j?124:G??(K==="SIGINT"?130:1),stdout:Y,stderr:V})})});function sX($){return`${$.type}:${$.id}`}function b9($){let W=oX($);if(W.length===0)throw Error("Marketplace install args are required.");return E9(W).name}function W7($,W={}){let Z=b9($),Q=W.mcpSettingsPath??_x(),J=D1(Q,(j)=>{let X=j.mcpServers&&typeof j.mcpServers==="object"&&!Array.isArray(j.mcpServers)?j.mcpServers:{},Y=Object.hasOwn(X,Z);if(Y)delete X[Z];return j.mcpServers=X,Y});return{name:Z,deleted:J}}function y9($){let W=new Set,Z=(J)=>{let j=Mx(J??"");if(j&&j!=="skill")W.add(j)};Z($.id),Z($.name);let Q=oX($);for(let J=0;J<Q.length;J++){let j=Q[J];if((j==="--skill"||j==="-s")&&Q[J+1]){Z(Q[J+1]),J++;continue}let X=j.split("@").at(1);if(X)Z(X)}return[...W]}function h9($){return[E_(Dx(),"skills",$,"SKILL.md"),E_(zx(),".agents","skills",$,"SKILL.md")].filter((W,Z,Q)=>Q.indexOf(W)===Z)}function k9($){if($.type!=="skill")return;return y9($).find((W)=>h9(W).some((Z)=>w_(Z)))}function Z7($){return k9($)!==void 0}function Cx($){let W=[];if($.type!=="skill")return W;for(let Z of y9($))for(let Q of h9(Z)){if(!w_(Q))continue;let J=Ux(Q);Kx(J,{recursive:!0,force:!0}),W.push(J)}return W}async function Q7($,W={}){let Z=k9($);if(!Z)return{id:$.id,type:"skill",status:"uninstalled",message:`${$.name??$.id} is not installed.`};let Q="npx",J=["-y","skills@latest","remove",Z,"-g","-y"],j=Ex(Q,J),X=W.spawnCommand??wx,Y;try{Y=await X(Q,J)}catch(H){throw Error(`Failed to start ${$.name??$.id} uninstall command:
|
|
746
746
|
${j}
|
|
747
|
-
${H instanceof Error?H.message:String(H)}`)}let V=
|
|
747
|
+
${H instanceof Error?H.message:String(H)}`)}let V=Rx(Y);if(Y.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${Y.exitCode}.
|
|
748
748
|
Command:
|
|
749
749
|
${j}${V?`
|
|
750
750
|
|
|
751
|
-
${V}`:""}`);let B=
|
|
752
|
-
`)||void 0}}async function
|
|
753
|
-
`)}}async function
|
|
754
|
-
`,"utf8")}function
|
|
755
|
-
`,"utf8"),
|
|
756
|
-
`,"utf8"),await Hg(Q,$)}catch(J){throw await Gg(Q,{force:!0}).catch(()=>{}),J}}function VY($,W){return{id:$,name:W.name??$,supportsAttachments:W.capabilities?.includes("files"),supportsVision:W.capabilities?.includes("images"),supportsReasoning:W.capabilities?.includes("reasoning")||W.thinkingConfig!=null}}function p_($){if(!$||$.length===0)return;let W=new Set;if($.includes("reasoning"))W.add("reasoning");if($.includes("prompt-cache"))W.add("prompt-cache");if($.includes("tools"))W.add("tools");return W.size>0?[...W]:void 0}function r_($){let W=new Set;if(!$||$.length===0)return[...W];if($.includes("streaming"))W.add("streaming");if($.includes("tools"))W.add("tools");if($.includes("reasoning"))W.add("reasoning");if($.includes("prompt-cache"))W.add("prompt-cache");if($.includes("vision"))W.add("images"),W.add("files");return[...W]}function Og($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function i_($,W){return $??W??"openai-chat"}function n_($,W,Z){return $??Z??(W==="openai-responses"?"openai":"openai-compatible")}function a_($,W,Z){let Q=new Set(W?.capabilities??Z??[]);if(W?.supportsVision!==void 0)if(W.supportsVision)Q.add("images");else Q.delete("images");if(W?.supportsAttachments!==void 0)if(W.supportsAttachments)Q.add("files");else Q.delete("files");if(W?.supportsReasoning!==void 0)if(W.supportsReasoning)Q.add("reasoning");else Q.delete("reasoning");let J=W?.isR1FormatRequired?"r1":W?.apiFormat,j=W?.inputPrice!==void 0||W?.outputPrice!==void 0||W?.cacheReadsPrice!==void 0||W?.cacheWritesPrice!==void 0;return{id:$,name:W?.name??$,...W?.maxTokens!==void 0?{maxTokens:W.maxTokens}:{},...W?.contextWindow!==void 0?{contextWindow:W.contextWindow}:{},...W?.maxInputTokens!==void 0?{maxInputTokens:W.maxInputTokens}:{},...Q.size>0?{capabilities:[...Q]}:{},...W?.temperature!==void 0?{temperature:W.temperature}:{},...J!==void 0?{apiFormat:J}:{},...j?{pricing:{...W?.inputPrice!==void 0?{input:W.inputPrice}:{},...W?.outputPrice!==void 0?{output:W.outputPrice}:{},...W?.cacheReadsPrice!==void 0?{cacheRead:W.cacheReadsPrice}:{},...W?.cacheWritesPrice!==void 0?{cacheWrite:W.cacheWritesPrice}:{}}}:{}}}function Tg($,W){for(let[Z,Q]of Object.entries(W??{})){let J=Q.id?.trim()||Z.trim();if(!J)continue;A0.registerModel($,J,a_(J,Q))}}function zg($,W,Z){return{...W??{},id:$,name:W?.name??$,capabilities:W?.capabilities??Z}}function qg($){return Object.assign({},...A0.resolveProviderModelCatalogKeys($).map((Z)=>A0.getGeneratedModelsForProvider(Z)))}function o_($){let W=$.provider.trim();if(!W||A0.isBuiltInProviderId(W))return;let Z=$.baseUrl?.trim();if(!Z)return;let Q=A0.MODEL_COLLECTIONS_BY_PROVIDER_ID[W],J=qg(W),j=r_($.capabilities),X=j.length>0?j:void 0,Y=$.model?.trim(),V={...J,...Q?.models??{}};if(Y)V[Y]=zg(Y,V[Y],X);let B=Object.keys(V).filter(Boolean),H=Y||B[0];if(!H)return;let G=i_($.protocol,Q?.provider.protocol),K=n_($.client,G,Q?.provider.client);A0.registerProvider({provider:{id:W,name:Q?.provider.name??l_(W),description:Q?.provider.description,protocol:G,client:K,baseUrl:Z,modelsSourceUrl:Q?.provider.modelsSourceUrl,defaultModelId:H,capabilities:p_($.capabilities)??Q?.provider.capabilities,source:"file"},models:V})}function gW($){for(let W of Object.values($.providers))o_(W.settings)}function F8($,W){let Z=W.models??{};if(!Og(W.provider)){Tg($,Z);return}let Q=r_(W.provider.capabilities),J=Object.entries(Z).map(([B,H])=>({id:H.id?.trim()||B.trim(),model:H})).filter(({id:B})=>B.length>0),j=W.provider.defaultModelId?.trim()||J[0]?.id||"default",X=i_(W.provider.protocol,void 0),Y=n_(W.provider.client,X,void 0),V=Object.fromEntries(J.map(({id:B,model:H})=>[B,{...a_(B,H,Q.length>0?Q:void 0),status:"active"}]));A0.registerProvider({provider:{id:$,name:W.provider.name.trim()||l_($),protocol:X,client:Y,baseUrl:W.provider.baseUrl,modelsSourceUrl:W.provider.modelsSourceUrl,defaultModelId:j,capabilities:p_(W.provider.capabilities),source:"file"},models:V})}function BY($,W,Z){let Q=Z?.models??{},J=new Set;for(let[Y,V]of Object.entries(W?.models??{})){if(Object.hasOwn(Q,Y))continue;let B=V.id?.trim()||Y.trim();if(B)J.add(B),A0.unregisterModel($,B)}if(!Z)return;let j=A0.getProviderCollectionSync($);F8($,Z);let X=A0.getProviderCollectionSync($);if(j&&X&&X!==j){let Y=Object.fromEntries(Object.entries(j.models).filter(([V])=>!J.has(V)));A0.registerProvider({...X,models:{...Y,...X.models}})}}function mW($){let W=I1($);if(A7.has(W))return;let Z=s6(W);for(let[Q,J]of Object.entries(Z.providers))F8(Q,J);A7.add(W)}async function vW($){let W=I1($);if(A7.has(W))return;let Z=await K8(W);for(let[Q,J]of Object.entries(Z.providers))F8(Q,J);A7.add(W)}var Xf={};w(Xf,{updateLocalProvider:()=>_7,saveLocalProviderSettings:()=>DY,saveLocalProviderOAuthCredentials:()=>OY,resolveLocalClineAuthToken:()=>zY,refreshProviderModelsFromSource:()=>_Y,normalizeOAuthProvider:()=>fY,markLocalProviderEnabled:()=>FY,loginLocalProvider:()=>LY,loginAndSaveLocalProviderOAuthCredentials:()=>TY,listLocalProviders:()=>AY,getLocalProviderModels:()=>UY,ensureCustomProvidersLoaded:()=>vW,deleteLocalProvider:()=>f7,addLocalProvider:()=>KY});import*as k0 from"@cline/llms";var e_="cline-pass";function Mg($){return $.apiKey??$.auth?.apiKey}function Rg($){return($.auth?.accessToken?.trim()??"").length>0}function $f($){return $.split(/[-_]/).filter(Boolean).map((W)=>W.charAt(0).toUpperCase()+W.slice(1)).join(" ")}function Ng($){let W=$.split(/\s+/).filter(Boolean);if(W.length===0)return"?";if(W.length===1)return W[0].slice(0,2).toUpperCase();return`${W[0][0]}${W[1][0]}`.toUpperCase()}function Eg($){let W=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Z=0;for(let Q of $)Z=Z*31+Q.charCodeAt(0)>>>0;return W[Z%W.length]}function Wf($){return Object.entries($).sort(([W],[Z])=>W.localeCompare(Z)).map(([W,Z])=>VY(W,Z))}async function wg($,W){let Z=await k0.getModelsForProvider($),Q=$===e_;if(!W&&!Q)return Z;let J=await G5($,{loadLatestOnInit:Q,loadPrivateOnAuth:!0,failOnError:!1},W);if($==="litellm"&&J?.knownModels)return J.knownModels;if(Q&&J?.knownModels)return J.knownModels;return J?.knownModels?{...Z,...J.knownModels}:Z}function HY($){return[...new Set(($??[]).map((W)=>W.trim()).filter(Boolean))]}function Cg($){if(!$?.length)return;return[...new Set($)]}function Pg($,W){return Cg([...$??[],...W??[]])}function Sg($){let W=$?.popularRank;return typeof W==="number"&&Number.isFinite(W)?W:Number.MAX_SAFE_INTEGER}function bg($){if(!$||typeof $!=="object")return!1;let W=$;return typeof W.path==="string"&&W.path.trim().length>0&&typeof W.label==="string"&&W.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(W.type))}function yg($){let W=$?.configFields;if(!Array.isArray(W))return;return W.filter(bg)}var U7={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},t_={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function hg($){if(!$)return[U7];if($.source!=="system")return $.baseUrl?[U7,t_]:[U7];let W=[];if($.env?.length)W.push(U7);if($.baseUrl)W.push(t_);return W}function kg($,W){return W.split(".").reduce((Z,Q)=>{if(!Z||typeof Z!=="object")return;return Z[Q]},$)}function Ig($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function xg($,W,Z){if(!$?.length)return;let Q={};for(let J of $){let X=Ig(J.path==="baseUrl"&&W?.baseUrl===void 0?Z?.baseUrl:kg(W,J.path))??J.defaultValue;if(X!==void 0)Q[J.path]=X}return Q}function Zf($){let W=Object.entries($??{}).filter(([Z])=>Z.trim().length>0);return W.length>0?Object.fromEntries(W):void 0}function GY($,W){let Z=W?.includes("vision")??!1,Q=W?.includes("reasoning")??!1;return Object.fromEntries($.map((J)=>[J,{id:J,name:J,supportsVision:Z,supportsAttachments:Z,supportsReasoning:Q}]))}async function Qf($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let W=$.modelsSourceUrl?await GZ($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...W])]}function Jf($,W){let Z=$.read(),Q=!1;if(Z.providers[W])delete Z.providers[W],Q=!0;if(Z.lastUsedProvider===W)delete Z.lastUsedProvider,Q=!0;if(Q)$.write(Z);k0.unregisterProvider(W)}async function KY($,W){let Z=W.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=W.baseUrl.trim(),J=W.apiKey?.trim()??"";if(!Q&&!J){let A=I1($);if((await K8(A)).providers[Z]){let U=await f7($,{providerId:Z});return{providerId:Z,settingsPath:U.settingsPath,modelsPath:U.modelsPath,modelsCount:0}}return Jf($,Z),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(k0.hasProvider(Z))throw Error(`provider "${Z}" already exists`);let j=W.name.trim();if(!j)throw Error("name is required");if(!Q)throw Error("baseUrl is required");let X=HY(W.models),Y=W.modelsSourceUrl?.trim(),V=await Qf({providerId:Z,explicitModels:X,modelsSourceUrl:Y,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let B=W.defaultModelId?.trim()&&V.includes(W.defaultModelId.trim())?W.defaultModelId.trim():V[0],H=W.capabilities?.length?[...new Set(W.capabilities)]:void 0,G=Zf(W.headers);$.saveProviderSettings({provider:Z,apiKey:J||void 0,baseUrl:Q,headers:G,timeout:W.timeoutMs,model:B,protocol:W.protocol,client:W.client},{setLastUsed:!1});let K=I1($),F=await K8(K);return F.providers[Z]={provider:{name:j,baseUrl:Q,defaultModelId:B,protocol:W.protocol,client:W.client,capabilities:H,modelsSourceUrl:Y},models:GY(V,H)},await xW(K,F),F8(Z,F.providers[Z]),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function _7($,W){let Z=W.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=I1($),J=await K8(Q),j=J.providers[Z];if(!j){let T=$.getProviderSettings(Z);if(!T)throw Error(`provider "${Z}" does not exist`);let O=W.modelsSourceUrl?.trim(),L=HY(W.models)[0]??T.model?.trim();if(!L&&!O)throw Error(`provider "${Z}" cannot be updated because no model is configured`);j={provider:{name:W.name?.trim()||$f(Z),baseUrl:W.baseUrl?.trim()??T.baseUrl?.trim()??"",defaultModelId:L,protocol:T.protocol,client:T.client,capabilities:T.capabilities},models:L?GY([L],T.capabilities):{}}}if(!j.provider)throw Error(`provider "${Z}" cannot be updated because it is a model overlay (no provider metadata)`);let X=W.name?.trim()??j.provider.name.trim();if(!X)throw Error("name is required");let Y=W.baseUrl?.trim()??j.provider.baseUrl.trim();if(!Y)throw Error("baseUrl is required");let V=W.capabilities===void 0?j.provider.capabilities:W.capabilities===null?void 0:[...new Set(W.capabilities)],B=W.protocol===void 0?j.provider.protocol:W.protocol??void 0,H=W.client===void 0?j.provider.client:W.client??void 0,G=HY(W.models),K=W.modelsSourceUrl===void 0?j.provider.modelsSourceUrl:W.modelsSourceUrl?.trim()||void 0,F=W.models!==void 0||W.modelsSourceUrl!==void 0&&!!K,A=Object.keys(j.models??{}).map((T)=>T.trim()).filter(Boolean),D=await Qf({providerId:Z,explicitModels:G,modelsSourceUrl:K,fallbackModelIds:A,shouldRecompute:F});if(D.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let U=W.defaultModelId===void 0?j.provider.defaultModelId?.trim():W.defaultModelId?.trim(),f=U&&D.includes(U)?U:D[0],R={...$.getProviderSettings(Z)??{},provider:Z,baseUrl:Y,model:f};if(B)R.protocol=B;else delete R.protocol;if(H)R.client=H;else delete R.client;if(W.apiKey!==void 0){let T=W.apiKey?.trim()??"";if(T)R.apiKey=T;else delete R.apiKey}if(W.headers!==void 0){let T=Zf(W.headers);if(T)R.headers=T;else delete R.headers}if(W.timeoutMs!==void 0)if(typeof W.timeoutMs==="number")R.timeout=W.timeoutMs;else delete R.timeout;return $.saveProviderSettings(R,{setLastUsed:!1}),J.providers[Z]={provider:{name:X,baseUrl:Y,defaultModelId:f,protocol:B,client:H,capabilities:V,modelsSourceUrl:K},models:GY(D,V)},await xW(Q,J),F8(Z,J.providers[Z]),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:Q,modelsCount:D.length}}async function f7($,W){let Z=W.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=I1($),J=await K8(Q);if(!J.providers[Z])throw Error(`provider "${Z}" does not exist`);return delete J.providers[Z],await xW(Q,J),k0.unregisterProvider(Z),Jf($,Z),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:Q}}function FY($,W,Z={}){let Q=W.trim();if(!Q)throw Error("providerId is required");let J=$.read().providers[Q]?.settings;return $.saveProviderSettings({...J??{},provider:Q},{setLastUsed:!1,tokenSource:Z.tokenSource}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function AY($,W={}){let Z=$.read(),Q=k0.getProviderIds(),J=await Promise.all(Q.map(async(X)=>{let[Y,V]=await Promise.all([k0.getProvider(X),k0.getModelsForProvider(X)]),B=Wf(V),H=Z.providers[X]?.settings,G=$.getProviderSettings(X),K=Y?.name??$f(X),F=Pg(Y?.capabilities,G?.capabilities),A=yg(Y?.metadata)??hg(Y);return{provider:{id:X,name:K,models:B.length,color:Eg(X),letter:Ng(K),enabled:Boolean(H),apiKey:G?Mg(G):void 0,oauthAccessTokenPresent:G?Rg(G):void 0,baseUrl:G?.baseUrl??Y?.baseUrl,defaultModelId:Y?.defaultModelId,protocol:G?.protocol??Y?.protocol,client:G?.client??Y?.client,capabilities:F,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:A,configValues:xg(A,G,Y),modelList:B},rank:Sg(Y?.metadata)}}));J.sort((X,Y)=>{if(X.rank!==Y.rank)return X.rank-Y.rank;return X.provider.name.localeCompare(Y.provider.name)||X.provider.id.localeCompare(Y.provider.id)});let j=J.map((X)=>X.provider);if(W.isClinePassEnabled!==!0)j=j.filter((X)=>X.id!==e_);return{providers:j,settingsPath:$.getFilePath()}}async function UY($,W){let Z=$.trim(),Q=await wg(Z,W),J=Wf(Q);return{providerId:Z,models:J}}function D7($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function jf($,W){if(!D7(W))return D7($)?{...$}:void 0;let Z=D7($)?{...$}:{};for(let[Q,J]of Object.entries(W)){if(J==null||J===""){delete Z[Q];continue}if(D7(J)){let j=jf(Z[Q],J);if(j&&Object.keys(j).length>0)Z[Q]=j;else delete Z[Q];continue}Z[Q]=J}return Object.keys(Z).length>0?Z:void 0}function DY($,W){let Z=W.providerId.trim();if(W.enabled===!1){let j=$.read();if(delete j.providers[Z],j.lastUsedProvider===Z)delete j.lastUsedProvider;return $.write(j),{providerId:Z,enabled:!1,settingsPath:$.getFilePath()}}let J={...$.getProviderSettings(Z)??{},provider:Z};for(let j of["apiKey","baseUrl","model","region"])if(Object.hasOwn(W,j)&&typeof W[j]==="string")if(W[j].trim().length===0)delete J[j];else J[j]=W[j];for(let j of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(W,j))J[j]=W[j];for(let j of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(W,j)&&W[j]!=null){let X=jf(J[j],W[j]);if(X)J[j]=X;else delete J[j]}return $.saveProviderSettings(J,{setLastUsed:!1}),{providerId:Z,enabled:!0,settingsPath:$.getFilePath()}}async function _Y($,W){let Z=W.trim(),Q=$.getProviderSettings(Z),j=k0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z]?.provider,X=Q?.baseUrl?.trim()||j?.baseUrl?.trim(),Y=KZ(X,j?.baseUrl,j?.modelsSourceUrl);if(!Q||!j||!X||!Y)return{providerId:Z,refreshed:!1};let V=await _7($,{providerId:Z,name:j.name,baseUrl:X,apiKey:Q.apiKey,headers:Q.headers??null,timeoutMs:Q.timeout??null,modelsSourceUrl:Y,protocol:Q.protocol??j.protocol??null,client:Q.client??j.client??null,capabilities:Q.capabilities??null});return{providerId:Z,refreshed:!0,modelsCount:V.modelsCount}}function fY($){let W=$.trim().toLowerCase(),Z=H0(W);if(Z)return Z.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function LY($,W,Z,Q){let J=H0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let j=Y6({onPrompt:async(X)=>X.defaultValue??"",openUrl:Z,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return J.login({settings:W,callbacks:j,telemetry:Q})}function OY($,W,Z,Q,J){return j2({manager:$,providerId:W,settings:Z,credentials:Q,setLastUsed:J?.setLastUsed})}async function TY($,W,Z,Q){let J=Y6({onPrompt:async(j)=>j.defaultValue??"",openUrl:Z,onOpenUrlError:({error:j})=>{throw j instanceof Error?j:Error(String(j))}});return G4($,W,{callbacks:J,telemetry:Q})}function zY($){let W=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return W&&W.length>0?W:void 0}var Yf={};w(Yf,{getProviderConfigFields:()=>qY});import*as L7 from"@cline/llms";var gg=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],mg={"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 vg($,W){let Z={};for(let Q of gg){let J=$[Q],j=W[Q];if(J||j)Z[Q]={...J,...j}}return Z}function cg($){let W=mg[$.providerId];if(!W)return $;return{...$,description:W.description??$.description,fields:W.mode==="replace"?W.fields:vg($.fields,W.fields)}}var ug=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function dg($,W){if(!W?.provider.baseUrl)return!1;if(W.provider.source!=="system")return!0;return ug.has($)}function qY($){let W=L7.normalizeProviderId($);if(J2(W))return{providerId:W,authMethod:"oauth",fields:{}};let Z=L7.MODEL_COLLECTIONS_BY_PROVIDER_ID[W];if(Z?.provider.capabilities?.includes("local-auth"))return{providerId:W,authMethod:"local",fields:{}};let Q=Z?.provider.baseUrl,J={apiKey:{}};if(dg(W,Z))J.baseUrl={defaultValue:Q};return cg({providerId:W,authMethod:"api-key",fields:J})}var Gf={};w(Gf,{resolveLegacyClineAuth:()=>NY,migrateLegacyProviderSettings:()=>cW});import{existsSync as lg,readFileSync as pg}from"node:fs";import{dirname as rg,join as MY}from"node:path";import*as t6 from"@cline/llms";import{resolveClineDataDir as ig}from"@cline/shared/storage";var O7="openai",Hf=t6.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,Vf=128000;function NY($){let W=$?.trim();if(!W)return;try{let Z=JSON.parse(W);if(!Z)return;let Q=typeof Z.expiresAt==="number"&&Number.isFinite(Z.expiresAt)?Z.expiresAt<10000000000?Z.expiresAt*1000:Z.expiresAt:void 0;return{accessToken:Z.idToken,refreshToken:Z.refreshToken,expiresAt:Q,accountId:Z.userInfo?.id}}catch{return}}function b($){let W=$?.trim();return W?W:void 0}function ng($){return $==="credentials"?"iam":$}function Bf($){if(!lg($))return;try{let W=pg($,"utf8"),Z=JSON.parse(W);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function ag($){let W=$.dataDir??ig(),Z=$.globalStatePath??MY(W,"globalState.json"),Q=$.secretsPath??MY(W,"secrets.json"),J=Bf(Z),j=Bf(Q);if(!J&&!j)return;return{globalState:J??{},secrets:j??{}}}function RY($){if($===O7)return Hf;return $}function og($,W,Z,Q){let J=Z==="plan"?"planMode":"actMode",j=W===Q?b(Z==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,Y={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`}[W];return(Y?b(typeof $[Y]==="string"?$[Y]:void 0):void 0)??j}function sg($,W,Z){let Q=Z==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,J=[...W==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...W==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(b).find(Boolean),j=J==="none"||J==="low"||J==="medium"||J==="high"||J==="xhigh"?J:void 0,X=typeof Q==="number"&&Number.isInteger(Q)&&Q>0?Q:void 0;if(!j&&X===void 0)return;return{...j?{effort:j}:{},...X!==void 0?{budgetTokens:X}:{}}}function tg($){let W=$["openai-codex-oauth-credentials"];if(!W)return;try{let Z=JSON.parse(W),Q=b(Z.access_token),J=b(Z.refresh_token),j=b(Z.accountId);if(!Q&&!J&&!j)return;return{...Q?{apiKey:Q}:{},auth:{...Q?{accessToken:Q}:{},...J?{refreshToken:J}:{},...j?{accountId:j}:{}}}}catch{return}}function eg($){let W=t6.getGeneratedModelsForProvider($),Q=t6.getProviderCollectionSync($)?.provider.defaultModelId;if(Q&&W[Q])return Q;return Object.keys(W)[0]??void 0}function $m($,W,Z,Q){let J=RY($),j=b(Q==="plan"?W.planModeApiProvider:W.actModeApiProvider),X=og(W,$,Q,j)??eg(J),Y=sg(W,J,Q),V=typeof W.requestTimeoutMs==="number"&&Number.isInteger(W.requestTimeoutMs)&&W.requestTimeoutMs>0?W.requestTimeoutMs:void 0,B={anthropic:Z.apiKey,cline:Z.clineApiKey,openai:Z.openAiApiKey,"openai-native":Z.openAiNativeApiKey,openrouter:Z.openRouterApiKey,bedrock:Z.awsBedrockApiKey,gemini:Z.geminiApiKey,ollama:Z.ollamaApiKey,deepseek:Z.deepSeekApiKey,requesty:Z.requestyApiKey,together:Z.togetherApiKey,fireworks:Z.fireworksApiKey,qwen:Z.qwenApiKey,doubao:Z.doubaoApiKey,mistral:Z.mistralApiKey,litellm:Z.liteLlmApiKey,asksage:Z.asksageApiKey,xai:Z.xaiApiKey,moonshot:Z.moonshotApiKey,zai:Z.zaiApiKey,huggingface:Z.huggingFaceApiKey,nebius:Z.nebiusApiKey,sambanova:Z.sambanovaApiKey,cerebras:Z.cerebrasApiKey,groq:Z.groqApiKey,"huawei-cloud-maas":Z.huaweiCloudMaasApiKey,baseten:Z.basetenApiKey,"vercel-ai-gateway":Z.vercelAiGatewayApiKey,dify:Z.difyApiKey,minimax:Z.minimaxApiKey,hicap:Z.hicapApiKey,aihubmix:Z.aihubmixApiKey,nousResearch:Z.nousResearchApiKey,oca:Z.ocaApiKey},H={};if($==="openai-codex")Object.assign(H,tg(Z));if($==="cline")try{let f=b(Z["cline:clineAccountId"]);if(f)H.auth={...H.auth??{},...NY(f)}}catch{}if($===O7&&W.openAiHeaders)H.headers=W.openAiHeaders;if($==="bedrock"){let f=ng(W.awsAuthentication),_=f==="profile"||W.awsUseProfile===!0;H.aws={accessKey:b(Z.awsAccessKey),secretKey:b(Z.awsSecretKey),sessionToken:b(Z.awsSessionToken),region:b(W.awsRegion),authentication:f,profile:_?b(W.awsProfile):void 0,usePromptCache:W.awsBedrockUsePromptCache,useCrossRegionInference:W.awsUseCrossRegionInference,useGlobalInference:W.awsUseGlobalInference,endpoint:b(W.awsBedrockEndpoint),customModelBaseId:b(Q==="plan"?W.planModeAwsBedrockCustomModelBaseId:W.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")H.gcp={projectId:b(W.vertexProjectId),region:b(W.vertexRegion)};if($===O7&&(W.azureApiVersion||W.azureIdentity!==void 0))H.azure={apiVersion:b(W.azureApiVersion),useIdentity:W.azureIdentity};if($==="sapaicore"){let f=W.sapAiCoreUseOrchestrationMode??!0;H.sap={clientId:b(Z.sapAiCoreClientId),clientSecret:b(Z.sapAiCoreClientSecret),tokenUrl:b(W.sapAiCoreTokenUrl),resourceGroup:b(W.sapAiResourceGroup),deploymentId:f?void 0:b(Q==="plan"?W.planModeSapAiCoreDeploymentId:W.actModeSapAiCoreDeploymentId),useOrchestrationMode:f}}if($==="oca"){H.oca={mode:W.ocaMode};let f=b(Z.ocaRefreshToken);if(f)H.auth={...H.auth??{},refreshToken:f}}if($==="qwen")H.apiLine=W.qwenApiLine;if($==="moonshot")H.apiLine=W.moonshotApiLine;if($==="zai")H.apiLine=W.zaiApiLine;if($==="minimax")H.apiLine=W.minimaxApiLine;let G={anthropic:W.anthropicBaseUrl,openai:W.openAiBaseUrl,ollama:W.ollamaBaseUrl,lmstudio:W.lmStudioBaseUrl,litellm:W.liteLlmBaseUrl,gemini:W.geminiBaseUrl,requesty:W.requestyBaseUrl,asksage:W.asksageApiUrl,dify:W.difyBaseUrl,oca:W.ocaBaseUrl,aihubmix:W.aihubmixBaseUrl,sapaicore:W.sapAiCoreBaseUrl},K=b(B[$]),F=b(G[$]),A={provider:J,...K?{apiKey:K}:{},...X?{model:X}:{},...F?{baseUrl:F}:{},...Y?{reasoning:Y}:{},...V?{timeout:V}:{},...H},D=Q6.safeParse(A);if(!D.success)return;return Object.keys(A).filter((f)=>f!=="provider").length>0?D.data:void 0}function Wm($,W){if($!==Hf)return;if(!W.baseUrl||!W.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:W.baseUrl,defaultModelId:W.model},models:{[W.model]:{id:W.model,name:W.model,contextWindow:Vf,maxInputTokens:Vf,capabilities:["streaming","tools","images"]}}}}function Zm($,W){let Z=new Set;for(let J of[$.actModeApiProvider,$.planModeApiProvider]){let j=b(J);if(j)Z.add(j)}if(b(W.apiKey))Z.add("anthropic");if(b(W.openRouterApiKey))Z.add("openrouter");if(b(W.openAiApiKey))Z.add(O7);if(b(W.openAiNativeApiKey))Z.add("openai-native");if(b(W["openai-codex-oauth-credentials"]))Z.add("openai-codex");if(b(W.geminiApiKey))Z.add("gemini");if(b(W.ollamaApiKey))Z.add("ollama");if(b(W.awsAccessKey)||b(W.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||b($.awsProfile))Z.add("bedrock");if(b($.vertexProjectId)||b($.vertexRegion))Z.add("vertex");if(b(W.clineApiKey))Z.add("cline");let Q=NY(b(W["cline:clineAccountId"]));if(Q?.accessToken||Q?.refreshToken||Q?.accountId)Z.add("cline");if(b(W.ocaApiKey))Z.add("oca");if(b(W.sapAiCoreClientId)||b(W.sapAiCoreClientSecret)||b($.sapAiCoreTokenUrl)||b($.sapAiCoreBaseUrl)||b($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Z.add("sapaicore");return Z}function cW($){let W=$.providerSettingsManager.read(),Z=ag($);if(!Z)return{migrated:!1,providerCount:Object.keys(W.providers).length,lastUsedProvider:W.lastUsedProvider};let{globalState:Q,secrets:J}=Z,j=Q.mode==="plan"?"plan":"act",X=Zm(Q,J),Y=I$();Y.providers={...W.providers},Y.lastUsedProvider=W.lastUsedProvider;let V=new Date().toISOString(),B=0,H=MY(rg($.providerSettingsManager.getFilePath()),"models.json"),G=s6(H),K=0;for(let D of X){let U=RY(D);if(Y.providers[U])continue;let f=$m(D,Q,J,j);if(!f)continue;Y.providers[U]={settings:f,updatedAt:V,tokenSource:"migration"},B+=1;let _=Wm(U,f);if(_&&!G.providers[U])G.providers[U]=_,K+=1}if(B===0&&K===0)return{migrated:!1,providerCount:Object.keys(W.providers).length,lastUsedProvider:W.lastUsedProvider};let F=b(j==="plan"?Q.planModeApiProvider:Q.actModeApiProvider),A=F?RY(F):void 0;if(Y.lastUsedProvider=W.lastUsedProvider??(A&&Y.providers[A]?A:Object.keys(Y.providers)[0]),$.providerSettingsManager.write(Y),K>0)IW(H,G);return{migrated:B>0||K>0,providerCount:Object.keys(Y.providers).length,lastUsedProvider:Y.lastUsedProvider}}uQ();D0();_W();var Kf={};w(Kf,{FileTeamPersistenceStore:()=>T7});import{appendFileSync as Qm,existsSync as EY,mkdirSync as Jm,readFileSync as jm,renameSync as Xm,unlinkSync as Ym,writeFileSync as Vm}from"node:fs";import{join as wY}from"node:path";import{resolveTeamDataDir as Bm}from"@cline/shared/storage";function Hm($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class T7{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let W=Hm($.teamName),Z=$.baseDir?.trim()||Bm();this.dirPath=wY(Z,W),this.statePath=wY(this.dirPath,"state.json"),this.taskHistoryPath=wY(this.dirPath,"task-history.jsonl")}loadState(){if(!EY(this.statePath))return;try{let $=jm(this.statePath,"utf8"),W=JSON.parse($);if(W.version!==1||!W.teamState)return;for(let Z of W.teammates??[])this.teammateSpecs.set(Z.agentId,Z);return OU(W.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 W={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Z=`${this.statePath}.tmp`;Vm(Z,`${JSON.stringify(W,null,2)}
|
|
757
|
-
`,"utf8"),
|
|
758
|
-
`,"utf8")}ensureDir(){if(!EY(this.dirPath))Jm(this.dirPath,{recursive:!0})}hasPersistableState($){let W=$.exportState();if(this.teammateSpecs.size>0)return!0;if(W.members.some((Z)=>Z.role==="teammate"))return!0;return W.tasks.length>0||W.mailbox.length>0||W.missionLog.length>0}clearPersistedState(){if(EY(this.statePath))Ym(this.statePath)}}var Ff={};w(Ff,{ChatViewStateSchema:()=>CY,ChatSummarySchema:()=>N7,ChatSessionStatusSchema:()=>q7,ChatSessionConfigSchema:()=>z7,ChatMessageSchema:()=>R7,ChatMessageRoleSchema:()=>M7});import{z as I}from"zod";var z7=I.object({workspaceRoot:I.string().min(1),cwd:I.string().optional(),provider:I.string().min(1),model:I.string().min(1),mode:I.enum(["act","plan"]).default("act"),apiKey:I.string(),systemPrompt:I.string().optional(),rules:I.string().optional(),maxIterations:I.number().int().positive().optional(),enableTools:I.boolean(),enableSpawn:I.boolean().optional(),enableTeams:I.boolean().optional(),autoApproveTools:I.boolean().optional(),missionStepInterval:I.number().int().positive().optional(),missionTimeIntervalMs:I.number().int().positive().optional()}),q7=I.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),M7=I.enum(["user","assistant","tool","system","status","error"]),R7=I.object({id:I.string().min(1),sessionId:I.string().nullable(),role:M7,content:I.string(),createdAt:I.number().int().nonnegative(),meta:I.object({stream:I.enum(["stdout","stderr"]).optional(),toolName:I.string().optional(),iteration:I.number().int().nonnegative().optional(),agentId:I.string().optional(),conversationId:I.string().optional(),hookEventName:I.string().optional(),inputTokens:I.number().int().nonnegative().optional(),outputTokens:I.number().int().nonnegative().optional(),checkpoint:I.object({ref:I.string(),createdAt:I.number().int().nonnegative(),runCount:I.number().int().positive(),kind:I.enum(["stash","commit"]).optional()}).optional()}).optional()}),N7=I.object({toolCalls:I.number().int().nonnegative(),tokensIn:I.number().int().nonnegative(),tokensOut:I.number().int().nonnegative()}),CY=I.object({sessionId:I.string().nullable(),status:q7,config:z7,messages:I.array(R7),rawTranscript:I.string(),error:I.string().nullable(),summary:N7});var Af={};w(Af,{CORE_BUILD_VERSION:()=>uW});var uW=l8;import{Agent as Vv,createAgentRuntime as Bv}from"@cline/agents";var Uf={};w(Uf,{fetchClineRecommendedModels:()=>SY,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>E7});import{getClineEnvironmentConfig as Gm}from"@cline/shared";var Km=5000,E7={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 Fm($){return{recommended:$.recommended.map((W)=>({...W,tags:[...W.tags]})),free:$.free.map((W)=>({...W,tags:[...W.tags]})),clinePass:$.clinePass.map((W)=>({...W,tags:[...W.tags]}))}}function PY($){if(!$||typeof $!=="object")return null;let W=$;if(typeof W.id!=="string"||W.id.length===0)return null;return{id:W.id,name:typeof W.name==="string"&&W.name.length>0?W.name:W.id,description:typeof W.description==="string"?W.description:"",tags:Array.isArray(W.tags)?W.tags.filter((Z)=>typeof Z==="string"):[]}}function Am($){if(!$||typeof $!=="object")return null;let W=$,Z=Array.isArray(W.recommended)?W.recommended:[],Q=Array.isArray(W.free)?W.free:[],J=Array.isArray(W.clinePass)?W.clinePass:[],j=Z.map(PY).filter((V)=>V!==null),X=Q.map(PY).filter((V)=>V!==null),Y=J.map(PY).filter((V)=>V!==null);if(j.length===0&&X.length===0&&Y.length===0)return null;return{recommended:j,free:X,clinePass:Y}}function Um($){let W=$.baseUrl?.trim();if(W)return W;let Z=Gm().apiBaseUrl;try{return($.providerSettingsManager??new X1).getProviderSettings("cline")?.baseUrl?.trim()||Z}catch{return Z}}async function Dm($,W,Z){let Q=new AbortController,J=setTimeout(()=>Q.abort(),Z);try{return await $(W,{signal:Q.signal})}finally{clearTimeout(J)}}async function SY($={}){try{let W=Um($),Z=$.fetchImpl??fetch,Q=await Dm(Z,`${W}/api/v1/ai/cline/recommended-models`,$.timeoutMs??Km);if(!Q.ok)throw Error(`HTTP ${Q.status}`);let J=await Q.json(),j=Am(J);if(j)return j}catch{}return Fm(E7)}var Df={};w(Df,{loadLlmsConfigFromFile:()=>yY,defineLlmsConfig:()=>bY});import{readFile as _m}from"node:fs/promises";import fm from"node:path";function bY($){return $}async function yY($){let W=fm.resolve($),Z=await _m(W,"utf8"),Q;try{Q=JSON.parse(Z)}catch(J){let j=J instanceof Error?J.message:String(J);throw Error(`Failed to parse JSON config at "${W}": ${j}`)}return Lm(Q,W)}function Lm($,W){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${W}": expected an object.`);let Q=$.providers;if(!Array.isArray(Q))throw Error(`Invalid llms config in "${W}": "providers" must be an array.`);if(!Q.length)throw Error(`Invalid llms config in "${W}": "providers" cannot be empty.`);return $}var zf={};w(zf,{createLlmsSdk:()=>kY,DefaultLlmsSdk:()=>dW});import{BUILT_IN_PROVIDER_IDS as Lf,createHandler as zm,createHandlerAsync as qm,getProviderCollection as Mm,hasProvider as Of,registerAsyncHandler as Rm,registerHandler as Nm,registerModel as Em,registerProvider as Tf}from"@cline/llms";function _f($){return $?{...$}:{}}function Om($,W){if($)return $;if(!W)return;let Z=globalThis.process;if(!Z?.env)return;return Z.env[W]}function Tm($,W){if(!W.length)throw Error(`Provider "${$}" must include at least one model.`)}function ff($){let W=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:W,defaultModel:$.collection.provider.defaultModelId,modelCount:W.length}}class hY{providers=new Map;register($){Tm($.id,$.models);let W=$.defaultModel??$.models[0];if(!W)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(W))throw Error(`Default model "${W}" is not included in configured models for "${$.id}".`);let Z=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Z?.models??[],...$.models]),defaultModel:W,defaults:{...Z?.defaults??{},..._f($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:Om($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,..._f($.settings)}})}registerModel($,W){let Z=this.providers.get($);if(!Z){this.providers.set($,{id:$,models:new Set([W]),defaultModel:W,defaults:{}});return}Z.models.add(W)}createHandlerConfig($){let W=this.require($.providerId),Z=$.modelId??W.defaultModel;if(!W.models.has(Z))throw Error(`Model "${Z}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Z,...W.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($,W){return this.providers.get($)?.models.has(W)??!1}require($){let W=this.providers.get($);if(!W)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return W}}class dW{configuredProviders=new hY;constructor($){this.applyConfig($)}createHandler($){return zm(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return qm(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(Tf($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)Nm($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)Rm($.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 W=$.exposeModels??Object.keys($.models),Z=$.defaultModel??W[0];if(!Z)throw Error(`Provider "${$.id}" must define a default model.`);Tf({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Z,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:W,defaultModel:Z,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){Em($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...Lf]}async getBuiltInProviders(){return(await Promise.all(Lf.map((W)=>Mm(W)))).filter((W)=>W!==void 0).map((W)=>ff({collection:W}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,W){return this.configuredProviders.hasModel($,W)}applyConfig($){for(let W of $.providers)this.configuredProviders.registerSelectionConfig(W);for(let W of $.models??[])this.registerModel(W);for(let W of $.customProviders??[])this.registerProvider(W);for(let W of this.configuredProviders.list()){let Z=Of(W.id),Q=this.configuredProviders.createHandlerConfig({providerId:W.id,modelId:W.defaultModel}).routingProviderId,J=typeof Q==="string"&&Of(Q);if(!Z&&!J)throw Error(`Provider "${W.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function kY($){return new dW($)}tj();async function wm(){return Promise.resolve().then(() => (uQ(),Q_))}function Dv(){return new Date().toISOString()}var _v="cline",fv="cline-pass";function Lv($){if(Nf($)!=="providers.json")return;let W=xY($);if(Nf(W)!=="settings")return;return xY(W)}class X1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??Uv(),this.dataDir=$.dataDir??Lv(this.filePath),this.dataDir||!$.filePath)cW({providerSettingsManager:this,dataDir:this.dataDir});if(mW(this),gW(this.read()),IY(this.filePath))try{Rf(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!IY(this.filePath))return I$();try{let $=Gv(this.filePath,"utf8"),W=JSON.parse($),Z=J6.safeParse(W);if(Z.success){gW(Z.data);let Q=Z.data.providers.cline?.settings?.auth;return s(`providers.read providers=[${Object.keys(Z.data.providers).join(",")}] lastUsed=${Z.data.lastUsedProvider??"none"} clineAuthPresent=${!!Q?.accessToken} clineAccessTokenHash=${R0(Q?.accessToken)} clineRefreshTokenHash=${R0(Q?.refreshToken)}`),Z.data}}catch{}return I$()}write($){let W=J6.parse($),Z=xY(this.filePath);if(!IY(Z))Hv(Z,{recursive:!0,mode:448});let Q=`${this.filePath}.${process.pid}.tmp`;try{Av(Q,`${JSON.stringify(W,null,2)}
|
|
759
|
-
`,{encoding:"utf8",mode:384}),Kv(Q,this.filePath)}catch(J){throw Fv(Q,{force:!0}),J}try{Rf(this.filePath,384)}catch{}gW(W)}saveProviderSettings($,W={}){let Z=Q6.parse($),Q=this.read(),J=Z.provider,j=W.setLastUsed!==!1,X=Q.providers[J],Y=W.tokenSource??X?.tokenSource??"manual",V={...Q,providers:{...Q.providers,[J]:{settings:Z,updatedAt:Dv(),tokenSource:Y}},lastUsedProvider:j?J:Q.lastUsedProvider};this.write(V);let B=Q.providers.cline?.settings?.auth,H=Z.provider==="cline"?Z.auth:V.providers.cline?.settings?.auth,G=!!B?.accessToken&&!H?.accessToken;return s(`providers.save providerId=${J} tokenSource=${Y} clineAuthWasPresent=${!!B?.accessToken} clineAuthIsPresent=${!!H?.accessToken} authDropped=${G}`),V}resolveProviderSettings($,W){let Z=$.providers[W]?.settings,J=H0(W)?.storageProviderId;if(!J||J===W)return Z;let j=$.providers[J]?.settings;if(!j)return Z;return Q6.parse({...j.auth?{auth:j.auth}:{},...j.apiKey?{apiKey:j.apiKey}:{},...j.baseUrl?{baseUrl:j.baseUrl}:{},...Z??{},provider:W})}getProviderSettings($){let W=this.read();return this.resolveProviderSettings(W,$)}resolveLastUsedProviderId($,W){let Z=$.lastUsedProvider;if(Z===fv&&W.isClinePassEnabled===!1)return _v;return Z}getLastUsedProviderSettings($={}){let W=this.read(),Z=this.resolveLastUsedProviderId(W,$);if(!Z)return;return this.resolveProviderSettings(W,Z)}getProviderConfig($,W){let Z=this.getProviderSettings($);if(!Z)return;return s0(Z,W)}getLastUsedProviderConfig($={}){let W=this.getLastUsedProviderSettings($);if(!W)return;return s0(W,$)}async refreshCatalog(){try{await W6({})}catch{}}}D0();M6();function Ov($,W){let Z=$?.expiresAt,Q=W?.expiresAt;return $?.accessToken===W?.accessToken&&$?.refreshToken===W?.refreshToken&&$?.accountId===W?.accountId&&Z===Q}class w7 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 gY{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new X1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let W=H0($.providerId);if(!W)return null;return this.resolveWithSingleFlight(W.providerId,W.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,W,Z=!1){let Q=this.refreshInFlight.get(W);if(Q)return Q;let J=this.resolveProviderApiKeyInternal($,W,Z).catch((j)=>{throw j}).finally(()=>{this.refreshInFlight.delete(W)});return this.refreshInFlight.set(W,J),J}async resolveProviderApiKeyInternal($,W,Z){let Q=H0($);if(!Q)return null;let J=this.providerSettingsManager.getProviderSettings(W);if(!J)return s(`oauth.resolve providerId=${$} storageProviderId=${W} outcome=no_settings`),null;let j=K4($,J);if(!j)return s(`oauth.resolve providerId=${$} storageProviderId=${W} outcome=no_credentials`),null;s(`oauth.resolve.start providerId=${$} storageProviderId=${W} forceRefresh=${Z} accessTokenHash=${R0(j.access)} refreshTokenHash=${R0(j.refresh)}`);let X=await Q.refresh({settings:J,credentials:j,forceRefresh:Z,telemetry:this.telemetry});if(!X)throw s(`oauth.resolve providerId=${$} outcome=refresh_returned_null`),new w7($);let Y=j2({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:X,setLastUsed:!1,save:!1}),V=!Ov(J.auth,Y.auth);if(V)s(`oauth.resolve.refreshed providerId=${$} newAccessTokenHash=${R0(X.access)} newRefreshTokenHash=${R0(X.refresh)} savingToDisk=true`),this.providerSettingsManager.saveProviderSettings(Y,{setLastUsed:!1,tokenSource:"oauth"});else s(`oauth.resolve providerId=${$} outcome=not_refreshed`);return{apiKey:Q.getApiKey(Y)??X.access,accountId:X.accountId,refreshed:V}}}import{normalizeUserInput as Tv}from"@cline/shared";import{nanoid as zv}from"nanoid";class Ef{list($){return $?Y1($):[]}update($,W){if(!$)return{sessionId:W.sessionId,prompts:[],updated:!1};let Z=W.promptId.trim(),Q=$.pendingPrompts.findIndex((V)=>V.id===Z);if(Q<0)return{sessionId:W.sessionId,prompts:Y1($),updated:!1};let J=$.pendingPrompts[Q];if(!J)return{sessionId:W.sessionId,prompts:Y1($),updated:!1};let j=W.prompt===void 0?J.prompt:Tv(W.prompt).trim();if(!j)throw Error("prompt cannot be empty");let X=W.delivery??J.delivery,Y={...J,prompt:j,mode:W.mode??J.mode,delivery:X};return $.pendingPrompts.splice(Q,1),qv($,Y,Q,J.delivery),{sessionId:W.sessionId,prompts:Y1($),prompt:C7(Y),updated:!0}}delete($,W){if(!$)return{sessionId:W.sessionId,prompts:[],removed:!1};let Z=W.promptId.trim(),Q=$.pendingPrompts.findIndex((j)=>j.id===Z);if(Q<0)return{sessionId:W.sessionId,prompts:Y1($),removed:!1};let[J]=$.pendingPrompts.splice(Q,1);return{sessionId:W.sessionId,prompts:Y1($),prompt:J?C7(J):void 0,removed:!0}}enqueue($,W){let{prompt:Z,mode:Q,delivery:J,userImages:j,userFiles:X}=W,Y=$.pendingPrompts.findIndex((V)=>V.prompt===Z);if(Y>=0){let[V]=$.pendingPrompts.splice(Y,1),B={...V,prompt:Z,mode:Q??V.mode,userImages:j??V.userImages,userFiles:X??V.userFiles};if(J==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...B,delivery:"steer"});else $.pendingPrompts.push(B)}else{let V={id:`pending_${Date.now()}_${zv(5)}`,prompt:Z,mode:Q,delivery:J,userImages:j,userFiles:X};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return Y1($)}consumeSteer($){let W=$.pendingPrompts.findIndex((Q)=>Q.delivery==="steer");if(W<0)return{prompts:Y1($)};let[Z]=$.pendingPrompts.splice(W,1);return{entry:Z,prompts:Y1($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:Y1($)}}requeueFront($,W){return $.pendingPrompts.unshift(W),Y1($)}clear($){return $.pendingPrompts.length=0,[]}}class mY{deps;service=new Ef;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let W=this.deps.getSession($.sessionId);if(!W||W.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Z=this.service.update(W,$);return this.emitPrompts(W),this.scheduleDrain($.sessionId,W),Z}delete($){let W=this.deps.getSession($.sessionId);if(!W||W.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Z=this.service.delete(W,$);return this.emitPrompts(W),this.scheduleDrain($.sessionId,W),Z}enqueue($,W){let Z=this.deps.getSession($);if(!Z||Z.aborting)return;this.service.enqueue(Z,W),this.emitPrompts(Z),this.scheduleDrain($,Z)}consumeSteer($){let W=this.deps.getSession($);if(!W)return;let{entry:Z}=this.service.consumeSteer(W);if(!Z)return;return this.emitPrompts(W),this.emitSubmitted(W,Z),Z}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:Y1($)}})}scheduleDrain($,W){if(W.pendingPrompts.length===0||W.aborting||W.drainingPendingPrompts||!W.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let W=this.deps.getSession($);if(!W)return;if(W.aborting||W.drainingPendingPrompts)return;if(!W.agent.canStartRun())return;let{entry:Z}=this.service.shiftNext(W);if(!Z)return;this.emitPrompts(W),this.emitSubmitted(W,Z),W.drainingPendingPrompts=!0;let Q=!0;try{await this.deps.send({sessionId:$,prompt:Z.prompt,...Z.mode?{mode:Z.mode}:{},userImages:Z.userImages,userFiles:Z.userFiles})}catch{Q=!1,this.service.requeueFront(W,Z),this.emitPrompts(W)}finally{if(W.drainingPendingPrompts=!1,Q&&W.pendingPrompts.length>0&&W.status!=="failed"&&W.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,W){let Z=C7(W);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Z.id,prompt:Z.prompt,delivery:Z.delivery,attachmentCount:Z.attachmentCount,userImages:Z.userImages,userFiles:Z.userFiles}})}}function C7($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function Y1($){return $.pendingPrompts.map(C7)}function qv($,W,Z,Q){if(W.delivery==="steer")$.pendingPrompts.unshift(W);else if(Q==="steer")$.pendingPrompts.push(W);else $.pendingPrompts.splice(Z,0,W)}D0();class cY{deps;constructor($){this.deps=$}dispatchAgentEvent($,W,Z){let Q=this.deps.getSession($),J={sessionId:$,config:W,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},j=v3(Z),X=!!Q&&(!j.agentId||j.agentId===vY(Q.agent));c3(J,Z,X?{isPrimaryAgentEvent:!0,agentId:vY(Q.agent),conversationId:Q.agent.getConversationId(),...Q?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,W){let Z=this.deps.getSession($);if(Z){if(bj(Z,W),W.type==="agent_event"){let Q={sessionId:$,config:Z.config,liveSession:Z,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};c3(Q,W.event,{agentId:W.agentId,teamRole:"teammate",teamAgentId:W.agentId,isPrimaryAgentEvent:!1})}if(W.type==="teammate_spawned"){let Q=o1({agentId:W.teammate.runtimeAgentId??W.agentId,conversationId:W.teammate.conversationId,parentAgentId:W.teammate.parentAgentId,createdByAgentId:vY(Z.agent),teamId:Z.runtime.teamRuntime?.getTeamId(),teamName:Z.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:W.agentId});if(Q)_$(Z.config.telemetry,{ulid:$,modelId:W.teammate.modelId??Z.config.modelId,provider:Z.config.providerId,...Q})}}if(await yj($,W,this.deps.invokeBackendOptional),Z)hj(Z,$,W,this.deps.emit)}async handlePluginEvent($,W,Z){if(W.name==="plugin_log"){this.handlePluginLog($,W.payload);return}if(W.name==="automation_event"){let V=this.deps.getSession($)?.config.extensionContext?.automation??Z;if(!V)return;let B=W.payload&&typeof W.payload==="object"?W.payload:void 0;if(!B)return;await V.ingestEvent(B);return}if(W.name!=="steer_message"&&W.name!=="queue_message"&&W.name!=="pending_prompt")return;let Q=W.payload&&typeof W.payload==="object"?W.payload:void 0,J=typeof Q?.sessionId==="string"&&Q.sessionId.trim().length>0?Q.sessionId.trim():$,j=typeof Q?.prompt==="string"?Q.prompt.trim():"";if(!j)return;let X=W.name==="steer_message"?"steer":W.name==="queue_message"?"queue":Q?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(J,{prompt:j,delivery:X})}handlePluginLog($,W,Z){let Q=this.deps.getSession($),J=Z??Q?.config.extensionContext?.logger??Q?.config.logger;if(!J||!W||typeof W!=="object")return;let j=W,X=typeof j.message==="string"?j.message:"";if(!X)return;let Y=j.metadata&&typeof j.metadata==="object"?{...j.metadata}:{};if(Y.sessionId??=$,typeof j.pluginName==="string"&&j.pluginName)Y.pluginName=j.pluginName;if(j.level==="debug"){J.debug(X,Y);return}if(j.level==="error"){if(J.error)J.error(X,Y);else J.log(X,{...Y,severity:"error"});return}J.log(X,Y)}}function vY($){return $.getAgentId()}function uY($){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:s1($.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 dY($,W){let Z=$[W];return typeof Z==="function"?Z:null}async function wf($,W,...Z){let Q=dY($,W);if(!Q)throw Error(`session service method not available: ${W}`);return Promise.resolve(Q.apply($,Z))}async function Cf($,W,...Z){let Q=dY($,W);if(!Q)return;await Promise.resolve(Q.apply($,Z))}async function Pf($,W,...Z){let Q=dY($,W);if(!Q)return;return await Promise.resolve(Q.apply($,Z))}U1();D0();function lY($,W,Z){return{onSubAgentEvent:(Q)=>$.onAgentEvent(Z,W,Q),onSubAgentStart:(Q)=>{let J=$.getSession(Z)?.runtime.teamRuntime;$.subAgentStarts.set(Q.subAgentId,{startedAt:Date.now(),rootSessionId:Z});let j=o1({agentId:Q.subAgentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:Q.parentAgentId});if(j)_$(W.telemetry,{ulid:Z,modelId:W.modelId,provider:W.providerId,...j});Z4(W.telemetry,{event:"started",ulid:Z,durationMs:0,parentId:Q.parentAgentId,agentId:Q.subAgentId,...j}),$.invokeBackendOptional("handleSubAgentStart",Z,Q)},onSubAgentEnd:(Q)=>{let J=$.getSession(Z)?.runtime.teamRuntime,j=$.subAgentStarts.get(Q.subAgentId),X=j?Date.now()-j.startedAt:0,Y=Q.result?.text?Q.result.text.split(`
|
|
760
|
-
`).length:0;Z4(W.telemetry,{event:"ended",ulid:Z,durationMs:X,outputLines:Y,errorMessage:Q.error?String(Q.error):void 0,agentId:Q.subAgentId,parentId:Q.parentAgentId,...o1({agentId:Q.subAgentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:Q.parentAgentId})}),$.subAgentStarts.delete(Q.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Z,Q)}}}function pY($,W,Z,Q){let J=lY($,W,Z);return C$({configProvider:{getRuntimeConfig:()=>$.getSession(Z)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:W.providerId,modelId:W.modelId,cwd:W.cwd,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking,maxIterations:W.maxIterations,hooks:W.hooks,extensions:W.extensions,logger:W.logger,telemetry:W.telemetry},getConnectionConfig:()=>$.getSession(Z)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:W.providerId,modelId:W.modelId,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let X=W.enableTools?N2({cwd:W.cwd,...a0[i1({mode:W.mode})],executors:Q}):[];if(W.enableSpawnAgent)X.push(pY($,W,Z,Q));return n1(X)},...J})}import{readFile as Mv,stat as Rv}from"node:fs/promises";var Nv=20480000;async function Sf($){let W=await Rv($);if(!W.isFile())throw Error("Path is not a file");if(W.size>Nv)throw Error("File is too large to read into context.");let Z=await Mv($,"utf8");if(Z.includes("\x00"))throw Error("Cannot read binary file into context.");return Z}var bf=5000;function lW($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function hv($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=$,Z=lW(W.inputTokens),Q=lW(W.outputTokens),J=lW(W.cacheReadTokens),j=lW(W.cacheWriteTokens),X=lW(W.totalCost);if(Z===void 0||Q===void 0||J===void 0||j===void 0||X===void 0)return;return{inputTokens:Z,outputTokens:Q,cacheReadTokens:J,cacheWriteTokens:j,totalCost:X}}function kv($,W){return{inputTokens:Math.max($.inputTokens,W.inputTokens),outputTokens:Math.max($.outputTokens,W.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,W.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,W.cacheWriteTokens),totalCost:Math.max($.totalCost,W.totalCost)}}function yf($,W){if(!W)return!1;if($.source_message_count!==W.source_message_count)return $.source_message_count<W.source_message_count;return Date.parse($.updated_at)<Date.parse(W.updated_at)}class h1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new s5;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new s$;constructor($){let W=wv();if(W)yv(W);let Z=c0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new r6,this.createAgentInstance=$.createAgent??((Q)=>new N$(Q)),this.defaultCapabilities=C0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new X1,this.oauthTokenManager=$.oauthTokenManager??new gY({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Z),this.defaultFetch=$.fetch,this.pendingPromptsController=new mY({getSession:(Q)=>this.sessions.get(Q),emit:(Q)=>this.emit(Q),send:(Q)=>this.runTurn(Q)}),this.pendingPrompts={list:async(Q)=>this.pendingPromptsController.list(Q.sessionId),update:async(Q)=>this.pendingPromptsController.update(Q),delete:async(Q)=>this.pendingPromptsController.delete(Q)},this.eventBridge=new cY({getSession:(Q)=>this.sessions.get(Q),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(Q)=>this.emit(Q),persistMessages:(Q,J,j)=>{this.invoke("persistSessionMessages",Q,J,j)},enqueuePendingPrompt:(Q,J)=>this.pendingPromptsController.enqueue(Q,J),invokeBackendOptional:(Q,...J)=>this.invokeOptional(Q,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let W=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!W?.apiKey)return $;return{...$,config:{...$.config,apiKey:W.apiKey}}}async startSession($){let W=$.source??F0.CLI,Z=X0(),Q=$.config.sessionId?.trim()??"",J=Q||Pv(),j=await this.applyInitialOAuthCredentials($),X=j.initialMessages??[],Y=X.length>0?d8(X):q0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let B=rY(V,J),H=rY(B,`${J}.messages.json`),G=rY(B,`${J}.json`),K=s1($.config),F=x0.parse({version:1,session_id:J,source:W,pid:process.pid,started_at:Z,status:"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:K,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:H}),A,D;if(Q.length>0&&X.length>0&&!j.prompt?.trim()){let k=await this.invokeOptionalValue("readSessionManifest",J);if(k)F=k,A={manifestPath:G,messagesPath:k.messages_path||H,compactionPath:k.compaction_path,manifest:k},D=await this.invokeOptionalValue("readSessionCompactionState",J)}let f=await this.seedAggregateUsageFromArtifacts({initialUsage:Y,sessionDir:B,rootMessagesPath:A?.messagesPath??H,manifest:F});this.usageBySession.set(J,Y),this.aggregateUsageBySession.set(J,f);let _=C0(this.defaultCapabilities,$.capabilities),R=_?.toolExecutors??this.toolExecutors,T=$.localRuntime,O=T?.extensionContext?.logger??T?.logger,L=T?.extensionContext?.automation,C,N={getSession:(k)=>this.sessions.get(k),subAgentStarts:this.subAgentStarts,onAgentEvent:(k,W0,T0)=>this.eventBridge.dispatchAgentEvent(k,W0,T0),invokeBackendOptional:(k,...W0)=>this.invokeOptional(k,...W0)};C=await zK({input:j,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:_,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(k)=>{if(k.name==="plugin_log"){this.eventBridge.handlePluginLog(J,k.payload,O);return}this.eventBridge.handlePluginEvent(J,k,L)},onTeamEvent:(k)=>{this.eventBridge.handleTeamEvent(J,k),C.config.onTeamEvent?.(k)},createSpawnTool:()=>pY(N,C.config,J,R),createSubAgentLifecycleCallbacks:(k)=>lY(N,k,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(k)=>{await this.persistSessionMetadata(J,()=>k)}});let p=kZ(j.sessionMetadata??A?.manifest.metadata,C.gitState);if(!A)F.metadata=p;let x=await this.runtimeBuilder.build(C.runtimeBuilderInput),P=C.config,r=C.providerConfig;if(x.teamRuntime&&!P.teamName?.trim())P.teamName=x.teamRuntime.getTeamName();let d=[...x.tools,...P.extraTools??[]],x1=x.extensions??C.extensions,W2=j.initialCompactionState,A$,I0=T4(P),U0=W2??D,O1=I0&&U0?{...U0,conversation_id:U0.conversation_id?.trim()||J}:void 0,A8=I0?z4({compact:I0,getState:()=>A$?.compactionState,saveState:async(k)=>{let W0=A$;if(!W0)return;let T0={...k,conversation_id:W0.sessionId};try{if(!(await this.persistActiveSessionCompactionState(W0,T0)).updated)P.logger?.debug?.("Skipped stale session compaction state",{sessionId:W0.sessionId,sourceMessageCount:T0.source_message_count})}catch(M0){P.logger?.error?.("Failed to persist session compaction state",{sessionId:W0.sessionId,error:M0}),$2(P.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:M0,context:{sessionId:W0.sessionId,providerId:P.providerId,modelId:P.modelId}})}}}):void 0,V0={sessionId:J,providerId:r.providerId,modelId:r.modelId,apiKey:r.apiKey,baseUrl:r.baseUrl,headers:r.headers,knownModels:r.knownModels,providerConfig:r,thinking:P.thinking,reasoningEffort:P.reasoningEffort??r.reasoningEffort,thinkingBudgetTokens:P.thinkingBudgetTokens,maxTokensPerTurn:P.maxTokensPerTurn,temperature:P.temperature,systemPrompt:P.systemPrompt,maxIterations:P.maxIterations,execution:P.execution,prepareTurn:A8,tools:d,hooks:C.hooks,extensions:x1,hookErrorMode:P.hookErrorMode,initialMessages:C.effectiveInput.initialMessages,userFileContentLoader:Sf,toolPolicies:C.toolPolicies,requestToolApproval:C.requestToolApproval?async(k)=>{let W0=C.requestToolApproval,T0=this.sessions.get(J);if(T0)await this.markTurnPending(T0);try{if(!W0)return{approved:!1,reason:"Tool approval callback is not configured."};return await W0(k)}finally{let M0=this.sessions.get(J);if(M0?.status==="pending")await this.markTurnRunning(M0)}}:void 0,telemetry:P.telemetry,onConsecutiveMistakeLimitReached:P.onConsecutiveMistakeLimitReached,completionPolicy:x.completionPolicy,consumePendingUserMessage:()=>{let k=this.pendingPromptsController.consumeSteer(J);return k?BW(k.prompt,k.mode??P.mode):void 0},logger:x.logger??P.logger,extensionContext:P.extensionContext,onEvent:(k)=>this.eventBridge.dispatchAgentEvent(J,P,k)};V0.hooks={...V0.hooks,onEvent:async(k)=>{if(await C.hooks?.onEvent?.(k),k.type!=="assistant-message")return;let W0=this.sessions.get(J);if(!W0)return;let T0=W0.agent.getMessages();try{await this.invoke("persistSessionMessages",J,T0,P.systemPrompt)}catch(M0){P.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:M0}),$2(P.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:M0,severity:"warn",handled:!0,context:{sessionId:J,providerId:P.providerId,modelId:P.modelId}})}}};let l0=this.createAgentInstance(V0);if(V0.onEvent)l0.subscribeEvents(V0.onEvent);x.registerLeadAgent?.(l0);let V1=o1({agentId:l0.getAgentId(),conversationId:l0.getConversationId(),teamId:x.teamRuntime?.getTeamId(),teamName:x.teamRuntime?.getTeamName(),teamRole:x.teamRuntime?"lead":void 0});if(MK(P,J,Q.length>0,K,V1),V1)_$(P.telemetry,{ulid:J,modelId:P.modelId,provider:P.providerId,...V1});if(x.teamRuntime)j9(P.telemetry,{ulid:J,teamId:x.teamRuntime.getTeamId(),teamName:x.teamRuntime.getTeamName(),leadAgentId:l0.getAgentId(),restoredFromPersistence:x.teamRestoredFromPersistence===!0});let y={sessionId:J,config:P,sessionMetadata:p,...A?{artifacts:A}:{},source:W,startedAt:A?.manifest.started_at??Z,updatedAt:A?.manifest.ended_at??A?.manifest.started_at??Z,pendingPrompt:F.prompt,runtime:x,agent:l0,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:X,compactionState:O1,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:C.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(A$=y,y.compactionState&&!this.isCompactionStateForSession(y.sessionId,y.compactionState,y))y.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:y.sessionId,conversationId:y.compactionState.conversation_id}),y.compactionState=void 0;if(this.sessions.set(J,y),A)await this.refreshActiveSessionGitMetadata(y,C.gitState);if(this.emitStatus(J,"running"),X.length>0&&!A){if(await this.ensureSessionPersisted(y),await this.invoke("persistSessionMessages",y.sessionId,X,y.config.systemPrompt),y.compactionState){if(!(await this.persistActiveSessionCompactionState(y,y.compactionState)).updated)y.compactionState=void 0}if(!j.prompt?.trim())await this.updateStatus(y,"completed",0)}let B1;try{if(j.prompt?.trim())if(B1=await this.executeTurn(y,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!y.interactive)await this.finalizeSingleRun(y,B1.finishReason);else await this.completeInteractiveTurn(y,B1.finishReason)}catch(k){if(y.interactive&&y.aborting)B1=await this.completeAbortedInteractiveTurn(y);else{$2(y.config.telemetry,{component:"core",operation:"session.start",error:k,severity:"error",handled:!1,context:{sessionId:y.sessionId,providerId:y.config.providerId,modelId:y.config.modelId}});try{await this.failSession(y)}catch(W0){y.config.logger?.error?.("Session failure cleanup threw",{sessionId:y.sessionId,error:W0})}throw k}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:H,result:B1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(W)=>this.getSession(W),readMessages:(W)=>this.readSessionMessages(W),buildStartInput:(W,Z)=>{let Q=W.restoredCheckpointMetadata?{...Z.sessionMetadata??{},checkpoint:W.restoredCheckpointMetadata}:Z.sessionMetadata;return{...Z,...Q?{sessionMetadata:Q}:{},initialMessages:W.initialMessages}},startSession:(W)=>this.startSession(W),getStartedSessionId:(W)=>W.sessionId,readRestoredSession:(W)=>this.getSession(W)})}async runTurn($){let W=this.getSessionOrThrow($.sessionId),Z=W.agent.canStartRun(),Q=$.delivery??(W.interactive&&!Z?"queue":void 0);if(W.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:Q??"immediate"}}),Q==="queue"||Q==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:Q,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(W,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!W.interactive)await this.finalizeSingleRun(W,J.finishReason);else await this.completeInteractiveTurn(W,J.finishReason);if(J.finishReason==="error"||J.finishReason==="aborted")return J;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),J}catch(J){if(W.interactive&&W.aborting)return await this.completeAbortedInteractiveTurn(W);throw $2(W.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:W.sessionId,providerId:W.config.providerId,modelId:W.config.modelId}}),await this.failSession(W),J}}async getAccumulatedUsage($){let W=jj(this.usageBySession.get($)),Z=jj(this.aggregateUsageBySession.get($));return W||Z?{usage:W,aggregateUsage:Z}:void 0}async abort($,W){let Z=this.sessions.get($);if(!Z)return;Z.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Z.aborting=!0,this.pendingPromptsController.clearAborted(Z),Z.agent.abort(W)}async stopSession($){let W=this.sessions.get($);if(!W)return;if(W.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),W.interactive&&!K0(W.status)){await this.releaseSessionRuntime(W,"session_stop");return}if(W.interactive&&W.agent.canStartRun()){await this.shutdownSession(W,{status:this.resolveInteractiveStopStatus(W),exitCode:this.resolveInteractiveStopExitCode(W),shutdownReason:"session_stop",endReason:"stopped"});return}W.aborting=!0,W.agent.abort(Error("session_stop")),await this.shutdownSession(W,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let W=[...this.sessions.values()];if(W.length===0)return;await Promise.allSettled(W.map((Z)=>Z.interactive&&!K0(Z.status)?this.releaseSessionRuntime(Z,$):Z.interactive&&Z.agent.canStartRun()?this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let W=this.sessions.get($);if(W)return uY(W);let Z=$.trim();if(!Z)return;let Q=await this.getRow(Z);if(Q)return a4(Q);let J=await this.readManifest(Z);return J?YQ(J):void 0}async listSessions($=200){let Z=(await this.listRows($)).map(a4),Q=new Set(Z.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(Q.has(J.sessionId))continue;Z.unshift(uY(J))}return Z.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let W=await this.invoke("deleteSession",$);if(W.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return W.deleted}async updateSession($,W){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:W.prompt,metadata:W.metadata,title:W.title}))?.updated===!0}}async updateSessionCompactionState($,W){let Z=$.trim();if(!Z)return{updated:!1};let Q=this.sessions.get(Z),J=Q?void 0:await this.getSession(Z);if(!(Q??J))return{updated:!1};if(Q){let Y=await this.readSessionMessages(Z),V=W.source_message_count>0&&Y.length>=W.source_message_count,B=V?Y:void 0;if(V){if(!await this.canPersistCompactionState(Z,W,Q,void 0,Y))return{updated:!1};Q.agent.restore(Y)}return await this.persistActiveSessionCompactionState(Q,W,B)}if(!await this.canPersistCompactionState(Z,W,void 0,J))return{updated:!1};let X=await this.invokeOptionalValue("readSessionCompactionState",Z);if(yf(W,X))return{updated:!1};return await this.invoke("persistSessionCompactionState",Z,W),{updated:!0}}async readSessionCompactionState($){let W=$.trim();if(!W)return;let Z=this.sessions.get(W);if(Z)for(;;){let Q=Z.compactionStateWriteQueue;if(!Q)return Z.compactionState;await Q.catch(()=>{return})}return await this.invokeOptionalValue("readSessionCompactionState",W)}isCompactionStateForSession($,W,Z,Q){let J=W.conversation_id?.trim();if(!J)return!0;if(J===$)return!0;let j=Z?.agent.getConversationId()?.trim()||Q?.conversationId?.trim();return j?J===j:!1}async canPersistCompactionState($,W,Z,Q,J){if(!W.conversation_id?.trim())return!1;if(!this.isCompactionStateForSession($,W,Z,Q))return!1;let j=J??Z?.agent.getMessages()??await this.readSessionMessages($);return X2(W,j)!==void 0}async persistActiveSessionCompactionState($,W,Z){if(!await this.canPersistCompactionState($.sessionId,W,$,void 0,Z))return{updated:!1};return await this.enqueueCompactionStateWrite($,async()=>{if(yf(W,$.compactionState))return{updated:!1};return await this.invoke("persistSessionCompactionState",$.sessionId,W),$.compactionState=W,{updated:!0}})}async enqueueCompactionStateWrite($,W){let Q=($.compactionStateWriteQueue??Promise.resolve()).catch(()=>{return}).then(W),J=Q.then(()=>{return},()=>{return});$.compactionStateWriteQueue=J;try{return await Q}finally{if($.compactionStateWriteQueue===J)$.compactionStateWriteQueue=void 0}}async readSessionMessages($){let W=$.trim();if(!W)return[];let Z=await this.getRow(W);if(Z?.messagesPath)return d$(Z.messagesPath);let Q=await this.readManifest(W);return d$(Q?.messages_path)}async dispatchHookEvent($){await jA($,{queueSpawnRequest:(W)=>this.invokeOptional("queueSpawnRequest",W),upsertSubagentSessionFromHook:(W)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",W),appendSubagentHookAudit:(W,Z)=>this.invokeOptional("appendSubagentHookAudit",W,Z),applySubagentStatus:(W,Z)=>this.invokeOptional("applySubagentStatus",W,Z)})}subscribe($,W){return this.events.subscribe($,W)}async updateSessionModel($,W){await this.updateSessionConnection($,{modelId:W})}async updateSessionConnection($,W){let Z=T2(W),Q=this.getSessionOrThrow($);if(Z.providerId!==void 0)Q.config.providerId=Z.providerId;if(Z.modelId!==void 0)Q.config.modelId=Z.modelId;if(Z.apiKey!==void 0)Q.config.apiKey=Z.apiKey;if(Z.baseUrl!==void 0)Q.config.baseUrl=Z.baseUrl;if(Z.headers!==void 0)Q.config.headers=Z.headers;if(Z.providerConfig!==void 0)Q.config.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"reasoningEffort"))Q.config.reasoningEffort=Z.reasoningEffort??void 0;if(Object.hasOwn(Z,"thinkingBudgetTokens"))Q.config.thinkingBudgetTokens=Z.thinkingBudgetTokens??void 0;if(Object.hasOwn(Z,"thinking")){if(Q.config.thinking=Z.thinking??void 0,Z.thinking===!1||Z.thinking===null)Q.config.reasoningEffort=void 0,Q.config.thinkingBudgetTokens=void 0}let J={...Z.providerId!==void 0?{providerId:Z.providerId}:{},...Z.modelId!==void 0?{modelId:Z.modelId}:{},...Z.apiKey!==void 0?{apiKey:Z.apiKey}:{},...Z.baseUrl!==void 0?{baseUrl:Z.baseUrl}:{},...Z.headers!==void 0?{headers:Z.headers}:{},...Z.providerConfig!==void 0?{providerConfig:Z.providerConfig}:{},...Object.hasOwn(Z,"reasoningEffort")?{reasoningEffort:Z.reasoningEffort??void 0}:{},...Object.hasOwn(Z,"thinking")?{thinking:Z.thinking??void 0}:{},...Object.hasOwn(Z,"thinkingBudgetTokens")?{thinkingBudgetTokens:Z.thinkingBudgetTokens??void 0}:{}};if(Z.thinking===!1||Z.thinking===null)J.reasoningEffort=void 0,J.thinkingBudgetTokens=void 0;let j={...Z.apiKey!==void 0?{apiKey:Z.apiKey}:{},...Z.baseUrl!==void 0?{baseUrl:Z.baseUrl}:{},...Z.headers!==void 0?{headers:Z.headers}:{}};if(Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults(J),Q.agent.updateConnection(Z),Q.runtime.teamRuntime?.updateTeammateConnections(j),Z.providerId||Z.modelId)await this.mutateSessionManifest(Q,(X)=>{if(Z.providerId)X.provider=Z.providerId;if(Z.modelId)X.model=Z.modelId})}async mutateSessionManifest($,W){let Z=$.artifacts;if(!Z)return;let Q=$.sessionId,j=(this.manifestMutationQueues.get(Q)??Promise.resolve()).then(async()=>{let Y=await this.invokeOptionalValue("readSessionManifest",Q)??Z.manifest;return W(Y),Z.manifest=Y,await this.invoke("writeSessionManifest",Z.manifestPath,Y),Y}),X=j.then(()=>{return},()=>{return});this.manifestMutationQueues.set(Q,X);try{return await j}finally{if(this.manifestMutationQueues.get(Q)===X)this.manifestMutationQueues.delete(Q)}}handlePluginEvent($,W,Z){return this.eventBridge.handlePluginEvent($,W,Z)}async executeTurn($,W){let Z=await this.prepareTurnInput($,W),Q=Z.prompt.trim(),J=Z?.userImages?.length,j=Z?.userFiles?.length;if(!Q&&!J&&!j)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=Q;await this.ensureSessionPersisted($),await this.refreshActiveSessionGitMetadata($),await this.syncOAuthCredentials($),await this.markTurnRunning($);try{let X=await this.executeAgentTurn($,Q,Z.userImages,Z.userFiles);while(kj($,X.finishReason)){let Y=await Ij($);if(Y.length===0)break;let V=xj($,Y);X=await this.executeAgentTurn($,V)}return X}finally{await this.refreshActiveSessionGitMetadata($)}}async completeInteractiveTurn($,W){if(VW($))return;$.lastInteractiveTurnFinishReason=W,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let W=$.lastInteractiveTurnFinishReason;if(!W)return"cancelled";switch(W){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return W}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let W=new Date,Z=$.agent.getMessages(),Q=q0();return $.persistedMessages=Z,$.started=$.started||Z.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:Q}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:Q,messages:Z,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:W,endedAt:W,durationMs:0}}async executeAgentTurn($,W,Z,Q){let J=$.started||$.agent.getMessages().length>0,j=$.persistedMessages??$.agent.getMessages(),X=this.usageBySession.get($.sessionId)??q0(),Y=this.aggregateUsageBySession.get($.sessionId)??X;$.turnUsageBaseline=X,$.turnAggregateUsageBaseline=Y,$.turnPrimaryUsage=q0(),$.turnUsageByAgent=new Map,tW($.config.telemetry,$.sessionId,$.config.mode),D8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(W,Z,Q):()=>$.agent.run(W,Z,Q),B=await this.runWithAuthRetry($,V,j);$.started=!0;let H=$Z(B.messages,B,j);$.persistedMessages=H;let G=s4($.turnUsageByAgent?.values()??[]),K=L0(X,B.usage),F=L0(L0(q0(),B.usage),G),A=L0(Y,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(D)=>({...D??{},totalCost:K.totalCost,aggregatedAgentsCost:A.totalCost,usage:K,aggregateUsage:A})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,B),B}catch(V){throw $2($.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($,W){if($.submitAndExitObserved)return;if(!W.toolCalls.some((Q)=>Q.name===z0.SUBMIT_AND_EXIT&&Q.error===void 0))return;$.submitAndExitObserved=!0,$4($.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($,W){let Z=s1($.config),Q=bv(W.prompt).trim();if(!Q)return{prompt:"",userImages:W.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,W.userFiles)};let J=await b8(Q,Z);RK($.config.telemetry,J);let j=BW(J.prompt,W.mode??$.config.mode),X=this.resolveAbsoluteFilePaths($.config.cwd,W.userFiles),Y=this.resolveAbsoluteFilePaths(Z,J.matchedFiles),V=Array.from(new Set([...X,...Y]));return{prompt:j,userImages:W.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let W=s1($.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:W,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async refreshActiveSessionGitMetadata($,W){try{let Z=W??await fJ(s1($.config));if(!Z||!$.artifacts)return;if(_J($.artifacts.manifest.metadata,Z))return;await this.persistSessionMetadata($.sessionId,(Q)=>kZ({...Q??{},...$.sessionMetadata??{}},Z))}catch(Z){$.config.logger?.debug?.("Failed to refresh session git metadata",{sessionId:$.sessionId,error:Z})}}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,W){let Z=this.sessions.get($),Q=await this.invokeOptionalValue("readSessionManifest",$)??Z?.artifacts?.manifest,J=W(Q?.metadata);if(!Z?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Z.sessionMetadata=J,Z.artifacts.manifest.metadata=J}async finalizeSingleRun($,W){if(VW($))return;let Z=W==="aborted"||$.aborting,Q=W==="error";await this.shutdownSession($,{status:Z?"cancelled":Q?"failed":"completed",exitCode:Q?1:0,shutdownReason:Q?"session_error":"session_complete",endReason:W})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,W){if(W.status==="completed"&&!$.submitAndExitObserved)$4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});qQ($);let Z=[],Q=(J,j)=>{Z.push(j),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:j,severity:"warn"}),$2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:W.status,shutdownReason:W.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){await this.refreshActiveSessionGitMetadata($);try{await this.updateStatus($,W.status,W.exitCode)}catch(J){Q("update_status",J)}try{await $.agent.shutdown(W.shutdownReason)}catch(J){Q("agent_shutdown",J)}}try{await Promise.resolve($.runtime.shutdown(W.shutdownReason))}catch(J){Q("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){Q("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:W.endReason,ts:Date.now()}}),Z.length>0&&W.status==="failed")throw Z[0]}async releaseSessionRuntime($,W){let Z=[],Q=(J,j)=>{Z.push(j),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:j,severity:"warn"}),$2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:W,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(W)}catch(J){Q("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(W))}catch(J){Q("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){Q("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Z.length>0)throw Z[0]}async updateStatus($,W,Z){if(!$.artifacts)return;let Q=await this.invoke("updateSessionStatus",$.sessionId,W,Z);if(!Q.updated)return;let J=await this.mutateSessionManifest($,(j)=>{if(j.status=W,K0(W))delete j.ended_at,j.exit_code=null;else j.ended_at=Q.endedAt??X0(),j.exit_code=typeof Z==="number"?Z:null});if(!J)return;$.status=W,$.updatedAt=Q.endedAt??X0(),$.endedAt=K0(W)?null:J.ended_at,$.exitCode=J.exit_code,this.emitStatus($.sessionId,W)}async runWithAuthRetry($,W,Z){try{return await W()}catch(Q){if(!J2($.config.providerId)||!Sv(Q))throw Q;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Z),W()}}async syncOAuthCredentials($,W){let Z=null;try{Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:W?.forceRefresh})}catch(Q){if(Q instanceof w7)throw Error(`${Q.providerId} requires re-authentication.`);throw Q}if(!Z?.apiKey||$.config.apiKey===Z.apiKey)return;$.config.apiKey=Z.apiKey,$.agent.updateConnection({apiKey:Z.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Z.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Z.apiKey})}getSessionOrThrow($){let W=this.sessions.get($);if(!W){let Z=new Z$($);throw $2(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Z,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Z}return W}resolveAbsoluteFilePaths($,W){if(!W||W.length===0)return[];let Z=W.map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>Cv(Q)?Q:iY($,Q));return Array.from(new Set(Z))}getSessionAgentTelemetryIdentity($){return o1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let W=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Z=L0($.initialUsage,W);return this.withPersistedAggregateUsageFloor(Z,$.manifest)}async summarizePersistedTeammateUsage($,W,Z){let Q=iY(W),J=`${Z}.messages.json`,j;try{j=Ev($)}catch{return q0()}let X=q0();for(let Y of j){if(!Y.endsWith(".messages.json"))continue;if(Y===J)continue;let V=iY($,Y);if(V===Q)continue;let B=await d$(V);if(B.length===0)continue;X=L0(X,d8(B))}return X}withPersistedAggregateUsageFloor($,W){let Z=hv(W.metadata?.aggregateUsage);if(Z)return kv($,Z);let Q=W.metadata?.aggregatedAgentsCost;if(typeof Q!=="number"||!Number.isFinite(Q)||Q<=$.totalCost)return $;return{...$,totalCost:Q}}emitStatus($,W){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:W}})}async emitSessionSnapshot($){let W=await this.getSession($);if(!W)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:C1({session:W,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($)),bf))}async getRow($){let W=$.trim();if(!W)return;return(await this.listRows(bf)).find((Q)=>Q.sessionId===W)}async readManifest($){let W=$.trim();if(!W)return;return await this.invokeOptionalValue("readSessionManifest",W)}invoke($,...W){return wf(this.sessionService,$,...W)}invokeOptional($,...W){return Cf(this.sessionService,$,...W)}invokeOptionalValue($,...W){return Pf(this.sessionService,$,...W)}}function xv($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((W)=>({name:W.name,input:W.input,output:W.output,error:W.error,durationMs:W.durationMs}))}}function gv($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function cQ($={}){let W=new h1({sessionService:new y1(new S1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Z){let Q=(Z.cwd?.trim()||Z.workspaceRoot).trim(),J=await W.startSession({source:Z.source?.trim()||F0.CLI,interactive:!1,config:{providerId:Iv(Z.provider),modelId:Z.model,apiKey:Z.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:gv(Z),maxIterations:Z.maxIterations,enableTools:Z.enableTools!==!1,enableSpawnAgent:Z.enableSpawn!==!1,enableAgentTeams:Z.enableTeams!==!1,disableMcpSettingsTools:Z.disableMcpSettingsTools,missionLogIntervalSteps:Z.missionStepInterval,missionLogIntervalMs:Z.missionTimeIntervalMs},toolPolicies:Z.toolPolicies??{"*":{autoApprove:Z.autoApproveTools!==!1}},localRuntime:{configExtensions:Z.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Z,Q){let J=await W.runTurn({sessionId:Z,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((j)=>j.content)});if(!J)throw Error("local hub schedule runtime returned no turn result");return{result:xv(J)}},async abortSession(Z){return await W.abort(Z,Error("hub schedule abort")),{applied:!0}},async stopSession(Z){return await W.stopSession(Z),{applied:!0}}}}import{release as mv}from"node:os";import{createClineTelemetryServiceConfig as vv}from"@cline/shared";D0();_W();var cv=300000,uv=5000;function hf(){let $=vv({metadata:{extension_version:uW,cline_type:"hub",platform:"cline-hub-daemon",platform_version:process.version,os_type:process.platform,os_version:mv()}}),W=n$($),Z,Q=()=>{try{return Z??=new X1,Z.getProviderSettings("cline")?.auth}catch{return}},J,j=()=>{let Y=Q(),V=Y?.accountId?.trim();if(!Y||!V)return;let B=`${V}:${Y.organizationId??""}`;if(B===J)return;J=B,H1(W.telemetry,{id:V,provider:"cline",organizationId:Y.organizationId,organizationName:Y.organizationName,memberId:Y.memberId})};j();let X=setInterval(j,cv);return X.unref?.(),{telemetry:W.telemetry,dispose:async()=>{clearInterval(X);let Y;await Promise.race([(async()=>{await W.flush(),await W.dispose()})(),new Promise((V)=>{Y=setTimeout(V,uv),Y.unref?.()})]),clearTimeout(Y)}}}lv(process.env.CLINE_VCR);function rv($){let W=process.cwd(),Z,Q,J;for(let j=0;j<$.length;j+=1){let X=$[j],Y=$[j+1];if(X==="--cwd"&&Y){W=Y,j+=1;continue}if(X==="--host"&&Y){Z=Y,j+=1;continue}if(X==="--port"&&Y){let V=Number(Y);if(Number.isFinite(V))Q=V;j+=1;continue}if(X==="--pathname"&&Y)J=Y,j+=1}return{cwd:W,host:Z,port:Q,pathname:J}}async function iv(){let $=rv(process.argv.slice(2));process.chdir($.cwd);let W=Z1({host:$.host,port:$.port,pathname:$.pathname}),Z=hf(),Q;try{Q=await V8({host:W.host,port:W.port,pathname:W.pathname,owner:pv()==="production"?Q1():v0(),telemetry:Z.telemetry,runtimeHandlers:cQ({telemetry:Z.telemetry}),cronOptions:{workspaceRoot:$.cwd}})}catch(Y){throw await Z.dispose().catch(()=>{return}),Y}let J=async()=>{await Q.close(),await Z.dispose().catch(()=>{return}),process.exit(0)},j=!1,X=(Y,V)=>{if(j)return;j=!0;let B=V instanceof Error?V.stack||V.message:String(V);process.stderr.write(`[hub-daemon] ${Y}: ${B}
|
|
751
|
+
${V}`:""}`);let B=Cx($);if(Z7($))throw Error(`Skill uninstall completed, but ${$.name??$.id} is still present in Cline's global skills directories.`);return{id:$.id,type:"skill",status:"uninstalled",message:`Uninstalled ${$.name??$.id}.`,output:[V,...B.map((H)=>`Removed: ${H}`)].filter(Boolean).join(`
|
|
752
|
+
`)||void 0}}async function J7($,W={}){let[Z]=oX($),Q=Z?.trim()||$.id;if(!Q)throw Error("Plugin marketplace uninstalls require a plugin name.");let J=await P9({name:Q,workspaceRoot:W.workspaceRoot});return{id:$.id,type:"plugin",status:"uninstalled",message:`Uninstalled ${$.name??J.name??$.id}.`,output:[`Path: ${J.installPath}`,...J.removedPaths.map((j)=>`Removed: ${j}`)].join(`
|
|
753
|
+
`)}}async function tX($,W={}){if($.type==="mcp"){let Z=b9($);if(W.deleteMcpServer)await W.deleteMcpServer(Z);else W7($,W);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Z??$.id}.`}}if($.type==="skill")return Q7($,W);if($.type==="plugin")return J7($,W);throw Error(`Unsupported marketplace entry type: ${$.type}`)}var l_={};w(l_,{parsePluginSource:()=>F7,isOfficialPluginSlug:()=>K7,installPlugin:()=>JY,collectPluginMcpOAuthCandidates:()=>A7});import{spawn as Px}from"node:child_process";import{createHash as Sx}from"node:crypto";import{existsSync as h1,mkdirSync as WY,readdirSync as bx,readFileSync as yx,renameSync as j7,rmSync as V7,statSync as ZY}from"node:fs";import{cp as $Y,mkdir as g_,writeFile as B7}from"node:fs/promises";import{homedir as S_}from"node:os";import{basename as K$,dirname as b_,extname as hx,join as t,relative as m_,resolve as Q2,sep as kx}from"node:path";import{isPluginModulePath as Y7,resolveClineDir as Ix,resolvePluginModuleEntries as xx}from"@cline/shared/storage";var t6="_installed",H7="package",gx="https://github.com/cline/plugins.git",y_=30000,X7=10485760,h_="@cline/",mx=["dependencies","devDependencies","optionalDependencies","peerDependencies"],vx={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function G7($){if($==="~")return S_();if($.startsWith("~/"))return t(S_(),$.slice(2));return $}function v_($){return $.split(kx).join("/")}function A8($){return Sx("sha256").update($).digest("hex").slice(0,12)}function cx($){let W=0;while(W<$.length&&$[W]==="-")W++;let Z=$.length;while(Z>W&&$[Z-1]==="-")Z--;return $.slice(W,Z)}function G$($){let W="",Z=!1,Q=$.startsWith("@")?$.slice(1):$;for(let j of Q.slice(0,256)){if(j>="a"&&j<="z"||j>="A"&&j<="Z"||j>="0"&&j<="9"||j==="."||j==="_"||j==="-")W+=j,Z=j==="-";else if(!Z)W+="-",Z=!0;if(W.length>=80)break}return cx(W)||"plugin"}function K7($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function ux($){return $?.trim()||gx}function k_($){let Z=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Z?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Z[1]}}function dx($){if($.startsWith(".")||$.startsWith("/")||$==="~"||$.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test($))return!1;let[W,...Z]=$.split("/");return!!W&&Z.length>=2&&W.includes(".")&&!W.startsWith(".")&&!W.endsWith(".")}function lx($){let W=$.match(/^git@([^:]+):(.+)$/);if(W){let X=W[2]??"",Y=X.indexOf("@");if(Y<0)return{repo:$};return{repo:`git@${W[1]}:${X.slice(0,Y)}`,ref:X.slice(Y+1)||void 0}}if($.includes("://"))try{let X=new URL($),Y=X.pathname.replace(/^\/+/,""),V=Y.indexOf("@");if(V<0)return{repo:$};return X.pathname=`/${Y.slice(0,V)}`,{repo:X.toString().replace(/\/$/,""),ref:Y.slice(V+1)||void 0}}catch{return{repo:$}}let Z=$.indexOf("/");if(Z<0)return{repo:$};let Q=$.slice(0,Z),J=$.slice(Z+1),j=J.indexOf("@");if(j<0)return{repo:$};return{repo:`${Q}/${J.slice(0,j)}`,ref:J.slice(j+1)||void 0}}function px($){try{return decodeURIComponent($)}catch{return $}}function rx($){return K$(px($))||"plugin"}function ix($){let W=$.split("/").filter(Boolean);return W.length>=5&&(W[2]==="blob"||W[2]==="raw")}function I_($){if(!/^https?:\/\//i.test($))return null;let W;try{W=new URL($)}catch{return null}let Z=W.hostname.toLowerCase(),Q=rx(W.pathname),J=Y7(Q),j=(Z==="github.com"||Z==="www.github.com")&&ix(W.pathname);if(W.protocol!=="https:"){if(j||Z==="raw.githubusercontent.com"||J)throw Error(`Remote plugin file URLs must use https: ${$}`);return null}if(Z==="github.com"||Z==="www.github.com"){let X=W.pathname.split("/").filter(Boolean);if(!j)return null;if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:`https://raw.githubusercontent.com/${[X[0],X[1],...X.slice(3)].join("/")}`,filename:Q}}if(Z==="raw.githubusercontent.com"){if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:W.toString(),filename:Q}}if(!J)return null;return{type:"remote",url:W.toString(),filename:Q}}function x_($,W={}){let Z=$.trim(),Q=Z.startsWith("git:")&&!Z.startsWith("git://"),J=Q?Z.slice(4).trim():Z;if(!W.force&&!Q&&!/^(https?|ssh|git):\/\//i.test(J))return null;let{repo:j,ref:X}=lx(J),Y="",V="";if(j.startsWith("git@")){let G=j.match(/^git@([^:]+):(.+)$/);Y=G?.[1]??"",V=G?.[2]??""}else if(/^(https?|ssh|git):\/\//i.test(j)){let G=new URL(j);Y=G.hostname,V=G.pathname.replace(/^\/+/,"")}else{let G=j.indexOf("/");if(G<0)return null;Y=j.slice(0,G),V=j.slice(G+1)}let B=V.replace(/\.git$/,"").replace(/^\/+/,"");if(!Y||!B||B.split("/").length<2)return null;return{type:"git",repo:j.startsWith("git@")||/^(https?|ssh|git):\/\//i.test(j)?j:`https://${j}`,ref:X,host:Y,path:B}}function F7($,W){let Z=$.trim();if(!Z)throw Error("plugin install requires a source");if(W==="npm"){let X=Z.startsWith("npm:")?Z.slice(4).trim():Z,{name:Y}=k_(X);return{type:"npm",spec:X,name:Y}}if(W==="git"){let X=x_(Z,{force:!0});if(!X)throw Error(`Invalid git plugin source: ${$}`);return X}if(W==="local")return{type:"local",path:$};if(W==="remote"){let X=I_(Z);if(!X)throw Error(`Invalid remote plugin source: ${$}`);return X}if(Z.startsWith("npm:")){let X=Z.slice(4).trim(),{name:Y}=k_(X);return{type:"npm",spec:X,name:Y}}if(Z.startsWith(".")||Z.startsWith("/")||Z==="~"||Z.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test(Z))return{type:"local",path:$};let J=I_(Z);if(J)return J;let j=x_(Z);if(j)return j;if(K7(Z))return{type:"official",slug:Z};if(dx(Z))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 nx($){return $?t($,".cline","plugins"):t(Ix(),"plugins")}function ax($,W,Z){if(W.type==="npm")return t($,t6,"npm",`${G$(W.name)}-${A8(Z)}`);if(W.type==="git")return t($,t6,"git",G$(W.host),`${G$(W.path)}-${A8(Z)}`);if(W.type==="remote")return t($,t6,"remote",`${G$(W.filename)}-${A8(Z)}`);if(W.type==="official")return t($,t6,"official",`${G$(W.slug)}-${A8(Z)}`);return t($,t6,"local",`${G$(K$(G7(W.path)))}-${A8(Z)}`)}function ox($,W,Z){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:${Z}#plugins/${$.slug}`;return`local:${Q2(W,G7($.path))}`}function sx($,W){if($.type==="npm")return $.name;if($.type==="git")return G$(K$($.path));if($.type==="remote")return G$(K$($.filename,hx($.filename)));if($.type==="official")return $.slug;return G$(K$(Q2(W,G7($.path))))}async function e6($,W,Z={}){await new Promise((Q,J)=>{let j=Px($,W,{cwd:Z.cwd,stdio:["ignore","ignore","pipe"],env:process.env,windowsHide:!0}),X="";j.stderr.on("data",(Y)=>{X+=String(Y)}),j.on("error",J),j.on("close",(Y)=>{if(Y===0){Q();return}let V=X.trim();J(Error(`${$} ${W.join(" ")} failed with exit code ${Y}${V?`: ${V}`:""}`))})})}function c_($){let W=t($,"package.json");if(!h1(W))return null;try{return JSON.parse(yx(W,"utf8"))}catch{return null}}function tx($){let W=$?.cline?.plugins;if(!Array.isArray(W))return[];return W.flatMap((Z)=>{if(typeof Z==="string")return[Z];return Z.paths??[]})}async function ex($){let W=t($,"package.json"),Z=c_($);if(!Z)return;let Q=!1;for(let J of mx){let j=Z[J];if(!j||typeof j!=="object")continue;for(let X of Object.keys(j)){if(!X.startsWith(h_))continue;delete j[X],delete Z.peerDependenciesMeta?.[X],Q=!0}if(Object.keys(j).length===0)delete Z[J]}if(Z.peerDependenciesMeta){for(let J of Object.keys(Z.peerDependenciesMeta)){if(!J.startsWith(h_))continue;delete Z.peerDependenciesMeta[J],Q=!0}if(Object.keys(Z.peerDependenciesMeta).length===0)delete Z.peerDependenciesMeta}if(!Q)return;await B7(W,`${JSON.stringify(Z,null,2)}
|
|
754
|
+
`,"utf8")}function $g($,W){let Z=t($,"node_modules","@cline");if(!h1(Z))return;for(let Q of d_(Z)){if(`@cline/${Q.name}`===W)continue;V7(t(Z,Q.name),{recursive:!0,force:!0})}}function u_($){let W=tx(c_($)).map((j)=>Q2($,j)).filter((j)=>h1(j)&&ZY(j).isFile()&&Y7(j));if(W.length>0)return W;let Z=xx($);if(Z?.length)return Z;let Q=[],J=[$];while(J.length>0){let j=J.pop();if(!j)continue;for(let X of d_(j)){let Y=t(j,X.name);if(X.name==="node_modules"||X.name===".git")continue;if(X.isDirectory()){J.push(Y);continue}if(X.isFile()&&!X.name.startsWith(".")&&Y7(Y))Q.push(Y)}}return Q.sort((j,X)=>j.localeCompare(X))}function d_($){try{return bx($,{withFileTypes:!0})}catch{return[]}}function Wg($,W){let Z=u_(W);if(Z.length===0)throw Error(`No plugin entry files found in ${W}`);return Z.map((Q)=>`./${v_(m_($,Q))}`)}async function Zg($,W,Z){let Q=Wg($,W);return await B7(t($,"package.json"),JSON.stringify({...vx,name:Z,cline:{plugins:[{paths:Q}]}},null,2),"utf8"),Q}async function Qg($,W,Z){let Q=t(W,H7);return await g_(Q,{recursive:!0}),await B7(t(Q,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await e6(Z,["install",$.spec,"--prefix",Q,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),$g(Q,$.name),t(Q,"node_modules",$.name)}async function QY($,W){if(!h1(t($,"package.json")))return;await ex($),await e6(W,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function Jg($,W,Z){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let Q=t(W,H7),J=["clone","--filter=blob:none"];if($.ref)J.push("--branch",$.ref);J.push("--",$.repo,Q);try{await e6("git",J)}catch(j){if(!$.ref)throw j;await e6("git",["clone","--filter=blob:none","--",$.repo,Q]),await e6("git",["checkout","--detach",$.ref],{cwd:Q})}return await QY(Q,Z),Q}async function jg($,W,Z,Q){let J=t(W,"repo");await e6("git",["clone","--filter=blob:none","--depth","1","--",Q,J]);let j=t(J,"plugins",$.slug);if(!h1(j)||!ZY(j).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${Q}`);let X=t(W,H7);return await $Y(j,X,{recursive:!0,filter:(Y)=>{let V=K$(Y);return V!==".git"&&V!=="node_modules"}}),V7(J,{recursive:!0,force:!0}),await QY(X,Z),X}function eX($){return Error(`Remote plugin file from ${$} exceeds the ${X7} byte limit`)}function Xg($){let W=$.headers.get("content-length");if(!W)return;let Z=Number(W);if(!Number.isFinite(Z)||Z<0)return;return Z}async function Yg($,W){let Z=Xg($);if(Z!==void 0&&Z>X7)throw eX(W);if(!$.body){let X=Buffer.from(await $.text(),"utf8");if(X.byteLength>X7)throw eX(W);return X}let Q=$.body.getReader(),J=[],j=0;try{while(!0){let{done:X,value:Y}=await Q.read();if(X)break;let V=Buffer.from(Y);if(j+=V.byteLength,j>X7)throw await Q.cancel().catch(()=>{return}),eX(W);J.push(V)}return Buffer.concat(J,j)}finally{Q.releaseLock()}}async function Vg($,W){let Z=new AbortController,Q=setTimeout(()=>{Z.abort()},y_);try{let J=await fetch($.url,{signal:Z.signal});if(!J.ok){let X=J.statusText?` ${J.statusText}`:"";throw Error(`Failed to download plugin file from ${$.url}: ${J.status}${X}`)}let j=await Yg(J,$.url);return WY(W,{recursive:!0}),await B7(t(W,$.filename),j),W}catch(J){if(J instanceof Error&&J.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${y_}ms`);throw J}finally{clearTimeout(Q)}}async function Bg($,W,Z,Q){let J=Q2(Z,G7($.path));if(!h1(J))throw Error(`Plugin source path does not exist: ${J}`);let j=ZY(J);if(j.isFile()){if(!Y7(J))throw Error(`Plugin file must be .js or .ts: ${J}`);WY(W,{recursive:!0});let Y=t(W,K$(J));return await $Y(J,Y),W}if(!j.isDirectory())throw Error(`Plugin source must be a file or directory: ${J}`);let X=t(W,H7);return await $Y(J,X,{recursive:!0,filter:(Y)=>{let V=K$(Y);return V!==".git"&&V!=="node_modules"}}),await QY(X,Q),X}function Hg($,W){if(h1($)&&!W)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function Gg($,W,Z){if(WY(b_(W),{recursive:!0}),!h1(W)){j7($,W);return}if(!Z)throw Error(`Plugin is already installed at ${W}. Use --force to replace it.`);let Q=t(b_(W),`.replace-${K$(W)}-${Date.now()}-${process.pid}-${A8(`${W}:${Math.random()}`)}`);j7(W,Q);try{j7($,W)}catch(J){if(!h1(W)&&h1(Q))j7(Q,W);throw J}try{V7(Q,{recursive:!0,force:!0})}catch{}}function Kg($){let W=$.transport;if(W.type==="stdio")return!1;return W.headers!==void 0&&Object.keys(W.headers).length>0}function Fg($){let W=$.oauth?.tokens?.access_token;return typeof W==="string"&&W.trim().length>0}function Ag($){let W=$.metadata;if(!W||W.source!=="plugin"||typeof W.pluginName!=="string"||typeof W.pluginPath!=="string")return;return{pluginName:W.pluginName,pluginPath:W.pluginPath}}function A7($){let W=new Set($.pluginPaths.map((J)=>Q2(J)));if(W.size===0)return[];let Z;try{Z=$1({filePath:$.settingsPath??J0()})}catch{return[]}let Q=[];for(let J of Z){let j=Ag(J);if(!j||!W.has(Q2(j.pluginPath)))continue;let X=J.transport.type;if(X==="stdio")continue;if(Kg(J)||Fg(J))continue;Q.push({name:J.name,pluginName:j.pluginName,pluginPath:j.pluginPath,transportType:X,lastError:J.oauth?.lastError})}return Q.sort((J,j)=>J.name.localeCompare(j.name))}async function JY($){let W=$.source.trim(),Z=F7(W,$.sourceType),Q=$.cwd?.trim(),J=Q?Q2(Q):process.cwd(),j=nx(Q?J:void 0),X=ux($.officialPluginsRepo),Y=ox(Z,J,X),V=ax(j,Z,Y),B=sx(Z,J),H=t(j,t6,".tmp"),G=t(H,`${Date.now()}-${process.pid}-${A8(`${W}:${Math.random()}`)}`),K=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;Hg(V,F),await g_(H,{recursive:!0});let A;try{if(Z.type==="npm")A=await Qg(Z,G,K);else if(Z.type==="git")A=await Jg(Z,G,K);else if(Z.type==="official")A=await jg(Z,G,K,X);else if(Z.type==="remote")A=await Vg(Z,G);else A=await Bg(Z,G,J,K);let D=(Z.type==="local"||Z.type==="remote")&&A===G?u_(G).map((_)=>`./${v_(m_(G,_))}`):await Zg(G,A,B);if(D.length===0)throw Error(`No plugin entry files found for ${W}`);Gg(G,V,F);let U={source:W,installPath:V,entryPaths:D.map((_)=>Q2(V,_)),mcpSyncFailures:[],mcpOAuthCandidates:[]},L=await w9({pluginPaths:U.entryPaths,cwd:J,workspacePath:J});return U.mcpSyncFailures=L.failures,U.mcpOAuthCandidates=A7({pluginPaths:U.entryPaths}),U}catch(D){throw V7(G,{recursive:!0,force:!0}),D}}var $L={};w($L,{writeModelsFileSync:()=>g9,writeModelsFile:()=>m9,toProviderModel:()=>HY,syncStoredProviderRegistration:()=>GY,resolveModelsRegistryPath:()=>k1,registerProviderSettingsProvider:()=>e_,registerCustomProvider:()=>D8,registerConfiguredProvidersFromSettings:()=>v9,readModelsFileSync:()=>$4,readModelsFile:()=>U8,parseModelsFile:()=>BY,ensureCustomProvidersLoadedSync:()=>c9,ensureCustomProvidersLoaded:()=>u9,emptyModelsFile:()=>x9,StoredProviderMetadataSchema:()=>r_,StoredProviderEntrySchema:()=>YY,StoredModelsFileSchema:()=>VY,StoredModelEntrySchema:()=>p_});import{existsSync as Ug,mkdirSync as Dg,readFileSync as _g,renameSync as Lg,rmSync as fg,writeFileSync as Og}from"node:fs";import{mkdir as Tg,readFile as zg,rename as qg,rm as Mg,writeFile as Rg}from"node:fs/promises";import{dirname as XY,join as Ng}from"node:path";import*as A0 from"@cline/llms";import{ApiFormatSchema as Eg,ModelCapabilitySchema as wg,ProviderCapabilitySchema as Cg,ProviderClientSchema as Pg,ProviderProtocolSchema as Sg}from"@cline/shared";import{z as e}from"zod";var jY=e.number().finite().positive().optional().catch(void 0),I9=e.number().finite().nonnegative().optional().catch(void 0),p_=e.object({id:e.string().optional(),name:e.string().optional(),maxTokens:jY,contextWindow:jY,maxInputTokens:jY,capabilities:e.array(wg).optional(),supportsVision:e.boolean().optional(),supportsAttachments:e.boolean().optional(),supportsReasoning:e.boolean().optional(),inputPrice:I9,outputPrice:I9,cacheReadsPrice:I9,cacheWritesPrice:I9,temperature:I9,apiFormat:Eg.optional(),isR1FormatRequired:e.boolean().optional()}).passthrough(),r_=e.object({name:e.string(),baseUrl:e.string(),defaultModelId:e.string().optional(),protocol:Sg.optional(),client:Pg.optional(),capabilities:e.array(Cg).optional(),modelsSourceUrl:e.string().optional()}).passthrough(),YY=e.object({provider:r_.optional(),models:e.record(e.string(),p_).optional()}).passthrough(),VY=e.object({version:e.literal(1),providers:e.record(e.string(),YY)}),bg=e.object({version:e.literal(1),providers:e.record(e.string(),e.unknown())}),U7=new Set;function i_($){return $.split(/[-_]/).filter(Boolean).map((W)=>W.charAt(0).toUpperCase()+W.slice(1)).join(" ")}function k1($){return Ng(XY($.getFilePath()),"models.json")}function x9(){return{version:1,providers:{}}}function BY($){let W=bg.safeParse($);if(!W.success)return s("models.json content is not a valid models file envelope; starting from an empty registry"),x9();let Z={};for(let[Q,J]of Object.entries(W.data.providers)){let j=YY.safeParse(J);if(j.success)Z[Q]=j.data;else s(`models.json: dropping invalid entry for provider=${Q}`)}return{version:1,providers:Z}}function $4($){if(!Ug($))return x9();try{let W=_g($,"utf8");return BY(JSON.parse(W))}catch{s(`models.json at ${$} exists but is unreadable or invalid JSON; treating as an empty registry`)}return x9()}async function U8($){try{let W=await zg($,"utf8");return BY(JSON.parse(W))}catch(W){if(W?.code!=="ENOENT")s(`models.json at ${$} exists but is unreadable or invalid JSON; treating as an empty registry`)}return x9()}function g9($,W){Dg(XY($),{recursive:!0});let Z=VY.parse(W),Q=`${$}.${process.pid}.tmp`;try{Og(Q,`${JSON.stringify(Z,null,2)}
|
|
755
|
+
`,"utf8"),Lg(Q,$)}catch(J){throw fg(Q,{force:!0}),J}}async function m9($,W){await Tg(XY($),{recursive:!0});let Z=VY.parse(W),Q=`${$}.${process.pid}.tmp`;try{await Rg(Q,`${JSON.stringify(Z,null,2)}
|
|
756
|
+
`,"utf8"),await qg(Q,$)}catch(J){throw await Mg(Q,{force:!0}).catch(()=>{}),J}}function HY($,W){return{id:$,name:W.name??$,supportsAttachments:W.capabilities?.includes("files"),supportsVision:W.capabilities?.includes("images"),supportsReasoning:W.capabilities?.includes("reasoning")||W.thinkingConfig!=null}}function n_($){if(!$||$.length===0)return;let W=new Set;if($.includes("reasoning"))W.add("reasoning");if($.includes("prompt-cache"))W.add("prompt-cache");if($.includes("tools"))W.add("tools");return W.size>0?[...W]:void 0}function a_($){let W=new Set;if(!$||$.length===0)return[...W];if($.includes("streaming"))W.add("streaming");if($.includes("tools"))W.add("tools");if($.includes("reasoning"))W.add("reasoning");if($.includes("prompt-cache"))W.add("prompt-cache");if($.includes("vision"))W.add("images"),W.add("files");return[...W]}function yg($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function o_($,W){return $??W??"openai-chat"}function s_($,W,Z){return $??Z??(W==="openai-responses"?"openai":"openai-compatible")}function t_($,W,Z){let Q=new Set(W?.capabilities??Z??[]);if(W?.supportsVision!==void 0)if(W.supportsVision)Q.add("images");else Q.delete("images");if(W?.supportsAttachments!==void 0)if(W.supportsAttachments)Q.add("files");else Q.delete("files");if(W?.supportsReasoning!==void 0)if(W.supportsReasoning)Q.add("reasoning");else Q.delete("reasoning");let J=W?.isR1FormatRequired?"r1":W?.apiFormat,j=W?.inputPrice!==void 0||W?.outputPrice!==void 0||W?.cacheReadsPrice!==void 0||W?.cacheWritesPrice!==void 0;return{id:$,name:W?.name??$,...W?.maxTokens!==void 0?{maxTokens:W.maxTokens}:{},...W?.contextWindow!==void 0?{contextWindow:W.contextWindow}:{},...W?.maxInputTokens!==void 0?{maxInputTokens:W.maxInputTokens}:{},...Q.size>0?{capabilities:[...Q]}:{},...W?.temperature!==void 0?{temperature:W.temperature}:{},...J!==void 0?{apiFormat:J}:{},...j?{pricing:{...W?.inputPrice!==void 0?{input:W.inputPrice}:{},...W?.outputPrice!==void 0?{output:W.outputPrice}:{},...W?.cacheReadsPrice!==void 0?{cacheRead:W.cacheReadsPrice}:{},...W?.cacheWritesPrice!==void 0?{cacheWrite:W.cacheWritesPrice}:{}}}:{}}}function hg($,W){for(let[Z,Q]of Object.entries(W??{})){let J=Q.id?.trim()||Z.trim();if(!J)continue;A0.registerModel($,J,t_(J,Q))}}function kg($,W,Z){return{...W??{},id:$,name:W?.name??$,capabilities:W?.capabilities??Z}}function Ig($){return Object.assign({},...A0.resolveProviderModelCatalogKeys($).map((Z)=>A0.getGeneratedModelsForProvider(Z)))}function e_($){let W=$.provider.trim();if(!W||A0.isBuiltInProviderId(W))return;let Z=$.baseUrl?.trim();if(!Z)return;let Q=A0.MODEL_COLLECTIONS_BY_PROVIDER_ID[W],J=Ig(W),j=a_($.capabilities),X=j.length>0?j:void 0,Y=$.model?.trim(),V={...J,...Q?.models??{}};if(Y)V[Y]=kg(Y,V[Y],X);let B=Object.keys(V).filter(Boolean),H=Y||B[0];if(!H)return;let G=o_($.protocol,Q?.provider.protocol),K=s_($.client,G,Q?.provider.client);A0.registerProvider({provider:{id:W,name:Q?.provider.name??i_(W),description:Q?.provider.description,protocol:G,client:K,baseUrl:Z,modelsSourceUrl:Q?.provider.modelsSourceUrl,defaultModelId:H,capabilities:n_($.capabilities)??Q?.provider.capabilities,source:"file"},models:V})}function v9($){for(let W of Object.values($.providers))e_(W.settings)}function D8($,W){let Z=W.models??{};if(!yg(W.provider)){hg($,Z);return}let Q=a_(W.provider.capabilities),J=Object.entries(Z).map(([B,H])=>({id:H.id?.trim()||B.trim(),model:H})).filter(({id:B})=>B.length>0),j=W.provider.defaultModelId?.trim()||J[0]?.id||"default",X=o_(W.provider.protocol,void 0),Y=s_(W.provider.client,X,void 0),V=Object.fromEntries(J.map(({id:B,model:H})=>[B,{...t_(B,H,Q.length>0?Q:void 0),status:"active"}]));A0.registerProvider({provider:{id:$,name:W.provider.name.trim()||i_($),protocol:X,client:Y,baseUrl:W.provider.baseUrl,modelsSourceUrl:W.provider.modelsSourceUrl,defaultModelId:j,capabilities:n_(W.provider.capabilities),source:"file"},models:V})}function GY($,W,Z){let Q=Z?.models??{},J=new Set;for(let[Y,V]of Object.entries(W?.models??{})){if(Object.hasOwn(Q,Y))continue;let B=V.id?.trim()||Y.trim();if(B)J.add(B),A0.unregisterModel($,B)}if(!Z)return;let j=A0.getProviderCollectionSync($);D8($,Z);let X=A0.getProviderCollectionSync($);if(j&&X&&X!==j){let Y=Object.fromEntries(Object.entries(j.models).filter(([V])=>!J.has(V)));A0.registerProvider({...X,models:{...Y,...X.models}})}}function c9($){let W=k1($);if(U7.has(W))return;let Z=$4(W);for(let[Q,J]of Object.entries(Z.providers))D8(Q,J);U7.add(W)}async function u9($){let W=k1($);if(U7.has(W))return;let Z=await U8(W);for(let[Q,J]of Object.entries(Z.providers))D8(Q,J);U7.add(W)}var BL={};w(BL,{updateLocalProvider:()=>L7,saveLocalProviderSettings:()=>LY,saveLocalProviderOAuthCredentials:()=>zY,resolveLocalClineAuthToken:()=>MY,refreshProviderModelsFromSource:()=>fY,normalizeOAuthProvider:()=>OY,markLocalProviderEnabled:()=>UY,loginLocalProvider:()=>TY,loginAndSaveLocalProviderOAuthCredentials:()=>qY,listLocalProviders:()=>DY,getLocalProviderModels:()=>_Y,ensureCustomProvidersLoaded:()=>u9,deleteLocalProvider:()=>f7,addLocalProvider:()=>AY});import*as x0 from"@cline/llms";var ZL="cline-pass";function xg($){return $.apiKey??$.auth?.apiKey}function gg($){return($.auth?.accessToken?.trim()??"").length>0}function QL($){return $.split(/[-_]/).filter(Boolean).map((W)=>W.charAt(0).toUpperCase()+W.slice(1)).join(" ")}function mg($){let W=$.split(/\s+/).filter(Boolean);if(W.length===0)return"?";if(W.length===1)return W[0].slice(0,2).toUpperCase();return`${W[0][0]}${W[1][0]}`.toUpperCase()}function vg($){let W=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Z=0;for(let Q of $)Z=Z*31+Q.charCodeAt(0)>>>0;return W[Z%W.length]}function JL($){return Object.entries($).sort(([W],[Z])=>W.localeCompare(Z)).map(([W,Z])=>HY(W,Z))}async function cg($,W){let Z=await x0.getModelsForProvider($),Q=$===ZL;if(!W&&!Q)return Z;let J=await F5($,{loadLatestOnInit:Q,loadPrivateOnAuth:!0,failOnError:!1},W);if($==="litellm"&&J?.knownModels)return J.knownModels;if(Q&&J?.knownModels)return J.knownModels;return J?.knownModels?{...Z,...J.knownModels}:Z}function KY($){return[...new Set(($??[]).map((W)=>W.trim()).filter(Boolean))]}function ug($){if(!$?.length)return;return[...new Set($)]}function dg($,W){return ug([...$??[],...W??[]])}function lg($){let W=$?.popularRank;return typeof W==="number"&&Number.isFinite(W)?W:Number.MAX_SAFE_INTEGER}function pg($){if(!$||typeof $!=="object")return!1;let W=$;return typeof W.path==="string"&&W.path.trim().length>0&&typeof W.label==="string"&&W.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(W.type))}function rg($){let W=$?.configFields;if(!Array.isArray(W))return;return W.filter(pg)}var D7={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},WL={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function ig($){if(!$)return[D7];if($.source!=="system")return $.baseUrl?[D7,WL]:[D7];let W=[];if($.env?.length)W.push(D7);if($.baseUrl)W.push(WL);return W}function ng($,W){return W.split(".").reduce((Z,Q)=>{if(!Z||typeof Z!=="object")return;return Z[Q]},$)}function ag($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function og($,W,Z){if(!$?.length)return;let Q={};for(let J of $){let X=ag(J.path==="baseUrl"&&W?.baseUrl===void 0?Z?.baseUrl:ng(W,J.path))??J.defaultValue;if(X!==void 0)Q[J.path]=X}return Q}function jL($){let W=Object.entries($??{}).filter(([Z])=>Z.trim().length>0);return W.length>0?Object.fromEntries(W):void 0}function FY($,W){let Z=W?.includes("vision")??!1,Q=W?.includes("reasoning")??!1;return Object.fromEntries($.map((J)=>[J,{id:J,name:J,supportsVision:Z,supportsAttachments:Z,supportsReasoning:Q}]))}async function XL($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let W=$.modelsSourceUrl?await KZ($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...W])]}function YL($,W){let Z=$.read(),Q=!1;if(Z.providers[W])delete Z.providers[W],Q=!0;if(Z.lastUsedProvider===W)delete Z.lastUsedProvider,Q=!0;if(Q)$.write(Z);x0.unregisterProvider(W)}async function AY($,W){let Z=W.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=W.baseUrl.trim(),J=W.apiKey?.trim()??"";if(!Q&&!J){let A=k1($);if((await U8(A)).providers[Z]){let U=await f7($,{providerId:Z});return{providerId:Z,settingsPath:U.settingsPath,modelsPath:U.modelsPath,modelsCount:0}}return YL($,Z),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(x0.hasProvider(Z))throw Error(`provider "${Z}" already exists`);let j=W.name.trim();if(!j)throw Error("name is required");if(!Q)throw Error("baseUrl is required");let X=KY(W.models),Y=W.modelsSourceUrl?.trim(),V=await XL({providerId:Z,explicitModels:X,modelsSourceUrl:Y,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let B=W.defaultModelId?.trim()&&V.includes(W.defaultModelId.trim())?W.defaultModelId.trim():V[0],H=W.capabilities?.length?[...new Set(W.capabilities)]:void 0,G=jL(W.headers);$.saveProviderSettings({provider:Z,apiKey:J||void 0,baseUrl:Q,headers:G,timeout:W.timeoutMs,model:B,protocol:W.protocol,client:W.client},{setLastUsed:!1});let K=k1($),F=await U8(K);return F.providers[Z]={provider:{name:j,baseUrl:Q,defaultModelId:B,protocol:W.protocol,client:W.client,capabilities:H,modelsSourceUrl:Y},models:FY(V,H)},await m9(K,F),D8(Z,F.providers[Z]),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function L7($,W){let Z=W.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=k1($),J=await U8(Q),j=J.providers[Z];if(!j){let T=$.getProviderSettings(Z);if(!T)throw Error(`provider "${Z}" does not exist`);let O=W.modelsSourceUrl?.trim(),f=KY(W.models)[0]??T.model?.trim();if(!f&&!O)throw Error(`provider "${Z}" cannot be updated because no model is configured`);j={provider:{name:W.name?.trim()||QL(Z),baseUrl:W.baseUrl?.trim()??T.baseUrl?.trim()??"",defaultModelId:f,protocol:T.protocol,client:T.client,capabilities:T.capabilities},models:f?FY([f],T.capabilities):{}}}if(!j.provider)throw Error(`provider "${Z}" cannot be updated because it is a model overlay (no provider metadata)`);let X=W.name?.trim()??j.provider.name.trim();if(!X)throw Error("name is required");let Y=W.baseUrl?.trim()??j.provider.baseUrl.trim();if(!Y)throw Error("baseUrl is required");let V=W.capabilities===void 0?j.provider.capabilities:W.capabilities===null?void 0:[...new Set(W.capabilities)],B=W.protocol===void 0?j.provider.protocol:W.protocol??void 0,H=W.client===void 0?j.provider.client:W.client??void 0,G=KY(W.models),K=W.modelsSourceUrl===void 0?j.provider.modelsSourceUrl:W.modelsSourceUrl?.trim()||void 0,F=W.models!==void 0||W.modelsSourceUrl!==void 0&&!!K,A=Object.keys(j.models??{}).map((T)=>T.trim()).filter(Boolean),D=await XL({providerId:Z,explicitModels:G,modelsSourceUrl:K,fallbackModelIds:A,shouldRecompute:F});if(D.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let U=W.defaultModelId===void 0?j.provider.defaultModelId?.trim():W.defaultModelId?.trim(),L=U&&D.includes(U)?U:D[0],M={...$.getProviderSettings(Z)??{},provider:Z,baseUrl:Y,model:L};if(B)M.protocol=B;else delete M.protocol;if(H)M.client=H;else delete M.client;if(W.apiKey!==void 0){let T=W.apiKey?.trim()??"";if(T)M.apiKey=T;else delete M.apiKey}if(W.headers!==void 0){let T=jL(W.headers);if(T)M.headers=T;else delete M.headers}if(W.timeoutMs!==void 0)if(typeof W.timeoutMs==="number")M.timeout=W.timeoutMs;else delete M.timeout;return $.saveProviderSettings(M,{setLastUsed:!1}),J.providers[Z]={provider:{name:X,baseUrl:Y,defaultModelId:L,protocol:B,client:H,capabilities:V,modelsSourceUrl:K},models:FY(D,V)},await m9(Q,J),D8(Z,J.providers[Z]),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:Q,modelsCount:D.length}}async function f7($,W){let Z=W.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=k1($),J=await U8(Q);if(!J.providers[Z])throw Error(`provider "${Z}" does not exist`);return delete J.providers[Z],await m9(Q,J),x0.unregisterProvider(Z),YL($,Z),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:Q}}function UY($,W,Z={}){let Q=W.trim();if(!Q)throw Error("providerId is required");let J=$.read().providers[Q]?.settings;return $.saveProviderSettings({...J??{},provider:Q},{setLastUsed:!1,tokenSource:Z.tokenSource}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function DY($,W={}){let Z=$.read(),Q=x0.getProviderIds(),J=await Promise.all(Q.map(async(X)=>{let[Y,V]=await Promise.all([x0.getProvider(X),x0.getModelsForProvider(X)]),B=JL(V),H=Z.providers[X]?.settings,G=$.getProviderSettings(X),K=Y?.name??QL(X),F=dg(Y?.capabilities,G?.capabilities),A=rg(Y?.metadata)??ig(Y);return{provider:{id:X,name:K,models:B.length,color:vg(X),letter:mg(K),enabled:Boolean(H),apiKey:G?xg(G):void 0,oauthAccessTokenPresent:G?gg(G):void 0,baseUrl:G?.baseUrl??Y?.baseUrl,defaultModelId:Y?.defaultModelId,protocol:G?.protocol??Y?.protocol,client:G?.client??Y?.client,capabilities:F,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:A,configValues:og(A,G,Y),modelList:B},rank:lg(Y?.metadata)}}));J.sort((X,Y)=>{if(X.rank!==Y.rank)return X.rank-Y.rank;return X.provider.name.localeCompare(Y.provider.name)||X.provider.id.localeCompare(Y.provider.id)});let j=J.map((X)=>X.provider);if(W.isClinePassEnabled!==!0)j=j.filter((X)=>X.id!==ZL);return{providers:j,settingsPath:$.getFilePath()}}async function _Y($,W){let Z=$.trim(),Q=await cg(Z,W),J=JL(Q);return{providerId:Z,models:J}}function _7($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function VL($,W){if(!_7(W))return _7($)?{...$}:void 0;let Z=_7($)?{...$}:{};for(let[Q,J]of Object.entries(W)){if(J==null||J===""){delete Z[Q];continue}if(_7(J)){let j=VL(Z[Q],J);if(j&&Object.keys(j).length>0)Z[Q]=j;else delete Z[Q];continue}Z[Q]=J}return Object.keys(Z).length>0?Z:void 0}function LY($,W){let Z=W.providerId.trim();if(W.enabled===!1){let j=$.read();if(delete j.providers[Z],j.lastUsedProvider===Z)delete j.lastUsedProvider;return $.write(j),{providerId:Z,enabled:!1,settingsPath:$.getFilePath()}}let J={...$.getProviderSettings(Z)??{},provider:Z};for(let j of["apiKey","baseUrl","model","region"])if(Object.hasOwn(W,j)&&typeof W[j]==="string")if(W[j].trim().length===0)delete J[j];else J[j]=W[j];for(let j of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(W,j))J[j]=W[j];for(let j of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(W,j)&&W[j]!=null){let X=VL(J[j],W[j]);if(X)J[j]=X;else delete J[j]}return $.saveProviderSettings(J,{setLastUsed:!1}),{providerId:Z,enabled:!0,settingsPath:$.getFilePath()}}async function fY($,W){let Z=W.trim(),Q=$.getProviderSettings(Z),j=x0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z]?.provider,X=Q?.baseUrl?.trim()||j?.baseUrl?.trim(),Y=FZ(X,j?.baseUrl,j?.modelsSourceUrl);if(!Q||!j||!X||!Y)return{providerId:Z,refreshed:!1};let V=await L7($,{providerId:Z,name:j.name,baseUrl:X,apiKey:Q.apiKey,headers:Q.headers??null,timeoutMs:Q.timeout??null,modelsSourceUrl:Y,protocol:Q.protocol??j.protocol??null,client:Q.client??j.client??null,capabilities:Q.capabilities??null});return{providerId:Z,refreshed:!0,modelsCount:V.modelsCount}}function OY($){let W=$.trim().toLowerCase(),Z=H0(W);if(Z)return Z.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function TY($,W,Z,Q){let J=H0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let j=B6({onPrompt:async(X)=>X.defaultValue??"",openUrl:Z,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return J.login({settings:W,callbacks:j,telemetry:Q})}function zY($,W,Z,Q,J){return Y2({manager:$,providerId:W,settings:Z,credentials:Q,setLastUsed:J?.setLastUsed})}async function qY($,W,Z,Q){let J=B6({onPrompt:async(j)=>j.defaultValue??"",openUrl:Z,onOpenUrlError:({error:j})=>{throw j instanceof Error?j:Error(String(j))}});return F4($,W,{callbacks:J,telemetry:Q})}function MY($){let W=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return W&&W.length>0?W:void 0}var HL={};w(HL,{getProviderConfigFields:()=>RY});import*as O7 from"@cline/llms";var sg=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],tg={"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 eg($,W){let Z={};for(let Q of sg){let J=$[Q],j=W[Q];if(J||j)Z[Q]={...J,...j}}return Z}function $m($){let W=tg[$.providerId];if(!W)return $;return{...$,description:W.description??$.description,fields:W.mode==="replace"?W.fields:eg($.fields,W.fields)}}var Wm=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function Zm($,W){if(!W?.provider.baseUrl)return!1;if(W.provider.source!=="system")return!0;return Wm.has($)}function RY($){let W=O7.normalizeProviderId($);if(z$(W))return{providerId:W,authMethod:"oauth",fields:{}};let Z=O7.MODEL_COLLECTIONS_BY_PROVIDER_ID[W];if(Z?.provider.capabilities?.includes("local-auth"))return{providerId:W,authMethod:"local",fields:{}};let Q=Z?.provider.baseUrl,J={apiKey:{}};if(Zm(W,Z))J.baseUrl={defaultValue:Q};return $m({providerId:W,authMethod:"api-key",fields:J})}var AL={};w(AL,{resolveLegacyClineAuth:()=>wY,migrateLegacyProviderSettings:()=>d9});import{existsSync as Qm,readFileSync as Jm}from"node:fs";import{dirname as jm,join as NY}from"node:path";import*as W4 from"@cline/llms";import{resolveClineDataDir as Xm}from"@cline/shared/storage";var T7="openai",FL=W4.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,GL=128000;function wY($){let W=$?.trim();if(!W)return;try{let Z=JSON.parse(W);if(!Z)return;let Q=typeof Z.expiresAt==="number"&&Number.isFinite(Z.expiresAt)?Z.expiresAt<10000000000?Z.expiresAt*1000:Z.expiresAt:void 0;return{accessToken:Z.idToken,refreshToken:Z.refreshToken,expiresAt:Q,accountId:Z.userInfo?.id}}catch{return}}function y($){let W=$?.trim();return W?W:void 0}function Ym($){return $==="credentials"?"iam":$}function KL($){if(!Qm($))return;try{let W=Jm($,"utf8"),Z=JSON.parse(W);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function Vm($){let W=$.dataDir??Xm(),Z=$.globalStatePath??NY(W,"globalState.json"),Q=$.secretsPath??NY(W,"secrets.json"),J=KL(Z),j=KL(Q);if(!J&&!j)return;return{globalState:J??{},secrets:j??{}}}function EY($){if($===T7)return FL;return $}function Bm($,W,Z,Q){let J=Z==="plan"?"planMode":"actMode",j=W===Q?y(Z==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,Y={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`}[W];return(Y?y(typeof $[Y]==="string"?$[Y]:void 0):void 0)??j}function Hm($,W,Z){let Q=Z==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,J=[...W==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...W==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(y).find(Boolean),j=J==="none"||J==="low"||J==="medium"||J==="high"||J==="xhigh"?J:void 0,X=typeof Q==="number"&&Number.isInteger(Q)&&Q>0?Q:void 0;if(!j&&X===void 0)return;return{...j?{effort:j}:{},...X!==void 0?{budgetTokens:X}:{}}}function Gm($){let W=$["openai-codex-oauth-credentials"];if(!W)return;try{let Z=JSON.parse(W),Q=y(Z.access_token),J=y(Z.refresh_token),j=y(Z.accountId);if(!Q&&!J&&!j)return;return{...Q?{apiKey:Q}:{},auth:{...Q?{accessToken:Q}:{},...J?{refreshToken:J}:{},...j?{accountId:j}:{}}}}catch{return}}function Km($){let W=W4.getGeneratedModelsForProvider($),Q=W4.getProviderCollectionSync($)?.provider.defaultModelId;if(Q&&W[Q])return Q;return Object.keys(W)[0]??void 0}function Fm($,W,Z,Q){let J=EY($),j=y(Q==="plan"?W.planModeApiProvider:W.actModeApiProvider),X=Bm(W,$,Q,j)??Km(J),Y=Hm(W,J,Q),V=typeof W.requestTimeoutMs==="number"&&Number.isInteger(W.requestTimeoutMs)&&W.requestTimeoutMs>0?W.requestTimeoutMs:void 0,B={anthropic:Z.apiKey,cline:Z.clineApiKey,openai:Z.openAiApiKey,"openai-native":Z.openAiNativeApiKey,openrouter:Z.openRouterApiKey,bedrock:Z.awsBedrockApiKey,gemini:Z.geminiApiKey,ollama:Z.ollamaApiKey,deepseek:Z.deepSeekApiKey,requesty:Z.requestyApiKey,together:Z.togetherApiKey,fireworks:Z.fireworksApiKey,qwen:Z.qwenApiKey,doubao:Z.doubaoApiKey,mistral:Z.mistralApiKey,litellm:Z.liteLlmApiKey,asksage:Z.asksageApiKey,xai:Z.xaiApiKey,moonshot:Z.moonshotApiKey,zai:Z.zaiApiKey,huggingface:Z.huggingFaceApiKey,nebius:Z.nebiusApiKey,sambanova:Z.sambanovaApiKey,cerebras:Z.cerebrasApiKey,groq:Z.groqApiKey,"huawei-cloud-maas":Z.huaweiCloudMaasApiKey,baseten:Z.basetenApiKey,"vercel-ai-gateway":Z.vercelAiGatewayApiKey,dify:Z.difyApiKey,minimax:Z.minimaxApiKey,hicap:Z.hicapApiKey,aihubmix:Z.aihubmixApiKey,nousResearch:Z.nousResearchApiKey,oca:Z.ocaApiKey},H={};if($==="openai-codex")Object.assign(H,Gm(Z));if($==="cline")try{let L=y(Z["cline:clineAccountId"]);if(L)H.auth={...H.auth??{},...wY(L)}}catch{}if($===T7&&W.openAiHeaders)H.headers=W.openAiHeaders;if($==="bedrock"){let L=Ym(W.awsAuthentication),_=L==="profile"||W.awsUseProfile===!0;H.aws={accessKey:y(Z.awsAccessKey),secretKey:y(Z.awsSecretKey),sessionToken:y(Z.awsSessionToken),region:y(W.awsRegion),authentication:L,profile:_?y(W.awsProfile):void 0,usePromptCache:W.awsBedrockUsePromptCache,useCrossRegionInference:W.awsUseCrossRegionInference,useGlobalInference:W.awsUseGlobalInference,endpoint:y(W.awsBedrockEndpoint),customModelBaseId:y(Q==="plan"?W.planModeAwsBedrockCustomModelBaseId:W.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")H.gcp={projectId:y(W.vertexProjectId),region:y(W.vertexRegion)};if($===T7&&(W.azureApiVersion||W.azureIdentity!==void 0))H.azure={apiVersion:y(W.azureApiVersion),useIdentity:W.azureIdentity};if($==="sapaicore"){let L=W.sapAiCoreUseOrchestrationMode??!0;H.sap={clientId:y(Z.sapAiCoreClientId),clientSecret:y(Z.sapAiCoreClientSecret),tokenUrl:y(W.sapAiCoreTokenUrl),resourceGroup:y(W.sapAiResourceGroup),deploymentId:L?void 0:y(Q==="plan"?W.planModeSapAiCoreDeploymentId:W.actModeSapAiCoreDeploymentId),useOrchestrationMode:L}}if($==="oca"){H.oca={mode:W.ocaMode};let L=y(Z.ocaRefreshToken);if(L)H.auth={...H.auth??{},refreshToken:L}}if($==="qwen")H.apiLine=W.qwenApiLine;if($==="moonshot")H.apiLine=W.moonshotApiLine;if($==="zai")H.apiLine=W.zaiApiLine;if($==="minimax")H.apiLine=W.minimaxApiLine;let G={anthropic:W.anthropicBaseUrl,openai:W.openAiBaseUrl,ollama:W.ollamaBaseUrl,lmstudio:W.lmStudioBaseUrl,litellm:W.liteLlmBaseUrl,gemini:W.geminiBaseUrl,requesty:W.requestyBaseUrl,asksage:W.asksageApiUrl,dify:W.difyBaseUrl,oca:W.ocaBaseUrl,aihubmix:W.aihubmixBaseUrl,sapaicore:W.sapAiCoreBaseUrl},K=y(B[$]),F=y(G[$]),A={provider:J,...K?{apiKey:K}:{},...X?{model:X}:{},...F?{baseUrl:F}:{},...Y?{reasoning:Y}:{},...V?{timeout:V}:{},...H},D=j6.safeParse(A);if(!D.success)return;return Object.keys(A).filter((L)=>L!=="provider").length>0?D.data:void 0}function Am($,W){if($!==FL)return;if(!W.baseUrl||!W.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:W.baseUrl,defaultModelId:W.model},models:{[W.model]:{id:W.model,name:W.model,contextWindow:GL,maxInputTokens:GL,capabilities:["streaming","tools","images"]}}}}function Um($,W){let Z=new Set;for(let J of[$.actModeApiProvider,$.planModeApiProvider]){let j=y(J);if(j)Z.add(j)}if(y(W.apiKey))Z.add("anthropic");if(y(W.openRouterApiKey))Z.add("openrouter");if(y(W.openAiApiKey))Z.add(T7);if(y(W.openAiNativeApiKey))Z.add("openai-native");if(y(W["openai-codex-oauth-credentials"]))Z.add("openai-codex");if(y(W.geminiApiKey))Z.add("gemini");if(y(W.ollamaApiKey))Z.add("ollama");if(y(W.awsAccessKey)||y(W.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||y($.awsProfile))Z.add("bedrock");if(y($.vertexProjectId)||y($.vertexRegion))Z.add("vertex");if(y(W.clineApiKey))Z.add("cline");let Q=wY(y(W["cline:clineAccountId"]));if(Q?.accessToken||Q?.refreshToken||Q?.accountId)Z.add("cline");if(y(W.ocaApiKey))Z.add("oca");if(y(W.sapAiCoreClientId)||y(W.sapAiCoreClientSecret)||y($.sapAiCoreTokenUrl)||y($.sapAiCoreBaseUrl)||y($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Z.add("sapaicore");return Z}function d9($){let W=$.providerSettingsManager.read(),Z=Vm($);if(!Z)return{migrated:!1,providerCount:Object.keys(W.providers).length,lastUsedProvider:W.lastUsedProvider};let{globalState:Q,secrets:J}=Z,j=Q.mode==="plan"?"plan":"act",X=Um(Q,J),Y=v$();Y.providers={...W.providers},Y.lastUsedProvider=W.lastUsedProvider;let V=new Date().toISOString(),B=0,H=NY(jm($.providerSettingsManager.getFilePath()),"models.json"),G=$4(H),K=0;for(let D of X){let U=EY(D);if(Y.providers[U])continue;let L=Fm(D,Q,J,j);if(!L)continue;Y.providers[U]={settings:L,updatedAt:V,tokenSource:"migration"},B+=1;let _=Am(U,L);if(_&&!G.providers[U])G.providers[U]=_,K+=1}if(B===0&&K===0)return{migrated:!1,providerCount:Object.keys(W.providers).length,lastUsedProvider:W.lastUsedProvider};let F=y(j==="plan"?Q.planModeApiProvider:Q.actModeApiProvider),A=F?EY(F):void 0;if(Y.lastUsedProvider=W.lastUsedProvider??(A&&Y.providers[A]?A:Object.keys(Y.providers)[0]),$.providerSettingsManager.write(Y),K>0)g9(H,G);return{migrated:B>0||K>0,providerCount:Object.keys(Y.providers).length,lastUsedProvider:Y.lastUsedProvider}}dQ();U0();f9();var UL={};w(UL,{FileTeamPersistenceStore:()=>z7});import{appendFileSync as Dm,existsSync as CY,mkdirSync as _m,readFileSync as Lm,renameSync as fm,unlinkSync as Om,writeFileSync as Tm}from"node:fs";import{join as PY}from"node:path";import{resolveTeamDataDir as zm}from"@cline/shared/storage";function qm($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class z7{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let W=qm($.teamName),Z=$.baseDir?.trim()||zm();this.dirPath=PY(Z,W),this.statePath=PY(this.dirPath,"state.json"),this.taskHistoryPath=PY(this.dirPath,"task-history.jsonl")}loadState(){if(!CY(this.statePath))return;try{let $=Lm(this.statePath,"utf8"),W=JSON.parse($);if(W.version!==1||!W.teamState)return;for(let Z of W.teammates??[])this.teammateSpecs.set(Z.agentId,Z);return zU(W.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 W={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Z=`${this.statePath}.tmp`;Tm(Z,`${JSON.stringify(W,null,2)}
|
|
757
|
+
`,"utf8"),fm(Z,this.statePath)}appendTaskHistory($){let W={};switch($.type){case"team_task_updated":W=$.task;break;case"team_message":W={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":W={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":W={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":W={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":W={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),Dm(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:W})}
|
|
758
|
+
`,"utf8")}ensureDir(){if(!CY(this.dirPath))_m(this.dirPath,{recursive:!0})}hasPersistableState($){let W=$.exportState();if(this.teammateSpecs.size>0)return!0;if(W.members.some((Z)=>Z.role==="teammate"))return!0;return W.tasks.length>0||W.mailbox.length>0||W.missionLog.length>0}clearPersistedState(){if(CY(this.statePath))Om(this.statePath)}}var DL={};w(DL,{ChatViewStateSchema:()=>SY,ChatSummarySchema:()=>E7,ChatSessionStatusSchema:()=>M7,ChatSessionConfigSchema:()=>q7,ChatMessageSchema:()=>N7,ChatMessageRoleSchema:()=>R7});import{z as I}from"zod";var q7=I.object({workspaceRoot:I.string().min(1),cwd:I.string().optional(),provider:I.string().min(1),model:I.string().min(1),mode:I.enum(["act","plan"]).default("act"),apiKey:I.string(),systemPrompt:I.string().optional(),rules:I.string().optional(),maxIterations:I.number().int().positive().optional(),enableTools:I.boolean(),enableSpawn:I.boolean().optional(),enableTeams:I.boolean().optional(),autoApproveTools:I.boolean().optional(),missionStepInterval:I.number().int().positive().optional(),missionTimeIntervalMs:I.number().int().positive().optional()}),M7=I.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),R7=I.enum(["user","assistant","tool","system","status","error"]),N7=I.object({id:I.string().min(1),sessionId:I.string().nullable(),role:R7,content:I.string(),createdAt:I.number().int().nonnegative(),meta:I.object({stream:I.enum(["stdout","stderr"]).optional(),toolName:I.string().optional(),iteration:I.number().int().nonnegative().optional(),agentId:I.string().optional(),conversationId:I.string().optional(),hookEventName:I.string().optional(),inputTokens:I.number().int().nonnegative().optional(),outputTokens:I.number().int().nonnegative().optional(),checkpoint:I.object({ref:I.string(),createdAt:I.number().int().nonnegative(),runCount:I.number().int().positive(),kind:I.enum(["stash","commit"]).optional()}).optional()}).optional()}),E7=I.object({toolCalls:I.number().int().nonnegative(),tokensIn:I.number().int().nonnegative(),tokensOut:I.number().int().nonnegative()}),SY=I.object({sessionId:I.string().nullable(),status:M7,config:q7,messages:I.array(N7),rawTranscript:I.string(),error:I.string().nullable(),summary:E7});var _L={};w(_L,{CORE_BUILD_VERSION:()=>l9});var l9=r8;import{Agent as Tv,createAgentRuntime as zv}from"@cline/agents";var LL={};w(LL,{fetchClineRecommendedModels:()=>yY,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>w7});import{getClineEnvironmentConfig as Mm}from"@cline/shared";var Rm=5000,w7={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 Nm($){return{recommended:$.recommended.map((W)=>({...W,tags:[...W.tags]})),free:$.free.map((W)=>({...W,tags:[...W.tags]})),clinePass:$.clinePass.map((W)=>({...W,tags:[...W.tags]}))}}function bY($){if(!$||typeof $!=="object")return null;let W=$;if(typeof W.id!=="string"||W.id.length===0)return null;return{id:W.id,name:typeof W.name==="string"&&W.name.length>0?W.name:W.id,description:typeof W.description==="string"?W.description:"",tags:Array.isArray(W.tags)?W.tags.filter((Z)=>typeof Z==="string"):[]}}function Em($){if(!$||typeof $!=="object")return null;let W=$,Z=Array.isArray(W.recommended)?W.recommended:[],Q=Array.isArray(W.free)?W.free:[],J=Array.isArray(W.clinePass)?W.clinePass:[],j=Z.map(bY).filter((V)=>V!==null),X=Q.map(bY).filter((V)=>V!==null),Y=J.map(bY).filter((V)=>V!==null);if(j.length===0&&X.length===0&&Y.length===0)return null;return{recommended:j,free:X,clinePass:Y}}function wm($){let W=$.baseUrl?.trim();if(W)return W;let Z=Mm().apiBaseUrl;try{return($.providerSettingsManager??new Y1).getProviderSettings("cline")?.baseUrl?.trim()||Z}catch{return Z}}async function Cm($,W,Z){let Q=new AbortController,J=setTimeout(()=>Q.abort(),Z);try{return await $(W,{signal:Q.signal})}finally{clearTimeout(J)}}async function yY($={}){try{let W=wm($),Z=$.fetchImpl??fetch,Q=await Cm(Z,`${W}/api/v1/ai/cline/recommended-models`,$.timeoutMs??Rm);if(!Q.ok)throw Error(`HTTP ${Q.status}`);let J=await Q.json(),j=Em(J);if(j)return j}catch{}return Nm(w7)}var fL={};w(fL,{loadLlmsConfigFromFile:()=>kY,defineLlmsConfig:()=>hY});import{readFile as Pm}from"node:fs/promises";import Sm from"node:path";function hY($){return $}async function kY($){let W=Sm.resolve($),Z=await Pm(W,"utf8"),Q;try{Q=JSON.parse(Z)}catch(J){let j=J instanceof Error?J.message:String(J);throw Error(`Failed to parse JSON config at "${W}": ${j}`)}return bm(Q,W)}function bm($,W){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${W}": expected an object.`);let Q=$.providers;if(!Array.isArray(Q))throw Error(`Invalid llms config in "${W}": "providers" must be an array.`);if(!Q.length)throw Error(`Invalid llms config in "${W}": "providers" cannot be empty.`);return $}var RL={};w(RL,{createLlmsSdk:()=>xY,DefaultLlmsSdk:()=>p9});import{BUILT_IN_PROVIDER_IDS as zL,createHandler as km,createHandlerAsync as Im,getProviderCollection as xm,hasProvider as qL,registerAsyncHandler as gm,registerHandler as mm,registerModel as vm,registerProvider as ML}from"@cline/llms";function OL($){return $?{...$}:{}}function ym($,W){if($)return $;if(!W)return;let Z=globalThis.process;if(!Z?.env)return;return Z.env[W]}function hm($,W){if(!W.length)throw Error(`Provider "${$}" must include at least one model.`)}function TL($){let W=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:W,defaultModel:$.collection.provider.defaultModelId,modelCount:W.length}}class IY{providers=new Map;register($){hm($.id,$.models);let W=$.defaultModel??$.models[0];if(!W)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(W))throw Error(`Default model "${W}" is not included in configured models for "${$.id}".`);let Z=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Z?.models??[],...$.models]),defaultModel:W,defaults:{...Z?.defaults??{},...OL($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:ym($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...OL($.settings)}})}registerModel($,W){let Z=this.providers.get($);if(!Z){this.providers.set($,{id:$,models:new Set([W]),defaultModel:W,defaults:{}});return}Z.models.add(W)}createHandlerConfig($){let W=this.require($.providerId),Z=$.modelId??W.defaultModel;if(!W.models.has(Z))throw Error(`Model "${Z}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Z,...W.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($,W){return this.providers.get($)?.models.has(W)??!1}require($){let W=this.providers.get($);if(!W)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return W}}class p9{configuredProviders=new IY;constructor($){this.applyConfig($)}createHandler($){return km(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return Im(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(ML($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)mm($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)gm($.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 W=$.exposeModels??Object.keys($.models),Z=$.defaultModel??W[0];if(!Z)throw Error(`Provider "${$.id}" must define a default model.`);ML({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Z,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:W,defaultModel:Z,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){vm($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...zL]}async getBuiltInProviders(){return(await Promise.all(zL.map((W)=>xm(W)))).filter((W)=>W!==void 0).map((W)=>TL({collection:W}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,W){return this.configuredProviders.hasModel($,W)}applyConfig($){for(let W of $.providers)this.configuredProviders.registerSelectionConfig(W);for(let W of $.models??[])this.registerModel(W);for(let W of $.customProviders??[])this.registerProvider(W);for(let W of this.configuredProviders.list()){let Z=qL(W.id),Q=this.configuredProviders.createHandlerConfig({providerId:W.id,modelId:W.defaultModel}).routingProviderId,J=typeof Q==="string"&&qL(Q);if(!Z&&!J)throw Error(`Provider "${W.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function xY($){return new p9($)}$X();async function cm(){return Promise.resolve().then(() => (dQ(),j_))}function Cv(){return new Date().toISOString()}var Pv="cline",Sv="cline-pass";function bv($){if(CL($)!=="providers.json")return;let W=mY($);if(CL(W)!=="settings")return;return mY(W)}class Y1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??wv(),this.dataDir=$.dataDir??bv(this.filePath),this.dataDir||!$.filePath)d9({providerSettingsManager:this,dataDir:this.dataDir});if(c9(this),v9(this.read()),gY(this.filePath))try{wL(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!gY(this.filePath))return v$();try{let $=Mv(this.filePath,"utf8"),W=JSON.parse($),Z=X6.safeParse(W);if(Z.success){v9(Z.data);let Q=Z.data.providers.cline?.settings?.auth;return s(`providers.read providers=[${Object.keys(Z.data.providers).join(",")}] lastUsed=${Z.data.lastUsedProvider??"none"} clineAuthPresent=${!!Q?.accessToken} clineAccessTokenHash=${R0(Q?.accessToken)} clineRefreshTokenHash=${R0(Q?.refreshToken)}`),Z.data}}catch{}return v$()}write($){let W=X6.parse($),Z=mY(this.filePath);if(!gY(Z))qv(Z,{recursive:!0,mode:448});let Q=`${this.filePath}.${process.pid}.tmp`;try{Ev(Q,`${JSON.stringify(W,null,2)}
|
|
759
|
+
`,{encoding:"utf8",mode:384}),Rv(Q,this.filePath)}catch(J){throw Nv(Q,{force:!0}),J}try{wL(this.filePath,384)}catch{}v9(W)}saveProviderSettings($,W={}){let Z=j6.parse($),Q=this.read(),J=Z.provider,j=W.setLastUsed!==!1,X=Q.providers[J],Y=W.tokenSource??X?.tokenSource??"manual",V={...Q,providers:{...Q.providers,[J]:{settings:Z,updatedAt:Cv(),tokenSource:Y}},lastUsedProvider:j?J:Q.lastUsedProvider};this.write(V);let B=Q.providers.cline?.settings?.auth,H=Z.provider==="cline"?Z.auth:V.providers.cline?.settings?.auth,G=!!B?.accessToken&&!H?.accessToken;return s(`providers.save providerId=${J} tokenSource=${Y} clineAuthWasPresent=${!!B?.accessToken} clineAuthIsPresent=${!!H?.accessToken} authDropped=${G}`),V}resolveProviderSettings($,W){let Z=$.providers[W]?.settings,J=H0(W)?.storageProviderId;if(!J||J===W)return Z;let j=$.providers[J]?.settings;if(!j)return Z;return j6.parse({...j.auth?{auth:j.auth}:{},...j.apiKey?{apiKey:j.apiKey}:{},...j.baseUrl?{baseUrl:j.baseUrl}:{},...Z??{},provider:W})}getProviderSettings($){let W=this.read();return this.resolveProviderSettings(W,$)}resolveLastUsedProviderId($,W){let Z=$.lastUsedProvider;if(Z===Sv&&W.isClinePassEnabled===!1)return Pv;return Z}getLastUsedProviderSettings($={}){let W=this.read(),Z=this.resolveLastUsedProviderId(W,$);if(!Z)return;return this.resolveProviderSettings(W,Z)}getProviderConfig($,W){let Z=this.getProviderSettings($);if(!Z)return;return e0(Z,W)}getLastUsedProviderConfig($={}){let W=this.getLastUsedProviderSettings($);if(!W)return;return e0(W,$)}async refreshCatalog(){try{await Q6({})}catch{}}}U0();N6();import{normalizeUserInput as yv}from"@cline/shared";import{nanoid as hv}from"nanoid";class PL{list($){return $?B1($):[]}update($,W){if(!$)return{sessionId:W.sessionId,prompts:[],updated:!1};let Z=W.promptId.trim(),Q=$.pendingPrompts.findIndex((V)=>V.id===Z);if(Q<0)return{sessionId:W.sessionId,prompts:B1($),updated:!1};let J=$.pendingPrompts[Q];if(!J)return{sessionId:W.sessionId,prompts:B1($),updated:!1};let j=W.prompt===void 0?J.prompt:yv(W.prompt).trim();if(!j)throw Error("prompt cannot be empty");let X=W.delivery??J.delivery,Y={...J,prompt:j,mode:W.mode??J.mode,delivery:X};return $.pendingPrompts.splice(Q,1),kv($,Y,Q,J.delivery),{sessionId:W.sessionId,prompts:B1($),prompt:C7(Y),updated:!0}}delete($,W){if(!$)return{sessionId:W.sessionId,prompts:[],removed:!1};let Z=W.promptId.trim(),Q=$.pendingPrompts.findIndex((j)=>j.id===Z);if(Q<0)return{sessionId:W.sessionId,prompts:B1($),removed:!1};let[J]=$.pendingPrompts.splice(Q,1);return{sessionId:W.sessionId,prompts:B1($),prompt:J?C7(J):void 0,removed:!0}}enqueue($,W){let{prompt:Z,mode:Q,delivery:J,userImages:j,userFiles:X}=W,Y=$.pendingPrompts.findIndex((V)=>V.prompt===Z);if(Y>=0){let[V]=$.pendingPrompts.splice(Y,1),B={...V,prompt:Z,mode:Q??V.mode,userImages:j??V.userImages,userFiles:X??V.userFiles};if(J==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...B,delivery:"steer"});else $.pendingPrompts.push(B)}else{let V={id:`pending_${Date.now()}_${hv(5)}`,prompt:Z,mode:Q,delivery:J,userImages:j,userFiles:X};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return B1($)}consumeSteer($){let W=$.pendingPrompts.findIndex((Q)=>Q.delivery==="steer");if(W<0)return{prompts:B1($)};let[Z]=$.pendingPrompts.splice(W,1);return{entry:Z,prompts:B1($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:B1($)}}requeueFront($,W){return $.pendingPrompts.unshift(W),B1($)}clear($){return $.pendingPrompts.length=0,[]}}class vY{deps;service=new PL;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let W=this.deps.getSession($.sessionId);if(!W||W.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Z=this.service.update(W,$);return this.emitPrompts(W),this.scheduleDrain($.sessionId,W),Z}delete($){let W=this.deps.getSession($.sessionId);if(!W||W.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Z=this.service.delete(W,$);return this.emitPrompts(W),this.scheduleDrain($.sessionId,W),Z}enqueue($,W){let Z=this.deps.getSession($);if(!Z||Z.aborting)return;this.service.enqueue(Z,W),this.emitPrompts(Z),this.scheduleDrain($,Z)}consumeSteer($){let W=this.deps.getSession($);if(!W)return;let{entry:Z}=this.service.consumeSteer(W);if(!Z)return;return this.emitPrompts(W),this.emitSubmitted(W,Z),Z}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:B1($)}})}scheduleDrain($,W){if(W.pendingPrompts.length===0||W.aborting||W.drainingPendingPrompts||!W.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let W=this.deps.getSession($);if(!W)return;if(W.aborting||W.drainingPendingPrompts)return;if(!W.agent.canStartRun())return;let{entry:Z}=this.service.shiftNext(W);if(!Z)return;this.emitPrompts(W),this.emitSubmitted(W,Z),W.drainingPendingPrompts=!0;let Q=!0;try{await this.deps.send({sessionId:$,prompt:Z.prompt,...Z.mode?{mode:Z.mode}:{},userImages:Z.userImages,userFiles:Z.userFiles})}catch{Q=!1,this.service.requeueFront(W,Z),this.emitPrompts(W)}finally{if(W.drainingPendingPrompts=!1,Q&&W.pendingPrompts.length>0&&W.status!=="failed"&&W.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,W){let Z=C7(W);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Z.id,prompt:Z.prompt,delivery:Z.delivery,attachmentCount:Z.attachmentCount,userImages:Z.userImages,userFiles:Z.userFiles}})}}function C7($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function B1($){return $.pendingPrompts.map(C7)}function kv($,W,Z,Q){if(W.delivery==="steer")$.pendingPrompts.unshift(W);else if(Q==="steer")$.pendingPrompts.push(W);else $.pendingPrompts.splice(Z,0,W)}U0();class uY{deps;constructor($){this.deps=$}dispatchAgentEvent($,W,Z){let Q=this.deps.getSession($),J={sessionId:$,config:W,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},j=u3(Z),X=!!Q&&(!j.agentId||j.agentId===cY(Q.agent));d3(J,Z,X?{isPrimaryAgentEvent:!0,agentId:cY(Q.agent),conversationId:Q.agent.getConversationId(),...Q?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,W){let Z=this.deps.getSession($);if(Z){if(hj(Z,W),W.type==="agent_event"){let Q={sessionId:$,config:Z.config,liveSession:Z,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};d3(Q,W.event,{agentId:W.agentId,teamRole:"teammate",teamAgentId:W.agentId,isPrimaryAgentEvent:!1})}if(W.type==="teammate_spawned"){let Q=a1({agentId:W.teammate.runtimeAgentId??W.agentId,conversationId:W.teammate.conversationId,parentAgentId:W.teammate.parentAgentId,createdByAgentId:cY(Z.agent),teamId:Z.runtime.teamRuntime?.getTeamId(),teamName:Z.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:W.agentId});if(Q)O$(Z.config.telemetry,{ulid:$,modelId:W.teammate.modelId??Z.config.modelId,provider:Z.config.providerId,...Q})}}if(await kj($,W,this.deps.invokeBackendOptional),Z)Ij(Z,$,W,this.deps.emit)}async handlePluginEvent($,W,Z){if(W.name==="plugin_log"){this.handlePluginLog($,W.payload);return}if(W.name==="automation_event"){let V=this.deps.getSession($)?.config.extensionContext?.automation??Z;if(!V)return;let B=W.payload&&typeof W.payload==="object"?W.payload:void 0;if(!B)return;await V.ingestEvent(B);return}if(W.name!=="steer_message"&&W.name!=="queue_message"&&W.name!=="pending_prompt")return;let Q=W.payload&&typeof W.payload==="object"?W.payload:void 0,J=typeof Q?.sessionId==="string"&&Q.sessionId.trim().length>0?Q.sessionId.trim():$,j=typeof Q?.prompt==="string"?Q.prompt.trim():"";if(!j)return;let X=W.name==="steer_message"?"steer":W.name==="queue_message"?"queue":Q?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(J,{prompt:j,delivery:X})}handlePluginLog($,W,Z){let Q=this.deps.getSession($),J=Z??Q?.config.extensionContext?.logger??Q?.config.logger;if(!J||!W||typeof W!=="object")return;let j=W,X=typeof j.message==="string"?j.message:"";if(!X)return;let Y=j.metadata&&typeof j.metadata==="object"?{...j.metadata}:{};if(Y.sessionId??=$,typeof j.pluginName==="string"&&j.pluginName)Y.pluginName=j.pluginName;if(j.level==="debug"){J.debug(X,Y);return}if(j.level==="error"){if(J.error)J.error(X,Y);else J.log(X,{...Y,severity:"error"});return}J.log(X,Y)}}function cY($){return $.getAgentId()}function dY($){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:o1($.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 lY($,W){let Z=$[W];return typeof Z==="function"?Z:null}async function SL($,W,...Z){let Q=lY($,W);if(!Q)throw Error(`session service method not available: ${W}`);return Promise.resolve(Q.apply($,Z))}async function bL($,W,...Z){let Q=lY($,W);if(!Q)return;await Promise.resolve(Q.apply($,Z))}async function yL($,W,...Z){let Q=lY($,W);if(!Q)return;return await Promise.resolve(Q.apply($,Z))}U1();U0();function pY($,W,Z){return{onSubAgentEvent:(Q)=>$.onAgentEvent(Z,W,Q),onSubAgentStart:(Q)=>{let J=$.getSession(Z)?.runtime.teamRuntime;$.subAgentStarts.set(Q.subAgentId,{startedAt:Date.now(),rootSessionId:Z});let j=a1({agentId:Q.subAgentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:Q.parentAgentId});if(j)O$(W.telemetry,{ulid:Z,modelId:W.modelId,provider:W.providerId,...j});J4(W.telemetry,{event:"started",ulid:Z,durationMs:0,parentId:Q.parentAgentId,agentId:Q.subAgentId,...j}),$.invokeBackendOptional("handleSubAgentStart",Z,Q)},onSubAgentEnd:(Q)=>{let J=$.getSession(Z)?.runtime.teamRuntime,j=$.subAgentStarts.get(Q.subAgentId),X=j?Date.now()-j.startedAt:0,Y=Q.result?.text?Q.result.text.split(`
|
|
760
|
+
`).length:0;J4(W.telemetry,{event:"ended",ulid:Z,durationMs:X,outputLines:Y,errorMessage:Q.error?String(Q.error):void 0,agentId:Q.subAgentId,parentId:Q.parentAgentId,...a1({agentId:Q.subAgentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:Q.parentAgentId})}),$.subAgentStarts.delete(Q.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Z,Q)}}}function rY($,W,Z,Q){let J=pY($,W,Z);return y$({configProvider:{getRuntimeConfig:()=>$.getSession(Z)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:W.providerId,modelId:W.modelId,cwd:W.cwd,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking,maxIterations:W.maxIterations,hooks:W.hooks,extensions:W.extensions,logger:W.logger,telemetry:W.telemetry},getConnectionConfig:()=>$.getSession(Z)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:W.providerId,modelId:W.modelId,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let X=W.enableTools?w2({cwd:W.cwd,...s0[r1({mode:W.mode})],executors:Q}):[];if(W.enableSpawnAgent)X.push(rY($,W,Z,Q));return i1(X)},...J})}import{readFile as Iv,stat as xv}from"node:fs/promises";var gv=20480000;async function hL($){let W=await xv($);if(!W.isFile())throw Error("Path is not a file");if(W.size>gv)throw Error("File is too large to read into context.");let Z=await Iv($,"utf8");if(Z.includes("\x00"))throw Error("Cannot read binary file into context.");return Z}var kL=5000;function r9($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function rv($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=$,Z=r9(W.inputTokens),Q=r9(W.outputTokens),J=r9(W.cacheReadTokens),j=r9(W.cacheWriteTokens),X=r9(W.totalCost);if(Z===void 0||Q===void 0||J===void 0||j===void 0||X===void 0)return;return{inputTokens:Z,outputTokens:Q,cacheReadTokens:J,cacheWriteTokens:j,totalCost:X}}function iv($,W){return{inputTokens:Math.max($.inputTokens,W.inputTokens),outputTokens:Math.max($.outputTokens,W.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,W.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,W.cacheWriteTokens),totalCost:Math.max($.totalCost,W.totalCost)}}function IL($,W){if(!W)return!1;if($.source_message_count!==W.source_message_count)return $.source_message_count<W.source_message_count;return Date.parse($.updated_at)<Date.parse(W.updated_at)}class y1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultLogger;defaultFetch;events=new e5;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new W2;constructor($){let W=vv();if(W)pv(W);let Z=d0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new n6,this.createAgentInstance=$.createAgent??((Q)=>new P$(Q)),this.defaultCapabilities=C0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new Y1,this.oauthTokenManager=$.oauthTokenManager??new a6({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultLogger=$.logger,this.defaultTelemetry?.setDistinctId(Z),this.defaultFetch=$.fetch,this.pendingPromptsController=new vY({getSession:(Q)=>this.sessions.get(Q),emit:(Q)=>this.emit(Q),send:(Q)=>this.runTurn(Q)}),this.pendingPrompts={list:async(Q)=>this.pendingPromptsController.list(Q.sessionId),update:async(Q)=>this.pendingPromptsController.update(Q),delete:async(Q)=>this.pendingPromptsController.delete(Q)},this.eventBridge=new uY({getSession:(Q)=>this.sessions.get(Q),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(Q)=>this.emit(Q),persistMessages:(Q,J,j)=>{this.invoke("persistSessionMessages",Q,J,j)},enqueuePendingPrompt:(Q,J)=>this.pendingPromptsController.enqueue(Q,J),invokeBackendOptional:(Q,...J)=>this.invokeOptional(Q,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let W=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!W?.apiKey)return $;return{...$,config:{...$.config,apiKey:W.apiKey}}}async startSession($){let W=$.source??F0.CLI,Z=Y0(),Q=$.config.sessionId?.trim()??"",J=Q||uv(),j=await this.applyInitialOAuthCredentials($),X=j.initialMessages??[],Y=X.length>0?p8(X):q0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let B=iY(V,J),H=iY(B,`${J}.messages.json`),G=iY(B,`${J}.json`),K=o1($.config),F=m0.parse({version:1,session_id:J,source:W,pid:process.pid,started_at:Z,status:"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:K,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:H}),A,D;if(Q.length>0&&X.length>0&&!j.prompt?.trim()){let b=await this.invokeOptionalValue("readSessionManifest",J);if(b)F=b,A={manifestPath:G,messagesPath:b.messages_path||H,compactionPath:b.compaction_path,manifest:b},D=await this.invokeOptionalValue("readSessionCompactionState",J)}let L=await this.seedAggregateUsageFromArtifacts({initialUsage:Y,sessionDir:B,rootMessagesPath:A?.messagesPath??H,manifest:F});this.usageBySession.set(J,Y),this.aggregateUsageBySession.set(J,L);let _=C0(this.defaultCapabilities,$.capabilities),M=_?.toolExecutors??this.toolExecutors,T=$.localRuntime,O=T?.extensionContext?.logger??T?.logger,f=T?.extensionContext?.automation,E,N={getSession:(b)=>this.sessions.get(b),subAgentStarts:this.subAgentStarts,onAgentEvent:(b,$0,h0)=>this.eventBridge.dispatchAgentEvent(b,$0,h0),invokeBackendOptional:(b,...$0)=>this.invokeOptional(b,...$0)};E=await MK({input:j,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultLogger:this.defaultLogger,defaultCapabilities:_,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(b)=>{if(b.name==="plugin_log"){this.eventBridge.handlePluginLog(J,b.payload,O);return}this.eventBridge.handlePluginEvent(J,b,f)},onTeamEvent:(b)=>{this.eventBridge.handleTeamEvent(J,b),E.config.onTeamEvent?.(b)},createSpawnTool:()=>rY(N,E.config,J,M),createSubAgentLifecycleCallbacks:(b)=>pY(N,b,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(b)=>{await this.persistSessionMetadata(J,()=>b)}});let l=IZ(j.sessionMetadata??A?.manifest.metadata,E.gitState);if(!A)F.metadata=l;let k=await this.runtimeBuilder.build(E.runtimeBuilderInput),P=E.config,o=E.providerConfig;if(k.teamRuntime&&!P.teamName?.trim())P.teamName=k.teamRuntime.getTeamName();let p=async()=>{let b=this.sessions.get(J);if(!b||!z$(b.config.providerId))return!1;try{return await this.syncOAuthCredentials(b,{forceRefresh:!0}),!0}catch{return!1}};k.delegatedAgentConfigProvider?.updateConnectionDefaults({onAuthError:p});let O0=[...k.tools,...P.extraTools??[]],F$=k.extensions??E.extensions,_8=j.initialCompactionState,A$,Z0=q4(P),I1=_8??D,U$=Z0&&I1?{...I1,conversation_id:I1.conversation_id?.trim()||J}:void 0,D$=Z0?M4({compact:Z0,getState:()=>A$?.compactionState,saveState:async(b)=>{let $0=A$;if(!$0)return;let h0={...b,conversation_id:$0.sessionId};try{if(!(await this.persistActiveSessionCompactionState($0,h0)).updated)P.logger?.debug?.("Skipped stale session compaction state",{sessionId:$0.sessionId,sourceMessageCount:h0.source_message_count})}catch(M0){P.logger?.error?.("Failed to persist session compaction state",{sessionId:$0.sessionId,error:M0}),J2(P.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:M0,context:{sessionId:$0.sessionId,providerId:P.providerId,modelId:P.modelId}})}}}):void 0,T0={sessionId:J,providerId:o.providerId,modelId:o.modelId,apiKey:o.apiKey,baseUrl:o.baseUrl,headers:o.headers,onAuthError:p,knownModels:o.knownModels,providerConfig:o,thinking:P.thinking,reasoningEffort:P.reasoningEffort??o.reasoningEffort,thinkingBudgetTokens:P.thinkingBudgetTokens,maxTokensPerTurn:P.maxTokensPerTurn,temperature:P.temperature,systemPrompt:P.systemPrompt,maxIterations:P.maxIterations,execution:P.execution,prepareTurn:D$,tools:O0,hooks:E.hooks,extensions:F$,hookErrorMode:P.hookErrorMode,initialMessages:E.effectiveInput.initialMessages,userFileContentLoader:hL,toolPolicies:E.toolPolicies,requestToolApproval:E.requestToolApproval?async(b)=>{let $0=E.requestToolApproval,h0=this.sessions.get(J);if(h0)await this.markTurnPending(h0);try{if(!$0)return{approved:!1,reason:"Tool approval callback is not configured."};return await $0(b)}finally{let M0=this.sessions.get(J);if(M0?.status==="pending")await this.markTurnRunning(M0)}}:void 0,telemetry:P.telemetry,onConsecutiveMistakeLimitReached:P.onConsecutiveMistakeLimitReached,completionPolicy:k.completionPolicy,consumePendingUserMessage:()=>{let b=this.pendingPromptsController.consumeSteer(J);return b?G9(b.prompt,b.mode??P.mode):void 0},logger:k.logger??P.logger,extensionContext:P.extensionContext,onEvent:(b)=>this.eventBridge.dispatchAgentEvent(J,P,b)};T0.hooks={...T0.hooks,onEvent:async(b)=>{if(await E.hooks?.onEvent?.(b),b.type!=="assistant-message")return;let $0=this.sessions.get(J);if(!$0)return;let h0=$0.agent.getMessages();try{await this.invoke("persistSessionMessages",J,h0,P.systemPrompt)}catch(M0){P.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:M0}),J2(P.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:M0,severity:"warn",handled:!0,context:{sessionId:J,providerId:P.providerId,modelId:P.modelId}})}}};let g0=this.createAgentInstance(T0);if(T0.onEvent)g0.subscribeEvents(T0.onEvent);k.registerLeadAgent?.(g0);let b0=a1({agentId:g0.getAgentId(),conversationId:g0.getConversationId(),teamId:k.teamRuntime?.getTeamId(),teamName:k.teamRuntime?.getTeamName(),teamRole:k.teamRuntime?"lead":void 0});if(NK(P,J,Q.length>0,K,b0),b0)O$(P.telemetry,{ulid:J,modelId:P.modelId,provider:P.providerId,...b0});if(k.teamRuntime)XW(P.telemetry,{ulid:J,teamId:k.teamRuntime.getTeamId(),teamName:k.teamRuntime.getTeamName(),leadAgentId:g0.getAgentId(),restoredFromPersistence:k.teamRestoredFromPersistence===!0});let g={sessionId:J,config:P,sessionMetadata:l,...A?{artifacts:A}:{},source:W,startedAt:A?.manifest.started_at??Z,updatedAt:A?.manifest.ended_at??A?.manifest.started_at??Z,pendingPrompt:F.prompt,runtime:k,agent:g0,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:X,compactionState:U$,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:E.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(A$=g,g.compactionState&&!this.isCompactionStateForSession(g.sessionId,g.compactionState,g))g.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:g.sessionId,conversationId:g.compactionState.conversation_id}),g.compactionState=void 0;if(this.sessions.set(J,g),A)await this.refreshActiveSessionGitMetadata(g,E.gitState);if(this.emitStatus(J,"running"),X.length>0&&!A){if(await this.ensureSessionPersisted(g),await this.invoke("persistSessionMessages",g.sessionId,X,g.config.systemPrompt),g.compactionState){if(!(await this.persistActiveSessionCompactionState(g,g.compactionState)).updated)g.compactionState=void 0}if(!j.prompt?.trim())await this.updateStatus(g,"completed",0)}let r0;try{if(j.prompt?.trim())if(r0=await this.executeTurn(g,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!g.interactive)await this.finalizeSingleRun(g,r0.finishReason);else await this.completeInteractiveTurn(g,r0.finishReason)}catch(b){if(g.interactive&&g.aborting)r0=await this.completeAbortedInteractiveTurn(g);else{J2(g.config.telemetry,{component:"core",operation:"session.start",error:b,severity:"error",handled:!1,context:{sessionId:g.sessionId,providerId:g.config.providerId,modelId:g.config.modelId}});try{await this.failSession(g)}catch($0){g.config.logger?.error?.("Session failure cleanup threw",{sessionId:g.sessionId,error:$0})}throw b}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:H,result:r0}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(W)=>this.getSession(W),readMessages:(W)=>this.readSessionMessages(W),buildStartInput:(W,Z)=>{let Q=W.restoredCheckpointMetadata?{...Z.sessionMetadata??{},checkpoint:W.restoredCheckpointMetadata}:Z.sessionMetadata;return{...Z,...Q?{sessionMetadata:Q}:{},initialMessages:W.initialMessages}},startSession:(W)=>this.startSession(W),getStartedSessionId:(W)=>W.sessionId,readRestoredSession:(W)=>this.getSession(W)})}async runTurn($){let W=this.getSessionOrThrow($.sessionId),Z=W.agent.canStartRun(),Q=$.delivery??(W.interactive&&!Z?"queue":void 0);if(W.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:Q??"immediate"}}),Q==="queue"||Q==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:Q,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(W,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!W.interactive)await this.finalizeSingleRun(W,J.finishReason);else await this.completeInteractiveTurn(W,J.finishReason);if(J.finishReason==="error"||J.finishReason==="aborted")return J;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),J}catch(J){if(W.interactive&&W.aborting)return await this.completeAbortedInteractiveTurn(W);throw J2(W.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:W.sessionId,providerId:W.config.providerId,modelId:W.config.modelId}}),await this.failSession(W),J}}async getAccumulatedUsage($){let W=Yj(this.usageBySession.get($)),Z=Yj(this.aggregateUsageBySession.get($));return W||Z?{usage:W,aggregateUsage:Z}:void 0}async abort($,W){let Z=this.sessions.get($);if(!Z)return;Z.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Z.aborting=!0,this.pendingPromptsController.clearAborted(Z),Z.agent.abort(W)}async stopSession($){let W=this.sessions.get($);if(!W)return;if(W.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),W.interactive&&!K0(W.status)){await this.releaseSessionRuntime(W,"session_stop");return}if(W.interactive&&W.agent.canStartRun()){await this.shutdownSession(W,{status:this.resolveInteractiveStopStatus(W),exitCode:this.resolveInteractiveStopExitCode(W),shutdownReason:"session_stop",endReason:"stopped"});return}W.aborting=!0,W.agent.abort(Error("session_stop")),await this.shutdownSession(W,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let W=[...this.sessions.values()];if(W.length===0)return;await Promise.allSettled(W.map((Z)=>Z.interactive&&!K0(Z.status)?this.releaseSessionRuntime(Z,$):Z.interactive&&Z.agent.canStartRun()?this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let W=this.sessions.get($);if(W)return dY(W);let Z=$.trim();if(!Z)return;let Q=await this.getRow(Z);if(Q)return s4(Q);let J=await this.readManifest(Z);return J?VQ(J):void 0}async listSessions($=200){let Z=(await this.listRows($)).map(s4),Q=new Set(Z.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(Q.has(J.sessionId))continue;Z.unshift(dY(J))}return Z.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let W=await this.invoke("deleteSession",$);if(W.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return W.deleted}async updateSession($,W){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:W.prompt,metadata:W.metadata,title:W.title}))?.updated===!0}}async updateSessionCompactionState($,W){let Z=$.trim();if(!Z)return{updated:!1};let Q=this.sessions.get(Z),J=Q?void 0:await this.getSession(Z);if(!(Q??J))return{updated:!1};if(Q){let Y=await this.readSessionMessages(Z),V=W.source_message_count>0&&Y.length>=W.source_message_count,B=V?Y:void 0;if(V){if(!await this.canPersistCompactionState(Z,W,Q,void 0,Y))return{updated:!1};Q.agent.restore(Y)}return await this.persistActiveSessionCompactionState(Q,W,B)}if(!await this.canPersistCompactionState(Z,W,void 0,J))return{updated:!1};let X=await this.invokeOptionalValue("readSessionCompactionState",Z);if(IL(W,X))return{updated:!1};return await this.invoke("persistSessionCompactionState",Z,W),{updated:!0}}async readSessionCompactionState($){let W=$.trim();if(!W)return;let Z=this.sessions.get(W);if(Z)for(;;){let Q=Z.compactionStateWriteQueue;if(!Q)return Z.compactionState;await Q.catch(()=>{return})}return await this.invokeOptionalValue("readSessionCompactionState",W)}isCompactionStateForSession($,W,Z,Q){let J=W.conversation_id?.trim();if(!J)return!0;if(J===$)return!0;let j=Z?.agent.getConversationId()?.trim()||Q?.conversationId?.trim();return j?J===j:!1}async canPersistCompactionState($,W,Z,Q,J){if(!W.conversation_id?.trim())return!1;if(!this.isCompactionStateForSession($,W,Z,Q))return!1;let j=J??Z?.agent.getMessages()??await this.readSessionMessages($);return V2(W,j)!==void 0}async persistActiveSessionCompactionState($,W,Z){if(!await this.canPersistCompactionState($.sessionId,W,$,void 0,Z))return{updated:!1};return await this.enqueueCompactionStateWrite($,async()=>{if(IL(W,$.compactionState))return{updated:!1};return await this.invoke("persistSessionCompactionState",$.sessionId,W),$.compactionState=W,{updated:!0}})}async enqueueCompactionStateWrite($,W){let Q=($.compactionStateWriteQueue??Promise.resolve()).catch(()=>{return}).then(W),J=Q.then(()=>{return},()=>{return});$.compactionStateWriteQueue=J;try{return await Q}finally{if($.compactionStateWriteQueue===J)$.compactionStateWriteQueue=void 0}}async readSessionMessages($){let W=$.trim();if(!W)return[];let Z=await this.getRow(W);if(Z?.messagesPath)return i$(Z.messagesPath);let Q=await this.readManifest(W);return i$(Q?.messages_path)}async dispatchHookEvent($){await YA($,{queueSpawnRequest:(W)=>this.invokeOptional("queueSpawnRequest",W),upsertSubagentSessionFromHook:(W)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",W),appendSubagentHookAudit:(W,Z)=>this.invokeOptional("appendSubagentHookAudit",W,Z),applySubagentStatus:(W,Z)=>this.invokeOptional("applySubagentStatus",W,Z)})}subscribe($,W){return this.events.subscribe($,W)}async updateSessionModel($,W){await this.updateSessionConnection($,{modelId:W})}async updateSessionConnection($,W){let Z=q2(W),Q=this.getSessionOrThrow($);if(Z.providerId!==void 0)Q.config.providerId=Z.providerId;if(Z.modelId!==void 0)Q.config.modelId=Z.modelId;if(Z.apiKey!==void 0)Q.config.apiKey=Z.apiKey;if(Z.baseUrl!==void 0)Q.config.baseUrl=Z.baseUrl;if(Z.headers!==void 0)Q.config.headers=Z.headers;if(Z.providerConfig!==void 0)Q.config.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"reasoningEffort"))Q.config.reasoningEffort=Z.reasoningEffort??void 0;if(Object.hasOwn(Z,"thinkingBudgetTokens"))Q.config.thinkingBudgetTokens=Z.thinkingBudgetTokens??void 0;if(Object.hasOwn(Z,"thinking")){if(Q.config.thinking=Z.thinking??void 0,Z.thinking===!1||Z.thinking===null)Q.config.reasoningEffort=void 0,Q.config.thinkingBudgetTokens=void 0}let J={...Z.providerId!==void 0?{providerId:Z.providerId}:{},...Z.modelId!==void 0?{modelId:Z.modelId}:{},...Z.apiKey!==void 0?{apiKey:Z.apiKey}:{},...Z.baseUrl!==void 0?{baseUrl:Z.baseUrl}:{},...Z.headers!==void 0?{headers:Z.headers}:{},...Z.providerConfig!==void 0?{providerConfig:Z.providerConfig}:{},...Object.hasOwn(Z,"reasoningEffort")?{reasoningEffort:Z.reasoningEffort??void 0}:{},...Object.hasOwn(Z,"thinking")?{thinking:Z.thinking??void 0}:{},...Object.hasOwn(Z,"thinkingBudgetTokens")?{thinkingBudgetTokens:Z.thinkingBudgetTokens??void 0}:{}};if(Z.thinking===!1||Z.thinking===null)J.reasoningEffort=void 0,J.thinkingBudgetTokens=void 0;let j={...Z.apiKey!==void 0?{apiKey:Z.apiKey}:{},...Z.baseUrl!==void 0?{baseUrl:Z.baseUrl}:{},...Z.headers!==void 0?{headers:Z.headers}:{}};if(Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults(J),Q.agent.updateConnection(Z),Q.runtime.teamRuntime?.updateTeammateConnections(j),Z.providerId||Z.modelId)await this.mutateSessionManifest(Q,(X)=>{if(Z.providerId)X.provider=Z.providerId;if(Z.modelId)X.model=Z.modelId})}async mutateSessionManifest($,W){let Z=$.artifacts;if(!Z)return;let Q=$.sessionId,j=(this.manifestMutationQueues.get(Q)??Promise.resolve()).then(async()=>{let Y=await this.invokeOptionalValue("readSessionManifest",Q)??Z.manifest;return W(Y),Z.manifest=Y,await this.invoke("writeSessionManifest",Z.manifestPath,Y),Y}),X=j.then(()=>{return},()=>{return});this.manifestMutationQueues.set(Q,X);try{return await j}finally{if(this.manifestMutationQueues.get(Q)===X)this.manifestMutationQueues.delete(Q)}}handlePluginEvent($,W,Z){return this.eventBridge.handlePluginEvent($,W,Z)}async executeTurn($,W){let Z=await this.prepareTurnInput($,W),Q=Z.prompt.trim(),J=Z?.userImages?.length,j=Z?.userFiles?.length;if(!Q&&!J&&!j)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=Q;await this.ensureSessionPersisted($),await this.refreshActiveSessionGitMetadata($),await this.syncOAuthCredentials($),await this.markTurnRunning($);try{let X=await this.executeAgentTurn($,Q,Z.userImages,Z.userFiles);while(xj($,X.finishReason)){let Y=await gj($);if(Y.length===0)break;let V=mj($,Y);X=await this.executeAgentTurn($,V)}return X}finally{await this.refreshActiveSessionGitMetadata($)}}async completeInteractiveTurn($,W){if(H9($))return;$.lastInteractiveTurnFinishReason=W,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let W=$.lastInteractiveTurnFinishReason;if(!W)return"cancelled";switch(W){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return W}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let W=new Date,Z=$.agent.getMessages(),Q=q0();return $.persistedMessages=Z,$.started=$.started||Z.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:Q}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:Q,messages:Z,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:W,endedAt:W,durationMs:0}}async executeAgentTurn($,W,Z,Q){let J=$.started||$.agent.getMessages().length>0,j=$.persistedMessages??$.agent.getMessages(),X=this.usageBySession.get($.sessionId)??q0(),Y=this.aggregateUsageBySession.get($.sessionId)??X;$.turnUsageBaseline=X,$.turnAggregateUsageBaseline=Y,$.turnPrimaryUsage=q0(),$.turnUsageByAgent=new Map,e9($.config.telemetry,$.sessionId,$.config.mode),L8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(W,Z,Q):()=>$.agent.run(W,Z,Q),B=await this.runWithAuthRetry($,V,j);$.started=!0;let H=WZ(B.messages,B,j);$.persistedMessages=H;let G=e4($.turnUsageByAgent?.values()??[]),K=L0(X,B.usage),F=L0(L0(q0(),B.usage),G),A=L0(Y,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(D)=>({...D??{},totalCost:K.totalCost,aggregatedAgentsCost:A.totalCost,usage:K,aggregateUsage:A})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,B),B}catch(V){throw J2($.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($,W){if($.submitAndExitObserved)return;if(!W.toolCalls.some((Q)=>Q.name===z0.SUBMIT_AND_EXIT&&Q.error===void 0))return;$.submitAndExitObserved=!0,Z4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,W){let Z=o1($.config),Q=lv(W.prompt).trim();if(!Q)return{prompt:"",userImages:W.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,W.userFiles)};let J=await h8(Q,Z);EK($.config.telemetry,J);let j=G9(J.prompt,W.mode??$.config.mode),X=this.resolveAbsoluteFilePaths($.config.cwd,W.userFiles),Y=this.resolveAbsoluteFilePaths(Z,J.matchedFiles),V=Array.from(new Set([...X,...Y]));return{prompt:j,userImages:W.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let W=o1($.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:W,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async refreshActiveSessionGitMetadata($,W){try{let Z=W??await OJ(o1($.config));if(!Z||!$.artifacts)return;if(fJ($.artifacts.manifest.metadata,Z))return;await this.persistSessionMetadata($.sessionId,(Q)=>IZ({...Q??{},...$.sessionMetadata??{}},Z))}catch(Z){$.config.logger?.debug?.("Failed to refresh session git metadata",{sessionId:$.sessionId,error:Z})}}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,W){let Z=this.sessions.get($),Q=await this.invokeOptionalValue("readSessionManifest",$)??Z?.artifacts?.manifest,J=W(Q?.metadata);if(!Z?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Z.sessionMetadata=J,Z.artifacts.manifest.metadata=J}async finalizeSingleRun($,W){if(H9($))return;let Z=W==="aborted"||$.aborting,Q=W==="error";await this.shutdownSession($,{status:Z?"cancelled":Q?"failed":"completed",exitCode:Q?1:0,shutdownReason:Q?"session_error":"session_complete",endReason:W})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,W){if(W.status==="completed"&&!$.submitAndExitObserved)Z4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});MQ($);let Z=[],Q=(J,j)=>{Z.push(j),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:j,severity:"warn"}),J2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:W.status,shutdownReason:W.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){await this.refreshActiveSessionGitMetadata($);try{await this.updateStatus($,W.status,W.exitCode)}catch(J){Q("update_status",J)}try{await $.agent.shutdown(W.shutdownReason)}catch(J){Q("agent_shutdown",J)}}try{await Promise.resolve($.runtime.shutdown(W.shutdownReason))}catch(J){Q("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){Q("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:W.endReason,ts:Date.now()}}),Z.length>0&&W.status==="failed")throw Z[0]}async releaseSessionRuntime($,W){let Z=[],Q=(J,j)=>{Z.push(j),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:j,severity:"warn"}),J2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:W,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(W)}catch(J){Q("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(W))}catch(J){Q("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){Q("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Z.length>0)throw Z[0]}async updateStatus($,W,Z){if(!$.artifacts)return;let Q=await this.invoke("updateSessionStatus",$.sessionId,W,Z);if(!Q.updated)return;let J=await this.mutateSessionManifest($,(j)=>{if(j.status=W,K0(W))delete j.ended_at,j.exit_code=null;else j.ended_at=Q.endedAt??Y0(),j.exit_code=typeof Z==="number"?Z:null});if(!J)return;$.status=W,$.updatedAt=Q.endedAt??Y0(),$.endedAt=K0(W)?null:J.ended_at,$.exitCode=J.exit_code,this.emitStatus($.sessionId,W)}async runWithAuthRetry($,W,Z){try{return await W()}catch(Q){if(!z$($.config.providerId)||!dv(Q))throw Q;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Z),W()}}async syncOAuthCredentials($,W){let Z=null;try{Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:W?.forceRefresh})}catch(Q){if(Q instanceof K8)throw Error(`${Q.providerId} requires re-authentication.`);throw Q}if(!Z?.apiKey||$.config.apiKey===Z.apiKey)return;$.config.apiKey=Z.apiKey,$.agent.updateConnection({apiKey:Z.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Z.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Z.apiKey})}getSessionOrThrow($){let W=this.sessions.get($);if(!W){let Z=new W$($);throw J2(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Z,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Z}return W}resolveAbsoluteFilePaths($,W){if(!W||W.length===0)return[];let Z=W.map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>cv(Q)?Q:nY($,Q));return Array.from(new Set(Z))}getSessionAgentTelemetryIdentity($){return a1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let W=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Z=L0($.initialUsage,W);return this.withPersistedAggregateUsageFloor(Z,$.manifest)}async summarizePersistedTeammateUsage($,W,Z){let Q=nY(W),J=`${Z}.messages.json`,j;try{j=mv($)}catch{return q0()}let X=q0();for(let Y of j){if(!Y.endsWith(".messages.json"))continue;if(Y===J)continue;let V=nY($,Y);if(V===Q)continue;let B=await i$(V);if(B.length===0)continue;X=L0(X,p8(B))}return X}withPersistedAggregateUsageFloor($,W){let Z=rv(W.metadata?.aggregateUsage);if(Z)return iv($,Z);let Q=W.metadata?.aggregatedAgentsCost;if(typeof Q!=="number"||!Number.isFinite(Q)||Q<=$.totalCost)return $;return{...$,totalCost:Q}}emitStatus($,W){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:W}})}async emitSessionSnapshot($){let W=await this.getSession($);if(!W)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:w1({session:W,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($)),kL))}async getRow($){let W=$.trim();if(!W)return;return(await this.listRows(kL)).find((Q)=>Q.sessionId===W)}async readManifest($){let W=$.trim();if(!W)return;return await this.invokeOptionalValue("readSessionManifest",W)}invoke($,...W){return SL(this.sessionService,$,...W)}invokeOptional($,...W){return bL(this.sessionService,$,...W)}invokeOptionalValue($,...W){return yL(this.sessionService,$,...W)}}function av($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((W)=>({name:W.name,input:W.input,output:W.output,error:W.error,durationMs:W.durationMs}))}}function ov($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function uQ($={}){let W=new y1({sessionService:new b1(new P1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Z){let Q=(Z.cwd?.trim()||Z.workspaceRoot).trim(),J=await W.startSession({source:Z.source?.trim()||F0.CLI,interactive:!1,config:{providerId:nv(Z.provider),modelId:Z.model,apiKey:Z.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:ov(Z),maxIterations:Z.maxIterations,enableTools:Z.enableTools!==!1,enableSpawnAgent:Z.enableSpawn!==!1,enableAgentTeams:Z.enableTeams!==!1,disableMcpSettingsTools:Z.disableMcpSettingsTools,missionLogIntervalSteps:Z.missionStepInterval,missionLogIntervalMs:Z.missionTimeIntervalMs},toolPolicies:Z.toolPolicies??{"*":{autoApprove:Z.autoApproveTools!==!1}},localRuntime:{configExtensions:Z.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Z,Q){let J=await W.runTurn({sessionId:Z,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((j)=>j.content)});if(!J)throw Error("local hub schedule runtime returned no turn result");return{result:av(J)}},async abortSession(Z){return await W.abort(Z,Error("hub schedule abort")),{applied:!0}},async stopSession(Z){return await W.stopSession(Z),{applied:!0}}}}import{release as sv}from"node:os";import{createClineTelemetryServiceConfig as tv}from"@cline/shared";U0();f9();var ev=300000,$c=5000;function xL(){let $=tv({metadata:{extension_version:l9,cline_type:"hub",platform:"cline-hub-daemon",platform_version:process.version,os_type:process.platform,os_version:sv()}}),W=t$($),Z,Q=()=>{try{return Z??=new Y1,Z.getProviderSettings("cline")?.auth}catch{return}},J,j=()=>{let Y=Q(),V=Y?.accountId?.trim();if(!Y||!V)return;let B=`${V}:${Y.organizationId??""}`;if(B===J)return;J=B,H1(W.telemetry,{id:V,provider:"cline",organizationId:Y.organizationId,organizationName:Y.organizationName,memberId:Y.memberId})};j();let X=setInterval(j,ev);return X.unref?.(),{telemetry:W.telemetry,dispose:async()=>{clearInterval(X);let Y;await Promise.race([(async()=>{await W.flush(),await W.dispose()})(),new Promise((V)=>{Y=setTimeout(V,$c),Y.unref?.()})]),clearTimeout(Y)}}}Zc(process.env.CLINE_VCR);function Jc($){let W=process.cwd(),Z,Q,J;for(let j=0;j<$.length;j+=1){let X=$[j],Y=$[j+1];if(X==="--cwd"&&Y){W=Y,j+=1;continue}if(X==="--host"&&Y){Z=Y,j+=1;continue}if(X==="--port"&&Y){let V=Number(Y);if(Number.isFinite(V))Q=V;j+=1;continue}if(X==="--pathname"&&Y)J=Y,j+=1}return{cwd:W,host:Z,port:Q,pathname:J}}async function jc(){let $=Jc(process.argv.slice(2));process.chdir($.cwd);let W=J1({host:$.host,port:$.port,pathname:$.pathname}),Z=xL(),Q;try{Q=await H8({host:W.host,port:W.port,pathname:W.pathname,owner:Qc()==="production"?j1():u0(),telemetry:Z.telemetry,runtimeHandlers:uQ({telemetry:Z.telemetry}),cronOptions:{workspaceRoot:$.cwd}})}catch(Y){throw await Z.dispose().catch(()=>{return}),Y}let J=async()=>{await Q.close(),await Z.dispose().catch(()=>{return}),process.exit(0)},j=!1,X=(Y,V)=>{if(j)return;j=!0;let B=V instanceof Error?V.stack||V.message:String(V);process.stderr.write(`[hub-daemon] ${Y}: ${B}
|
|
761
761
|
`),Q.close().catch((H)=>{let G=H instanceof Error?H.stack||H.message:String(H);process.stderr.write(`[hub-daemon] shutdown after ${Y} failed: ${G}
|
|
762
|
-
`)}).finally(()=>{Z.dispose().catch(()=>{return}).finally(()=>{process.exit(1)})})};process.on("SIGINT",()=>{J()}),process.on("SIGTERM",()=>{J()}),process.on("uncaughtException",(Y)=>{X("uncaughtException",Y)}),process.on("unhandledRejection",(Y)=>{if(Y instanceof
|
|
763
|
-
`);return}X("unhandledRejection",Y)}),await new Promise(()=>{})}
|
|
762
|
+
`)}).finally(()=>{Z.dispose().catch(()=>{return}).finally(()=>{process.exit(1)})})};process.on("SIGINT",()=>{J()}),process.on("SIGTERM",()=>{J()}),process.on("uncaughtException",(Y)=>{X("uncaughtException",Y)}),process.on("unhandledRejection",(Y)=>{if(Y instanceof Wc){process.stderr.write(`[hub-daemon] ignored agent runtime abort rejection: ${Y.message}
|
|
763
|
+
`);return}X("unhandledRejection",Y)}),await new Promise(()=>{})}jc().catch(($)=>{let W=$ instanceof Error?$.stack||$.message:String($);process.stderr.write(`[hub-daemon] fatal: ${W}
|
|
764
764
|
`),process.exit(1)});
|